2007年11月アーカイブ

今の会社の最大の弱点を上げるとすると、コーヒーサーバーがないこと。

次点がスーツ着用か。

まぁ、つまらないことだが(笑)

なるべく急いで

・livedoor認証対応 ・OpenID対応 ・タグクラウド、タグ検索 ・RSS配信 ・フッターにもメニューを ・サイドバーにいろいろ出す

ちょっと先送り

・「欲しい!」状態を携帯ブラウザからチェック&買ったらそのまま「所有」に変更機能 ・入力をもっとかっこよく ・入力をもっと便利に。Greasemonkeyとかブックマークレットとか ・どのページでも自分の表示は編集可能に

将来的に実装したい機能

・シリーズ登録機能(だれかがシリーズに登録すると、まだ読んでない人にお知らせ) ・招待機能。なんかSNSぽい。でもいらないかな ・Web2.0らしくAPIの公開。できるかな?

今年のゴールデンウィークから、ちょっとずつ作ってきたWebサービス「今読ミ imayomi」。URLは超シンプル。imayomi.jp

どういうのかというと、「今、こんな本読んでるよ!」とアピったり、最近読まれているのから面白そうな本を見つけたり、そんなサービス。

まだ私の知人に試しに使って貰ってるだけの状態ですが…

最新のimayomi
私の最近読んだ本

これで、ほぼ全機能だったりします。目指すは簡単だけど、なんか面白い。


内部はと言うと

Amazon完全異存体質。
うわさの簡単フレームワーク、Ruby on Railsでも初めて作ると大変だった。
DBは普通にMySQL。
デザインはhachimituさん

ただし今のところかなり貧弱なインフラで稼働しているので、まだ本当にひっそりとした告知にとどめないと危ないといった案配です。

このエントリーを見つけた、あなた、試しに使ってみていただけないでしょうか。

RSSを消化していてなぜ、家で勉強がはかどらないのか?というエントリーが紹介されていた。
なるほど確かに周囲の目があると捗るのは真実だと思う。

勉強というのではないが、私は今、Webサービスを家で一人でコツコツ作っているのだが、途中、全く捗らない時期があった。作り始めた当初は知らない技術(今回はRuby on Rails)を使ってて楽しいというのがあってモチベーションは高いのだが、ある程度分ってくると、一つのサービスを作り上げるのはそれなりにしんどくなる。

9月くらいに、ほんとにとりあえず動くようになった状態で、知人に試してもらったり、仕事の関係で知り合って仲良くなったデザイナー(本職は違うそうですが…)にデザインして貰ったりすると、成果がまだ少人数だが人の目にふれるようになり、俄然やる気が増したわけです。また、ドメインを取ってみたりするのもモチベーションアップに貢献。

Webサービスは簡単に公開できて見てもらえる。直接的な人の目がある環境での作業ではないが、自分の分身であるシステムが見られているわけで、同様の効果があるのだと思った次第なのです。

先日の条件付きテーブル間リレーションシップの続きであります。

Migrationはこんな感じか。

class CreateComments < ActiveRecord::Migration def self.up create_table :comments do |t| t.column :book_id, :integer t.column :content_type, :integer t.column :content, :text end Comment.reset_column_information Book.find(:all, :conditions=>["comment is not null AND comment != ''"]).each do |book| cmnt = Comment.create(:book_id=>book.id, :content_type=>1, :content=>book.comment) end remove_column :books, :comment add_index :comments, [:books_id, :content_type] end def self.down add_column :books, :comment, :text Book.reset_column_information Comment.find(:all, :conditions=>["content_type=1"]).each do |cmnt| book = Book.find(cmnt.book_id) book.comment = cmnt.content book.update end drop_table :comments end end

これで、self.up 時に、books テーブルに格納されていたコメントが、新しい comments テーブルに移行できる。self.down はその逆である。

ここで少し、道草するが、最初、上記の Migration コードで正しく新スキーマに変わって安心していたのだが、そのまま開発が進んだあと self.down してみたくなってやってみると、全然動かない。まったく正しそうに見えるのに、おかしいなと散々悩んだあげく、Bookクラスの関連定義の所為だった。

