2009年11月17日火曜日

RDB以外のデータストアを調べてみた はてなブックマーク

最近、RDB(リレーショナルデータベース)以外のデータストアを使おうという流れが、ますます強くなっていると感じます。
RDBはスキーマ変更によるアプリへの影響が大きいこと、データが大規模になったときに分散させにくいことなどにより、RDBの制約がアプリケーションの改善をする上でのボトルネックになりがちです。

ということで、リレーショナルでないデータストアについて、少し調べてみたのでメモしておきます。

キーバリュー型データストア(KVS)


memcachedや、最近ではTokyo Tyrantが有名ですね。
memcachedはキャッシュ用途だけですが、Tokyo Tyrantは永続化もできるみたいです。
Tokyo TyrantをRailsから使い易くしたという、Miyazaki Resistanceもよさそう。食べログでも使っているそうです。

ドキュメント指向データベース


ApacheのプロジェクトになったCouchDBが有名。
最近ではMongoDBが、注目株らしいです。

UbuntuにCouchDBを入れて、ここを見て動かしてみましたが、なかなかよさそうな印象でした。
RDBの発想から頭を切替えなければいけませんが、CouchDBの名前のとおり、あまり構えずに気楽に使ってみたいと思います。

MySQLを非リレーショナルに使う


非常におもしろかったのがFriendFeedの事例
CouchDBなどは安定性で不安があったため、勝手の知ったMySQLをスキーマレスで使うようにしたとのこと。
idとbodyしかないテーブルにJSONでデータを格納し、インデックス用に別テーブルを作るという大胆な発想。

WebアプリのDBスキーマレス化がRubyにぴったりな件
のSimpleResourceも同様のアプローチのようなのでメモ。

Solrを使えないか?


Apacheプロジェクトの検索エンジンでSolrというものがあります。Solrでは、検索対象のデータを非正規化してドキュメントとして格納します。
まさにドキュメント指向のデータストアです。さらに検索能力は右に出るものがないくらいの高性能。分散させる仕組みも持っています。

実際の運用ではしっかりとRDBが別にあった上で、そのデータを検索するために使われることが多いようですが(僕もそうやっています)、もう少しメインのデータストアとして簡単に使えたらいいのになと思っています。
問題はリアルタイムの頻繁なデータ更新に対応できないことなので、他のデータストアと組み合わせてうまくパッケージ化できないかなと。

Solrについては、つい先日1.4がリリースされたので、別エントリーで書こうと思います。

Bigtable、Simple DB


Googleで使われているBigtableや、Amazonのクラウドで提供されているSimple DBも非リレーショナルなデータベースだそうです。
Bigtableは無料で使えるGoogle App Engineでも利用できます。ちょうどGoogle App Engineを使いはじめたところなので、Bigtableも使うことになるはず。

2009年10月24日土曜日

メダチェアとWindows 7を購入 はてなブックマーク

午前はオークションで購入したメダチェアとWindows7の受け取り。

以前の椅子で腰痛に悩まされていたので、アーロン、バロン、メダといったあたりを検討した結果、メダチェアを購入。すわり心地はまあまあかな。定価20万ということで少し過剰に期待しすぎたかも。

でも、長時間座っても腰が痛くならないようなのでよかった。これで椅子に座ってPCが使える。

Windows7はVAIOのアップグレードサービスで3,150円。Vistaと比べれば全然よい。動作も速くなった。

2009年10月21日水曜日

Vimlike Smoozieeのデモ動画 はてなブックマーク

Vimlike Smoozieeがかなり機能を絞って実装しているのは、時間的、能力的な制約も大きいのですが、あまり複雑にしないことで、なるべくヘビーユーザーでない人にも使ってもらえるようにと考えているところもあります。

Vimperatorは強力にカスタマイズできてとても便利です。ただ、インストールするといきなりアドレスバーが消えてコマンド入力になるなど、ヘビーユーザーでないとなかなか近寄りがたいところがあると思います。そういったとっつきにくさから、一般ユーザーがこの便利さを享受できないのは大変もったいないので、Vimperatorの便利さを一般ユーザーにもと思うわけです。

ということで、Vimlike Smoozieeのデモ動画を作ってみました。

