2008年06月のエントリ

PassiveRecord,ハッシュをActiveRecordのインタフェースで使う

PassiveRecord を使ってみた.

PassiveRecord は,ハッシュを ActiveRecord っぽく扱えるようにしてくれる.要 ActiveRecord.

# コマンドラインから gem でインストール
$ sudo gem install passiverecord

# 使うときは require
require 'passive_record'

今回動かした環境では ActiveRecord と PassiveRecord を両方 require したら

Gem::Exception: can't activate activerecord (>= 0, = 1.15.3), already activated activerecord-2.0.2.9216]

とエラーが出たので, PassiveRecord だけ require するようにした.

アプリの中で,ほとんど追加・更新がないようなデータ,テーブルを作って管理するよりは,オンメモリで処理したいデータ,など,あるかと思います.

README を見ればすぐに使い方は分かる.クラス定義の中にレコードも書く.ActiveRecord と同じように find で必要なものだけ取り出したり,has_many で他のクラスとのリレーションを記述したりできるので,ハッシュでデータを持つより扱いやすい.

class Continent < PassiveRecord::Base
  has_many :countries # => an ActiveRecord class

  schema :name => String, :size => Integer, :population => Integer

  create :name => "Africa",        :size => 30370000, :population =>  890000000
  create :name => "Antarctica",    :size => 13720000, :population =>       1000
  create :name => "Australia",     :size =>  7600000, :population =>   20000000
  create :name => "Eurasia",       :size => 53990000, :population => 4510000000
  create :name => "North America", :size => 24490000, :population =>  515000000
  create :name => "South America", :size => 17840000, :population =>  371000000
end

Continent.find(1)                                    # => Africa
Continent.find_by_name("Africa")                   # => Yes, also Africa
Continent.find_by_name_and_size(/America/, 17840000) # => South America
Continent.find_all_by_population(1000..20000000)     # => Antarctica and Australia
Continent.find(:all)                                 # => All 6 (though not in any particular order, yet)

README を見ると

* some integrated ActiveRecord associactions, ie: ActiveRecord#belongs_to(:passive_record)
  PassiveRecord#has_many(:active_records) (excluding has_many :through)

「has_many :throught は使えないよ」って書いてあるんだけど,CHANGELOG には

v0.2. has_many :through is in the house.

「v0.2 で has_many :throught 登場!」っぽく書いてある.よく分からないけど,試しにコードを書いてみたら動いたから,多分,実装されていると思うよ!

雑感

ソースコードを書き換えるだけでテーブルのスキーマを書き換えられるので,アプリ開発の序盤,まだモデルの詳細まで決まっていない段階で,とりあえず動くものを作りたいときには,PassiveRecord 良さげ.モックとして使える.必要になればすぐに ActiveRecord に置き換えることができる.

関連

PassiveRecordで不要なクエリ発行を抑える - pLab blog

cameraLady2周年

2008年6月29日,当サイト cameraLady は開設から2周年を迎えました.

June 29, 2008

ちょっとだけ振り返ってみます.

こうして見ると,自分なりに,前に進んでいるなぁと実感します.振り返る機会ってのは重要だ.過去の自分++

Web に興味を持って,ブログを立ち上げて,今日までの2年間.好きなものを好きと言い続けてきた,それだけの日々だったように思う.たったこれだけのことが,とても大事だってことに気が付いた.「Web が大好きだ!」って言い続けたら,Web に関わっていられるお仕事が見つかった.他にも,たくさんの嬉しいことがあった.

これからも,自分の「これが好き」を発信し続けていこう.そうするとね,自然と,同じようなものを好む人たちが集まってきて,また新しい好きなこと,好きなものが見つかって,良い方向に向かっていく気がしている.Web をエコーチェンバー(自分共鳴装置)として活用するんだ!現に,ここを読んでくれている皆さんは,何かしら,ボクと共通の好きなものを持っている人たちだ.皆さんのおかげで,今日まで楽しく cameraLady を続けてこれました.どうもありがとうございます.

本当はね,このタイミングで,cameraLady を全面リニューアルする予定だったんだけど,全然できなかった.サーバを借りたり,色々と準備はしていたんだけど,間に合わなかったなぁ,残念.近いうちにやります.

それでは,今後も cameraLady 並びに june29 をよろしくお願いします!ボクも25歳になりました!四半世紀を生きました!

時系列のリストという見え方

「時系列のリストという見え方」には安心感があるなぁ.

ブラウザのお気に入りとソーシャルブックマーク

