Sandi Metzの3日間セミナーのポイントを30分で紹介

3年弱前

Practical Object Oriented Design in Ruby”で著名なSandi Metzが主催する3日間のセミナーに出席したJack Hoyのブログ。

Sandi Metzの教えである、

  • 誤った抽象化よりもコードの重複のほうがよい

という指針に従い、いきなり抽出に走るのではなく、

  • 類似のコード列をまったく同じ表現になるように修正する。
  • 完全に同じ表現になった時点で、重複したコード列を削除する。

というかたちのリファクタリングを、1アクションづつ本当に丁寧に30分かけて説明しているビデオをアップしてくれてます。

「長い。コード修正の過程だけ見たい。」という方は、YouTubeの2倍速設定でご覧ください。

Sandi自身の最近の講演は、こちらになります。

#ruby


ワザノバTop200アクセスランキング


デザインづくりの早送り

3年弱前

Anand Sharmaは、旅行から日常のスポーツ/健康/仕事などの活動までを全てトラックする美しいアプリ、APRILZEROで話題になってます。数ヶ月に渡るそのデザイン & コーディングのイタレーションは、2本のブログにまとめられており、読了30分はかかりますが、かなりインプレッシブな内容です。

APRILZEROは、彼の私生活の日記アプリ的な位置づけなのですが、それをユーザが利用できるかたちにするGyroscopeというプロジェクトに取組んでいます。Gyroscopeを製作中の画面の様子が、ショートカットコマンド表示付きで、早送り再生しながら13分ほどのビデオにまとめられてます。

参考にしたい人の仕事ぶりは職場なら見ることができるかもしれませんが、ずっと凝視してるのも変ですので、このようなかたち紹介してくれるとありがたいですね。

自分は割と、映像と音で学ぶのが好きです。...

Yelp: git hookのためのマルチ言語対応パッケージマネジャ

3年弱前 | 1 point

Yelpでは、コードレビュー前にgit hookを利用してコードのチェックをしていますが、

  • プロジェクトごとにhookのbashスクリプトをコピペ/修正するのが面倒。
  • lintツールなどを利用するには、プロジェクトで使っている開発言語以外の言語用のパッケージマネジャーでインストールしなくてはいけないケースがある。
    • nodeのプロジェクトで scss-lint(Rubyで書かれている。)を利用する際、プロジェクトにGemfileを追加せずに、もしくはインストール方法を気にせずに利用できるようにしたい。
    • nodeをインストールしてなくてJavaScriptファイルを修正している際に、root権限なしでnodeをインストールして、JSHintを実行できるようにしたい。

という課題を解決してくれる、git hookのためのマルチ言語対応パッケージマネジャ「pre-commit」をオープンソースで公開...

LivingSocial: SOAのテストとmockの工夫

3年弱前 | 2 points

LivingSocialのRailsアプリSOAシリーズの5回目として、サービス指向アーキテクチャにおけるテストのあり方についての話。

まずは、アプリ間のサービスコールを全てmock/stubしたり、逆に依存関係を常にそのまま利用するのではなく、1回だけコールする手法を推薦しています。

テスト対象のコードは、依存するサービスに一度だけコール & レスポンスを記録し、その後の実行ではリプレイを利用する。

  • メリット
    • ネットワークコールが一度で済むので時間がかからない。
    • 実際のサービス環境、APIを反映したテスト結果を取得できる。
    • レスポンスデータが取得できれば、後は、依存するサービスをローカルで実行(時にはインストールも)する必要がなくなる。
  • リスク
    • 依存しているサービスが多い、もしくは大量のデータをリクエストするかたちだと、記録するレスポンスのデータが大きくなる。
    • ...

CloudFlare: ネットワーク事業者間の料金体系をうまく利用する

3年弱前

ネットワーク事業者間の料金体系ルールはほとんど知りませんでしたが、その上でうまく事業を展開しているCloudFlareが、仕組みを解説してくれてます。実際の利用トータルではなく、一定の算定ルールが業界慣習で決まっており、それを利用してコストをセーブしている構造がユニークですね。

世界中のネットワーク事業者が、直接相互に接続する関係を “peered”、仲介するネットワークが存在する場合、そのネットワークを “transit provider” と呼ぶ。

Tier 1 プロバイダーと呼ばれる12社が相互に接続し、また世界全てのISPがTier 1とつながっている。

CloudFlareは、Tier 1 プロバイダーもしくは地域のtransit providerから帯域を購入している。その料金体系は、支払期間内での最大のメガビット/秒で決まる

具体的には、利用月の95th...

Flickr: キャッシュウォーミングで配信スピードをアップする

3年弱前 | 2 points

Flickrには膨大な写真データがあり、かつアクセス頻度は、超人気の写真から、ほとんど見られないプライベートな写真まで様々あり。よって、ユーザに快適な閲覧体験を提供するには、世界各地に適切にキャッシュを配置することが大切。

今回はそれを一歩進めて、キャッシュウォーミングで配信スピードを更にアップさせています。

まず通常(& 従前)のケースでは、

  • 1. ユーザのブラウザが特定の写真とサイズを米国のデータセンタにリクエストする。
  • 2. データセンタから、ユーザのブラウザにフィットする、指定されたサイズの写真の所在をURL情報で返す。
  • 3. キャッシュされていれば、一番近くの地域のデータセンタからキャッシュを読込む。
  • 4. キャッシュされてなければ、米国のデータセンタから読込む。

