Header image

サンフランシスコ界隈では、Software Engineer (=Developer, Programmerと読み替えてもらってもOK)というのは一定の地位のある職業です。周りにそういう人があふれているのが影響してか、「私もプログラムが書けるようになりたい」とか、「Software Engineerになりたい」という人は沢山いるのですが、なかなか取っ掛かりが難しいのが現状です。また、本当に職業としてSoftware Engineerになりたい場合は、まずresume(履歴書)で他者に差をつけ、面接でアルゴリズムの問題を解き、会社に入ってから即チームで働く土台と自信が必要になります (こっちの会社では、”新卒”のように会社が手取り足取り教えてくれることはまずありません)。
「私もプログラムが書けるようになりたい」や「デザイナーだけど、プログラムのこともちょっと分かるようになりたい」という人には、以前もブログで紹介したRailsBridgeなんかも非常にいいと思いますし、他には今ではネット上に色々な教材(Codecacademyや、日本だとドットインストールなど)が溢れているので、それを利用するのも手です。
しかし、「Software Engineerになりたい」という人には、ちょっとこれでは足りないかもしれません。そんな人におすすめなのが、今回紹介したいHackbright Academyです。

Hackbright Academy ってどんなところ?

Hackbright Academy(以後Hackbright)は10週間で最新のWeb開発技術を身につけ、awesome(すばらしい)プログラマーになろうという学校です。なんといっても特徴は、この「女性限定」です。実はこういう学校はサンフランシスコには数箇所あるのですが(このブログの最後に参考として紹介します)、女性限定というのはおそらくHackbrightだけだと思います。

何が学べるの?

  • PythonとPython系Webフレームワーク(Django, Flask)
  • ペアプログラミング
  • Git とソース管理 (Github)
  • インタビュー対策
  • SQL, ORM, NoSQL
  • HTML, CSS, JS, Ajax, WebSockets
  • EC2やGAEへのデプロイ
  • *nix系のコマンドライン、ターミナルの使い方
  • メッセージキュー、バッチ処理、分散処理

その他にも、以下のようなプログラムが含まれています。

  • メンターシップ: それぞれの生徒にはメンターがつきます。メンターにはTwitterやGoogleやスタートアップのエンジニアが含まれています。
  • ゲストスピーカー: ゲストスピーカーがHackbrightのオフィスに来て、プログラミングについてやアントレプレナーシップについてのトークをしてくれます。スピーカーの例としては、Python初学者なら通る道、Learn Python The Hard WayのZed Shawなど
  • 課外活動: シリコンバレーのテックカンパニーのオフィスやY Combinatorに訪問したり、Hackbright主催でイベントを行ったり、またチームを組んでハッカソンなどにも積極的に参加しています

このカリキュラムの中のいくつかは私がサンフランシスコに来てから半ば必要に駆られて独学で学んだのですが、学んでいる最中もつまづく、この方法が合っているのかわからない…本当に誰かが教えてくれたらどんなにいいだろうと思っていたものばかりでした。なので、私が初めてHackbrightを知って、そのカリキュラムを聞いたときは本当に衝撃でした。Software Engineerになるにあたって必要な知識が、このカリキュラムには全部含まれています。

いつ、どこでやっているの?授業料は?

プログラムは10週間のフルタイムで、月曜から金曜の10時から18時までみっちり、サンフランシスコのダウンタウンにあるオフィスで行われます。新しいオフィスは行ったことが無いのですが、前のオフィスはペアプログラミングに適した環境が用意されていたので、今回もそうでしょう!これまでに2012夏、2012秋、2012冬と開催され、来月の頭から2013春が始まります。授業料は$9000ですが、様々な割引制度もあります。

応募すれば誰でも生徒になれるの?

これは実は先ほどCo-FounderのDavidに直接メールして聞いたのですが、春から始まるコースには200人以上の応募があったようです。こういった素晴らしいプログラムは口コミなどで本当に広がっていって、徐々に知名度が上がっていくのが本当によくわかります。対して、受け入れ予定の生徒数は25人前後なので、倍率はなんと8倍以上!ということで、残念ながら誰でも生徒になれるというわけではありません。FAQなどを読んでいても、「ソフトウェア開発を学んで、エンジニアになりたい!」というモチベーションのある人に対して門戸を開いているということが読み取れます。

Hackbrightの雰囲気がよく分かるビデオ(Bay Area Girl Geek Dinnerより)

日本語訳が付けれればベストだったのですが、残念ながらできないので、印象深いところだけをピックアップして。35秒くらいのところから、Hackbrightの前には何をしていたかを生徒が話します。テックサポートをしていたり、シスアド、メカニカルエンジニア、経営戦略、学校の先生、ファイナンス系、プログラムディレクター(最後の人は聞き取れないけどブロガー的なものかと)をしていたり。そして今、彼女たちはSoftware Developer、バックエンド、フロントエンドのエンジニアになっている、という下りが1分くらいまで続きます。ビデオの中で話している人は、HackbrightのTシャツを着ている人以外はメンターやゲストのスピーカーですが、どの人も女性のテックコミュニティーで活躍している人ばかりです。