ボクが Web をよく利用するようになったときには,すでにソーシャルブックマークが存在していて,ブラウザのお気に入りよりむしろソーシャルブックマークから入ったんですよ.そしてそのまま今に至っていて,ブラウザのお気に入りをちゃんと使ったことがない.試しに使おうとしてみても,なんだか違和感がある.

理由はいくつかあるでしょう.よく言われていて,ボクも両者の大きな違いだと認識しているのは「データの置き場所がオンラインかオフラインか」「分類方法がフォルダかタグか」「みんなと共有されるか否か」などです.今回はもう1つ考えてみたい.

両者は「基本の見え方」が違う.ブラウザのお気に入りの基本の見え方はフォルダツリーで,ソーシャルブックマークでは新着順のリストです.ソーシャルブックマークの方がしっくりくるのは,この見え方に理由があるんじゃないかな.

ソーシャルブックマークを使い始めたからそうなったのか,どっちが先かは分からないけれど,ブログや Twitter,他のソーシャル系サービスでも,新着順のリストってのはよくある見え方で,慣れているからすんなり受け入れられる.「最新の数件」が強調される見え方であり,「○○より過去だけど,△△よりは未来のもの」を探しやすい並びだ.

そういや会社に,頂いた名刺に日付を書き込んで整理している人がいるなぁ.万が一,所属と名前だけじゃ思い出せないときも「あのときの面談の人だ」ってな風に記憶を手繰り寄せたりできるんだろう.

つまり「慣れ」と,整理する上での「時系列の強さ」と,2つの要因がありそうだ.

Google 検索と Twitter 検索

どちらもよく利用させてもらっている.ありがとうございます.

Google 検索はもう言うまでもないとして,特筆すべきは,Twitter 検索の利用頻度がどんどん高まっているってこと.ちょっと前に Google の Favicon が変わったときも,ボクが気付いたときに試しに Twitter 検索してみたらすでに言及している人がたくさんいて,最初の言及があった時刻から Favicon が変わったタイミングを推測できたりして,便利だなーと思った.

あと,これは,Twitter のユーザ層にも依る話だから難しいんだけど,今だと Firefox 3 の挙動とか,割と新しい情報は Twitter 検索で探すことが多い.Google 検索が返してくれる結果には,新しい情報も古い情報も入り乱れているから,もう数年前に解決されちゃった話も混じっているし,新しい情報の検索には向かない.時系列ソートは場合によっては非常に重要です.

話は逸れるけど Firefox のブックマークのキーワード機能は便利だよ.ボクはアドレスバーに「tw 検索語」って打つと検索語を Twitter 検索できるようにしていて,他にもよく使う英辞郎や Google Maps,超弩級Wikipedia検索等にそれぞれ短いキーワードを当てている.検索バーいらなくなるのね.

まとめ

例によって全然まとまっていないまとめ.

  • 新着順にリストされている情報は慣れているから接しやすい
  • 取り出したい情報の種類によっては,時系列ソートが極めて重要な場合もある

そんで,ユーザたちが散々慣れてきて,作る側が何も考えずにそういった設計にしてしまうほど,その見え方が浸透したときに,ぴょっんと現れた新しい見え方に「これだー!!」ってなって次のフェーズに進んだりする.

MacのAutomatorでPDFを結合する

ショッピングサイトからダウンロードしてきた PDF が,1ページずつ1つのファイルになっていて読みづらいこと山の如しだったから,なんとかして結合したかったよ.でも PDF の結合って,無料の Acrobat Reader じゃできなくて,Acrobat を買わなきゃいけないんじゃ…!そんなふうに考えていた時期が俺にもありました.

それ,Automator でできるよ! あとから調べたらちょー既出ネタでした\(^o^)/

Automator3067PDF306E7D505408

「Finder 項目の選択を求める」「PDF ページを結合」「Finder 項目を開く」の順番でアクションをつなげて実行するとできました.「PDF ページを結合」までだと,結合されてできあがった PDF がどこに保存されているのかよく分からなかったので,結合後に「Finder 項目を開く」をやって,Adobe Reader で開かれたファイルを別の名前で好きな場所に保存してあげるといいと思います.

しかし Automator はよく分からなすぎる!なんとなく便利そうなんだけど,何が実現できるのか想像しづらくて,使いこなしている人を見かけません!

Mac 無料 フリー Adobe PDF 複数ページ 結合 統合 Automator

もっとWebにデータを!

「集合知か集合愚か,なんて議論があるけれど,とにかく集合を作り出すことに意味がある」

そんな風に @kei_s さんが言っていたのは,いつかのゼミのときだったな.いやいや,本当にその通りだと思うよ.