ちなみに、このデモでは、キーボードの入力したキーを表示するGreasemonkeyスクリプト、FLASH KEYを少し変更してExtensionとしてインストールして使っています。FLASH KEYは動作がかなり素敵です。キーボード操作を画面に表示したいときにおすすめです。



現在のバージョンは0.0.9で、fキーで呼び出すクイックヒントと呼ばれる機能も実装しはじめています。
クイックヒントについては、もう少しできてから詳しく書こうと思っていますが、ChromeのJavascriptが早いからか、ヒントの表示がすごく速いです。
Firefoxだと、どうしてもわずかに間が空いてしまいますが、ヒントを出すときには頭の中にはもう遷移先に気持ちがあるので、そのわずかの間がじれったく感じてしまいます。なので、このスピードはとてもありがたいです。

Chromeにはもう少しシェアをとってもらって、FirefoxやIEなど他のブラウザに、動作スピード面でのプレッシャーをガンガン与えてほしいですね。

2009年10月9日金曜日

ChromeをVim風に操作する拡張 「Vimlike Smooziee」 が動かなくなっていたので修正 はてなブックマーク

最新のGoogle Chrome dev版(4.0.221.6)でVimlike Smoozieeが動かなくなっていたので、修正しました。
以下からインストールできます。
Vimlike Smooziee

バージョンは0.0.6です。

前回設定したupdate_urlの自動更新にも問題があったので、あわせて修正しています。もし前のバージョンを入れてもらっていた人がいましたら、もう一度インストールしてください。

変更


  • window.addEventListenerが効かなくなっていたので、document.addEventListenerに変更
  • update_urlを変更
  • ズームコマンドを不完全ながら導入

update_urlで指定するxmlファイルは、もともと他のファイルと同様にGoogle Codeにアップしていたのですが、Google Codeは同名で更新ができないようなので、別のところに変更しました。

ズームコマンドについては、以下のとおりです。
  • zi: 拡大 (zoom in)
  • zo: 縮小 (zoom out)
  • zm: たくさん拡大 (zoom more)
  • zr: たくさん縮小 (zoom reduce)
  • zz: 元の倍率に戻す

本当はドメインごとに記憶したいのですが、できていないので開くたびに通常倍率に戻ってしまいます。

※zrがちゃんと動いてないようです。zoも少しおかしい様子。近々直します。

2009年10月5日月曜日

ChromeをVim風にキーボード操作する拡張をGoogle Codeにアップ はてなブックマーク

Google Codeにアップしました


前回前々回と書いてきたChromeをVim風(またはFirefoxのVimperator風)に操作する拡張を、Google Codeにアップしました。

Vimlike Smooziee
http://code.google.com/p/vimlike-smooziee/
そのうちVimperatorの作者あたりがChrome向けにも作ってくれるんじゃないかなどと思いつつも、またいくつか改善しています。
とても便利になっていると思いますので、ぜひ使ってみてもらえればと思います。
現在のバージョンは0.0.3です。

※現在開発版のChrome4でしか動作確認していません。

追加、変更したこと


  1. j、kのスクロールにバグがあったので修正
  2. h、l(エル)キーでも左右にスムーズスクロール
  3. 0(ゼロ)で一番左へスクロール、$で一番右へスクロール
  4. ページの読み込み開始時に動作するように変更
  5. uで閉じたタブを開く(問題あり。後述)
  6. テキスト入力時にC-dでカーソルの後の1文字を削除、C-hで前の1文字を削除
  7. 自動アップデート


j、kキーのスクロールのバグについては、前エントリーのコメントで教えていただきました。ありがとうございます!
同時にh、lキーのスクロールも教えていただいたので、こちらもありがたく採用させていただきます。

4.については、今まではデフォルト設定でページの読み込みが完了してから動作するようになっていたため、少し操作するまで待たされるようになっていました。
今回の変更で読み込み開始時に動作するようになったので、より快適に使えるようになっています。

自動アップデートも設定しました。
chrome://extensions/ から更新ボタン("Update extensions now")をクリックすることで、今後更新がある場合には最新のバージョンにアップデートされます。(現状では有無を言わせずアップデートするようなので注意)

今回の変更分も合わせて、操作方法をまとめておきます。


操作方法まとめ