私がこんなに押す理由

日本語で書いているので、これを読んでいる人はきっと日本にいる方が多く、現実的にHackbrightを知っても申し込めない人も多いと思います。(でも10週間ならビザ免除プログラムでもいけますね!)それでも、本当に素晴らしいプログラムだと思うから、ぜひ紹介したかった、というのが一番の理由です。
以前のブログで、LinkedIn DevelopHer Hackdayについて書きましたが、ここでチームを組んだ二人がこのHackbrightに通っていたのが、Hackbrightを知るきっかけでした。
二人ともSoftware Engineerとしてのキャリアはなく、でもこのHackbrightに数週間通っていただけで(当時は3-4週目くらいだったと思います)立派なバックエンド要員として一緒にチームを組んで不自由ないレベルにまでなっていました。また、どうしても女性エンジニアはその数少なさ故に仲間ができにくいのですが、Hackbrightのチームは卒業しても本当に仲間といった感じで、一つの大きなコミュニティーとなっているのも素晴らしいと思いました。

まとまりがないですがこのへんで。

参考:その他の学校(ブートキャンプ、コース)など


submoduleにGitHubのprivate repoがある場合、Herokuへのデプロイがさくっといくかと思ったらガツッとハマったので、メモとして残しておきます。
ちなみに、以下はRailsアプリでの例です(他のフレームワークでも応用が効くとは思いますが、効かないかもです)。基本的にはHerokuの公式ドキュメントを見ていただければ載っているので、それで事足りそうな方はそちらに飛んでください。

まず、ローカルで幸せに開発していたときは、githubにある他のrepoをsubmoduleとしてaddするときは以下の様なコマンドでやってました。ここでは、アプリフォルダの中のvendorの中にprivate repoなgemたちを突っ込んでいる感じです。

$ git submodule add git@github.com:keiko713/some_gem.git vendor/some_gem

この場合は、GitHubのSSHキーがローカルのマシンに登録してあれば、some_gemがprivate repoであろうがなかろうが、submoduleとしてvendor/some_gem以下に登録されます。GitHub上で見てもその部分はリンクになっていて、クリックするとそのrepoにジャンプできます。

ここでHerokuにアプリをデプロイしたい場合、もしaddしたsubmoduleがprivate repoでなければ、git push heroku masterの結果は次のようになり成功します(以下はdeviseをsubmoduleとしてaddした例)。

