チューリング不完全

What are you afraid of? All you have to do is try.

2013年第1四半期を振り返る

勉強会編

1/10 - 1/12 第54回プログラミングシンポジウム link
1/19 第5回チューニンガソン link
1/20 第7回スタートHaskell2 link
1/25 第1回分散システム本読書会 link
1/26 TypeScript勉強会 link
2/3 第1回PFAD読書会 link
3/1 第2回分散システム本読書会 link
3/2 第2回PFAD読書会 link
3/30 Aizu.LT kanagawaWithIndex:1 link

めっちゃ行きました。
行くには行きましたが、参加で満足してブログなりコードなりでアウトプットできていないのが課題です。
軽く概要だけ触れておきますね。

  • 第54回プログラミングシンポジウム

会社で作ってるソフトを発表しに行きました。発表したのは僕の上司で、僕は遊びに行っただけ感ありますが。
いろいろ有名な人にお会い出来ました。あとコンタクトレンズの溶液を持参するのを忘れて、女帝にお世話になりました。


  • 第5回チューニンガソン

コードには一切手を触れることが許されない、プログラマ生殺しのチューニングハッカソンイベント。あらぶる沖縄勢。
【レポート】いろいろチューニングしてパフォーマンスを競うバトルイベント!「Tuningathon」第5弾! #tuningathon : ゼロスタートの広報ブログ


  • 第7回スタートHaskell2

スタートHaskell2最終回。
オレはようやくのぼりはじめたばかりだからな このはてしなく遠いHaskell坂をよ… [未完]


  • TypeScript勉強会

わかめさんを見に行きました。


  • PFAD読書会

スタートHaskell2卒業生に降りかかった試練。「PFDSに比べれば余裕だろう」という当初の声に反して、超硬派すぎる内容。
第2回は音読を担当しました。


  • 分散システム本読書会

弊社でやってるタネンバウム本輪読会。
参加してくださっている方の動機はほとんど「昔買って挫折した」というもの。700ページ超だからね・・・
分散システム本読書会


  • Aizu.LT

大学のお知り合い同士でLT。今会社で作ってる製品を紹介してみました。


小説編

3ヶ月で6冊というと大したことないのですが、分厚い本も含まれていたので僕としては結構読んだという印象です。

2冊ほど紹介します。

ソドムの百二十日

ソドムの百二十日

男色、小児愛、老人愛、近親相姦、獣姦、屍体愛、スカトロジー、嗜虐、フェティシスムと、強靱な構想力によって、人間の深層にひそむ性の異常を描きつくしたサド文学の代表作。ロマン主義の先駆、フロイト及びシュルレアリスムの祖として位置づけられるサドの形而上学の原点となった大作の完全翻訳。

ルイ14世治世の終わり頃、「殺人と汚職により莫大な財産を有する」45歳から60歳の4人の精神異常者であるブランジ公爵、公爵の兄弟である司教、キュルヴァルの法院長、財務官デュルセが真冬にシュヴァルツヴァルトの古城シリング城に集まり、彼ら4人の絶対権力の下に置かれた42人の犠牲者、4人の遣り手婆、8人の絶倫男と共に閉じ籠る。犠牲者は4人の妻(それぞれがそれぞれの娘と婚姻している)と、両親の下から誘拐された若い少年少女たちである。4人の遣り手婆=「語り女」たちが、1ヶ月交代で1人150話ずつ計600の倒錯した物語を語り、主人たちはしばしばその場でそれを実行に移す。作品は日誌の形で構成され、4ヶ月と「単純(性交を伴わない)」「複合」「犯罪」「殺人」の4種の情熱に対応した4部からなる(第1部は完成されているが、残りは素案のみと思われる)。犠牲者はありとあらゆる性的虐待と恐ろしい拷問の末に大半が殺される。

http://ja.wikipedia.org/wiki/ソドム百二十日あるいは淫蕩学校

