Google AppEngine と Jruby と Sinatra で Twitter 遊びをしようと思った

使ったライブラリはその名もTwitterhttp://twitter.rubyforge.org/)。jruby-opensslを入れておけばエラーなく呼び出すことはできました。それで手始めにBASIC認証で適当につぶやいてみようと思ったのです。

 httpauth = Twit|ter::HTTPAuth.new('user', 'pass')
 client = Twitter::Base.new(httpauth)
 client.update("test")

ところがエラーになります。

2010/03/15 13:49:50 org.apache.commons.httpclient.HttpMethodBase processResponseHeaders
警告: Cookie rejected: "$Version=0; _twitter_sess=BAh7CjoPY3JlYXRlZF9hdGwrCNNTFmInAToMY3NyZl9pZCIlYTAxZDRlN2Jk%250AMjg0ZWVkNmFkYzA2YmJlMmZjNmQ1ODg6B2lkIiUyMmZlMjdjMmJlYjE0NmI4%250AMzgxNzQxYTJiZTIxMDI1NiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6%250ARmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoRdHJhbnNfcHJvbXB0MA%253D%253D--82c5c0ff91328c46f2bfc2648b5221336d1b482f; $Path=/; $Domain=.twitter.com". Illegal domain attribute ".twitter.com". Domain of origin: "twitter.com"

なんかTwitterライブラリとは関係ないところでエラーになっているような…
そこでNet:HTTPで直接叩いてみました。

 Net::HTTP.start('twitter.com') {|http|
  req = Net::HTTP::Get.new('/statuses/followers.xml')
  req.basic_auth 'user', 'pass'
  response = http.request(req)
  print response.body
 }

2010/03/15 15:09:19 org.apache.commons.httpclient.HttpMethodBase processResponseHeaders
警告: Cookie rejected: "$Version=0; _twitter_sess=BAh7CToPY3JlYXRlZF9hdGwrCCgXX2InAToHaWQiJWRmMzlhMDdjMjcwYzNj%250AOWI2NTFmZGEyOGZhNzYwZTJmIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsAOhF0cmFuc19wcm9tcHQw--4e27a81219d81a79cfd3b88743fbdb577cf9af03; $Path=/; $Domain=.twitter.com". Illegal domain attribute ".twitter.com". Domain of origin: "twitter.com"

やはり同じエラーだ…
"Illegal domain attribute" っていったい…?
【追記】
これって 'twitter.com' というドメインが '.twitter.com' 用のクッキーを設定しようとしてるってエラーですかね。調査中…

『小さなチーム,大きな仕事』

37signalsの創業者と,RailsのDHHの共著である『小さなチーム,大きな仕事』の翻訳を手伝いました。早川書房の新書で出ています。37signalsイズムあふれる面白い本でありました。失敗体験なんていらないよ! 働きながらスタートアップを始めよう! 理想のタイミングなんて来ないからとにかく始めよう!

小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)

小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)

「青空ファインダーロック」をkindle storeで売る

大東京トイボックス」を描いているうめさんから『「青空ファインダーロック」をkindle storeで売りたいんで手伝って〜』と言われて手伝ってきた。Kindleは米Amazonの販売する電子書籍リーダーで,Amazon.comにいくとKindleで読む書籍が山ほど売ってます。Amazon DTP(Digital Text Platform)というのも展開していて,こっちは個人でもテキストをアップロードするとkindle bookに変換してくれて,kindle storeで売ることができる。当初は米国以外の人間が使うにはハードルが高かったんだけど,最近いろいろ条件が緩和されて(ほぼ)誰でもkindle bookを作れるようになりました。とはいえKindleは日本語フォントが無いんで,日本語のテキストは使えない。でもマンガならいいんじゃ?ということでトライしてみることにしました。その顛末はこちら。

日本初? kindleで日本語漫画を出してみよう企画

Amazon DTPは,PDFとかWordとかいろんなデータを受け付けるので分からなかったんだけど,実際の内部構造はhtmlになっている。使える画像データはGIFかJPEG(サイズは1つあたり64KB以下)。図表やチャートならGIF,写真ならJPEGでしょうが,コミック原稿はどっち? このときはよく分からずTIFFで入稿するというムチャをしてしまいました。しかもデータでかすぎ。こういうときはAmazon側で自動的にJPEGに変換され圧縮されちゃう。これを避けるには,最適化は自分でやる必要がありますね。データが大きすぎると価格も2.99ドル以下にはできません。日本から買うときは2ドルよけいにかかる(通信料)ので,結局4.99ドル。読み切りマンガをひとつ買うためには,ちと高すぎる。

