Rustを学びシステムレベル言語を理解すること

2年以上前 | 2 points

Rustについては「Rustのあれこれ」で少し触れましたが、今回はYehuda Katzが、Skylightの一連のブログGoGaRuCo2014の講演で、「ハイレベル言語のプログラマーがシステムレベルの言語を学ぶチャンス」という観点で紹介しているのを取り上げてみます。

主なポイントとしては、

  • プログラミング言語の特性は変わることがないとか、プログラミング言語のパフォーマンスと生産性は常にトレードオフであるという考え方は、JavaScriptにおいて、生産性が少し改善されつつ同時にパフォーマンスが大きく向上してきたという事実から、必ずしも正しくはない。
  • Rustは、セグメンテーション違反が起きないという意味での安全性と、どこにメモリを置くか直接コントロールできる仕様を両方兼ね備える。
  • Rustを学ぶということは、...

CDNの挙動を検証する取組み

2年以上前 | 2 points

Code for Americaなど、ネットの力で政府機関を改善していく取組みがここ数年増えていますが、中でもGOV.UKは、英国政府のwebサービスのあるべき仕様をサービスデザインマニュアルに詳細にまとめ、政府関連のウェブサイトを取りまとめています。その活動は、3分ほどのビデオにまとめらてますが、技術関連の情報発信にも力を入れてきています。

さて今回のGOV.UKのエンジニアブログは、受け入れテストを充実させてCDNの挙動を検証した取組み。実装の詳細から、バグのケースまで網羅されていて、かなり詳しく紹介されています。合わせて、Go言語の net/httptesting のパッケージをベースに作成したコードも、Githubで公開されています。

1) 背景

  • CDNの追加に際し、従前のものと同じ挙動を期待できるかテストケースを整備する必要がでてきた。
  • サービスデザインマニュアルにおいて、...

エンジニアマネージャー論と学びを抽出する努力を続けること

2年以上前 | 2 points

真剣にものごとに取組むと、やらなくてはいけないことはそのうち次から次へと気づく and/or 嫌でも湧き出てくるもの。なので、アドバイスを求められれば、やるべきことは最小限、できれば三つ以内に絞って、何をやめることができるかを探す手伝いをするようにしています。やるべきことを毎日洗い直して、絞り込むことが大切。

情報の収集は自動化されてきますが、自分にとって何がポイントなのか、どう活かすべきかという抽出作業は、自らを鍛え続けなくてはいけない人力作業ですね。

RethinkDBのFounderであるSalva Akhmechetが、エンジニア組織のマネージャーのあるべき姿を “44 engineering management lessons” にまとめています。

44項目と盛りだくさんですが、抽出するという文脈でいくと、自分にとっての今回の学びは、...

ベストなユーザエクスペリエンスを実現するJavaScriptの課題と可能性

2年以上前 | 2 points

Socket.ioのクリエーターとして知られるGuillermo RauchのBrazilJS 2014での講演です。理想のシングルページアプリをつくろうとすると、JavaScriptが損なってしまうケースはあるとしながらも、一方で、多いに可能性を感じさせるトレンドもあるとして、最優先であるユーザエクスペリエンスを向上させるポイントを紹介しています。

1) 課題

  • スクリプトやCSSにブロックされることで、レンダリングの際にブランクページを表示してしまう。
  • Webスクレイピングというコンセプトを壊してしまう。サーバレンダリングしない限りは、フロント側はスムーズにスクレイピングをできるが、その間は誰もページにクエリしてhttpを分析できない。ポーリングしてデータがあるかどうかの確認も必要になり、クライアント側でやると、システムからのデータの抽出がすごく複雑になる。
  • サーバ側でテストがしづらい。
  • ...

分散環境でどうなるかはテストしてみないとわからない

2年以上前 | 2 points

Kyle Kingsburyは、「クラウドにおいてもネットワークパーティションは起こりうるゆえに、DBなどのプロダクトはマニュアルやマーケティング資料で説明している仕様 & パフォーマンスを、分散環境では必ずしもだせない。」というテーマでの検証結果を公表しているブログのシリーズと、ストレス下での計測ツールJepsenで知られています。ここ1年半ほどで、

  • PostgreSQL / Redis / MongoDB / Riak / Zookeeper / NuoDB / Kafka / Cassandra / Redis / RabbitMQ / etcd / Consul / Elasticsearch

などが紹介されているので、ご興味あれば確認ください。これはKyleのプライベートの時間でのプロジェクトなのですが、話題になったので今ではComcastがスポンサーになってるようです...

バーチャルリアリティとモバイル端末

2年以上前 | 1 point

パーフェクトなバーチャルリアリティの実現にあと何が必要かについては、今年のはじめに「Michael Abrash (Valve - Oculus VR)の語るバーチャルリアリティ」で紹介しましたが、Oculus Connect 2104のキーノートスピーチでJohn Carmackがアップデートしてくれてます。

Oculus VR自体も新しい開発者向けキット DK2を発表してますが、Samsungと協業したGear VRは、GALAXY Note4を組み込むかたち、つまりワイヤレスなので、広義ではもうモバイル端末ですね。そうなってくると、個人的にはゲーム以外にもどうコンテンツが広がるのかなというのが楽しみですが、まだモバイル端末におけるバーチャルリアリティには課題が残っているようです。

John Carmackファンは多いですが、今回もPRトークなし &...

努力とセンスの関係と優秀なプログラマー

2年以上前 | 1 point