つまり Book モデルの関連が開発が進んだ状態なので Comments モデルと has_one/belongs_to 関連がり、それが邪魔して動かなかったわけだ。しかし本当に self.down する際には、新しいモデルの状態でバージョンダウンが動くはずだ。上記のコードで言うと、self.downの 中で

book.comment = cmt.content

としているところで、book.comment は comments テーブルの参照として定義されているのがいけない。

原因が分ったらハッとひらめいた。Railsのモデルクラスは ActiveRecord::Base さえ継承していれば、完全な ActiveRecord として動くのであるから、Migration の定義に先立って

class Owner < ActiveRecord::Base end class Comments < ActiveRecord::Base end

と書いておくだけで、純粋にスキーマのメタ情報でのみ動くはずだ。
そしてこの方法は、ちゃんとうまくいく。


しかし、ここまでやってみて、はたと気づいたのだが、あれか。
バージョン管理システムからソースコードを先にMigrationをコミットした状態にまで戻してから、db:migrate VERSION=x すれば良いのだった。まだコミットしたくない開発中のコードがローカルにあると少し面倒だが、どう考えてもこれが自然であった…

続く…

数日前に書いたiPodの認識が遅くなったのはmixi stationのせいだったの結論を申しますが、あれ以来、確実にiPodの認識が速くなりました。速くなったというか繋ぐと即座に認識してくれます。

まぁ、本来の姿に戻ったのでしょうが、ずっとiTunesの改悪だと思っていたわけですから、Apple様には申し訳ないことです。

つないでも、なかなかiTunesがiPodを認識せずイライラしている方、mixi stationが入っていたら、そいつが犯人ですよ!

関連付けるテーブルは同じなのだが、条件によって別のオブジェクトとして関連付けるレコードを決定する方法がないか探してみた。

具体的に言うと、現在、次のようなテーブルがあって、

create table books ( id int(11) not null auto_increment, title varchar(255) default null, comment text )

本のタイトル(簡単のために本の情報をタイトルだけとしている)とコメントが格納できます。ここでコメントの種類が増えて、ネタばれコメントを追加したくなったとする。

一番素朴な方法は、booksテーブルにnetabareカラムを直接追加してcommentカラムと同じ様に持てばいいわけだが、そもそもコメントは本の情報ではないし、ネタばれコメントにいたっては更にそうだ。

そこでコメントを別テーブル化したくなる。

class Book < ActiveRecord::Base has_one :comment has_one :netabare : class Comment < ActiveRecord::Base belongs_to :book : class Netabare < ActiveRecord::Base belongs_to :book :

とかするわけであるが、これだとモデルクラスとテーブルが2つ増える。

コメントとネタばれは、ユーザの用途は違うがDBに持つ情報としてはほぼ同じであるので、commentsテーブルは共通にできないだろうか。

has_one, belongs_toのリファレンスを見ると、その為に使えそうな:conditionsというオプションが存在した。