「サディスト」の語源であるマルキ・ド・サドの作。
上記あらすじにあるように、金持ちのキチガイ4人が120日間城に閉じこもり、快楽のために好き勝手やる、という話です。30日ごとに4部に分けられているのですが、1部以外は素案のみが残されています。つまりはかなりの部分が未完なのですが、それでもこの本450ページもあって相当ヘビーでして、正直未完でよかったわーと思いました。
グロ描写自体は平山夢明作品で慣れていたので割と大丈夫でしたが、現代でもヤバイのに、サドがこの本を書いたのは1785年です。


虚航船団 (新潮文庫)

虚航船団 (新潮文庫)

鼬族の惑星クォールの刑紀999年6月3日、国籍不明の2基の核弾頭ミサイルによって国際都市ククモが攻撃され、翌4日、無数の小型単座戦闘艇に乗ったオオカマキリを従えた文房具の殺戮部隊が天空から飛来した。それはジャコウネコのスリカタ姉妹の大予言どおりの出来事だった―。宇宙と歴史のすべてを呑み込んだ超虚構の黙示録的世界。鬼才が放つ世紀末への戦慄のメッセージ。

あらすじを見てもわけがわかりませんね。完全に狂っています。

Mathematica基礎文法最速マスター

Aizu Advent Calendar13日目の記事です。

さて、13期生というロートルがいったい何を書けばいいのかと思い悩んでいたのですが、TwitterのTLにたまにこんな文章が流れてきます。


会津大学の学部カリキュラムには関数型言語の授業がない」。今でもそうかどうかははっきりとは知りませんが、少なくとも僕の頃にはそのように言われていました。
しかしそこで僕は上の文章にNoを突きつけたい。
会津大学生は1年前期に関数型言語に触れているのですよ?
そう、僕達にはMathematicaがあるじゃないか!


しかし触れる期間はごくわずかで資料も至極残念と言わざるをえないものなので、99.99%の1年生は「わけのわからないもの」として記憶から即消し去ってしまいます。
この記事では会津大生へのMathematica啓蒙を目的として、基礎文法を書いてみたいと思います。*1



基礎

Mathematicaの実行形式にはノートブック、スクリプト実行があります。
ノートブック形式は対話式インタプリタをやりとりごと保存する、というものです。
以下ではノートブック形式での実行に絞って解説します。

式の実行
> 2 + 3
5

式を入力する部分を「セル」といい、複数行のコードを記述することができます。
Enterで改行、Shift+Enterでセルを評価します。
評価後も、カーソルをセルに合わせてShift+Enterを押すと何度でも評価させることができます。

計算結果の表示/非表示
> x = 3*2;
> y = x+3
> z = x+y;
9

文末にセミコロンをつけることで評価した結果を非表示にできます。

コメントアウト
> (* comment *)
> (*
> これも
> コメント
> *)

残念ながら1行コメントはありません。


基本演算

> 4*3
12
> 5-10
-5
> 9 * 0.3
2.7
> 10 / 4
5
-
2
> 2 + 3I
2+3i

除算した場合、分数になります。

未定義変数を含んだ計算

>Expand[(x+y)(x-y)]
x^2-y^2
>x = 3
3
>Expand[(x+y)(x-y)]
9-y^2

未評価の変数を含んだ計算をすることができます。
ノートブック上では、未評価の変数は青色、何らかの値が束縛されている変数は黒色で表示されます。

リスト

>{1,2} + {3,4}
{4,6}
>Norm[{3,4}]
5
>Transpose[{{a,b},{c,d}}]
{{a,c},{b,d}}

複数個の値はリストで表現する事ができます。
ネストさせることで行列、テンソルの表現も可能です。

関数

> zz /@ {1, {1}, {1,2}} (* Map *)
{zz[1], zz[{1}], zz[{1,2}]}

> zz @@ {1, {1}, {1,2}} (* Apply *)
zz[1, {1}, {1,2}]

> zz @@@ {1, {1}, {1,2}} (* Apply *)
{1, zz[1], zz[1,2]}

> Fold[zz, 0, {1, {1}, {1,2}}]
zz[zz[zz[0,1], {1}], {1,2}]

> Nest[zz, {1, {1}, {1,2}}]]]
zz[zz[zz[{1, {1}, {1,2}}]]]

MathematicaLispに大きく影響を受けている言語です。関数型プログラミングではおなじみの関数群が用意されています。
上記例ではzzが未定義ですが、関数を定義することで実際に適用させることができます。

