LL Planets来たった
今日はLL Planetsに来てます。以下内容のメモ書き。Twitterやってないんでここに書くけど、ほぼリアルタイムで。
(2011/08/25追記:公式に当日使われて許可済みのスライドがまとめられていました)
メタプログラミングの光と影
基調講演:「JavaScriptプログラマのための全方位的完全武装ガイド」
- ma.laさん
- UIスペシャリスト→デザイナとプログラマの中間
- サーバーサイドを知らないとデザインができない!
- 広義のデザインとして人間側に最適化しる。
- 良いUIは伝播する。
- プログラマは自分の価値を落とす覚悟で!
- UIエンジニアは独りでWebサービス作る人が向いてる。
- サーバーサイドも知らないと、ダメなんで色々な言語を知る
- 昔はCが必須だが、今はJavaScriptがそれにあたるんじゃないか。
- jsのメリット
- 大抵の環境で実行
- ネイティブでも使われる
- jQueryは結構他の言語に似せる部分が少なく、独自。
- JavaScriptは他の言語のエッセンスを学べる!
- セキュリティ的にもJavaScript。
- 動的にjsを生成する事による脆弱性→やっちゃダメ!
- Webアプリは複数言語が当たり前。他のコンテクストで実行されるのを前提にする。
- sonyのXSSの指摘→まだ直ってないw
- EvernoteのXSSの指摘→CEOから刺身おごってもらう。
- 有名なサイトでも安全では無い。
- JavaScriptでクライアント側でパスフレーズを復号化する→サーバーサイドで漏洩しても分からない。
- LocalStrageでも出来る。
- これからのポリシー
- Don't be evilじゃなくIf we are evilで。
- jQueryではCSSセレクタをHTML要素が生成される→1.6.3で修正予定。
- UI/API設計→フールプルーフ
- jQuery Mobile→外部ドメインのURLを読み込んで表示可能だった…
- 著名ライブラリの検証する人が少ない。
- サーバーサイドでは非同期処理はあまり普及してない。
- 重い処理するとすぐに死ぬ
- UIスレッド分離・web workers
- 関数型言語ではメッセージパッシングで分散処理できる→別のネットワークで関数評価しても結果は同じになる。
- 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
- 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のコールバック地獄はどうするの?
- まとめ
- C++使ってる人はチャンス!
JavaScript八面六臂
-
- 白井さん
- 最近はコミュニティ運営に軸足
- 増井さん
- 風呂グラムのせいで、Macbook Airが壊れるw
- 篠崎さん
- JavaScript三昧なんで、実装とかの方まで手を伸ばしてる
- Ryanに会った際にbad at mathのハンドルを言ったら残念な顔をされたw
- JavaScriptでリアクターの研究してた関係で、node.jsに手を出す
- 和田さん
- 本業はRails
- JavaScriptのテスト関係
- なぜ今jsなのか
- ブラウザで動作するから
- HTMLがアプリケーションプラットフォームになるから
- Appleの規約上C、C++、Objective-Cとjsしか使えない
- jsのパフォーマンスの向上
- 言語仕様の小ささ
- スクリプト言語の中ではV8は他の言語に比べても速いんじゃないか?
- 言語仕様が小さい為に、最適化がしやすい
- 意外に奥深い→高階関数とかクロージャとかあったりする
- 言語として面白い
- jsで嬉しいところ
- インストールがいらないので、開発ハードルが低い
- 女の子に教えると親密になれるwww
- 色んなエンジンがあるので他の言語に比べて競争が激しいのでパフォーマンスの向上などで良くなる
- ビット操作・バイト操作が結構弱い
- 古いブラウザのサポートが面倒…
- jsの自由さが良くもあり、悪くもある
- コールバックスタイルはどう?
- コールバックは地獄だぜぇーハッハッー
- コールバックしつつ、トランザクション処理とかマジ地獄
- 解決策としてはやっぱりweb workers
- commitしてたpromiseがバッサリと切り落とされた増井さんカワイソス…
- 結局慣れじゃない?色々なライブラリでも実装同じ事してるので
- 頭を左に傾けるとちゃんと見えるよ!w
- コールバックの難点は一番はエラー処理・テスト関係
- node.jsは特にコールバック先でエラー処理を入れておかないとデッドロックしちゃうよ
- jsDeferred使って直列化
- 使う・使わない部分を切り分けておく
- クラスベースって必要?
- jsの開発環境
- emacsでガリガリしてるのでIDEとかいらない(白井さん)
- Emacs使ってたけど、最近はTitanium Studio使ってる(増井さん)
- Vimでガリガリ(篠崎さん)→タブ2つと全画面でやりたいので
- コールバックあるとどうしても広い画面で見たい
- 宗教上emacs(和田さん)
- Web Stormも使ってる→ブラウジング機能とか重視して
- jsの解釈が素敵
- gitのサポートもIDEが進化してきた
- Web Stormも使ってる→ブラウジング機能とか重視して
- Titaniumの開発はnode.jsでUnitTest使ってる→一々コンパイルとかしないで済むので素敵(増井さん)
- IDEは補完というよりもコードの意味を追っていくときに便利→Web Stormはそこら辺も優秀
- jsのチーム開発
- 記述の自由さがネック
- コーディングスタイルの統一
- テストを重視する
- クラス、プロトタイプなどが混在するのが大変
- ちゃんと設計をするのが重要
- モジュール化重要
- やっぱりテスト重要
- 記述の自由さがネック
- jsの学び方
- 学習するサイトがあると良いね→jsdo.itとか
- ロジックや仕様よりも最初は動くというのが重要
- CUIの実行環境を探す。
- 他言語から来る場合はコマンドベースで実行するのが良いし、初心者の人はブラウザが良いかもしれん
- 学習するサイトがあると良いね→jsdo.itとか
- jsでのオススメ本
- Good Partsが他言語から来た人にはオススメ
- サイ本は2/3冊目じゃないか→厚過ぎるw
- PatternはアクもGood Partsより弱いので良いかも。
- サイ本よりも読み易いよw
- Test-Driven JavaScript Developmentはテストについて網羅してるのでオススメ
- 日本語のテストの情報が少ないよね…
- Kindleでも読める
- 1冊目は他言語であればGood Parts、prototype.jsなんかはコードリーディングに良い。jQueryは魔術的なので中級者向き。
- jsの情報源
- jsの求人情報
- HTML5というよりJavaScriptの求人が多いらしい
- jsの今後
- 白井さん
休憩時間にid:Yamashiro0217先生とお話。Twitterやめてから大分たってたんだけど覚えててもらって良かった!
後、「詳細 正規表現」買った。10%オフで消費税分もオフ。お得な上にTシャツもらった。
IPv6ハッカソン結果発表
そろそろMBAの電池が切れる…かゆ…うま…
(2011/08/21 追記)イベントから時間が経ってしまいましたが、続きを書きます。記憶で書いてるので間違いとか
あるかもしれませんが…。
LT
発表順です。概要は下記URLを参照してください。
Lightweight Language Planets : Lightning Talk
- co1rowさん
- javascriptでブラウザネイティブネットワークオンラインアクションMORPG(長いよ)
- 江木さん
- 俺の最強言語Egison
- Programming Language Egison
- 関数型言語
- ポーカーの役とか麻雀の役とかを既存のプログラム言語で表現するのが難しい
- 考えたアルゴリズムをそのまま表現できる言語を作ってみた
- カッコを4種類とか凄い
- EmacsでEgisonモードができてたのも凄い
- 俺の最強言語Egison
- 桑田さん
- 文字列連結のベンチマークをいろんな言語でやってみた
- 文字列結合のベンチマークをいろんな処理系でやってみた
- 色んな処理系でベンチマーク
- 結論としてはnode.js(V8エンジン)最強
- ytakeuchさん
- kwappaさん
- Rubygemsで悪ふざけ
- RubyGemsでわるふざけ
- Constellation改めConstなんとかさん
- ECMAScript5処理系作成 + VM化
- LLPlanets slide
- 最初からハイテンション、最後までハイテンション
- ECMA愛に溢れてました
- udzuraさん
- remoreさん
- レッツ!Google Apps ScriptでTDD
- レッツ!Google Apps ScriptでTDD(仮)
- まさかのVBA
- 時間ギリギリで、テストが終ったのがアツい
- 超頑張ればGoogle Apps ScriptでTDDも可能…なのか?
抽選会&閉会式
- ボール投げで抽選会(毎年恒例らしい)
- エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)を貰った!ありがとうございます。
- 積ん読が増え…ないように頑張ります
- 最後はリアルタイムに撮った写真が入ったビデオを流しながら閉会
出演者・主催者・参加者のみなさん、お疲れさまでした!