commentsテーブルは共通とし、comment_typeというカラムを用意し、これが1の場合、通常のcomment、2の場合ネタばれコメントとして進めてみる。まずはマイグレーションの作成だ。現在コメントはbooks.commentに格納されているので、データの移行も考えた頑張ったマイグレーションを作成する必要がある。

  • 新テーブルcommentsの追加
  • books.commentからcommentsにcomment_type=1でデータ移行
  • books.commentカラムの削除
  • commentsテーブルにbook_id,comment_typeの複合インデックス
  • 続く…

    ちょっと前になるが、RailsによるアジャイルWebアプリケーション開発 第2版を買った。
    Rails本はこの第1版に始まり、いろいろ買ったが、やはり一番参照したのはこの第1版だった。内容が古い分(0.9~1.0あたりか)、Railsの基本を知るのにとても良かったと思う。

    Rails開発のコツもだいたい理解したし、あとはWebの情報でほぼ大丈夫だろうから第2版はいらないかなと思っていたのだが、本屋で手に取ってみると欲しくなる(笑)内容は第1版とほとんど同じで、最初に実際にWebアプリケーションをアジャイルに開発しながらの様子を実況風に説明し(全体の1/4程度)、その後、各機能の詳しい説明となっている。Railsのバージョンも今、最も使われているであろう1.2が中心なので直接コードのサンプルが役に立つと思われる。

    ただ現在もRailsは進化の途中なので、新しいとは言っても、すでに古くなっている部分もある。そこは書籍の弱点でいかんともしがたいが、初めてRailsをやってみようという方のための参考書としてはこれが一番と断言できる。

    さて私はなんでまた、そんな第2版を買ってしまったのかというと、まず第1版には索引に大きな不満があった。本の内容は非常に素晴らしかったが、索引は全く使えなかったのだ。なにか調べようとしても索引から知りたい事へたどり着けない。それが最も気になっていたので、本屋で第2版を手に取った際も、真っ先にチェックしたのは索引だ。

    今回の索引は良くできている(というかこれが普通かも知れないが…)。第1版で索引に割かれているページ数は13ページに対して、第2版では倍増、とまではいかないも23ページ。しかしフォントが小さくなっていることと、余白が少なくなっていることも鑑みると、おそらく倍以上の情報量となっているはずだ。また第1版では技術本としてはあり得ないほど、リファレンス的な使い方ができなかったのが、第2では本文で説明されているほぼ全てのメソッド名や名前がちゃんと載っている。おそらく第1版以降に数多く出版されたRails本の中でも、最も優れた索引だと思う。

    また、第1版では付録であったマイグレーションの説明が、ちゃんと1章割かれていたり、概要の1節だったActiveSupportの説明にやはり1章割かれていたり、RJSの説明が増えていたり。
    さらに以前(と言っても1年ちょっとしか経ってない)とは流行が変わってしまったRailsの本番環境についての説明も大きく修正されていて使えるものになっている。

    全体のボリュームも100ページ以上、繰り返すが余白が少なくなっていることも考えると内容はかなり増えていると思われるが、驚いたことに本の厚さは薄くなっている。これは紙を薄くして実現したようだ。ページの捲り心地やキーボードの手前に開いた状態で置いて参照する際にも安定しやすく、地味だが良い改良点だと思う。値段は\3,800-から\4,200-へ上がってしまったが、内容を考えれば全く不満はない。

    長々と書いてしまったが、そんなわけで、新しいRailsによるアジャイルWebアプリケーション開発 第2版はとてもお勧めです。

    ここ最近、iPodをPCにつないだときに、iTunesに認識されるのが、もう我慢ならないくらい遅かった。

    iTunesのアップデートのたびに早くなったかなと期待し、裏切られるという繰り返し。
    楽しみなソフトのアップデートで落胆しイラっとさせられる始末。

    しかし!悪いのはiTunesのせいではなかった。

    mixi stationはiPodで聴いた曲をmixiに送って、私が今まで何を聴いていたかを晒してくれるサービスである。おそらく他にも機能はあるのかも知れないが、私はこの用途にしか使っていない。

    先日、強烈に待たされた後にiTunesがiPodを認識した瞬間に、iPodで聴いた曲をmixiに送りますか?というダイアログが出たので、も、もしやとタスクバーに常駐しているmixi stationを終了してみたら明らかに認識が早くなった。

    ここしらばくmixi musicも見ていないし、last.fmがあれば十分なので、mixi stationはプログラムの追加と削除より綺麗さっぱり消えてもらった。

    iPodの認識が最近遅いと思われていて、mixi stationを入れている方は是非削除してみてください( ̄ー ̄)

    ちなみに全く同じ用途(音楽のみですが)のlast.fmクライアントは入れていても、遅くなったりしていません。

    このアーカイブについて

    このページには、2007年11月に書かれたブログ記事が新しい順に公開されています。

    前のアーカイブは2007年10月です。

    次のアーカイブは2007年12月です。

    最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。