となりますが、キャッシュウォーミングでは、キャッシュがない場合でも、4. よりも短い時間での読込みを実現します。...

スマホUIの際限ないレベルアップ

3年弱前

Brian LovinのUI分析シリーズは継続して紹介してきましたが、前回のFoursquareのポストでは、「確かに各社ともレベルが高いけど、さすがに似たようなものが増えて飽きてきたな。」と感じました。しかし、今回のPinterestのiOS版については、「ここまで工夫するのか。」と関心させられるものもあり、UIの競争はまだまだレベルアップしていきそうな気がしてきました。

原文で全体をチェックしていただくのがよいかと思いますが、個人的に気に入ったのは、

4) Pull to refresh

ビデオ

この効果を自社オリジナルのもので作り込むのは、かなり定番化してきましたが、ここでもPinterestはピンの表示をうまく利用してます。

9) Navigating pins

ビデオ

ピンとしてブックマークされたカード状のコンテンツを順次遷移していく画面で、新しく表示されるピンが、...

Gilt: iOSのネットワーク接続表示の管理

3年弱前

GiltがiPhone/iPad開発向けに用意したmockingbird-toolboxをオープンソースとして公開しています。

Focused - it tries to do one main thing.(一つのことだけを提供するシンプルなソリューション)

というコンセプトでの便利なモジュール群が、今後順次追加されるようです。

今回紹介されているのは、ステータスバーに表示されるネットワーク接続のスピナーの管理。UIApplicationnetworkActivityIndicatorVisibleプロパティは、YES / NOで設定できるようになってますが、例えば、

  1. ネットワークオペレーションAが開始。
  2. ネットワークオペレーションBが開始。
  3. ネットワークオペレーションBが完了。
  4. ネットワークオペレーションCが開始。
  5. ネットワークオペレーションAが完了。
  6. ネットワークオペレーションCが完了。

の場合...

継続的デプロイが広がる範囲

3年弱前

ここ1週間で、各社が競うようにA/Bテストインフラについて、エンジニアブログでアピールしています。

「A/Bテストをどのようにやってるのか。」的な話は以前からありましたが、最近の特徴は、継続的に実施/モニタリングするためのインフラを提供するというレベルにまで上がってきています。

LinkedInにおいては、200件/日のテストが実施されていて、

We realized early on that ad hoc testing would only take us so far. We needed to change our approach to allow us to quickly quantify the impact of any A/B test in a scientific and...

エンジニアの給与レベルがプロスポーツ化する日

3年弱前 | 3 comments | 2 points

先ほど、ワザノバのアクセスランキングをつくっていて、「給与を上げるベストな仕組みの解がない」が意外に上位ランクに入ってました。我ながら振返ってみて、タイトルも内容もネガティブ過ぎたかなとちょっと反省してます。その時は、休日に家族をスキーに連れて行ったのですが、自分は滑らずにスタバで原稿を書いていたので、そのストレスだったかもしれません(笑)

お伝えしたかったのは、

  • 業界全体の「平均」給与レベルを上げることの難しさ。
  • テクノロジーの変遷が早いので、職業市場における自分の相対価値が下がらぬよう、努力を続けなくてはいけない。

でしたが、話がそこだけに終始してたので、今日は少しポジティブな話を。

ウェブ/アプリエンジニアのこれから先の未来は、才能があり、かつ努力した人は金銭的にもっと報われるようになると考えてます。

最近のFacebookの買収案件で非買収企業の社員が受取る価値を単純に平均で計算すると、...

そろそろ1周年になります

3年弱前 | 3 points

昨年の8月の最終週に、最初の投稿をアップしたので、そろそろ1周年になります。

これまでアクセスの多かった記事をピックアップしてみました。もう既に「懐かしい。」と思う記事もあるので、この分野の動きの早さを実感できます。

ワザノバの記事を社内外にご紹介してくださった皆様、もろもろサポートしてくださった皆様にお礼申し上げます。引き続き、web/アプリサービスづくりに役立つ情報という視点で発信していきますので、2年目もよろしくお願いいたします。


1. GitHubの組織が成長する過程で変えたことと変えなかったこと

2. NTPベースのDDoS攻撃を理解する

3. 給与を上げるベストな仕組みの解がない

4. 何でもデバッグできるようになるスキル

5. 規模の大きい本番システムをGo言語で書き直した感想

6. RubyとPythonの違いからガベージコレクタを理解する

7. WebRTC:...

Groupon: アナリティクスシステム改善の取組み

3年弱前 | 2 comments | 1 point

GrouponのEngineering ManagerであるChris Powersが、同社のGeekfest Chicago Eventで、アナリティクスシステム改善の取り組みを紹介しています。

年半前に改善の取り組みを開始

  • 事業の拡大に伴ってアナリティクスの需要は、CEOへの報告から、マーケ/開発の現場の利用、データサイエンティストの分析まで様々。しかし、各チームがバラバラに複数のアナリティクスシステムを運用していて、オーナーシップを取るチームはなし。
  • トラッキング用にページあたり20-30ピクセルを仕込んでいて、つまりユーザ当たり 20-30 GETリクエスト / ページとなり、サーバ負荷が過大。
  • 「全てをトラックする。」を目標に内製のアナリティクスシステムの整備にとりかかる。

システム構成

web/アプリとバックエンドの関係図(ビデオ 10:20〜

アナリティクスデータの収集ルート図(...