Rubyアドベントカレンダー:rubyでmongodbと戦うときにしっていったほうがいいいくつかのこと(未完了)
Ruby Adventカレンダー参加です。
体調を崩してしまい、熱がでるなら出て寝込みたいのですが、ただひたすら怠いだけで熱もでない状態なので大変辛いです。最近流行てしまっているmongoDBをrubyで使うときに決行大変な思いをしたのでそのへんをまとめて記しておきたいと思います。
病院いったら口内ヘルペスが大量発生してやんごとなき状況になりつつあるので書きかけのまま投稿します。。。
ruby用のmongoDBドライバーの種類
mongo/mongoMapper/mongoid
大きく分けてこの3種類がある
"mongo"はO/R Mapperなどの機能はなくmongoへのinterface、後ろ2個はO/R Mapperの機能を提供している。
インストールは簡単
もうruby1.9.2ならgem installで入ります。終わり。
ないならrvmでもつかってください。
問題が使い方
ふつーRailsで使おうとおもうので、mongoidを使ってみます。
今回の案件では、そもそもCSVデーターのフォーマットがきまっていなかったために、カラムフリーかつ、複数レコード1documentにしたかったのでmongoを選択しました。
……でふたを開けてみたらびっくり。
mongoidをつかうと、事前にmongoidのクラスを定義してcolletionの定義をしないといけないのです。
こんなの全然Document指向のmongoと相反していて使い物になりません。
で、どうするか……。
しょうがないので定義をymlで書いた
今回は1Documentにある方法で識別可能なn個のレコードを格納するので設計はmongoidでいうhas_many関係で記述できます。
とりあえずymlに定義をかいて、rubyのclassにclass_evalをつかって記述方法や、evalでやる方法でクラスを動的に作る方向にしました。ただ、実行時のオーバーヘッドが高いので最終的に初回起動時にファイルに書き出してincludeする方法にしました。
でもyml更新するのめんどい
エンドユーザーに試しに使ってもらったらymlのインデントをタブで書いたりして運用ができないとうことなので、困った私は、csvの1行目を定義につかうことで動的にmongoのDocumentクラスをつかう運用に変更。
でも奴らは日本語を使う
やっぱり動かないのでどうしたのかとおもったら、1行目のカラム名が日本語になっていてなにもできない。こればっかりはどうしょうもないので、ここでmongoidを使うのを放棄。
伺うかアドベントカレンダー予定地
メタプログラミングの会
スケジュール勘違いしていました。ごめんなさい。
ちゃんと資料作り直して今週中にはなんとかあげます。
jQuery Mobile alpha2がリリースになています
http://jquerymobile.com/2010/11/jquery-mobile-alpha-2-released/
200以上のbugを修正したのと追加機能がはいっています。
決行改善されてるっぽいのであとで詳細あげます。
Snow Leopard 64bit で TrueCryptが動かない
自宅のMacProだと動かないので調べていたらこんな記事が。
http://www.kotodama.jp/blog/index.php/2010/01/22/mac-snow-leopard-64bit-truecrypt
このへんからMacFuse2.1.7を落として入れ換えれば動きます。
Macの64bitは本当にシームレスなんだけど、その割にはこういうところではまる脆弱性。
jQuery Mobile alpha 1 Relase! & リリースノート超訳
やっときたー!ってことで思わず翻訳
http://jquerymobile.com/2010/10/jquery-mobile-alpha-1-released/
JQuery Mobile α1リリース
今日、jQuery Mobile プロジェクトの最初のαリリースをできることになりました。jQuery Mobileはユーザーインターフェース用のフレームワークであり、jQueryを元に開発をされており、そしてモバイルデバイス向けのアプリケーションの開発を行いやすくするために設計されています。
2ヶ月前に本プロジェクトについてアナウンスして以降、開発は順調に進んでおります。そして、モバイルアプリケーションの構築手順をとてもしやすくるために設計された、コンポーネント、レイアウト、テーマツールをいくつも作りました。
jQuery Mobileプロジェクトは、他の大多数の似たようなプロジェクトと違う、2つの先駆的な特徴を備えています。一つ目に、"Progressive Enhancement*1"のコンセプトを特に重要視して構築しています。二つ目に、すべてのHTML互換性のあるモバイルブラウザーで機能するように設計されています。
Demos
JQuery Mobileのデモとドキュメントはデモサイト上で見ることができます。
jQuery Mobile 1.0a1 demo and Documentation
ここにはJQuery Mobile 1.0a1で実装されているすべてのコンポーネントのデモとドキュメントが実装されています。
・テーマとレイアウト
・ヘッダとフッター(据え付けが可能で永続的な)
・フォーム制御
・ダイアログ
・リスト表示
・イベント
・アニメーション*2
特徴
Progressive Enhancement
jQuery Mobileは"Progressive Enhancement"のコンセプトを特に重要視して構築しています。これは作成したWebPageはHTMLの仕様に対し完全に準拠しており、jQuery Mobileは追加のJavaScriptの機能上に実装され、互換性のあるブラウザには最高峰のブラウジング性能を提供できます。このことは、jQuery Mobileをつかって構築されたアプリケーションは、非常に多くのブラウザ上で動作していることを意味しています。例え、JavaScriptが動作をしないような(よくある話ですが)モバイルブラウザ上においてもです。
この最初のαリリースのために、開発チームは非常に多くのA-Gradeブラウザ上で動作するようにしてきました。A-Gradeブラウザとは、iOSが動作している端末*3、Androidデバイス、BlackberryOS6、webOS、Fennec、Opera Mobileを指します。まだこれらのプラットフォーム上においてバグがあり、一部の少数のプラットフォーム向けの開発はかなり難しい状況になっています。この問題を1.0リリースまでに解決すべく作業しています。
Graceful Degradation
jQuery MobileはHTML5とCSS3に準拠しているブラウザ上にて非常にすばらしい動作をすることができます。*4しかしながら、「あるかなしか」という考え方をしていません。それはHTML5とCSS3が動作しないようなブラウザ上においても、可能な限り動作するようにするということです。このようなブラウザ上においては、グラデーションや美しいアニメーションが表示することはできませんが、利用可能な機能はまだまだあります。非常にシンプルなブラウザ上においても、単純なHTMLとCSSとして表示することが可能です。
Accessibility
すべてのjQuery MobileコンポーネントはARIAスタンダートに準拠しています。(デスクトップやノートパソコン上においては)キーボードを利用してナビゲーションが利用可能で、あり、スクリーンリーダーも利用可能です。jQuery Mobileは、この瞬間においてはモバイルデバイスをターゲットにしている一方で、モバイルを初め、タブレットPC、デスクトップやこれからでてくる新しいデバイスなども視野にいれられるように、開発の方向性を向けていきます。
Simplicity
jQuery MobileはJavaScriptの設定なしな、完全なマークアップドリブンの記法で行うことができます。このことにより開発が非常に簡単に進められます。HTMLファイルを開いて、この下に記述してあるような内容を書き加えれば、一瞬にて、すべての機能が動作するjQuery Mobileアプリケーションを開発することができます。
ファイルサイズ
"Progressive Enhancement"の特徴を推し進めつつ、マークアップドリブンの記法を多用しつつも、jQuery Mobileのファイルサイズは非常に小さいものになっています。αリリース時のJavaScriptファイルはなんと12KBであり、CSSはたったの6KBです。ほんの少しの画像がこのフレームワークのデザインにおいて(ほとんどはアイコンですが)使われていますが、そのかわり代わりにCSSを非常に多用しています。
テーマ
JQuery Mobileは互換性のあるWebアプリケーションを制作するために、低レイヤーから構築された包括的なテーマ構造をもっています。JQuery UIによって提供されていたスタイルシステムとはまったく違い、制作しているアプリケーション全体のスタイルに本当に適用するような機能を提供しています。αリリースでは、すべてのテーマ設定は手動で行わないといけませんが、1.0の最終リリースにおいて、カスタマイズが可能になるようにテーマ設定ツールを提供する予定です。