AOZORA Finder Rock

うめさんの原稿はもともとPhotoshopの256段階グレイスケールのデータだったので,網点に変換するか適度に減色してGIFにするのが一番いいみたい。いまkindle storeに並んでいる "AOZORA Finder Rock" は,最適化した(Kindleの表現力に合わせて12段階のグレースケールにした)バージョン2のほうです。価格も0.99ドルに下げられたので,日本からは2.99ドルで買えます。ただ,最初のバージョンを買った人に無料でアプデートということが現状ではできない。

他にもCopyrightsページをどうするかとか,まだ課題もあるんですが,とにかくやってみたよ!という報告。
うめさんには取材が殺到したそうな。

【追記】
実はAmazon DTPのデータ(というかkindleのフォーマット)はMobipocketというやつと同じなので,Mobipocket Createrを使ってローカルにデータを作ると調整しやすいのだった。ただうめさんのところは環境が全てマックだったので,Windowsでしか使えないこいつは利用できず。
【追記その2】
ブックマークで教えてもらいました。マック用にはcalibreというツールがあるそうです。

大東京トイボックス(5) (バーズコミックス)

大東京トイボックス(5) (バーズコミックス)

Chromeで簡単検索

Chromeでは,URLを入力するエリアに検索文字列を入れることもできます。デフォルトではGoogleを使って検索して,その結果を表示してくれます。なのでFirefoxのような検索バーは不要なわけですね。ただ使用中のウィンドウが書き換わってしまうのが悲しいところ。『もしかして,別ウィンドウを開くキーアサインがあるんじゃないか?』と思っていろいろやったら,ALT+Enterで別ウィンドウが開きました。
つまり URLアドレスを入力欄に適当に文字列を入力→ALT+Enterで別ウィンドウに結果表示 です。これは便利だ。もちろん元のページのURL欄は元のままです。

文学フリマに出展します

第九回文学フリマhttp://bunfree.net/
開催日 2009年 12月6日(日)
時間 開場11:00〜終了16:00(予定)
会場 大田区産業プラザPiO
サークル名「bnkr」
ブース番号「j-1」

前回に引き続き表紙は「大東京トイボックス」のうめ画伯。

大東京トイボックス(3) (バーズコミックス)

大東京トイボックス(3) (バーズコミックス)

今回は十人で十個ずつのプロットを提供して,どなたでも自由に利用可能という企画があります。ワタシは例によってスティーブ・ジョブズが威張りまくる小説(難易度:ジョブズ)を書きました。よろしくー。

Railsよ,ありがとう

"Thank you, Rails"を翻訳しました。なんか難しかった。
誤訳がたくさんあると思うので,教えていただけるとありがたいです。

                                          • -


Railsよ,ありがとう

jacob Kaplan-Moss
2009/11/05

技術的なコミュニティにとって,ライバルをけなすことはファッションでもあるし,たぶん不可避でもある。Emacsの人々はViをバカにするし,Windowsの人々は我々Macユーザを見下し(そしてLinuxの人々は両者をバカにする),そして誰もが,そのシェアにも関わらずPHPを馬鹿にする。われわれGeekは,些細な技術的なポイントを芸術のひとつでもあるかのように論じる。

これらはよく理解できる。つまりコミュニティは「自分は何者でないのか」という観点から定義する方が簡単なのだ。共通の敵は,我々を集中させ駆り立てる。競争は前向きな形をとることができる。それが友好的で建設的であるあいだは,両陣営の利益となるのだ。

しかし,最近のDjangoコミュニティにおける大量の議論が,特にRailsに関するときに,だんだん険悪になってきていることに私は気づいた。この件に関しては私もとても無実だとは言えない。私も確かにRailsバッシングに加担し,そして私はそれを後悔している。

Web開発コミュニティにいる我々は,RailsRailsコミュニティにはむしろ感謝すべき恩義があると認めることが大切だと思う。Railsは我々のWeb開発についての考え方を見直させ,Railsに触ったこともない人ですら間接的に利益を得ている。

そこで私は思う。我々は個人的な好き嫌いから一歩引いて,Web開発を前進させてくれたことに対して,率直に「Railsよ,ありがとう」と言うべきではないだろうか。

個人的には,Railsから次の二つの大きな教訓を得た。

開発は楽しくあるべきだ

