忍者ブログ

(´゚д゚`)ンマッ!!

Ruby,JavaScriptについての備忘録として書きます。自分用です。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ニコニコ⇔YouTubeなブックマークレットを作った

ニコニコで音楽を聞いてるとき、若しくは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);


使いにくかったら適当に改造して使ってね

拍手[0回]

PR

Rubyで出力(print,puts)する時の文字コードを設定する

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
end
cputsがputsの文字コード指定版で、cprintがprintの文字コード指定版です。
どっちもやってることは同じです。というか、一行しか変わりません。

これを定義した後に、
cputs "こんにちわ"
cprint "ハロー, 世界。"
とすれば文字コードを変換して出力します。

出力する文字コードはグローバル変数、$CCODEで指定します。
$KCODEと同じく、最初の1文字目しか見てませんので、utf8と書いてもuと書いても結構です。
ただし、最初の1文字目が'w'の場合はNKH変換に$CCODEの内容をそのまま使いますので、
NKFのオプションが分かる方は'w16L0'等と指定することも出来ます。
NKFの主なオプションはこちらをご覧下さい
るびま - NKHの主なオプション

また、cputsとcprintのそれぞれの第2引数は、
cputsまたはcprintに渡される文字列の文字コードを指定できます。
文字コードが明確な場合は、指定する方が変換ミスがなくなるはずです。
もちろん、指定しなくても構いません。指定しなければ自動判別になります。

それと、kconvのString#tosjisなどの変換メソッドでは
半角カタカナが全角カタカナになったり、MIMEエンコードされている文字列を勝手にデコードしたりしますが、このメソッドではそのようなことはしません。
逆に言えば、そのようなことがしたいのであれば、NKH変換の部分を書き換えてください。
m0とxを削除すればおkだと思います。

どちらのメソッドの戻り値も、
変換に成功した場合はtrue、
変換に失敗($CCODEが指定されていない)した場合はfalse、です。

$CCODEが指定されていない場合は、普通にそのままprint、putsします。

拍手[0回]

Rubyのifとcaseでは、どちらが速いか

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万回回してみました。
結果は、
if Times: 2.171875s
case Times: 2.515625s

ifの==の方が少しだけ速いようですね。

結論、そんなに差はないけどどちらかというとifの方が速い

拍手[1回]

はじめまして

自分用に書いたクラスやメソッドを、忘れないためにメモります。
いっつもコードに埋もれて必要なときに何処行ったかわからなくなるんで・・・w


基本的にはRuby,JavaScriptの話が多いと思います。
技術不足のため、いろいろとバグやミスが在るかも知れませんが、
その時はコメントから教えていただけると勉強にもなるのでありがたいですw

拍手[0回]

Copyright © (´゚д゚`)ンマッ!! : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]

管理人限定

プロフィール

HN:
starlit
性別:
男性
自己紹介:
Ruby,JavaScriptでWebサービスとか作ったりしています。
こんなん作れば?とかもっとこうすれば?とかもあれば言ってください。

一緒になんか作ろうぜ!とか言う人は
是非メールなりなんなり送って下さい!

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

ブログ内検索

最新CM

カウンター