Life goes on

何かJavaScriptとかVimとかMacとかに関係してそうな深淵から覗かれる者

LL Planets来たった

今日はLL Planetsに来てます。以下内容のメモ書き。Twitterやってないんでここに書くけど、ほぼリアルタイムで。
(2011/08/25追記:公式に当日使われて許可済みのスライドがまとめられていました)

メタプログラミングの光と影

  • PerlRubyPython、Heskellでのメタプログラミングの紹介
  • Perlではあんまり、メタプログラミングは使わない印象だけど、パーサーまでメタプログラミングでイジる事ができる。
  • RubyrailsでDSLが爆発的に増えた感じ。元々RubyAPIは豊富にある。
  • Pythonも言語自体でサポートされている機能で内部DSLなどはできるが、外部DSLは苦手。
  • Heskellは、コードが分からなすぎてワロタ。だけど、関数パーサーなどは手軽に出来る。あと、型安全って良いですね。

基調講演:「JavaScriptプログラマのための全方位的完全武装ガイド」

  • ma.laさん
    • Livedoor UIスペシャリスト
    • Livedoor Reeder作ってる
    • セキュリティ監査なんかもしてる
  • UIスペシャリスト→デザイナとプログラマの中間
    • サーバーサイドを知らないとデザインができない!
    • 広義のデザインとして人間側に最適化しる。
    • 良いUIは伝播する。
    • プログラマは自分の価値を落とす覚悟で!
    • UIエンジニアは独りでWebサービス作る人が向いてる。
    • サーバーサイドも知らないと、ダメなんで色々な言語を知る
  • 昔はCが必須だが、今はJavaScriptがそれにあたるんじゃないか。
  • jsのメリット
    • 大抵の環境で実行
    • ネイティブでも使われる
    • jQueryは結構他の言語に似せる部分が少なく、独自。
    • JavaScriptは他の言語のエッセンスを学べる!
  • セキュリティ的にもJavaScript
    • 動的にjsを生成する事による脆弱性→やっちゃダメ!
    • Webアプリは複数言語が当たり前。他のコンテクストで実行されるのを前提にする。
    • sonyのXSSの指摘→まだ直ってないw
    • EvernoteXSSの指摘→CEOから刺身おごってもらう。
    • 有名なサイトでも安全では無い。
    • JavaScriptでクライアント側でパスフレーズを復号化する→サーバーサイドで漏洩しても分からない。
    • LocalStrageでも出来る。
  • これからのポリシー
    • Don't be evilじゃなくIf we are evilで。
  • jQueryではCSSセレクタをHTML要素が生成される→1.6.3で修正予定。
  • UI/API設計→フールプルーフ
  • jQuery Mobile→外部ドメインのURLを読み込んで表示可能だった…
  • 著名ライブラリの検証する人が少ない。
  • サーバーサイドでは非同期処理はあまり普及してない。
  • 重い処理するとすぐに死ぬ
  • 関数型言語ではメッセージパッシングで分散処理できる→別のネットワークで関数評価しても結果は同じになる。
  • NginxとかはCPUコアに応じてイベント処理
  • Coro/node.jsは目的特化したミドルウェアなど。
    • 黒魔術が使える
  • AnyEvent→Coroで手続き型でもイベント駆動
  • サーバーサイドjs→マルチプロセス時代にどうなるのか?
  • まとめ
    • やり方色々
    • 他の言語から学ぶ
    • マルチコア時代での分散処理は、アプリの性質によって選択肢が変わる
    • 他の言語やライブラリから今までjsできなかったものを学ぶ
    • ブラウザ自体を使えるCPUの一つとして見なして、コーディング。
    • クライアントサイドへシフトする事により、サーバーサイドのリソースを持たなくても大丈夫
    • ハックしやすい世の中に!