> zz[x_]:=x+100

> zz /@ {1, {1}, {1,2}}
{101, {101}, {101, 102}}

パターンマッチ

前項でzz[x_]を定義しましたが、以下の例では関数が展開されていません。

> zz @@ {1, {1}, {1,2}}
zz[1, {1}, {1,2}]

これは、上記の場合3引数関数となっており、zzに3つの引数をとる関数が定義されていないためです。

> zz[x_, y_, z_]:= {100*x, 10*y, z}

> zz @@ {1, {1}, {1,2}}
{100, 10, {1,2}}

> zz[1, y_, z_]:= 0

> zz @@ {1, {1}, {1,2}}
0

引数の数だけでなく、パターンマッチさせることもできます。


可視化

基礎文法で可視化?と思われるかもしれませんが、簡単なグラフであればワンライナーで描画することができます。

> Plot[x^2==0, {x,-3,3}]

f:id:aomori-ringo2:20121213225933p:plain

アニメーション

基礎文法でアニメーションとかほんと気持ち悪いですね。でもワンライナーですし。

> Manipulate[Plot[y^3 + (x - y)^2 + x == 0, {x, -3, 3}], {y, -3, 3}]

f:id:aomori-ringo2:20121213230027p:plain
上部に表示されるスライドバーをマウスで操作することで、グラフが動く様子を見ることができます。




Q&A

  • 会津大生なのですが、大学の環境(Solaris)で"mathematica &"を実行すると未だにMathematica 5.2が出てきて困っています。

現在はどうかわかりませんが、後ろにバージョン番号をつけると幸せになれるかもしれません。"mathematica6 &"とか"mathematica8 &"とか。
2012年12月現在の最新版はver.9ですが、まだ入ってないと思います。


  • 書籍はありますか?

ver.6が最新版だったころは日本国内にver.6に対応した書籍は恐らく存在せず地獄のような状態でしたが、今はだいぶましになりました。
下に行くほど難しくなります。プログラミング言語を触ったことがある人なら、入門Mathematicaあたりがおすすめです。

はやわかりMathematica 第3版

はやわかりMathematica 第3版


入門Mathematica 【決定版】 Ver.7対応

入門Mathematica 【決定版】 Ver.7対応


Mathematicaクックブック

Mathematicaクックブック


「使えることがある」というぐらいです。Wolfram Alphaはパーサが狂っているので、シンタックスシュガーがあると正しく読み取ってくれなかったりします。
でも頑張ればFizzBuzzぐらいならいけます。


まとめ

1日で殴り書いたので、ボリュームが全然不足してますね。気が向いたら加筆します。
その他にもMathematicaは異常なまでの関数が用意されていますし、GUIコンポーネントもなぜか豊富です。
PS3のコントローラ挿して3Dモデルを回転させたりとかできますよ。しかもその辺の情報がMathematicaのヘルプから見れるので結構楽しいと思うので、ぜひお試しあれ。
Aizu Advent Calendarは14日目、@tyageさんに続きます。

*1:「基礎文法最速マスター」というフォーマットが現れてから2年も経つのにMathematicaについての当該記事がないあたり、Mathematicaの荒地具合がご推察いただけると思う

Fabricで多段ssh

Fabricで多段sshした上でコマンド実行させることができたので、書いておきます。

  • 環境
    • Python 2.6.6
    • Fabric 1.5.1 (paramiko 1.9.0, ssh 1.8.0)
    • サーバは全てCentOS 6.3

やり方は.ssh/configに書かれたProxyCommand設定を読み込む方法とFabricのenvをいじる方法の2つがあります。
ここではFabricのenvをいじる方法について解説します。

環境

+---------------+
|192.168.200.99 |
+---------------+
       ↓
+---------------+
|192.168.200.100|
+---------------+
       ↓
+---------------+
|192.168.200.101|
+---------------+
       ↓
+---------------+
|192.168.200.102|
+---------------+
  • 192.168.200.99

プログラムを動かすところ。

  • 192.168.200.100

踏み台役。アクセス制限や鍵などの設定は何もしていない。

  • 192.168.200.101

