<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6944970317852144473</id><updated>2012-01-31T19:13:11.522+09:00</updated><category term='App Engine'/><category term='英語'/><category term='Vim'/><category term='vimperator'/><category term='Kindle'/><category term='extensions'/><category term='iPhone'/><category term='Lucene'/><category term='Chrome'/><category term='Ruby'/><category term='Vimlike Smooziee'/><category term='Titanium'/><category term='Javascript'/><category term='ブックマークレット'/><category term='Rails'/><category term='sqlite'/><category term='ビジネス'/><category term='Solr'/><title type='text'>Silent Power</title><subtitle type='html'>Solr、Rails、Rubyなど技術系の話題を中心に書いていきます</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-3353789104202206429</id><published>2011-02-25T01:47:00.003+09:00</published><updated>2011-02-25T01:59:13.733+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Titanium'/><title type='text'>Titanium Mobileではパスワードを安全に保存できない</title><content type='html'>iPhoneアプリをTitaniumで作っている。&lt;br /&gt;&lt;br /&gt;iPhoneアプリでは、ログインのためのIDとパスワードを端末に保存することがよくある。それをTitaniumでどうやるのか調べた。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;結論：現時点では、TitaniumでIDとパスワードを安全に保存する方法はない。&lt;/b&gt;&lt;br /&gt;（2011年2月現在）&lt;br /&gt;&lt;br /&gt;そもそも、iOSでどうやって保存するのかというと、Keychain という仕組みを使ってパスワードを保存するのがよいらしい。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/tomute/20091121/1258884514"&gt;iPhoneアプリ用のログイン情報設定画面の作り方（その２）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そのKeychain を使うことが、Titaniumからはできない。&lt;br /&gt;&lt;br /&gt;本家のQ&amp;A。&lt;br /&gt;&lt;a href="http://developer.appcelerator.com/question/5401/best-practice-for-storing-user-authentication-credentials"&gt;Best practice for storing user authentication credentials?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;開発元AppceleratorのCEO、Jeff HaynieがKeychainをサポートする計画だと答えているが、1年経った今でもサポートされてはいないようだ。&lt;br /&gt;&lt;br /&gt;Keychainを使わないで平文でパスワードを保存するとどうなるか、そういうアプリはあるのかということも調べたので、別エントリーに書く予定。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-3353789104202206429?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/3353789104202206429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2011/02/titanium-mobile.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3353789104202206429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3353789104202206429'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2011/02/titanium-mobile.html' title='Titanium Mobileではパスワードを安全に保存できない'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-7370401397786474231</id><published>2010-11-09T06:55:00.000+09:00</published><updated>2010-11-09T06:55:23.322+09:00</updated><title type='text'>新Kindle（右）</title><content type='html'>&lt;div class="separator" style="clear: both"&gt;&lt;a href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/TNhwhMvntXI/AAAAAAAAAHo/PQljuycIWH4/s1600/IMAG0009.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="240" width="400" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/TNhwhMvntXI/AAAAAAAAAHo/PQljuycIWH4/s400/IMAG0009.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;カバーも合わせて買ったので、送料など合わせて18,000円くらい。&lt;br /&gt;画面の切り替えスピードとコントラストが改善されているということだけど、比べてみるとわざわざ買い換える必要もなかったかな？&lt;br /&gt;まあいいか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-7370401397786474231?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/7370401397786474231/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/11/kindle.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7370401397786474231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7370401397786474231'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/11/kindle.html' title='新Kindle（右）'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OWbpIlf4OEQ/TNhwhMvntXI/AAAAAAAAAHo/PQljuycIWH4/s72-c/IMAG0009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-3808896986278074785</id><published>2010-10-24T06:35:00.006+09:00</published><updated>2010-10-24T06:43:46.690+09:00</updated><title type='text'>Titanium MobileでAndroidがようやく起動</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/naoya/20101020"&gt;このエントリー&lt;/a&gt;を見て、Titaniumを使ってみたのだが、iPhoneエミュレータは動くのにAndroidのほうは一向に動かなかった。&lt;br /&gt;&lt;br /&gt;何回やっても、&lt;br /&gt;&lt;br /&gt;[INFO] Building ○○ for Android ... one moment&lt;br /&gt;&lt;br /&gt;のまま止まってしまうという現象にさんざん悩んだのだが、どうもjavaのPATHが通っていなかったからみたいだ。JAVA_HOMEは設定してあったし、コマンドプロンプトから普通にjavaも実行できていたので全く気付かなかった。エラー出してくれよといいたい。&lt;br /&gt;&lt;br /&gt;PATHに%JAVA_HOME%\binを追加して動作した。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_OWbpIlf4OEQ/TMNTq5D5a5I/AAAAAAAAAHk/8PN9STGzM2k/s1600/titanium.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" src="http://3.bp.blogspot.com/_OWbpIlf4OEQ/TMNTq5D5a5I/AAAAAAAAAHk/8PN9STGzM2k/s640/titanium.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;（でもKitchenSinkは結局動作せず。GitHubからダウンロードしてきたver1.4.0。）&lt;br /&gt;&lt;br /&gt;少し見た限りでは、JavaやObjective-Cで直接開発するよりずっと簡単に開発できそう。&lt;br /&gt;だいたいのことはできそうだった。&lt;br /&gt;&lt;br /&gt;ただ、検索結果でよくある、TableViewをスクロールすると自動で次を読み込んでくれる機能だけがどうやるかわからなかった。できるんだろうか。&lt;br /&gt;&lt;br /&gt;iPhoneだと行をたくさん読み込んでもうまくメモリ管理できるようになっていたと思うが、そのへんもどうなるんだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-3808896986278074785?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/3808896986278074785/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/10/titanium-mobileandroid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3808896986278074785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3808896986278074785'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/10/titanium-mobileandroid.html' title='Titanium MobileでAndroidがようやく起動'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OWbpIlf4OEQ/TMNTq5D5a5I/AAAAAAAAAHk/8PN9STGzM2k/s72-c/titanium.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-5363360652069076512</id><published>2010-08-20T22:17:00.000+09:00</published><updated>2010-08-20T22:17:21.394+09:00</updated><title type='text'>HTC Desire</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OWbpIlf4OEQ/TG5007MvRxI/AAAAAAAAAHU/IqJa_0YRQmM/s1600/desire.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_OWbpIlf4OEQ/TG5007MvRxI/AAAAAAAAAHU/IqJa_0YRQmM/s320/desire.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;左は2009年版iPod Touch。右がHTC Desire（X06HT）。&lt;br /&gt;&lt;br /&gt;品薄が続いていたHTC Desireをようやくさわることができたのだけど、予想以上にいい。&lt;br /&gt;サクサク動くし、なかなかの高級感。&lt;br /&gt;有機ELのディスプレイは驚くほど綺麗で、2009年版iPod Touchでは勝負にならない。&lt;br /&gt;iPhone 4と比べるとどうだろうか？&lt;br /&gt;&lt;br /&gt;Androidといえばこのあいだ日本Androidの会のイベントに参加したとき、Galaxy Sを触らせてもらったが 、機能はともかく質感が好みじゃなかったな。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;それにしても、はじめてじっくりAndroid機をさわって、Androidの進化に驚いた。&lt;/div&gt;&lt;div&gt;自由度が高いことやブラウザが使いやすいことなどを考えると、&lt;/div&gt;&lt;div&gt;少なくとも自分にとっては、すでにiPhoneを超えてる。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-5363360652069076512?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/5363360652069076512/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/08/htc-desire.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5363360652069076512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5363360652069076512'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/08/htc-desire.html' title='HTC Desire'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OWbpIlf4OEQ/TG5007MvRxI/AAAAAAAAAHU/IqJa_0YRQmM/s72-c/desire.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-8659560013061731128</id><published>2010-05-31T01:10:00.002+09:00</published><updated>2010-05-31T01:13:18.764+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='英語'/><title type='text'>TOEICを初受験</title><content type='html'>正確にははるか昔、新卒で会社に入社する前に受けさせられたことがあるが、自分で申し込んで会場に出向いて受験するのははじめてだ。&lt;br /&gt;その大昔の受験では、体調が悪いこともあったのだが（と言い訳）、450点くらいの点数を叩き出し、内定が取り消されるんじゃないかと半ば本気で心配したものだ。&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;今回はたぶん600～650点くらいだろうか。&lt;br /&gt;今年中に900点を目標としていることから考えればボロボロと言えるのかもしれないが、以前受けたときのように全く歯が立たない感じではなかった。&lt;br /&gt;半年後の11月30日にまた受験する予定だが、半年しっかりやれば十分900点をとることは可能だと感じた。&lt;br /&gt;&lt;br /&gt;まあ、900点をとったからといって特別どうということはないのだが、ひとつの指標としてわかりやすいので。&lt;br /&gt;&lt;br /&gt;おそらく試験に慣れただけで何十点かはアップできるはず。&lt;br /&gt;次回から気をつけようと思うことをいくつか書いておく。&lt;br /&gt;&lt;br /&gt;・&lt;b&gt;リスニングでは、選択肢を先に読もうとしない&lt;/b&gt;&lt;br /&gt;選択肢を先に読んだほうがよいというアドバイスを聞いたことがあるが、少なくとも自分の場合は選択肢を読もうとしたことによってテープに集中できず、何問か落とした。英語力がそれほどでもない人は、選択肢を先に読もうとしないほうがいいと思う。&lt;br /&gt;逆に英語力が高い人はテープのスピードで問題を解けば十分だろう。&lt;br /&gt;つまり、いずれにしても無理に選択肢を先に読む必要はない。&lt;br /&gt;&lt;br /&gt;・&lt;b&gt;問題のレイアウトに注意する&lt;/b&gt;&lt;br /&gt;これはTOEIC側が改善すべき問題だと思うのだが、縦に問題文が並んでいるのを横に見てしまって何問か失敗した。&lt;br /&gt;真ん中に区切り線を入れればよいと思うのだが…。&lt;br /&gt;&lt;br /&gt;・&lt;b&gt;時間は足りる&lt;/b&gt;&lt;br /&gt;実際、今回は少し足りなかったのだけど、たまに耳にするようにリーディングでは速読できないと間に合わないとか、そういう感じではなかった。&lt;br /&gt;普通に読めれば十分間に合う。次回は間に合うはず。&lt;br /&gt;&lt;br /&gt;・&lt;b&gt;集中力を切らさない&lt;/b&gt;&lt;br /&gt;リスニングもリーディングも、最後の方で集中力が切れた。&lt;br /&gt;休憩なしで長時間やらなければいけないので、睡眠時間はしっかりとっておいたほうがいい。&lt;br /&gt;ただ、英語力の底上げをすれば、ずっと高い集中力を維持しつづける必要もなくなって、難なく最後まで戦えるようになるのかもしれない。&lt;br /&gt;&lt;br /&gt;集中力が切れた原因のひとつに、座席が悪かったこともある。受験会場は東洋大学で、机と椅子が一体になったタイプの座席だったのだが、机があまりにも低すぎたせいで、腰や首が痛くなって大変だった。&lt;br /&gt;別の会場だともっと良い席だったりするのだろうか。だとしても会場は選べないのでどうしようもないのだが、あの席はつらすぎる。&lt;br /&gt;&lt;br /&gt;ところで、今回TOEICをはじめて受けてみて、受験票や問題用紙に書かれている指示内容がやたらと上から目線なのが気になった。&lt;br /&gt;TOEICは財団法人というものだそうなので、民間の感覚ではないのだろう。TOEICに限らずこういう試験はだいたいそうなのかもしれないが。&lt;br /&gt;となると、巨額の受験料収入がどんなふうに使われているのか気にもなってくるが･･･、話がずれるのでこの辺でやめとこう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-8659560013061731128?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/8659560013061731128/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/05/toeic.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8659560013061731128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8659560013061731128'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/05/toeic.html' title='TOEICを初受験'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-5706177198533237715</id><published>2010-05-26T01:04:00.084+09:00</published><updated>2010-05-26T03:20:10.717+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine'/><title type='text'>Google App Engineの超入門プレゼン資料</title><content type='html'>会社でプレゼンした資料です。&lt;br /&gt;デモを中心に20分くらいでやりました。&lt;br /&gt;&lt;br /&gt;App Engineに限らず、新しいフレームワークや開発環境を習得するのは最初が一番難しいものですが、これをおさえればすぐにはじめられる、という内容になるようにポイントを絞りました。&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="prezi-player"&gt;&lt;style media="screen" type="text/css"&gt;.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" height="400" id="prezi_rmexs-tnxf6j" name="prezi_rmexs-tnxf6j" width="550"&gt;&lt;param name="movie" value="http://prezi.com/bin/preziloader.swf"/&gt;&lt;param name="allowfullscreen" value="true"/&gt;&lt;param name="allowscriptaccess" value="always"/&gt;&lt;param name="bgcolor" value="#ffffff"/&gt;&lt;param name="flashvars" value="prezi_id=rmexs-tnxf6j&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no"/&gt;&lt;embed id="preziEmbed_rmexs-tnxf6j" name="preziEmbed_rmexs-tnxf6j" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=rmexs-tnxf6j&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div class="prezi-player-links"&gt;&lt;a href="http://prezi.com/rmexs-tnxf6j/google-app-engine/" title="Google App Engine入門"&gt;Google App Engineを使ってみよう&lt;/a&gt; on &lt;a href="http://prezi.com/"&gt;Prezi&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;口頭で説明することを前提に書いたので、これを読むだけではあんまりわからないかもしれないので補足すると、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;URLのリクエストからの流れを把握する&lt;/li&gt;&lt;li&gt;MVCに相当する機能を抑える&lt;/li&gt;&lt;li&gt;データストア（モデル）の挙動を確認するのに&lt;b&gt;Development Console&lt;/b&gt;を使うと便利&lt;/li&gt;&lt;/ul&gt;というあたりがポイントでしょうか。&lt;br /&gt;&lt;br /&gt;テンプレート機能では、共通のレイアウトを使う仕組みがあるのも要チェックです。&lt;br /&gt;Railsでいうapp/views/layouts/application.html.erbなどのような感じです。&lt;br /&gt;&lt;br /&gt;{% block XXX %}&lt;br /&gt;……&lt;br /&gt;{% endblock %}&lt;br /&gt;&lt;br /&gt;はRailsのcontent_forと似てますね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ところで、今回使ってみたこのプレゼンツールは&lt;a href="http://prezi.com/"&gt;Prezi&lt;/a&gt;といいます。&lt;br /&gt;とても便利なのでおすすめです。&lt;br /&gt;&lt;br /&gt;ズームイン、ズームアウトやフォーカスが動いていくところのエフェクトもすごいので、演出としても効果的なのですが、PowerPointのような紙芝居式のプレゼンと違って、全体が1つの絵になるところが良いと思います。&lt;br /&gt;&lt;br /&gt;システム構成などの説明にも使えそうですし、抽象的な話でも、全体像はこういうことで、掘り下げるとこういう話になるという階層構造が一目で表現できます。説明を聞く側も理解しやすいでしょう。&lt;br /&gt;&lt;br /&gt;次にまた何かの資料を作るときは、もう少しうまくPreziを使ってみようと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-5706177198533237715?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/5706177198533237715/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine20.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5706177198533237715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5706177198533237715'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine20.html' title='Google App Engineの超入門プレゼン資料'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-99314535919382167</id><published>2010-05-18T21:50:00.003+09:00</published><updated>2010-05-18T22:00:03.943+09:00</updated><title type='text'>msysGitをインストールしたらコマンドプロンプトが文字化け</title><content type='html'>msysGitをインストールしたら、コマンドプロンプトで日本語が表示できなくなった。（Windows 7 64bit）&lt;br /&gt;&lt;br /&gt;regeditでレジストリエディターを起動し、&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;の「0」のデータが「&lt;b&gt;Lucida Console&lt;/b&gt;」になっていたので、「&lt;b&gt;*ＭＳ ゴシック&lt;/b&gt;」に変更して、とりあえず復旧できた。&lt;br /&gt;&lt;br /&gt;インストールの途中で、&lt;b&gt;Use a True Type font in the console&lt;/b&gt;という項目のチェックをはずせば、文字化けしなかったのかもしれない（未確認）。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-99314535919382167?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/99314535919382167/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/05/msysgit.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/99314535919382167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/99314535919382167'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/05/msysgit.html' title='msysGitをインストールしたらコマンドプロンプトが文字化け'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-58500882656647607</id><published>2010-05-16T22:48:00.004+09:00</published><updated>2010-05-16T22:51:45.888+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine'/><title type='text'>Google App Engineでゼロからはじめてサイト公開まで（2．開発の準備）</title><content type='html'>&lt;a href="http://silentpower2.blogspot.com/2010/05/google-app-engine.html"&gt;前回&lt;/a&gt;は、作ろうとしているアプリの概要のお話でした。&lt;br /&gt;今回は、インストールから開発準備が整うまでをやっていきます。&lt;br /&gt;&lt;br /&gt;Windowsで作っていきますが、他の環境でも、GUIツールの代わりにコマンドを叩くこと意外はだいたい同じだと思います。&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;インストール&lt;/h4&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Python2.5&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/intl/ja/appengine/downloads.html"&gt;Google App Engine SDK for Python&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;を順にインストールします。&lt;br /&gt;そのまま素直にインストールすればOKですので、特に問題はないでしょう。&lt;br /&gt;&lt;br /&gt;App Engineでは今のところ、Python2.5じゃないとダメみたいなので注意。&lt;br /&gt;&lt;a href="http://www.python.jp/Zope/download/pythoncore"&gt;ここ&lt;/a&gt;から2.5のWindows用インストーラをダウンロードするとよいとでしょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;アプリケーションの新規作成&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;Google App Engine Launcher&lt;/b&gt;を起動し、File → Create New Applicationを選びます。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Application Name&lt;/b&gt;にアプリ名（今回はshare-dial）、&lt;b&gt;Parent Directory&lt;/b&gt;に任意のパスを入れて作成します。あとでいくらでも変更できるので、心配せずに作ってしまいましょう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OWbpIlf4OEQ/S-_y9HjSMVI/AAAAAAAAAHE/88x481scHkE/s1600/add_new_application.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OWbpIlf4OEQ/S-_y9HjSMVI/AAAAAAAAAHE/88x481scHkE/s320/add_new_application.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;pathのフォルダを開いてみると、以下の３つのファイルが自動的に生成されていますね。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;app.yaml&lt;/li&gt;&lt;li&gt;index.yaml&lt;/li&gt;&lt;li&gt;main.yaml&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;ここにアプリを書いていくことになります。それはまた次回。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;アプリケーションの起動&lt;/h4&gt;&lt;br /&gt;作成されたアプリを選択し、Runボタンを押すと、アプリが起動します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S-_0ishaP0I/AAAAAAAAAHM/jsmdRgOerbI/s1600/run.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S-_0ishaP0I/AAAAAAAAAHM/jsmdRgOerbI/s320/run.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ブラウザで、起動したポートにあわせて http://localhost:8080/を開くと、&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hello world!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;が表示されます。&lt;br /&gt;&lt;br /&gt;次回はいよいよ開発スタートです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-58500882656647607?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/58500882656647607/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/58500882656647607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/58500882656647607'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine2.html' title='Google App Engineでゼロからはじめてサイト公開まで（2．開発の準備）'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OWbpIlf4OEQ/S-_y9HjSMVI/AAAAAAAAAHE/88x481scHkE/s72-c/add_new_application.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-3629882599794431097</id><published>2010-05-16T18:55:00.010+09:00</published><updated>2010-05-16T23:10:02.514+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine'/><title type='text'>Google App Engineでゼロからはじめてサイト公開まで（１.アプリの概要）</title><content type='html'>&lt;a href="http://silentpower2.blogspot.com/2010/04/google-app-enginedjango.html"&gt;Djangoを使って作ろうと思っていた&lt;/a&gt;のですが、覚えるのに時間がかかりそうだったので、後回し。&lt;br /&gt;&lt;br /&gt;まずはGoogle App Engineの標準的な作成方法に慣れてからということで、通常のwebappを使って、サイトを作ってみます。&lt;br /&gt;&lt;br /&gt;作成するのは、シンプルな便利ツール。&lt;br /&gt;実際に公開する予定のものを、ゼロから覚えながら開発して、公開するまでの過程を書いていきます。&lt;br /&gt;&lt;br /&gt;十分シンプルで、しかもチュートリアルのためのサンプルではなく、実際に公開予定の、自分があったら便利だと思うアプリなので、App Engineの入門としても参考になるのではないかと思います。&lt;br /&gt;&lt;br /&gt;以下、これから作るアプリの概要です。&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;アプリ名は、「&lt;b&gt;Share Dial&lt;/b&gt;（仮）」。&lt;br /&gt;&lt;br /&gt;Operaには、Speed Dialという、サムネイルからサイトへすばやくアクセスできる機能があります。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S--8BfneGSI/AAAAAAAAAGk/d08C63gXAb8/s1600/speeddial.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S--8BfneGSI/AAAAAAAAAGk/d08C63gXAb8/s320/speeddial.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Share Dialは、共有して使うSpeed Dial。&lt;br /&gt;サイトのサムネイルを集めた「ダイヤル」を作って、みんなで共有しようというものです。&lt;br /&gt;&lt;br /&gt;たとえば、グループで行く旅行のプランを調べるとき。&lt;br /&gt;普通なら、いくつか気に入ったサイトをピックアップして、メンバーにメールで送ったりしますが、その代わり、ピックアップしたサイトを集めた「ダイヤル」を作って、そのURLをひとつ教えれば済みます。&lt;br /&gt;&lt;br /&gt;受け取ったメンバーが、またその「ダイヤル」に別の旅行プランのサイトを追加したりして、「ダイヤル」を使ってみんなで検討すれば、とても便利でしょう。たぶん。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;画面構成&lt;/h4&gt;&lt;br /&gt;画面は２つだけです。&lt;br /&gt;トップ画面とダイヤル画面。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;トップ画面&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S---HuHGTkI/AAAAAAAAAG0/x_O3DdMssmU/s1600/top.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S---HuHGTkI/AAAAAAAAAG0/x_O3DdMssmU/s320/top.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;トップ画面はダイヤルを新規作成するボタンがあるだけです。&lt;br /&gt;ダイヤルを作成するボタンを押すと、ダイヤルが新規に作成され、以下のダイヤル画面にリダイレクトします。&lt;br /&gt;&lt;br /&gt;ログインなどは不要にして、そのかわりダイヤル画面のURLをランダムな文字列にすることにします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ダイヤル画面&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S---JvStiOI/AAAAAAAAAG8/bqDT5lmqXdA/s1600/dial.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S---JvStiOI/AAAAAAAAAG8/bqDT5lmqXdA/s320/dial.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダイヤル画面では、&lt;br /&gt;&lt;br /&gt;・ダイヤルの名前や説明の編集。&lt;br /&gt;・サイトを追加、削除、並び替え。サイトはサムネイルで表示します。&lt;br /&gt;&lt;br /&gt;を行います。&lt;br /&gt;&lt;br /&gt;すべてAjaxで、画面遷移なしで処理します。&lt;br /&gt;javascriptのライブラリはjQueryを使用します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;次の記事：&lt;a href="http://silentpower2.blogspot.com/2010/05/google-app-engine2.html"&gt;2．開発の準備&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-3629882599794431097?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/3629882599794431097/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3629882599794431097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3629882599794431097'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/05/google-app-engine.html' title='Google App Engineでゼロからはじめてサイト公開まで（１.アプリの概要）'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OWbpIlf4OEQ/S--8BfneGSI/AAAAAAAAAGk/d08C63gXAb8/s72-c/speeddial.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-9015044406320714058</id><published>2010-04-24T22:07:00.011+09:00</published><updated>2010-04-25T03:23:01.882+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Solr'/><title type='text'>Solrの創始者によるチュートリアルに参加</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S9MNSxstz7I/AAAAAAAAAFg/OYz9TMfQrIw/s1600/CIMG0077.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S9MNSxstz7I/AAAAAAAAAFg/OYz9TMfQrIw/s400/CIMG0077.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5463725389160239026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;22日（木）に、麻布十番近くの国際文化会館で、 &lt;a href="http://www.basistech.co.jp/forum/2010/"&gt;次世代サーチ・テクノロジー・フォーラム2010&lt;/a&gt;があった。&lt;br /&gt;&lt;br /&gt;その前日、21日（水）には、プレイベントとしてSolrプロジェクト創設者のヨニック・シーリー（Yonik Seeley）氏のチュートリアルがあった。来日して講演というのはなかなかない機会なので、両日とも参加してきた。&lt;br /&gt;&lt;br /&gt;ちなみに21日のチュートリアルは25,000円、22日のフォーラムは無料。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Solrチュートリアル&lt;/h4&gt;&lt;br /&gt;参加者は二十数名だった。&lt;br /&gt;一般的な相場と比べても参加費がそれほど高いわけでもなく、すべてのオープンソースプロジェクトの中でもトップレベルの人気があるというSolrの、開発者直々のチュートリアルにしては、少ないように思える。&lt;br /&gt;&lt;br /&gt;日本でのSolrの知名度の低さもあるだろうが、告知がうまくいかなかったのかなと思った。内容がよかっただけに、もったいない。&lt;br /&gt;&lt;br /&gt;でもその分、参加者はモチベーションが高い人が多かったようで、既にSolrを使っている人も多く、質問も活発だった。&lt;br /&gt;&lt;br /&gt;外国人の参加者も数名いた。翌日のフォーラムに参加していた会社の人達だったみたいだ。&lt;br /&gt;&lt;br /&gt;講義は逐次通訳で行われた。内容が難しくなると、翻訳するのが大変そうだった。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;アジェンダ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;・Intro to Solr&lt;br /&gt;・Basic Indexing&lt;br /&gt;・Basic Searching&lt;br /&gt;・Basic Faceting&lt;br /&gt;・Faceting Deep Dive&lt;br /&gt;・Trie Fields&lt;br /&gt;・Distributed Search&lt;br /&gt;・1.5 Preview&lt;br /&gt;・Questions and Answers&lt;br /&gt;&lt;br /&gt;Solrで驚くのは&lt;span style="font-weight:bold;"&gt;圧倒的なパフォーマンスとスケーラビリティ&lt;/span&gt;だ。&lt;br /&gt;&lt;br /&gt;最後のQ&amp;Aでは、実際に動いている最大規模の構成について話があったのだが、&lt;br /&gt;100個のシャード（shards）に分割して、&lt;span style="font-weight:bold;"&gt;56億ドキュメント&lt;/span&gt;を扱っている事例があるそうだ。&lt;br /&gt;この規模でも、1秒以内で結果を返すらしい。&lt;br /&gt;&lt;br /&gt;Solrでは1.4から分散検索（Distributed Search）という仕組みが導入されたのだが、シャードというのはその分散したひとつひとつのサーバーインスタンスのこと。&lt;br /&gt;&lt;br /&gt;また、Wikipediaのデータを使って、&lt;span style="font-weight:bold;"&gt;10億ドキュメント&lt;/span&gt;を生成し、100シャードに分けてEC2上でテストしたときは、平均のレスポンスが&lt;span style="font-weight:bold;"&gt;50ms未満&lt;/span&gt;だったらしい。&lt;br /&gt;&lt;br /&gt;Solrは扱いやすく、高性能、高機能で、他のオープンソース検索エンジンとは一線を画す検索エンジンだ。&lt;br /&gt;日本ではSennaやHyper Estraierが有名だが、数百万の文書ならともかく、もっと大規模な検索を扱うのは厳しい。これからはSolrやLuceneがどんどん使われていくようになると思う。&lt;br /&gt;&lt;br /&gt;ただ、国産プロジェクトとは違って、日本語の情報が少なかったり、日本語を扱うノウハウが必要だったりするところがあるのも事実ではある。&lt;br /&gt;&lt;br /&gt;僕はなんだかんだで2年くらいSolrを使っているし、数千万件のデータを扱うECサイトにSolrを導入したりしているわけで、そのへんのノウハウもある。Solrの講義や導入コンサルみたいな仕事をすることもできるんじゃないかと、ふと思ったりした。&lt;br /&gt;&lt;br /&gt;長くなったので一旦このへんで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-9015044406320714058?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/9015044406320714058/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/04/solr.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/9015044406320714058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/9015044406320714058'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/04/solr.html' title='Solrの創始者によるチュートリアルに参加'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OWbpIlf4OEQ/S9MNSxstz7I/AAAAAAAAAFg/OYz9TMfQrIw/s72-c/CIMG0077.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-6018843842775485027</id><published>2010-04-19T00:30:00.010+09:00</published><updated>2010-04-20T00:41:10.243+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='英語'/><category scheme='http://www.blogger.com/atom/ns#' term='Kindle'/><title type='text'>Kindleが早くも故障。そして電話サポートを受ける</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S8snDtFhUAI/AAAAAAAAAE8/yUq4h1kGC74/s1600/CIMG0070.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/S8snDtFhUAI/AAAAAAAAAE8/yUq4h1kGC74/s400/CIMG0070.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5461501917712699394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://silentpower2.blogspot.com/2010/04/kindle-37signalsrework.html"&gt;Reworkを購入して&lt;/a&gt;、本格的にKindleを使いはじめた矢先、なんと早くもKindleが故障してしまった。&lt;br /&gt;&lt;br /&gt;液晶の上のほうがきれいに長方形の形で白くなってしまって、何も表示されず。&lt;br /&gt;&lt;br /&gt;交換してもらえるらしいが、他の人のブログを見ていると、どうもAmazon.comのカスタマーセンターと電話でやり取りしなければいけないらしい。もちろん英語で。英語の勉強をはじめたばかりの自分としては、いきなり高いハードルだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ということで、英語でサポートを受けてみた。&lt;br /&gt;しかし、見事に全く聞き取れない。&lt;br /&gt;ゆっくりしゃべってくれとお願いしたのだが、十分速い。&lt;br /&gt;ところどころ聞こえる単語だけをたよりに話す。&lt;br /&gt;伝える方も、ブロークン英語もいいところで、きちんと伝わったのかどうかわからないうちに終了。&lt;br /&gt;&lt;br /&gt;正しく処理されたか心配していたが、その後、交換品を送ったとのメールが届いたので、なんとかなったみたいだ。&lt;br /&gt;&lt;br /&gt;今回は、自分が思ってた以上に英語が話せないということを実感した。&lt;br /&gt;この敗北感をバネに、今年の目標である英語力向上を、気合を入れなおしていかねば。&lt;br /&gt;&lt;br /&gt;ちなみに英語は、TOEICをひとつの指標として使うことにした。&lt;br /&gt;直近の5/30に一度受けて、今年最後の11/28にもう一度受けて、成果を測定するつもり。&lt;br /&gt;自分なりに工夫して、成果が出たらノウハウをシェアしていこうと思う。&lt;br /&gt;&lt;br /&gt;おっと、TOEICの申し込みは明日までだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-6018843842775485027?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/6018843842775485027/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/04/kindle.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/6018843842775485027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/6018843842775485027'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/04/kindle.html' title='Kindleが早くも故障。そして電話サポートを受ける'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OWbpIlf4OEQ/S8snDtFhUAI/AAAAAAAAAE8/yUq4h1kGC74/s72-c/CIMG0070.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-8941699634068422282</id><published>2010-04-15T01:37:00.006+09:00</published><updated>2010-04-15T02:44:41.564+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='英語'/><category scheme='http://www.blogger.com/atom/ns#' term='Kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='ビジネス'/><title type='text'>Kindleで 37signalsの"Rework"を購入</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OWbpIlf4OEQ/S8XxyRof0-I/AAAAAAAAAE0/-GqGiXxLVhQ/s1600/kindle_rework.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_OWbpIlf4OEQ/S8XxyRof0-I/AAAAAAAAAE0/-GqGiXxLVhQ/s400/kindle_rework.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5460035969285608418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kindleを入手して、初めて有料の本を購入した。&lt;br /&gt;&lt;br /&gt;購入したのは37シグナルズ「&lt;a href="http://www.amazon.co.jp/gp/product/4153200115?ie=UTF8&amp;tag=aeeaaaaaaaa0f-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4153200115"&gt;小さなチーム、大きな仕事&lt;/a&gt;」の原書"&lt;a href="http://www.amazon.com/Rework-Jason-Fried/dp/0307463745/"&gt;Rework&lt;/a&gt;"。&lt;br /&gt;&lt;br /&gt;面白いという話は聞いていたので、どうせ読むなら英語の勉強も兼ねて原書を読もう、そしてどうせなら手元にKindleがあるのだし、Kindleで購入体験してみよう、ということで、Kindle購入書籍第１号がこれに決まった。&lt;br /&gt;&lt;br /&gt;Kindleの本はたいていサンプルが読めるようなので、まずはサンプルをダウンロードして読んでみる。知らない単語はちょくちょく出てくるが、内容は平易だし、薄い本なので、何とか読みきれるだろう。Kindleならその場で辞書も引けるし。&lt;br /&gt;&lt;br /&gt;購入はクリック一発。&lt;br /&gt;こんなに簡単に買えてしまうなんて、手軽であると同時に怖い気もする。油断してるとどんどん購入してしまいそうだ。&lt;br /&gt;アマゾンで最初に本を買った時もその手軽さに驚いたけど、配送の時間もなく、こんなに一瞬で本を（しかも洋書を）入手できるというのは、かなり奇妙な感覚だ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;手持ちのiPod TouchにKindleアプリを入れて、使ってみた。&lt;br /&gt;Kindleで購入した本は、Kindle本体とiPod Touch（やiPhone、iPad、PCなどなど）で同期ができる。&lt;br /&gt;&lt;br /&gt;操作性はKindle本体よりiPod Touchのほうが断然いい。特にKindle Storeで本を探すのは、iPod Touchのほうが遥かに楽だ。Kindle本体はページの切り替えが遅い上に、なぜか一覧に本の金額が出てこない。このあたりは改善してほしいところ。&lt;br /&gt;&lt;br /&gt;長時間読むときはKindleで、ちょっと読むときはiPod Touchで、みたいな使い方はすごく便利そうだ。&lt;br /&gt;&lt;br /&gt;しばらく頑張って活用してみようと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-8941699634068422282?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/8941699634068422282/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/04/kindle-37signalsrework.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8941699634068422282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8941699634068422282'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/04/kindle-37signalsrework.html' title='Kindleで 37signalsの&quot;Rework&quot;を購入'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OWbpIlf4OEQ/S8XxyRof0-I/AAAAAAAAAE0/-GqGiXxLVhQ/s72-c/kindle_rework.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-7576910749015655868</id><published>2010-04-06T01:49:00.012+09:00</published><updated>2010-05-16T22:56:43.886+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine'/><title type='text'>Google App EngineでDjangoを使う（インストールから起動まで）</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S7ofutCnMBI/AAAAAAAAAEo/ODa3fWFWCQo/s1600/itworks.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/S7ofutCnMBI/AAAAAAAAAEo/ODa3fWFWCQo/s400/itworks.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456708785737773074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google App Engine Helper for Djangoというものが用意されているので、それを使って、まずはサーバーの起動までやってみる。&lt;br /&gt;Windows環境。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Djangoのインストール&lt;/h4&gt;&lt;br /&gt;まずはDjangoのインストール。&lt;br /&gt;&lt;br /&gt;Python2.5とGoogle App Engine SDKはインストール済み。（SDKのバージョンは1.3.2 - 2010-03-25）&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.djangoproject.com/download/"&gt;Djangoの公式サイト&lt;/a&gt;から、現在最新の1.1.1をダウンロード。&lt;br /&gt;&lt;br /&gt;解凍し、コマンドプロンプトでそのフォルダーに移動したら、以下を実行してインストール。&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;python setup.py install&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以下のように、インストールされたバージョンを確認できる。&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;&gt;python&lt;br /&gt;Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on&lt;br /&gt;win32&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import django&lt;br /&gt;&gt;&gt;&gt; django.VERSION&lt;br /&gt;(1, 1, 1, 'final', 0)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Google App Engine Helper for Djangoを使う&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://code.google.com/intl/ja/appengine/articles/appengine_helper_for_django.html"&gt;公式ドキュメント&lt;/a&gt;のとおり、ヘルパーをダウンロードして、mysiteフォルダーに設置。&lt;br /&gt;サーバーを起動してみる。&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;python manage.py runserver&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ところが、ImportError: No module named ipaddrというエラーが出る。&lt;br /&gt;ipaddrというモジュールがうまく入ってないということらしい。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://morchin.sakura.ne.jp/effective_python/easy_install.html"&gt;ここ&lt;/a&gt;から、easy_installをインストールする。Rubyでいうgemにあたるとのこと。&lt;br /&gt;&lt;br /&gt;手順通り、ez_setup.pyをダウンロードして、以下でインストール。&lt;br /&gt;&lt;pre class="black"&gt;python ez_setup.py&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;それから、Scripts（自分の環境ではC:\Python25\Scripts）にパスを通して、&lt;br /&gt;&lt;br /&gt;以下のようにipaddrをインストールできればOK。&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;easy_install ipaddr&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;もう一度、&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;python manage.py runserver&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;とすると、今度は起動できた。&lt;br /&gt;&lt;br /&gt;http://localhost:8000/を開くと、It worked!と表示された！&lt;br /&gt;とりあえずここまで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-7576910749015655868?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/7576910749015655868/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/04/google-app-enginedjango.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7576910749015655868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7576910749015655868'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/04/google-app-enginedjango.html' title='Google App EngineでDjangoを使う（インストールから起動まで）'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OWbpIlf4OEQ/S7ofutCnMBI/AAAAAAAAAEo/ODa3fWFWCQo/s72-c/itworks.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-6112029138904006568</id><published>2010-03-03T01:22:00.003+09:00</published><updated>2010-03-03T02:12:57.032+09:00</updated><title type='text'>今年の目標はGAEとスマートフォン開発と英語</title><content type='html'>今更だけど、今年の目標は、&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;Google App Engine&lt;/span&gt;（GAE）を使ったWebサイトをつくる&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;iPhone&lt;/span&gt;アプリをつくる&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;Android&lt;/span&gt;アプリをつくる&lt;br /&gt;&lt;br /&gt;ということで、いつの間にか多言語を勉強している。&lt;br /&gt;GAEはPythonを使うつもりだし、iPhoneはObjective-C、AndroidはJava。&lt;br /&gt;&lt;br /&gt;2週間くらいやってみた感想としては、GAEの開発はわりとすぐできそう。&lt;br /&gt;iPhoneは思ったより大変そう。Objective-Cが難しい。&lt;br /&gt;今年前半（6月）くらいまでに、GAEで何か開発して、今年の後半で&lt;br /&gt;iPhoneとAndroidアプリを作ることにしようと思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Google App Engine&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;まずこの本で、Pythonに入門。&lt;br /&gt;ウェブ上で情報を集めるのもよいが、やはり本でまとまっているのを読むのが好きだ。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aeeaaaaaaaa0f-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4797353953" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;それから、Googleの&lt;a href="http://code.google.com/intl/ja/appengine/docs/"&gt;ドキュメント&lt;/a&gt;。&lt;br /&gt;スタートガイドをやってみたが、非常にわかりやすい。&lt;br /&gt;開発ツールがよくできていて、デプロイなども簡単。&lt;br /&gt;&lt;br /&gt;デフォルトのwebappというフレームワークを使う予定だが、Railsのような&lt;br /&gt;かちっとしたフレームワークではないから、キレイに書くには工夫が必要なのかも。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://d.hatena.ne.jp/Ubuntu/20080618/1213800953"&gt;Google App Engineで、MVCとヘルパーメソッドの記述をおこなう。&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;テスト方法。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://d.hatena.ne.jp/griefworker/20100215/google_app_engine_python_unittest"&gt;Google App Engine/Python で単体テスト&lt;/a&gt;&lt;br /&gt;&lt;a href="http://coreblog.org/ats/3-tips-to-perform-test-driven-development-with-google-app-engine"&gt;Google App Engineでテスト駆動開発を行うための3つのTips&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;iPhone、Android&lt;/h4&gt;&lt;br /&gt;iPhonetとAndroidは、まだウェブ上の入門記事をやってみた位。&lt;br /&gt;やはり本で読みたい。以下、入手予定の本。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aeeaaaaaaaa0f-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4797358106" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aeeaaaaaaaa0f-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4048679562" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;今年は、開発の目標とは別に、&lt;br /&gt;&lt;br /&gt;・英語を実用レベルにする&lt;br /&gt;&lt;br /&gt;という目標もあるのだけれど、それはまた別のエントリーで書くつもり。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-6112029138904006568?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/6112029138904006568/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2010/03/gae.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/6112029138904006568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/6112029138904006568'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2010/03/gae.html' title='今年の目標はGAEとスマートフォン開発と英語'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-2849141755584147832</id><published>2009-11-17T00:28:00.011+09:00</published><updated>2009-11-17T03:56:25.811+09:00</updated><title type='text'>RDB以外のデータストアを調べてみた</title><content type='html'>最近、RDB(リレーショナルデータベース)以外のデータストアを使おうという流れが、ますます強くなっていると感じます。&lt;br /&gt;RDBはスキーマ変更によるアプリへの影響が大きいこと、データが大規模になったときに分散させにくいことなどにより、RDBの制約がアプリケーションの改善をする上でのボトルネックになりがちです。&lt;br /&gt;&lt;br /&gt;ということで、リレーショナルでないデータストアについて、少し調べてみたのでメモしておきます。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;キーバリュー型データストア(KVS)&lt;/h4&gt;&lt;br /&gt;memcachedや、最近ではTokyo Tyrantが有名ですね。&lt;br /&gt;memcachedはキャッシュ用途だけですが、Tokyo Tyrantは永続化もできるみたいです。&lt;br /&gt;Tokyo TyrantをRailsから使い易くしたという、&lt;a href="http://www.slideshare.net/tsukasa.oishi/miyazaki-resistance"&gt;Miyazaki Resistance&lt;/a&gt;もよさそう。食べログでも使っているそうです。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;ドキュメント指向データベース&lt;/h4&gt;&lt;br /&gt;Apacheのプロジェクトになった&lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;が有名。&lt;br /&gt;最近では&lt;a href="http://www.mongodb.org/display/DOCS/Home"&gt;MongoDB&lt;/a&gt;が、注目株らしいです。&lt;br /&gt;&lt;br /&gt;UbuntuにCouchDBを入れて、&lt;a href="http://www.ibm.com/developerworks/jp/views/web/libraryview.jsp?search_by=Web+時代の非リレーショナルデータベース&amp;S_TACT=105AGX90&amp;S_CMP=ED"&gt;ここ&lt;/a&gt;を見て動かしてみましたが、なかなかよさそうな印象でした。&lt;br /&gt;RDBの発想から頭を切替えなければいけませんが、CouchDBの名前のとおり、あまり構えずに気楽に使ってみたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;MySQLを非リレーショナルに使う&lt;/h4&gt;&lt;br /&gt;非常におもしろかったのが&lt;a href="http://www.hyuki.com/yukiwiki/wiki.cgi?HowFriendFeedUsesMySqlToStoreSchemaLessData"&gt;FriendFeedの事例&lt;/a&gt;。&lt;br /&gt;CouchDBなどは安定性で不安があったため、勝手の知ったMySQLをスキーマレスで使うようにしたとのこと。&lt;br /&gt;idとbodyしかないテーブルにJSONでデータを格納し、インデックス用に別テーブルを作るという大胆な発想。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/kazuk_i/20090919/1253365860"&gt;WebアプリのDBスキーマレス化がRubyにぴったりな件&lt;/a&gt;&lt;br /&gt;のSimpleResourceも同様のアプローチのようなのでメモ。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Solrを使えないか?&lt;/h4&gt;&lt;br /&gt;Apacheプロジェクトの検索エンジンでSolrというものがあります。Solrでは、検索対象のデータを非正規化してドキュメントとして格納します。&lt;br /&gt;まさにドキュメント指向のデータストアです。さらに検索能力は右に出るものがないくらいの高性能。分散させる仕組みも持っています。&lt;br /&gt;&lt;br /&gt;実際の運用ではしっかりとRDBが別にあった上で、そのデータを検索するために使われることが多いようですが(僕もそうやっています)、もう少しメインのデータストアとして簡単に使えたらいいのになと思っています。&lt;br /&gt;問題はリアルタイムの頻繁なデータ更新に対応できないことなので、他のデータストアと組み合わせてうまくパッケージ化できないかなと。&lt;br /&gt;&lt;br /&gt;Solrについては、つい先日1.4がリリースされたので、別エントリーで書こうと思います。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Bigtable、Simple DB&lt;/h4&gt;&lt;br /&gt;Googleで使われているBigtableや、Amazonのクラウドで提供されているSimple DBも非リレーショナルなデータベースだそうです。&lt;br /&gt;Bigtableは無料で使えるGoogle App Engineでも利用できます。ちょうどGoogle App Engineを使いはじめたところなので、Bigtableも使うことになるはず。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-2849141755584147832?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/2849141755584147832/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/11/rdb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2849141755584147832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2849141755584147832'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/11/rdb.html' title='RDB以外のデータストアを調べてみた'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-4135006225048490186</id><published>2009-10-24T15:56:00.002+09:00</published><updated>2009-10-24T16:13:02.427+09:00</updated><title type='text'>メダチェアとWindows 7を購入</title><content type='html'>午前はオークションで購入した&lt;a href="http://www.hhstyle.com/cgi-bin/omc?port=33311&amp;req=PRODUCT&amp;code=106000101"&gt;メダチェア&lt;/a&gt;とWindows7の受け取り。&lt;br /&gt;&lt;br /&gt;以前の椅子で腰痛に悩まされていたので、アーロン、バロン、メダといったあたりを検討した結果、メダチェアを購入。すわり心地はまあまあかな。定価20万ということで少し過剰に期待しすぎたかも。&lt;br /&gt;&lt;br /&gt;でも、長時間座っても腰が痛くならないようなのでよかった。これで椅子に座ってPCが使える。&lt;br /&gt;&lt;br /&gt;Windows7はVAIOのアップグレードサービスで3,150円。Vistaと比べれば全然よい。動作も速くなった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-4135006225048490186?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/4135006225048490186/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/10/windows-7wo.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4135006225048490186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4135006225048490186'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/10/windows-7wo.html' title='メダチェアとWindows 7を購入'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-4842345769868984414</id><published>2009-10-21T18:57:00.008+09:00</published><updated>2009-12-09T11:52:45.408+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='Vimlike Smooziee'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Vimlike Smoozieeのデモ動画</title><content type='html'>&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;Vimlike Smooziee&lt;/a&gt;がかなり機能を絞って実装しているのは、時間的、能力的な制約も大きいのですが、あまり複雑にしないことで、なるべくヘビーユーザーでない人にも使ってもらえるようにと考えているところもあります。&lt;br /&gt;&lt;br /&gt;Vimperatorは強力にカスタマイズできてとても便利です。ただ、インストールするといきなりアドレスバーが消えてコマンド入力になるなど、ヘビーユーザーでないとなかなか近寄りがたいところがあると思います。そういったとっつきにくさから、一般ユーザーがこの便利さを享受できないのは大変もったいないので、&lt;span style="font-weight:bold;"&gt;Vimperatorの便利さを一般ユーザーにも&lt;/span&gt;と思うわけです。&lt;br /&gt;&lt;br /&gt;ということで、Vimlike Smoozieeのデモ動画を作ってみました。&lt;br /&gt;&lt;br /&gt;ちなみに、このデモでは、キーボードの入力したキーを表示するGreasemonkeyスクリプト、&lt;a href="http://d.hatena.ne.jp/brazil/20070905/1188967760"&gt;FLASH KEY&lt;/a&gt;を少し変更してExtensionとしてインストールして使っています。FLASH KEYは動作がかなり素敵です。キーボード操作を画面に表示したいときにおすすめです。&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8y3shoqeHu4&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8y3shoqeHu4&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="420"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;現在のバージョンは0.0.9で、&lt;span style="font-weight:bold;"&gt;f&lt;/span&gt;キーで呼び出す&lt;span style="font-weight:bold;"&gt;クイックヒント&lt;/span&gt;と呼ばれる機能も実装しはじめています。&lt;br /&gt;クイックヒントについては、もう少しできてから詳しく書こうと思っていますが、ChromeのJavascriptが早いからか、&lt;span style="font-weight:bold;"&gt;ヒントの表示がすごく速い&lt;/span&gt;です。&lt;br /&gt;Firefoxだと、どうしてもわずかに間が空いてしまいますが、ヒントを出すときには頭の中にはもう遷移先に気持ちがあるので、そのわずかの間がじれったく感じてしまいます。なので、このスピードはとてもありがたいです。&lt;br /&gt;&lt;br /&gt;Chromeにはもう少しシェアをとってもらって、&lt;span style="font-weight:bold;"&gt;FirefoxやIEなど他のブラウザに、動作スピード面でのプレッシャーをガンガン与えてほしい&lt;/span&gt;ですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-4842345769868984414?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/4842345769868984414/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/10/vimlike-smooziee.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4842345769868984414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4842345769868984414'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/10/vimlike-smooziee.html' title='Vimlike Smoozieeのデモ動画'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-447568087394946811</id><published>2009-10-09T13:41:00.008+09:00</published><updated>2009-10-09T18:21:31.687+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>ChromeをVim風に操作する拡張 「Vimlike Smooziee」 が動かなくなっていたので修正</title><content type='html'>最新のGoogle Chrome dev版（4.0.221.6）でVimlike Smoozieeが動かなくなっていたので、修正しました。&lt;br /&gt;以下からインストールできます。&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;Vimlike Smooziee&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;バージョンは0.0.6です。&lt;br /&gt;&lt;br /&gt;前回設定したupdate_urlの自動更新にも問題があったので、あわせて修正しています。もし前のバージョンを入れてもらっていた人がいましたら、もう一度インストールしてください。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;変更&lt;/h4&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;window.addEventListenerが効かなくなっていたので、document.addEventListenerに変更&lt;/li&gt;&lt;li&gt;update_urlを変更&lt;/li&gt;&lt;li&gt;ズームコマンドを不完全ながら導入&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;update_urlで指定するxmlファイルは、もともと他のファイルと同様にGoogle Codeにアップしていたのですが、Google Codeは同名で更新ができないようなので、別のところに変更しました。&lt;br /&gt;&lt;br /&gt;ズームコマンドについては、以下のとおりです。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;zi&lt;/span&gt;: 拡大　（zoom in)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;zo&lt;/span&gt;: 縮小　（zoom out)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;zm&lt;/span&gt;: たくさん拡大　（zoom more)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;zr&lt;/span&gt;: たくさん縮小　（zoom reduce)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;zz&lt;/span&gt;: 元の倍率に戻す&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;本当はドメインごとに記憶したいのですが、できていないので開くたびに通常倍率に戻ってしまいます。&lt;br /&gt;&lt;br /&gt;※zrがちゃんと動いてないようです。zoも少しおかしい様子。近々直します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-447568087394946811?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/447568087394946811/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/10/chromevim-vimlike-smooziee.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/447568087394946811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/447568087394946811'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/10/chromevim-vimlike-smooziee.html' title='ChromeをVim風に操作する拡張 「Vimlike Smooziee」 が動かなくなっていたので修正'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-5978725283775456434</id><published>2009-10-05T06:35:00.008+09:00</published><updated>2009-10-05T18:54:09.408+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>ChromeをVim風にキーボード操作する拡張をGoogle Codeにアップ</title><content type='html'>&lt;h4&gt;Google Codeにアップしました&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://silentpower2.blogspot.com/2009/09/chromevim-2.html"&gt;前回&lt;/a&gt;、&lt;a href="http://silentpower2.blogspot.com/2009/09/chromevim.html"&gt;前々回&lt;/a&gt;と書いてきたChromeをVim風（またはFirefoxのVimperator風）に操作する拡張を、Google Codeにアップしました。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Vimlike Smooziee&lt;br /&gt;&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;http://code.google.com/p/vimlike-smooziee/&lt;/a&gt;&lt;/blockquote&gt;&lt;div&gt;そのうちVimperatorの作者あたりがChrome向けにも作ってくれるんじゃないかなどと思いつつも、またいくつか改善しています。&lt;/div&gt;とても便利になっていると思いますので、ぜひ使ってみてもらえればと思います。&lt;br /&gt;現在のバージョンは0.0.3です。&lt;br /&gt;&lt;br /&gt;※現在開発版のChrome4でしか動作確認していません。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;追加、変更したこと&lt;/h4&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;j、k&lt;/span&gt;のスクロールにバグがあったので修正&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;h、l&lt;/span&gt;（エル）キーでも左右にスムーズスクロール&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;0&lt;/span&gt;（ゼロ）で一番左へスクロール、&lt;span style="font-weight:bold;"&gt;$&lt;/span&gt;で一番右へスクロール&lt;/li&gt;&lt;li&gt;ページの読み込み開始時に動作するように変更&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;u&lt;/span&gt;で閉じたタブを開く（問題あり。後述）&lt;/li&gt;&lt;li&gt;テキスト入力時に&lt;span style="font-weight:bold;"&gt;C-d&lt;/span&gt;でカーソルの後の1文字を削除、&lt;span style="font-weight:bold;"&gt;C-h&lt;/span&gt;で前の1文字を削除&lt;/li&gt;&lt;li&gt;自動アップデート&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;j、kキーのスクロールのバグについては、前エントリーのコメントで教えていただきました。ありがとうございます！&lt;br /&gt;同時にh、lキーのスクロールも教えていただいたので、こちらもありがたく採用させていただきます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4.&lt;/span&gt;については、今まではデフォルト設定でページの読み込みが完了してから動作するようになっていたため、少し操作するまで待たされるようになっていました。&lt;br /&gt;今回の変更で読み込み開始時に動作するようになったので、より快適に使えるようになっています。&lt;br /&gt;&lt;br /&gt;自動アップデートも設定しました。&lt;br /&gt;chrome://extensions/ から更新ボタン（"Update extensions now"）をクリックすることで、今後更新がある場合には最新のバージョンにアップデートされます。（現状では有無を言わせずアップデートするようなので注意）&lt;br /&gt;&lt;br /&gt;今回の変更分も合わせて、操作方法をまとめておきます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;操作方法まとめ&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;スクロール&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;j、k&lt;/b&gt;で上下にスムーズスクロール&lt;/li&gt;&lt;li&gt;&lt;b&gt;h、l&lt;/b&gt;（エル）で左右にスムーズスクロール&lt;/li&gt;&lt;li&gt;&lt;b&gt;gg&lt;/b&gt;でページトップへスクロール、&lt;b&gt;G&lt;/b&gt;でページ終わりへスクロール&lt;/li&gt;&lt;li&gt;&lt;b&gt;0&lt;/b&gt;（ゼロ）でページの一番左へスクロール、&lt;b&gt;$&lt;/b&gt;でページの一番右へスクロール&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;履歴&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;H、L&lt;/b&gt;でそれぞれ「戻る」「進む｝&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;テキスト入力&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;gi&lt;/b&gt;で最初のテキストボックスにフォーカス、&lt;b&gt;Esc&lt;/b&gt;でフォーカスを解除&lt;/li&gt;&lt;li&gt;テキストボックス内で、&lt;b&gt;C-a、C-e&lt;/b&gt; でそれぞれ　カーソルを先頭、末尾へ移動&lt;/li&gt;&lt;li&gt;テキストボックス内で、&lt;b&gt;C-f、C-b&lt;/b&gt; でそれぞれ　カーソルを１つ前へ、１つ後ろへ&lt;/li&gt;&lt;li&gt;テキストボックス内で、&lt;b&gt;C-d、C-h &lt;/b&gt;でそれぞれ　カーソルの１つ前を削除、１つ後ろを削除&lt;/li&gt;&lt;li&gt;テキストボックス内でカーソルが先頭にあるとき、&lt;b&gt;C-a&lt;/b&gt;で全選択&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;タブ&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;r&lt;/b&gt;でリロード&lt;/li&gt;&lt;li&gt;&lt;b&gt;d&lt;/b&gt;でタブを閉じる&lt;/li&gt;&lt;li&gt;&lt;b&gt;u&lt;/b&gt;で閉じたタブを復元（タブ内の閲覧履歴は復元できず）&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;※ C-aは「Ctrl + a」、Gは「Shift + g」です。&lt;br /&gt;&lt;br /&gt;※ uでは、そのタブ内での閲覧履歴は復元できません。履歴も復元したいときは本来のショートカットキーである「Ctrl+Shift+t」を使ってください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;今後ほしい機能&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;f、F&lt;/b&gt;でクイックヒント&lt;/li&gt;&lt;li&gt;&lt;b&gt;zi、zo&lt;/b&gt;でフォントの拡大、縮小&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;これができればとりあえず満足です。&lt;br /&gt;&lt;br /&gt;前回も書いた、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;C-p&lt;/b&gt;で前の（左の）タブに移動、&lt;b&gt;C-n&lt;/b&gt;で次の（右の）タブに移動&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;については、一度実装してみたのですが、泣く泣くコメントアウトしました。&lt;br /&gt;「新しいタブ」やchrome:// のページなどで動作が効かず、そこだけ元々のショートカットである印刷や新しいウィンドウの立ち上げが行われてしまい、煩わしいためです。&lt;br /&gt;&lt;br /&gt;ただ、今後専用のAPIを用意するという投稿がGoogleグループにありましたので（&lt;a href="http://groups.google.com/group/chromium-extensions/browse_thread/thread/3da168076e1834eb?pli=1"&gt;リンク&lt;/a&gt;）、それができるのを待って実装する予定です。&lt;br /&gt;&lt;br /&gt;ちなみにこのグループには、マウスやキーボードのイベントを扱う、より公式なAPIも用意するつもりだとの投稿もあるので、そちらも期待したいところ。&lt;br /&gt;&lt;br /&gt;スクロール幅などをユーザーがカスタマイズできるようにしたいところですが、&lt;br /&gt;&lt;a href="http://gihyo.jp/dev/feature/01/chromeExt/0004"&gt;先取り！ Google Chrome Extensions　第4回　Chrome Extensionsのこれから&lt;/a&gt;&lt;br /&gt;を見ると、どうもできるようになるようです。もう少しAPIが安定したら実装しようと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;実装についてのメモ&lt;/h4&gt;&lt;br /&gt;自動アップデートは、&lt;a href="http://code.google.com/chrome/extensions/autoupdate.html"&gt;ここ&lt;/a&gt;にあるように設定すれば、簡単に動きました。&lt;br /&gt;&lt;br /&gt;ページの読み込み開始時に拡張が動作するようには、manifest.jsonのcontent_scriptsの項目で、&lt;blockquote&gt;"run_at": "document_start"&lt;/blockquote&gt;と定義します。（&lt;a href="http://code.google.com/chrome/extensions/content_scripts.html#registration"&gt;ドキュメント&lt;/a&gt;）&lt;br /&gt;&lt;br /&gt;uで実装したタブを復活させるようなタブ操作は、Backgroud pageなどhtml側で行うようです。従ってContent scriptからBackgroud pageを呼び出す必要が出てきます。&lt;br /&gt;&lt;br /&gt;そういうときは、Content script側でPortオブジェクトのportMessage()を使ってメッセージを送り、Backgroud page側ではそれを受けて連携するみたいです。（&lt;a href="http://code.google.com/chrome/extensions/content_scripts.html#messaging"&gt;ドキュメント&lt;/a&gt;）&lt;br /&gt;&lt;br /&gt;uのタブ復元は、ソースを見てもらえればわかると思いますが、かなり無理をしている感じです。今後のAPI充実に期待です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-5978725283775456434?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/5978725283775456434/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevimgoogle-code.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5978725283775456434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5978725283775456434'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevimgoogle-code.html' title='ChromeをVim風にキーボード操作する拡張をGoogle Codeにアップ'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-2318165405650602556</id><published>2009-09-19T00:10:00.026+09:00</published><updated>2009-10-09T13:40:23.021+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>ChromeをVim風にキーボード操作する拡張 その2</title><content type='html'>&lt;b&gt;※最新版をGoogle Codeにアップしました。今後はこちらで更新する予定です&lt;/b&gt;。&lt;br /&gt;&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;http://code.google.com/p/vimlike-smooziee/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/Chrome%E3%82%92Vim%E9%A2%A8%E3%81%AB%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E6%8B%A1%E5%BC%B5"&gt;前回のエントリー&lt;/a&gt;は、思ってもみないほど多くの人に見ていただけたようで驚きました。（といってもあくまでこのブログ基準です。）&lt;br /&gt;やはりというべきか、ChromeでVimのように操作したいという需要は大きいんですね。&lt;br /&gt;&lt;br /&gt;また変更を加えて、非常に快適な動作をするようになったので、公開してみます。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;インストール&lt;/h4&gt;&lt;br /&gt;&lt;blockquote&gt;Vimlike_smooziee 0.0.2　（&lt;s&gt;インストール&lt;/s&gt;）（&lt;s&gt;ソース&lt;/s&gt;）&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold; color:red;"&gt;※削除しました。&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;こちら&lt;/a&gt;から最新のものをインストールしてください。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vimperatorの&lt;a href="http://vimperator.kurinton.net/plugins/_smooziee.html"&gt;_smoooziee.js&lt;/a&gt;というj、kキーのスクロールをスムーズにする僕の愛用プラグインがあるのですが、今回はその動作も組み込んで、かなり自分好みにパッケージしています。&lt;br /&gt;&lt;br /&gt;もし従来の動作がいいという場合は、ソースのコメントアウトしてるところを使ってもらえばすぐに動かせると思います。&lt;br /&gt;smoozieeの動作も、ソース上部のinterval（スクロールの速度）やmoment（スクロール幅）を調整して好みの動作にすることもできます。（本当は外部ファイルで設定できればいいと思うのですが、やり方がわからないので。）&lt;br /&gt;&lt;br /&gt;※もし前回のVimlike-0.0.1を入れてもらった人がいたら、一度chrome://extensions/からuninstallしてもらったほうがいいかもしれません。次回もし公開する場合は、配布方法も調べてもう少しちゃんとしようと思ってます。Vimlikeという名前も、前回参照したソースの名前をそのまま使ってしまっているので、変えるかもしれません。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;前回からの変更点&lt;/h4&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;j、k&lt;/b&gt;キーでスムーズスクロール。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;「戻る」「進む」をz、xから&lt;b&gt;H、L&lt;/b&gt;に変更。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;gg&lt;/b&gt;でページトップへスクロール。&lt;b&gt;G&lt;/b&gt;でページ終わりへスクロール。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;gi&lt;/b&gt;で最初のテキストボックスにフォーカス。&lt;b&gt;Esc&lt;/b&gt;でフォーカスを解除。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;テキストボックス内で、&lt;b&gt;C-a、C-e、C-f、C-b&lt;/b&gt;でそれぞれ先頭、末尾、１つ進む、１つ戻る&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;C-aは、先頭に移動したあとで再度C-aを押すと、テキストの全選択となります。&lt;br /&gt;そのほか&lt;b&gt;r&lt;/b&gt;でリロード、&lt;b&gt;d&lt;/b&gt;でタブを閉じる動作は変わりありません。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;今後ほしい機能&lt;/h4&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Hit-a-Hint&lt;/li&gt;&lt;br /&gt;&lt;li&gt;uで閉じたタブを復活&lt;/li&gt;&lt;br /&gt;&lt;li&gt;アドレスバーで入力補完の際、カーソルキーではなくTabキーで選択したい（できる？）&lt;/li&gt;&lt;br /&gt;&lt;li&gt;C-pで前の（左の）タブに移動、C-nで次の（右の）タブに移動&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ziでフォント拡大、zoでフォント縮小&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;などなど。&lt;br /&gt;特に１はキーボード操作で完結するためには必須で、これがないとはじまらないというくらいのもの。下記の参考サイトでも書かれているようなので、早めに組み込みたいです。&lt;br /&gt;４のC-p、C-nはもともと、それぞれ印刷と新しいウィンドウを開く機能が割り当てられてるのですが、みんな使ってるんですかね。自分はあまり使っていないので上書きしてしまおうかなと。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;参考にしたサイト&lt;/h4&gt;&lt;br /&gt;前回Extensionの作り方で参考にしたブログ筆者の記事。すごくわかりやすい。&lt;br /&gt;&lt;a href="http://gihyo.jp/dev/feature/01/chromeExt/0002"&gt;先取り！ Google Chrome Extensions（第2回　Chrome Extensionsの作り方#1&lt;/a&gt;）&lt;br /&gt;&lt;br /&gt;キーイベントをとる部分は、以下を参考にさせて（使わせて）いただきました。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/edvakf/20090701/1246410396"&gt;はじめてのGoogle Chrome拡張、オレオレChromeKeyconfig&lt;/a&gt;&lt;br /&gt;&lt;a href="http://javascript.g.hatena.ne.jp/edvakf/20090630/1246362440"&gt;SafariとChromeではkeyIdentifierが使えるので素晴らしすぎます&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;おかげでChromeが快適でメインブラウザになる日も近いんじゃないかというくらいです。ありがとうございます。&lt;br /&gt;&lt;br /&gt;最初の技評の記事で紹介されていた本家ドキュメント。あとでゆっくり読まないと。&lt;br /&gt;&lt;a href="http://code.google.com/chrome/extensions/"&gt;Google Chrome Extensions: Developer Documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このChrome拡張のために必要にせまられてjavascriptをさわっていますが、どうもJavascriptは苦手というかよくわからないです。一度じっくり腰をすえて勉強しないといけないなあ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-2318165405650602556?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/2318165405650602556/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevim-2.html#comment-form' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2318165405650602556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2318165405650602556'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevim-2.html' title='ChromeをVim風にキーボード操作する拡張 その2'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-1815357126216166938</id><published>2009-09-11T02:08:00.023+09:00</published><updated>2009-10-09T13:40:43.992+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>ChromeをVim風にキーボード操作する拡張</title><content type='html'>&lt;b&gt;※最新版をGoogle Codeにアップしました。今後はこちらで更新する予定です&lt;/b&gt;。&lt;br /&gt;&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;http://code.google.com/p/vimlike-smooziee/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;ChromeをVim風に動かしたい&lt;/h4&gt;&lt;br /&gt;Firefoxのアドオンには、VimperatorというVim風にブラウザを操作してしまおうという大変マニアックなアドオンがあります。これに慣れるとVimperatorの入ってないFirefoxは使えなくなるといわれるほど、素晴らしく便利です。&lt;br /&gt;&lt;br /&gt;ただ、Firefoxはどんどん起動が遅くなってしまうので、あくまでFirefoxがメインながらも、キビキビ動いてくれるGoogle Chromeを使用する機会も増えてきていました。&lt;br /&gt;&lt;br /&gt;そうなるとやはり、ChromeでもVimperatorを使いたい。それが無理でもせめてVimのようにjキー、kキーでスクロールするだけでも全く使い勝手が違うだろうと思って調べていましたが、&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.itmedia.co.jp/enterprise/articles/0909/10/news094.html"&gt;Google Chrome、アドオン機能を開発者向けに解禁&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ということで、最新の開発版で動かすことができましたので、作ったものを置いておきます。作ったといっても、既に&lt;a href="http://looxu.blogspot.com/2008/09/google-chromevim.html"&gt;先人が作っていたもの&lt;/a&gt;を、ソースそのままで新しい拡張の仕様でまとめただけです。&lt;br /&gt;（2009/9/11時点でのChrome開発版のバージョンは&lt;span&gt;4.0.206.1&lt;/span&gt;）&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;インストール&lt;/h4&gt;&lt;br /&gt;以下の「インストール」のリンクをクリックして保存すると、インストールを促すダイアログが出てくると思いますので、そこで「インストール」を押すとインストールされます。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Vimlike 0.0.1 (&lt;s&gt;インストール&lt;/s&gt;）（&lt;s&gt;ソース&lt;/s&gt;）&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold; color:red;"&gt;※削除しました。&lt;a href="http://code.google.com/p/vimlike-smooziee/"&gt;こちら&lt;/a&gt;から最新のものをインストールしてください。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;参考にしたサイト&lt;/h4&gt;&lt;br /&gt;参考にしたというか、既に書いたように、こちらのサイトのソースをそのまま今のExtensionの仕様でまとめただけです。&lt;br /&gt;動作も同様ですので参照してください。&lt;br /&gt;&lt;a href="http://looxu.blogspot.com/2008/09/google-chromevim.html"&gt;Google ChromeでVimっぽい動きをさせてみる&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Extensionの作り方は以下のサイトを参考にしました。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/os0x/20090625/1245949133"&gt;Chrome Extensionsの作り方 2009/06/25版&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;開発版だけに度々仕様が変わっていて、以前はUser Scriptsという、FirefoxのGreasemonkeyに似た仕組みだったのですが、今後はExtensionsに一本化するんでしょうかね。&lt;br /&gt;仕様が変わるたびに動かなくなったりすることがよくあるようなのでお気をつけください。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;とても便利！&lt;/h4&gt;&lt;br /&gt;Vimperatorの機能とは差がありますが、j、kのスクロールだけでも、とても便利になりました。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/swdyh/20090525/1243232130"&gt;AutoPagerize for Chrome&lt;/a&gt;と一緒に使うとより便利で感激です。&lt;br /&gt;&lt;br /&gt;なお、アンインストールしたい場合は、&lt;br /&gt;&lt;blockquote&gt;chrome://extensions/&lt;/blockquote&gt;&lt;br /&gt;を開くと拡張の一覧が出るので、そこからアンインストールできます。&lt;br /&gt;&lt;br /&gt;今後も、もう少し便利になるように改造できないか考えてみたいと思います。まずは「gg」でトップへスクロール、「Shift+g」でページ末尾へスクロール、という機能がほしいかも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-1815357126216166938?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/1815357126216166938/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevim.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/1815357126216166938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/1815357126216166938'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/09/chromevim.html' title='ChromeをVim風にキーボード操作する拡張'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-8821675628127633104</id><published>2009-08-16T00:20:00.030+09:00</published><updated>2009-08-17T19:03:16.062+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby on RailsのDBとしてSQLiteを使う</title><content type='html'>Rails2.0から、デフォルトのデータベースがSQLiteになっています。&lt;br /&gt;本稼動のサイトではMySQLを使うことが多かったので、開発環境でもSQLiteはあまり使っていませんでしたが、手軽に使えて便利だということなので、使ってみることにしました。&lt;br /&gt;&lt;br /&gt;ちなみに、RailsでMySQLを使う場合は以下のように明示的にDBを指定します。&lt;br /&gt;&lt;pre class="black"&gt;rails -d mysql myproject&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;SQLiteを使うまでのステップは以下のとおり。（Windowsです。）&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;SQLiteのdllをダウンロード&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;ダウンロードしたdllをパスの通ったフォルダに配置&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;sqlite3-rubyというgemをインストール&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h4&gt;１．SQLiteのdllをダウンロード&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/download.html"&gt;SQLiteのサイト&lt;/a&gt;から、&lt;span style="font-weight: bold;"&gt;「&lt;/span&gt;&lt;span&gt;Precompiled Binaries For Windows&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;」&lt;/span&gt;のところの&lt;br /&gt;sqlitedll-3_X_X.zip（執筆時点は&lt;span style="font-weight: bold;"&gt;sqlitedll-3_6_17.zip&lt;/span&gt;）をダウンロード&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;２．ダウンロードしたdllをパスの通ったフォルダに配置&lt;/h4&gt;&lt;br /&gt;１でダウンロードしたファイルを解凍すると、&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sqlite3.def&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sqlite3.dll&lt;/span&gt;&lt;br /&gt;の２つのファイルができますが、&lt;span style="font-weight: bold;"&gt;sqlite3.dllのみ配置すればOK&lt;/span&gt;です。&lt;br /&gt;今回は&lt;span style="font-weight: bold;"&gt;C:\windows&lt;/span&gt;に配置しました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;３．sqlite3-rubyというgemをインストール&lt;/h4&gt;&lt;br /&gt;&lt;pre class="black"&gt;gem install sqlite3-ruby&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以上で、RailsからSQLiteが使えるようになっているはずです。&lt;br /&gt;&lt;pre class="black"&gt;rails myproject&lt;/pre&gt;&lt;br /&gt;このようにRailsプロジェクトを作成すると、&lt;span style="font-weight: bold;"&gt;config/database.yml&lt;/span&gt;がSQLiteを見るように作成されます。&lt;br /&gt;&lt;br /&gt;ちなみに、mysqlでは&lt;br /&gt;&lt;pre class="black"&gt;rake db:create&lt;/pre&gt;&lt;br /&gt;などでデータベースを作成してから、&lt;br /&gt;&lt;pre class="black"&gt;rake db:migrate&lt;/pre&gt;&lt;br /&gt;でテーブルを生成しますが、&lt;span style="font-weight: bold;"&gt;sqliteではrake db:createは不要&lt;/span&gt;のようでした。&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/PoohKid/20070314/p1"&gt;RailsでSQLite3を使おう&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dbonline.jp/sqliteinstall/install/index3.html"&gt;SQLite DLLのダウンロード&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-8821675628127633104?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/8821675628127633104/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/08/ruby-on-railsdbsqlite.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8821675628127633104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/8821675628127633104'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/08/ruby-on-railsdbsqlite.html' title='Ruby on RailsのDBとしてSQLiteを使う'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-5682491651274681875</id><published>2009-08-11T13:05:00.034+09:00</published><updated>2009-08-25T12:23:44.602+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>はてなのような自動キーワードリンクをtx-rubyで実装</title><content type='html'>はてなダイアリーやニコニコ大百科では、本文のキーワードに自動的にリンクが付くようになっていますが、ニコニコ大百科では、sennaとrubyを使って実装しているそうです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/tasukuchan/20090810/senna_autolink_ruby"&gt;はてなのようなキーワードリンクをRubyで付与する実例&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;僕もキーワードリンクを実装する機会があったのですが、そのときは&lt;span style="font-weight:bold;"&gt;tx-ruby&lt;/span&gt;を使いました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gimite.net/en/index.php?tx-ruby"&gt;tx-ruby&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これは&lt;span style="font-weight:bold;"&gt;trie&lt;/span&gt;というデータ構造を扱う&lt;a href="http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx-j.htm"&gt;tx&lt;/a&gt;というライブラリを、rubyから使うものです。&lt;br /&gt;rubyを介しても十分高速で、以前Wikipediaの見出し語約90万語をキーワードに使って試した際も、非常に高速に動作しました。&lt;br /&gt;大変便利だったので、書いておきます。&lt;br /&gt;&lt;br /&gt;tx-rubyのダウンロードは&lt;a href="http://gimite.net/en/index.php?tx-ruby"&gt;こちら&lt;/a&gt;から。&lt;br /&gt;ダウンロードしたファイルを解凍したあと、そのディレクトリに移動して、&lt;br /&gt;&lt;pre class="black"&gt;ruby setup.rb&lt;/pre&gt;&lt;br /&gt;とすると、簡単にインストールできます。（Windowsでも使えます。）&lt;br /&gt;&lt;br /&gt;それでは&lt;a href="http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%A4%A7%E7%99%BE%E7%A7%91"&gt;ニコニコ大百科の説明文&lt;/a&gt;と同様にできるかどうかやってみます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;autolink_test.rb&lt;/span&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/hirokifujita/Home/autolink_test.rb.rb?attredirects=0"&gt;ダウンロード&lt;/a&gt;&lt;br /&gt;&lt;pre name="code" class="ruby"&gt;&lt;br /&gt;require 'cgi'&lt;br /&gt;require 'tx'&lt;br /&gt;&lt;br /&gt;builder = Tx::Builder.new&lt;br /&gt;words = ['ニコニコ大百科', 'ニコニコ動画', '運営', '未来検索ブラジル', 'ニコペ', 'ニコ百', '大百科']&lt;br /&gt;builder.add_all(words)&lt;br /&gt;# キーワードをインデックスファイルに書き込み&lt;br /&gt;builder.build("test.index")&lt;br /&gt;&lt;br /&gt;# インデックスファイルを読み込み&lt;br /&gt;index = Tx::Index.open("test.index")&lt;br /&gt;&lt;br /&gt;str = "ニコニコ大百科（-だいひゃっか）とは、ニコニコ動画上での各種用語に関する解説や、ニコニコ動画上にアップされている動画についての情報、その他あらゆる言葉についての情報をユーザが自由に記述できるサイトである。運営・管理ともに未来検索ブラジルが行っている。「ニコペ」、「ニコ百」、「百」、「百」などと、略称され、単に「大百科」と呼ぶこともあるやもしれない。"&lt;br /&gt;&lt;br /&gt;# キーワードにマッチする部分をリンクに置き換え&lt;br /&gt;ret = index.gsub(str) do |s, i|&lt;br /&gt;  "&amp;lt;a href='http://dic.nicovideo.jp/a/#{CGI.escape(s)}' target='_blank'&amp;gt;#{s}&amp;lt;/a&amp;gt;"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# 結果をファイルに出力&lt;br /&gt;File.open('autolink.txt', 'w') do |f|&lt;br /&gt;  f.puts ret&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;出力&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;autolink.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%A4%A7%E7%99%BE%E7%A7%91' target='_blank'&gt;ニコニコ大百科&lt;/a&gt;（-だいひゃっか）とは、&lt;a href='http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BB' target='_blank'&gt;ニコニコ動画&lt;/a&gt;上での各種用語に関する解説や、&lt;a href='http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BB' target='_blank'&gt;ニコニコ動画&lt;/a&gt;上にアップされている動画についての情報、その他あらゆる言葉についての情報をユーザが自由に記述できるサイトである。&lt;a href='http://dic.nicovideo.jp/a/%E9%81%8B%E5%96%B6' target='_blank'&gt;運営&lt;/a&gt;・管理ともに&lt;a href='http://dic.nicovideo.jp/a/%E6%9C%AA%E6%9D%A5%E6%A4%9C%E7%B4%A2%E3%83%96%E3%83%A9%E3%82%B8%E3%83%AB' target='_blank'&gt;未来検索ブラジル&lt;/a&gt;が行っている。「&lt;a href='http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%9A' target='_blank'&gt;ニコペ&lt;/a&gt;」、「&lt;a href='http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E7%99%BE' target='_blank'&gt;ニコ百&lt;/a&gt;」、「百」、「百」などと、略称され、単に「&lt;a href='http://dic.nicovideo.jp/a/%E5%A4%A7%E7%99%BE%E7%A7%91' target='_blank'&gt;大百科&lt;/a&gt;」と呼ぶこともあるやもしれない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;キーワードリンクが成功しました！&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Gimite/20071210/1197299262"&gt;tx-ruby&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx-j.htm"&gt;tx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://chasen.org/~taku/blog/archives/2005/09/post_812.html"&gt;はてなキーワードを高速に付与&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/naoya/20090405/aho_corasick"&gt;Aho Corasick 法&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-5682491651274681875?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/5682491651274681875/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/08/tx-ruby.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5682491651274681875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5682491651274681875'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/08/tx-ruby.html' title='はてなのような自動キーワードリンクをtx-rubyで実装'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-2704897431789338902</id><published>2009-08-03T14:12:00.005+09:00</published><updated>2009-08-06T00:42:40.227+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><title type='text'>サイトのトラフィックを調べるブックマークレット２つ</title><content type='html'>サイトの開発や運営にたずさわる人は、&lt;a href="http://www.alexa.com/"&gt;Alexa&lt;/a&gt;や&lt;a href="https://www.google.com/adplanner/planning/site_profile#siteDetails"&gt;Google Ad Planner&lt;/a&gt;で他のサイトのトラフィックをチェックすることが多いと思いますが、そんなときに役立つ、今見ているサイトのトラフィックを参照するブックマークレットを作ってみました。&lt;br /&gt;&lt;br /&gt;以下をブックマークツールバーに入れて、気になるサイトでクリックしてみてください。&lt;br /&gt;&lt;br /&gt;　&lt;a href="javascript:window.open('http://www.alexa.com/data/details/traffic_details/'+location.href,'_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;"&gt;Alexa&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　&lt;a href="javascript:window.open('https://www.google.com/adplanner/planning/site_profile#siteDetails?identifier='+location.href+'&amp;amp;lp=true','_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;"&gt;AdPlanner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;中身はこんな感じです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Alexa&lt;/span&gt;&lt;br /&gt;javascript:window.open('http://www.alexa.com/data/details/traffic_details/'+location.href,'_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AdPlanner&lt;/span&gt;&lt;br /&gt;javascript:window.open('https://www.google.com/adplanner/planning/site_profile#siteDetails?identifier='+location.href+'&amp;amp;lp=true','_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-2704897431789338902?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/2704897431789338902/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/08/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2704897431789338902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/2704897431789338902'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/08/blog-post.html' title='サイトのトラフィックを調べるブックマークレット２つ'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-3413506181171161195</id><published>2009-07-27T23:24:00.019+09:00</published><updated>2010-05-18T22:01:41.021+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>VimでRailsを快適に開発する（設定編）</title><content type='html'>Vimはとっつきにくいところがありますが、使っていると離れられなくなるくらいの、素晴らしいエディタです。&lt;br /&gt;当然Railsの開発でもVimを使いたい。ということで、Rails開発をVimで快適に行えるよう設定してみました。&lt;br /&gt;&lt;br /&gt;参考にしたのは以下のサイト。&lt;br /&gt;Rails on Vim&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/garbagetown/20090506/1241601962"&gt;http://d.hatena.ne.jp/garbagetown/20090506/1241601962&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下、手順です。Windows環境です。&lt;br /&gt;&lt;br /&gt;１．&lt;a href="http://www.kaoriya.net/"&gt;Kaoriya&lt;/a&gt; から最新のWindows版Vimをダウンロード。&lt;br /&gt;　　実行するとフォルダが解凍されます。&lt;br /&gt;　　解凍したものは、今回はProgram Files以下に、&lt;br /&gt;&lt;br /&gt;　　&lt;span style="font-weight: bold;"&gt;C:\Program Files\vim72-kaoriya-w32j&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　　として置くことにします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;２．環境変数HOMEを設定（どこでもいいが、たとえば C:\home)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;３．&lt;a href="http://sourceforge.net/projects/ctags/files/ctags/5.7/ec57w32.zip/download"&gt;ec57w32.zip&lt;/a&gt;　をダウンロードし、解凍して、&lt;span style="font-weight: bold;"&gt;ctags.exe&lt;/span&gt;をC:\Windowsにコピー（最新版は&lt;a href="http://sourceforge.net/projects/ctags/files/"&gt;ここ&lt;/a&gt; から確認）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;４．Gitを使うため、&lt;a href="http://code.google.com/p/msysgit/"&gt;msysgit&lt;/a&gt; をインストール&lt;br /&gt;&lt;br /&gt;　　そのまま次へ次へのインストールでいいと思いますが、通常のコマンドプロンプトから使いたいので、&lt;br /&gt;　　途中Adjusting your PATH environmentでは、&lt;br /&gt;　　&lt;br /&gt;　　　&lt;span style="font-weight: bold;"&gt;Run Git from the Windows Gommand Prompt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　　を選択しました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;追記：msysgitをインストールしたら、コマンドプロンプトが文字化けしました。&lt;/b&gt;（Git-1.7.0.2-preview20100309.exe、2010/5/18 現在）&lt;br /&gt;文字化けの解決は&lt;a href="http://silentpower2.blogspot.com/2010/05/msysgit.html"&gt;こちら&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;５．上記サイトにあるように、コマンドプロンプトで以下のように実行&lt;br /&gt;&lt;blockquote&gt;cd %HOME%&lt;br /&gt;git clone git://github.com/akitaonrails/vimfiles.git&lt;br /&gt;cd vimfiles&lt;br /&gt;git submodule init&lt;br /&gt;git submodule update&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;追記：_vimrcに以下の一行を追加しないと動かなくなっているようです。&lt;/b&gt;（2010/5/18 現在）&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;source ~/vimfiles/vimrc &lt;/pre&gt;&lt;br /&gt;詳しくは&lt;a href="http://github.com/akitaonrails/vimfiles"&gt;こちら&lt;/a&gt;を参照してください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;６．%HOME%（今回はC:\home）に_gvimrc、_vimrcを設置&lt;br /&gt;&lt;br /&gt;　　今まで自分で使っていたものに、上記サイトにある設定を追加したものを設置しました。&lt;br /&gt;　　参考までに以下に置いておきます。&lt;br /&gt;　　&lt;a href="https://sites.google.com/site/hirokifujita/Home/_gvimrc?attredirects=0"&gt;_gvimrc&lt;/a&gt;　　　&lt;br /&gt;　　&lt;a href="https://sites.google.com/site/hirokifujita/Home/_vimrc?attredirects=0"&gt;_vimrc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;７．　コマンドプロンプトから起動できるようにする（おまけ）&lt;br /&gt;&lt;br /&gt;　　コマンドプロンプトから起動できるようにしておくと何かと便利です。&lt;br /&gt;&lt;br /&gt;　　やり方はいろいろあると思いますが、僕は&lt;span style="font-weight: bold;"&gt;alias for windows&lt;/span&gt;というソフトを使っています。&lt;br /&gt;　　ダウンロードは、&lt;a href="http://www2.wbs.ne.jp/%7Ekanegon/"&gt;ここ&lt;/a&gt;からAliasというものを選びます。&lt;br /&gt;　　詳しくは&lt;a href="http://www2.wbs.ne.jp/%7Ekanegon/alias/alias.txt"&gt;こちら&lt;/a&gt;を見るとよいと思います。&lt;br /&gt;　　ダウンロード、設定した上で、&lt;br /&gt;&lt;pre class="black"&gt;alias vim "C:\Program Files\vim72-kaoriya-w32j\gvim.exe"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;　　と実行すると、コマンドプロンプトや、「ファイル名を指定して実行」から、&lt;br /&gt;&lt;br /&gt;&lt;pre class="black"&gt;vim&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;　　として起動できるのでとても便利。（「&lt;span style="font-weight: bold;"&gt;vi&lt;/span&gt;」で起動したい場合は、alias vi ･･･　と実行。）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;８．RailsアプリのルートディレクトリでVimを立ち上げ、&lt;br /&gt;&lt;br /&gt;　　&lt;pre class="black"&gt;\p&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;　　として、以下のような画面が立ち上がれば成功です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OWbpIlf4OEQ/SnBi--VnLFI/AAAAAAAAADA/5G7qJ-RM5YY/s1600-h/rails_vim.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 311px;" src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/SnBi--VnLFI/AAAAAAAAADA/5G7qJ-RM5YY/s400/rails_vim.jpg" alt="" id="BLOGGER_PHOTO_ID_5363895990223318098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これで、VimでRails開発を快適に行える環境が整いました！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-3413506181171161195?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/3413506181171161195/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/07/vimrails.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3413506181171161195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/3413506181171161195'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/07/vimrails.html' title='VimでRailsを快適に開発する（設定編）'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OWbpIlf4OEQ/SnBi--VnLFI/AAAAAAAAADA/5G7qJ-RM5YY/s72-c/rails_vim.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-4761392212741324120</id><published>2009-07-27T18:54:00.007+09:00</published><updated>2009-08-17T13:35:07.084+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Windows Vista 64bitへのRuby on Railsインストール</title><content type='html'>ノートPCを買い換えたら、評判のあまりよろしくないVistaになりました。&lt;br /&gt;開発環境を一から作らなければならなくなったので、メモしておきます。&lt;br /&gt;&lt;br /&gt;といっても、今までのXPでの場合と全く同じ手順でインストールできました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;１、Rubyのインストール&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　One-Click Installerを以下からダウンロード。&lt;br /&gt;&lt;a href="http://rubyforge.org/frs/?group_id=167&amp;amp;release_id=28426"&gt;http://rubyforge.org/frs/?group_id=167&amp;amp;release_id=28426&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　ダブルクリックして指示に従えば、問題なくインストールできます。&lt;br /&gt;&lt;br /&gt;　2009年7月現在の1.8系の最新版は1.87で、One-Click Installerは1.86までしかないのですが、One-Click Installerは簡単なのでこれを使うことにします。&lt;br /&gt;&lt;br /&gt;　インストール後は、&lt;br /&gt;　&lt;pre class="black"&gt;ruby -v&lt;/pre&gt;&lt;br /&gt;　でバージョンが確認できるようになります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;２、Ruby Gemsのインストール&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　以下から最新のzip版をダウンロード。&lt;br /&gt;　&lt;a href="http://rubyforge.org/frs/?group_id=126&amp;amp;release_id=37073"&gt;http://rubyforge.org/frs/?group_id=126&amp;amp;release_id=37073&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　解凍後、コマンドプロンプトでそのフォルダに移動し、&lt;br /&gt;　&lt;pre class="black"&gt;ruby setup.rb&lt;/pre&gt;&lt;br /&gt;　を実行するとインストールできます。インストール成功後、&lt;br /&gt;　&lt;pre class="black"&gt;gem -v&lt;/pre&gt;&lt;br /&gt;　とするとバージョンを確認できます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;３、Ruby on Railsのインストール&lt;/span&gt;&lt;br /&gt;　&lt;pre class="black"&gt;gem install rails&lt;/pre&gt;&lt;br /&gt;　こちらも、インストールが成功すると、&lt;br /&gt;　&lt;pre class="black"&gt;rails -v&lt;/pre&gt;&lt;br /&gt;　でバージョンが確認できるようになります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-4761392212741324120?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/4761392212741324120/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/07/windows-vista-64bitruby-on-rails.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4761392212741324120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4761392212741324120'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/07/windows-vista-64bitruby-on-rails.html' title='Windows Vista 64bitへのRuby on Railsインストール'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-5932088236349142281</id><published>2009-07-11T00:13:00.005+09:00</published><updated>2009-07-11T19:06:37.662+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><title type='text'>YouTubeでリピート再生したいときに使うブックマークレット</title><content type='html'>YouTubeで音楽を聞きながら仕事することが多いのですが、リピート再生ができないのが不便です。&lt;br /&gt;と、ここでIDEA*IDEAで紹介されていた&lt;a href="http://www.ideaxidea.com/archives/2009/06/youtuberepeat.html"&gt;「YouTubeRepeat」の記事&lt;/a&gt;を思い出しました。&lt;br /&gt;&lt;br /&gt;でもURLをいちいち変更するのは面倒なので、ブックマークレットがほしい。&lt;br /&gt;探してみると、既に作っている方が。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://magarimame.com/archives/576"&gt;YouTubeRepeatでリピート再生するブックマークレット&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これで十分便利なのですが、YouTubeRepeatから元のYouTubeのページに戻りたいということも&lt;br /&gt;ありそうだったので、少しだけ改造したものを作りました。&lt;br /&gt;&lt;br /&gt;以下のリンクをブックマークツールバーに設置してください。&lt;br /&gt;YouTubeで実行するとYouTubeRepeatに移動してリピート再生できます。&lt;br /&gt;戻りたくなったら、もう一回実行すると、YouTubeからYouTubeRepeatに戻ります。&lt;br /&gt;&lt;br /&gt;&lt;a href="javascript:location.href=location.href.search('youtube.com')!=-1?location.href.replace('youtube.com','youtuberepeat.com'):location.href.replace('youtuberepeat.com','youtube.com');"&gt;YouTubeRepeat&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ちなみに中身は以下のとおり。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;javascript:location.href=location.href.search('youtube.com')!=-1?location.href.replace('youtube.com','youtuberepeat.com'):location.href.replace('youtuberepeat.com','youtube.com');&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;YouTubeのリピート再生、超便利です！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-5932088236349142281?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/5932088236349142281/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/07/youtube.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5932088236349142281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/5932088236349142281'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/07/youtube.html' title='YouTubeでリピート再生したいときに使うブックマークレット'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-706591200341615268</id><published>2009-06-21T23:15:00.002+09:00</published><updated>2009-06-21T23:17:43.472+09:00</updated><title type='text'>Bloggerにはてなスターとカウンターを設置したのでメモ</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;前回のエントリー『&lt;a href="http://silentpower2.blogspot.com/2009/06/vimperatorread-it-later.html"&gt;vimperatorでRead　It Laterを使う&lt;/a&gt;』で、記念すべきはじめての&lt;br /&gt;はてなスターとブックマークをいただいたようなので、このブログにもはてなスターと&lt;br /&gt;ブックマークのカウンター（○○usersというもの）を設置してみました。&lt;br /&gt;&lt;br /&gt;以下を参考にして、すぐに設置することができました。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="Permanent Link to Blogger にソーシャルブックマークボタンまとめ" rel="bookmark" href="http://caprico99.blogspot.com/2009/04/blogger_05.html"&gt;Blogger にソーシャルブックマークボタンまとめ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Permanent Link to blogger に はてブ と はてなスター を設置してみた" rel="bookmark" href="http://caprico99.blogspot.com/2009/03/blogger.html"&gt;blogger に はてブ と はてなスター を設置してみた&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;このとおりやれば問題なくできると思いますが、これらのエントリーを見る前に作業して、&lt;br /&gt;つまずいてしまった点が２つありましたので、念のために書いておきます。&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://b.hatena.ne.jp/help/count"&gt;はてなに書いてある方法&lt;/a&gt;は、「クラシックテンプレート」でのみ有効な方法のようで、&lt;br /&gt;　テンプレートを変えている場合はうまくいきません。&lt;br /&gt;&lt;br /&gt;・&lt;b&gt;ウィジェットのテンプレートを展開&lt;/b&gt;にチェックをいれないと、投稿の要素の中身が表示されず、&lt;br /&gt;　従って編集もできないので注意が必要です。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-706591200341615268?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/706591200341615268/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/06/blogger_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/706591200341615268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/706591200341615268'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/06/blogger_21.html' title='Bloggerにはてなスターとカウンターを設置したのでメモ'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-232365334908924670</id><published>2009-06-17T03:01:00.003+09:00</published><updated>2009-09-19T02:16:43.774+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><title type='text'>VimperatorでRead It Laterを使う</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Firefoxアドオンの&lt;a href='https://addons.mozilla.org/ja/firefox/addon/7661'&gt;Read It Later&lt;/a&gt;はとても便利ですが、あとで読むのチェックに&lt;br/&gt;アドレスバー（というかawesome bar）を使うので、アドレスバー非表示で使っている&lt;br/&gt;Vimperatorとの相性がよくなくて困ります。&lt;br/&gt;&lt;br/&gt;feedアイコンなどをアドレスバーからステータスバーに移動するのに使っている&lt;br/&gt;&lt;a href='http://d.hatena.ne.jp/janus_wel/20081127/1227807826'&gt;migratestatusbar.js&lt;/a&gt;を使って、同じように移動できないか調べてみました。&lt;br/&gt;&lt;br/&gt;アドレスバーに表示されているチェック型のアイコンのIDが分かればそれを指定するだけで&lt;br/&gt;よいはずなのですが、探し方がわからず苦労しました。&lt;br/&gt;&lt;br/&gt;最終的に書いた&lt;b&gt;_vimperatorrc&lt;/b&gt;はこんな感じです。&lt;br/&gt;&lt;blockquote&gt;javascript &amp;lt;&lt;eom&gt;&lt;br/&gt;    liberator.globalVariables.migrate_elements = [&lt;br/&gt;        {&lt;br/&gt;            // star button of awesome bar&lt;br/&gt;            id:    'star-button',&lt;br/&gt;            dest:  'security-button',&lt;br/&gt;            after: true,&lt;br/&gt;        },&lt;br/&gt;        {&lt;br/&gt;            // icon that show the existence of RSS and Atom on current page&lt;br/&gt;            id:    'feed-button',&lt;br/&gt;            dest:  'security-button',&lt;br/&gt;            after: true,&lt;br/&gt;        },&lt;br/&gt;        {&lt;br/&gt;            // favicon of awesome bar&lt;br/&gt;            id:    'page-proxy-stack',&lt;br/&gt;            dest:  'liberator-statusline',&lt;br/&gt;            after: false,&lt;br/&gt;        },&lt;br/&gt;        {&lt;br/&gt;            id:    'isRitL-later',&lt;br/&gt;            dest:  'security-button',&lt;br/&gt;            after: true,&lt;br/&gt;        },&lt;br/&gt;        {&lt;br/&gt;            id:    'isRitL-mark1',&lt;br/&gt;            dest:  'security-button',&lt;br/&gt;            after: true,&lt;br/&gt;        },&lt;br/&gt;   ];&lt;br/&gt;EOM&lt;/eom&gt;&lt;/blockquote&gt;&lt;b&gt;id: 'isRitL-later'&lt;/b&gt;は「あとで読む」として選択していない白抜きチェックのアイコンです。&lt;br/&gt;チェック済みの赤色チェックのアイコンは、実は&lt;b&gt;'isRitL-mark1'&lt;/b&gt;と&lt;b&gt;'isRitL-mark2'&lt;/b&gt;という&lt;br/&gt;2つのアイコンで出来ていたようですが、2つきれいに並ばなかったのと、機能的に&lt;br/&gt;'isRitL-mark1'だけで十分だったので、それだけ指定しています。&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-232365334908924670?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/232365334908924670/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/06/vimperatorread-it-later.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/232365334908924670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/232365334908924670'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/06/vimperatorread-it-later.html' title='VimperatorでRead It Laterを使う'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-7591057489957372420</id><published>2009-05-13T21:02:00.008+09:00</published><updated>2009-05-14T01:23:44.555+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><title type='text'>Luceneの内部構造を見る３</title><content type='html'>&lt;a href="http://silentpower2.blogspot.com/2009/05/lucene_10.html"&gt;前回&lt;/a&gt;はLuceneインデックスのファイル構成について確認しました。&lt;br /&gt;いよいよ各ファイルについて見ていきますが、その前にLuceneで使われているデータ型が&lt;br /&gt;「&lt;a href="http://lucene.apache.org/java/2_4_1/fileformats.html#Primitive%20Types"&gt;Primitive Types&lt;/a&gt;」に書いてありますので、確認しておきます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OWbpIlf4OEQ/SgrsPmkXTiI/AAAAAAAAABw/_oOKbJbP1js/s1600-h/primitive_type.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 400px;" src="http://2.bp.blogspot.com/_OWbpIlf4OEQ/SgrsPmkXTiI/AAAAAAAAABw/_oOKbJbP1js/s400/primitive_type.gif" alt="" id="BLOGGER_PHOTO_ID_5335336461369036322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Byte&lt;/span&gt;はフォーマットファイルの最小単位となる8bitです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UInt32&lt;/span&gt;、&lt;span style="font-weight: bold;"&gt;UInt64&lt;/span&gt;はそれぞれ32bit、64bitの固定長の整数で、左側が大きな桁を表します。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;VInt&lt;/span&gt;は、可変長の整数です。&lt;br /&gt;各byteの一番左の１bitで次のbyteを使用するかどうかを表します。&lt;br /&gt;１なら次のbyteを使用、0なら使用しません。&lt;br /&gt;続く７bitは通常通り、左に行くに従って大きな桁になっていくのですが、&lt;br /&gt;byteを股がる場合は、右のbyteのほうが大きな桁になることに注意してください。&lt;br /&gt;画像の（１）、（２）、（３）の矢印の順に桁が上がっていきます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Char&lt;/span&gt;はUTF-8でエンコードされます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;String&lt;/span&gt;はまずvintで使用するbyte数を表し、その数だけcharが続きます。&lt;br /&gt;&lt;br /&gt;次回は、各ファイルについて見ていきます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-7591057489957372420?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/7591057489957372420/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene_13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7591057489957372420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7591057489957372420'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene_13.html' title='Luceneの内部構造を見る３'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OWbpIlf4OEQ/SgrsPmkXTiI/AAAAAAAAABw/_oOKbJbP1js/s72-c/primitive_type.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-4418979543382801773</id><published>2009-05-10T23:50:00.005+09:00</published><updated>2009-05-25T02:17:37.880+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><title type='text'>Luceneの内部構造を見る２</title><content type='html'>Luceneの&lt;a href="http://lucene.apache.org/java/2_4_1/fileformats.html"&gt;ファイルフォーマット&lt;/a&gt;を引き続き見ていきます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overview&lt;/span&gt;です。&lt;br /&gt;インデックスはセグメントで構成されます。&lt;br /&gt;セグメントはドキュメントの追加で作成され、マージ操作でまとめられたりします。&lt;br /&gt;&lt;br /&gt;各セグメントは、以下のようなファイルで構成されます。&lt;br /&gt;（設定によっては.cfs形式の１つのファイルにまとめられます。）&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OWbpIlf4OEQ/SgbptVU3WGI/AAAAAAAAABo/zyG4ebt1Zm4/s1600-h/overview.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 500px;" src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/SgbptVU3WGI/AAAAAAAAABo/zyG4ebt1Zm4/s400/overview.gif" alt="" id="BLOGGER_PHOTO_ID_5334207773694974050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://silentpower2.blogspot.com/2009/05/lucene_13.html"&gt;次回&lt;/a&gt;以降は、各ファイルについて詳しく見ていきます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-4418979543382801773?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/4418979543382801773/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene_10.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4418979543382801773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/4418979543382801773'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene_10.html' title='Luceneの内部構造を見る２'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OWbpIlf4OEQ/SgbptVU3WGI/AAAAAAAAABo/zyG4ebt1Zm4/s72-c/overview.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6944970317852144473.post-7065043509782806634</id><published>2009-05-10T00:20:00.018+09:00</published><updated>2009-05-25T02:16:34.185+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><title type='text'>Luceneの内部構造を見る１</title><content type='html'>Solr内部で使われているLuceneの中身を見ていきたいと思います。&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;なお、ただ使うだけなら全く必要ない情報ですので、内部構造に興味がある&lt;/div&gt;&lt;div&gt;場合だけ読んでもらえればよいかと思います。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;一番核となるインデックスファイルのフォーマットが&lt;a href="http://lucene.apache.org/java/2_4_1/fileformats.html"&gt;ここ&lt;/a&gt;で公開されて いますので、&lt;br /&gt;まずはこれから見ていきます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;「&lt;b&gt;Definitions&lt;/b&gt;」では、&lt;b&gt;Document&lt;/b&gt;、&lt;b&gt;Field&lt;/b&gt;、&lt;b&gt;Term&lt;/b&gt;の定義が書いてあります。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;それぞれの関係はこんな感じ。&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_OWbpIlf4OEQ/SgWvf-WuvZI/AAAAAAAAAAc/y-3-nIbSFxE/s400/document.gif" style="cursor: pointer; width: 400px; height: 240px;" alt="" id="BLOGGER_PHOTO_ID_5333862297539362194" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;続いての「&lt;b&gt;Inverted Indexing&lt;/b&gt;」とは、日本語で言うところの「&lt;b&gt;転置インデックス」&lt;/b&gt;を作ることです。&lt;/div&gt;&lt;div&gt;Documentに対して単語が対応している状態から、単語（Term）をキーにして&lt;/div&gt;&lt;div&gt;Documentを対応づけることで、単語からDocumentを素早く検索できるようにします。&lt;/div&gt;&lt;div&gt;検索エンジンでは一般的な手法です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;こんなイメージです。（※実際は少し違うみたいです。）&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_OWbpIlf4OEQ/SgWxhn6RccI/AAAAAAAAAAk/mIIj1lwABIo/s400/invert.gif" style="cursor: pointer; width: 500px; height: 250px;" alt="" id="BLOGGER_PHOTO_ID_5333864524897415618" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://silentpower2.blogspot.com/2009/05/lucene_10.html"&gt;次回&lt;/a&gt;に続きます。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6944970317852144473-7065043509782806634?l=silentpower2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://silentpower2.blogspot.com/feeds/7065043509782806634/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7065043509782806634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6944970317852144473/posts/default/7065043509782806634'/><link rel='alternate' type='text/html' href='http://silentpower2.blogspot.com/2009/05/lucene.html' title='Luceneの内部構造を見る１'/><author><name>Hiroki Fujita</name><uri>http://www.blogger.com/profile/05988776605641288020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OWbpIlf4OEQ/SgWvf-WuvZI/AAAAAAAAAAc/y-3-nIbSFxE/s72-c/document.gif' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
