嫁がFlashアニメで賞金を荒稼ぎしている件 - func09 http://www.func09.com/wordpress/archives/596

でも紹介したうちの奥さんのアニメが山手線のモニターで今流れているそうです。
山手線に乗る機会があまりないんだけど、見に行きたいなー。

もう見た人とかいますか?

gaya-anime: その後のその後
http://gaya-gaya-gaya.blogspot.com/2009/06/blog-post_15.html

Pickles weblog | ガヤアニメさんのが山手線で流れていた。
http://www.pickles.tv/weblog/sb.cgi?eid=711

Sandisk様、filmo様、Pickles様、ありがとうございます。

Posted in 日記 at June 19th, 2009. 1 Comment.

三鷹プログラマーズカフェに参加しました。

http://atnd.org/events/735

阿佐ヶ谷ギークカフェ計画から端を発した中央線ギークカフェプロジェクトが ysakakiさん、kuippaさん、kclabさん、そしてまちづくり三鷹さんのおかげで現実のものとなりました。

大きな会議室を借り切って、各々テーマ別にテーブルを付き合わせて作業したり、談笑したり、営業したりと、様々だった模様。

僕はもくもくグループで、趣味のコードを書いてました。Rubyで言語内DSLを書くお勉強です。

同じもくもくグループの中に来週のGoogle Hackathonに参加する人が6人中4人だった、というのが興味深かった。

三鷹プログラマーズカフェは毎週木曜に開催しているそうなので、お近くの方は参加してみてはいかがでしょうか?

Posted in 日記 at June 5th, 2009. No Comments.

来週6/11に開催されるGoogle OpenSocial Hackathonの事前アイデアソンに行ってきました。

チームは4つ

  • ファイナルクエスチョン1.0.2(ゲームチーム)
  • ただいまより記者会見をはじめます(コミュニケーションチーム)
  • レイティングのフレームワーク(サーバ間通信チーム)
  • 妄想トラベル(情報共有チーム)

といった内容でした。

僕はコミュニケーションチームです。

ネタのベースは僕の持ち込みだったのですが、数十分のブレストの間に自分にない発想に広がっていって、興味深かったです。見知らぬ人とアイデアを出し合うというシチュエーションは楽しいですね。

本番が楽しみだな。

Posted in OpenSocial at June 3rd, 2009. No Comments.

filmoというCM作成サイトがあって

うちの嫁さんが出す作品出す作品必ず賞を取っている

嫁(@ai1017)・・恐ろしい子・・

Posted in flash, 日記 at May 26th, 2009. 2 Comments.

DBに配列やハッシュのデータを保存したいなと思って調べました。

ActiveRecord.serializeで実に簡単に実現できるんですね。
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002229

If you have an attribute that needs to be saved to the database as an object, and retrieved as the same object, then specify the name of that attribute using this method and it will be handled automatically. The serialization is done through YAML. If class_name is specified, the serialized object must be of that class on retrieval or SerializationTypeMismatch will be raised.

このメソッドでオブジェクトとして保存・取得したい属性の名前を指定すると、自動的に処理されるようになる。 YAMLでシリアライズされ、class_nameオプションが指定されると格納できるオブジェクトのクラスを制限できる。あるいはSerializationTypeMismatchの例外となる。

ポイント

  • シリアライズしたいカラムの型をtextにする
  • serializeメソッドでカラムを指定する
  • 格納できるクラスを指定可能
  • 内部的にはYAML

実例

さて、やってみます

まずマイグレーション内で、text型のdataというフィールドを用意する。
ここにシリアライズしたデータが格納されます。

class CreateItems <ActiveRecord::Migration
  def self.up
    create_table :items do |t|
      t.text :data
    end
  end
  def self.down
    drop_table :items
  end
end


そしてモデル内でシリアライズするフィールドを指定。

class Item <ActiveRecord::Base
  # シリアライズされたデータとして扱いたいフィールドを指定する
  serialize :data
end


script/consoleなどをおもむろに起動し、本当にオブジェクトが保存できるのか確認します。

# 配列を代入する
Item.create :data => [1,2,3]

item = Item.find(:all).last
p item.data #=>[1,2]
p item.data.class #=>Array


ちゃんと配列として取得できました。めでたしめでたし。

どうなってるの?

DBに格納する際にオブジェクトをYAML化しているようです。

検索したい場合

findしたい場合は、オブジェクトではなく文字列として評価されてしまうので Object#to_yamlを使うことになります。

Item.find_by_params([1,2,3]) # => これではレコードが見つからない
Item.find_by_params([1,2,3].to_yaml) # => 見つかる


使い勝手が悪い。。

格納する型を限定する

このままだとオブジェクトならなんでも格納できてしまいます。 そこで格納するクラスを指定してやります。

class Item <ActiveRecord::Base
  # 配列以外のクラスは格納しない
  serialize :data, Array
end


script/consoleで試してみます

# 配列の格納は成功
>> Item.create :data => ['bob','alice']
=> #<Item id: 1, data: ["bob", "alice"]>

# ハッシュの格納は例外が発生する
>> Item.create :data => {:name => 'bob'}
ActiveRecord::SerializationTypeMismatch: data was supposed to be a Array, but was a Hash


これでかなり使い勝手が良くなりましたけど、配列の中身までは保証できないので、精神的安定のために使う程度でしょうか?

最後に

DBにシリアライズしたデータを保存しなければならない状況は無いにこした事は無いと思いますので 設計レベルで回避できる場合はそちらをおすすめします。