Node.jsとは何だったのか

  • Perl: AnyEvent / Coro について復習
    • 竹追さん
    • Coro::LWPは並列化したい処理をasyncで囲むだけ
    • AnyEventはイベント駆動に慣れたプログラマーが必要
    • Coroは普通の手続きでいけるので大流行
  • JavaScript: 10分でわかるNode.js
    • mesoさん
    • LL Planets
    • Ryan Dahlの目指したもの
      • 解決すべき問題を解決する
      • C10K問題の解決→Ajaxなどで出てきた
    • イベントループモデルを使う
    • 問題点
      • 1つでも重い処理があれば、シングルスレッドなので、全体の性能が低下する
      • ネットワークやI/O処理が一番負担
    • ノンブロッキングI/O
      • libevなどのライブラリで実現
    • JavaScriptであればノンブロッキングI/Oに合っている→標準I/Oライブラリが無い・無名関数やクロージャ・イベントループ
    • 適した分野
    • 実例
      • GitHubのファイルダウンロードサーバー
  • Python: Twisted と gevent
    • おおたにさん
    • Twistedがはやらなかった理由
    • Twistedとは
      • イベント駆動型ネットワークプログラムライブラリ
      • 複数の接続や、プロトコルを統一的に扱える
      • 複数のイベントループ
    • Twistedのプログラミング
      • deferredはTwisted起源
      • デコレーターとかも使えますよっと
    • gevent
      • コルーチンベースのネットワークライブラリ
      • libeventによるイベントループ
      • monkey patch使用によりsocket、thredの処理も可能
      • 実例として、firefoxのダウンロードサーバー?
  • Ruby: EventMachine について
  • パネルディスカッション
    • node.jsのコールバック地獄はどうするの?
      • async.jsとか使ってそれっぽく見せる
      • node.js本体にpromiseの仕組みを入れたり出したり迷走中
      • コールバックはあった方が逆に分かりやすいんじゃない?
      • 複雑な処理だとやっぱりツラい
        • deferredとか慣れとか
      • Rubyだとsyncronyというライブラリでイベントループなんかを上手く隠すプロジェクトがある→書き方でカバー
    • node.jsでもやっぱり別ワーカーにforkして渡して非同期にするみたいな形
      • c++での拡張で実現
    • RyanはJavaScriptを分かってないww
    • node.js標準のhttpのパーサーなどは結構速い?
      • Ryanが作ったパーサーはインクリメンタルパーサー(所々にコールバック仕込む)なので、もっと速くなる?
      • 0.5.4でhttpパーサーがRyanの実装から違う人のものに置き変わった
      • 0.5系はAPIレベルでガッツリと変わっている
    • node.jsではSSLも非同期に変えてる→node.jsでは速度よりも非同期重視か
    • 非同期かCPUリソースかのトレードオフ
    • DBへの接続の非同期対応はどうする?
      • node.jsはPostgresDBはAPIがあるが、他のものは対応が遅れている(C使っての拡張)
      • PythonではPure Pythonで拡張
      • Rubyは別スレッドとfiber、ライブラリでの解決方法がある
      • node.jsの場合のマルチプロセスの場合はどういう解決する?
        • 1CPU毎に1プロセスが良い
      • node.jsはフロントから入ってくる人が案外少ないのは何んで?
        • クライアントでも腐る程書いてるのに、サーバーでも書きたくないww
        • 検索した時にどっちもjsだとサーバーなのかクライアントなのか分からんw
  • まとめ
    • C++使ってる人はチャンス!

