2007-02

Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DARAO×はてなブックマーク

ああ。こういうことか。

DARAO×はてなブックマーク

誰を観ればいいのかまだ分からんけど。
つか、はてなならRimoなのに何やっちゃってんだろう。

気に入ったビデオを観たら、ブックマークレットで特定のタグにブックマークするだけで、自分のチャンネルに新しい番組が追加される。
随時更新されるので視聴者を飽きさせない。人気動画をブックマークしちゃうと飽きられてしまうので、タグを分けると良いかな。
DARAOのURLを使うとFirefoxとIEで相違が出るので、上記サイトにあるリダイレクト用CGIのURLを使っていただきたい。人気ユーザーの調査もできますので。
スポンサーサイト

ビデオを選んでDARAOで流す

RimoDARAOがサービスインしたけど、DARAOに軍配。
こういうことができたから。

sakusakuの地元歌特集
http://hatena.from.tv/3

それぞれのサービスでチャンネルを作るアルゴリズムを考えてはいるんだろうけど、いらないのも出てくる。スキップすればいいのだけど。
DARAOでは検索ワードで流すこともできるけど、やっぱり不要なのが入ってくる。
それにみんなが人気ビデオばかり見ると新たな発見がないというのは心配し過ぎか。

ビデオ投稿者とは別の人が編集してチャンネル(番組)を作る、というのもありではないかと。

というわけでやっつけ仕事。
YouTubeJockey
YouTube API使ってごにょごにょしようか。

(追記)
ごにょごにょした。
おかげで編集するとえらい時間がかかる。
ちなみに上記ビデオの総時間は、合計: 1時間 16分 12秒。
redirect.cgiはFirefox対策。

[ARV] 開始日設定

Amazon Rank Viewerに表示開始日の設定を付けた。デフォルトで30日前から30日分を表示する。
開始日は変更可能。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784061498709&start=20070115
PubLineと同じように発売直後からの動き、というのをやりたいけど、登録されないとデータを取得していないのでできない。予約時から同じようにランキングに組み込まれていたりするし。

空文字列を与えると全データを表示。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784061498709&start=
パラメータそのものがないと直近30日分を表示する。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784061498709

[ARV] mingplotで対数グラフ

宿題に手を付けてみる。

Y軸を変えるのは、最小値の取り方でちょっとひっかかったけど、すんなり行った。
数字の表示が下の方で密集して見えなくなるのも、もうちょっと工夫が必要だけど、なんとか処置した。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784022731227&log=1

と思って本番環境に持っていったら、一部ISBNでグラフが出ない。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784774130422&log=1
failed assertion (MingError)とか言ってる。
よく見たら、せぐふぉめしてる。[BUG] Segmentation fault
お手上げします。


class MingChart
def convert_y (y, side)
if side == :left
y_min = @left_y_min
y_max = @left_y_max
else
y_min = @right_y_min
y_max = @right_y_max
end
raise if y < y_min or y > y_max
y_diff = Math.log10(y_max) - (y_min==0 ? 0 : Math.log10(y_min))

if (side == :left and @left_y_direction == :upside_down) or
(side == :right and @right_y_direction == :upside_down)
begin
(y_diff - (Math.log10(y_max) - Math.log10(y))) * (@y_length / y_diff) + @canvas_y_margin
rescue
(y_diff - Math.log10(y_max))*(@y_length / y_diff)+@canvas_y_margin
end

else
(y_diff - (y - y_min)) * (@y_length / y_diff) + @canvas_y_margin
end
end

def adjust_scale (min, max)
diff = max - min
raise if diff == 0

n, m = Math.frexp10(diff)
diff2 = (n * 10).round.to_f # 10-99

ndivisions = nil
interval = nil
[20, 10, 5, 2].each {|divider|
tmp = diff2 / divider
if (tmp >=16 and tmp < 64) or divider == 2
ndivisions = tmp.ceil
interval = (divider * 10 ** (m - 1)).to_f
break
end
}

adjusted_min = (min / interval).floor * interval
adjusted_max = adjusted_min + interval * ndivisions
while adjusted_max < max
adjusted_max += interval
ndivisions += 1
end
float_p = if interval.floor != interval then true else false end

raise if adjusted_max < max
raise if adjusted_min > min
return ndivisions, adjusted_min, adjusted_max, float_p
end

def add_scaleline (n, at, float_p)
string=''

