Cross 2014

CROSS 2014 | エンジニアサポートCROSS2014 に参加してきたメモ

アセンブラ短歌×バイナリかるた

  • バイナリカルタで8枚とれた

実況解説つき!ペアプロでわかるJavaScriptテスト入門

ペアプロ + 解説実況

  • 今あるDOMScriptingについてのテストを書いていく
  • jQueryのコード

テンプレート

  • kyo-ago/cross2014

  • testem を使用

  • よくあるjQueryでクリックした何かするみたいなことに対してのテストを書いていく

  • updateLabel という関数を呼び出されたかをテストする

testem

  • npm install -g testem
  • mocha
  • expect.js

JavaScriptのテスト

  • 少し前は書きにくいと言われてたけどツールが発達した
  • jQueryでボタンを叩いたら updateLabel()が呼ばれる事をテストする
  • sinon.jsでstubする
  • setup.js の方にテスト用の関数をexportしておく
  • window.testInit というのをsetupでテストダブルしておく

Sinon.JS

非同期コードのテスト2.js

  • sinonのFakeTimerを使ってsetTimeoutをテストする
  • 非同期のテストを書くときにFakeで潰すかstest runnerの非同期サポートを使う方法がある。
  • 同期にしてしまったほうが単純で早い。
  • mochaのdoneでの非同期テストは実際に非同期で待つのでその分テスト時間は増える

Ajaxのテスト 3.js

  • 実際のXHRをFakeしてレスポンスを作って返す

テスト文を日本語で書ける

  • 日本語書ける場合は書いてもいいぐらいな感じ
  • チームによる

言語CROSS

Delphi

  • DelphiはPascalベースなので簡単に学べる
  • 以下の環境のものが作れる
    • Windows
    • OSX
    • iOS
    • Android
  • RADなので、簡単にUIを作れる

言語

  • Delphiといった場合は開発環境
  • Delphi Language というと 言語 のこと
  • C++っぽいけど結構違うsyntax
  • 型の位置が逆と覚えれば読める!!

Clojure

  • Lispは神の言語
  • -> 人間には神の言語は扱えない
  • -> 人間が選んだのは30億のデバイスで動くジャバ
  • -> 2つが手を組んだのがClojure

clojureにはcarやcdrがない

  • わかりにくいものをなくて読みやすくする
  • [] -> Vectore
  • {} -> 連想配列
  • 括弧の種類が補充された
  • List処理系にライブラリがない問題をJVMを使うことでやる
  • altJSとしてJavaScriptで動く処理系もある
  • ClojureはLispに近いから使ってわけじゃなく、人間が作った遺産(JVM)に乗る方向

F

  • .NETを使った言語
  • C# , VB のnextてきな感じ
  • OCaml.NET
  • 研究プロジェクトから生まれた言語
  • F#には演算子のオーバーロードがある
  • Windows上で動く関数型言語
  • 代数的データ型/レコード型
  • 型推論とかそういうのもあるので型強いし書きやすい

Haskell

  • Haskellは数学
    • 型理論
    • 圏論
  • Haskellは数学力が必要
    • Haskellで数学を学べる
  • 型が強いのでコンパイル成功したもののバグはかなり少ない
  • 高い抽象度 – 数学は抽象化の言語
  • モナドとは何か – Haskellの最初の壁
    • 手続きの一般化

Smalltalk

  • 昔は遅くて高かった
    • 今は軽くて、オープンソースの処理系がある
  • 何がいいのか?
    • 小さい – 覚える事が少ない
    • 垣根がない – SmalltalkはSmalltalkで言語自体も変えられる
    • ライブ – 常に動いてるオブジェクトメモリを元に開発をススメる
      • 動いてるプログラムをいじっていく
  • Smalltalk = Objective-C – C

課題に対して各実装をしていく

  • じゃんけんに対する関数を定義していく課題

Clojure

  • Prologの話をしよう
  • ある要素と要素の関係を記述するためのプログラミング言語
  • それらの関係から何が導き出せるかを判別してその値を返せる
  • ある関係性を示せれば、後は推論でいける 
  • 論理型プログラミングはグラフデータベース に近い
  • じゃんけんも関係性さえあれば、簡単に書ける

論理型プログラミング

  • JavaScriptは最も誤解された言語と言われてたけど、場所が見つかって突然復活した
  • 関数型というパラダイム現在復活しつつある
  • LispもJVMの力をかりて復活してきてる
  • 論理型プログラミングはまだ活動領域が見つかってないので、可能性が見えてない

Delphi

  • GUIでアニメーションも簡単に作れる
  • GUIで置いた要素は published というものなって、コードのほうにも出てくる

F

  • 代数的データ型で勝敗の型を定義してる
  • パターンマッチで勝敗を決める
    • 勝敗が全部列挙されてない場合はコンパイルエラーになる

Haskell

  • $ も関数

Smalltalk

  • オブジェクト指向でやるじゃんけん
  • じゃんけんの関係を 勝つ/負けるクラス として導入する
  • 宣言的な感じでかなり見やすい書ける
  • SeasideへGO!!(第1回)
  • Webアプリとして動かせてて、動的にコードも書き得られる
  • メソッド単位でバイトコードができて、バージョン履歴もIDEに含まれてる

Smalltalkのお題

  • 実行中の全てのオブジェクトを取得をするには

Smalltalk では Object allSubInstances の1行で取得できる

  • 95万のオブジェクトがいる

Delphi

  • TObjectの派生クラスの全インスタンスを計算すれば出せそう

Clojure

  • Clojure に置けるオブジェクトとは何か?
  • グローバルな環境においてバインドされている関数をすべて答えよ と解釈
  • ns-map を使うとビルドイン関数を取り出せる
  • ClojureのREPL上では703コの関数が参照できる
  • https://twitter.com/uochan/status/424089761939488768

F

  • 無理です
  • GCが確保してるメモリのサイズを見た

Haskell

  • ナイヨー

Haskellのお題 – 数式パーサの実装

  • 文字列のパースについて
  • 小さな単位を組み合わせて行く

Delphi

  • 逆ポーランド法
    • 数式を逆ポーランド方に変換して処理できるようにする
    • 括弧の中身を再帰して、値を出していく
  • delphiでは end. というのプログラムの終了を示す

Clojure

  • insta paraser
    • token と 優先順位を指定すると簡単に組み立てできる

F

  • Haskellみたいのはある
  • パーサーは特殊な才能が必要
  • アクティブパターン
    • 通常のパターンマッチは型定義によってやる
    • パターンを関数定義することができる

Smalltalk

  • PetitParser
    • オブジェクトを送るとパーサーとなる
    • asParser
  • PetitParser Browserで情報を色々見れる
    • プロファイリング
    • オブジェクトのグラフ
    • パーサが行われてる順番とかバックトラックも見られる
    • パーサーを元に自動的に例を生成出来る

おわりに

  • バイナリカルタなんだかんだ一番よかった感じがする。

メモ : Markdown Life