LL Planets殴り書き
http://ll.jus.or.jp/2011/◯IPv6
IPv4枯渇
World IPv6Day
一般人がWebサクセス出来る
何も設定しないとIPv4でしか使えない
IPv6が使えないのもある
v6→マルチキャストがあっておもしろい
ハッカソン→ハック+マラソン
◯メタプログラミングの光と闇
司会:西村さん(ぎっくり腰)→柴田さん
Perl 牧大輔
Ruby 角正則
Python 小泉 いつもPHP
Haskell 山本
プログラムを作るプログラム
広義
機械的にコード生成
キーワード入力
狭義
DSL、アジャイル、テスト
スタイルが確立している中で
・Perl
プログラムを生成するプログラム
evalとか、DSLを作るとか
文字列を作ればいつでもeval可能
普通のクラス
動的にeval()
グロブ・グローバル変数制御
grobに無名関数を突っ込んでしまえば
MOPは本体にない
言語にないのは作る Moose
extend hasなどを定義してクラスを作れる
Mooseメタクラス
・・あとはWebで
5.16を入れるみたいな話
プロトタイプ
メタプログラミングは必要な時が来たら
YAPC ASIA 10/13,14
DSLの種類
・外部DSL
・内部DSL
・言語ワークベンチ
CucumberのCherkin記法
ActiveRecord ORマッパー
名前重要文化
新しい文法は導入しない
マクロ
大クラス主義とMix-in
compile() astモジュール
言語ないDSL
Pythonは言語ないDSLが苦手
演算子オーバーロードが可能
いくつか使えそうな言語構造
who構文
言語内DSL
Pyjjamas Python→JavaScriptのコード
GoogleのGWT日会
・Haskell
全ては式
Haskellではコンパイルはテスト
コンパイルが通れば型安全
QuickCheck
Yesod
◯なぜメタプログラミングが必要か?
・Ruby
Railsがやっちゃった
ユーザが増えた
Railsな人たちとそうでないとかの温度差
程度問題
・Perl
やる人は苦労
やらない人は必要性を感じない
C++はテンプレートが成功
Lisp 関数が出来なければマクロを
静的言語の仲間 Java
クラス定義のもう少し上のところで
メタプログラミングはかっこいいという理由でかかない!
DSLやをフレームワーク書きたい時
静的言語、動的言語
Haskellボイラープレート
new 魔法
育てて
Haskellを勉強してもテンプレートHaskellは勉強しなし
パーサーは最後の手段
入力値によってメソッドを自動生成
事前に仕込んでおく必要がある
→ライブラリを作るとき
予め網羅できない
printfは変数が可変長
黒魔術
テンプレートHaskellがなくてもつくれる
引数をリストにする
■JavaScriptプログラマのための全方位的完全武装ガイド
ライブドア ma.la
良いJSプログラマは浮気性
最近はメインの言語がJavaScript
UIエンジニア
エンジニア視点でデザインできる
自分の仕事がなくなるまで機械に自動化
JSしか書けないエンジニア サーバーサイドの知識
CPUもSQLも遅い
その場で実行して確認
人のソースいじる
高レイヤーには高レイヤーのが見える、低レイヤーには低レイヤーがみられる
低ティブアプリでもHTML+CSS+JSは使われている
jQuery/JavaScriptらしい
サーバーサイドjsの
クライアントサイドとのノウハウの共有
覚える言語が一つ デメリット
beyond.js 奇妙なライブラリ
関数型言語の影響を得ている
JSのキモイライブラリを読むことで他の言語の勉強になる
セキュリティ
JavaでJSコード、PHPでJS、JSでJSコード
他の言語で動的に作る、やってはいけない。
危険なエラーになる
→JSONのデータを出力
.html→XSS
store.playstation.comのCSS
onclick=""〜〜
バックスラッシュの
ソニーの脆弱性
Evernoteの事例
JS動的生成
CEO
・LastPass
500ドル
iframe埋め込み前提のコンテンツ+クリックジャッキング
ブログパーツ 第三者の提供するリプと実行
Evernote
インライン暗号化
一部を暗号化
HTML5による標準化
lovcalStrage, postMessage
APIレベル
Don't be evil
If we ae evil
JSON with Padding
外部URLから撮ってきたJavaScriptを実行
eval(〜〜)
CCSSセレクタだと思ったらHTML要素生成
http://ma.la/jquery_xss
仕様じゃね→驚き最小の原則に反する
フールプルーフとか
フェイルセーフとか
ユーザーが何があっても
jQuery Mobile
外部ドメインのURLでも読み込んで表示可能
任意のJS実行
→修正される
著名ライブラリの脆弱性
→検証する人少ない
→赤信号みんなでわたってみんな死ぬ
Webアプリケーションのための
同期、並列
サーバサイドで非同期しょりは余り普及してない
特殊なケースだけ
Perl/Coro
RUby/FIber+NeverBlock
透過的なI・I多重化イベント駆動の〜〜
メッセージパッシングによる分散処理
アクターモデル Erlang,Scala
セアードナッシング
CPUコア数に合わせtえ性能が向上する
110820
一つのプロセスで強調動作する
Webアプリケーション本体
1つのプロセス内で共有できるリソースの割合がキモ
基本的には単純なマルチ
複数リクエストにまたがって
「状態おを共有すること」に強い意義があるケース
全部非同期I/Oで
AnyEcaent、Coro、Node.js
シングルプロセス+イベント駆動のメリット
今まで出来なかったことが出来る
黒魔術/継続 in Web Application
1プロセス内でのWebアプリケーション
AE:イベント駆動/Callバックスタイル
Coroコルーチンの実装
Deffered、Promise
内容が見確定のままオブジェクト
コールバック
最適なアーキテクチャの選択とは
やり方はたくさんある
「選択肢」を増やそう
「最適解」を選ぼう
今まで分からなかった言語
巨大企業による独占やロックインからの会費
クライアント
世の中をハックしやすいように保つ
Node.js特集
2011年8月XXに発売
Perl AnyEvent Coroについて
mala
@blikneets
@bad_at_math
Ryan Dahl
イベントループノンブロッキングIO
イベントループモデル
思い処理があったら返ってきてから処理を行おう
ノンブロッキングI/O
→プログラマが見極めるのではなく、強制的に非同期
ノンブロッキングなAOI
DBアクセス
→結果を待たずに次の処理
Because nothing blocks 〜〜〜
標準入出力のしようがない
すべてノンブロッキングな世界を作り上げられる
V8 Engineが爆速
・適した分野
リアルタイムWebアプリケーション
クローラー
スクレイピング
HPのwebOS→死亡
DeNAのSDKngCore
すフトウェアデザインでNode.js
JavaScruitにsleepがない
スリープソート短すぎると逆転する
10ピコ秒単位
◯おおたに
Python:Twisted
はやらなかった?
→Twistedのオライリー本
イベント駆動型ネットワークプログラミングフレームワーク
直交性
低レベル〜高レベルのAPI
マルチプラットフォーム対応
複数のイベントループのサポート
セカンドライフで
gevent
Firefoxのsyncサーバ
Perl スレッドが腐ってる→anyイベント
なび
bit.ly/eventmachine
EMは1.9時代
・課題
コールバックスパゲティ
IPv6対応
ワープロック EventMachineと羅列されてた
→フォークされて進んでない
OpenSSLの中で使う
非同期I/O
iPhone、ジェネレータある
JSののsleep()はCPUを100%にする
yield Firefox 1.7以降
ブラウザに処理を一旦戻すといい。
yieldは凄いが、FireFoXでしか
Node.jsで拡張はできるか?マルチスレッド
サードパーティである
v8-juice v8のライブラリ
jsthread
ascync js コールバック地獄にみせかけないようにする
ECMAScript。一文字で無名関数が出来るらしい。
Perlとかは手続き型的に書くのが普通
Node.jsは言語の実装。
作者はC++プログラマ、JSのは知らない。
ライアンのHTTPパーサ
インクリメンタルパーサ
→遅い
他の言語と比べたら遅いのでは?
5.4くらいからHTTPパーサが他の人が作ったのと変わった
0.4.11が最新
スタットレスPython
CPU食ってる途中に挟み込む
プロプレイたりOracleは対応が遅れている
ポスグレはasyncが対応している
MySQLは対応してない
Ruby、EM
スレッドプールで動かす
ファイバーを使う
Railsが対応してないのでデファーしたのに壊れる
これからはマルチコア
あまりNode.jsに入りたくない。
→サーバサイドに
言語統一理論は??
クライアントサイドか分からない
ngMoco どっちも使えるから。
JSが得意でなくてもC,C++が得意ならNode.jsに!
◯JavaScriptの八面六臂
・高橋
・白石
・HTML5 Developrs JP
・篠崎 DeNA
・Blog名 Bad at Mathで失敗した
札幌JS
テストJS
jsテスト放浪記
ブラウザでそのまま動く
インストール不要のWebアプリ
HTTML5になって、 Web文章のプラットフォーム→アプリケーションフレームワーク
TitaniumがJS使うのは、Web開発者が参入しやすいように。
Appleの製薬でC、C++、ObjectiveC、Apple製JavaScript
パフォーマンスの向上が。
ブラウザ上のJS。
スクリプト言語の中では、JS最高。
ベンチマークによっては一概には言えないが良い線を言っている。
動的のエンジンの最適化を押し込めている。
言語仕様が小さいのは最適化。
柔軟性、いろんな言語を取り込んできた。
教える上で、インストールが要らない。
流派に染まらない
ECMA5
5.1が6月に出たばかり。
4がない??
10年前の仕様ECMA3に準拠した仕様が使える
ビットやバイトが使えない。
Cで書かなかった。
浮動小数点をJSで。
他の言語から手を借りないといけない。
オフラインアプリケーション
コールバック地獄
Webワーカーズ・・・HTML5の仕様
バックグラウンドで動き続ける
めんどくさいビジネスロジックはワーカーへ押し込む
webmessaging-rpc
コールバック・・・テストしにくい
デッドロック
ライブラリを使って書くべき。
脳に汗をかかずにやりたいのがJSプログラマの幸せな道
prototype.jsやbase.jsから始めた。
クラス志向よりオブジェクト指向
状況によりけり
人数が増えればクラス
継承っぽいのは6,7種類くらいある。
→ベースとなるライブラリを決める
コード解析
ECMAScriptにクラスが入るかも?
Mozilaが仕様をひっぱっている。
v4はクラスベース。
クラス志向の90%の理由はJava。
UIコンポーネントが必要になってくる。
タブはスペース2つ
vi
前進力はEmacs
影響範囲はIDEも
gitを使いたいからIDEが追いついている
テスト、軽さ
Nodeのユニットテスト
WebStorm 有償?
JSのチーム開発。
記述の自由な所がネックになる
コーディングスタイルを統一する
テストの確立を
できるJSプログラマがクラスを使わなかった。
クラスなところもありJavaScriptパーツなところもある混在。
モジュール単位で。
学習にはフィードバック
IREのような対話型。
Spidermonkey
新しく言語を学ぶとき 対象に対してどういうものか?
プログラマとして本気で学んで、コマンドラインでどうやって動くかを。
まずは対話型コンソールを探す。
JavaScriptのイロハ
2007年
良い本
JavaScript:The Good Parts グッドパーツがいい。一冊目。
サイ本は2,3冊目がいい。
JavaScriptパターン、サイ本より段違いにわかりやすい
CofeeScript
Test-Driven JavaScript Development 去年くらい?
コードリーディングも大事
→jQuery
→prototype.jsは読むだけで使わない
・JSのニュースが終える
reddit.com、ハッカーニュース
すごい人をフォローする
HTML5が山ほどある JavaScript
TitaniumもCofeeScriptをサポートする
I/Oがない。言語のコアがシンプル。
ライブラリ
jQuery
商用ライブラリ
管理画面、UIコンポーネント
esnext
・ハッカソン
参加者13人
秦野さん
トポロジ
CPAN AAAAがない
LDAPユーザエージェント
AnyEvent動くか? 動く
INET6もうごく
LWPは動かない
田村謙介
ISP/iDC
$_SERVER['REMOTE_ADDR']
PHPのフレームワークのIPv6対応
1.CodeIgnotor
.で分割
2.Lithium
対応している
filter_var PHP標準関数5.2.0以降
4.Solar
△
バリデータは対応していない
filter_var()が凄い
◯TwitterにIPv6アドレスを
IPv4は24ホスト
アドレス空間が広い
Twitterは64ビットのID
Ubuntu 11.04 Server
http://goo.gl/RoiA1
web-socket
セッション張りっぱなしで
hack & slash
mongoDBで保存
ドキュメントDB
三層全てJS
最強言語Egison
修士二年
江木
ポーカーの役判定するぷとるガムを既存の言語絵記述するととても複雑になる
JIT版
・Rubinius
・PyPy
・LuaJIT
push(s,s,s);join('')
Node.jsはやい
Tenjin
テンプレートエンジン最速はJS
メソッド呼び出し遅め
演算子の情報を
ECMA262仕様
SunSpider
スタックVM
ADP言語
pebble
全裸にする rubygems
Acmeでやれ
hangover 二日酔い
ブロックがあって
DSLパターンに強い
AST変換
uPyhack
バージョン管理、テスティング、自動化