ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2012/04/14

#coderetreat in Tokyo 2nd に参加してきた

Coderetreat in Tokyo 2ndに参加してきました。

Coderetreatとはイベント告知のページによると以下のようなイベントです。
Coderetreat は、プログラマのための練習、学習のためのイベントです。同じ課題をペアプロで実装しながら、プログラミング、設計、テストなどの技術を学びます。
特徴を挙げると・・・
  • 全員がライフゲームという題材に取り組む。
  • ペアプログラミングをしながら実装する。
  • 開発45分で振り返り15分で1セッション。
  • セッションのたびにペアを入れ替える。
  • 毎回コードを捨てて、一から作り直すという作業を繰り返す。
  • 言語は固定せずにいろんな言語で実装する。
    • 実際、私はRuby/C/Javaで実装しました。
  • セッションのたびに追加課題が与えられる。
    • 配列を使うなとか、if文を使うなとか、セッター・ゲッターは使うなとか。
このイベントはかなり斬新で、すごい楽しかったです。

これをやることによって何が起こるかというと
  • ペア作業を繰り返すことで、いろんな人の設計アイディアが合成されて、セッションを進むごとに設計が洗練されていきます。
    • 実際、最初のライフゲームのデータ構造は地味な2次元配列でしたが、途中からクラスベースで多次元に対応できるデータ構造になっていきました。
  • 普段使わない言語で実装することで、違った視点を得られたり、違う言語ならではの体験ができます。
    • 特に、私は組み込みCでのTDDに取り組んでいるので、Rubyでのコードの記述量の少なさ、本質的なコードに集中できることの生産性はすごいうれしいと分かりました。
    • C言語の場合、言語的な制約をカバーする要素が多く、Rubyのような生産性はなかなか出せません。
    • ただし、C言語でも(Rubyには及ばないまでも)早いサイクルでTDDを回すことはできますが。
  • 実装の制約をかすことで、よりオブジェクト指向らしいきれいな設計に収束していきます。
今回のイベントに参加したおかげで、ペアプロ、TDD、オブジェクト指向設計の面白さや大切さを再発見しました。

今、組み込みCのTDDの読書会をやっていますが、区切りの良いタイミングで、今回のイベントのように演習中心でペアプロをする会をやれたらいいなという思いが強まりました。その時は、組み込みらしく実機も用意して、dual targeting testを実践すると。

最後になりましたが、場所・食事・おやつのスポンサーのグロースエクスパートナーズ株式会社、株式会社 情報システム総研-、株式会社 スペイシーズの皆様に感謝したいと思います。素晴らしいイベントをやっていただいてありがとうございました!


2012/02/18

BlogにCoderwallのバッジを貼ろう

Githubのリポジトリの内容をかっこいいバッジで表現してくれるCodewallというサービスがあります。リポジトリの内容、言語の種類やforkされた数などを解析してバッジにしてくれます。

このサービスを利用するメリットとしては以下が考えられるかなと思います。
  • 見た目にもCodewallのバッジはかっこいい。
  • Githubの活用度合いを視覚的に表現するツールとして使える。
  • バッジを増やしていく楽しみもあり、ゲームのようで楽しい。 
バッジを増やすためにがんばる!ってのもどうかと思いますが、がんばった結果がバッジの種類や数として表現されているとなんか勲章のように感じられるかもしれません。

気に入ったので、ちょっとブログのサイドバーにつけてみました。今のところバッジ2つ。C++のリポジトリとJavaのリポジトリを持っていることの証明のようです。今度、種類と数が増やせるようにがんばりたいと思います。

#今、C言語でTDDするコードをコミットしてるので、少なくともC言語のバッジは増えると思います。

ちなみに以下のようなJavaScriptのコードを埋め込むとバッジを表示できます。”yohei1126”は私のアカウント名なので自分のものに置き換えてください。

<script="" type="text/javascript">
    function display_coderwall(args) {
        var badges = args["data"]["badges"];
        for ( var i = 0; i < badges.length; i++ ) {
            document.write('<img '"="" +="" badge"]="" height="48" src="'+ badges[i][" width="48" />');
        }
    }

  <script src="http://coderwall.com/yohei1126.json?callback=display_coderwall"/>
  
</script>


2011/08/05

#SP_kayac 面白法人カヤックさん主催の「スマートフォンアプリエンジニア ライトニングトーク交流会」に参加してきた

夏休み中に面白そうなイベントがあったので、面白法人カヤックさん主催の「スマートフォンアプリエンジニア ライトニングトーク交流会」行ってきました。ちょろりと参加報告を書いておきます。

■面白法人カヤックとは?
http://www.kayac.com/

Webサービス/スマートフォンアプリetcの受託開発やら独自サービス展開をやっているそうです。サイトが大学生ノリで、良い意味で変な会社ですね。業績も順調に伸びているようです。

LT見てて知ったんですが、

  • 知り合いの元組み込みソフト開発者で国産JavaScriptライブラリuupaa.jsの作者であるスーパーハッカー @uupaa さんやら、
  • メーカーの研究部門出身の人がいたり、
  • 元組み込みの人いたり

純粋なWeb系の人だけじゃないようです。