スポーツにしろ、勉強にしろ、仕事にしろ、何をやるにもその特定の分野でトップ1%人は尊敬するほどすごいのですが、本人が長く続けつつ努力をしてきたことが垣間見えるので、なぜ優秀なのかというのが理解できる範囲。ただし、そのさらにトップ10%、いわゆる世の中でその分野のトップ0.1%の人というのは、すごすぎて、どうしてそうなれるのかが分からないと実感することがあります。議論している時に、数歩先の真理を理路整然と突然読み取って指摘されるような、驚くようなセンスを見せつけられる経験を数度したことがあります。

けどそれをセンスとか才能という言葉で片付けずに、経験値の差によるパターン認識力の違いと考えれば、そしておそらくほとんどのケースはそうだと思うので、継続的に努力をすることの尊さを再認識して、また頑張ろうという気になります。センスがものをいう分野はあれど、常に努力で向上する余地はあるかと。

「...

「失敗を活かす」を実現する仕組みづくり

2年以上前 | 2 points

ミスを許さない組織って嫌ですよね。月曜日の朝に会社に行くのがとにかく苦痛だった時期があります。しつけ的な規律をもたらすという一定の効果はあったかもしれませんが、ミスをしないように、しかられないようにするために仕事の進め方が最適化されていって、顧客がどう思うかよりは、上司の顔を伺うところに皆が全力を注ぎはじめます。

そんな会社は反面教師に。また最近は、blameless postmortem(個人批判をしない建設的な障害の振返りミーティング)というのも流行言葉。「そうだそうだ、もっと前向きであるべきだ。」と思いつつ、しかし難しいのは、ユーザに悪影響を与えるものを減らそうとする気持ち。その気持ちを持つことが正論、かつ当然最も重要であるがゆえに、障害の振返りの議論はどうしても「再発防止」に終始してしまいがち。

blamless...

Facebook: グローバル市場を見据えたAndroidのパフォーマンス改善

2年以上前 | 1 point

FacebookチームのAndroidアプリは、背景にグローバル市場でのAndroid利用者数の急増、それに伴う新興国ユーザの増加(当然そこのユーザをもっとFacebookに囲い込みたいという思惑あり。)という事情を反映して、端末バラエティ / ネットワーク接続環境のフラグメンテーションにしっかり対応して、パフォーマンス改善を重視していこうという方向性にあるようです。

1) 新興市場の理解 by Chris Marra

  • FacebookにアクセスするAndroidデバイスは、10,000モデル。
  • 世界中の新興国を訪問して市場調査した結果、ローエンド端末 / 中古端末 / プリペイド課金 / 利用時間単位での課金 / モバイルインフラの脆弱さなどの事情を認識。
  • Android Year Class: どの時期にどの端末が人気だったかという基準で年度別の主要端末をピックアップし、(...

Facebook: BuckでAndroidビルドをスピードアップ

2年以上前 | 1 point

FacebookのDavid Reissが、オープンソースで提供しているAndroid & JavaビルドツールBuckを紹介しています。

1) 他の選択肢との比較

  • Googleが提供するビルドシステムANTは、遅いのとモジュールのサポートが弱いのがネック。
  • ベター版となったGRADLEは、ANTよりは早いが、モジュールのサポートという意味ではまだ不十分。また、Buckの開発に着手した当時はまだAndroid対応してなかった。
  • Mavenは、とにかく遅い。

2) Buckの性能アップ

  • Facebook Androidアプリは 65万+行あるが、Buckでの処理において、ここ1年でスピード10倍改善。
  • 細かいモジュールにも対応できるので、コンパイルの並列処理に活かせる。
  • Javaコードのモジュールのインターフェースを変更したか、実装を変更したか検知して、実装のみなら再コンパイルしない。
  • ...

Facebook: iOSアプリのアーキテクチャ

2年以上前 | 1 point

FacebookのiOSチーム、Adam ErnstとAri Grantによる@Sacle 2014での講演。データモデルとビューレイヤの改善の取組みについて紹介してくれてます。

1) データモデル

背景

  • 2年前からHTML5からネイティブに切り替えて一旦大きく改善したが、その後機能を追加するたびにアプリのパフォーマンスが悪化。
  • ネイティブに移行後、オブジェクトのキャッシュレイヤとしてiOSのCore Dataを使ったのが失敗であった。
  • Core Dataの役割は「整合性を含むオブジェクトグラフ管理」
  • Facebook iOSアプリの場合、サーバ側を正のデータとするが、デバイス側で、すぐにコンテンツを表示できるように、またコンテンツの整合性(例えば、Timelineに表示される特定のコンテンツのLike数は、同じコンテンツがNews Feedに表示された際のLike数と一致させる。)...

シングルページアプリの初速を上げる取組み

2年以上前 | 2 points

OSCON 2014におけるInstagramのWebチーム責任者であるPete Huntの講演。PeteはInstagramに異動する前は、FacebookのPhoto/Video/Product Infraチームに在籍。

今回は、InstagramのwebサイトInstagram.comにおいて、シングルページアプリの課題である最初の読込みスピードを上げるために、どのような工夫をしたかについて紹介してくれてます。

  • Instagram.comのJavaScriptファイルは、縮小化後で9.5MB & gzip圧縮後で2.5MB。そのサイズだと、一つのファイルにまとめてダウンロードするには向いてないし、リソースに限りのあるモバイルサイトでパースするのもパフォーマンス的に問題。
  • そこで、17個のエントリーポイントを用意し、各ページに必要なJavaScriptだけをダウンロード。...