| @WWW

ちょっと前の本だけど、『Webを支える技術』をいま読んでます。

HTTPの話とか、毎日使ってる技術のことを知らなくて、いちいち感動しながら読んでるんですけど、中でも興味深かったのがURIの話。56ページの、「URIはリソースの名前だから名詞であるべき」というくだり。バージョン 2.0以前のRailsでは、

http://example.jp/sample/people/show/123

みたいなURIがデフォだったそう。しかしRails 2.0以降は

http://example.jp/sample/people/123

となって、動詞 show が省かれるようになった。HTTP通信で動詞を表すのはHTTPメソッドだから、URI自体が動詞を含むのはおかしいということらしい。ちなみにこのとき、名詞であるURIにアクセスするためのHTTPメソッドは GET ですね。

確かに自分が作っているサイトでもRailsで動かしてるものは、動詞を含まない名詞だけで表現されたURIを表示する。しかしながらCakePHPは

http://example.jp/sample/people/view/123

みたいなのがデフォだ。クールじゃない。というわけでURIから view を省くようにルーティングの処理を書き換え、各クラスのコントローラーも書き換えといた。

この『Webを支える技術』、プログラミングの話とかは載ってないから読んでいきなり何かの役に立つというタイプの本ではないけど、Web制作者なら職種にかかわらず読んどいた方が良さそうな本だなーと思いました。

| @技術/プログラミング

RubyKaigi 2010に行ったのでその感想を軽く。

自分のスペック

Rubyは使い始めて8ヶ月くらい。元々何もできなかったのでいまも初心者レベル。プレゼンテーション聞いてても分からないことが多かった。

感想

永和システムマネジメント永和システムさんの「Head First ふつうのシステム開発」は面白かった。プログラミングのやり方を人から教わったことがないので、普通の会社はこうやって開発してるんだってのが分かった。テストの様子を見られて参考になった。あとVimがすごくカスタマイズしてあってすごかった。用事があって途中までしか見られなかったのが残念。

MongoDBについてのプログラム(Practical Ruby Projects with MongoDB)で、気にはなっていたけどよく分からなかったMongoDBのことがより一層気になった。情報の連結とかそういうコムズイことはSQLでやるんじゃなくてプログラム側でやるべき、ってことなのかな。

クックパッドのセッションも見学した。CTO氏が質疑応答で「専属デザイナーはいなくてデザインもできるプログラマーがデザインやってる」って言ってたのにびっくりした。大規模サービスをやってたら負荷分散のテクニックとか参考になったかもだけど、自分が作ってるサイトは多くても5000UU/日くらいなので「ふーん」という感じで聞いてた。

東京とつくばの移動に時間がかかったこと、他にも予定があったこと、帰りの飛行機の都合、などなどであまりゆっくり参加できなかったのが残念だったです。28日は用事があったので基調講演見られないから生Matzを拝むの諦めてたけど、Jeremy Kemperの基調講演がキャンセルになったかわりにトークセッションがあってて、そこにMatzも登場しててRubyの教祖を拝めたのでまぁ良かったと思います。あとジュンク堂RubyKaigi支店でで技術書買いすぎて散在した!

2010年9月26日修正

すみません、永和システムマネジメントさんのことを「永和システムさん」と書いてました。はてブのコメント欄で角谷さんに指摘されてた!

| @技術/プログラミング

Rubyいいっすわ。あんまり詳しいことは tech.portalshit.net に書きますけど、Rubyいいっすわ。Rubyの何が良いってオブジェクト指向なのがいいっすわ。あと無駄な括弧やセミコロンが必要ないのもいいっすわ。配列の操作、ブロックとかがいいっすわ。Procとかまだよく分かってないけど、とても便利っぽいものなにおいがぷんぷん漂ってくるのがいいっすわ。全般的に「こういうのPHPでやりたかった」っていうのがたくさんあってとても助かる感じです。

残念なのは、ターミナルの操作にある程度慣れてないと、最初の環境構築でつまずくところかな。RubyGemsインストールして、必要なGemをインストールして、ってやらないとなかなか使えるようにならない。あとレンタルサーバーで気軽に使えないのが痛いかな。PHPは大抵のサーバーに入ってるし、ターミナルの知識なくても、HTMLの拡張子をPHPに変えて、テキトーに <?php ?> で囲んで何か書いてサーバーにアップロードすればとりあえずスクリプトを動かすことができるので、簡単に始められるのが良いですよね。RubyはApacheで動かそうとするとhttpd.confいじる必要があるので、なかなか簡単には使い始められない。

というかですね、PHPは動的HTMLを生成するためのテンプレートエンジンなんだと思う。どっちかつったらプログラミング言語っつーよりもウェブアプリケーションフレームワークでいうならビューに特化したマークアップ言語なイメージ。だから小規模な動的WebサイトだったらPHPはとても良いと思う。DBとか使わなくて、MVCとか分ける必要のないサイトとか。

ただライブラリとか使って複雑なことやるんだったら他の言語の方が良いと思う。PEARとかPECLとか便利なのか不便なのかよく分かんないし。

以上、Ruby on Railsの手術を受けて洗脳されている最中のおっさんの戯れ言でした。

そういや、今月下旬に友達の結婚式で東京行くのでRubyKaigi行きます。もし会場で僕を見かけたら生卵とか投げつけないで一緒にご飯食べたりしてあげて下しあ。

| @技術/プログラミング

