ニコニコで音楽を聞いてるとき、若しくはYouTubeで音楽を聞いているとき、
『これ音質悪いな、YouTube(ニコニコ)で探すか。』ってよくなるので、
どうせならそれを一発で出来るようにしようと思ってブックマークレット作りました。
まあ自分用なんであんまり動作確認とかしてないけど、
再生画面と検索画面ならお互い行き来できるはず。
ちなみにニコニコでもYouTubeでもないサイトで開くとニコニコ動画のTOPに飛ぶ仕様です。
ソースは載せる程じゃないけど、せっかくだから載せておきます。
というか、これ載せておくだけでまるでプログラム出来る人みたいになれるから。
ニコニコ動画⇔YouTube
javascript:(function(u){ /* YouTube */ if(u.match(/^http\:\/\/www.youtube.com\//)){ var k=encodeURI(document.title.replace(/^YouTube - /,'').replace(/ - YouTube$/,'')); location.href='http://www.nicovideo.jp/search/'+k+'?track=videowatch_search_keyword'; /* NicoNico */ }else if(u.match(/^http\:\/\/www.nicovideo.jp\//)){ var k=encodeURI(document.title.replace(/ ‐ ニコニコ動画(.*?)$/,'')); location.href='http://www.youtube.com/results?search_query='+k; }else{ location.href='http://www.nicovideo.jp/'; }})(location.href);
Windowsでプログラムしていると、
コマンドプロンプトの設定はsjisのままがいいけど、Rubyファイルはutf8で扱いたい。なんてことがよくあると思います。(俺だけ?)
で、その何が問題かと言うと、
「Rubyファイルの文字コードをutf8で保存すると、printやputsで出力したときに日本語が文字化けする」ってことです。
じゃあRubyファイルをsjisにするか、コマンドプロンプトをutf8にしろよっていう声が聞こえてきそうですが、
Rubyファイルはutf8じゃないといろいろと問題があって、コマンドプロンプトは他のsjisのプログラムが実行しにくくなるので嫌です。
ということで、出力するときの文字コードを指定できるメソッドを書いてみました。
#!/usr/bin/ruby $CCODE = 's' require 'nkf' def cputs(s,icode="") if icode!="" case icode[0,1].upcase when 'W' then i=icode when 'U' then i='W' when 'I' then i='J' else i=icode[0,1] end else i='' end if $CCODE!="" case $CCODE[0,1].downcase when 'w' then o=$CCODE when 'u' then o='w' when 'i' then o='j' else o=$CCODE[0,1] end else puts s;return false end puts NKF.nkf("-#{o}#{i}xm0", s) return true end def cprint(s,icode="") if icode!="" case icode[0,1].upcase when 'W' then i=icode when 'U' then i='W' when 'I' then i='J' else i=icode[0,1] end else i='' end if $CCODE!="" case $CCODE[0,1].downcase when 'w' then o=$CCODE when 'u' then o='w' when 'i' then o='j' else o=$CCODE[0,1] end else print(s);return false end print(NKF.nkf("-#{o}#{i}xm0", s)) return true endcputsがputsの文字コード指定版で、cprintがprintの文字コード指定版です。
cputs "こんにちわ" cprint "ハロー, 世界。"とすれば文字コードを変換して出力します。
Rubyのifとcase、どちらの処理が速いのかベンチマークを測定してみた。
標準でbenchmarkというライブラリがあるが、どうも使いにくいので簡単にやります。
2通りの結果しかない場合は、if、elseを使えば良いと思うので、
3通りに条件を分岐するという前提でやってみます。
a="d" n=1000000 st=Time.now n.times{ if a=="a" elsif a=="b" elsif a=="c" else end } puts "if Times: #{Time.now-st}s" st=Time.now n.times{ case a when "a" when "b" when "c" else end } puts "case Times: #{Time.now-st}s"100万回回してみました。