スッパ村

スーパーハッカソン2013に参加した。
http://super-hackathon.net/
賞を貰えたりはしなかったが、非常に面白かった。
なんというか人狼BBS系のゲームを思い出した。
別にチームメンバーが一人ずつ処刑されたり人狼に食われたりとかはしないけど、

  • 「一人参加の場合、チームメンバーは基本、知らない人と組む」
  • 「チームメンバーがそれぞれ持つ能力で役割分担」
  • 「平日の深夜にネット経由でみんなで方針相談」
  • 「期間が一週間ぐらいに限られており、その間はチーム内で行動」
  • 「胃に悪い」
  • 「終わったらみんなでエピローグ/懇親会して騒ぐ」(残念ながら自分は他予定の為、今回の懇親会は不参加だったが)

といったあたりが人狼BBS系のゲームをやってた頃の感覚に非常に近かった。
しかし一番大きい要素は、自分が所属させていただいたチームjsdokushoのgoogle docs上のドキュメントの一番上に「スッパ村」と書いてあった事(多分チームリーダーの横田さんが書いたんじゃないかと思う)。これを見て「ああ、村なんだな」と自分は認識した。



で、スケジュールが合えば次回も参加したいと思うので、今回やってみて得られた進行の流れやら、攻略ポイントとかを忘れない内にまとめとこうと思う。
どのアプリがよかったとか、Twilioすげーとか、その辺もびっしりメモに書いてるけど、そのあたりはきっと他の人も書くと思うので自分の分は省略。

以下は山田の個人的な感想、うろおぼえ記憶、妄想なので、実際には役に立たなかったり、実際とは違っていたりする可能性があります。何もかも無保証です。

続きを読む

関数型言語勉強会 大阪 #2 行ってきた

土曜に!
今回はプレゼン内容とかは普通に公開されてると思うので、プレゼン資料にない質問とか感想をメインにメモを写す事に。内容自体については他のまとめとか見てください。

全体的な感想とか

  • 面白かった!第一回がすごい「こわい」らしかったのでどうなるかと思いきや、第二回はその反動か「こわくない」方向に行ってたようだった。
  • 適当に空いてる席に座ったら、隣が村主さん、斜め後ろがいけがみさんだった。村主さんといけがみさんはすごいH本の話されてた。村主さんと話できてよかった!
  • ぽんこれさんとちょっと話した。いかっつぁんさんも来てた筈だけど人の顔をおぼえるのが苦手で見付けられなかった…。

オープニング

  • 極簡単な挨拶ではじまる。

乙女ゲーを支える技術

  • 別勉強会でやった内容と基本的に同じとの事。
  • 内容も話も面白かった。
  • 質問:プレゼンどうやって操作してるの?
    • 回答:後ろに持ってるiPhoneでページめくり。乙女ゲーのデモは事前に録画したもの、との事(リアルタイムに乙女ゲー操作はしてないとの事)
  • 質問:入社二日目からこのプロジェクト参加という事だが、入社前からフリュー社でそういう企画が立ち上がってたのか?
    • 回答:yes。みんなJavaでの開発に限界?を感じていて、そういう企画が立ち上がった、との事
  • 質問:Scalaに移行した際のテストコードとかはどんな感じ?
    • 回答:テストツールはJavaのとあんまり変わらない感じ?特にScalaだからうれしいという事はなかったそう
  • 質問:フリュー社的には今後Scalaになりそう?
    • 回答:yes。とりあえずソシャゲーのバックエンドはScalaとの事
  • 質問:今後どれぐらい長くScalaを使いそう?
    • 回答:(この質問への回答は自分のメモが曖昧で@daiksyさんの回答と微妙に違うかも、違ってたらごめんなさい)会社的には、Scalaが時代遅れになるまで。個人的には、飽きるまで?
  • 質問:このプロジェクトは成功した訳だけど、この成功の要因は「Scalaを選択したから」ではなく、他の要因(ペアプロとかメンバーの士気とか)による成功では?
    • 回答:そうかも。(もっと色々回答されてた筈だけど自分のメモにはこれだけしか残ってなかったすいません)
  • 質問:全員で統一をとるのはどうやった?
    • 回答:規約を決めてそれを守るのではなく、全員が設計に参加する事で統一を取った。全てのメンバーが、「この部分は自分は知らない」という事がないようにした。