スクロール
  • j、kで上下にスムーズスクロール
  • h、l(エル)で左右にスムーズスクロール
  • ggでページトップへスクロール、Gでページ終わりへスクロール
  • 0(ゼロ)でページの一番左へスクロール、$でページの一番右へスクロール

履歴
  • H、Lでそれぞれ「戻る」「進む}

テキスト入力
  • giで最初のテキストボックスにフォーカス、Escでフォーカスを解除
  • テキストボックス内で、C-a、C-e でそれぞれ カーソルを先頭、末尾へ移動
  • テキストボックス内で、C-f、C-b でそれぞれ カーソルを1つ前へ、1つ後ろへ
  • テキストボックス内で、C-d、C-h でそれぞれ カーソルの1つ前を削除、1つ後ろを削除
  • テキストボックス内でカーソルが先頭にあるとき、C-aで全選択

タブ
  • rでリロード
  • dでタブを閉じる
  • uで閉じたタブを復元(タブ内の閲覧履歴は復元できず)

※ C-aは「Ctrl + a」、Gは「Shift + g」です。

※ uでは、そのタブ内での閲覧履歴は復元できません。履歴も復元したいときは本来のショートカットキーである「Ctrl+Shift+t」を使ってください。


今後ほしい機能

  • f、Fでクイックヒント
  • zi、zoでフォントの拡大、縮小

これができればとりあえず満足です。

前回も書いた、

C-pで前の(左の)タブに移動、C-nで次の(右の)タブに移動


については、一度実装してみたのですが、泣く泣くコメントアウトしました。
「新しいタブ」やchrome:// のページなどで動作が効かず、そこだけ元々のショートカットである印刷や新しいウィンドウの立ち上げが行われてしまい、煩わしいためです。

ただ、今後専用のAPIを用意するという投稿がGoogleグループにありましたので(リンク)、それができるのを待って実装する予定です。

ちなみにこのグループには、マウスやキーボードのイベントを扱う、より公式なAPIも用意するつもりだとの投稿もあるので、そちらも期待したいところ。

スクロール幅などをユーザーがカスタマイズできるようにしたいところですが、
先取り! Google Chrome Extensions 第4回 Chrome Extensionsのこれから
を見ると、どうもできるようになるようです。もう少しAPIが安定したら実装しようと思います。


実装についてのメモ


自動アップデートは、ここにあるように設定すれば、簡単に動きました。

