919スピーカーズ

盛岡で開催された919スピーカーズに行って「記号戦隊オペレーターズ」っていう話をしてきました。
演算子順位法とかいうと難しそうなのでキゴウ戦法って名前を変えて説明してみたというかんじで。

例によってプレゼン資料がぎりぎりで書いてたので、完成度低くて申し訳なかったです。
結構、好き勝手やってしまって来たので面白かったです。
他の人たちの話も東北の話で面白かった。
あと、プリンうまかったです。おやつあるといいよなと思いました。ご馳走様です。
こういう気配りって大事だなぁと思いました。
VJはじめそうな人がいて音楽流れてるのに画面はあいてる。
チャンス!ってことで休憩時間の画面もったいないので、勝手に使ってプログラム組んでみたり、
スターウォーズエディタ使って話してるキーワードを書いてみたりして遊びました。
あと、ラジオごっこをしてみたり。
ハック成功みたいな。

こういうところいくと、楽しいのもあるけど作業のやる気UPってのもあるので、実は
自分の発表前は自分の発表の準備。
終わったら反省して、次のことを考えてプレゼン資料作り始める前に、PC掃除とかやってて
面白そうなところだけをかいつまんで聞くという、非常に失礼な聞き方をしてました。

UWSCの話とか自分もたまに使うのでふむふむってなかんじ。
Akita.mの人のiphoneから飛行機のおもちゃ動かすソリューションとか。
山形の勉強会は、予想してない変な盛り上がりを見せているらしいとか。
青森の話も、いろいろと面白かった。
と、北東北の人たちのいろいろ面白い話も聞けてよかったです。


ディスカッション時間は、勉強会の参加者ふえねー、学生来てほしーってな話をしてました。
自分は、かたくるしいかなぁと思ったので、小声で好き勝手なことをつぶやいてました。
失礼なやつだと思ったかたいましたら、お許しを。


パソコン教室<ギャップ1<プロのWebとかの製作者になるための勉強会<ギャップ2<技術者とかの勉強会<<<<<<<<<<<<<<Scala勉強会
Scala勉強会が果たして<<<<なのか>>>>>>なのかは分からないですけどw
2ch文化はほんと、けんか売ってるようなのが多いよなぁ。


懇談会はなぜか、片平さんと話してるのが面白くなって、うお、盛岡来て片平さんと話してるのもどうなんだろうとか思いつつ、
新幹線で、いろいろ夢というか、やりたいこととか話してて面白かった。
で、そのまま、勢いで片平堂のオフィスにお邪魔させてもらいました。
玄関の色紙に名前をサイン。


で、気軽によれる場所にしたいっていう話だったので、明日、勉強会というか、集まって作りたいもん作りましょうっていう話になりました。
集まって何か作るっていうのはada hackathonにしか参加したことがないのでよく分かりませんけど、
Sendai.hackathonっていうかんじかなぁ?


プレゼンの内容は以下のようなものをスターウォーズエディターとamachangさんのs6を使って発表しました。

準備運動
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人
プログラムできる人
プログラムできない人





     キゴウ戦隊 
    オペレーターズ




アンケート

テキストデータ読み込みプログラムを作ったことがある人?
バイナリデータ読み込むプログラムを作ったことがある人?
CSVを読み込むプログラム作ったことのある人? split知ってれば簡単。
CSVで改行や"にもちゃんと対応したもの
XMLのデータ読み込みをしたことがある。RSSとかなんとか。
XMLで俺俺データ形式を作って使ったことがある。
XMLのパーサを作ったことのある人?
正規表現を知っている?
WIKIのパーサ
JSONのパーサを作ったことがある人?
S式のパーサを作ったことのある人?
LISP
四則演算のパーサ?
brain f*ckを作ったことがある
アセンブラを作ったことがある
JavaScriptを作ったことがある
Rubyを作ったことがある
C#を作ったことがある
C++を作ったことがある


だいたい、だんだん減っていったと思います。

Rubyは美しい
C#は美しい
Javaは美しい

でも、作れないよ!
作れたら神
なぜ?

