« 2007年11月 | メイン | 2008年01月 »

2007年12月 アーカイブ

2007年12月01日

Rubyで全ての漢字を列挙する

正しくは"UTF-8で表現できる"が接頭辞につきます。また、前提として僕はエンコードやらバイナリやらに関してはドがつく素人です。


すべての漢字を取り出す正規表現を以前読んでいて、ちょっと作りたいものがあって全ての漢字の列挙を行いたかったのでこれを参考にやってみた。
多分だけど、Rangeで範囲内の全ての漢字を取り出せるかなあと思って、まずは単純にirbで

("一".."龠").step(1){|s| puts s}

ってやった所、数百文字で止まり、しかも途中からは漢字ではない??みたいなのが出力されている。おかしい。どれくらいの範囲が確保されていて、どれくらい漢字でないものが含まれているんだろう。
unpackしてバイト列に直したものを10進数に変換してみる。
>> "一".unpack('C*').map{|i| i.to_s(16)}.join
=> "e4b880"
>> 0xe4b880
=> 14989440
>> "龠".unpack('C*').map{|i| i.to_s(16)}.join
=> "e9bea0"
>> 0xe9bea0
=> 15318688

ワオ、1文字3byteで、30万種類以上の漢字が詰め込めることになってる。多過ぎだろ漢字。ひょっとしたら詰め込み方にパターンがあるかもしれないので、とりあえず該当する文字と各バイトコードを全て取り出して、傾向を見てみる。今度は最初のコードみたく止まらずに出力された。
(14989440..15318688).step(1) do |i|
chr_a = i.to_s(16).scan(/../).map{|s| eval("0x#{s}")}
puts "#{chr_a.map{|i| i.chr}.join}\t#{chr_a.join(',')}"
end

出力ファイル (5MBあるから開かない方が無難)
首尾よくパターンを見つけた。第2・第3バイトは128から191までしか使われていない。
(14989440..15318688).step(1) do |i|
chr_a = i.to_s(16).scan(/../).map{|s| eval("0x#{s}")}
next unless(
chr_a[1] >= 128 &&
chr_a[1] <= 191 &&
chr_a[2] >= 128 &&
chr_a[2] <= 191
)
puts "#{chr_a.map{|i| i.chr}.join}\t#{chr_a.join(',')}"
end

出力ファイル
20897文字。とりあえず目的のものが得られた。
隙間があるのは将来増える文字達の為なのかなとか思いつつ、128とか191とかをフックにして調べてみたら何となく分かって来た。UTF-8はもともとUnicodeのサブセットなので、Unicodeと同等の情報量を3バイトで表現する為に第1バイトの頭4ビット、第2、第3バイトの頭2ビットが固定されているって感じかな。
この辺のエンコードのストラテジな話はRuby会議で外人さんが喋っていた気がするが、当時興味が無かったので聞き飛ばしてしまった。回り道をしない為にもその内ちゃんと勉強しようと思う。

続きを読む "Rubyで全ての漢字を列挙する" »

2007年12月04日

pixivから特定ユーザのイラストを全て取ってくる

mechanizeで。あるユーザさんのだけ取れればよかったのでこれはひどいコード。
この手のを書き散らす際にページング周りのDRY違反をいつも酷いなと思うんだけど、手続き的な書き方での実装速度的な最適解を次は考える。
つうかぶっちゃけRuby/mechanizeはそろそろ。。。

続きを読む "pixivから特定ユーザのイラストを全て取ってくる" »

2007年12月09日

Twitterのアイコンを福本顔にする

Twitter - Identgraph - 実用
からコードを丸パクリしました。すみません。すげえ勉強になるコードだった。
画像生成APIは一昨日のRailsLT@クックパッドで発表されていたKaoChart



user.js :
Twitter - IndentKaograph

2007年12月15日

漢字を類似度検索可能にする

アイデアとしては単純で、画像情報に落としたあとで全漢字pairに対して全pixelの一致数をカウントするだけ。
これの時にはリアルに全漢字でやろうとしてたんだけど、2万字=>4億ペアなので断念した。常用漢字1945文字を対象とする。
ActiveRecordやら何やら使いたかったけど、普通にやると結構面倒だったのでrailsでプロジェクト作ってscript/runnerした。

続きを読む "漢字を類似度検索可能にする" »

2007年12月17日

Greasemonkeyまとめをソート

はてなブックマーク関連のGreasemonkeyまとめから抽出。オレ用。多分漏れある。

続きを読む "Greasemonkeyまとめをソート" »

2007年12月20日

myminicityを核戦争後の世界みたいにする方法

myminicityがちょうおもしろくていろいろいじってます
では以下方法
1)Firebugが入ってるFireFoxでhttp://polog.myminicity.com/に行く
2)Firebugのconsoleに以下の内容を記述

$('client').style.display="none";var a=document.createElement('embed');a.width=600;a.height=400;a.flashvars="";a.type="application/x-shockwave-flash"; a.src="http://data.myminicity.com/swf/client.swf?v=0&name=polog&pop=1000000&ind=100000&tra=100000&sec=100000&env=100000&com=100000&k=3b8b1";a.allowscriptaccess="always";a.menu="false";a.name="client";a.scale="noscale";a.id="client";$('swf_client').appendChild(a);


3)実行

すると、大変なことに!!


続きを読む "myminicityを核戦争後の世界みたいにする方法" »

2007年12月24日

数値をサーモグラフィーっぽく色変換する

先日"これスコアリングの結果わかりやすく見せらんないかな?"って社長とペアプロ時に言われて、オレオレ変換で色・サイズのタグクラウド作ったら色の方だけ速攻却下喰らった。超くやしい。
と言う訳でちょっと勉強がてら書いてみた。
今一適当なarticleが見つからなかったのでjQueryのHeatColor pluginの中身をそのまんま実装。

続きを読む "数値をサーモグラフィーっぽく色変換する " »

Powered by
Movable Type 3.34