TCP Wrapperで、sshでの接続は192.168.200.100からのみに制限している。

  • 192.168.200.102

TCP Wrapperで、sshでの接続は192.168.200.101からのみに制限している。


コード

# fabric_test.py
from fabric.api import run, env
from fabric.state import connections, output
from fabric.network import denormalize
from fabric.exceptions import NetworkError

via = [('user1@192.168.200.100:22', 'password1'),
       ('user2@192.168.200.101:22'. 'password2'),
       ('user3@192.168.200.102:22', 'password3')]

try:
    for host, passwd in via:
        env.gateway = env.host_string
        env.host_string = host
        env.password = passwd
        run('', quiet=True)
    run('hostname')    

except NetworkError as e:
    print(e)
finally:
    for key in connections.keys():
        if output.status:
            print("Disconnection from %s" $ denormalize(key))
            connections[key].close()

実行結果

% python fabric_test.py
[user3@192.168.200.102] run: hostname
[user3@192.168.200.102] out: server3
[user3@192.168.200.102] out:

Disconnection from user3@192.168.200.102...
Disconnection from user2@192.168.200.101...
Disconnection from user1@192.168.200.100...

鍵情報が必要な場合は、env.key_filenameにファイルパスを渡してあげるといいです。
(ただし、ファイルパスは当然プログラムが動いている環境のパスになります。)
基本的にはtryの部分の処理のみでOKなのですが、プログラムが終了するときにconnectionをcloseしてあげないと、以下の様なエラーが飛んできます。

Exception in thread Thread-2 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
  File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 1613, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error'
Exception in thread Thread-3 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
  File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 1613, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error'



初めはFabric1.4.3の状態で「うーん、できない・・・」と悩んでいたのですが、Fabric1.5でenv.gatewayと.ssh/configのProxyCommandを読み込む機能が追加されたのを知り、上記のような感じになりました。

追記(2014/10/07)

上記コードではFabricの現行のバージョンで動きませんので、修正しました。
Fabricの1.6.4/1.7.5/1.8.5/1.9.1/1.10.0で動作確認済みです。
1.5.5では動きませんでした。

# fabric_test.py
from fabric.api import run, env
from fabric.state import connections, output
from fabric.network import denormalize
from fabric.exceptions import NetworkError

via = [('user1@192.168.200.100:22', 'password1'),
       ('user2@192.168.200.101:22'. 'password2'),
       ('user3@192.168.200.102:22', 'password3')]

try:
    for host, passwd in via:
        env.gateway = env.host_string
        env.host_string = host
        env.password = passwd
        env.passwords[host] = passwd
        connections.connect(host)
    run('hostname')    
except NetworkError as e:
    print(e)
finally:
    for key in connections.keys():
        if output.status:
            print("Disconnection from %s" % denormalize(key))
            connections[key].close()

2012年夏のプログラミング・シンポジウムに参加してきました

2012年夏のプログラミング・シンポジウム

f:id:aomori-ringo2:20120825182623j:plain


会場の様子

参加人数約160人と大変盛況でした。会場の後ろにはオーム社オライリー・ジャパン,翔泳社という、このようなイベントに来る人がいかにも好きそうな出版社が書籍販売をしていました。(私も大好きです。)


f:id:aomori-ringo2:20120828154035j:plain
f:id:aomori-ringo2:20120828153944j:plain


オライリーさんは消費税なし、10%off、5000円以上購入でオライリーTシャツプレゼントというキャンペーンを行なっていました。私はTシャツが欲しかったので2冊何か買おうとしたら、定価だと2冊で5500円なのに1割引きのせいで4950円になってしまう、など非道とも言える組み合わせが存在し、みなさん苦悩していました。オライリーの人はニヤニヤしてました。
悩んだ結果、私は「Real World Haskell」と「リーダブルコード」を購入。Tシャツをバッチリいただきました。

プログラミング美学(仮)/ 竹内郁雄(早稲田大学)

(WIP)

Beautiful Programming Language and Beautiful Testing / 山本和彦(IIJ-II)


