2014年11月5日水曜日

荒ぶるRedisとNewsPicks


NewsPicks の開発を担当している杉浦です。

NewsPicksはおかげさまでユーザ数が20万を突破しました。
サービスが順調に成長するということは大変にうれしいことなのですが、エンジニアとしては負荷との戦いになったりします。我々も例に漏れず日々、負荷との戦いを強いられています。


NewsPicksの機能面の特長として次の2つがあります。
・フォローしているユーザのPickが自分のタイムラインに集約される
・各カテゴリで話題になった記事を閲覧できる

これらの機能を高速に処理・実現するためにRedisを採用しているのですが、
ユーザ数の増加による負荷増加によって問題が発生するようになりました。

本記事では、
・ユーザ数が増える中でRedisにどのような問題が発生したか
・ソースコードを読みながら問題の原因を考える
・そして、どのような対応を行っているか
を共有したいと思います。

どのような問題が発生したか

主に2つの問題が発生しました。

ピーク時のレスポンスタイムが遅くなる

NewsPicksは朝の8時にその日の注目ニュースをPush通知で送信します。その直後が最大のピークタイムになり、平常時の10倍程度のリクエストを処理する必要があります。ピークタイムに画面表示のレスポンスタイムが悪化するという問題が発生しました。

夜間バッチ実行時にslaveとのレプリケーションが切れる

夜間にRedisに保持している古いタイムラインデータを削除するというバッチが実行されるのですが、バッチによる大量のデータ更新が発生しレプリケーションのタイムアウト値を越えてしまい、レプリケーションが切れるという障害が発生しました。


ソースコードを読みながら問題の原因を考える

なぜこのような問題が発生するようになったのでしょうか。
原因を知るにはRedisのアーキテクチャを理解する必要があります。そして、ソフトウェアのアーキテクチャを理解する近道はいつの時代もソースコードを読むことです。ということで、redis-2.8.17をダウンロード して読んでみました。


ファイル数が少なくシンプルなソフトウェアということがわかります。
理解をしやすくするために、おおまかな機能ごとに整理します。


メインプログラムの redis.c から ae.c を読み進めると、RedisはI/O戦略としてイベントループモデルを採用していることがわかります。
イベントの発火時に各コマンドハンドラーが呼ばれて処理が進められています。

イベントループの詳細については TheC10kProblem を参照してください。
2006年の古い記事ですがよくまとまっていて、今読んでも本質的な部分は変わっていません。

イベントループモデルのメリットは以下が挙げられます。
  • 処理ごとにスレッド/プロセスを用意しないので使用メモリ量を抑えられる
  • スレッド/プロセス切り替えのコンテキストスイッチのオーバヘッドが少ない
  • ノンブロッキングI/Oを合わせて採用することで、I/O待ち時間に他の処理が行われる
逆に、デメリットは以下のようなものがあります。
  • ループの中に遅い処理が入ると、後続の処理が遅れる
  • (Redisの場合は) 1スレッドでループ処理を行うので、マルチコアのサーバの場合に全てのCPUリソースを使い切らない

Redisはデータを全てメモリ中に持つため、高速に処理を行いますが、
それでもRedisの利用度が上がってくると、Redisの能力を越える多量の読み書きが実行される時がやってきます。
そして、Redisはイベントループモデルの特性から、閾値を越えると一気に処理遅延が発生します。

NewsPicksが遭遇した問題はまさにこの事象で、あるタイミングを境に突然問題が発生するようになりました。
システムのアーキテクチャを考える際に負荷に合わせてタイミング良くスケールアウトしていくことができる仕組みを作ることが大切です。
なお、Nginx、Node.jsも同様にイベントループを採用しているので、同じ考え方を適用できると思います。

NewsPicksではどのような対応を行っているか

現在、データのシャーディングと、垂直・水平に処理リクエストを分散をするように対応を進めています。
タイムラインデータについては、一定のユーザ数毎にデータ保存するサーバを分離しています。一般的にユーザパーティショニングによる垂直分散と呼ばれる手法です。
ランキングデータについては読み取りリクエストをslaveに分散させるといった水平分散の対応を行っています。


