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冊ほど紹介します。
- 作者: マルキドサド,Donatien‐Alphonse‐Francois de Sade,佐藤晴夫
- 出版社/メーカー: 青土社
- 発売日: 2002/07
- メディア: 単行本
- 購入: 1人 クリック: 11回
- この商品を含むブログ (11件) を見る
男色、小児愛、老人愛、近親相姦、獣姦、屍体愛、スカトロジー、嗜虐、フェティシスムと、強靱な構想力によって、人間の深層にひそむ性の異常を描きつくしたサド文学の代表作。ロマン主義の先駆、フロイト及びシュルレアリスムの祖として位置づけられるサドの形而上学の原点となった大作の完全翻訳。
ルイ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年です。
- 作者: 筒井康隆
- 出版社/メーカー: 新潮社
- 発売日: 1992/08/28
- メディア: 文庫
- 購入: 9人 クリック: 851回
- この商品を含むブログ (81件) を見る
鼬族の惑星クォールの刑紀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}}]]]
MathematicaはLispに大きく影響を受けている言語です。関数型プログラミングではおなじみの関数群が用意されています。
上記例では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
引数の数だけでなく、パターンマッチさせることもできます。
アニメーション
基礎文法でアニメーションとかほんと気持ち悪いですね。でもワンライナーですし。
> Manipulate[Plot[y^3 + (x - y)^2 + x == 0, {x, -3, 3}], {y, -3, 3}]
上部に表示されるスライドバーをマウスで操作することで、グラフが動く様子を見ることができます。
Q&A
- 会津大生なのですが、大学の環境(Solaris)で"mathematica &"を実行すると未だにMathematica 5.2が出てきて困っています。
現在はどうかわかりませんが、後ろにバージョン番号をつけると幸せになれるかもしれません。"mathematica6 &"とか"mathematica8 &"とか。
2012年12月現在の最新版はver.9ですが、まだ入ってないと思います。
- 書籍はありますか?
ver.6が最新版だったころは日本国内にver.6に対応した書籍は恐らく存在せず地獄のような状態でしたが、今はだいぶましになりました。
下に行くほど難しくなります。プログラミング言語を触ったことがある人なら、入門Mathematicaあたりがおすすめです。
- 作者: 榊原進
- 出版社/メーカー: 共立出版
- 発売日: 2010/03/24
- メディア: 単行本
- クリック: 27回
- この商品を含むブログ (4件) を見る
- 作者: 日本Mathematicaユーザー会編著
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2009/06/20
- メディア: 単行本
- 購入: 1人 クリック: 17回
- この商品を含むブログ (6件) を見る
- 作者: Sal Mangano,松田裕幸
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/04/25
- メディア: 大型本
- 購入: 1人 クリック: 19回
- この商品を含むブログ (7件) を見る
- Wolfram Alphaでも使えますか?
「使えることがある」というぐらいです。Wolfram Alphaはパーサが狂っているので、シンタックスシュガーがあると正しく読み取ってくれなかったりします。
でも頑張ればFizzBuzzぐらいならいけます。
まとめ
1日で殴り書いたので、ボリュームが全然不足してますね。気が向いたら加筆します。
その他にもMathematicaは異常なまでの関数が用意されていますし、GUIコンポーネントもなぜか豊富です。
PS3のコントローラ挿して3Dモデルを回転させたりとかできますよ。しかもその辺の情報がMathematicaのヘルプから見れるので結構楽しいと思うので、ぜひお試しあれ。
Aizu Advent Calendarは14日目、@tyageさんに続きます。
*1:「基礎文法最速マスター」というフォーマットが現れてから2年も経つのにMathematicaについての当該記事がないあたり、Mathematicaの荒地具合がご推察いただけると思う
Fabricで多段ssh
Fabricで多段sshした上でコマンド実行させることができたので、書いておきます。
やり方は.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
コード
# 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を読み込む機能が追加されたのを知り、上記のような感じになりました。
参考
Gateway solutions in Paramiko & Fabric - bitprophet.org
多段 ssh / rsync するために ProxyCommand を使ってみる (2) - daily dayflower
Intermittent "'NoneType' object has no attribute 'error'" · Issue #513 · fabric/fabric · GitHub
Exception in thread · Issue #17 · paramiko/paramiko · GitHub
Disconnecting from host with Python Fabric when using the API - Stack Overflow
-
-
- -
-
追記(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年夏のプログラミング・シンポジウムに参加してきました
会場の様子
参加人数約160人と大変盛況でした。会場の後ろにはオーム社,オライリー・ジャパン,翔泳社という、このようなイベントに来る人がいかにも好きそうな出版社が書籍販売をしていました。(私も大好きです。)
オライリーさんは消費税なし、10%off、5000円以上購入でオライリーTシャツプレゼントというキャンペーンを行なっていました。私はTシャツが欲しかったので2冊何か買おうとしたら、定価だと2冊で5500円なのに1割引きのせいで4950円になってしまう、など非道とも言える組み合わせが存在し、みなさん苦悩していました。オライリーの人はニヤニヤしてました。
悩んだ結果、私は「Real World Haskell」と「リーダブルコード」を購入。Tシャツをバッチリいただきました。
プログラミング美学(仮)/ 竹内郁雄(早稲田大学)
(WIP)
Beautiful Error Handling / 田中英行(株式会社プリファードインフラストラクチャー)
Beautiful Programming Language and Beautiful Testing / 山本和彦(IIJ-II)
Haskellerはあまりテストを書かないけど、Haskellにも当然テストは必要だから、テストを書かせるようにしよう、という話。
Haskeller向けではない人向けと書いてはいましたが、最終的にはHaskellのコードでの説明になってしまったのは致し方無いですかね・・・
午前中のここまでの3つの発表で登場した言語がLisp, Haskell, Haskellと、関数型言語を触ったことがない参加者には随分と酷な並びだったような。
ビューティフルコードのためのN個の指針 / 久野靖(筑波大)
オライリーの「Beautiful Code」の訳者である久野先生による、コードの綺麗さに対するお話。(WIP)
Ruby を用いた超絶技巧プログラミング / 遠藤侑介
この日で一番盛り上がった発表。
「アスキーコードのように見える自己複製プログラム」「小文字アルファベットと空白のみでHello world」など、トンデモプログラム満載の発表。デモをする度に会場は笑いと拍手が巻き起こっていました。
「実用性なんかなくてもプログラミングは楽しい」という導入部の主張がとても素晴らしいと思いました。
ビスケットにおけるプログラムの美しさについて / 原田康徳(NTT)
(WIP)
キュート・アルゴリズム / 稲葉一浩
Redcoderである@kinabaさんによる、アルゴリズムのお話。
- 『最悪』のソートアルゴリズムは何か
- 非破壊型のQueueを実装する
- 正確な実数を計算する
私も一時期Topcoderにはまっていたのでとても楽しめました。競技プログラミング経験がある人はスライドをご覧になってみると良いと思います。
セルオートマトンのプログラムハック / 和田英一(IIJ-II)
個人的には今日一番難しかった発表。和田先生が今までに出会ってきたびっくりするようなプログラムの数々の中から、セルオートマトンに焦点をしぼっていくつか紹介されていました。
スライドを見てもよくわからないかも知れませんが、やりたいことをとにかく最速(or最小)で行うために限界まで意味をばらしてコードに再構築をしているものが多く、プログラマは数学ができた方が格段に強いな、と感じました。
このようなお話はクヌース先生のTAOCPやHacker's Delightに数多くあるようなので、ご興味がある方は読んでみるといいでしょう。
発表の最後で和田先生はこのように語っていました。
RT @aomoriringo: 「プログラムが複雑に見えるときは必ず改良できる」「良いプログラムが書ける人は作文もうまい」「文を書くときもおろそかにしないこと」 #spro12
— Yuichiro SAITOさん (@koemu) 8月 25, 2012
肝に命じたいですね。
まとめ
私は常々、今後数十年、ずっとプログラミングやソフトウェア開発に従事してご飯を食べていくことができるだろうか・・・と不安を抱きつつ勉強をしています。今回は最先端で活躍している方の発表を聞いて、全く意味がわからなくてお手上げになるということもなく、どの発表も楽しめたので、少し安心しました。
和田先生によると、プログラミングシンポジウムの夏は来年も今回のように日帰り・参加費無料で行うつもり、とのこと。来年もぜひ参加したいですね。
第3回 スタートHaskell2に参加してきました
今回はがんばったぞ!
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 13人 クリック: 490回
- この商品を含むブログ (28件) を見る
すごい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さん)
正直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に参加してきました
最近趣味で触っていたHaskell、気になっていた勉強会についに今回はじめて参加することができました。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 13人 クリック: 490回
- この商品を含むブログ (28件) を見る
いわゆる「すごいH本」を教科書にしています。
今回は
- 第3章 関数の構文
- 第4章 Hello 再帰!
- 第5章 高階関数
をやりました。
第3章 関数の構文(@mizu__tamaさん)
- パターンマッチ
- ガード
- where
- let式
- case式
それぞれについては「すごいH本」を読めばわかることなので略します。(めんどい)
その他、以下の様な話題がありました。
上記にあげたものは全部case式の糖衣構文
whereとletの使いどころ
「let よりも whereを(できるだけ)使え.caseは使うな」.なるほど #start_haskell
— nishioさん (@nishio_dens) 7月 22, 2012
where vs let に関しては、これを参考にして下さい。 is.gd/x6oniR #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
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とは関係のない、アルゴリズムの話だったように思います。
普通の速度のフィボナッチ数列: is.gd/f98mUf #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
素朴な fib が何故効率が悪いかの図: is.gd/ZiXFu7 #start_haskell
— 山本和彦さん (@kazu_yamamoto) 7月 22, 2012
第5章 高階関数(@S1E11さん)
今日のヤマだったと思います。
- カリー化
- map, filter
- ラムダ式
- foldl, foldr
- $を使った関数適用
- 関数合成
foldl, foldrと無限リストが絡むあたりが難しく、つまりました。これは次回までに自分で悩んでおきたいところですね。
foldl, foldl', foldrの使い分け
foldlとfoldrの選択:二項演算が対象律を満たさないとき→選択子がそもそもない、満たすとき→二項演算の左辺引数に対するコストが大きい or 無限リストを扱いたい→foldr、二項演算が引数に対して正格 -> foldl' それ以外→foldl #start_haskell
— Hideyuki Tanakaさん (@tanakh) 7月 22, 2012
関数合成をする際の.(ドット)、$について
関数合成は一番右だけ $ にして、残りは .にすれば大体うまくいく。#start_haskell
— Connieさん (@Slash_01) 7月 22, 2012
その他にもTLでは正格とか末尾再帰の話題がありましたが、かなりわかっていないので今は見なかったことにしておきましょう。
LT | 文芸的プログラミング(@shokosさん)
hsファイルはコードが基本で、コメント部分は--や{- -}で指定するのですが、それが逆になり、基本がコメントで、コードについては明示的に指定するlhsについてのお話。
Birdモード, LaTeXモードの2つがあるようです。
参考: Executing Haskell program
文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm)
- 作者: ドナルド・E.クヌース,Donald E. Knuth,有沢誠
- 出版社/メーカー: ASCII
- 発売日: 1994/03
- メディア: 単行本
- 購入: 1人 クリック: 31回
- この商品を含むブログ (23件) を見る
LT | idのナゾ、constのヒミツ(@kazu_yamamotoさん)
haskellのid, constはどこで使うの?という話題がいつの間にかSKIコンビネータとかどんどんdeepな話に・・・
コンビネータについてやけに興奮した調子で話す@kazu_yamamotoさんが面白かったです。
数学パズル ものまね鳥をまねる POD版 ―愉快なパズルと結合子論理の夢の鳥物語
- 作者: レイモンドスマリヤン,阿部剛久,黒沢俊雄,福島修身,山口裕
- 出版社/メーカー: 森北出版
- 発売日: 2010/04/05
- メディア: 単行本
- 購入: 2人 クリック: 23回
- この商品を含むブログ (1件) を見る
感想
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
今回私が発表で紹介した書籍
- 作者: ポールグレアム,Paul Graham,川合史朗
- 出版社/メーカー: オーム社
- 発売日: 2005/01
- メディア: 単行本
- 購入: 100人 クリック: 4,623回
- この商品を含むブログ (576件) を見る
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣
- 作者: Venkat Subramaniam,Andy Hunt,木下史彦,角谷信太郎
- 出版社/メーカー: オーム社
- 発売日: 2007/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 34人 クリック: 948回
- この商品を含むブログ (293件) を見る
- 作者: Bruce A. Tate,まつもとゆきひろ,田和勝
- 出版社/メーカー: オーム社
- 発売日: 2011/07/23
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 169回
- この商品を含むブログ (53件) を見る
- 作者: Graham Hutton,山本和彦
- 出版社/メーカー: オーム社
- 発売日: 2009/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 13人 クリック: 480回
- この商品を含むブログ (115件) を見る
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 278回
- この商品を含むブログ (121件) を見る
- 作者: 島本和彦
- 出版社/メーカー: 小学館
- 発売日: 2005/03
- メディア: コミック
- 購入: 1人 クリック: 14回
- この商品を含むブログ (80件) を見る