はてなブックマーク - PHP Matsuri 2013 in Sapporoから帰ってきました。
    このエントリーをはてなブックマークに追加

    今年4月にFusicに入社しました、いしかわです。
    よろしくお願いいたします。

    PHP Matsuri 2013 in Sapporo に参加しました。

    北海道は涼しかったです。
    新千歳はNew Chitoseなのに新さっぽろがShin Sapporoなのはこれいかに。

    私がやったこと

    1. CakePHPを用いてアンケートフォームと集計画面を作りました

    CakePHPを触り始めて約3ヶ月。
    bakeにもTwitterBootstrapにも少し慣れました。
    アンケートフォームを作り、円グラフありの集計画面が出るようにしました。
    GDのimagefiledarc()を用いました。

    2. 参加者の皆さまにひたすらアンケートをとりました

    参加者の皆さまにアンケートをとった理由は3つあります。
    ・一人の力では絶対に勝てないから
    ・次回以降のPHP Matsuriや類する勉強会などに参加するモチベーション、ひい
    てはプログラミングを勉強するモチベーションを高めたいから
    ・少しでもコミュニケーションをとろうと思ったから

    本当に良い方ばかりでした。
    いきなり現れて「アンケート…」とつぶやく、そんな私に対して
    作業しているにもかかわらず皆さま非常に温かく接してくださいました。
    私もそのような素敵な人でありたい。

    3. 撮った写真をスクロールしました

    smoothDivScrollを用いました。
    時間があったらここをもう少しひねりたかったです。
    画像をぱーんってしてばーん!とかやりたかったです。

    4. 発表の準備をしました

    夜遅くになるとテンションだけで行動できてしまいますね。
    プロローグをちゃんと考え始めたのは23時くらい、
    いきなり録音を始めたのは朝4時のことです。
    くじ運にも恵まれ、午後イチという素晴らしいタイミングで発表ができました。

    集計結果

    アンケートの集計結果は以下の通りでした(有効回答数:73)。
    (全体で正確には何名だったのでしょうか?)

    問1: 出身地は?

    PHPMatsuriアンケート問1
    赤: 北海道地方…19名
    橙: 東北地方…1名
    黄: 関東地方…26名
    緑: 中部地方…6名
    水: 関西地方…7名
    青: 中国・四国地方…5名
    紫: 九州・沖縄地方…8名
    黒: 海外…1名

    やはり札幌開催だけあって、北海道の方が多いのでしょうか。

    問2: 祭りは何回目?

    PHPMatsuriアンケート問2
    赤: 1回目…40名
    黄: 2回目…12名
    緑: 3回目…6名
    青: 4回目…15名

    実に半数以上が初参加でした。皆勤賞の方も約20%いらっしゃるんですね。

    問3: 北海道といえば?

    PHPMatsuriアンケート問3
    赤: ラーメン…8名
    黄: ビール…9名
    緑: スープカレー…8名
    水: ジンギスカン…16名
    青: 海鮮(ウニ・カニ・いくら)…28名
    紫: メロン…4名

    市場で食べた海鮮丼、美味しかったです。

    来年のPHP Matsuriに向けてのコメントでは場所に関するものがいくつかありました。
    来年はどこでやるんでしょうか…楽しみです。

    そして皆さまの夢を聞いてまわって実にほくほくした気持ちになったので
    発表のときに皆さまに全力でお見せしたかったのですが、ネタに時間を使いすぎ
    ました…。

    感想など

    PHP Matsuriは私の勉強へのモチベーションを高めてくれました。
    知らない技術(フレームワークしかり、言語しかり、ツールしかり)がたくさん
    あって、
    広がりすぎている世界がそこにはありました。
    怖いな、と思いました。
    私が私としてちゃんとしていないと、何も出来ないのではないかしら。

    今回「地球のみんな、オラに元気を分けてくれ!」状態で
    たくさんの方の力を全力で借りました。
    おかげさまで優勝できました。本当に本当にありがとうございました。

    札幌で美味しいものをたらふく食べましたが、
    体重にダイレクトに反映されていなくてほっとしたのは一昨日のお話。
    それではごきげんよう。またいずれ、どこかで。

    いしかわ

      はてなブックマーク - 悪魔に魂を売ってしまおう -devil’s pie- #phpmatsuri #phpmatsuri2013
      このエントリーをはてなブックマークに追加

      PHPMatsuri2013に参加してきました!
      奥芝商店というスープカレー屋で念願の本場スープカレーを食べました!
      が、とてもボリューミーで死にかけた小山です。創成寺(ソーセージ)うまい!

      今回はPHPMatsuri2013のハッカソンで作成した“devil's pie”について、技術的な点と今後について紹介したいと思います。

      “devil's pie”とは?

      詳しくはこちらPHPMatsuri2013″大”LT大会での発表スライドとデモムービーをご覧ください。

      話はそれますが、PHPMatsuriはこの”大”LT大会が祭りの醍醐味と言っても過言ではないと思っています。

      徹夜して開発した成果の発表を待ちながら、他の人のいろいろな成果発表を聞いて盛り上がる。そしてそれぞれがそれぞれに投票して参加できる。

      この発表の瞬間のために参加しているんだと思います。

      “devil's pie”の中の技術

      話を戻します。

      スライドを見てもらえれば分かりますが、”devil's pie”は

      Webアプリケーション設置に必要な、「サーバの構築」と「アプリケーションのデプロイ」を、「Ansible」「serverspec」「Capistrano」を使って自動化するためのWebインターフェースになっています。

      “devil's pie”の実行の流れ

      “devil's pie”の動きとしては、まずホストネームと「サーバの魂」であるrootパスワードをもらって、Ansibleを使ってdevilユーザを対象サーバに追加します。

      その後、そのdevilユーザを使って

      • 1. serverspecでテストを実行→失敗を確認
      • 2. Ansibleでサーバ構築
      • 3. Capistranoでアプリケーションデプロイ
      • 4. serverspecでテストを実行→成功を確認

      という流れでWebアプリケーションを設置しています。

      Webアプリケーションは現在はCandycane、baserCMS、CakePHPに「デモ的に」対応しています。

      “devil's pie”の今後

      “devil's pie”はPHPMatsuri2013での発表のために作られましたが、今後の展開も意外にまじめに考えています。

      “devil's pie”の使い勝手は今のままをできるだけ維持したいのですが、「設定側(管理側)はもっといろいろできるようにしたいなあ」と思っています(今はまだ結構ハードコーディングしてる)。

      例えば、

      • 任意のアプリケーションに対応できるようにAnsibleのplaybookやserverspecのspec、Capistranoのdeploy.rbを設定できる
      • 「サーバの構築だけ」とか「アプリケーションのデプロイだけ」「テストだけ」でも使えるように
        • 「最初のサーバ構築だけボタン1つでできる」だけでも随分楽になる
      • “devil”ユーザではなくてもいいように(さすがにdevilは本番で使えない)
      • Web APIを通じて継続的に実行とか
      • playbookやspec、deploy.rbのアーカイブダウンロード(“devil's pie”を卒業した人へ)

      などなど。

      “devil's pie”の配布方法について

      あと、”devil's pie”の生きる道は「社内ツール」しかないわけですが(もしWebサービスとして公開したら。。。怖)、その”devil's pie”自体の構築がかなり面倒です。

      ソースを公開してすぐに、「ノードキュメント」で動かしはじめた北の猛者がいたらしいと聞きましたが、そういう人は稀です。もう一度言います。そういう人は稀です。あと、ちょっとおかしい。

      “devil's pie”から”devil's pie”をデプロイできるようにはするつもりですが、「じゃあ最初の”devil's pie”はどこから??」という話になるわけで。

      これについては、いずれVagrantのBoxの配布などで対応できればなと思っています(つまり、「Packer使ってみたい」)。

      “devil's pie”のVagrant Boxで作った仮想サーバから任意のサーバへ”devil's pie”をデプロイすればいい感じに社内に設置できるんじゃないかと(混乱をまねく文章になっていますが)。

      と、ここまで書いて、ふとAnsibleのサイトをみたら”AnsibleWorks AWX”というAnsibleのWebアプリケーションが提供されているようですね。

      PHPMatsuri2013の感想

      スタッフとしても参加したのですが、主に北海道の方々の素晴らしい運営により、とても有意義に過ごせました。

      “devil's pie”も4位をいただくことができました!共感してくださった方ありがとうございます!みんな魂を売りたいんですね!

      賞品としてOn-Lapという外部ディスプレイをいただきました!VJで使います!

      ちなみに個人的に印象に残った発表は、いろいろありますが3つほど選んでみました。

       

      Matsuriのその日の話題から作る人は、すごいな、と。で、ここまで作るか、と。

      どれも今後も開発が継続されそうなので楽しみです。すごく使いそう。

      というわけで、PHPMatsuri2013堪能しました!

        はてなブックマーク - Node.js(Socket.IO)を使ってzenpreのリアルタイム配信基盤を作る
        このエントリーをはてなブックマークに追加

        zenpreチームの小山です。
        昨日食べた先輩のカレーがとてもおいしかったです。量が少なかったので次回大盛りを希望しました。

        zenpreリニューアル!!

        “ZENPRE”は6月11日に”zenpre”としてリニューアルしました。
        主な改善内容はリリース文章にお任せするとして、
        今回は技術的な側面から紹介できればと思います。

        大文字から小文字になっただけではないのです。

        リアルタイムプレゼンテーション配信を支える技術の刷新

        zenpreは「リアルタイムなプレゼンテーション配信」と「プレゼンテーションの共有(スライド+動画のコンテンツ作成)」の2つを軸にしてサービスを提供していますが、
        この「リアルタイムなプレゼンテーション配信」、つまり

        スピーカーがスライドを切り替えたら、同時に他の視聴者の画面のスライドも切り替わる

        という機能は、当然ながらブラウザ間のリアルタイム連携がポイントになってきます。

        ZENPREではこの部分は元々Rubyで書かれていたのですが、今回のリニューアルを機に全てNode.js(Socket.IO)で書き換えました。

        なぜわざわざNode.jsで書き換えたのか?

        実は「ベンチマーク結果でNode.jsのほうがずばぬけて優秀だった」とか、「Rubyでの実装に問題があった」とかいう皆さんが期待するような理由は、実はありません。

        強いてあげるとすれば、「zenpreをただリニューアルするのではなく、新規技術採用の起点としたい」というのと「JavaScriptがチームの共通言語だったから」というのが一番大きいです。

        現在は私がメインで開発していますが、近い日にチーム全体で改良を加えられる体制を目指しています。

        また、以前はZENPREではプレゼンテーションのプレイヤーをFlash(スライド+USTREAM)で構築していましたが、
        今回のリニューアルで、機能に占めるFlashの割合を小さくしました。
        その際に代わりに割合が大きくなったのがJavaScriptで、Nodeは当然ながら(ブラウザ上の)JavaScriptと親和性が高かったというのもあります。

        同期通信は、ZENPREではRuby<->Flash(スライド+USTREAM)で行っていたところを、zenpreではNode.js<->JavaScript(連系用ライブラリ)<->JavaScript(スライド)+Flash(USTREAM)という形で作り変えています。

        リアルタイム同期機能の別アプリケーション化

        Node.js(Socket.IO)のサンプルアプリケーションでは、よく「チャットアプリケーション」がありますが、zenpre自体のNodeの利用方法もそれと大差ありません。

        スケールの方法についても一応方策にあたりをつけていますが、現在は1プロセスで十分機能しています。

        一つ特殊なことをしているとすれば、「リアルタイム同期機能」自体を別アプリケーションとして構築しているということです(つまり、Node.jsでは全く特殊ことはしていないということですね)。

        もっと言うと、

        zenpreはリアルタイム同期機能を自身で持っておらず、別のサービスと契約して実現している

        ということを社内でしているイメージです。

        その別アプリケーションは、今は”Sync.IO“という名前でよんでいます。

        なぜわざわざ別アプリケーションにしたのか?⇒Webアプリケーションに求められる要望の多様化に備えてみた

        プログラムでは、よく「汎用的に使うものはライブラリ化して分離する」ことがありますが、そのアプリケーション版の考え方です。(「汎用的に使うものはアプリケーション化して分離する」)

        弊社では受託開発も多くやらせていただいていますが、

        Webアプリケーション(社内業務システムなど)だけで考えても、

        クライアントから求められていたり、逆にこちらからアピールする価値は
        「ブラウザから操作できますよ」という初期の単純なものから、

        • 帳票も出力できます(Excel、PDF連携)
        • 画面遷移をせずに登録できます(Ajax)
        • 1日に一度統計を表示します(グラフ、バッチ処理)
        • サーバの負荷に応じてスケールアウトします(AWS)
        • データはクラウド上に保存しまう(AWS)

        など、どんどん変わってきています。

        そして、「リアルタイムに複数ブラウザで連携する」という機能が、今後、

        「『普通の』Webアプリケーションに求められることもあるのではないか?」

        と考えて、汎用的に利用できるリアルタイム連携の基盤としてSync.IOを作ってみた、という感じです。

        Sync.IOは何ができるのか?

        Sync.IOに似ている(?)サービスとしては、例えばFirebaseなどがありますが、Sync.IOはもっともっとシンプルです(そこまで機能がないとも言えます。)。

        Sync.IOが提供している機能は2つだけです。

        • Socket.IOによるブラウザ間のリアルタイム連携の基盤
        • 連携ログの保持

        チャットアプリケーションを例にとると、
        「チャットができる」「閉じたチャットルームを作ることができる」「権限のある人だけチャットで全員に発言できるように制限できる」「チャットのログをとれる」というような機能の基盤をSync.IOは提供します。

        もし、1からPHPでチャットアプリケーションを作りたいときは、

        • チャットアプリケーション自身のユーザ認証基盤の作成(PHP)
        • 認証されたユーザだけが見れるチャットページの作成(PHP)
        • Sync.IOへアプリケーション登録
        • Sync.IOのAPIと連携するサーバサイド(PHP)
        • Sync.IOのSocket.IOと連携するJavaScript部分

        だけ(?)で「リアルタイムチャット機能」が作れます。リアルタイムなNodeアプリケーションの構築も、クローズドなチャットルームの実現方法も、連携ログの保持方法も考える必要がないですね。

        ちなみに社内技術発表のときの資料にSync.IOの仕組みが少し載っていますので、よろしければご覧ください。

        Sync.IOの今後

        Sync.IOは今のところzenpreのバックエンドという立ち位置で、それで十分なのですが、実は今すぐにでも他のアプリケーションで利用できます。
        (ユーザ登録やFacebookのようにアプリケーション登録の仕組みも既に持っています。zenpreもただの1アプリケーションとして登録されています)

        まずは、zenpreでない他のアプケーションに組み込む機会を得て、zenpreだけではわからないSync.IOの課題点を探ってみたいと思います。

        まとめ

        zenpreがリニューアルしました!

        是非使ってみてご意見ご感想をいただければと思います!