OCamlでpfffを拡張

  • pfffは「ぷふ」
  • 「pull-reqしなければどうということはない!」
  • エア参加!
  • 内容は自分も実感してる事であり、話も面白かった。

JavaからScala

  • 質問:オススメ学習リソースにあったオンライン講座は英語?
    • 回答:yes。けっこうなまってる。フランス語圏の人らしい

PythonistaがOCamlを実用する方法

  • 質問:(OCamlからPython呼ぶのは)OPyCamlでもできると思うけど?
    • 回答:OPyCamlも試したけど、依存するものが多かったので…perlとか必要なので
  • 質問:FFIする時にPythonOCamlでIntの大きさ(bit数)ちがうと思うけど大丈夫?
    • 回答:今のところ対応してないとの事。pythonだと標準で多倍長

F#とErlangで簡単なゲームを作ってみている

  • 話面白い
  • TDDブートキャンプ大阪3.0 2013年1月12-13日
  • 「Expert F#」本の読書会の紹介
  • 質問:自己紹介のところで「関数型言語で人生変わった」ってあったけど、具体的にどうなった?
    • 回答:とある名古屋でTDDのイベント行ったら、色々とすりこまれた…
  • 質問:Erlangどうよ?
    • 回答:まだ使い始めて一ヶ月ぐらいなのではっきり言えないが、動的型付けでコンパイルできてビヘイビアがあってサーバを書きやすいところが良い
  • 質問:自己紹介見てるとメジャーな関数型言語を色々やってるけど、マイナーな関数型言語はどうですか?
    • 回答:今SML#やってる、あとCOQやりたいと思いつつ時間がない

Scalaはじめました!

  • Scalaビギナーズ」勉強会やります。会場オオサカンスペース。裏に「SCALA」という店あり
  • 質問:どれぐらい勉強すすんだ?
    • 回答:コップ本読み進め途中
  • 質問:SCALAで何食べた?おいしかった?(お店発見者からの質問)
    • 回答:イタリアンの店だった。昼にグラタン、サラダを食べた、美味しかった
  • 質問:どの辺でつまづきそう?
    • 回答:まだそこまですすんでない。でも最初から全部Scala的に書こうとすると挫折するかも?

Better C# の脱却を目指して

  • 「名古屋(こわくない)」
  • 「|||>」演算子は「パイプラインえんざんしさんぼんばん」と読まれていた
  • NGK2012B 名古屋 12/8(土) いろんなコミュニティの人が集まる、午前はLT、午後は忘年会
  • 質問:結局引数順を間違う可能性はあるのでは?
    • 回答:(数は少なくなるので…という事を質問者が理解したのか、質問は途中で終わってしまった)
  • 質問?:C#とF#での型定義の意識の違い。C#だと使い捨ての型定義をしづらい、#Fだとそれが使いやすい
  • 質問:型とインターフェースはnearlyだと思うけどどう?
    • 回答:こわい人がいるので厳密には違うんだけど、ニュアンス的にはnearlyでいいと思う。でもJavaのインターフェースとはnearlyではない
  • 質問:F#の型定義のコードで「type Wheather = Sunny | Cloudy | Rain | HeavyRain」ってなってたところがよくわからない
    • 回答:これはF#独自の機能(ちょっとこの質問のところはメモが曖昧)
  • 質問:なんでstaticにしてるの?
    • 回答:F#のなんかいろいろ都合で(メモしきれてない)。こうする事で名前空間を綺麗に保てる

