VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

2011年11月

gihyo.jpさんにて「実例で学ぶAWS入門」連載中!

こんにちは。adingoの岩川です。

スマートフォンに特化したオーディエンスデータプラットフォーム(ADP)、
cosmiの開発を担当しています。

現在、cosmi開発チームは「実例で学ぶAWS入門」と題した記事をgihyo.jpさんにて連載中です!

Amazon Web Service(AWS)の基礎的な部分から、メリットやデメリット、スケーラビリティ確保のための手法などを、cosmiの開発事例をベースに紹介する内容となっておりますので、特にAWSの導入を検討されてる方は、ぜひご覧になってください。

連載はこのあとも続きます。

第3回ではAmazon Elastic MapReduceの利用法を実例ベースでご紹介する予定です。

なお、cosmi開発チームでは当連載へのご意見やご質問をお待ちしております。
頂いたメッセージは、今後の記事でご紹介したいと思います。


次回をお楽しみに!


お問い合わせはこちら:

自分の周りに居る凄腕プログラマーが実際に読んでいる本

こんにちわ、VOYAGE GROUPでエンジニアをしている伊織といいます。
RubyKaigi2010/2011でスタッフをさせて貰ったりしています。
他にも渋谷rbランチなどに顔を出させて貰っています。

弊社の先輩エンジニアは勿論の事、RubyKaigiのスタッフをやらせてもらったりShibuyarblunchやLispコミュニティでうろちょろしているお陰で僕の周りには凄いプログラマーが沢山います。そこで、周りの凄腕プログラマーが実際に読んで「良かった」と言っていた技術書を幾つか挙げてみたいと思います。自分で手を動かしてやった本は僕の感想も添えます。

計算機プログラムの構造と解釈
計算機プログラムの構造と解釈
クチコミを見る
  有名な魔術師本。MITで長年教科書として使われてきた本です。今はPythonなので違う筈。今やっている最中です。とても素晴らしい本だと思います。この本は数学の知識がなければ読み進めるのが辛いですが、逆をいうと頑張って読み進めれば数学の知識も一緒につきます(他の本で勉強したりして読み進めることになるので)。難しいので1ページ読むのに1時間とか掛かるんですが、確実に自分の力になっていると感じています。弊社ではSICP勉強会が5レーンくらい走っているほど、この本による教育に力を入れています。

 SICPと双璧を成す本。プログラミングには様々な概念があります。関数型言語であったり破壊的代入であったりOOPであったりです。それら全てを学ぶにはどうすればいいでしょうか?一つは全てのプログラミング言語を学ぶことです。ですが、それは現実的ではありません。また言語の歴史によってその概念は美しい状態ではないかもしれません。プログラミングを一つの学問として捉えた時に、全ての概念を修める為にはどうすればいいのか?著者のその思いからこの本は生れました。その想いをマルチパラダイムプログラミング言語OzとMozartシステムで実現しています。 
 まだ途中までしかやっていませんが、説明はかなり丁寧で最初はすいすいいけます。
段々と難しくなるそうですが・・・(SICPと双璧って言われるくらいですしね)

実践Common Lisp
実践Common Lisp
クチコミを見る
  CommonLispでどうやって実践的なソフトウェアを書くのか?という点に焦点が絞られており、他のLISP本とはその点で一線を画する。carとcdrがかなり後半にならないと出てこない、異例のLISP本です。普段使うようなソフトをCLで作りたい人にはお勧めです。自分で簡単なデータベースやユニットテストフレームワークを書くという素晴らしく楽しい本です!!!プログラミングやソフトウェア開発そのものをCLで学びたい場合は、実用CommonLispのほうが良いと思います。

実用 Common Lisp (IT Architects’Archive CLASSIC MODER)
実用 Common Lisp (IT Architects’Archive CLASSIC MODER)
クチコミを見る
 AIプログラミングを通して、ソフトウェア開発そのものも学べます。最初の数章でCommonLispそのものも十分に解り易く学べます。実践CommonLispとは違いcarやcdrから始まる、Lispの伝統的な教科書ですが他の本よりもとても解りやすいです。お高いですが、他の本を数冊買うよりもこれ一冊買ったほうが良いと思います。

アルゴリズムクイックリファレンス
アルゴリズムクイックリファレンス
クチコミを見る
  全然クイックリファレンスじゃないw 1章の「アルゴリズムは大事だ」のギャリーが格好良過ぎる!
