| @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']} -> #{target_user['screen_name']}: #{target_obj['text']}"
        elsif status['target']
          target = status['target']
          puts "#{status['event']}: #{source['screen_name']} -> #{target['screen_name']}"
        end
      end
    end
  end

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

  retry
end

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

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

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

レンタルサーバーみたいな共有サーバーとか sudo 権限のないサーバーで動かしてるRailsアプリケーションを再起動したくなることがある。でもApacheをリスタートする権限がない。じゃあどうするかとググっていたらこういう記事にたどり着いた。

To restart your rails app do a "ps x" to get the pid of your dispatch.fcgi process(let's say it's 1234) then do a "kill 1234". This will kill the running process and a new one will be automatically spawned and you should now see your changes. How do I restart rails app? - DreamHost Forum

要するに ps x でRailsアプリケーションのプロセスIDを調べ、 kill #pid しちゃうというわけ。 kill できんのかなと半信半疑だったけどちゃんとできた。

他のレンタルサーバーには当てはまらないかもしれないけどメモっときます。

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

ちょっとCakePHPで作ってるサイトでRSSフィードを配信したいと思ったのでやってみたんだけど、思いの外面倒くさくてびっくりした。『RailsによるアジャイルWebアプリケーション開発』を読みながらRails 2.3.5でRSSフィード作るときは結構簡単だった気がするので、正直これはないわと思った。

『Railsによる〜』で作ってるデモプロジェクトのdpeotのコードを見てみると、RSSを配信するときはControllerに以下のように記述し、

respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @products }
end

config/routes.rb

map.connect ':controller/:action/:id.:format'

と書いたあと、RSS用のViewを用意してやるだけだ。ものすごくシンプルで簡単だった。

CakePHPで同じことをやるためには以下の手順が必要。

ちょっと面倒くさすぎてやる気にならなかった。どうせいま僕が作ってるサイトなんてRSSリーダー使うような人が見るサイトじゃないし、フィード配信機能の実装はそんなにプライオリティ高くないので他にやることがなくてどうしようもなく暇なときにでもやろう。

Railsは最初のとっかかりのハードルは高いけど、使い方を覚えていったらやっぱりCakePHPとかよりも全然簡単かつ高速に開発できる気がする。レールに乗ってる感強い。このMephistoの設置もすごく楽だった。ただTerminalを使い慣れた人や、サーバーにSSHでアクセスできる環境じゃないとRailsアプリケーションを使うのは難しい。CakePHPは反面、全部FTPでアップロードすれば良いのでサーバーに標準的な構成でPHPがインストールされてりゃ環境構築でつまずくことはない。どっちをとるかって話ですよね。

僕はファッションの観点からRailsを選びたい。

| @映画/ドラマ/テレビ

フローズン・リバー

評価 : ★★★★★

あらすじ

アメリカとカナダの国境付近に暮らす貧しい白人女性レイの話。貧しいながらも家を買いトレーラーハウス暮らしに別れを告げる予定だったが、ある日夫が住宅の購入資金を持って蒸発した。期限内にお金を払わないと手付け金がパーになり家を買えなくなってしまう。レンタル家具など様々な支払い期日が迫っており一日も早く夫を見つけ出すか現金を用意する必要があった。困窮したレイが選んだ選択肢とは。

感想

すごい映画だった。貧しい白人の話というのは貧しい黒人の話よりも悲惨になる場合がある。

特に悲しいのがレイの長男TJ。責任感とか使命感が強くて、貧しい一家のためにアルバイトをしたいと申し出るんだけど、まだ15歳だからダメだといって母親は取り合わない。でも実際は子どもたちの毎日の昼食代にも事欠くような状況で、息子は息子なりに詐欺師っぽいアルバイトに手を染めたりする。

レイは失踪した夫が乗っていた車に乗るネイティブアメリカンの女ライラを捕まえて車を奪い返すんだけど、実はその女は密入国の斡旋業者で、ひょんなことからレイもその仕事に手を染めることになる。「白人は警察に怪しまれないから」とライラは言う。

日本で普通に暮らしてると、アメリカと言えばオバマとかシリコンバレーとかサブプライムローンとかイラク戦争とか沖縄の海兵隊とか、そういう部分にしか思いが至らないんだけど、アメリカにはネイティブアメリカンの問題があることを思い出させられた。

