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

この前大阪で第二回アメ村ブルゾンの会をやったんですけど、そこで日夜ネットストーキングプログラミングにいそしんでおられる皆さんとお会いして、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がんばるぜ。

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

なんかTwitterで「最近のポータルシット変わったよね…」とかいう意見を目にするようになったので、パソコンネタだけ隔離して別にブログを始めることにした。使っているCMSはMephisto。Railsの勉強になるかと思って。早速DreamhostへMephistoをインストールしていて躓いてしまったのでちょこっとメモ。

とりあえず tech.portalshit.net というサブドメインを用意し、DreamhostのパネルでPassengerのセットアップ。その後SSHでサーバーに接続し、

$ git clone git://github.com/emk/mephisto.git
``

してgithubからプロジェクトをclone。

Mephistoのインストールにはいくつかgemが必要。Dreamhostには結構たくさんgemがインストールしてあるんだけど、いくつか足りないものがあった。とりあえず設置ディレクトリのルートで

```sh
$ rake gems:install

と打ってみたところ、nokogiriとそれに依存するbrynary-webratが入らなかった。原因を調べてみたところ、xsltのライブラリをダウンロードして、gem install するときにパスを指定してあげる必要があるらしい。xsltのライブラリ自体はPHP5をカスタムインストールしたときに入れてあるので、以下のオプションでインストールした。

$ gem install nokogiri \n    --with-xslt-include=/home/morygonzalez/php5/include/ \n    --with-xslt-lib=/home/morygonzalez/php5/lib/

無事インストール成功。その後もう一回 rake gems:install を実行してbrynary-webratも入り、管理ページにアクセスしてみると今度はPassengerのエラーが。これは単純にdatabase.ymlに development: のDB環境しか記述していなかったこと、 rake db:bootstrap のときに RAILS_ENV=production をつけていなかったことが原因だった。そういうわけでdatabase.ymlに production: の設定(sqlite3を使用)を書き、

$ rake db:bootstrap RAILS_ENV=production

ですべてのインストール作業完了。いまこうして動いております。

今後はここにCakePHPやRails、JavaScript関連のことを書いていこうと思います。できれば一日一ポスト、その日に学んだことを書いていきたいです。

| @Mac/iPhone

Pocket WiFi

せっかくMacBook Pro持ってるのに外で使わないのもったいない、しかし外で使うためにはやっぱり回線が必要だ! というわけでSoftBank版のPocket WiFi、C01HWを買いました。

家にいるとついついいろんな誘惑に負けてしまってプログラミングの勉強がはかどらないので、一念発起してPocket WiFiを買い、自分にハッパをかけることで屋外で勉強できたらいいかなと思いました。

昨日早速スターバックスでMacBookおっぴろげてみました。勉強はあまりはかどらなかったですが、家にいたらきっとむふふな動画見たり酒飲んだりしてだらだらしていたであろう時間に、少しでもテキストが進んだので買った甲斐はあったかなと思います。

最近は土日どっちかは外で映画見てるので、映画の上映待ってる細切れの時間とかに少しでもプログラミング出来たらとても良いかなと思ってます。週末少しもコード書かないと忘れること多いし。

ところで、買って半年以上経つのに本格的にMacBook Proを持ち出して使うのは昨日が初めてだったのですが、MacBook黒に比べて

  • バッテリーのもちが良い
  • 15インチディスプレー(1440 × 900)だとやっぱ快適
  • 薄いのでバッグへの出し入れがスムース

でした。先週出た最新のMBPはもっとバッテリー駆動時間伸びてるらしいし、しかも値段下がってるし、いい時代になったもんですね。LED Cinemaがもうちょいレート反映した値段になってくれたら良いのにな。

| @Mac/iPhone

なんか一個前の記事でTextMateマンセーみたいな記事を書いてますけど、Coda悪くはないです。というか素晴らしいです。

特に良いと思うのが、FTPクライアント機能を内蔵してるところ。普通のFTPクライアントでちまちまファイルを上げる作業は結構面倒くさいです。特にサーバーのタイムゾーンの設定がローカルのタイムゾーンと異なってたりすると、FTPクライアント上で表示される最終更新時刻が全然あてにならなくてどのファイルをアップロードすればよいのか分からなくなります。こういうとき、Codaでファイルを編集していると非常に幸せになれます。

Codaには「サイト」という機能があって、ここにFTPの情報を登録しておくとグラフィカルな感じで一覧表示してくれて、非常にシャレオツです。

1120_Coda_1.png

例えばいまサイトからportal shit!を開いたとします。するとこんな感じになる。

1120_Coda_2.png

www.portalshit.net にFTP接続しています。サイドバーに「ローカル」と「リモート」とあるのが分かるかと思います。「ローカル」を選ぶとローカルのファイルを編集でき、「リモート」を選ぶとリモートのファイルを直接編集できます。

1120_Coda_3.png

ローカルの index.php を適当に編集してみましょう。

1120_Coda_4.png

するとこんな感じで編集中のファイルには印がつく。でもまぁこんなのはよくある機能です。Codaが便利なのはここからで、ここでローカルのファイルを保存するとファイル名の横に矢印がつきます。

1120_Coda_5.png

index.php の横に矢印がついています。この矢印をクリックするとローカルで編集したファイルをリモートにアップロードしてくれるのです。これが便利。どのファイルがローカルで更新済みでどのファイルをリモートにアップロードすべきかが一目瞭然です。

加えて、「削除」「すべてを公開」なんてのが index.php の下部にありますが、こいつもすこぶる便利なんです。例えば index.php の他に複数のファイルをローカルで更新したとする。全部アップロードしなければならないのですが、ディレクトリを複数またいでいると面倒くさかったりする。しかしCodaの「すべてを公開」という機能は、矢印付きのファイルをアップロードしてくれるのです(「削除」を押すとすべての「矢印」を削除します)。非常に賢いですね。

こんなに便利なのになぜRails書くときはTextMateを使うのか。Bundles機能が便利だとかいろいろ理由はあるんですけど、このFTPクライアント機能はRails向きじゃないんですよね。Ruby on RailsはWEBrickという開発サーバーをローカルで起動してそこを見ながら開発していくので、HTMLなどの静的ファイルをぽんぽんサーバーにアップロードしていくのとは事情が異なる。CakePHPはPHPが動くなら素のApacheでテストできるので(Passengerとかいらない)、Codaで作業しながらぽんぽんアップロードしていっても問題ないわけです。だからCodaがベストマッチだった。BakeするときくらいしかTerminal.appは使わないし。

まとめると、Codaは非常に素晴らしいテキストエディターだとは思いますが、HTMLのマークアップやJavaScript、PHPなどのプログラミングには向いているものの、ハードにごりごりプログラムを書く用途には現状あんまり向いていないと感じます。もうちょいプログラマー向けに進化したら(Terminal機能を内蔵するのではなく、Terminal.appとの連携やフレームワーク特有のコマンドのサポートなど)、とても良いのではないかと思います。

しかしHTMLやCSS書くのがメインで、ときどきPHPも触るみたいな方には打って付けのエディターだと思います。$99の価値はあると個人的には感じます。

| @読書

学生の頃に買って積ん読になっていた本を引っ張り出して読みました。いわゆる「京大式カード」の本。40年前の本ですがおもしろかったです。

発見の手帳

著者の梅棹先生は高校生の頃にレオナルド・ダ・ヴィンチについての小説を読んでダ・ヴィンチがメモ魔だったことを知り、それに感銘を受けて『発見の手帳』を綴ることにしたんだそう。それが発展して有名な「京大式カード」に進化したらしいです。

僕自身はそういうノートを綴ったことはないけど、そういうの必要だなと思ったことは何度かあります。大学受験で小論文の勉強をしてた頃とか。電車に乗ってるときとか道を歩いているときとかにぽっと何かが思い浮かぶことがある。これは後から早速文章化しようと思っていても、いざ紙と鉛筆がある机の前に座るとさっきのアイディアは忘れてしまっている。こういう経験みなさんないですか? 自分の記憶ほどあてにならないものはないわけです。

いまはこういう突然のひらめきのうちのおもしろネタとかはTwitterにポストしてますが、Evernoteにどんどん放り投げていくのなんか良さそうですね。

理想の手帳はモレスキン

梅棹先生が理想としてあげているノートの特徴がモレスキンそのもので大変興味深かったです。

 大学ノートではポケットにはいらないから、やはりちいさな手帳ということになる。しかしこれは単なるメモではなく、小論文をかくものである。その点では、型がおおきいほうがいい。いろいろなのをためしてみたのだが、相反する二つの要求を満足させるために、けっきょく、新書版のたけをすこしみかくしたくらいのおおきさでおちついた。

 もうひとつ、机がなくてもかけるという条件をみたすために、表紙には、おもいきってあついボール紙をつかったほうがよい。そうしておけば、ページをひらいて、左手でささえて、たったままでもかける。かなり長期にもちあるくものだから、製本はよほどしっかりしている必要がある。なかの紙には、横線があればよく、日づけそのほか、よけいな印刷はいっさい不要である。市販の手帳には、なかなかいいものがないので、注文で気にいったものをたくさんつくらせて、グループでわけたこともあった。

梅棹先生はシャレオツさとか画家や文豪が使っていたからということよりも、実用性とか経済的な合理性を重視されてる。モレスキンはメモ帳として使うには高すぎるのは確かです。小さいやつでも1,890円する。引用部の後ろのほうにありますが、結局注文で大量に自分が気に入った型のノートを作らせるのがよいらしい。一度に大量生産するのが一番安上がりだということです。

また既製品はメーカーの事情で製品ラインナップが変更されて気に入ったものが仕様変更されたりなくなったりする。特注品を一度に大量発注してストックしておけば、この手の問題も解消できると梅棹先生は説いておられます。確かにモレスキンも一旦会社が倒産して絶版になってましたもんね。

富豪的ページングのすすめ

『発見の手帳』の具体的な使い方として、1ページ1項目の原則を挙げておられます。僕は生来の貧乏性が災いしてか、学生時代のノートとか結構けちけちとっており、これが著しく情報の検索性を低下させたと思い反省しています。先生は高校時代から授業の板書などは片面だけにとるようにしたそうです。右側にノートをとり、左側は空けておくという使い方だそう。そうすると左に自分の考えを書き込めるというわけですね。確かに学生の頃、頭が良い人のノートとかを借りたときとかは、片面だけ使う使い方ではないにせよ、スペースを十分にとって見やすいレイアウトでした。

あと索引をつくり検索性を上げるようにということを説いておられますが、今日においては発見の手帳的役割を担うのはEvernoteでしょうから、1ページ1項目の原則も索引を作る原則も現代人は簡単に満たせてしまうわけですね。これは非常に素晴らしいことだと思います。

書くことについて

本書では情報の整理術の他に、書くことについても梅棹先生の慧眼が光ります。海外の人々と手紙をやりとりするときは言語はまちまちでも決まった体裁があり、非常にやりとりがしやすいが、日本人の手紙には決まった体裁がなく、日付や署名を入れる場所や、入れるか入れない自体が各人でまちまちであったりする。そもそもきちんとした手紙のフォーマットを学校で教えないから日本人は手紙を書けなくなってのではないかと嘆いています。当時の統計で日本人は電話機一台あたりの通話回数が世界一だったそうです。

なぜ日本人は手紙を書けなくなったのか。内容重視の考え方が良くないのではないかと梅棹先生は考えておられます。形式よりも内容を重視すべきという思想が、手紙の形式を否定した。その結果「まったく無内容でも、手紙をだすこと自体に意味があるというような手紙さえ」出せなくなってしまったと。

ブログ、ひいてはなぜTwitterが流行ったかといえば単純だったからだと僕は思います。ブログは最低タイトルと本文さえ書けばパブリッシュできます。Twitterにいたっては本文140字のみ。考えようによればこれらは非常に制限が厳しく、Twitterやブログツールが求める型に従わないと文章のアップロードができないと言えます。しかしその反面、非常に気軽に書くことができるわけですね。本文さえ書けばよく、デコレーションとかその辺のことはいっさい気にする必要がない。形式などに制限があった方が気軽に書けることもあるのです。

文章の形式とかはもっと学校でしっかり教えていいと思いますね。似たようなことを過去に書きましたが(文章の書き方について)、小論文の書き方とか実はある程度体裁があります。そういうのさえ知っていれば、文才がない人でも誰でもちょっとした文章は書ける。日本の国語教育は名文に触れることとかばかり重視してるから文章を書くことが苦手な人を量産してるんだと思うんですよね。

日本語との格闘

興味深かったのが梅棹先生のタイプライターとの格闘の歴史です。先生はタイプライターで文章が書ける欧米人の環境がうらやましくて仕方なかったらしく、一時期はローマ字で手紙を書いたりしていたそうです。

その後いち早くカナモジ・タイプライター(和文タイプライターとは異なる)を導入したりもしたそう。日本語をローマ字で綴ろうという運動が戦前にあったとかいう話は聞いたことがありましたが、正直ピンと来ませんでした。しかしこの本を読んで、ワープロやパソコンが普及する前の時代の日本人は、タイプライターが使えなかったので基本的に文章は手書きしていたわけです(和文タイプライターは高価だし手書きより早くはタイプできなかったようです)。これはいまから考えると地獄そのもの。推敲していて文章の並びを換えたいときは書き直しです。いまなら気が狂いそう。

加えてEメールなら当たり前に取れる送信メールのコピーが、手紙の場合は取れない。当時はコピー機も今日ほど普及しておらず、相手に送った手紙を参照するためには相当なエネルギーが必要だったわけです。その点でもタイプライターならカーボン紙をはさんで打つことで簡単に複写が取れたそうです。

アドレス帳の整理にも苦心しておられた模様。いまなら届いたメールに返信するだけでメーラーが勝手に付属のアドレスブックに登録してくれたりと、こういうのは非常に楽になっています。

まとめ

総じて梅棹先生は、1960年代に一人だけ現代を生きていたような気がします。ただその発想を支えられる環境がなかったから、頭の中でiPhoneやEvernoteの代替となるような仕組みを作り上げていた。並々ならぬ努力がうかがえます。自分だったら絶対無理。TumblrやらTwitterやらEvernoteやらiPhoneやらTomblooがあるいまの状況を非常にうらやましく思われることだろうと思います。

確かにこの本に書かれている技術は現代では直接は役に立たないけど、Evernoteのようなソフトがあって、ローカルとクラウドで情報を同期しながらメモやアイディアを書き込める場所があることのすごさに気づくことが出来ます。

自分たちがいまいかに恵まれた時代に生きているかを実感させられる本でした。

| @Mac/iPhone

MacはUnixとして使うと便利

IMG_0287

Macはシャレオツパソコンとして使うだけじゃもったいない。一応UnixなのでUnixとしても使える。

Unixコマンドが気持ちいい

  • 「○×は使用中のため削除できません」とか警告が出るファイルも sudo rm -f &lt;ファイル名&gt; と打てば消せる。ストレスフリー。

  • 10分後にシャットダウンさせるとかも楽ちん

    出かけなきゃいけないけどまだDropboxの同期が終わってなくて電源落とせない、みたいなときは、 sudo shutdown -h +n とか打つとn分後にシャットダウンする。nのところに10を入れて実行すれば10分後にシャットダウンする。便利。

きっかけ

GitやVim、サーバー環境構築などでTerminal.appを多用するようになった。

  • Git

    • とにかく便利。プログラミングしてなくても、htmlやcssのバージョン管理もできる。『入門git』という本を読んでるけど、著者はこの本自体をGitを使ってバージョン管理しながら書いたらしい。ちょっとUnixの操作に慣れれば劇的に快適な文書のバージョン管理環境がゲットできる。共同作業で使うんじゃなく一人でやるんでも便利。
  • Vim

    • 最初はとっつきにくかったけど、慣れたらとても使いやすい。さすがにhtml書くときはグラフィカルなエディターを使うけど(Espressoで全裸コーディングとか)、プログラムを書くときはvimの割合が増えた。Terminalとの行ったり来たりが楽だし、そもそもGitを使ってたら git commit -a のときにVimが自動で開くし必然的に使う機会が増える。

MacPortsは神

MacPortsのリポジトリは結構頻繁に更新されてる。新しいバージョンをインストールするために自分でリポジトリ追加したりしなくていいし、とにかくパッケージ管理が楽。個人的に自宅サーバーやるんだったら古いMacにMacPortsで環境つくる。

というわけで

iTunesとSafari専用マシンとしてだけMacを使うのはもったいないです。良かったらUnixとしても使ってあげてください。

Snow LeopardになってもUnixとしてのOS Xには大きな変化がないので以下の本がオススメです。僕も毎日拾い読みしてます。

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

CakePHP、ちょこっと使ってみるだけのつもりだったんだけど、結構深くつきあってしまった。三つほどCakePHPでサイトつくりました。一つは社内用のウェブアプリケーションで、一つはまだ正式リリース前のものだけど、最後の一個はページビュー5000/日くらいあるサイトで実際に動いてます。ついこの前まで無職だったのに。スゲー。

PHPで素人がつくったサイトは危ないみたいな記事がこの前(というか定期的に)はてブでホッテントリに入ってた(る)けど、セキュリティのこととか分からない初心者こそCakePHPとかでサイトつくった方が楽だし安全だと思った。難しいことはフレームワークがやってくれるので。Bakeすればものの数分でウェブアプリケーションが出来てしまう。もちろんどんなフレームワークにも脆弱性がないわけじゃないだろうから100%安心というわけじゃないけど、少なくとも素人が自分でなんかやるよりも安全だと感じる。

とはいえ、フレームワークで万事オッケーなわけでもなかったりする。ちょこちょこっとカスタマイズするみたいのがフレームワークは難しい。特にCakePHPは規約がすごく重視されるから、データベースへのクエリでちょっと変わったことしようとすると結構難しくなる。というかはまる。サイト内検索をつくろうとして結構苦労した。土台が出来上がるまでは速いんだけど、そこからブラッシュアップさせていくときに結構停滞してしまう。それでも自分で一からつくるよりはかなり迅速に作れるんだけど、規約に縛られるのが窮屈に感じることもないではないですね。

で、タイトルの件なんだけど、真面目にエロサイトを作ってみた【プログラマ編】|ASTRODEO という記事がおもしろかった。はてブで1200以上ブックマークされますが1ゲットは僕です。すごいでしょ。いや僕は全然すごくないですね。書いてある内容がすごい。

確かにエロとかスクレイピングとかまぁきわどい内容ではありますが、僕はCakePHPでこんだけのことをやったということに素直に驚いた。

例えばCakePHPには hasAndBelongsToMany というのがある。ブログ記事があったとして、これが一つのカテゴリーを持つ場合は、 Post テーブルと Category テーブルを結びつけてやるだけでOKなんだけど( Post は一つの Category に所属し、 Category は複数の Post を持つ)、 Tag のような複数持てるし複数に所属する概念のモデルが存在する場合、 hasAndBelongsToMany じゃないとデータの整合性というか組み合わせをきちんと保つことが出来ない。

で、自分はこういうのの組み合わせは手が空いてる人に頼んで人力でやってもらったんだけど、このエロサイトの場合は、動画と動画の関連性の判定をプログラムにやらせてる。150件そこそこのデータの整合性を保つのも大変なのに、10000件とかそれ以上のデータを、しかも自動処理で関連づけるってまじすげーと思った次第です。

エロコンテンツなのに年齢確認がないとか著作権がらみの問題とかスクレイピングでよそのサイトに負荷かけるとかいろいろあるけど、僕は率直にこういうサイトをつくったのはスゲーなと思いました。こんなことまで出来るんだー、っていう素直な驚き。読んでて楽しかったしわくわくした。

今後もCakePHPを使い続ける分からんけど、自分もなんかおもしろいもんつくってみたいなーってすごく触発されました。

蛇足

はてブのコメント欄に「技術的には大したことない」みたいなコメント書いてる人が何人かいるけど、ほんとに大したことないんですかね。データベースを保存用と参照用で分けたり、スクレイピングしてきたデータの保存処理とか結構難しいと思うんだけど。これをすごいって感じるのはピヨピヨプログラマーだけなのかな?