ページの読み込み開始時に拡張が動作するようには、manifest.jsonのcontent_scriptsの項目で、
"run_at": "document_start"
と定義します。(ドキュメント

uで実装したタブを復活させるようなタブ操作は、Backgroud pageなどhtml側で行うようです。従ってContent scriptからBackgroud pageを呼び出す必要が出てきます。

そういうときは、Content script側でPortオブジェクトのportMessage()を使ってメッセージを送り、Backgroud page側ではそれを受けて連携するみたいです。(ドキュメント

uのタブ復元は、ソースを見てもらえればわかると思いますが、かなり無理をしている感じです。今後のAPI充実に期待です。

2009年9月19日土曜日

ChromeをVim風にキーボード操作する拡張 その2 はてなブックマーク

※最新版をGoogle Codeにアップしました。今後はこちらで更新する予定です
http://code.google.com/p/vimlike-smooziee/




前回のエントリーは、思ってもみないほど多くの人に見ていただけたようで驚きました。(といってもあくまでこのブログ基準です。)
やはりというべきか、ChromeでVimのように操作したいという需要は大きいんですね。

また変更を加えて、非常に快適な動作をするようになったので、公開してみます。

インストール


Vimlike_smooziee 0.0.2 (インストール)(ソース

※削除しました。こちらから最新のものをインストールしてください。

Vimperatorの_smoooziee.jsというj、kキーのスクロールをスムーズにする僕の愛用プラグインがあるのですが、今回はその動作も組み込んで、かなり自分好みにパッケージしています。

もし従来の動作がいいという場合は、ソースのコメントアウトしてるところを使ってもらえばすぐに動かせると思います。
smoozieeの動作も、ソース上部のinterval(スクロールの速度)やmoment(スクロール幅)を調整して好みの動作にすることもできます。(本当は外部ファイルで設定できればいいと思うのですが、やり方がわからないので。)

※もし前回のVimlike-0.0.1を入れてもらった人がいたら、一度chrome://extensions/からuninstallしてもらったほうがいいかもしれません。次回もし公開する場合は、配布方法も調べてもう少しちゃんとしようと思ってます。Vimlikeという名前も、前回参照したソースの名前をそのまま使ってしまっているので、変えるかもしれません。

前回からの変更点



  • j、kキーでスムーズスクロール。

  • 「戻る」「進む」をz、xからH、Lに変更。

  • ggでページトップへスクロール。Gでページ終わりへスクロール。

  • giで最初のテキストボックスにフォーカス。Escでフォーカスを解除。

  • テキストボックス内で、C-a、C-e、C-f、C-bでそれぞれ先頭、末尾、1つ進む、1つ戻る


C-aは、先頭に移動したあとで再度C-aを押すと、テキストの全選択となります。
そのほかrでリロード、dでタブを閉じる動作は変わりありません。

今後ほしい機能



  1. Hit-a-Hint

  2. uで閉じたタブを復活

  3. アドレスバーで入力補完の際、カーソルキーではなくTabキーで選択したい(できる?)

  4. C-pで前の(左の)タブに移動、C-nで次の(右の)タブに移動

  5. ziでフォント拡大、zoでフォント縮小

などなど。
特に1はキーボード操作で完結するためには必須で、これがないとはじまらないというくらいのもの。下記の参考サイトでも書かれているようなので、早めに組み込みたいです。
4のC-p、C-nはもともと、それぞれ印刷と新しいウィンドウを開く機能が割り当てられてるのですが、みんな使ってるんですかね。自分はあまり使っていないので上書きしてしまおうかなと。

参考にしたサイト


前回Extensionの作り方で参考にしたブログ筆者の記事。すごくわかりやすい。
先取り! Google Chrome Extensions(第2回 Chrome Extensionsの作り方#1

キーイベントをとる部分は、以下を参考にさせて(使わせて)いただきました。
はじめてのGoogle Chrome拡張、オレオレChromeKeyconfig
SafariとChromeではkeyIdentifierが使えるので素晴らしすぎます

おかげでChromeが快適でメインブラウザになる日も近いんじゃないかというくらいです。ありがとうございます。

最初の技評の記事で紹介されていた本家ドキュメント。あとでゆっくり読まないと。
Google Chrome Extensions: Developer Documentation

このChrome拡張のために必要にせまられてjavascriptをさわっていますが、どうもJavascriptは苦手というかよくわからないです。一度じっくり腰をすえて勉強しないといけないなあ。

2009年9月11日金曜日

ChromeをVim風にキーボード操作する拡張 はてなブックマーク

※最新版をGoogle Codeにアップしました。今後はこちらで更新する予定です
http://code.google.com/p/vimlike-smooziee/




ChromeをVim風に動かしたい


Firefoxのアドオンには、VimperatorというVim風にブラウザを操作してしまおうという大変マニアックなアドオンがあります。これに慣れるとVimperatorの入ってないFirefoxは使えなくなるといわれるほど、素晴らしく便利です。

ただ、Firefoxはどんどん起動が遅くなってしまうので、あくまでFirefoxがメインながらも、キビキビ動いてくれるGoogle Chromeを使用する機会も増えてきていました。

そうなるとやはり、ChromeでもVimperatorを使いたい。それが無理でもせめてVimのようにjキー、kキーでスクロールするだけでも全く使い勝手が違うだろうと思って調べていましたが、

Google Chrome、アドオン機能を開発者向けに解禁

ということで、最新の開発版で動かすことができましたので、作ったものを置いておきます。作ったといっても、既に先人が作っていたものを、ソースそのままで新しい拡張の仕様でまとめただけです。
(2009/9/11時点でのChrome開発版のバージョンは4.0.206.1

インストール


以下の「インストール」のリンクをクリックして保存すると、インストールを促すダイアログが出てくると思いますので、そこで「インストール」を押すとインストールされます。

Vimlike 0.0.1 (インストール)(ソース

※削除しました。こちらから最新のものをインストールしてください。

参考にしたサイト


参考にしたというか、既に書いたように、こちらのサイトのソースをそのまま今のExtensionの仕様でまとめただけです。
動作も同様ですので参照してください。
Google ChromeでVimっぽい動きをさせてみる

Extensionの作り方は以下のサイトを参考にしました。
Chrome Extensionsの作り方 2009/06/25版

開発版だけに度々仕様が変わっていて、以前はUser Scriptsという、FirefoxのGreasemonkeyに似た仕組みだったのですが、今後はExtensionsに一本化するんでしょうかね。
仕様が変わるたびに動かなくなったりすることがよくあるようなのでお気をつけください。

とても便利!


Vimperatorの機能とは差がありますが、j、kのスクロールだけでも、とても便利になりました。
AutoPagerize for Chromeと一緒に使うとより便利で感激です。

なお、アンインストールしたい場合は、
chrome://extensions/

を開くと拡張の一覧が出るので、そこからアンインストールできます。

今後も、もう少し便利になるように改造できないか考えてみたいと思います。まずは「gg」でトップへスクロール、「Shift+g」でページ末尾へスクロール、という機能がほしいかも。

2009年8月16日日曜日

Ruby on RailsのDBとしてSQLiteを使う はてなブックマーク

Rails2.0から、デフォルトのデータベースがSQLiteになっています。
本稼動のサイトではMySQLを使うことが多かったので、開発環境でもSQLiteはあまり使っていませんでしたが、手軽に使えて便利だということなので、使ってみることにしました。

ちなみに、RailsでMySQLを使う場合は以下のように明示的にDBを指定します。
rails -d mysql myproject


SQLiteを使うまでのステップは以下のとおり。(Windowsです。)

  1. SQLiteのdllをダウンロード
  2. ダウンロードしたdllをパスの通ったフォルダに配置
  3. sqlite3-rubyというgemをインストール

1.SQLiteのdllをダウンロード


SQLiteのサイトから、Precompiled Binaries For Windowsのところの
sqlitedll-3_X_X.zip(執筆時点はsqlitedll-3_6_17.zip)をダウンロード


2.ダウンロードしたdllをパスの通ったフォルダに配置


1でダウンロードしたファイルを解凍すると、
sqlite3.def
sqlite3.dll
の2つのファイルができますが、sqlite3.dllのみ配置すればOKです。
今回はC:\windowsに配置しました。


3.sqlite3-rubyというgemをインストール


gem install sqlite3-ruby


以上で、RailsからSQLiteが使えるようになっているはずです。
rails myproject

このようにRailsプロジェクトを作成すると、config/database.ymlがSQLiteを見るように作成されます。

ちなみに、mysqlでは
rake db:create

などでデータベースを作成してから、
rake db:migrate

でテーブルを生成しますが、sqliteではrake db:createは不要のようでした。

参考:
RailsでSQLite3を使おう
SQLite DLLのダウンロード

2009年8月11日火曜日

はてなのような自動キーワードリンクをtx-rubyで実装 はてなブックマーク

はてなダイアリーやニコニコ大百科では、本文のキーワードに自動的にリンクが付くようになっていますが、ニコニコ大百科では、sennaとrubyを使って実装しているそうです。

はてなのようなキーワードリンクをRubyで付与する実例


僕もキーワードリンクを実装する機会があったのですが、そのときはtx-rubyを使いました。

tx-ruby

これはtrieというデータ構造を扱うtxというライブラリを、rubyから使うものです。
rubyを介しても十分高速で、以前Wikipediaの見出し語約90万語をキーワードに使って試した際も、非常に高速に動作しました。
大変便利だったので、書いておきます。

tx-rubyのダウンロードはこちらから。
ダウンロードしたファイルを解凍したあと、そのディレクトリに移動して、
ruby setup.rb

とすると、簡単にインストールできます。(Windowsでも使えます。)

それではニコニコ大百科の説明文と同様にできるかどうかやってみます。

autolink_test.rb
ダウンロード

require 'cgi'
require 'tx'

builder = Tx::Builder.new
words = ['ニコニコ大百科', 'ニコニコ動画', '運営', '未来検索ブラジル', 'ニコペ', 'ニコ百', '大百科']
builder.add_all(words)
# キーワードをインデックスファイルに書き込み
builder.build("test.index")

# インデックスファイルを読み込み
index = Tx::Index.open("test.index")

str = "ニコニコ大百科(-だいひゃっか)とは、ニコニコ動画上での各種用語に関する解説や、ニコニコ動画上にアップされている動画についての情報、その他あらゆる言葉についての情報をユーザが自由に記述できるサイトである。運営・管理ともに未来検索ブラジルが行っている。「ニコペ」、「ニコ百」、「百」、「百」などと、略称され、単に「大百科」と呼ぶこともあるやもしれない。"

# キーワードにマッチする部分をリンクに置き換え
ret = index.gsub(str) do |s, i|
"<a href='http://dic.nicovideo.jp/a/#{CGI.escape(s)}' target='_blank'>#{s}</a>"
end

# 結果をファイルに出力
File.open('autolink.txt', 'w') do |f|
f.puts ret
end


出力
autolink.txt

ニコニコ大百科(-だいひゃっか)とは、ニコニコ動画上での各種用語に関する解説や、ニコニコ動画上にアップされている動画についての情報、その他あらゆる言葉についての情報をユーザが自由に記述できるサイトである。運営・管理ともに未来検索ブラジルが行っている。「ニコペ」、「ニコ百」、「百」、「百」などと、略称され、単に「大百科」と呼ぶこともあるやもしれない。


キーワードリンクが成功しました!

参考:
tx-ruby
tx
はてなキーワードを高速に付与
Aho Corasick 法

2009年8月3日月曜日

サイトのトラフィックを調べるブックマークレット2つ はてなブックマーク

サイトの開発や運営にたずさわる人は、AlexaGoogle Ad Plannerで他のサイトのトラフィックをチェックすることが多いと思いますが、そんなときに役立つ、今見ているサイトのトラフィックを参照するブックマークレットを作ってみました。

以下をブックマークツールバーに入れて、気になるサイトでクリックしてみてください。

 Alexa

 AdPlanner

中身はこんな感じです。

Alexa
javascript:window.open('http://www.alexa.com/data/details/traffic_details/'+location.href,'_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;

AdPlanner
javascript:window.open('https://www.google.com/adplanner/planning/site_profile#siteDetails?identifier='+location.href+'&lp=true','_blank','width=950,height=700,resizable=1,scrollbars=1');undefined;

2009年7月27日月曜日

VimでRailsを快適に開発する(設定編) はてなブックマーク

Vimはとっつきにくいところがありますが、使っていると離れられなくなるくらいの、素晴らしいエディタです。
当然Railsの開発でもVimを使いたい。ということで、Rails開発をVimで快適に行えるよう設定してみました。

参考にしたのは以下のサイト。
Rails on Vim
http://d.hatena.ne.jp/garbagetown/20090506/1241601962

以下、手順です。Windows環境です。

1.Kaoriya から最新のWindows版Vimをダウンロード。
  実行するとフォルダが解凍されます。
  解凍したものは、今回はProgram Files以下に、

  C:\Program Files\vim72-kaoriya-w32j

  として置くことにします。


2.環境変数HOMEを設定(どこでもいいが、たとえば C:\home)


3.ec57w32.zip をダウンロードし、解凍して、ctags.exeをC:\Windowsにコピー(最新版はここ から確認)


4.Gitを使うため、msysgit をインストール

  そのまま次へ次へのインストールでいいと思いますが、通常のコマンドプロンプトから使いたいので、
  途中Adjusting your PATH environmentでは、
  
   Run Git from the Windows Gommand Prompt

  を選択しました。

追記:msysgitをインストールしたら、コマンドプロンプトが文字化けしました。(Git-1.7.0.2-preview20100309.exe、2010/5/18 現在)
文字化けの解決はこちら


5.上記サイトにあるように、コマンドプロンプトで以下のように実行
cd %HOME%
git clone git://github.com/akitaonrails/vimfiles.git
cd vimfiles
git submodule init
git submodule update

追記:_vimrcに以下の一行を追加しないと動かなくなっているようです。(2010/5/18 現在)

source ~/vimfiles/vimrc 

詳しくはこちらを参照してください。


6.%HOME%(今回はC:\home)に_gvimrc、_vimrcを設置

  今まで自分で使っていたものに、上記サイトにある設定を追加したものを設置しました。
  参考までに以下に置いておきます。
  _gvimrc   
  _vimrc


7. コマンドプロンプトから起動できるようにする(おまけ)

  コマンドプロンプトから起動できるようにしておくと何かと便利です。

  やり方はいろいろあると思いますが、僕はalias for windowsというソフトを使っています。
  ダウンロードは、ここからAliasというものを選びます。
  詳しくはこちらを見るとよいと思います。
  ダウンロード、設定した上で、
alias vim "C:\Program Files\vim72-kaoriya-w32j\gvim.exe"


  と実行すると、コマンドプロンプトや、「ファイル名を指定して実行」から、

vim


  として起動できるのでとても便利。(「vi」で起動したい場合は、alias vi ・・・ と実行。)


8.RailsアプリのルートディレクトリでVimを立ち上げ、

  
\p


  として、以下のような画面が立ち上がれば成功です。




これで、VimでRails開発を快適に行える環境が整いました!

Windows Vista 64bitへのRuby on Railsインストール はてなブックマーク

ノートPCを買い換えたら、評判のあまりよろしくないVistaになりました。
開発環境を一から作らなければならなくなったので、メモしておきます。

といっても、今までのXPでの場合と全く同じ手順でインストールできました。

1、Rubyのインストール

 One-Click Installerを以下からダウンロード。
http://rubyforge.org/frs/?group_id=167&release_id=28426

 ダブルクリックして指示に従えば、問題なくインストールできます。

 2009年7月現在の1.8系の最新版は1.87で、One-Click Installerは1.86までしかないのですが、One-Click Installerは簡単なのでこれを使うことにします。

 インストール後は、
 
ruby -v

 でバージョンが確認できるようになります。


2、Ruby Gemsのインストール

 以下から最新のzip版をダウンロード。
 http://rubyforge.org/frs/?group_id=126&release_id=37073

 解凍後、コマンドプロンプトでそのフォルダに移動し、
 
ruby setup.rb

 を実行するとインストールできます。インストール成功後、
 
gem -v

 とするとバージョンを確認できます。

3、Ruby on Railsのインストール
 
gem install rails

 こちらも、インストールが成功すると、
 
rails -v

 でバージョンが確認できるようになります。

2009年7月11日土曜日

YouTubeでリピート再生したいときに使うブックマークレット はてなブックマーク

YouTubeで音楽を聞きながら仕事することが多いのですが、リピート再生ができないのが不便です。
と、ここでIDEA*IDEAで紹介されていた「YouTubeRepeat」の記事を思い出しました。

でもURLをいちいち変更するのは面倒なので、ブックマークレットがほしい。
探してみると、既に作っている方が。

YouTubeRepeatでリピート再生するブックマークレット

これで十分便利なのですが、YouTubeRepeatから元のYouTubeのページに戻りたいということも
ありそうだったので、少しだけ改造したものを作りました。

以下のリンクをブックマークツールバーに設置してください。
YouTubeで実行するとYouTubeRepeatに移動してリピート再生できます。
戻りたくなったら、もう一回実行すると、YouTubeからYouTubeRepeatに戻ります。

YouTubeRepeat

ちなみに中身は以下のとおり。

javascript:location.href=location.href.search('youtube.com')!=-1?location.href.replace('youtube.com','youtuberepeat.com'):location.href.replace('youtuberepeat.com','youtube.com');

YouTubeのリピート再生、超便利です!

2009年6月21日日曜日

Bloggerにはてなスターとカウンターを設置したのでメモ はてなブックマーク

前回のエントリー『vimperatorでRead It Laterを使う』で、記念すべきはじめての
はてなスターとブックマークをいただいたようなので、このブログにもはてなスターと
ブックマークのカウンター(○○usersというもの)を設置してみました。

以下を参考にして、すぐに設置することができました。

このとおりやれば問題なくできると思いますが、これらのエントリーを見る前に作業して、
つまずいてしまった点が2つありましたので、念のために書いておきます。

はてなに書いてある方法は、「クラシックテンプレート」でのみ有効な方法のようで、
 テンプレートを変えている場合はうまくいきません。

ウィジェットのテンプレートを展開にチェックをいれないと、投稿の要素の中身が表示されず、
 従って編集もできないので注意が必要です。

2009年6月17日水曜日

VimperatorでRead It Laterを使う はてなブックマーク

FirefoxアドオンのRead It Laterはとても便利ですが、あとで読むのチェックに
アドレスバー(というかawesome bar)を使うので、アドレスバー非表示で使っている
Vimperatorとの相性がよくなくて困ります。

feedアイコンなどをアドレスバーからステータスバーに移動するのに使っている
migratestatusbar.jsを使って、同じように移動できないか調べてみました。

アドレスバーに表示されているチェック型のアイコンのIDが分かればそれを指定するだけで
よいはずなのですが、探し方がわからず苦労しました。

最終的に書いた_vimperatorrcはこんな感じです。
javascript <
    liberator.globalVariables.migrate_elements = [
        {
            // star button of awesome bar
            id:    'star-button',
            dest:  'security-button',
            after: true,
        },
        {
            // icon that show the existence of RSS and Atom on current page
            id:    'feed-button',
            dest:  'security-button',
            after: true,
        },
        {
            // favicon of awesome bar
            id:    'page-proxy-stack',
            dest:  'liberator-statusline',
            after: false,
        },
        {
            id:    'isRitL-later',
            dest:  'security-button',
            after: true,
        },
        {
            id:    'isRitL-mark1',
            dest:  'security-button',
            after: true,
        },
   ];
EOM
id: 'isRitL-later'は「あとで読む」として選択していない白抜きチェックのアイコンです。
チェック済みの赤色チェックのアイコンは、実は'isRitL-mark1''isRitL-mark2'という
2つのアイコンで出来ていたようですが、2つきれいに並ばなかったのと、機能的に
'isRitL-mark1'だけで十分だったので、それだけ指定しています。

2009年5月13日水曜日

Luceneの内部構造を見る3 はてなブックマーク

前回はLuceneインデックスのファイル構成について確認しました。
いよいよ各ファイルについて見ていきますが、その前にLuceneで使われているデータ型が
Primitive Types」に書いてありますので、確認しておきます。



Byteはフォーマットファイルの最小単位となる8bitです。

UInt32UInt64はそれぞれ32bit、64bitの固定長の整数で、左側が大きな桁を表します。

VIntは、可変長の整数です。
各byteの一番左の1bitで次のbyteを使用するかどうかを表します。
1なら次のbyteを使用、0なら使用しません。
続く7bitは通常通り、左に行くに従って大きな桁になっていくのですが、
byteを股がる場合は、右のbyteのほうが大きな桁になることに注意してください。
画像の(1)、(2)、(3)の矢印の順に桁が上がっていきます。

CharはUTF-8でエンコードされます。

Stringはまずvintで使用するbyte数を表し、その数だけcharが続きます。

次回は、各ファイルについて見ていきます。

2009年5月10日日曜日

Luceneの内部構造を見る2 はてなブックマーク

Luceneのファイルフォーマットを引き続き見ていきます。

Overviewです。
インデックスはセグメントで構成されます。
セグメントはドキュメントの追加で作成され、マージ操作でまとめられたりします。

各セグメントは、以下のようなファイルで構成されます。
(設定によっては.cfs形式の1つのファイルにまとめられます。)




次回以降は、各ファイルについて詳しく見ていきます。

Luceneの内部構造を見る1 はてなブックマーク

Solr内部で使われているLuceneの中身を見ていきたいと思います。

なお、ただ使うだけなら全く必要ない情報ですので、内部構造に興味がある
場合だけ読んでもらえればよいかと思います。

一番核となるインデックスファイルのフォーマットがここで公開されて いますので、
まずはこれから見ていきます。

Definitions」では、DocumentFieldTermの定義が書いてあります。
それぞれの関係はこんな感じ。


続いての「Inverted Indexing」とは、日本語で言うところの「転置インデックス」を作ることです。
Documentに対して単語が対応している状態から、単語(Term)をキーにして
Documentを対応づけることで、単語からDocumentを素早く検索できるようにします。
検索エンジンでは一般的な手法です。

こんなイメージです。(※実際は少し違うみたいです。)
次回に続きます。