Haskellerはあまりテストを書かないけど、Haskellにも当然テストは必要だから、テストを書かせるようにしよう、という話。
Haskeller向けではない人向けと書いてはいましたが、最終的にはHaskellのコードでの説明になってしまったのは致し方無いですかね・・・


午前中のここまでの3つの発表で登場した言語がLisp, Haskell, Haskellと、関数型言語を触ったことがない参加者には随分と酷な並びだったような。



ビューティフルコードのためのN個の指針 / 久野靖(筑波大)

オライリーの「Beautiful Code」の訳者である久野先生による、コードの綺麗さに対するお話。(WIP)

Ruby を用いた超絶技巧プログラミング / 遠藤侑介


この日で一番盛り上がった発表。
アスキーコードのように見える自己複製プログラム」「小文字アルファベットと空白のみでHello world」など、トンデモプログラム満載の発表。デモをする度に会場は笑いと拍手が巻き起こっていました。
「実用性なんかなくてもプログラミングは楽しい」という導入部の主張がとても素晴らしいと思いました。



高機能アセンブラによるx86/x64 CPU向け高速化テクニック / 光成滋生(サイボウズ・ラボ株式会社)

(WIP)

ビスケットにおけるプログラムの美しさについて / 原田康徳(NTT)

(WIP)


キュート・アルゴリズム / 稲葉一浩


Redcoderである@kinabaさんによる、アルゴリズムのお話。

  • 『最悪』のソートアルゴリズムは何か
  • 非破壊型のQueueを実装する
  • 正確な実数を計算する

私も一時期Topcoderにはまっていたのでとても楽しめました。競技プログラミング経験がある人はスライドをご覧になってみると良いと思います。


セルオートマトンのプログラムハック / 和田英一(IIJ-II)


個人的には今日一番難しかった発表。和田先生が今までに出会ってきたびっくりするようなプログラムの数々の中から、セルオートマトンに焦点をしぼっていくつか紹介されていました。
スライドを見てもよくわからないかも知れませんが、やりたいことをとにかく最速(or最小)で行うために限界まで意味をばらしてコードに再構築をしているものが多く、プログラマは数学ができた方が格段に強いな、と感じました。
このようなお話はクヌース先生のTAOCPやHacker's Delightに数多くあるようなので、ご興味がある方は読んでみるといいでしょう。
発表の最後で和田先生はこのように語っていました。



肝に命じたいですね。



まとめ

私は常々、今後数十年、ずっとプログラミングやソフトウェア開発に従事してご飯を食べていくことができるだろうか・・・と不安を抱きつつ勉強をしています。今回は最先端で活躍している方の発表を聞いて、全く意味がわからなくてお手上げになるということもなく、どの発表も楽しめたので、少し安心しました。
和田先生によると、プログラミングシンポジウムの夏は来年も今回のように日帰り・参加費無料で行うつもり、とのこと。来年もぜひ参加したいですね。

第3回 スタートHaskell2に参加してきました

第3回 スタートHaskell2 - [PARTAKE]

f:id:aomori-ringo2:20120722181333j:plain
今回はがんばったぞ!


すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!


すごいH本、

  • 第6章 モジュール
  • 第7章 型や型クラスを自分で作ろう

をやりました。



第6章 モジュール(@aomoriringo)

わたし ^o^ です

6章は「モジュール」と銘打っておきながら、大半が標準モジュールの解説に当てられているので、ストーリーがつけにくくて苦労しました。
モジュールのインポート、エクスポートについては書いてあることをwebでいろいろ調べていくうちにいろんなことにぶちあたって、これまた発表にどこまで含めるか決めるのに苦労しました。
結果的に本には書いてない部分についてもちょっと話したのですが、そしたら@kazu_yamamotoさんあたりからためになる話も聞けたし、よかったんじゃないかと思います。
標準モジュールのあたりは随分ぐだぐだしてしまったと反省しているのですが、終わったあとに@seizans先生に慰めてもらったのでよいことにします。




