万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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