Haskell入門書を読んだその後は

  • 「フグれ!」
  • 明石Haskell 第二回 12/16(日) 会場は明石駅すぐ近く
  • 質問:懇親会は明石焼き
    • 回答:食べましょうか?第一回でも食べたけど
  • 質問:明石の人多い?
    • 回答:大阪の人が多い、明石姫路もちらほら
  • 質問:初心者の人への対応とかどんな感じ?
    • 回答:手取り足取り的な
  • 質問:Haskell興味あるけどやった事ない、みたいな人が来てもok?
    • 回答:まだ第二回の内容が決まってないので、それ次第?

たのしい高階関数 λ

  • 第一回の続きらしい
  • 「mapはベホイミベホマラーにできるもの」「filterはレベル5デス」「fold系はキングスライム
  • 質問:リストの図のtail部がNILを含んでない
    • 回答:後で直しときます
  • 質問:foldlとfoldrのスタックオーバーフローするしないの話
    • 回答:正格評価のScalaと非正格評価のHaskellで違う、Haskellはfoldl'がある、的な話だったと思う確か

JavaScript関数プログラミング

  • JSにはカリー化専用にbindというmethodが関数にあるという事を初めて知った

いけがみさん告知

  • 1Fの本屋ですごいH本売ってるよ!おみやげにどう?
  • このすごいH本の勉強会が来週(もう今週)の金曜にあるよ。もう満員だけど、Lingrで夜の部をやるので興味ある人はどうぞ、との事

閉会

ILC2012個人的まとめ#2 二日目

一日目は9時半からだったが、二日目以降は8:40からなので、この日より、朝5時に起きて6時に家を出る毎日となった。普通にきつかった。

Fifty Years of a Lisp User

