Archive for the ‘Uncategorized’ Category
ターミナルからHacker Newsが見れるGem

日本でも引き続き認知の高まっているHacker Newsをコマンドラインから閲覧できるGemが話題になっていました。導入はとても簡単です。
gem install hacker_term hacker_term
最近のGemはウェブサービスのクライアントやHTMLやCSSのコーディングに使うツールなどもはやRubyにとどまらない汎用ツール化してきていますねぇ。
via:https://github.com/ciaranarcher/hacker_term
Netflixでクリスマスイブに発生した障害の詳細なレポート

2012年12月24日、Amazon Web Serviceのロードバランサーサービス、Elastic Load Balancer (ELB) で発生した障害はアメリカの多くのネットサービスに影響しました。その中でも特に大きな影響を受けたのがAmazon Web Serviceの大型ユーザである動画配信サイト、Netflixです。Netflixで発生した障害についてはメディアの記事にもなっていますが、Netflixの技術ブログに詳細なレポートが投稿され話題になっていました。
太平洋時間午後12時30分から発生した障害はテレビに接続するデバイスへの再生の北米、ラテンアメリカ向けのサービスに影響を及ぼしました。それ以外の地域、イギリスや北欧諸国では影響は無かったとの事です。このような形で影響範囲が分かれた背景にあるアーキテクチャを記事では解説しています。
Netflixは何百ものELBを使っています。それぞれのELBが別個のサービスや異なるバージョンのサービスをサポートしブラウザやデバイスからの呼び出しに応じてネットワークアドレスを提供します。Netflixのストリーミングはここ数年で千以上の異なる種類のデバイスに実装され、似通ったデバイスはしばしば同一のELBに依存します。デバイスはELBを通じてNetflixの大部分のアプリケーションを実行しているサーバーにリクエストを行います。Netflixが使っている何百ものELBの障害はバックエンドのサーバーへリクエストを通過させる事ができなくなる厄介な問題です。その他のNetflixのアプリケーションには問題はありませんでした。我々のアプリケーションは何らかの形でリクエストが通った場合は通常どおり応答していました。
この解説から見えてくるのは大量のデバイスごとのゲートウェイと実際の配信部分やWebサイトの機能などを分離して実装しているという構造です。幸いクリスマスイブは家族とストリーミングを見る以外の方法で過ごす人が多いのでトラフィックは必ずしも多い日ではなかったようです。またゲーム機などのコンソールは影響を受けましたが、PC向けなど影響が無かったサービスがあったという現象は上記の構造からと推測できます。
エントリは今後も障害の影響を受けない構造を目指して改善を続けていく事と求人の案内をした上で締めくくられていました。
via:http://techblog.netflix.com/2012/12/a-closer-look-at-christmas-eve-outage.html
PHP向けPaaS「PHP Fog」が年内終了の見込み
花盛りなPaaS (Platform as a Service)ですが、やはり統廃合が起こるのは必然のようです。PHP向けとしては知名度の高いPHP Fogが利用者向けのニュースレターで12月にサービスを終了し、AppFogへの移行(注: AppFogはPHP Fogの次世代版であり、PHPもサポートする)を促すという方針を明らかにしました。まだブログなどにはこの内容はアップされていませんが、ニュースレターの内容がgistにコピペされています。
HackerNewsでもこの話題は投稿されており、下記のような声が見られます。
- ここ二週間はサポートが顔を地面に落としたみたいで、電話は留守電になってるし、サポートチャットもサイトから消えていた。6ヶ月前に使い始めたPHP Fogは気に入ってるけど、AppFogに移行するかはわからないな。
- AppFogの方が使いやすいようだし、いいんじゃないの?
なお、上記の声に対してどうも中の人が全レスを付けてまわっているようで、これもなかなかおもしろい光景です。
おそらくPaaSの分野はまだ勝負が決するほど状況は進んでいませんが、各事業者が初期に提供していたスタックを汎用的なスタックに改良した際に古いスタックをどのように捨てていくのかという問題にとりかかるしかないというのが実際のところではないでしょうか。
GitHub主催のドッジボール大会がなんだか盛り上がっている
GitHub大好きな皆様には周知の事実かと思いますが、今週末にサンフランシスコにてGitHub主催のドッジボール大会が開催されます。参加費用によってチャリティーが行われるというこのイベントは世界ドッジボール連盟(そんなあったのか)の公式ルールで争われます。見事優勝したチームには前年優勝したHerokuから巨大Octocatのトロフィーを奪取する事ができるという段取りです。
どうやら24チームの参加枠が埋まっていないようなので、この記事を読んだ日系企業の貴方も参戦できるかもしれませんよ!またチーム一覧に存在している「TAKOYAKI」なるチームの存在にも目を奪われます。
前回の開催の様子の動画はこちらです。(無駄にかっこいいので必見です。)
http://player.vimeo.com/video/52490456
「気難しいネコ」のTardちゃんがネットで人気
筆者のタイムラインにこの所海外からよく流れ込んでくるのがこのネコの写真です。これはGrumpy Cat(気難しいネコ)という名前でミームになっているTardちゃんで、飼い主はアリゾナのTabatha Bundesenさんです。この写真が有名になったのはReddit上に投稿された2012年9月23日以降です。そこからさまざまなキャプションや編集された写真が大拡散しているようです。
洋の東西を問わずインターネットではネコが人気コンテンツであるという点はいつもどおりですが、話題が拡散したのがReddit上であるという点は昨今のバイラルが発生するメカニズムの違いを表しているようで興味深いですね。外人に受けるスライドなどを仕込みたい人は引用してみるとよいかもしれません。
ちなみに動画もかわいい。
C言語より高速なJavaScriptによるバイナリ操作が話題
JavaScriptなどのスクリプト言語は動作が遅く、最適なパフォーマンスを得るにはC/C++で実装しなければならないという常識に挑んだ先進的な講演が話題になっています。この話題の発端は2012年10月7日から10月8日までベルリンで開催されたJSConf.euでFelix Geisendörfer氏が行った講演です。
彼の講演の題材はnode.jsからMySQLに接続する為のバインディングのパフォーマンスに着目しています。2010年当時、node.jsにはMySQLのバインディングが存在しておらず、増井さん作のnode-mysqlモジュールが開発中の状態でした。このモジュールはJavaScriptでバイナリを解析しておりJavaScriptのみで開発されていました。この状況を受けてFelix氏が新たにnode-mysqlモジュールを新規に開発を始めました。このモジュールもJavaScriptでMySQLのプロトコルを処理しています。
続いて発表されたのがOleg Efimov氏のmysql-libmysqlclientバインディングです。こちらの場合はその名の通りC言語で実装されたlibmysqlを利用しておりパフォーマンスが大きく向上しています。
この圧倒的な性能差はちょっとした最適化で埋まるものではなさそうです。これにはFelix氏も心が折れかけ、「マテ、V8 ってコードをアセンブラにするんだろ?それってめちゃめちゃ速いんじゃないか?それになんだかんだいっても Node ならどんな問題でも解決できるんじゃないの?なに騙されてたの?(But wait … wasn’t V8 supposed to turn my code into assembly? And was it not supposed to be insanely fast? And wasn’t node going to solve all of my problems anyway? Had I been lied to?)」弱気になりつつも、気合を入れ直します。そして才気溢れるFelix氏はNode.jsの底力を信じてパーサーの改良を努力し、なんとlibmysqlを越えるパフォーマンスを実現します。
素晴らしい改善です。しかしなんと更に彗星の如く現れたバインディングがさらに圧倒的なパフォーマンスを見せつけます。それがBrian White氏が公開したnode-mariasqlです。
この性能差にはFelix氏の心も折れかけ、「もうCのバインディングに勝つなんて無理だよ…( maybe it’s time to finally give up and accept that I cannot compete with a well engineered C binding.)」と弱音を吐きかけますが、彼の更なる努力がJavaScript実装でmariasqlを越えるパフォーマンスを引き出します。
彼のパーサーの再実装から得られた知見は元記事の後半部分に記載されています。V8の特性に配慮したJavaScriptを書くことでの極限のパフォーマンスを実践したい方にとっては参考になるのではないでしょうか。というか、彼スゴすぎますね。
via:https://github.com/felixge/faster-than-c
韓国はAndroid天国らしい
Nexus7の発売が話題になっており、引き続き活発なAndroidについて気になる統計がRoyal Pingdomに掲載されていました。記事によるとモバイルのウェブ閲覧の28.21%がAndroidによって行われ、これはiOSの24.48%を上回っています。
国ごとの数字でみるとなんと韓国ではモバイルウェブの87.2%がAndroidからの閲覧という事で圧倒的です。次いでミャンマーでは84.5%、台湾では70.6%ということで高いシェアを持っています。韓国がサムソンのお膝元であるから驚きには値しないとしつつも、驚異的であると記事では締めくくっています。
via:http://royal.pingdom.com/2012/09/06/south-korea-android-heaven/
37signalsはベータサーバーを本番環境のデータベースに接続している
David Heinemeier Hansson氏(Railsの開発者。以下DHH)が37signalsのブログに公開したRunning beta in productionというエントリによると、同社ではBasecampの開発に使われる6つのベータサーバーがすべて単一の本番環境のデータベースを参照して動いているそうです。
DHH氏曰く、「自分がいいアイデアだと思ったものが本当にそうなのかを知るには、実際のデータを対象に自分たちが日々使ってみることが必要」とのこと。
Basecampでは新機能や改良の開発、技術的なアップグレードなどを継続的に行なっており、そのために同一の本番環境のデータベースを参照する6個の異なるベータサーバーが運用されています。通常、開発中の機能は開発用のデータベースと共に運用するのがセオリーだと思いますが、DHH氏は「実際の重要なデータとともに不満を感じながら使わないかぎりは、そういった機能をきちんと評価することは不可能だと気づいた」とのことで、このような構成になっているそうです。
最初は、実際にサービスの運用に使っているものとは物理的に異なるサーバーに本番のデータを複製しているのではないか、とも思ったのですが、コメント欄にて「All beta envs and production share the same prod database.」という37signalsスタッフのコメントがあるので、やはり実際にサービスで利用しているデータベースにベータサーバーを接続しているということで間違いないようです。
また、6つのベータサーバーをどのように使い分けるのかの手順はシンプルで、どのサーバーでどのブランチのコードを走らせているかは、開発者が適宜、開発用のチャットルームのタイトルに反映させているそうです。ブログエントリに掲載されたスクリーンショットでは、以下のようなルームタイトルになっていました。
- staging: riakcs
- beta: project_templates
- b1: redis-resque-upgrade
- b2: tags-mini
- b3: bcx-ios-compose [reserved for bcx-ios]
- b4: email-in-phone
- b5: rails4
エントリではstagingの位置づけには触れられていませんが、それ以外のbetaからb5までのサーバーはすべて本番のデータベースに接続していると考えてよさそうです。
開発者は、ベータサーバーが必要なときはルームタイトルの「b1」の部分を「b1: redis-resque-upgrade」のようにサーバー名とブランチ名に書き換え、ベータサーバーでの作業が終わったら「b1: available」のように変えることで、シンプルに運用しているようです。
このようなスタイルの運用で気になるのが、データベースマイグレーション(スキーマの変更など)をどのように適用するか、というところだと思います。
それについてはコメント欄でいくつかやりとりがされていて、基本的には、
- 本番データベースに接続されたステージング環境でマイグレーションのテストを行う
- その後、それを本番環境にもロールアウトする
という運用のようですが、この際、ステージング環境が接続する本番データベースというのが、本番データベースの複製なのか実際に運用しているデータベースそのものなのかについては残念ながら言及がありませんでした。
個人的にはかなりアグレッシブな運用だと感じたのですが、データベースマイグレーションを注意深く行うようにすればアリなのかもしれませんね。
新時代に突入したPHPのフレームワーク戦争
2012年9月、PHPのフレームワーク戦争は新たな局面に突入した事が明確になってきました。PHPフレームワーク、Symfonyプロジェクトの創始者であるFabien Potencier氏のブログ記事がPHPフレームワーク界で話題です。
オブジェクト指向を本格的にサポートしたPHP5とRailsが与えたインスピレーションから始まった2005年頃からはsymfonyやZend Framework、CakePHP、CodeIgnitierなどのフレームワークを生み出しました。その後、名前空間をサポートしたPHP5.3がリリースされるとコードの抜本的な構造などを見なおした次世代フレームワークが次々に登場します。冒頭のFabien氏の記事では2012年9月6日にZendFramework 2.0とSymfony2.1が奇しくも同日にリリースされました。Fabien氏はZendFrameworkのリリースを祝福した上で、「何故、他のXというフレームワークよりSymfonyを選ぶのか?」という質問の回答としてブログの記事を投稿しています。
記事によると下記のような点をSymfonyを選ぶ理由として挙げています。
- Symfonyはフレームワークではなく、プロジェクトであり用途に応じて様々なコンポーネントをそのままつかったり、Sliexとして使ったり、フルスタックなフレームワークとして使う事もできる。
- 大きな採用事例があること。(BBC NBC TEDなど)
- 大きなコミュニティがあり、昨年だけでも550人以上が貢献している。
- 車輪の再発明をしない事を推奨しておりさまざまなコンポーネントが開発、公開されている
この記事には非常に多くのコメントが寄せられ、このようなドキュメントを各フレームワークが記述したらいいのではなどという声も上がり始めました。そしてCakePHPの開発チームの一人であるJose Diaz-Gonzalez氏が正に返信の記事である「Why to Actually Choose CakePHP?(なぜ実際はCakePHPを選ぶのか?)」という記事を公開します。こちらの記事ではジョークを交えて下記のような点をCakePHPを選ぶ理由として挙げています。
- 熱心な開発者
- 継続的なリリース
- モデルレイヤー
配列がPHPでデータを扱う最良の方法であるから。Cake3からはモデルをオブジェクトとして扱う事もできるようになるが。- Symfonyじゃないこと
- パトリオットエールハウス
このバーで一緒にエールを一杯飲んだ相手しか信用しないので
また前後してZendFrameworkの開発チームのEvan氏は「Why ZendFramework」という記事を公開します。こちらの記事では直接Fabien氏の記事を引用しつつZendFrameworkを選ぶ理由として下記のような点を挙げています。
- ZendFrameworkはずっとコンポーネント志向だった
- ZendFrameworkも大企業につかれている。(BBC, Cisco, Discovery, Panasonic, Offers.com等 同様にオープンソースプロジェクトでも使われている。: Magento, TomatoCMS, pimcore, Centurion, Digitalus CMS, Webfolio, PHProjekt, Concrete5)
- コミュニティの活発さ、車輪の再発明をしない事などは同じようにZendFrameworkにも当てはまる
全てを読んでみると、説得力のあるSymfony,場外戦術を仕掛けるCakePHP、俺も俺もといった感じのZendFrameworkという感じです。いずれの主張もRails直後のような機能ではなく、汎用性やコミュニティの活発さなどに言及している点が印象的です。技術的にはPSR-0やPSR-1といったフレームワーク間で設計や規約が共有化され、コンポーネント化や相互の再利用がしやすくなっている点もあり、コミュニティこそがフレームワークの特性になってきているのかもしれません。
変な日本語 in the web: 東海道
やってきました変な日本語 in the web。第三回は Ruby on rails 界あるいは JavaScript MVC 界でのテックセレブ Yefuda Katzの新プロダクト『東海道』です。彼が Mac OS X での Ruby on Rails のインストールを簡単にしたい、という Kickstarter を立ち上げていたのはソーシャルメディアを通じて聞いていたものの、私自身は Ruby な人ではないので正直スルーしておりました。$25,000 のゴール設定で3月に始まったこのキャンペーンは、終了の5月の段階で 739人から $51,220 とゴールの2倍以上集めて成功しています。
キャンペーン開始の2週間後にプロジェクト名とその由来が発表、それによると東海道新幹線から来ているそうです。8月に発表されたアップデートによれば内容は:
- 静的コンパイルのバイナリビルドの Ruby
- ログ/アラート UI
- Rail 3 用のリモートノティフィケーション
- Puma Express との統合
- コード品質ツールとの統合
- バイナリビルド使用時の Bundler との問題解決と Heroku へのデプロイ
- 著名な Gem のバイナリビルド統合
と手堅い感じです。Github にあるプロジェクトページでは成果があまり見られないようですが、Google Plus 上にはスクリーンショットがあがっています。UI に関するアンケートもあがっているので、意見のある人は是非そちらに。
UI を見る限り Rails をエンジンにした IDE というのが目指すところなんでしょうか。Yefuda Katz のこれまでの実績を見れば期待していいでしょう。
















