2011-09-30(金) [長年日記]
■ Amazon-Auth-ProxyをSinatraに移植してHerokuで動かす
先日発表になったGoogle App Engineの値上げはGAE上で無償サービスを運用していた人たちをパニックに陥れたが、tDiaryとて無関係ではない。amazon.rbが使っているProduct Advertising API用リバースプロキシがGAE上で稼動しているからだ。
GAEの値上げ自体は11月まで猶予されたが、それでもやはり、ああいうロックインされやすい環境に依存するのは危険だ。で、同じサービスをまちゅさんがheroku + Sinatraに移植してくれたので、そちらに引っ越すことに。たぶん10月末に予定されているtDiaryの次のリリースからはこちらを使うことになると思う。
さて、リバースプロキシだけでなく、認証プロキシの方もいつまでもCGIじゃねーだろというかもっと移植性の高い環境で動かさないとね、ということで。Sinatra移植に挑戦してみた。仕事でRuby使ってるつっても主にデータ処理なのでWebアプリの新作はもう何年も作ってないわけで、新しい技術のキャッチアップはぜんぜんしていないのだ。もちろんRailsでもいいわけだけど、そんなデカいものを作る予定もないのでまずはSinatraから。
というわけでGithubの方にいろいろ追加→amazon-auth-proxy。元のCGIをそのままライブラリとして使っているのでかなりひどいアーキテクチャだが、RSpecで不完全ながらテストも書いたし、Rack上で動くようにしたし、Bundler対応もした(というか対応しないとHerokuで動かせないみたい……なのかな?)。なんかモダンじゃーん。
で、これをHerokuで動かす。この手順を簡潔にしておけば、誰もがプロキシを運用できるはず。まずはgemでherokuをインストールし、「heroku create」でアプリケーションを作成する:
% gem install heroku ... % heroku create amazon-auth-proxy-tdtds Enter your Heroku credentials. Email: t@tdtds.jp Password: Found the following SSH public keys: 1) id_dsa.pub 2) tdtds.pub Which would you like to use with your Heroku account? 1 Uploading ssh public key /home/sho/.ssh/id_dsa.pub Creating amazon-auth-proxy-tdtds... done, stack is bamboo-mri-1.9.2 http://amazon-auth-proxy-tdtds.heroku.com/ | git@heroku.com:amazon-auth-proxy-tdtds.git Git remote heroku added %
これでamazon-auth-proxy-tdtds.heroku.comというサイトができた。ここにプログラムをgit pushすればデプロイできるのだけど、さて、ここで問題が。設定ファイルには秘密にしておかなければならないAmazonのキーが含まれるので、これをGitHub上に公開するわけにはいかない。たぶん良いプラクティスがあるのだと思うが、とりあえずローカルにreleaseというブランチを切って、そこに設定ファイルを含めてHerokuにpushすることにした。
% git checkout -b release % cp amazon-auth-proxy.sinatra.yaml amazon-auth-proxy.yaml % vi amazon-auth-proxy.yaml ...KEYなどを書き換え... % git add amazon-auth-proxy.yaml % git commit -m 'added yaml file for release.' ... % git push heroku release:master Counting objects: 90, done. Compressing objects: 100% (86/86), done. Writing objects: 100% (90/90), 12.94 KiB, done. Total 90 (delta 44), reused 3 (delta 0) -----> Heroku receiving push -----> Ruby/Sinatra app detected -----> Gemfile detected, running Bundler version 1.0.7 Unresolved dependencies detected; Installing... Using --without development:test Fetching source index for http://rubygems.org/ Installing diff-lcs (1.1.3) Installing rack (1.3.2) Installing rspec-core (2.6.4) Installing rspec-expectations (2.6.0) Installing rspec-mocks (2.6.0) Installing rspec (2.6.0) Installing tilt (1.3.3) Installing sinatra (1.2.6) Using bundler (1.0.7) Your bundle is complete! It was installed into ./.bundle/gems/ -----> Compiled slug size is 680K -----> Launching... done, v4 http://amazon-auth-proxy-tdtds.heroku.com deployed to Heroku To git@heroku.com:amazon-auth-proxy-tdtds.git * [new branch] release -> master
ありゃー、いりもしないRSpecまでインストールされちゃってるな。これはGemfileで開発用のgemだけ分離するような書き方があるのだろう(と、tDiaryのGemfileを見ながら学習)。まぁいいや。なんにせよ、本当に簡単で拍子抜けするくらいだなぁ。これが現代のPaaSか!(今ごろなに言ってんだ)
というわけでいちおう動くようになったけど(プロクシなのでブラウザからアクセスしてもなにもないよ)、まだ異常系もロクにできていないのでもうちょっといじってから本番投入するとしよう。
2011-09-29(木) [長年日記]
■ 今日のAmazonの発表で一番すごいのは「Kindleのメモリを2GBに減らした」こと
いやぁ、今日発表になった新しいKindle、いいよねぇ。カワイイ。これは欲しいわ。
えっ? Kindle TouchでもKindle Fireでもない、無印Kindleなのかって? そりゃそうです。
ときどきKindleを持ってくるのを忘れて、仕方なくスマフォでmobiファイルを読むことがあるんだけど、タッチインタフェースで読書するというのは、けっこうストレスが溜まるのよ。なにしろ、「紙面」に常時指が乗っているわけで、指をどかさないと読めない部分があるってことだから。しかも電車で立って読んでる時に揺れたりすると、落とさないように端末をしっかり掴みたいけど、うっかり画面に触るとページがめくれちゃったりするわけで、何も考えずに「がしっ」と掴める現行Kindleは実にいいデザインだと思う。まぁ、たしかにあのフルキーボードはちょっと垢抜けないのだけど。
その旧Kindleからフルキーボードだけとっぱらって小さく軽くなった新しいKindleが悪いはずがない。TouchやFireではなくなった左右のページめくりボタンも健在だしね。あれは右手で持っても左手で持っても簡単にページめくりができる、非常にすばらしいデザインのたまものなので、やはりKindleには欠かせない要素だと思う。これで画面が7インチになってくれれば、理想の読書端末なんだがなぁ。
あー、あと、内蔵メモリが4GB→2GBに減っちゃったんだよね。廉価版だしなぁ……と、ここまで考えてはたと思いつく。そうか、これをアメリカで使っている人たちは、(もちろん)AmazonからAZW形式の電子書籍を買って読んでいるわけで、2GBもあればもう、読み切れないほどの本を入れておくことができるのだ。おそらくAmazonは、ユーザの「蔵書数」をオンラインで調査して、たいていの人には4GBも必要ないってことを知ったのだと思う。
もちろん$79という破壊的な価格を達成するために削れるものはなんでも削る、結果としてメモリも削ったということだとは思う。しかし「2GBで十分」という判断があったのは間違いないのだ。
ちなみにおれのKindle(内蔵メモリ4GB)は、まだ数十冊しか入れてないけど、残りが500MBを切ってどうしたものかと悩んでいるところ。そりゃそうだ、テキストなら数MBで済む本を、わざわざ画像にして100MB以上もの大きさに増やしてるんだからな!
アメリカの読者は2GBでもあり余るほどの「書庫」を持ち歩ける。一方日本の我々は4GBあってもぜんぜん足りない。この現実に気づいて、なんだかものすごく悲しくなってしまったよ。はぁ。
2011-09-28(水) [長年日記]
■ 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践(徳丸 浩) (電子版も出たよ!)
実はばけらさんから誕生日プレゼントにもらったんだけど(ありがとうございます)、大型本はKindlizeできない(字が小さくて読めない)から、ベッドサイドに置いて1日数ページずつ読んでいたのだった。
本書の評価はもう定まっているので、もはや内容についていちいち書く必要はないかもなぁ。Webアプリケーション開発に携わる者なら必ず読んでおくべき、セキュリティの教科書的存在だ。もう、発注時の条件に「開発者全員がwasbookを読んでおくこと」って書いておいてもいいくらい。網羅性、信頼性に加え、わかりやすさの面でも申し分ない。
でもさー、仮に10年前に本書があったとしたら、きっとおれ、Webアプリケーションには手を染めてなかったと思うね(笑)。というくらい、近年はセキュリティに関して知っておかなければいけないことが多すぎる。それは本書が500ページ近い大書であることからもわかる。作る前からこれ全部しっかり対策しろって言われたら、ちょっと気が遠くなる。
もっとも最近のセキュリティホールハンター(の穏健派)は、立ち上がったばかりでセキュリティリスク低めのWebサービスにはあまり目くじら立てない風潮もあるみたいなので、CSRFみたいに設計時から考えておかなければならない対策を除けば、そんなに身構えなくてもいいのかも知れない。まずは走り始めて、成功の兆しが見えてきてから気合い入れて取り組んでも遅くはない(その時点で手遅れになっていなければ)。
とはいえ勘所を知っているのと知らないのとでは、将来の手間が大きく違うわけで、やっぱりみんな読んでおけよ、という点には変わりがない。で、500ページにもなる分厚い紙の本を持ち歩くのはちょっと……と躊躇していた人には朗報である。今日、ブックパブから電子版が発売。DRMフリー*1のPDFで、特価1,800円。紙のほぼ半額! これは買うしかないでしょう*2。
ソフトバンククリエイティブの書籍も今後はこの形式で出てくることが増えそうなので、少なくともIT業界には電子書籍に対する正しい認識が広がりつつあるようで、喜ばしいかぎりですな。
Before...
◆ まちゅ [dotCloundの場合は、設定ファイル(dotcloud.yml)に環境変数を書くやり方みたいですね。 http:..]
◆ ただただし [まぁたしかに、ソースツリーに設定ファイル含めちゃったら、サーバ増やせないもんなぁ。しかし環境変数を使うとサーバはスケ..]
◆ hsbt [group :test を除外するには BUNDLE_WITHOUT を使います(これはHeroku特有の設定) h..]
◆ ただただし [あー、次善の策として環境変数を使うというのはいいね。そうしよう。 :testの除外については、ログに「Using -..]
◆ hsbt [Gemfile に group :test do ... end を作らないとダメです!]
◆ ただただし [ああ、それはもちろん。]