JavaScript八面六臂

    • 白井さん
      • 最近はコミュニティ運営に軸足
    • 増井さん
      • 風呂グラムのせいで、Macbook Airが壊れるw
    • 篠崎さん
      • JavaScript三昧なんで、実装とかの方まで手を伸ばしてる
      • Ryanに会った際にbad at mathのハンドルを言ったら残念な顔をされたw
      • JavaScriptでリアクターの研究してた関係で、node.jsに手を出す
    • 和田さん
    • なぜ今jsなのか
      • ブラウザで動作するから
      • HTMLがアプリケーションプラットフォームになるから
      • Appleの規約上C、C++Objective-Cとjsしか使えない
      • jsのパフォーマンスの向上
      • 言語仕様の小ささ
      • スクリプト言語の中ではV8は他の言語に比べても速いんじゃないか?
      • 言語仕様が小さい為に、最適化がしやすい
      • 意外に奥深い→高階関数とかクロージャとかあったりする
      • 言語として面白い
    • jsで嬉しいところ
      • インストールがいらないので、開発ハードルが低い
      • 女の子に教えると親密になれるwww
      • 色んなエンジンがあるので他の言語に比べて競争が激しいのでパフォーマンスの向上などで良くなる
      • ビット操作・バイト操作が結構弱い
      • 古いブラウザのサポートが面倒…
      • jsの自由さが良くもあり、悪くもある
    • コールバックスタイルはどう?
      • コールバックは地獄だぜぇーハッハッー
      • コールバックしつつ、トランザクション処理とかマジ地獄
      • 解決策としてはやっぱりweb workers
      • commitしてたpromiseがバッサリと切り落とされた増井さんカワイソス…
      • 結局慣れじゃない?色々なライブラリでも実装同じ事してるので
        • 頭を左に傾けるとちゃんと見えるよ!w
      • コールバックの難点は一番はエラー処理・テスト関係
      • node.jsは特にコールバック先でエラー処理を入れておかないとデッドロックしちゃうよ
      • jsDeferred使って直列化
      • 使う・使わない部分を切り分けておく
    • クラスベースって必要?
      • 状況によるけど、ボトムアップでスクラッチで書く場合にはクラスは重い
      • 書く人間が多い場合は、クラスベースの書き方が良いかも→書き方のブレが少ない
      • 色々な書き方ができるので、どっちでも良いんじゃないのか?
      • 次期ECMA Scriptでもクラスベースの書き方が提案されている
        • Mozillaが現状ECMAを引っぱってるので動向読むなら
      • 現状のプロトタイプでOK
        • 他の言語に似てしまうので、思考が引っぱられてしまう
      • プロトタイプベースをこのまま洗練させるべきなんじゃないのか?
      • あれば使うし、無ければそれで
      • 今のUIプログラミングが良いのか判断ができない→DOM操作とかのやり方が大規模開発で使いにくくない?
    • jsの開発環境
      • emacsでガリガリしてるのでIDEとかいらない(白井さん)
      • Emacs使ってたけど、最近はTitanium Studio使ってる(増井さん)
      • Vimでガリガリ(篠崎さん)→タブ2つと全画面でやりたいので
        • コールバックあるとどうしても広い画面で見たい
      • 宗教上emacs(和田さん)
        • Web Stormも使ってる→ブラウジング機能とか重視して
          • jsの解釈が素敵
          • gitのサポートもIDEが進化してきた
      • Titaniumの開発はnode.jsでUnitTest使ってる→一々コンパイルとかしないで済むので素敵(増井さん)
      • IDEは補完というよりもコードの意味を追っていくときに便利→Web Stormはそこら辺も優秀
    • jsのチーム開発
      • 記述の自由さがネック
        • コーディングスタイルの統一
        • テストを重視する
      • クラス、プロトタイプなどが混在するのが大変
      • ちゃんと設計をするのが重要
      • モジュール化重要
      • やっぱりテスト重要
    • jsの学び方
      • 学習するサイトがあると良いね→jsdo.itとか
        • ロジックや仕様よりも最初は動くというのが重要
      • CUIの実行環境を探す。
        • 他言語から来る場合はコマンドベースで実行するのが良いし、初心者の人はブラウザが良いかもしれん
    • jsでのオススメ本
      • Good Partsが他言語から来た人にはオススメ
      • サイ本は2/3冊目じゃないか→厚過ぎるw
      • PatternはアクもGood Partsより弱いので良いかも。
        • サイ本よりも読み易いよw
      • Test-Driven JavaScript Developmentはテストについて網羅してるのでオススメ
        • 日本語のテストの情報が少ないよね…
        • Kindleでも読める
      • 1冊目は他言語であればGood Parts、prototype.jsなんかはコードリーディングに良い。jQueryは魔術的なので中級者向き。
    • jsの情報源
      • Reddit、Hacker Newsでニュースを追う
        • 言語仕様というよりも、環境になる(nodeとか)
      • 凄い人をフォロー
      • jser.infoを追う
    • jsの求人情報
    • jsの今後
      • 今後数年は流行る→他の言語と同じスパン
      • ブラウザの対応を見ると10年とかで無くならないと思うけど、coffee scriptのようなものが色々出るんじゃない?
      • パフォーマンスの大幅な向上はもうそろそろリミットになってるんじゃないか?
        • サーバーサイドの最適化はまだまだなので課題になる
      • jsが生き残った理由は自由さと言語システムの小ささがあるのでスポイルされない事が重要
      • CPANRuby Gemsのようなサイトが出るべき→普及の鍵になりそう
      • 言語の制約(IOが無いとか)が今のnodeの隆盛に繋ってる