ネイティブアメリカンには部分的な自治が認められていて、彼らが暮らす居留地には警察は立ち入ることができない。フローズン・リバーとはアメリカとカナダの居留地にまたがった河が冬季に凍結してできる秘密の道のことを指しており、ライラとレイは万一警察に見つかっても安全なこの道路を使って密入国の幇助をするのだった。

レイがなかなか勤め先の100円ショップで正社員として働かせてもらえず経済的に困窮する様子や、長男のTJが少しでも家の役に立とうとバーナーを使って大工仕事をしようとする様子がとても切なかった。まるで大草原の小さな家を見ているかのよう。アメリカの白人っていうとみんなそこそこ裕福で楽しく暮らしてるようなイメージがあるんだけど、中より下の階級のアメリカ人は医療保険にも加入できず、満足な医療も受けられないまま死んでいったりしてる。中途半端なプライドがあるから人の施しに頼ることもできず、貧乏なマイノリティの映画とはまた違った悲しさがある。

ドキュメンタリーとドラマで全然ジャンルは別物だけど、僕はなんだか『アンヴィル』にも通じるものを感じました。かなりすごい映画だった!

| @映画/ドラマ/テレビ

誰がため

評価 : ★★☆☆☆

あらすじ

第二次大戦中、ナチスドイツに占領されてた頃のデンマークの話。レジスタンス活動に身を置く二人の男が主人公。祖国の自由のためと信じて行ってきた活動が実は…。

レジスタンス活動っていうと崇高なものととらえられがちだけど、実はレジスタンスの中にも悪いやつがいて、実行部隊が悪いやつにいいように利用されていたこともある、みたいなストーリー。実行部隊のうちの二人に焦点を当てているんだけど、二人とも祖国の自由のためと信じて家族を犠牲にしたり、信条に反する行い(女性を殺す)なんかをやるんだけど、後の方になってナチスの協力者を殺しているつもりが、反ナチス活動を支援していた人物を殺害していたことが判明して衝撃を受ける。

知っておかなければならない歴史の真実だとは思うけど(この映画は実話ベース)、全体的に暗くてあまり好きにはなれなかった。カメラワークも不自然。ドキュメンタリーっぽさを出したいのか、不自然な寄りや引きがある。ただ、二人の人物が会話しているシーンで、話している人物の目にフォーカスを合わせ、その人が話し終えたら次に話をする人物の目にフォーカスを合わせるテクニックは、スリリングな会話の雰囲気を伝える演出効果があったと思う。でもやっぱ慣れなかったけど。

蛇足だけど、デンマーク語は全然分からないのに見ていて「???」みたいな感じにならないのはゲルマン語だからかなと思う。ドイツ語よりも英語に言葉の響きが近くて、不思議な心地よさがあった。

ポータルシットの方にも感想を書いたことはないんだけど、デンマーク映画では『恋に落ちる確率』という映画がとても好きです。なんかこっちの方を見返したくなる映画でした。

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

『Railsによるアジャイル〜』とかのコードはViewの部分がスゲーシンプルで、ロジックがほとんど書いてない。これに慣れると、CakePHPに戻って自分が作ってるウェブアプリを見たときに、Viewに結構ロジックが書いてあって愕然とする。例えばフラグをたてて条件にマッチすれば日付を表示し、マッチしなければ表示しないとかしたいとするじゃないですか。Controllerでそういう設定できなくないけど長くなる。Viewの中に書いてしまったら数行で済むし。

だから僕の作ってるCakePHPアプリはMVCとか名ばかりでViewのコード超きたない。入れ子になったif文がたくさんあるし、正規表現で日付の書式変更とかまでやってる。さすがに関数とかは定義してないですけどね。

そもそもCake FoundationのCakeBookも結構Viewにロジックが書いてあったりする。というかかなりハードに書いてある。CakePHPってViewとロジックを分離させるのが難しいのかな。

加えて、Controllerも結構ひどいことになってる。本当はModelに書くべきことを結構Controllerに書いている気がしないではない。サイト検索のためのメソッドとか200行近くあるし、joinとかしまくり。

MVCでロジックとヴューを分離することでデザイナーがViewを触れるようになって分業が進むかもとか思ってたけど、到底そんな状況にないですね。