NewsPicksでは一緒に負荷と戦ってくれるエンジニアを募集しています!
サービスの成長を肌で感じられるやりがいのある仕事です(笑
興味をお持ちいただいた方はWantedlyなどからご連絡ください!

2014年10月31日金曜日

ドメイン名について

インフラを管理している羽山です。
今回は基本的なおさらいということでWEBサービスで1番重要なドメイン名について触れようと思います。

簡単にユーザベースのホームページに繋がるまでのフローを書くと以下のようになります。

1. ブラウザからアクセスhttp://www.uzabase.com
2. www.uzabase.comをIPアドレスに変換(名前解決)する
3. ブラウザがHTTPでサーバにアクセス

このとき、「www.uzabase.com」をドメイン名と呼びます。
そして、2番のフローはDNS(Domain Name System)というシステムを利用して
ドメイン名からIPアドレスに変換しています。

なぜこのようなことをするかというと、IPアドレスというインターネットの世界はIPアドレスを利用して通信しているからです。
しかし、IPアドレスは数字の羅列であり人が覚えるには非常に大変なので、人がインターネットを使うときは見やすいようにドメイン名というものを利用しています。

ドメイン名の詳しい仕組みはJPNICの公開している資料が見やすいので見てみてください。

さて、DNSには様々な情報が記載されており、主に以下の種類があります。
  • Aレコード:IPアドレス
  • CNAMEレコード:Aレコードのエイリアス
  • MXレコード:メールサーバ情報
  • NSレコード:ゾーン管理サーバ(権威サーバ)
  • SOAレコード:ゾーン設定情報
  • TXTレコード:追加情報
  • SPF(TYPE99)レコード:メールアドレス認証情報
ユーザベースのDNSレコードの情報はこのようになっています。
$ dig uzabase.com any 

; <<>> DiG 9.8.3-P1 <<>> uzabase.com any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57937
;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;uzabase.com. IN ANY

;; ANSWER SECTION:
uzabase.com. 50 IN A 211.11.100.59
uzabase.com. 2460 IN MX 20 alt1.aspmx.l.google.com.
uzabase.com. 2460 IN MX 20 alt2.aspmx.l.google.com.
uzabase.com. 2460 IN MX 30 aspmx2.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx3.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx4.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx5.googlemail.com.
uzabase.com. 2460 IN MX 10 aspmx.l.google.com.
uzabase.com. 69433 IN NS ns-413.awsdns-51.com.
uzabase.com. 69433 IN NS ns-534.awsdns-02.net.
uzabase.com. 69433 IN NS ns-1238.awsdns-26.org.
uzabase.com. 69433 IN NS ns-1832.awsdns-37.co.uk.

;; AUTHORITY SECTION:
uzabase.com. 69433 IN NS ns-1832.awsdns-37.co.uk.
uzabase.com. 69433 IN NS ns-413.awsdns-51.com.
uzabase.com. 69433 IN NS ns-534.awsdns-02.net.
uzabase.com. 69433 IN NS ns-1238.awsdns-26.org.

;; ADDITIONAL SECTION:
aspmx.l.google.com. 174 IN A 74.125.28.27
aspmx.l.google.com. 267 IN AAAA 2607:f8b0:400e:c03::1b
alt1.aspmx.l.google.com. 157 IN A 74.125.193.26
alt1.aspmx.l.google.com. 134 IN AAAA 2607:f8b0:4001:c05::1b

;; Query time: 1 msec
;; SERVER: 192.168.10.254#53(192.168.10.254)
;; WHEN: Wed Oct 29 10:24:20 2014
;; MSG SIZE  rcvd: 502



ちなみに、ドメイン名はインターネット上のタウンページになっていて、所有者が適切にドメイン名の情報を管理しています。
そしてwhoisサーバに問い合わせることでいつでも所有者の情報を確認できるようになっています。
ユーザベースの所有者情報はこのようになっています。

$ whois uzabase.com
Domain Name: uzabase.com
Registry Domain ID:
Registrar WHOIS Server: whois.discount-domain.com
Registrar URL: http://www.onamae.com
Updated Date: 2014-08-14 10:35:47.0
Creation Date: 2008-02-04 00:45:26.0
Registrar Registration Expiration Date: 2016-02-04 00:45:26.0
Registrar: GMO INTERNET, INC.
Registrar IANA ID: 49
Registrar Abuse Contact Email: abuse@gmo.jp
Registrar Abuse Contact Phone:
Domain Status: ACTIVE
Registry Registrant ID:
Registrant Name: Inagaki Yusuke ()
Registrant Organization: Uzabase, Inc.
Registrant Street1: 2-11-3 Kitaaoyama
Registrant Street2: Aoyama Plaza Bldg. 6F
Registrant City: Minato-ku
Registrant State/Province: Tokyo
Registrant Postal Code: 107-0061
Registrant Country: JP
Registrant Phone: +81.0357706552
Registrant Phone Ext:
Registrant Fax: +81.0357706553
Registrant Fax Ext:
Registrant Email: admin@uzabase.com
Registry Admin ID:
Admin Name: Yusuke Inagaki
Admin Organization: UZABASE, Inc.
Admin Street1: 2-11-3 Kitaaoyama
Admin Street2: Aoyama Plaza Bldg. 6F
Admin City: Minato-ku
Admin State/Province: Tokyo
Admin Postal Code: 107-0061
Admin Country: JP
Admin Phone: +81.0357706552
Admin Phone Ext:
Admin Fax: +81.0357706553
Admin Fax Ext:
Admin Email: infra@uzabase.com
Registry Tech ID:
Tech Name: Yusuke Inagaki
Tech Organization: UZABASE, Inc.
Tech Street1: 2-11-3 Kitaaoyama
Tech Street2: Aoyama Plaza Bldg. 6F
Tech City: Minato-ku
Tech State/Province: Tokyo
Tech Postal Code: 107-0061
Tech Country: JP
Tech Phone: +81.0357706552
Tech Phone Ext:
Tech Fax: +81.0357706553
Tech Fax Ext:
Tech Email: info@uzabase.com
Name Server: ns-1238.awsdns-26.org
Name Server: ns-1832.awsdns-37.co.uk
Name Server: ns-534.awsdns-02.net

Name Server: ns-413.awsdns-51.com

これを機に自分の会社のドメイン名がどうなっているか確認してると面白いかもしれませんね。

2014年10月15日水曜日

Uzabaseの技術者になりたい方へ



テクノロジーで世界最大級の企業・業界データサービスを開発するチームです。


日本中、世界中のお客様に対して、「今」を超える価値をもつサービスを実現するためのシステム開発をお願いします。

アプリケーション、データベース(DB)、サーバの設計・開発・運営をチームで行います。

個々のプロジェクトごとにオーナーを割り振り、オーナーが開発スケジューリング管理や協力会社との折衝など、チーム協力を仰ぎつつ責任を持って一つのプロジェクトを遂行するスタイルです。

将来のキャリアパスは、志向性によりお客様との折衝やマネジメントの立場についたり、エンジニアとして自身が考えた技術を研究し実用化していくなど、様々なキャリアパスを選択することができます。


募集要項


SPEEDA (http://www.uzabase.com/speeda/)部門


□ Web/サーバーサイド エンジニア
ユーザベースでは、プロダクトの設計から開発・テスト・リリースに至るまで、全てをインハウスのエンジニアが行っています。
世界一の経済メディアをつくるというミッションを元に、あらゆる技術を駆使してモノを創る、サービスの根幹を担うポジションの1つです。
当社の7つのルールの1つ「自由主義でいこう」に則って、勤務時間も服装も使用するPCも自由です。
自ら主体的に立ち回り、提案し、実装する優秀なエンジニアが伸び伸び働いています。
ユーザー視点に立ち、サービスの本質的価値を追求し、世界一の経済メディアを創り上げましょう!

≪ 必須 ≫
・「世界一の経済メディアをつくる」というミッションに共感できる方
・3年以上のWebアプリケーション開発経験(ビジネス・プライベートを問いません)
・自らどんどん手を動かして開発を行いたい方
・国籍・学歴不問
≪ 歓迎 ≫
・アプリケーション層にとどまらず、インフラ/ネットワーク層まで深く理解されている方
・機械学習や自然言語処理に関するPh.D.をお持ちの方

NewsPicks(https://newspicks.com/top-news)部門


□ サーバーサイド/Webエンジニア
ユーザベースでは、プロダクトの設計から開発・テスト・リリースに至るまで、全てをインハウスのエンジニアが行っています。
世界一の経済メディアをつくるというミッションを元に、あらゆる技術を駆使してモノを創る、サービスの根幹を担うポジションの1つです。
当社の7つのルールの1つ「自由主義でいこう」に則って、勤務時間も服装も使用するPCも自由です。
自ら主体的に立ち回り、提案し、実装する優秀なエンジニアが伸び伸び働いています。
ユーザー視点に立ち、サービスの本質的価値を追求し、世界一の経済メディアを創り上げましょう!
≪ 必須 ≫
・「世界一の経済メディアをつくる」というミッションに共感できる方
・3年以上のWebアプリケーション開発経験(ビジネス・プライベートを問いません)
・自らどんどん手を動かして開発を行いたい方
・国籍・学歴不問
≪ 歓迎 ≫
・Webアプリケーションのグロース経験をお持ちの方
・アプリケーション層にとどまらず、インフラ/ネットワーク層まで深く理解されている方
・機械学習や自然言語処理に関するPh.D.をお持ちの方


□ スマートフォンアプリエンジニア
ユーザベースでは、プロダクトの設計から開発・テスト・リリースに至るまで、全てをインハウスのエンジニアが行っています。
世界一の経済メディアをつくるというミッションを元に、あらゆる技術を駆使してモノを創る、サービスの根幹を担うポジションの1つです。
当社の7つのルールの1つ「自由主義でいこう」に則って、勤務時間も服装も使用するPCも自由です。
自ら主体的に立ち回り、提案し、実装する優秀なエンジニアが伸び伸び働いています。
ユーザー視点に立ち、サービスの本質的価値を追求し、世界一の経済メディアを創り上げましょう!
≪ 必須 ≫
・「世界一の経済メディアをつくる」というミッションに共感できる方
・2年以上のスマートフォンアプリ開発経験(ビジネス・プライベートを問いません)
・自らどんどん手を動かして開発を行いたい方
≪ 歓迎 ≫
・スマートフォンアプリのグロース経験をお持ちの方
・サーバーサイドアプリケーションの知見をお持ちの方

インターンシップ(SPEEDA,NewsPicks両部門)

□ 技術インターンシップ
ユーザベースでは、就業型インターンシップを随時行っています。
荒波に乗るベンチャー企業で、自由に働くハイレベルなエンジニアに囲まれて一緒に成長しましょう!
≪ 資格・対象 ≫
・現在大学・大学院・高専に在学中の方。
・情報系の基礎知識を勉強中の方。(趣味でも構いません。)
≪ 仕事内容 ≫
・メンターとコミュニケーションをとり、適性と希望にあった開発業務を行っていただきます。
≪ 報酬 ≫
・給与:時給1000円〜 / 成果報酬(仕事内容によって異なります)
・交通費支給


オフィスに遊びに来てみてください。
応募はこちらから(Wantedly)

UZABASEホームページはこちら
SPEEDA部門採用ページ
NewsPicks部門採用ページ
インターンシップ採用ページ


2014年8月27日水曜日

第5回 UZABASE TALK

久しぶりのブログ更新です。
はじめまして技術チームの外間(ほかま)です。

ユーザベースでは、たびたび外部を招いての合同勉強会を行っていますが、この度『UZABASE TALK』と題しまして第5回目の勉強会を開催しました。

※過去の勉強会の様子はこちら
第一回技術勉強会第二回技術勉強会

今回は社内から5名、外部からYahooLIVESENSEの4名と計9名の方にご登壇いただき、
オーディエンスとしてookamiにご参加いただきました。
また、初めて社内ではなく、外部のパーティースペースをお借りして開催しました。
回を重ねるに連れて順調に規模も大きくなってきています!

今回の勉強会のテーマは「HTML5」


HTML5に対応するブラウザが普及しだし、旧来のブラウザでは表現できなかったことが
出来るようになってきている今、自社のサービスにどのようにHTML5の技術を取り入れることが出来るか、
また、それによってユーザに対してどのような新しい体験を提供することが出来るか、勉強会を通して情報の交換の場を作りたい。というのが今回の勉強会の狙いです。

では当日の様子をご紹介していきます。


会の開始を待つ間、参加者の皆さんは会場に用意された軽食やドリンクをつまみつつ、ざっくばらんに会話を楽しんでいます。



お酒を飲みながらお互いに自己紹介などしつつ、いい雰囲気です。



そしていよいよ会がスタート。今回はこのような流れで進みます。



まずはプレゼンテーションからスタートです。



<プレゼンテーション> 

1.「安全なID連携のハウツー」 倉林さん@Yahoo



最近、セキュリティが問題視されているID関連から、高セキュリティと低コストを両立した効率的なID連携方法について解説いただきました。

ID管理は我々にとっても重要な要素なので、とても興味深い内容でした。




2.「データビジュアライゼーション - dc.jsで遊ぼう -」 清水さん@UZABASE



dc.jsを用いて、グラフなどのデータをより動的に表現する方法について解説いただきました。

1つのイベントに連動して複数のグラフが動的に表示されるデモはとても刺激的でした。





3.「HTML5とスマートフォンと3Dと」 竹内さん@UZABASE



我らがチーフテクノロジストである竹内さんには、HTML5でスマートフォン用のネイティブアプリを構築出来る"Apache Cordova"および、その上で更にWebGLを利用した3Dライブラリである"three.js"を動かすというデモをしていただきました。

※資料は事情により公開できません。



途中に休憩を挟んで、後半からはLT(Lightning Talk)です。



<LT(ライトニングトーク)>

1「HTML5時代のClojureScript」松下さん@LIVESENSE



Clojure言語をHTML5で活かす実践方法について解説いただきました。

メリット、デメリットを面白おかしく解説いただき、会場もとても盛り上がっていました。

Clojureは括弧が多いので慣れないとつらいということがよく分かりました。笑

※資料は事情により公開できません。


2「ウェブStrage」島川さん@LIVESENSE



クッキーに代わるデータ保存の仕組みとして利用できる"Web Strage"について、具体的な活用方法を解説いただきました。

※資料は事情により公開できません。


3.「JSでアニメーション頑張ってみた 」 植村さん@LIVESENSE



最近ブラウザでサポートされだしたHTML5の新機能"Web Animations"によるアニメーション作成について解説いただきました。

日頃やられているというスケートボードをモチーフにしたアニメーションでデモを行ったりと、独創的でとても刺激になる内容でした。

※資料は事情により公開できません。


4.「あなたのメンタルモデルあってますか? 」 矢野さん@シェルフ



新しい技術に取り組む上で、誤解から生じる思わぬ落とし穴をご自身の経験から解説いただきました。

効率よく、バグのないシステムを開発するためのメンタルモデルの大事さを改めて考えさせられました。




5.「SPDYを触ってみる」 羽山さん@UZABASE



GoogleがWebの表示を高速化するために提唱しているプロトコル「SPDY」がどのようなものなのかデモを含めつつ簡単に解説いただきました。
今後動的なWebコンテンツが増えていく上で、表示の高速化も必要になる、というインフラ担当ならではの着眼点です!




6.「HTML5のHTML5によるHTML5のためのクイズ 」 杉浦さん@UZABASE


クイズ形式でHTML5について解説いただきました。

杉浦さんお得意のリアルタイム参加型で、会の締めくくりに相応しい大きな盛り上がりとなりました!

※資料は事情により公開できません。


勉強会終了後は有志で懇親会へと流れ、引き続きお酒を飲みながら(この会は最初から最後までずっと飲んでますね)社内外を通した技術、思想の共有が出来ました。


今回の勉強会はHTML5というテーマをベースに、ID管理から言語紹介、インフラ、プログラミングをする上での考え方まで幅広い内容で、とても充実した会となりました。

今後もニーズにあった内容で、ユーザベースらしい親しみやすい雰囲気の、更に充実した勉強会を開催していければと思います。


ちょっと聞いてみたい、いやむしろみんなの前で話したい!と思った方はお気軽にご連絡下さい。




今回の勉強会はキャリアハックに取材いただいて、記事にしていただきました。こちらもご覧いただければと思います。
ユーザベース主催『HTML5』エンジニア勉強会イベントレポート

2014年8月21日木曜日

NewsPicksのUIデザイン

たぬきです。

先日、HatchUp様主催の「第2回ノンゲームスマホアプリ勉強会」に発表者として参加してきました。

ノンゲームスマホアプリということで、ここ2年くらい企画・開発してきた、NewsPicksについてお話ししました。

僕は、「ノンゲームアプリ」はゲームアプリより(ある意味)自由なんじゃないか、と思っています。僕も個人的にゲームアプリを作ったりもしているのですが、ゲームアプリは、開発を始める段階で完成イメージがだいたい出来あがっていて、それをどう作っていくのかという作り方をしています(作っていくうちに思わぬ変化をすることもありますが)。

一方で、ノンゲームアプリは、作り始めるときにサービスコンセプトは決まっていても、画面がどうなるかは全然決まっていなかったりします。だから、技術者・デザイナーが、サービスコンセプトを理解し、それを経験・技術を使って何よりも分かりやすい形に結実させていく、そんな自由度があるアプリケーションなんじゃないかと思っています。

NewsPicksはそんな感じで開発してきたアプリなのですが、今回はそのうちの一機能、「階段」についてのお話。


NewsPicks事業は2013年の頭に立ち上がりました。そこで出てきた疑問
「僕たちが本当に知りたいニュースって何だろう?」

喧々諤々の議論の末、僕たちが辿り着いた結論は、「自分が尊敬している人、友達、有名人が興味をもったニュース」なのではないか、ということでした。そこで、そういった人たちをフォローできるようにし、その人たちが興味をもったニュース(Pickしたニュース)を見られるサービスを作ろうということになりました(8ページ目参照)。更にその人たちがニュースにどんなコメントをするか知れたら面白いかも!

さて、サービスのやりたいことは見えてきました。ではどういうデザインにすべきでしょうか。デザイナーと肩を並べて色々開発して試してみました。

これが一番始めに作ったデザインです。各ユーザーがそれぞれの雑誌を作っていて、それを購読できる、といったことを考えて作りました。左上のカラフルなパネルが、全員のニュースをまとめ読みできるタイムラインです。


作ってみるとデザイン的にはカッコ良かったのですが、うーん、カラフル=まとめ読みという表現は理解しづらいですね。。。

次に作ったデザインは、iOS7のSafariのような機能でした。つまり、適当なボタンを押すと、2次元に描画されていたタイムラインが3次元状に展開され、後ろ側に各ユーザのPickしたニュースが並んでいるようなイメージです。(スライドの10ページ目にSafariのイメージがあります、元イメージは消失してしまいました……)

しかし、次元の転換はやってみると唐突感がありました。

と、試行錯誤を繰り返したあと、「階段」というアイデアにたどり着きました。実際のアプリでは左上のボタンをタップすると見られる、階段状にユーザーが並んでいるデザインです。階段をタップすればそれぞれのユーザのPickしたニュースが見られ、階段の手前にあるタイムラインにはそれらからニュースが生成されていることを表現しました。



アプリ勉強会ということで、プログラムの設計とコードをスライドに書きましたが、見てみると非常に単純です。iOS/Androidアプリはそれっぽい動作をするものをとても簡単に作れるので、いろんなデザインを試せていいですね。

その後も、ちょっとした問題が起こりました(18-20ページ)。ユーザをたくさんフォローすると、階段が詰まってしまうという問題です。これに関しても、デザインと技術の力で簡単で強力な解答を出せました。階段の上下に吹き溜まりのようなViewを追加することで描画したいことは変えず、問題は解決しました。

ということで、サービスコンセプトを理解し、それをデザイン・技術の力でアプリとして結実させると楽しいよ、という話でした。勉強会ではたくさんの質問をいただけ、楽しい会でした!

2013年10月8日火曜日

ボイジャー太陽圏ででたよ

こんにちは。
LTといえば普通は技術紹介、気になるサービス紹介が普通でしょうが
私はあさっての方向の紹介担当です。

たまには宇宙に思いを馳せましょう。

2013年8月12日月曜日

第3回、合同勉強会を開催しました



はじめまして。技術チームのガブです。先日、第三回合同勉強会を弊社オフィスにて行いました。ビールやソフトドリンクを飲みながら、六名のすばらしいエンジニアの方々から、高度にテクニカルなお話を二十分間、楽しく伺うことができました。発表者の皆様を始め、今回の勉強会のために貴重なお時間と労力を割いていただいた方々に深く感謝いたします。

各プレゼンの模様を簡単にご紹介いたします。


1. 今村 雅幸 (株式会社Vasily CTO)さん





今村さんには、急増するユーザーに対応するべく、アプリケーションをスケールするテクニックをテーマに講演していただきました。やはり、VasilyのようなBtoCの場合、ID数の増加が急激すぎてやばいですね。スライドを見ていてゾクゾクしました。僕たちも早く新しいサービスでこんな悲鳴を上げてみたいです。ちなみにVasilyさんの場合、tumblrのinboxモデルを参考に独自の実装をされていました。tumblrのarchitectureについてはこの記事なんかが参考になります。


2. 林 孝之さん



林さんには今回、ごく少数の人に知識や情報が集中せずに生産性を上げていく一つの解として、ペアプログラミングについて発表していただきました。
僕は今、実際にペアプロをやっていますが自分で書いたコードよりも明らかに美しく、読みやすく、バグの少ないコードを書く事が出来ています。林さんがプレゼン中に言っていた、「ペアプロじゃないと怖くてコードを書けない」という事を実感します。一方で、相方とのスキル差が絶望的にあり(僕が低い方です... )、とても疲れるし、理解できていないまま進んでいってしまう時があります。この辺りの課題をどうするか、林さんに改めて質問してみたいなと思います。




3. 津留 一仁 (株式会社マインドパレット リベロエンジニア)さん


津留さんにはAngularJSの特徴、ユースケースについて、プレゼンしていただきました。
Gitコマンドをバシバシ叩きながら、分かりやすいサンプルデモをいくつも交えて発表していただき、(皆さんに共通しますが)とてもイメージしやすく素敵なプレゼンでした。
AngularJSはHTMLそのものがテンプレートである事や、パイプラインで検索フィルターを追加できる事(すごく簡単そう)など、簡単に始められて便利な機能満載。開発していて楽しい感じが伝わってきて思わずダウンロードしてしまいました。




4. 竹内 秀行(ユーザベース)さん


竹内さんのトピックは、みんな大好きDynamoDBの解説です。前々回、株式会社マインドパレットの神尾さんにSimpleDBの恐ろしさを存分に教えていただいた僕たちは、「SimpleDB、ダメ、ゼッタイ」を合い言葉にDynamoDBを採用する事にしました。そんな訳で今回、DynamoDBの素晴らしさを皆さんにお披露目する場になりました。例えば、DynamoDBのキャッチフレーズの一つに「支払いは実際に使用した分だけ。最低料金は不要です。」というものがあります。素晴らしい!さすがAmazon先生!ところが実際の料金プランを見ていくと、事前に利用枠を買って使うというこの矛盾!世の中そんなに単純じゃないんだぜ!という先生からのメッセージを胸に、僕たちはまた一つ大人になったのでした。



5. 加藤じゅんいち(id:j5ik2o)さん


加藤じゅんいちさんは、Domain Driven Design(DDD)について、お話していただきました。最近、僕の入っているプロジェクトではTDDを始めていますが、DDDの基本的な考え方であるドメインモデルを中心に設計していけるとコードがすごくキレイになります。抽象化と共通化が適切にできる事に感動するとともに、今まで自分が書いたものは何だったのかと小一時間(ry
ただ、まだまだプレゼンしてもらった世界には全然到達できていないので、ご推薦のを買って読もうと思います。



6. 矢野勉 (代表取締役 株式会社シェルフ)さん



Lispには括弧が多すぎる。

矢野さんのプレゼンはそんな風にして始まりました。
そうしてClojureをおもしろおかしく説明した後で、唐突に矢野さんは言いました。
「これで皆さんは明日からClojureが書けますね。もう知らないなんて言えないですよ」
動揺する会場。微笑みの矢野さん。
会場からの「結局、括弧多くないですかClojure」「そのサービス、Railsならすぐ作れるんじゃないですか(Clojure生産性低くないですか)」という優しいコメントに矢野さんは「括弧の種類がいっぱいあれば読みやすいから問題ない!」、「Javaの資産がそのまま使えるから生産性は超高い!」とClojureへの愛とモヒカンぶりを遺憾なく発揮し、万雷の拍手を浴びておりました。
僕はそんなロックな矢野さんが大好きです!








上記のメインプレゼンの間に、懇親会とライトニングトーク大会も行いました。

板倉さん、荒井さん(Vasily)、長澤さん(UB)、石橋さん(UB)、加藤さん(UB)にLTを行っていただきました。

次回、第4回合同勉強会は10月頃に行う予定です。


ご興味のある方は是非ご参加ください。スピーカーの方も大募集中です。

連絡先はこちらです:technology@uzabase.com