休憩時間にid:Yamashiro0217先生とお話。Twitterやめてから大分たってたんだけど覚えててもらって良かった!
後、「詳細 正規表現」買った。10%オフで消費税分もオフ。お得な上にTシャツもらった。

IPv6ハッカソン結果発表

  • ネットワーク機器の説明
  • サーバーの説明
  • IPv6 onlyな環境でPerlを動かしてみる(Perlチーム)
    • IPv6 オンリーの環境を構築

そろそろMBAの電池が切れる…かゆ…うま…

(2011/08/21 追記)イベントから時間が経ってしまいましたが、続きを書きます。記憶で書いてるので間違いとか
あるかもしれませんが…。

    • Coroは対応してないっぽい?
    • Pythonチーム
      • IPv6のアドレス使って、グラフをプロットする?
      • 残念ながら、未完でした
    • PHPチームA
      • PHPフレームワークIPv6対応状況
      • 現状はちょっとしか対応してないらしい
      • ビックリしたのは、PHP本体で5.2からIPv6への対応する(?)関数が用意されてる事→1行の記述で対応できる
    • PHPチームB
    • Rubyチーム
      • まさかのPHPチームBのパク(ry + ASCIIにアドレスの下4ケタを変換してのポスト
      • 成果物の発表は無かったけど、他のプロダクトもあった

LT

発表順です。概要は下記URLを参照してください。
Lightweight Language Planets : Lightning Talk

  • co1rowさん
    • javascriptでブラウザネイティブネットワークオンラインアクションMORPG(長いよ)
      • 実際にプレイできるURLはこちら
      • node.js + Mongo DB + Canvasで作成
      • 全部jsで出来るじゃん
      • 会場では、すでに3人位プレイしててワロタ
      • 隠しキャラで、ガチャ○ンさんとか、僕と契約(ryとか
  • 江木さん
    • 俺の最強言語Egison
      • Programming Language Egison
      • 関数型言語
      • ポーカーの役とか麻雀の役とかを既存のプログラム言語で表現するのが難しい
      • 考えたアルゴリズムをそのまま表現できる言語を作ってみた
      • カッコを4種類とか凄い
      • EmacsでEgisonモードができてたのも凄い
  • 桑田さん
  • ytakeuchさん
    • LLでスマートフォンアプリ開発みたいな
    • Python + Arduinoとかで、手袋に付けたセンサーで、モニタの中のVF-25の動きをトレース!
    • すげー!でも残念ながら間に合わなかったそうで、未完でした
    • Google Open Call Android ADKの審査に通ったそうです
      • でもPyCon2011と間違えて応募されたそうですw
  • kwappaさん
    • Rubygemsで悪ふざけ
    • RubyGemsでわるふざけ
      • gemsでジョークのもの作るとマジメなgemsと一緒に表示されてツラい…
      • CPANAcmeと同じように、Pebbles使おう!→あんまり受けてない
      • anti-hangoverというgemsを作った
      • 二日酔いになるかの予想する
      • 発想が面白いw
      • 二日酔いは英語でhangoverだよ!
  • Constellation改めConstなんとかさん
    • ECMAScript5処理系作成 + VM化
    • LLPlanets slide
      • 最初からハイテンション、最後までハイテンション
      • ECMA愛に溢れてました
  • udzuraさん
    • Ruby厨の僕がGroovyをやってみた – あるいは新しくLLを学ぶ上で大事なこと
      • 他のLTは技術よりなので、精神論で
      • Rubyやってたけど、Groovyで開発する事になった
      • 他の言語を覚えると色々と捗るぞ
      • Javaも頑張ります
  • remoreさん

抽選会&閉会式

出演者・主催者・参加者のみなさん、お疲れさまでした!