発表の内容はスライドを見てもらうとして、その後の質疑応答では以下の様な話題がありました。

  • import Map (Map), import qualified Map hiding (Map) as Mのように、同じモジュールを複数個にわけてimportすることができる。
  • import Foo ()みたいな書き方をした場合、インスタンス宣言だけがimportされる。
  • Hoogleは標準モジュールだけしか見れないが、Hayoo!だと標準モジュール以外も検索できる。(Hoogleにもドキュメントを追加できるけど、超絶めんどくさいらしい)
  • HaskellのCharは4バイトで、実はとてもリッチなデータ構造らしい。
  • foldl'はスライド中では「foldlと違ってスタックオーバーフローしない」と書いたが、foldl'の第1引数の関数が遅延評価するときは、スタックオーバーフローになることがある。
  • module構文でエクスポートする関数は明記したほうが良い(推奨されている)。書くとGHCが書かない時よりも最適化をがんばってくれる。
  • Mainモジュールのみモジュール宣言の名前はファイル名と一致しなくてもよい。(Mainを複数個作って使い分けたりできる)
  • モジュール名を省略した場合はMainモジュールと見なされる。
  • import文が多いコードは分割してimport文を減らした方が良さげ。

第7章 型や型クラスを自分で作ろう(@a_hisameさん)

  from a-hisame


正直7章は自分の発表が終わったのでとにかく安心しきって、話半分に聞いていました(ごめんなさい!)。
この部分については事前に読んできていたので、確認に近かったです。それにしても7章はとてもボリュームがあって@a_hisameさんすごいなーと思っていました。
6章は7章に比べてボリューム少なめだから、30~40分で切り上げて7章で時間を使ってもらいたいな・・・と思っていたのに、思い切り1時間使ってしまいました(´・ω:;.:...





LT | 再帰の俯瞰図(@kazu_yamamotoさん)

http://mew.org/~kazu/material/2012-recursion.pdf

すごいH本だと4章が再帰の話なのですが、あれではちょっと不十分だろうということで、末尾再帰や末尾再帰で書けないパターンの再帰などについての話でした。
このあとの演習問題では再帰をひたすら実装する課題があったのですが、再帰自体は書けるけど末尾再帰で書こうとするととても難しくて大変でした・・・もっと精進しなければいけません。





感想

プレゼン作成作業が思ったより難航してしまって、前日は朝6時までモンスターエナジーを飲みつつ作っていました。(あとで@a_hisameさんと話したらとても似た状態だったらしい)
自身の発表内容は反省点の多いものでしたが、本を1章ずつ担当するというスタイルの勉強会の発表者として、最低限の仕事はできたかなと思っています。いろいろ勉強になったし、やってよかった。
発表者のみなさま、主催者、運営者のみなさま、俺、お疲れ様でした。次回もぜひ参加したいと思います。

第2回 スタートHaskell2に参加してきました

第2回 スタートHaskell2 - [PARTAKE]

f:id:aomori-ringo2:20120722181333j:plain


最近趣味で触っていたHaskell、気になっていた勉強会についに今回はじめて参加することができました。



すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!


いわゆる「すごいH本」を教科書にしています。
今回は

  • 第3章 関数の構文
  • 第4章 Hello 再帰!
  • 第5章 高階関数

をやりました。



第3章 関数の構文(@mizu__tamaさん)

  • パターンマッチ
  • ガード
  • where
  • let式
  • case式

それぞれについては「すごいH本」を読めばわかることなので略します。(めんどい)
その他、以下の様な話題がありました。

上記にあげたものは全部case式の糖衣構文

whereとletの使いどころ




letとlet inの違い

「すごいH本」の第3章の中では、

4 * (let a = 9 in a + 1) + 2

のように基本的にはletはinセットで使用しているのですが、リスト内包表記とあわせて使用する場合は

calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2]

のようにin句がない。
また、ghcで

let hoge = 100

のように書くと、以降ghci中でhogeを使用することができるようになります。
これについては@kazu_yamamotoさんが解説してくれていました。モナドがどうとか言っていた気がするのですが、きちんと理解はできなかったので既に脳内から雲散霧消してしまいました。

  • リスト内包表記では、リスト内包という表記の中で宣言するとスコープがその部分のみなのでwhereのようにリスト内包内部でのみ使用可能な変数みたいにして使える
  • ghc中でletを宣言すると、ghc全体のスコープに対して置かれるのでどこでも使えるようになる。(グローバル的な?)

