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」でページ末尾へスクロール、という機能がほしいかも。