2分探索木を綺麗に作れないとこうまで違うのか!と実例をストーリーで紹介してくれたので、非常に関心しました。
やはりアルゴリズムなどは大切だと強く実感しました。

最新コンパイラ構成技法
最新コンパイラ構成技法
クチコミを見る
 コンパイラやるならこれかドラゴンブックの双璧でしょうか?割と僕の周りはタイガーブックのほうが好きな人が多いです。

プログラミングの基礎 (Computer Science Library)
プログラミングの基礎 (Computer Science Library)
クチコミを見る
 一時期ポストSICPとして話題になった本。確かにSICPと違って数学などの周辺知識のハードルが低くて解り易く、とても良い本でした。言語はOCamlです。デザインレシピという考え方がとても気に入りました(元々はLispから来た考えらしいです)。 また、かなり最初からテストを書きながらコードを書いていくちゃんとした本です。他の入門書や言語の本はテストという章はあっても、他の章ではテストを書きながら進めて行くのは少ないので、非常に良い本だと感じました。

計算理論の基礎 [原著第2版] 1.オートマトンと言語
計算理論の基礎 [原著第2版] 1.オートマトンと言語
クチコミを見る
 オートマトンの勉強するならこの本ってイメージありますよね。こういった知識は基礎体力なので大事だと思います。また、読んでいて面白いです。最初は結構ちんぷんかんぷんだったんですが、SICPや数学入門という本を読み進めていくうちに読めるようになってきました。

ゲーデル、エッシャー、バッハ―あるいは不思議の環 20周年記念版
ゲーデル、エッシャー、バッハ―あるいは不思議の環 20周年記念版
クチコミを見る
 最近はゲーデルの不完全性定理とか知ってなきゃ駄目なイメージが勝手にあります。バッハ、エッシャーまではすいすい読めました。ゲーデルは結構重い。この本の名前にゲーデルの謎を解く、とか他の本を読むと良いかもしれません。

Binary Hacks ―ハッカー秘伝のテクニック100選
Binary Hacks ―ハッカー秘伝のテクニック100選
クチコミを見る
僕はRubyやLispという超高級言語でばかり遊んでいるので、低レベルな部分も勉強しよう!っと言った時にお勧めして貰った本です。刺激的な内容でわくわくしながら読めます。

レガシーコード改善ガイド (Object Oriented SELECTION)
レガシーコード改善ガイド (Object Oriented SELECTION)
クチコミを見る
レガシーコードに苦しんでいる人は是非読んだほうが良い本です。レガシーコードに苦しんでいた時に、TDDで有名な某和田さんに相談した時にお勧めして貰った本です。また、レガシーコードを生まないのにも役立つと思います。

数学的基礎とデータ構造 (アルゴリズムイントロダクション)
数学的基礎とデータ構造 (アルゴリズムイントロダクション)
クチコミを見る

アルゴリズムの設計と解析手法 (アルゴリズムイントロダクション)
アルゴリズムの設計と解析手法 (アルゴリズムイントロダクション)
クチコミを見る
アルゴリズムの勉強をし始めたときにお勧めして貰いました。数学的な基礎からしっかりみっちり教えてくれる本で、弊社のアルゴリズム勉強会でもこれを使うという話が出ています。

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
クチコミを見る

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (下)
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (下)
クチコミを見る
有名なヘネパタ・パタヘネのパタヘネです。僕はまだ未読ですが、絶対に読むべき本と強く推薦してもらいました。今ある積読が終わったら取り掛かろうと思います。

コンピュータアーキテクチャ 定量的アプローチ 第4版 (IT Architects’ Archive)
コンピュータアーキテクチャ 定量的アプローチ 第4版 (IT Architects’ Archive)
クチコミを見る

同じくヘネパタ・パタヘネのヘネパタです。これも読まなければ!!!
shibuya.lisp#7でLispマシンを作った方が、コレを読みながら作ったと仰っていました。

主に言語や分野に依らない、プログラミングの基礎的な分野に絞ってみました。僕も上記の本は殆ど持っているんですが、中々手ごわくて読み終わらないですorz

やはり「凄い!」と言われていたり、実際にそう感じるエンジニアは基礎がしっかりと出来ていると感じます。
これでもまだまだ足りないとは思いますが、その基礎を固めるのに必要だと思う本を何冊か紹介させて頂きました。

MacのGrapherでアンパンマン

こんにちは、VOYAGE GROUPの水越(@Akiyah)です。