■スマートフォンアプリエンジニア ライトニングトーク交流会とは?
スマートフォンのアプリを開発しているエンジニアが集まって、LTやったり、飯食ったりしながら情報交換するゆるい会でした。

アジェンダは以下の通り。
  • ” ナカマップの実装について ”, 大塚 雅和さん(@maaash), カヤック
  • ”Reengoの技術ってどんななの?”, 村瀬大輔さん, カヤック
  • ”EncountMeのできるまで”, 堤修一さん, カヤック
  • ”スマートフォンアプリ開発のクロスプラットフォーム戦略”, 塩屋啓さん(@kwappa), dwango

詳しくはサイトを参照してください。

■ナカマップの実装について
http://maaash.jp/lab/bowls-smartphone-lightning-talk/#landing-slide

ナカマップというのは、複数人のお友達で位置情報を共有したり、リアルタイムにグループチャットをできるiOS/Androidアプリとのことだそうです。

今回の発表は、リアルタイムなクライアント/サーバ間通信の工夫についてでした。

過去のナカマップでは、クライアントから定期的にサーバに定期的にポーリングする方式をとっていたそうですが、これではポーリング周期分遅れるという問題があったそう。

何度かの改善を経て今は、サーバとのコネクションは接続しっぱなしにして、イベントがある度にサーバからレスポンスをプッシュしてもらう形式にしたそうです。子のメリットは、リアルタイム性が高くて、サーバの負荷が低いとのこと。

発表中に、「multipart/mixed方式」とか「diggが提案した」というようなことを話していたと記憶していますが、ググってみると以下のブログを発見しました。
http://about.digg.com/blog/duistream-and-mxhr

diggの人はこの技術をMXHR (short for Multipart XMLHttpRequests)と読んでいるそうです。

今考えているアプリで複数のクライアント間でリアルタイム通信をやる必要があって、実現方法を検討していたので、ちょっと良い話聞けたなと思いました。あまりよく分かっていないので、ちらっと調べてみます。

ちなみに、懇親会の時に聞きましたが、いわゆるpush型の通信としてはC2DMというのもあるそうです。


■Reengoの技術ってどんななの?
Reengoは電話番号なしにfacebookの友達に電話がかけられるアプリだそうです。

この発表ではVoIPの待ち受けの実装について話していました。

待ち受けはアプリでは実装しておらず、OS自体にVoIPの通信を待ち受ける機能が存在するらしく、単にイベントハンドラを登録して待てば良いとのこと。

実装は以下の通り。クロスプラットフォーム開発のために可能な限り、C言語で書いているというのが興味深かったです。

  • クライアントのロジックはC言語
  • UI周りはネイティブ(iOSの場合はObjective-C、Androidの場合はJava)
  • サーバサイドはPerl/Node.js
■EncountMeのできるまで
EncountMeはスマートフォンで、いわゆる「すれ違い通信」ができるアプリだそう。

位置情報をサーバに蓄積して、マッチングして、「○○さんとすれ違いました!」とユーザに通知する機能があるとのこと。ただし、このアプリ電気をくいすぎる実装になっているそうで、アプリ提供は8月で終了するそう。でも、いろいろ反省点を活かして、次のゲーム開発に活かすそうです。

アプリとは関係ないですが、アプリ出すまでの過程が面白かったです^^; 発表者の方はたしか組み込み系の開発から転職組だそうで、転職したすぐはWeb系のプログラミングがまったくできず、戦力外通告を一度受けたとか。自分より若い人がバリバリ開発している中、PHPの本を読む毎日だったそうですが、ふんばってiPhoneアプリの勉強をして、アプリ開発者として今の立場を築いたとか。思わず拍手してしまいました。

■スマートフォンアプリ開発のクロスプラットフォーム戦略

TitaniumとかPhoneGapとか、iPhone/Androidなどクロスプラットフォームなアプリが簡単に開発できると言われている開発環境の現状についての発表でした。

まず「同じアプリを作りたい」という場合の「同じ」の定義から入っていました。同じという場合に、機能(ユーザに提供する価値)、UI(見た目)、ソースコードの3つに分けられるとのこと。

機能とUIを分けた理由は、UIは違ってても同じ機能(ユーザに提供する価値)が同じであれば、同じアプリだろ?ってことだそうです。実際に僕も使っているジョルダンの乗り換え案内はAndroid版とiOS版で少しUIが違うそうです。

詳しくは資料を見ていただきたいですが、PhoneGapについてはパフォーマンスがいまいちだけどソースは共通にできるとのこと。スマートフォンの性能が上がれば問題なく使えるレベルになりそうという印象でした。

実際に使っていないので何とも言えませんが、こういうツールってバグが多いとよく噂を聞くので、眉唾な感じがしました。しかし、私は個人でアプリ作ろうとしているだけなので、切迫感はありませんが業務でやっている場合、予算握っている人はこの辺は切実なんでしょうね。。。

■おわりに

自分の中で企画を考えている段階で、まだアプリできていない状況なんですけど、実際にやっている人達の話を聞けてモチベーションが上がりました。そのうち作ったアプリについてLTしたい!

機会あればまたイベント参加しますね。