まずは、パーサが難しい。
分かってもメンドクサイ。
本当に難しいのか?
そんなことはない。
簡単です。みんな作り方を知らないだけ。
一昔前は、タッチタイピングはできないのが常識だった。
今や、タッチタイプは常識
未来のプログラマはプログラミング言語を作れるのが常識になります。

どうやって?
パターンマッチングとキゴウ戦法によって。
パターンマッチングとは 整数は[0-9]+で0〜9までの文字の1個以上の連続に対応する
変数は[a-zA-Z_][0-9a-zA-Z_]* で最初の1文字目はアルファベットか_で2文字目以降は数字も使える1文字以上のつながり
文字列をプログラムの最小単位のトークンにばらすのには文字列用のパターンマッチング技術の正規表現を使えば簡単に作れます。
さらにさらに、木構造についてのパターンマッチング機能がある言語だと木構造もパターンマッチングできて簡単です。
文字列以外の強力なパターンマッチングが使える言語の例)Haskell,SML,OCaml,Clean,erlang, Scala
特にお勧めはScalaでJavaっぽい文法なので覚えやすいです。

キゴウ戦法(Symbol wars)って何?
勝手に作った用語。
+と*で戦って勝ったほうを先に計算する方法
例)

 キゴウ戦隊 
オペレーターズ

いちごちゃんがいます。

いちご


そこにタッシー君の登場です。
 たっしー
いちご

ニーナちゃんがきました。

 たっしー(15) ニーナ
いちご


そして、カケル君が来ましたー。

 たっしー(15) ニーナ カケル(24)
いちご

おおーっと、タッシー君とカケル君がニーナちゃんを争ってバトルが始まったぞー

     ニーナ
 たっしー(15) VS カケル(24)
いちご

どっちが勝つんだー???
タッシー君はシンボレンジャープラス(+)に変身だー

    ニーナ
 +(30) VS カケル(24)
いちご

カケル君はシンボレンジャームルト(*)に変身

    2子
 +(30) VS *(48)
いちご

熾烈な戦いだー
プラスがムルトに攻撃だー。おおーっと

    ニーナ
 +(30) VS ×(33)
いちご

ムルトは耐えたぞー
ムルトの攻撃だー

    ニーナ
 +(15) VS ×(33)
いちご

プラス痛い痛いが耐え抜いたー
そして、プラスの攻撃だー

    ニーナ
 +(15) VS ×(18)
いちご

ムルト耐える
そしてムルトの攻撃
あーっとプラス無念。ムルトに負けたー

 lose ニーナ  win
 +(0) VS ×(18)
いちご

ニーナちゃんをかけた戦いはシンボレンジャームルト否、カケル君の勝利だー

 たっしー(15)
いちご      かける(24)
             ニーナ


三江ちゃんがカケル君に走りよる。
カケル君と手を結んでカケル君両手に花です。

 たっしー
いちご  かける
    ニーナ  三江

そして、全バトル終了だー。
 +
1  *
  2 3

でも、それだけじゃ、c言語みたいにかけないんじゃ?
大丈夫
まかせなさい
7種類の演算子で解決します。

1前号 +1
2後号 i++
3左号 1+2+3   a else b
4右号 a=b=c
5包号       (1+2) [1] {3}
6後包号   a(1) class{} array[2]
7文号 for(a;b;c){d} if(a) b  if(a) b else c


これだけの演算子があれば十分事足ります。
例)
public var absMul = fun(a,b){
	if(a>0 && b > 0 || a < 0 && b < 0 ) {
		return a*b;
	} else {
		return -a*b;
	}
}

public,var,-, returnは前置演算子
=は右結合演算子
fun(),if()は文演算子
',',>,&&,||,*, elseは左結合演算子
{}は括弧演算子
ていう具合

な
簡単だろ
うんって言ってくれよ。。。


現在書き方を絶賛執筆中
問題は国語

みんなのコード
http://groups.google.co.jp/group/scala-tohoku/web/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89?pli=1

ftdop4
http://gist.github.com/46417