text, width, height = create_text(string, @scale_text_color, @scale_font_size)
if at == :bottom
x_margin = - width / 2
y_margin = height + @scale_margin
xx = convert_x(n)
yy = @canvas_height - @canvas_y_margin
else
if at == :left
x_margin = - width - @scale_margin
xx = @canvas_x_margin
else
x_margin = @scale_margin
xx = @canvas_width - @canvas_x_margin
end
y_margin = height / 2
yy = convert_y(n, at)
end
line = SWFShape.new
line.set_line(@scale_line_width, *@scale_line_color.to_a)
line.move_pen_to(xx, yy)
if at == :bottom
line.draw_line(0, -@scale_line_length)
else
line.draw_line(@scale_line_length, 0) if at == :left
line.draw_line(-@scale_line_length, 0) if at == :right
end
@movie.add(line)
end


def add_scales
add_x_scale(@x_min, @x_float_p)
@x_nscales.times {|i|
x = @x_min + ((@x_max - @x_min).to_f / @x_nscales) * (i + 1)
add_x_scale(x, @x_float_p)
}

if @left_y_min and @left_y_max
add_y_scale(@left_y_min, :left, @left_y_float_p)
@left_y_nscales.times {|i|
y = @left_y_min +
((@left_y_max - @left_y_min).to_f / @left_y_nscales) * (i + 1)
if i < @left_y_nscales/4 or (i%8==0)
add_y_scale(y, :left, @left_y_float_p)
else
add_scaleline(y, :left, @left_y_float_p)
end

}
end

if @right_y_min and @right_y_max
add_y_scale(@right_y_min, :right, @right_y_float_p)
@right_y_nscales.times {|i|
y = @right_y_min +
((@right_y_max - @right_y_min).to_f / @right_y_nscales) * (i + 1)
if i < @right_y_nscales/4 or (i%8==0)
add_y_scale(y, :right, @right_y_float_p)
else
add_scaleline(y, :right, @right_y_float_p)
end
}
end
end

end


MingChart.newする時にパラメータを与えるんじゃなくてメソッド上書きしちゃってるけど。

ちなみにFlashの中身だけをJavaScriptで書き換えることはできないのかな。imgみたいにsrc=で。ここによるとできないってことでいいのか。

対数グラフか…

404 Blog Not Foundさんからトラックバックをいただきました
ありがとうございます。

宿題もいただきました。

このARV、希望を言うと、縦軸は対数スケールの方がよいかと思われます。その方がロングテールの実情にあってますし。


なるほど。
…と思ったものの。mingplotにそんなオプションがあれば楽勝だと思ったけど、見当たらない。Math.log10してから渡したら、Y軸が3.0~5.0とかになって格好悪い。mingchart.rb弄るしかないな。

Amazon.co.jpで見た本を紀伊國屋書店で立ち読み購入するGreasemonkey

Amazon Kinokuniya Linkyシリーズに追加。全店対応となります。

Amazon Kinonavi Linky2007/10/19 update

アマゾンの商品ページに紀伊國屋書店の在庫を表示します。
kinonavi1.jpg

新宿本店てどこやねん、という場合は店名をダブルクリックしてください。
最寄の店舗を選ぶことができます。選んだ店は保存されます。
kinonavi2.jpg

さらに「○在庫あり»」をクリックするとQRコードが表示されます。
kinonavi3.jpg

携帯で読み取ってお店へ持って行きましょう。
kinonavi4.jpg


(注)店頭の在庫状況は刻々と変わります。ご来店前にお電話にてお問い合わせください。とのことです。

紀伊國屋書店はウェブサービスやらAPIやらは公開していないが、これまでのハイブリッドウェブサービスに加えて、新しくキノナビ・モバイルを開始。全店舗の在庫を調べることができるようになった。
QRコードは先述の通り、自前のCGI。この時ISBNをサーバに送信する。別に収集しないけど。
リンク先のURLはiモード用ページになってるけど、テキスト版なので他のキャリアでも表示できるのかな。表示できない場合はソース中のc=itをetとかjtにしてください。
店舗選択のところの一覧表示がスマートに書けなかったな。AddEvenetListenerに変数を渡す方法に辿り着かず、羅列してしまった。

テーマ:書店 - ジャンル:本・雑誌

はてなQRコードAPI

これは隠れAPIなのか。

http://d.hatena.ne.jp/barcode?str=http://worris.blog61.fc2.com/?m

はてなのURLじゃなくても表示できるし。&を%26にエスケープするくらいか。
こっちは隠してないね。
しかし使ってもはてなに何も還元できないしなぁ。欲しいのはリソースじゃなくてソースであって、ここ見たら、Ruby版はruby-GDが要るのでめんどいと思ったけどPerl版があっさり動いたので自前サーバで動かすことにしよう。

«  | HOME |  »

移転しました。

ブログ引っ越しました。
無用の科学あるいは錬金術

 

株価情報

 

最近の記事

最近のコメント

 

最近のトラックバック

月別アーカイブ

カテゴリー

RSSフィード

ブログ内検索

 

なかのひと

 

ヘビーローテーション

 

 

リンク

広告

 

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。