最近、会社で使うPCがMacBook Proになったので、Mac OS X v10.7 Lionに付属しているソフトを眺めていたら面白いものを見つけました。それはグラフ描画ソフトのGrapherです。

Grapherとは、Mac OS X付属のグラフ描画ソフトです。Grapherを使うと分数やn乗、絶対値、括弧などの数式を簡単にかっこよく書くことができて、その上その数式をグラフにしてくれます。数式を書いてグラフにする、という点に関してはここで何度か紹介しているRよりもお手軽にできます。

というわけで、アンパンマンを書いてみました。
14
アンパンマン方程式は前回Rで書いたものと同じです。Grapherを使って方程式の解を描画させました。こんな複雑な数式でもそのまま簡単に編集できて、とってもステキです。
 
Grapherは2次元だけでなく3次元のグラフも書くことができます。
z=アンパンマン方程式
と書き直してグラフにすると、簡単に3次元アンパンマングラフを書くことができます。
05
Grapherの中ではマウスで向きをぐりぐりかえることもできますよ。

こんなにすばらしいGrapherですが、検索してもあんまり情報が出てこなくて、世間ではあまり使われていないようです。これからも面白い使い方を見つけたらここで紹介していきますね。

参考
Grapher - Wikipedia
Grapherで遊ぼう
VOYAGE GROUP エンジニアブログ : Rを使ってお絵描き(アンパンマン方程式)

闇PHP Matsuri2011とニンジャの隠された真実

PHP Matsuri2011というハッカソンイベントで、闇PHP Matsuriというセッションが深夜に行われました。
DSC05702
koyhoge All Rights Reserved


実はこのセッションは、VOYAGE GROUPの手の者たちが企画・開催を行なっていました。な、なんだってー!(AA略)

闇PHP Matsuri2011とは

インスパイア元は、闇RubyKaigi2011です。闇というと闇プログラマネタを想起する方も多いかもしれませんが、そちらの意図ではありません。
闇RubyKaigi2011では、下記の狙いで開催されたとRubyistMagazineの記事の中で書かれていますが、この闇PHPMatsuriでも同様の狙いであり、もっとトーカーが増えてくれたらいいなあと思い、開催しました。
LightningTalks との差別化を考えました。当初は話慣れてなくても気軽に話せるのが LightningTalks の持ち味でしたが、最近はいきなり挑戦するにはハードルが高くなっているのではと感じています。そこで LightnigTalks よりもっと気負わずに話ができるようにしたいと考えました。 そこで、5 分より短い時間持ち時間で、当日応募を受け付けるという RejectTalks に似たような形式にしました。 ただ当日応募は場の熱気と勢いといったついカッとなるための要素が応募の敷居に作用してくるため、本当に応募が集まるか不安がありました。よって事前応募も行うこととしました。

得られた実装

  • 1人あたり持ち時間5分の一般的なライトニングトークス
  • 5分経ったら、ニンジャペアがドラを叩いてトークを打ち切った
  • 同時にもう一つのニンジャペアが5分立ったらニンジャソードで斬りかかった
  • 大多数のトーカーが斬られリアクションを取ってくれた

結果どうだったか

正直、受け入れてもらえるかとても心配でご飯が喉を通らない程だったのですが、けっこう楽しんでいただけたようで、ホッとしました。
また機会があれば、今回の弊社の手の者たちもどこかでやらかすかと思いますし、是非多くの方々に闇イベントを開いてもらえればいいなあと思っています。

これからの闇

京都で、2011年11月に関西闇Ruby会議というイベントが行われるらしいです。 ご興味の有る方は参加してみると、できれば発表してみると、とても楽しいかと思います。 わたしも行きたかった…

参考リンク

全ては網羅できてませんが、ブログ類のリンク集、Twitterまとめ、写真へのリンクを貼っておきますね。

感想ブログ、写真(by 公式サイト)
http://2011.phpmatsuri.net/page/blog-and-picture-of-participants

Twitterまとめ(2011/10/15 22:30ごろからが闇PHPMatsuriタイムです)(by Togetter)
http://togetter.com/li/201224

ニンジャ写真(by koyhoge)
http://www.flickr.com/photos/koyhoge/6246567037/in/set-72157627775049941
http://www.flickr.com/photos/koyhoge/6246567037/in/set-72157627775049941
http://www.flickr.com/photos/koyhoge/6247088480/in/set-72157627775049941
http://www.flickr.com/photos/koyhoge/6247087478/in/set-72157627775049941
http://www.flickr.com/photos/koyhoge/6247089444/in/set-72157627775049941
http://www.flickr.com/photos/koyhoge/6246569675/in/set-72157627775049941

