万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

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

Ruby
内部DSLを使うこと

DSLの種類
・外部DSL
・内部DSL
・言語ワークベンチ

CucumberのCherkin記法

ActiveRecord ORマッパー

名前重要文化
新しい文法は導入しない
マクロ

大クラス主義とMix-in

compile() astモジュール

言語ないDSL
Pythonは言語ないDSLが苦手
演算子オーバーロードが可能
いくつか使えそうな言語構造
who構文
言語内DSL
Pyjjamas PythonJavaScriptのコード
 GoogleGWT日会

Haskell
全ては式
Haskellではコンパイルはテスト
コンパイルが通れば型安全
QuickCheck
Yesod


◯なぜメタプログラミングが必要か?
Ruby
Railsがやっちゃった
ユーザが増えた
Railsな人たちとそうでないとかの温度差
程度問題
Perl
やる人は苦労
やらない人は必要性を感じない

C++はテンプレートが成功
Lisp 関数が出来なければマクロを

静的言語の仲間 Java


C++はCのプリプロセッサの延長

PHPメタプログラミング自体の言語 HTMLを吐き出す

クラス定義のもう少し上のところで
メタプログラミングはかっこいいという理由でかかない!
DSLやをフレームワーク書きたい時

静的言語、動的言語

Haskellボイラープレート
new 魔法
育てて

Haskellを勉強してもテンプレートHaskellは勉強しなし

Rubyパーサー→正規表現
一滴バリュー表示?

パーサーは最後の手段

入力値によってメソッドを自動生成
事前に仕込んでおく必要がある
→ライブラリを作るとき
 予め網羅できない
 
printfは変数が可変長
黒魔術
テンプレートHaskellがなくてもつくれる
引数をリストにする


JavaScriptプログラマのための全方位的完全武装ガイド
ライブドア ma.la

良いJSプログラマは浮気性
最近はメインの言語がJavaScript
UIエンジニア

http://ma.la/

エンジニア視点でデザインできる

自分の仕事がなくなるまで機械に自動化

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


http://llpanets.mesolabs.com/

@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と羅列されてた
→フォークされて進んでない

RSAが遅いのはRubyの問題
スイッチするように→

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

・ますい
HTML5とか勉強会
PukiWikiなども

・篠崎 DeNA

・Blog名 Bad at Mathで失敗した

札幌JS

ラプラス JSONの生みの親

Railsプログラマ
 自社製品
コードの半分はJS

テストJS
jsテスト放浪記

qUnit jQuery

ブラウザでそのまま動く
インストール不要のWebアプリ
HTTML5になって、 Web文章のプラットフォーム→アプリケーションフレームワーク
TitaniumがJS使うのは、Web開発者が参入しやすいように。
Appleの製薬でC、C++、ObjectiveC、AppleJavaScript
パフォーマンスの向上が。

ブラウザ上の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以降

3.
Symfonyコンポーネントを内部で

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

VBA

バージョン管理、テスティング、自動化

Google Apps JavaScript