FreeBSDでVimを起動しファイルを編集したあと、 :q でVimを終了させてるのに元のコンソールに戻らなくてなんか嫌だなーと思っていた。MacもUbuntuもDreamHostのDebianもVimを閉じると元に戻るのに、職場の本番環境のFreeBSDだけこれなの。ファイル編集前のコンソールの履歴とかを見たいこともあるので、Vimが終了したら元の画面に戻るようにしたいと随分長いこと思っていたんだけど、たったいまようやく出来たのでメモっときます。

ちなみにVimには restorescreen とかいうオプションがあるらしく、必死で.vimrcにこの設定を書いてたけど、これはなんかWindowsのVim専用のオプションらしいのでマカーやUNIXユーザーの方はこれを設定しても無駄です。

情報元は フルスクリーンアプリを終了したときに元のコンソールの状態に復元する - 技術メモ帳 というページ。

FreeBSDの場合、 /etc/termcap ってのの中にフルスクリーンアプリを終了したときにコンソールに戻るかどうかを設定する場所があって、こいつを変更すればよいらしい。

しかし自分はこのサーバーでroot権限を持ってない。なので cp /etc/termcap ~/.termcap したあと chmod 644 ~/.termcap して vim ~/.termcap し、自分の使ってるターミナルの環境に合わせて設定を変更してやるとOK。

僕の場合はMacの純正ターミナルを、シェルはzshで使っている。 echo $TERM してみると xterm-color と表示されるのでxterm-colorの設定が書いてあるところをいじった。

くわしくは上のリンク先を見てもらうといいんだけど、とにかく te ってのと ti ってのがあって、これをMacの場合は te=E7E[?47hti=E[2JE[?47lE としてあげればいい。そんでシェルの設定ファイルに export $TERMPATH=$HOME/.termcap と書いてやり、一端ログアウトして再ログインするとめでたくVimを終了したときにコンソールが復元されるようになります。

| @技術/プログラミング

『RailsによるアジャイルWebアプリケーション開発 第三版』をまだちまちま読んでる。いまActiveRecordのリレーションシップのところ。全然分からなくて全然進まない。もうRails 3.0が出そうだというのに。またろくすっぽ技術書を読まないうちに化石になっちゃいそうだよ。バカはつらいよ。

| @Mac/iPhone

プログラミングっぽいネタだけどMacの話なのでこっちに書きます。

僕はちゃんとしたプログラミングの勉強をしたことがないので、いつも行き当たりばったりでサイト作り始めます。でもさすがにこういうのの非効率性が分かってきたので、最初に必要なデータベースのテーブル数くらいを大まかに決めることにしました。そんでそのイメージ図みたいのを描くのにMindNodeというアプリケーションを使ってみた。

MindNodeはマインドマップを描くためのソフトです。マインドマップの描き方とか知らないし、キャンペーンかなんかで安かったのでとりあえず買っておいたソフトですが、思いの外良い感じに描けました。

そんでこれをThe Hit Listでアウトライン風に書き下してみた。

開発の初期段階でやることが視覚化できてとっても良いと思いました。

それにしてもThe Hit ListはiPhoneアプリ出なさそうですね。Google Groups のユーザーフォーラムでは「出す出す詐欺」の作者にみんなあきれ果ててThingsに戻ったり別のソフトを物色してるみたい。

The Hit List自体はとてもUIも機能もとても良くできているだけに大変残念ですね。

| @技術/プログラミング

この前大阪で第二回アメ村ブルゾンの会をやったんですけど、そこで日夜ネットストーキングプログラミングにいそしんでおられる皆さんとお会いして、TwitterのStreaming APIの使い方を教えてもらいました。なんか自分でやろうとしてたんだけど、全然見当違いなところを見ていたみたいで、僕もStreaming APIでネットストーキングできるようになりました。pokutunaさんにもらったコードと "Twitter Streaming APIをRubyで試してみる - しばそんノート":http://d.hatena.ne.jp/shibason/20090816/1250405491 を参考に、以下のような感じにしてみました。

#!/usr/bin/env ruby
# coding: utf-8

require 'net/http'
require 'uri'
require 'rubygems'
require 'json'

USERNAME = 'morygonzalez'
PASSWORD = '***'

uri = URI.parse('http://chirpstream.twitter.com/2b/user.json')
begin
  Net::HTTP.start(uri.host, uri.port) do |http|
    request = Net::HTTP::Get.new(uri.request_uri)
    request.basic_auth(USERNAME, PASSWORD)
    http.request(request) do |response|
      raise 'Response is not chunked' unless response.chunked?
      response.read_body do |chunk|
        #空行は無視
        status = JSON.parse(chunk) rescue next
        #eventを含まないものは無視
        next unless status['event']
        source = status['source']
        if status['target_object']
          target_obj = status['target_object']
          target_user = target_obj['user']
          puts "#{status['event']}: #{source['screen_name']} -&gt; #{target_user['screen_name']}: #{target_obj['text']}"
        elsif status['target']
          target = status['target']
          puts "#{status['event']}: #{source['screen_name']} -&gt; #{target['screen_name']}"
        end
      end
    end
  end

rescue Timeout::Error => ex
  p "<-----!!!! Timeout::Error!!!!----->"

  retry
end

教えてもらったコードではTweetの内容を垂れ流しにするやつだったんですけど、自分でちょこっといじってTweet以外のステータスを表示するようにしてみた。しかしなんか調子悪いっぽくて、完全にはStreamを取れてないっぽいです。

でもまぁ一歩前進したことは確か。Rubyがんばるぜ。