【Sunrise前哨戦】大規模サービスを構築せよ!

こんにちは。09年度入社のおーつ(@smileeeen)です。
普段は子会社のZucksにてモバイル、スマートフォン周りのシステム開発を担当しています。

先日『Sunrise前哨戦』という、若手エンジニアで大規模サービスを設計してみようという社内イベントがあったので、その事について書かせて頂きたいと思います。

↓発表時の様子
pre_sunrise_1

Sunrise前哨戦とはその名の通り、Sunriseの前哨戦として行われました。

■Sunriseとは
VOYAGE GROUPが今年から始める理系向けインターンで、100万人以上が使うことを前提としてサービスを企画し、それを実現するシステムを設計するといった内容になっています。
詳しくは下記をご覧ください。
大規模サービス構築プログラム「Sunrise」

SunriseはVOYAGE GROUPとしても初めての試みであり、社内のエンジニアの中からもやってみたいという声があがっていました。
そこで入社1~3年目までの若手エンジニアで4人一組のチームを組んで、前哨戦としてTwitterライクなサービスを展開する場合、どのようにシステムを設計するかを考え、その設計に対する評価を競う事になりました。

サービスの仕様としては
  • アカウント管理ができる
  • ツイートできる
  • 他ユーザーをフォローできる
  • フォローワーのツイートと自身のツイートでタイムラインを表示できる
というTwitterの最低限の機能を持つように求められました。

また、大規模サービスを設計する事が目的なので、下記のような利用状況の条件が与えられました。

  現在 1年後
登録ユーザ数 1億ユーザ 2.5億ユーザ
DAU 500万ユーザ 1,250万ユーザ
1日の総ツイート数 5,000万ツイート 2億ツイート
ツイートの割合 Web:25%、API:75% Web:25%、API:75%
1ツイートのバイト数 100バイト 100バイト
月間PV 5億PV 20億PV

評価軸は下記のような項目があげられました。
  • 可用性
    • 継続性
    • 耐障害性
    • 回復性
  • 拡張性
  • 性能
  • 運用・保守性
  • セキュリティ

各チーム毎に約1ヶ月間かけて業務の合間を縫い、これらの条件化で最適だと考える設計を導き出しました。

自分達のチームでは、既存のTwitterがどのようにシステムを構築しているのかを調査し、それらをヒントにシステム設計を行いました。
最終的にはフロントの部分にはNoSQLのRedisを採用する事とし、全体的なシステム構成は下図のようになりました。

Sunrise前哨戦システム構成1

他のチームはTwitterも一部で利用しているというCassandraをメインに使用する構成や

Sunrise前哨戦システム構成2


MongoDBやMySQLのHandlerSocket Pluginを活用したり

Sunrise前哨戦システム構成3

各チーム視点や進め方などに特色があって、とても面白かったです。

これらのシステム設計を社内のエンジニアの方々に対して発表したのですが、発表後には先輩エンジニアの方々からの鋭い質問が飛び交い、冷や汗をかきながらも、頑張って回答をしていました。

普段アプリケーションエンジニアとして業務を行っていると、インフラ関係の知識は薄くなりがちかと思います。
今回はそのようなレイヤーまできちんと考える必要があり、単一障害点を作らないためのサーバー構成や、多数のサーバーへのデプロイ方法、想定リクエスト数を捌くためにはどのくらいのサーバーが必要なのかなど、様々な事を調査し、設計に組み込んでいきました。
また普段あまり考えないような規模のサービスのシステムを考えることで、今まであまり深く理解していなかった技術などへの理解も深めることができました。
個人的には最近話題のNoSQLの種類や特徴、大規模サービスを構築する際の工夫などについて知識を得ることができたのが良かったです。
これらの経験を今後の業務にも活かしていきたいと思います。

最終的には順位付けも行い、優勝チームはCTOのポケットマネーで美味しいご飯が食べられるそうなので、そちらも楽しみにしています(・∀・)

さて、そんな前哨戦が行われたSunriseは今週2011/11/3(木)まで参加者を募集しています!
意欲ある学生の皆さんの応募をお待ちしています!

大規模サービス構築プログラム「Sunrise」
sitetitle

記事検索
QRコード
QRコード