$ git submodule add git://github.com/plataformatec/devise.git vendor/devise
-----> Git submodules detected, installing
Submodule 'vendor/devise' (git://github.com/plataformatec/devise.git) registered for path 'vendor/devise'
Initialized empty Git repository in /tmp/build_1qsjqayd6a5g6/vendor/devise/.git/
Submodule path 'vendor/devise': checked out '7c8f636b98810c21c339df484258c0b1446c0d43'

しかし、これがprivate repoの場合、残念なことに次のようなエラーが出ます(以下はprivate repoであるsome_private_repoをaddした例)。

$ git submodule add git://github.com/keiko713/some_private_repo.git vendor/some_private_repo
-----> Git submodules detected, installing
Submodule 'vendor/devise' (git://github.com/plataformatec/devise.git) registered for path 'vendor/devise'
Submodule 'vendor/some_private_repo' (git@github.com:keiko713/some_private_repo.git) registered for path 'vendor/some_private_repo'
Initialized empty Git repository in /tmp/build_3lbuhu9ljt94n/vendor/devise/.git/
Submodule path 'vendor/devise': checked out '7c8f636b98810c21c339df484258c0b1446c0d43'
Initialized empty Git repository in /tmp/build_3lbuhu9ljt94n/vendor/some_private_repo/.git/
Host key verification failed.
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:keiko713/some_private_repo.git' into submodule path 'vendor/some_private_repo' failed
! Heroku push rejected, Submodule install failed

今回は、Resolving Application Dependencies with Git Submodulesのドキュメントの中にあるProtected Git submodulesを参考にしてみました。

まず、今追加してしまった分のsome_private_repoを削除します(参考: Stack Overflow)。

  • .gitmodulesの中の該当submoduleの部分を削除
  • .git/configの中の該当submoduleの部分を削除
  • git rm –cached vendor/some_private_repo(後ろにスラッシュはつけない)
  • コミットして、untrackedになっているvendor/some_private_repoフォルダを削除

次に、対象のprivate repoにアクセス可能なユーザー名とパスワードを付けて然るべき手順でsubmoduleをaddしていきます。

$ git submodule add https://username:password@github.com/keiko713/some_private_repo vendor/some_private_repo
-----> Git submodules detected, installing
Submodule 'vendor/devise' (git://github.com/plataformatec/devise.git) registered for path 'vendor/devise'
Submodule 'vendor/some_private_repo' (https://username:password@github.com/keiko713/some_private_repo) registered for path 'vendor/some_private_repo'
Initialized empty Git repository in /tmp/build_3dbb0x2kdopen/vendor/devise/.git/
Submodule path 'vendor/devise': checked out '7c8f636b98810c21c339df484258c0b1446c0d43'
Initialized empty Git repository in /tmp/build_3dbb0x2kdopen/vendor/some_private_repo/.git/
Submodule path 'vendor/some_private_repo': checked out '7c8f636b98810c21c339df484258c0b1446c0d43'

成功!ということでちょっとした変更で簡単に立ち上がりました。

ここで注意したいのが、この方法でデプロイをすると、.gitmodulesファイルにusernameとpasswordが残ってしまうという問題です。.gitmodulesはたいていrepoに上げていると思うので、public repoでこれをしてしまうとパスワード等がバレバレです。そもそもprivate repoなgemを使っている時点で、アプリ側のrepoもprivateであることが想像されるので、Herokuデプロイ用のユーザーなどを作ればいいかもしれませんが、セキュリティ的に許容しがたい場合は他の方法を探ってください。

Herokuのドキュメントの中には他にVendoringPrivate dependency repositoriesの方法が載っていましたが、前者は試行錯誤の上残念ながらうまく行かず、後者は試していません。他にもStack OverflowにGemfile中でやりくりする方法(ENVを使ってusername/passwordを設定するのでよさげだった)やここを参考に生成したOAuth tokenを使ってやる方法も載ったりしていましたが、なんだかうまく行かず、結局上記の方法が一番シンプルでサクッと出来ました。

もっといい方法が見つかったらまた追記したいと思います。(その前にHerokuじゃないところにデプロイすることになりそうだけど…)

ではでは


I went to Chartio‘s new office space (really modan & cool, I loved it!) and launch party! Thank you for inviting me to this event, Melissa! Melissa is a wonderful lady who is working at Chartio as PR. I would love to introduce their office and product for Japanese people. Sorry for non-Japanese speakers, this blog post is written in Japanese.

友達のMelissaに招待され、Chartioの新オフィスお披露目&サービス一般公開パーティに行ってきました!

Chartioは2010年に設立されたY Combinator卒のスタートアップで、ユーザーのデータベース(データーソース)を読み取り、それを視覚化してくれるサービスを提供しています。今まではプライベートベータで長らくサービスを公開していたのですが、今回一般公開+新オフィスに移転ということでパーティーを開いたというわけです。

MySQLを始め、PostgreSQL、ORACLE RDBMS、Amazon RDS、Rackspace Could Database、heroku、Google Analyticsなど様々な種類のデーターソースに対応していて、簡単に(ワンクリックで出来るものも!)それらと連携が出来、様々なグラフなどの視覚化情報をそこから取得することが出来ます。
TechCrunch Japanからの引用になりますが、「たとえばGoogle Analyticsからデータを取ってきて、それをOracleデータベース上の売上データと比較する。データはリアルタイムで見られるほか、アップデートの自動化スケジューリングもできる。データを整理清掃するインタフェイスもある。ひとつのデータセットを、線グラフ、棒グラフなど、さまざまな形で可視化できる。」ようなサービスも提供しています。

MelissaはChartioのPR(いわゆる広報)で、日本のメディアででもぜひChartioを紹介して欲しいとのことでした。もし興味の有る方がいらっしゃったら、ぜひコンタクトしてみてください。(英語に自信がない場合は、まずは私に連絡頂いても大丈夫です!)

さて、(実はあまり詳しく知らない)プロダクトの説明はこのくらいにして、彼らのステキなオフィスを写真たっぷりで紹介したいと思います!元々はギャラリーか何かだったみたいで、とてもモダンでステキなデザインのオフィスです(iPadで写真を撮ったので残念ながら所々あんまりキレイに写ってないですが…)。社員がまだ8名と少ないこともあり、オフィス自体はそんなに大きくなかったです。

まずパーティーに向かうためサンフランシスコSOMAにあるオフィスを探していると、目に飛び込んできたのがこの即席看板。開始が日が落ちかけてからで、周囲が暗く似たような建物が多かったのでこれはとても助かりました。

中に入るとすぐ階段で二階ヘと行けますが、パーティー会場は一階です。

パーティーと言えばKeg(ビアサーバー)!ということでビールを片手に奥へと進みます。

奥はひらけたスペースで、メインの作業場になります(ブログのトップにある写真です)。普段は中央あたりに机が社員分の8個並んでいます。社員ひとりひとりにマスコットアニマルがいて、机の上にそのぬいぐるみが置いてありました。GoのマスコットGopher君もいました。

下の写真はデモの様子。パーティーがメインで、ちゃんと格式張ったデモはなかったですが、裏はPython+Django、表はカスタムのJavaScript+グラフ描画にd3.jsを現在は使っていると中の人から聞きました。アメリカ以外では、ヨーロッパにもユーザーがたくさんいるけど、日本はまだ少ないとのこと。ぜひ使ってみてください!

奥には大きく開けられる裏口のような窓のようなものがあり、今回はなんとそこを開けてEl Surというフードトラック(屋台)をこのパーティーのためだけに横付けさせていました。

フードトラックにはエンパナーダというパイの包み焼き的なものがあり、とっても美味しかったです。写真はフードトラック撤去後。

Melissaに二階も案内してもらったので、写真を載せたいと思います。まずは昼ごはんなどを食べたり会議をしたりするスペース。実は映っている壁は可動式で、間仕切りにもなります。匠を感じますね。そのスペースの上にはなんとワニが!おちゃめです。


ランチスペースの隣にはリラックス出来る小部屋。扉もあるので、閉めきって一人で集中してコーディングも出来ますし、ブランケットもあるのでお昼寝もできちゃいます!写真に映っているのはMelissaです。好きです、この笑顔。

オフィスの全体はこんな感じですが、その他に簡単な流し台もあります。

そして!このオフィスの中でも特にいいと思ったのはトイレ!アメリカ人はどうしてもトイレにそんなに重きを置かないのでトイレのデザインが疎かになりがちなのですが、これはデザインされているトイレだなーと思いました。(でもやっぱり暖かい便座じゃないけど…)

きっと「なんでこのアジア人はこんなにトイレの写真に撮っているのだろう」と思われたくらい他の角度からも写真を撮りましたが、掲載は自重します。

ステキなオフィスで、Melissaの同僚もステキな方ばかりでした!こういうスタートアップがどんどんサービスをローンチしてくのはいいですね。

こういう「行ってきた」系がどれだけ需要があるかは分からないのですが、私は941さんの行ってきたシリーズがかなり好きなので、少しでも誰かの何かの役に立てればと。ではでは


最近RubyとRailsを使っています。本格的に触りはじめてまだ2ヶ月くらいしか経っていないので、Rubyさんとの会話はまだ小学生レベルですが、それでもなんとか喋れています。

ということで、これまでに学習で使ったおすすめサイトを紹介します。

とりあえずRuby勉強するぞ!というので使ったサイトが「ミニツク」というサイトです。私はあんまり本を買わない派で、日本語でサクっとRubyの基礎を学べるサイトを探していたらたどり着きました。一章ごとにドリルがあり、理解度が試せます。もれなくMatzのビデオもついてきます。サクサク進めて基礎が学べるので、おすすめです。

次に、WebフレームワークとしてRailsをやっぱり使うわけですが、ここで学習に使ったサイトが「Ruby on Rails Tutorial」です。Railsに関するチュートリアルだけではなくGithubやHerokuの使い方まで載っているので、Webアプリ初心者の方もこのチュートリアルを全部終わらせたら開発プロセスのとてもいい勉強になると思います(でもかなり長いです)。また、「RAILS CASTS」には沢山Railsに関するスクリーンキャスト(ビデオ講座的な物)があり、テンポもよくてサクっと見れて(理解したかどうかは別にして)とてもわかった気になるのでおすすめです。魅力的な有料のコンテンツもありますが、無料のものでも十分に充実したビデオがたくさんあります。

サンフランシスコには非常にRubyコミュニティが発達していて(というかRubyという言語自体コミュニティが発達しているイメージです)、Ruby関連のmeetupがたくさんあります。その中でも先日RailsBridgeというRails初心者に向けたワークショップ(ハンズオン型の勉強会)に行ってきたのですが、これがとても充実していました。

全生徒数は30人+くらいだったと思うのですが、レベル別(プログラミング自体のまったくの素人か、他の言語でプログラミングをしたことがあるかなど)に7人程度のグループに分けて、各レベル先生1人、TA2〜3人で、独自のカリキュラム(これも上記の Ruby on Rails Tutorial に匹敵するほどいいと思います)を使用して1日でRailsを使ってWebアプリを作れるようになろう!というのが概要です。ちなみに、先生はみんなボランティア、会場もお昼ごはんとかも企業がスポンサーということで、こんな恵まれた環境なのにタダです!

スケジュールとしては、Ruby on Railsの開発環境が整っていない人は、金曜日の夜に集まって、このドキュメント(Railsbridge Installfest)にしたがって環境構築をします。ここにも先生が来るので、環境構築でつまずいてなかなか進めない人も、詳しい人に聞きながら進めることができます。土曜日は午前中から集まって、グループに別れてこのカリキュラム(Railsbridge Curriculum)にしたがってアプリを作っていきます。夕方くらいに解散です。この二つのドキュメントはRailsBridgeに参加していなくてもいつでも見ることができますし、チェックをつけながら進めることが出来て達成感もあるのでおすすめです!

実はこのRailsBridgeは、女性エンジニアの割合を増やそう!という趣旨のもとやっている活動なので、参加するには女性である必要がありますが、その女性は+1として男性をつれていくことができます。先生のボランティア自体は男女問いません。蓋をあけてみるとやっぱり先生も含めた参加者全体としては女性の割合が多くなるのですが、男性も2〜3割ほどいます。サンフランシスコでは月に1回ほどコンスタントにやっているので、ぜひ興味がある人は参加することをおすすめします。日本にいて興味がある人は、ぜひorganizerになってみてはどうでしょうか?!

なんかまとまりがない感じになりましたが…まだまだPython&Djangoは好きですよ?

おまけ:今日行ってきたFukuoka Ruby Nightというイベントの写真!初Matzでしたが、ユーモアセンスのあるステキなプレゼンでした!話しかけ忘れたことを後悔…福岡県は日本で(アジアで?世界で?)一番大きなRubyコミュニティがあるらしい。松江でも東京でもなく福岡とは意外。


いつも忘れてしまうので、GithubであるプロジェクトをForkしてからPull Requestをするまでの流れをメモしたいと思います。今回、実際に私がこの流れを使っているCordova (PhoneGap) ドキュメントのプロジェクト、 https://github.com/apache/incubator-cordova-docs を例にやっていきたいと思います。

1. Fork する

GithubでForkしたいプロジェクトまで行って、右上にあるForkボタンを押します。今回、 https://github.com/apache/incubator-cordova-docs をForkしたので、私のGithubアカウントkeiko713上では https://github.com/keiko713/incubator-cordova-docs というリポジトリが作成されます。

2. 自分のPCにcloneする

ターミナルでcloneしたいフォルダまで行って実行(そのフォルダ内にincubator-cordova-docsという名前のフォルダが作成されます)

git clone  https://github.com/keiko713/incubator-cordova-docs.git

3. branchを作る(新規ブランチ作成とそのブランチへの切りかえ)

cd incubator-cordova-docs
git checkout -b [your_branch_name]

4. ファイルを編集する

5. commit する

新規に作成したファイルの場合はgit addするのを忘れずに

git commit -am 'Translate files related to hoge'

6. pushする

git push origin [your_branch_name]

4-6を繰り返す

7. upstream(Fork元リポジトリ)の設定

Forkした自分のリポジトリ (https://github.com/keiko713/incubator-cordova-docs) は、Fork元のリポジトリ (https://github.com/apache/incubator-cordova-docs) の変更内容を自動更新しません。なので、Fork元のリポジトリの最新情報を自分のリポジトリに反映させる必要があります。

ここで、Forkした自分のリポジトリには、大抵デフォルト名としてoriginという名前がついています。新しくFork元のリポジトリにupstreamという名前をつけて追加しましょう。

git remote add upstream https://github.com/apache/incubator-cordova-docs

8. Fork元リポジトリの最新を取得しlocalのmasterを更新

# branchをmasterに変更
git checkout master
# upstreamからpullして最新を取得
git pull upstream master
# localのmasterをoriginにpush(オプション)
git push origin master

9. branchをrebase

# branchを作成したbranchに変更
git checkout [your_branch_name]
# branchをrebase
git rebase master

10. branchをoriginにpush

git push -f origin [your_branch_name]

11. Pull Requestを作成

GithubでForkした自分のリポジトリ (https://github.com/keiko713/incubator-cordova-docs) に行き、左側にあるボタンよりbranchを[your_branch_name]に切り替えます。右上にあるPull Requestボタンを押して、Pull Requestを送信します。


6/30 – 7/1にかけて行われた、LinkedInのDevelopHer Hackdayというイベントに参加してきました。私のチームはMuniMobile(現在SMS通知機能は使用できません)という、サンフランシスコを走るバスMuniの到着をSMSでお知らせするアプリを作り、2位に入賞しました!2位の賞品として、チームを組んだ@ddbraz@heylaurakellyと一人一台、見事iPadをゲットしました!ちなみに1位の賞品はMacBookAir、3位の賞品はAmazonのギフトカードでした。LinkedIn太っ腹!全体として、とてもよくまとめられたイベントで、おみやげも多く(Tシャツ、ヨガマットなど)、参加費は無料。参加者全員の満足度は非常に高かったと思います。

DevelopHer Hackday イベント全体の流れ

土曜の11時am開始で日曜の11時am終了の24時間で何かアプリを作り上げる開発イベントで、今回は、DevelopHerともある通り、参加者は女性に限定されていました。

参加者は土曜朝10時頃からチェックインが出来、その場でチームを作ります。もしくは、チームはその前から作ることも出来ます。アイデアもその前から考えることが出来るのですが、コーディングだけは開始時間の11時になるまで開始できません。今回はテーマは特に無く、もちろんLinkedInのAPIを使ってハックしてもいいですし、使わなくてもOKでした。

チームを組んだら、とにかく開発!もちろん毎食・軽食・飲み物は全てLinkedInが用意してくれるので、開発だけに集中できます。女性限定Hackdayということもあり、途中カップケーキトラックが来たり、みんなでヨガをしたりと、かわいいミニイベントもたくさんありました。夜は泊まりこみもOKで、シリコンバレーのオフィスなのでもちろんシャワー完備。ベッドにもなりそうな特大ビーズクッションも複数個あり、寝袋持参の人もいましたが、私はこのビーズクッションで仮眠しました。ちなみに、私は3時間ほど寝たので貫徹した人が何人くらいかは分からないのですが、おそらく10人ほどは私が寝る前も起きた後もアクティブに動いていたと思います。

日曜の11時amまでに、アプリ概要を書いたスライド一枚を所定のGoogle Docsに提出してチームとしての審査への登録完了です。最終的に参加者は100人近く、チームは合計19個(1チーム1-8人)となりました。審査は、

  • 19チームを3グループほどに分け、別室に分かれ審査員(LinkedIn従業員)4-5人の前で一次審査
  • 全員が収容出来る大きな会場に移り、一次審査通過チーム10チームを発表
  • 10チームが4人の女性特別審査員(SlideShareのCEOなど)の前で最終審査
  • 1位、2位、3位を発表、賞品が授与

といった流れでした。審査の基準は、公式HP曰く審査員が”wow”となるような作品。他にも、このZDNet記事では、シンプルな問題に対してのベストな解決策と書いてありました。私のチームの勝因も、サンフランシスコに住んでいる人なら誰でも「いいアイデア!」と思うような着眼点だったと思います。その他、ファイナリストや入賞作品はここから見れます。1位のチームは、LinkedInと連携したキャリアプラン作成アプリで、アイデアや完成度も1位にふさわしいものだったと思います。

Hackday 感想と MuniMobile について

「ハック◯◯」と名がつくものにはこれまでも参加したことがありましたが、本格的にチームを組んでどっぷり開発するような数日に渡るハッカソンはこれが初めての参加でした。チームもなく知り合いもおらずぼっちな状態で土曜の朝10時頃にはもう着いてしまい、開始までたっぷり1時間チームを組む余裕がありました。アイデアはなかったので、どこかのチームに入ることが目的でしたが、ビビリということもありなかなか人に話しかけることも出来ずにその辺を彷徨っていました。そんなところ、ちょうど他のイベントで知り合った方に声をかけてもらい、フロントエンド要員としてチームに入れてもらうことにしました。

今回は本当にチームに恵まれました。また、アイデアがシンプルで既に固まっていたので、みんな「後は実装して形にしよう!」という雰囲気があり、一つ機能を実装したらハイタッチ!といったように非常に楽しく実装できました。また、チームメンバーみんなハッカソン初心者だったのですが、「動く一つのアプリを作ろう!」という目的をみんなで最後まで持ち続けたこともとても良かったと思います。

途中、例えばログイン機能を作ろうとしたのですが、ログイン機能を作るとサービスとしては良くなるけど、時間がかかるしシステムも複雑になる、一貫して動くものを作るという目的を忘れないでいよう、ということでログイン機能はつけないことにしました。これは非常に良い決断だったと思います。結果、ログイン機能が無くても十分に見栄えの良いシンプルなシステムになりました。

私達も、動くものがきちんと出来た達成感があり、しかも賞までもらえて、とても充実した二日間となりました。なんと、メンバーが通っているプログラミング学校のHackbright Academyから、使用しているTwilio APIについてスポンサーが貰える可能性が出てきました。Twilioは、SMS通知に使っているAPIなのですが、ここが開発者用アカウントを利用しているためにSMS通知機能が限定した電話番号でしか動かず、正式サービスとしてローンチ出来ない状況でした。しかし、ここをスポンサーしてもらえるなら、正式サービスとしてローンチ出来ます。また週末に集まってちょっと作り込もうと言っていて、とても楽しみです。

日本の最近のハッカソン事情はあまりよく知りません、日本でもこんなハッカソンがあるととてもいいなと思いました。

ではでは


少し前になりますが、6/24の日曜日に、サンフランシスコで毎年開催されるPride Parade、いわゆるゲイパレードに行ってきました。

サンフランシスコという土地柄もあるのですが、アメリカでの大きなカルチャーショックの一つとして、こういった同性愛者に対してすごく理解があるという所があります。私の友達にも、大学の時のルームメイトがみんなゲイだったよ!とか、おじさんがゲイで結婚もしているよ、という人がいるなど、人生の大半を日本で過ごした私にはただただ驚きの文化です。

ゲイパレードは、LGBT(レズ・ゲイ・バイ・性転換)の皆さん、そしてそれを支持する人たちが、思い思いの衣装を来てサンフランシスコのメインストリートであるマーケットストリートを闊歩します。ちょうどEmbarcaderoの駅からCivic Centerの駅あたりまでです。Civic Center駅のあたりでは野外ライブステージや屋台があり、食べ物や飲み物、またLGBT活動のシンボルであるレインボーフラッグ関連商品が売っています。

パレードは10:30am開始で、1pmを過ぎてもまだやっていたと思います。Civic Centerのあたりで見ようと思うとかなり人ごみが厳しいので、開始地点のEmbarcadero駅付近で見ることをオススメします。

過激な衣装の人もたまにいますが、全体的になかなか平和的なパレードだと思います。ただ、パレードではなくCastro駅(ゲイのメッカ)付近に行くと平和かどうかは分かりません(未体験ゾーン)。ゲイやレズビアンの団体もあれば、おじさまおばさま方のゲイ・レズ団体、ゲイやレズビアンを子供に持つ両親の団体、また同性愛を支持する政治家、企業など、多くの参加者がいました。うまい写真があまり撮れませんでしたが、少しでも雰囲気を味わってもらえたらと思います。

ではでは


Bay To Breakers

これぞサンフランシスコの醍醐味!とも言えるBay To Breakersを見てきました。去年も見に行ったので、1年以上サンフランシスコに住んでるなぁと実感する1日でもありました。

Bay To Breakersは、サンフランシスコの東から西まで12kmを横断するマラソン大会です。もちろんガチで走っている人もいる(らしい)のですが、なにせ7時スタートなので私が見に行く頃にはもうガチで走っている人はゼロです。みんな歩くor早歩きです。それよりメインは仮装です!ということで、私の見つけたおもしろい仮装を紹介したいと思います。他にもおもしろい仮装はいっぱいあったんですが、カメラが間に合いませんでした。

Bay To Breakers

  • 左上:レインボーフラッグの仮装です。とってもかわいかったです!しかも、これ「いったい何着発注したんだ…」ってくらい多くの人が着ていました。見つけた限りでも30人以上は着ていたと思います。
  • 右上:これは一番最初に見つけた素敵なお姉さま達です。女装というのもままある仮装の1つなのですが、ドレスに厚底は珍しかったです。
  • 左下:ピンクい集団を見つけました。やっぱり集団で同じ仮装をしてると、思わず写真を撮りたくなります。真ん中の手を上げてるお兄さんはなにをかぶっているのでしょうか。
  • 右下:Nerdsというお菓子の仮装です。若いお姉ちゃんたちも仮装してます。

Bay To Breakers

  • 左上:見ての通り、馬です!これは面白かったです。後ろ足の下に車輪がつけてあるので、歩くときも歩きやすそうでした。
  • 右上:私はHayes & Marketで今回見ていたんですが、ちょうどライブバンドをしていて、ノリのいい曲をいっぱいやっていたのでとってもよかったです!
  • 左下:なにやら黄色い集団が。オーバーオールとかゴーグルという目印があるのですが、これは何の仮装でしょうか。
  • 右下:テトリス!!!これはウキウキします。ちなみに、他にもテトリスの仮装をしている人がいました。凝ってる!

Bay To Breakers

  • 左上:こういうのもウキウキしますよね♪ドリンクボトルまで色がお揃いですてき!
  • 右上:みみみ、、、ミッ◯ー!この古いスタイルは、、、!
  • 左下:キリン!シマウマ!これは、頭ひとつ(ひとつどころじゃないけど)出ているので遠くからもよく見えて目立ってました。しかもたくさんいたので、さながら動物園!
  • 右下:1tのおもりを担ぎながらマラソンとはさすがです。ちなみに、馬跳びしながらゴールを目指すストイックな二人組もいました。

みなさんも、この時期にサンフランシスコにお越しの際は是非見に行くことをおすすめします。時間は、多分毎年7時からスタートで(確証はないので各自確認してください)、1番の人は7時30分過ぎにはゴールしてしまいます。おそらく、アマチュアランナーでもガチで走っている人は8時前には着いてしまうのではないでしょうか。

仮装を楽しみたいのなら、8時頃からでもまだまだ大丈夫です!もしかしたら8時前にはもっと素敵な仮装があるのかもしれないのですが(それは私には未知の世界ですが)、8時、9時あたりでもまだまだ大勢のランナーがいます。ゴール近くなら、10時頃でもまだまだいけると思います。ただ、あまりゴールに近づきすぎると、ゴールデンゲートパークに入った時点でゴールを諦めるランナー達いて、それらが見られない可能性があります。笑

あと、さすがサンフランシスコなのですが、このBay To Breakersでは

  • 裸の人がいる(老若男女問わず)。特に多いのがオジサマ。ぶらんぶらんしてます。少ないのは若い女性。裸でなくても、きわどい人なら大量にいます!
  • おばさまも楽しく仮装!日本だったら、私のお母さんとかが仮装することなんて考えられないんですが、おばさまも凝った衣装などを作って楽しく仮装しています。
  • もちろんゲイカップル歓迎!これは言うまでもないですね。
  • みんなとにかくハイテンション!テンション高いランナーとHigh Five(ハイタッチ)するのも醍醐味です。
  • 給水?いいえ、給酒です。サンフランシスコは、というかアメリカは基本的に外での飲酒は禁止されているのですが、この日ばかりはみなさんお構いなし。ランナーも、手に持っているのはスポーツドリンクではなくお酒です。
  • 途中参戦、途中棄権多数。ゼッケン着けないで走っている人(正式にランナー登録していない人)も沢山います。コースの横断もし放題。ローラースケートを履きながら走っている人も。これはもうマラソンなのか…?

などなど、日本だと「えっ?」って思うようなこともたくさんあって楽しいです!オススメのサンフランシスコアクティビティです♪

ではでは


PIL (Python Imaging Library) をUbuntuにインストールしてみました。PILを使うと、画像のリサイズなどが簡単に出来ます。インストール自体は、ルートユーザで、またはsudoをつけて

  • pip install PIL

で可能なのですが、それだと色々とサポートしてくれないので、今回は

  • JPEG
  • ZLIB (PNG/ZIP)
  • FREETYPE2

をサポートしてくれるようにしたいと思います。それぞれライブラリが必要なので、ルートユーザまたはsudoをつけて、以下のコマンドで取得します。取得の前に、apt-get updateをすることをおすすめします。

  • apt-get install libjpeg8 libjpeg8-dev
  • apt-get install zlib1g-dev
  • apt-get install libfreetype6 libfreetype6-dev

その後、シンボリックリンクを作ります。これもsudoかルートユーザで。

  • ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
  • ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
  • ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/

シンボリックリンクですが、lnコマンドでももちろん作成可能ですが、同様にcpコマンドでも作成可能です。引数は同じで、cp -s シンボリックリンク元 シンボリックリンク先になります。

最初にpip install PILを既に行った人は、以下でアップデートします。

  • pip install -U PIL

これで、以下のような「サポートしました!」の画面が出ると思います。

    --------------------------------------------------------------------
    PIL 1.1.7 SETUP SUMMARY
    --------------------------------------------------------------------
    version       1.1.7
    platform      linux2 2.7.2+ (default, Oct  4 2011, 20:06:09)
                  [GCC 4.6.1]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    --- ZLIB (PNG/ZIP) support available
    --- FREETYPE2 support available
    *** LITTLECMS support not available
    --------------------------------------------------------------------

ちなみに、これを実施した環境はUbuntu 11.10 (GNU/Linux 3.0.0-12-virtual x86_64)になります。ちなみに、インストールにあたってInstall PIL with Jpeg support on Ubuntu Oneiric 64bitというブログを参考にしましたが、apt-getで取得するライブラリの名前が元の記事と少し違っています。


エンジニアの友達にgithubなどgitを使用した共同開発時の豆知識を教えてもらったので、忘れないようにメモしておきます。Thanks, Shawn!

マスターとのマージ時には事前にgit rebaseを使う

gitを使って共同開発をすると、たまにこんなコミットメッセージを見る機会があるかもしれません。

  • Merge branch ‘master’ of git://github.com/hogehoge

これは、最新のマスターを私のブランチにマージしたわよ、という意味合いのコミットメッセージなのですが、正直いりません。開発者それぞれがブランチとマスターをマージするたびにこのようなメッセージをログに残してしまうと、それだけでコミット履歴を占有し、重要な情報をたどるのが困難になります。

このマージ時のコミットメッセージが発生してしまう原因は、左側の図のようにpull requestを出す前に最新のマスターを自分のブランチにマージしたいためです。ここで、git pullやgit merge origin/masterをする代わりに、git rebase masterを使いましょう。

git rebase masterで自分のベース(ブランチを作った位置)を最新のマスターと置き換えることにより、自分のコミット(図で言うとadd new function X, modify function Y, fix issue Aの3つ)は最新のマスター以降に起こったものとなり、最新のマスターを自分のブランチにマージするという作業、コミットがなくなります。後にpull request #3をマスターにマージした時も、左側の図だとmerge branch ‘master’ of git…を含めた合計4つのコミット履歴が残るのに対して、rebaseした場合は3つの履歴しか残りません。

注意: rebaseを行ったあとは、ブランチを普通のpushではなくforce pushする必要があります。コマンドは

  • git push -f origin [branch_name]
です。その後、pull requestを作成します。

rebaseの時にconflictが起こる場合

これを教えてくれた私の友人は、一度ブランチを作ってしまうと作業中のファイル群はほぼ自分しか修正を加えないので、rebaseの際にconflictが起こることは少ないと言っていましたが、もちろんconflictが起こる可能性もあります。その場合は、conflictを解消しgit rebase –continueを行うか、なにかちょっと良くないことが起きている時はあきらめてgit rebase –abortしてrebaseする前の状態まで戻します。

git -i rebaseを使ってインタラクティブにrebaseする

PythonにはPEP8という公式のコーディングスタイルがあり、それに基づいたチェックができます。しかし、例えば上の図でいうとfix issue Aまで終わってからPEP8をしていなかったという事に気づき、PEP8をしたところ新たに少し変更が生じたとしましょう。それをpep8 fixesとしてコミットしてしまうのはあまりに申し訳ない感じです。

こんな時、git rebaseをするときに-iを追加することで、インタラクティブにrebaseが行えて、このrebaseの際に申し訳ない感じのコミットを一つ前のコミットに吸収合併させることができます。また、あの時勢いで適当に書いてしまったコミットメッセージも編集できます。

ここで、例の図のfix issue Aの後ろにpep8 fixesというコミットがあったと仮定すると、git rebase -i masterを行った時に出てくるインタラクティブな画面(というかテキスト編集画面)は以下のようになります。

pick a123456 add new function X
pick b123456 modify function Y
pick c123456 fix issue A
pick d123456 pep8 fixes

# Rebase a123456 . . d123456 onto z123456
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like squash, but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

細かいそれぞれのコマンドの説明はどこかにあると信じて、今はとにかくpep8 fixesをコミット履歴に残さないようにしたいので、対象行のpickの部分をfに書き換えて変更した部分自体は前のfix issue Aに混ぜてもらって、コミットログメッセージはなかったことにします。vimの要領で書き換えでき、:wqで保存して終了できるので、書き換えた後は終了してrebase処理を実行します。Successfully rebased and updated refs/heads/master.が出たら成功です。