Posted in ruby on rails, 日記 at May 21st, 2009. No Comments.

kasairu-mixi

mixiアプリ第1弾として「傘いる?」を作りました。
http://platform001.mixi.jp/view_appli.pl?id=1907
バージョンでいえば0.0.2くらいのものです。mixiアプリの正式リリースにあわせて1.0.0が出せればいいかなぁ。

地域を設定しておけば、今日あなたが傘を持って出かける必要があるのか?ないのか?それだけを教えてくれるツールです。

お天気データの取得にはlivedoor天気のWeather Hacksを利用させてもらっています。
Thanks Weather Hacks

JavaScriptだけで完結して、複雑なUIを必要としない、すぐできる題材として作ってみました。
次のアプリでは、もう少し凝ったものを作ろうかと。

ソースコードはgithubに置いてあります
http://github.com/func09/kasairu-opensocial-mixi/tree/master

Posted in OpenSocial, 日記 at May 4th, 2009. No Comments.

やっと重い腰をあげてmixiアプリを作ってみました。

もともとRubyで作ってあったものをJSに移植しただけで非常にシンプルなものですが、ちゃんと調整したら公開します。

で、mixiアプリを作りはじめて気付いたこと。 多分いろんなブログで語られているんだろうけど・・・

  • デベロッパー登録するのにmixiのアカウントと携帯アドレスが必要(iPhone不可)
  • UserPrefsが使えない

という2点がきつかったです。

携帯アドレスは会社の携帯アドレスを拝借してなんとかなったけど、UserPrefsが使えないのは結局自分でUIつくってAppDataに保存するという形になった。

ライブラリはopensocial-jqueryを使いました。インターフェイスが素晴らしく、使いやすいです。

ただmixiアプリで外部サーバと接続しようと、がんばったのだけどFireFox3だとどうしてもエラーになってしまったので、そこだけ通常通りgadgets.io.makeRequest使った。

Posted in OpenSocial at April 29th, 2009. No Comments.

factorygirl

フィクスチャはメンテナンスしづらい

書籍The Rails Wayの中には「皆フィクスチャが嫌い」という項目があります(次の項目は「フィクスチャはそれほど悪くない」ですが)。

フィクスチャが嫌われる最大の原因は「メンテナンスが難しい」という事でしょう。
中間テーブルを必要とする多対多の関連をフィクスチャにしようと思ってうんざりした経験は誰にもでもあると思います。

Fixtureのhas_manyでこんな書き方したい
http://www.func09.com/wordpress/archives/369

フィクスチャの代わりにFactoryGirlを使ってみる

Factory GirlはRailsのテストにおいてfixtureの代替となるツールです。
つまりテスト時のモデルデータを用意するための仕組みです。
Factory Girlはフィクスチャと違い、Rubyのスクリプトで直接データを定義していきます。

特徴としては

  • Rubyコードで定義(YAMLやCSVではない)
  • 関連のメンテナンスが楽
  • 定義の継承もできる
  • 同じ定義から連続的なデータを生成できる(シーケンス)

Rubyコードで実データを作る感覚でテストデータを定義するので、フィクスチャと違い中間テーブルのメンテナンスから解放されます。 Read More...

Posted in ruby, ruby on rails, 日記 at April 26th, 2009. No Comments.

例えばActiveRecordで新規作成したタイミングでリモートにアクセスするような処理があったとして

class Item <ActiveRecord::Base
  before_create :do_something_with_remote
  def do_something_with_remote
    open(self.url)
  end
end


この場合、テストの時はItem#do_something_with_remoteをスタブにするよね。

item = Item.new :url => 'http://www.example.com'
item.stub! :do_something_with_remote


本当はこんな感じでかけたい

Item.stub_instance_method(:do_something_with_remote)


stubはそのオブジェクトにしか使えない?インスタンスメソッドまで影響するスタブはどう書けば良い?

--

Fixtureの代わりにFactoryGirlを使い始めた。 これがなかなかシンプルで使い勝手が良いんだけど、関連を設定する時に上記のような作りの場合にちょっと困っている。 Factory.defineの中でインスタンスのメソッドにstubを設定できればいいんだよな。

Factory.define :item, :class => Item do |item|
  item.stub!(:do_something_with_remote)
end


明日改造できるかソースコードを見てみる。 Factory.stubはあるんだし、できないことはないよな。

今は時間がないのでスペックヘルパーで

class Item
  def do_something_remote;end
end


みたいに上書きして対処しているが・・・駄目だよな。
FactoryGirlに関してはノウハウが溜まったら書くかも。

Posted in ruby on rails at April 24th, 2009. No Comments.

Mitaka.rb設立総会
http://atnd.org/events/540

Akasaka.rb,Akasaka.rb,Tokyu.rbなどローカルグループが多く存在するRubyコミュニティですが
いよいよMitaka.rbが発足する模様。

OneRingToFindの榊さんが幹事だそうです。

三鷹・吉祥寺に住んでいた期間が長く、ほんとに愛している街なので、何かしら三鷹・吉祥寺に貢献できんものかと考えている現千葉県在住の私です。脊髄反射で参加申込しましたとも、ええ。

Ruby界隈の集まりに参加するのは初めてなので、ちょっとドキドキですが。参加者の皆さんよろしくお願いします!

Posted in ruby, ruby on rails, 日記 at April 11th, 2009. No Comments.