というのが私の現時点での理解です。



第4章 Hello 再帰!(@ko1kunさん)

いろんな本からの参照があったのが印象的でした。(読んでみたい、と思った本もちらほら。)
内容としては再帰を使った初歩的な関数を書いてみよう、というものでした。このへんはプログラミングHaskellでもやっていたので大丈夫かな。
途中フィボナッチ関数の計算速度に関する話題がいろいろと出てきたのですが、Haskellとは関係のない、アルゴリズムの話だったように思います。






第5章 高階関数(@S1E11さん)

今日のヤマだったと思います。

  • カリー化
  • map, filter
  • ラムダ式
  • foldl, foldr
  • $を使った関数適用
  • 関数合成

foldl, foldrと無限リストが絡むあたりが難しく、つまりました。これは次回までに自分で悩んでおきたいところですね。

foldl, foldl', foldrの使い分け


関数合成をする際の.(ドット)、$について



その他にもTLでは正格とか末尾再帰の話題がありましたが、かなりわかっていないので今は見なかったことにしておきましょう。



LT | 文芸的プログラミング(@shokosさん)

hsファイルはコードが基本で、コメント部分は--や{- -}で指定するのですが、それが逆になり、基本がコメントで、コードについては明示的に指定するlhsについてのお話。
Birdモード, LaTeXモードの2つがあるようです。
参考: Executing Haskell program

文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm)

文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm)



LT | idのナゾ、constのヒミツ(@kazu_yamamotoさん)

haskellのid, constはどこで使うの?という話題がいつの間にかSKIコンビネータとかどんどんdeepな話に・・・
コンビネータについてやけに興奮した調子で話す@kazu_yamamotoさんが面白かったです。

数学パズル ものまね鳥をまねる POD版 ―愉快なパズルと結合子論理の夢の鳥物語

数学パズル ものまね鳥をまねる POD版 ―愉快なパズルと結合子論理の夢の鳥物語



感想

100人超で5時間超え、という規模の勉強会は初めてでしたが、発表だけでなくTwitterでのやりとりも楽しく、集中力を途切れさせずに最後まで楽しく参加できました。
発表者のみなさま、主催者、運営者のみなさま、お疲れ様でした。次回もぜひ参加したいと思います。

Aizu.LT::Tokyo #1に参加してきました

勉強会レポートを残していこうと思い立ったので、駄文ではありますが。


Aizu.LT::Tokyo #1 Partake
Aizu.LT::Tokyoという地名が2つも入ってもはやわけがわからないことになっている勉強会に参加してきました。
この勉強会は会津大学でライトニングトークをやろう!というコンセプトで@luxionが3年ほど前に立ち上げたもので、初期の参加メンバーがだんだんと東京で働くようになり、今回東京で第1回が催されることになりました。


今回のメニューは以下のとおり。

@luxion Groovy!
@scarletmoon0428 インターネットと著作権
@corosuke_k Corosuke meets UXD
@aomoriringo 最近読んだ本読みたい本


Aizu.LTは傾向として技術系と日常系の発表が半々ぐらいになるのですが、今回は(私のだけは微妙ですが)全て技術系よりの発表となりました。


当日のUstream録画
「あれ、LTって5分間なのでは・・・」とか思ってはいけません。Aizu.LTは「ルールがないのがルール」的な勉強会スタイルなんです。


時間こそ短かったですが、私としてはゆる~とした雰囲気で、久しぶりにプレゼンもできて楽しかったです。(内輪雰囲気すぎるのはなんとかしたいところですが・・・)
今回は日程の公開から勉強会までが1週間しかなかったため、参加者が5人しかいなかったのが悔やまれますね。次はもうちょっとがんばりましょう。なにか必要なことがあればお手伝いしますよ。 > 主催の@luxion


今回私が発表で紹介した書籍


アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣


7つの言語 7つの世界

7つの言語 7つの世界


プログラミングHaskell

プログラミングHaskell


オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)


新吼えろペン 1 (サンデーGXコミックス)

新吼えろペン 1 (サンデーGXコミックス)