PyCon 2009で,興味深いトピックを議論しているとき(http://pycon.blip.tv/#1941789),Ian Bicking(http://blog.ianbicking.org/)が,Pythonのコミュニティがときにシリアスすぎることを心配していると述べた。

私もそう思う。Pythonを始めたばかりの頃,すべての注目はエンタープライズだった。Pythonは,シリアスな仕事をしているシリアスな企業のシリアスな人々に使われるシリアスな言語になる必要がある。英国のコメディグループから名前をとった言語としてはいささか奇妙なゴールだ。

そしてRailsがシンプルなメッセージ「Web開発は楽しくあるべきだ」でブレイクした。今にして思えば,これは自明の進歩だった。我々の世代の多くのGeek達は,楽しいからという理由だけでコンピュータの世界に入ったのだから。しかし同じポイントで,我々はプログラミングで稼げることに気づいた。そしてお金が入ってくると,楽しさは出て行った。次にドットコムバブルが来た。突如として金はなくなった。シリアスな仕事というやつだ。

しかしRailsコミュニティはこれをひっくり返した。現実にお金を生み出す,小さくて,楽しくて,軽いツールがあるというのに,どうして巨大シリアスソフトを時間をかけて構築すべきなのだろう? 結局自分の仕事を楽しんでいる人たちの方が生産的だと分かった。すごい!

魂を削るようなニューヨークの仕事を離れ,50%の収入減とともにカンサスに移った一年前,私はこの教訓を得た。これは私が成したうちでも最高の決定だったが,「もっと楽しそう」な仕事のためにサラリーの半分を失うことは,そのときは職場の同僚たちからたくさんの非難を浴びた。今日ならこんな批判は浴びないだろうと思う。少なからずRailsコミュニティの掲げた理想のおかげだ。

最近は,Djangoコミュニティにも独自のお馬鹿なタイプがいて(http://djangopony.com/),私を楽しませてくれる。それが少しやりすぎと思う人もいて,私も同意するが,笑い,遊び,楽しみといったものは活気のある健全なコミュニティに不可欠な性質だ。

シンプルさは機能のひとつだ

私がCMSの世界に最初に突入したのはBEA(いまはOracleWebLogichttp://www.oracle.com/appserver/index.html)とVignette(http://www.vignette.com/)を通じてだった。最初の「Webフレームワーク」の体験はStruts 1(http://struts.apache.org/1.x/)で,次がZope2(http://zope.org/)だった。

あらゆるツールは巨大な機能比較表(http://cmsmatrix.org/)を念頭に置いてデザインされているように見える。できるだけたくさんのチェックマークを獲得することがゴールのようだ。CMSの開発は,非常に非常に機能先行で,ゴールはあらゆるケースに対応できることのようだ。

BEAと向き合って,私はこの衝動の強さが理解できなかった。いまフレームワークのメンテナとして,私はそれを「完全に」理解できる。すなわち全てのユースケースの裏側には実世界の開発者がいて,期限内に仕事を終わらせようと努力している。機能の要望に「No」を言うのはとてつもなく大変だ。私はそうすべきだと思うほどは,「No」と言っていない。

「the Rails Way」でも最も議論の余地があるのは,依怙地なソフトウェアというアイデア(ma2注:開発者が何も指定しないとあらゆる面でデフォルトが適用されるということ)だった。ライブラリが開発者に一定の期待をすべきというこのアイデアは,かなり異端に見える。我々はDjangoの世界によりソフトな一面を持ち込んだ。つまり「sensible defaults」のことだ。基本的なアイデアは同じだが,一般的なケースを推測してソフトウェアをシンプルに保つ。

このアイデアはシンプルさを機能のひとつにして,機能比較表を完全に無害化してしまった。チェックマークの列の代わりに,いまや同じ仕事をどれだけ少ない行で実現できるかを比較している。一枚岩の巨大な機能セットは去り,ミニマリズムが登場した。

もう一度Railsに感謝を。我々は全てのわだかまりを捨てたわけではないにしても,君たちがいてくれてよかった。君たちがインターネットをよりよい場所にしてくれたのだから。

「RubyによるMac OS Xデスクトップアプリケーション開発入門」の無料プレゼント

RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~

RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~

RubyによるMac OS Xデスクトップアプリケーション開発入門」は,その名の通りRuby言語でMacのアプリを作るための本。Mac固有のフレームワークRubyから触ることができます。RubyKaigiで見たときから欲しいと思っていました。しかも無料プレゼント企画。これは応募するしか。
ちなみにLeopardについてきて,今すぐ使えるのがRubyCocoaで,現在急ピッチで開発が進んでいる新世代の"MacRuby"がMacRubyです。いずれ,MacRubyが主流になるのでしょうね。この本では両方とも取り上げられているので,そこも面白そう。