和田先生によるLispの歴史の話。

  • AUTOMATA STUDIES
  • 1955 EDSAC
  • 1958 パラメトロン計算機 PC-1
    • 4200パラメトロンで、18bitで512wordのメモリを搭載
  • portscriptで書いた星(和田先生のブログにたくさんある奴)
  • SICPの図形言語
  • ライフゲイムのデモ。早い
  • よく知られている、日本製Lispシステムの一覧表
    • この表は中西先生が1974年に作られたもの?
    • KLISPはM式も扱えた
    • HLISPは「Hashed Lisp」、hconsというものがある
    • TAOLisp
      • car, cdr に加えて、 cbr, ccr があった。つまり、 c{a,b,c,d}r と揃った
      • Lispのcarとcdr自体はIBMのcpuレジスタ由来で、そのcpuの方では cpr, ctr が別にあったので、自分の中でごっちゃになりそうだ…
    • KCLはGNU CommonLispになった
  • Lispマシーンについて
    • FLATS : Formula + Lisp + Association + Tuple + Set との事。つまり、数式 + Lisp + 連想(リスト?) + タプル + 集合
    • ELIS
    • 他にもいろいろ(メモしきれなかったようだ)
  • 可視化されたGCアニメーション
    • PDP-8 Lisp
      • パンチ穴の開いたテープ紙の写真
      • 1word は 12bit、 1line は …
      • このテープ紙をスキャンして対応するデータを読み込む
    • GC可視化の実演
      • シンプルなガベージジェネレータ(一時セルを生成して使わずに放置するループプログラム)のコードを実行すると、グラフィカルに表示されている空きメモリをどんどん消費していって、一定タイミングでGCが動いて、今度は逆に空きメモリがどんどん回復していく、という繰り返しをシミュレータ上で実演
  • 最後に、伊勢神宮神宮式年遷宮( http://ja.wikipedia.org/wiki/%E7%A5%9E%E5%AE%AE%E5%BC%8F%E5%B9%B4%E9%81%B7%E5%AE%AE )のgoogle mapの上から見た写真が出て「コピーGC」という解説が。海外の人は分かったかな?

A Class Based Object-Oriented Programming Framework Based on CLOS

CLOSに、C++/Java風の多重継承やインターフェース強化を行ったもの、との事

  • CLOS/CB (CLOS/Class-Based)
  • 以下が追加されている
    • declass() クラス定義マクロ
    • deinterface() インターフェース定義マクロ
    • demeth() メソッド定義マクロ。おまけで demeth*() もある
    • decstr() コンストラクタ定義マクロ
  • Consistency Checker があるとの事
  • Java風の利用用途を想定しているとの事
    • マルチスレッド、ゲーム、AWT/Swing、グラフィック(ACLCG利用)、…
  • Javaアプレット風のINPUT欄にS式(例えば、「(sin x)」とか)を入力すると、そのグラフが表示されるデモ
  • 同様に、ケプラーの法則(天体の動きの奴)のグラフィカルなデモ

Scheme to C++ Simple Translator Scm2cpp

  • Jafferさんの scm2c がベース
  • 目的の一つとして「readableな」C++コードを吐く、というのがある
  • webサービスとして、フォームの入力欄にSchemeコードと追加宣言を書くと、それをC++コードにしてくれるサービスが置いてある
  • C++テンプレートによってLispマクロを実現?
    • これによりパフォーマンスを実現?
    • 「(define (add x y) (+ x y))」というSchemeコードがあるとして、これだけではxとyの型は確定しないけど、それをC++のテンプレート機能でうまいこと処理する、みたいな話だったと思う(実際のプレゼンでは変換後のC++コードとかもあったけどメモしきれてない)
  • Boost.MPL Boost.Phoenix を使用?
  • リストとベクタの型変換
  • Schemeの「eq?」「eqv?」「equal?」もC++テンプレートで実装
    • この時にリストやベクタはポインタ配列として判定する事で高速化しているらしい
  • 利用目的は数値計算がメインとの事
    • シンボル操作や文字列操作回りはまだ不具合があるとの事
  • 継続の実装にはBoost.coroutineを使用
  • 末尾再帰最適化どうしてるの?という質問があって自分も気になったけど回答聞き取れなかった。
    • 普通に考えるとgccの-O3とか任せにするしかなさそうだけど

Generating Probability random numbers using Common Lisp

早い正規乱数(取得結果が正規分布になるような乱数)がほしい!という話。
実際自分も正規乱数は重要だと思うのにあんま真面目に提供されてる事が少ないと思ってたのですごい共感した。

  • 乱数源にはメルセンヌツイスターを使用
  • 想定用途は、コンピュータシミュレーションと、(モンテカルロ法マルコフ連鎖の)機械学習
  • これを作った動機は、シンプルなAPIと最良のパフォーマンスを得る事
  • (分布の)形状パラメータを必要に応じて指定可能
  • 離散型確率分布も可能
  • 標準分布も可能(形状パラメータを指定しない場合は標準分布になる)
  • 利用可能なアルゴリズム
    • Box-Muller法
      • 問題点
        • 実装は簡単だが早くはない
        • 計算時にオーバーフローする可能性のある箇所が存在する
    • Polar法
      • Box-Muller法より早い
    • Ziggurat法
      • Polar法よりも早い
    • 形状パラメータはαとβを指定する。これにより、β分布にしたりできる
      • β分布にする指定方法は四パターンあり、どれも結果は同じだが実行にかかる時間が違う?(英語聞き取り怪しい)
  • 離散型確率分布にする為のアルゴリズム
    • 逆変換法
    • テーブルから生成
      • すごいでかいテーブルを作り、そこからランダム選択する
      • 色々な手段でテーブルを最適化する事が可能(かなり詳しく解説されてたけど省略)
  • 二項分布にする為のアルゴリズム
  • 上記の各アルゴリズムを任意選択可能
  • アルゴリズムによっては、形状パラメータ等が固定ならば一部を先行評価する事で高速化できるものがあり、それらをコンパイラマクロを使って高速化している
  • それぞれの分布、アルゴリズム、CL処理系、他言語との比較、の図と結果表示
  • Ziggurat法は運が悪いと永遠に終わらない可能性がある???という質問が出た。回答聞き取れなかった
  • Ziggrat法は近似的な手法なので、「精度は?」という質問が出た。これも回答聞き取れなかった(すいません、基本的にスクリーンに出なかった話は上手く聞き取れてないです)

おひる以降

この日も会場で弁当を受け取り、適当に食べたと思う(うろおぼえ)。
この日の午後は京都の時代祭を見物に行く、という話で、外国から来てる人の多くは事前に黒田さんに指定席のチケットを取ってもらっていたらしい。
立ち見もできるようなので、弁当を食べた後に何回か見に行ったりした。
(けどフルで見る程ではないなと思ってすぐ帰ってきたりしてた。基本は昔の人の格好をした人が行列で道を通っていくだけなので)
これと同時に、会場ではLispマシーン展示の作業等が行われていて、いじってよい状態だったりしたので、みんなでキーボードさわってみたりマニュアル読んだりしていた。

夕方からは火まつり?を見るという話だったけど、先行隊(時代祭を指定席で見れたグループ)の話では電車とかがすごい混んでて今からだとまず無理、みたいな話だったので、そのまま残りメンバーで飲み会へ。丁度運良く、残ってた15人ぐらいが入れる店に行けた。
部屋は一つだけどテーブルが二つで、自然と「英語テーブル」と「日本語テーブル」のような感じに。
色々と面白い話を聞いた。
しかし自分は家に帰らないといけないので9時すぎぐらいにあわてて一人で帰宅。家事風呂その他で寝れたの2時ぐらい。

ILC2012個人的まとめ#1 一日目

ちょっと寝過ごし&道に迷い、ギリギリに会場到着。
そろそろ開始時間だったけどレジストレーションのところは順番待ちで10人ぐらい並んでた。

On Lisp extensibility, and its impact on DSL implementation

DSLならLispでしょう」という話。
既に良く知っている話だったので個人的には目新しい部分はなかった。

  • DSL(ドメイン固有言語) vs GPL(General Porpose Language、汎用言語)
  • DSLの分類
    • 既存の様々なDSL(lexやyacc等から各種埋め込みDSL等)を分類分け
  • Lisp以外の各言語での拡張性についての極簡単な紹介
  • 具体例
    • cuiのコマンドを書いた時に「--help」で出すヘルプ。一部の文字を太文字にしたり色を変更したりしている。この構造をベタなエスケープシーケンス直書きせずに、CLOSでいい感じの記述(というか色等のプロパティ化)にしてから最後に変換する方針にする。
    • 上記の過程(素のCLOS定義だと冗長なのをどんどん簡潔にしていくというDSL化の過程)を実演。確か以下のような順序で行う、みたいなのが書いてあったと思う
      1. まず(CLOSで)普通に設計、抽象化
      2. コードが冗長な部分の内、関数化でどうにかできる部分を関数化
      3. 残ったコードが冗長な部分の内、リードマクロで構造部分を読み書きしやすくする
        • ここではC系の、 { } で構造を表現するリードマクロを選択
      4. 最後にマクロを使って、余分なquoteや括弧を減らす

What is the best language for compiler writers

阿部さんがこれまで色々なコンパイラを書いてきた各言語を星でレーティングして、そのレーティングが時系列でどう変化していったか、という話。
どの年にどの言語はじめたというのはメモしてたけど星いくつだったかはメモしてないです。
メモ見てるだけだと分かりにくいけど色々と濃い話があってすごい面白かったです。当時のゲーマーはより楽しめた。

  1. 1984年、FortranPascal
    • SOLAR language compiler(1984-1985)
      • 実工場のミシンのための言語およびVMだそう
  2. 1985年、C
  3. 1986年、ファミコン/NES(6502)、KCL(Kyoto CommonLisp)
  4. 1987年、Lisp
  5. 1990年、Lisp
  6. 1994年、Lisp(レーティングからエクスクラメーションマークが取れてしまう)
  7. すいません、以降はレーティングのメモ取れてないです
    • バーチャルボーイ(V810)用Cコンパイラ
      • CおよびLispライブラリによって書かれた
    • COINSプロジェクト(2002-2005)
      • 多ターゲットのバイナリを生成する多言語コンパイラを作るプロジェクト
      • Javaで実装する→「Javaはshit」大量のJavaの欠点のリストが
    • SCKプロジェクト
      • S式ベースのコンパイラキット
      • EmacsLispで書かれている
      • IPAの未踏に採択された
      • 実際にコンパイルしたり中間形式を出したりするデモあり
    • Portable Slice Analyzer(2012)
      • Haskellで実装
      • プログラムスライスとは、例えばCのコードの特定部分にて「スライスポイント」を指定すると、そのスライスポイントに関する部分だけを抜き出して(逆に言うとスライスポイントに関係しない関数呼び出しと変数を削除する)、その結果のコードを取り出すもの、らしい
        • これは文章で説明すると難しいけど、実際に適用前のコードと適用後のコードを見て比べてみれば(その比較がスクリーンに出てた)、どういう事をするものなのかすぐに理解できた
    • Data Flow Analyzer for Java
      • 最初はLispで書いてたが、顧客の要望でJavaにしないといけなくならず、またもや「手で」移植する作業を行う羽目になった(しかも先に「shit」と言っていたJavaに)との事…

おひる

会場でお弁当とお茶をもらい、日本人若手組(?)で外の公園へ。

Kyoto.lisp @ ILC2012

とりあえずネタのある人はLTする事に。
こはちゃんとメモとれてないです。

(1)画像フィルタ(すいませんタイトル失念)
  • 映画を撮ってる際に画像フィルタが必要で、既存のはあるけど速度が遅いので、CLで書いて高速化した、という話とデモ
(2)Shelly
  • @nitro_idiot さんが Kyoto.lisp#1 でやった内容
(3)SawzallでLisp
  • zickさんの話。Sawzallはgoogle内で使われてるログ集計用言語で、それでLisp処理系を実装したという話
(4)Hasp
  • 俺だよ!内容自体は Kyoto.lisp#1 でやった内容と同じだけど、あの濃いメンバーの前でやるべき内容ではなかったとすごい思った。
(5)lequeさん(タイトル失念)
  • R5RSのdenotational semanticsの定義がすごいのたくって分かりにくいので、ocamlで書いてみた、動いた、という話だったと思う。実演あり
  • ocamlで書いてみたら型エラーが出て、元のR5RSでおかしい部分があってerrataにもまだなってない?みたいな話もされてた記憶があります(うろおぼえ)
(6)全文検索システムの速度を100倍に
  • なんかこのLTだけみっちりメモとってあるけど、オフレコで、という事だったので…
  • とりあえず、「cl-fad:delete-directory-and-files」とシンボリックリンクディレクトリには気をつけたいです。
(7)BiwaSchemeの6年
  • BiwaSchemeの歴史紹介的な話
    • JavaScriptの主流がprototype.jsからjQueryに変化してそれに合わせたり、とか、そういう話をされていた記憶がある
  • BiwaSchemeを使って BiwaSlide というのを作って、このプレゼンも BiwaSlide との事。
    • プレゼン内容はS式で書く。任意のタイミングでコンソール開いてS式を評価できる。
    • 自分もS5でhtml書くの嫌になってたので試したいんだけど、BiwaSlideの公式サイト的なものはない?ぐぐってもみあたらなかった。yharaさんがBiwaSlideで書かれたプレゼンから勝手に取るしかない?

解散

  • 自分は用事があってそのまま急いで帰ったけど、残ったメンバーで飲み会されてたとの事。残念。

ILC2012個人的まとめ#0 前日

ILC2012は次の日だが、勘違いしてこの日からだと思っていたので早起きして出発する準備をしていた、が、 id:peccu さんとこの関西emacs勉強会のお知らせを見てかろうじて出発前に気付く(ILC2012の前日にやるという話を聞いてた為)。