ボクの捉え方では,「今まで見えなかったものを持ち込ませる仕組み」は Web が楽しくなるために大事だと思っていて,だから,ソーシャル系のサービス,CGM とか呼ばれるサービスは大好き!もう少し具体的に言うと,

  • ブログは個人の主張を Web に引き出した.素晴らしい!
  • SNS は人と人のつながり,コミュニケーションを Web 上に表出させた.素晴らしい!
  • ソーシャルブックマークはブラウザのお気に入りか,それ以上のものを Web に集めた.いいね!
  • Flickr はみんなのフォトアルバムを Web で見られるようにした.ありがとう!
  • Twitter は個人の「はらへった」すら Web に持ち込んだ.なんてこった!
  • Tumblr は日常の「これいいねー」と共感を Web 上で実現した.ちょーすごい!
  • はてなスターは本当に小さな人々の「うんうん」で Web をキラキラさせた.ステキすぎる!

な感じかな.挙げればキリがないほどに,ここ2年くらいで,Web 上に集められたデータってのは,単純に量が増えただけじゃなく,種類も豊富になった.

データが増えてくると「整理しなきゃ!」って雰囲気に包まれるんだけど,量が爆発的に増えたりデータの質が急に変わったりすると,既存の仕組みじゃ対応できなくなる.それでも,その度に技術や Web そのものが進化して,何とかなってきたのだと思う.大量のスパムに埋もれながら点在していたホームページは Google 先生が整理してくれた.ブログが急速に普及したときにはフィードリーダやソーシャルブックマークが活躍した.そして,Twitter や Tumblr はまだまだ整理されていないってのが現状だろうけど,近い将来,何らかの仕組みで整理されて,潜在的な価値が実際の価値に変わるんじゃないかって漠然と感じているよ.

例えば dzfl::tumblr を見てみてほしいよ.こんな風に「タバコを吸っている女の人(しかも美人!)の写真」だけをこんなにたくさん見られる場所は,画像検索エンジンは教えてくれなかったんだ.データがたまり続けること,とてつもない価値を感じずにはいられない.

さてと,じゃあこれから,何をしようかって考える.きっと「整理されていないものがあるなら,俺が整理してやるぜ!」ってモチベーションな人はけっこういるよね.Web 系の研究論文のアブストラクトや序論を見ると,大体そんなことが書いてあるんだ.ボクはそうだなぁ,整理は誰かに任せるとして,さらにその先に,どんなデータが見えるようになったらもっと楽しくなるかを考えていたいよ.そんなことを考えているとき,すっごくワクワクする.みんなもっとデータを見えるようにしようよ,ライフログを残そう,見えるようにして,意外な発見と出会おう.自分自身でも気が付かなかった自分に会いに行こう.

多くの人が残念に感じているように,1日はたった24時間しかなくて,これからたくさんの魅力的な Web アプリが登場したとしても,すべてにインプットを注ぎ込むことはできない.その中で,次に Web に持ち込めるライフログはどんなものだろうか.ku さんのゼロオーバーヘッド・ブロギングの時代や,makoto_way さんのデジタルサイネージに対する違和感は示唆に富む.とても考えさせられる.2007年のWebとボクのお付き合いでも書いた通り,去年,ボクがユーザ登録したサービスは恐らく100近くになるのだろうけれど,今も継続してインプットを注ぎ続けているサービスは,10にも満たない.「ユーザの1分を奪う競争」は激化していると言わざるを得ない.

ゼロオーバーヘッドな Last.fm や Wakoopa のようなアプローチが増えるだろうか.そもそも,Time Rich or Time Poor?で語られる「時間がない人」「余している時間を楽しく使いたい人」のどちらをターゲットにするかで,戦略も大きく変わるはずだ.前者には,Google のように時間の節約を提供して,そのときの利用データ(検索クエリとか)を集める.後者には,Twitter のように楽しい時間のために,データを入力してもらう.届けたいのは,ファンクションなのか,コミュニケーションなのか.この辺りを見極めずに Web アプリを作ってしまうと,ユーザの貴重な時間をつぎ込んでもらえないんじゃないかな,厳しいね.

余談

この手の考察をするときにいつも感じるのは,「ボクの考えのベースは研究室時代のディスカッションによって培われた」ってことだな.どうやって物事を考えるか,指導教官や先輩,同期の仲間や後輩たちが教えてくれた.幸い,Web 好きな人もいっぱいいたから,途方もない話をいつでもできたし,そのときの見解が今に活きていると感じるときは本当に嬉しい.ありがとう.