Microsoft MVP for Visual F# を受賞しました
本人が一番驚いていたりします。
各地のF#er、各勉強会の運営の皆様、ありがとうございました。
これからも楽しく活動できたらと考えているので、今後ともよろしくお願いします。
F#!F#!
ScalaやHaskellのライブラリをF# に移植するときのTips?
個人的にはF# の中での理想やりっろーんを追い求めてみたい感もある
こんなことを思っていたりすることもあるため、HaskellやScalaに面白そうなライブラリがあると聞きつけるとF# に移植できないか試したくなります。
で、いくつかTipsというかこんなことがあるよ、的なことをまとめておきます。
用語はてきとーなので表現が微妙であれば順次修正していきます。
【この記事は書きかけです】
型パラメータが型パラメータをもつ
Free Monadを例にしてみると
sealed trait Free[S[+_], +A]
や
data Free f a = Pure a | Free (f (Free f a))
などの型パラメータが型パラメータをもってるよ的なやつです。
これが出た場合、私は白旗をあげます。
再帰なlazyちゃんマジlazy
これはscala-machinesやHaskellのmachinesのrepeatedly関数を例にしましょう。
まずはScala。
def repeatedly: Machine[K, O] = { lazy val r : Machine[K, O] = this >> r r }
次にHaskell。
repeatedly (Plan m) = r where r = m (const r) Yield Await Stop
lazyだからこそできる再帰ですね。
HaskellやScalaではlazyが型に現れることはないので、これで問題なしです。
が、F#ではこう単純にはいきません。この例の場合だと、
let rec repeatedly p : Machine<'k, 'o> = let inline (>>.) p (next : Lazy<Plan<'k, 'o, 'a>>) = p >>= (fun _ -> next.Value) let rec r = lazy (p >>. r) r.Value
こうなります。
まずevaluationが発生して欲しい場所を探します。今回の場合は(>>.)演算子でした。
これを、えいやっとシャドウィングしてLazy版を書きます。
あとは何事もなかったように、自己再帰の警告を #nowarn "40" などで消すなり放置しながら残りの部分を実装します。
こうすることで、他の関数には迷惑をかけずにScalaやHaskellと同様のことが行えます。
この系統はlazy evaluation(?)の良い勉強になりますね。
type class
前者は使ったことがないのでどんな感じなのかわかりません。
後者はFSharpx内のいくつかのmoduleに方法を見れば、どんな感じなのか把握できると思います。
あ、IOモナドはあきらめてます。
おわりに
「F#で理想を追求するって、そういうことよ」
F# にMachinesの移植を試みている
某都会ではekmett氏のライブラリを勉強する会があるらしい。
http://partake.in/events/1698f7f8-4151-4048-b317-03a8c3f1a7ab
うらやましいとかそういうことはすごくあるのだけれど、行けないものは仕方がないので自前環境でとりあえずは我慢することに。
本題
というわけでmachinesをF#に移植しようと試みている。
Haskellのmachinesは見た感じF#への移植は難しそうなので*1、scala-machinesを主に参考にしている。
まぁ、現状色々と嵌ったり詰ったりしていますが。。。
特に型周りがちょっときつい。今はこのあたりでとまっている。
目下の戦いはこの部分。
def left[A]: Handle[T[A, Any], A] = \/.left(_)
Handle部分を展開すると A => A \/ Nothing という解釈であっているのかな?
正しいならそれはそれで詰みそう…。
あと、Scala側にあるTee.mergeOuterJoinってHaskell側にもあるのだろうか?
あるなら参考にできそうなのでちょっと探してみよう。
【2013/03/18追記】
@xuwei-kさんのわかりやすい型講座により把握できました。ありがとうございます!
というわけで
地道に現実を知りながら育てていく予定です。
少し話がそれるけれど、こういう感じにコードを書きなぐっているとMachinesハッカソンがやりたくなってくる。
東京で開催できないですかね?
会場をみつけることができればいいのかな…時期はいつでもいいわけだし。
machinesに何かしら思うところがある型は反応していただければ…。
*1:私がへなちょこなだけかもしれないが…
Groovy基礎勉強会とNagoya.Testing in Tokyo3に潜入してました
主催者のきょんさんに「Groovy基礎勉強会で発表よろしく!」とお誘いをうけたので喋ってきました。
あと、翌日はNagoya.Testingを開催するとのことだったのでお手伝いとして参加しました。
2013/03/09(#GroovyBase)Groovy基礎勉強会 - Togetterまとめ
ことりちゃんがみえたあたりからが私のセッションのようです。
資料など
GParsのActor Modelとか言っておきながらひたすらActor Modelについて喋ってました。
素人知識なので間違いなどあれば指摘していただければ幸いです。
- 最初にActor Modelがどのような形で応用されている(使われている)のか話せばよかったかも?
- 公理的操作群ではなく操作的意味論のほうがよかったのかな?
- 一部、並行と並列を書き間違えていたことに本気で焦った
- 資料の字が小さかったようで、すみません・・・今後はあらかじめ資料をupするか文字サイズ調整します
理論はからきしな私ですが、たまにはこういう内容を学んで発表するのもアリかなと思ったりおもわなかったりしますね。
ただ、"きょんさんの開催する基礎勉強会"だから問題なかった(?)ものの、他のところで話す場合は前提となる用語の説明とか、実装よりの話を多く入れるべきなのでしょうね。
Groovy基礎勉強会に関しては「やっぱりASTな話が多いのねー」という感じでした。
『アジャイル開発とスクラム』と『SCRUM BOOT CAMP THE BOOK』を読んだ
久々の、そしておそらく学生生活最後の読書感想文です。
今回は今年1月、2月に発売されたスクラム系の本2冊。
アジャイル開発とスクラム 顧客・技術・経営をつなぐ協調的ソフトウェア開発マネジメント
- 作者: 平鍋健児,野中郁次郎
- 出版社/メーカー: 翔泳社
- 発売日: 2013/01/18
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 12回
- この商品を含むブログ (17件) を見る
- 作者: 西村直人,永瀬美穂,吉羽龍太郎
- 出版社/メーカー: 翔泳社
- 発売日: 2013/02/13
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 13回
- この商品を含むブログ (28件) を見る
最初は別々に記事を書こうと思っていたのですが、書けるときに書いておかないと両方書きそうにないので、まとめてしましました…。
購入理由
前者は『ユーザー向け』というのに興味をもったからで、後者は
感じたことをざっくりまとめると
アジャイル開発とスクラムが経営層・プロダクトオーナー対象、SCRUMBC本がスクラムマスター対象かな、という印象を受けました。
アジャイルサムライ*1などは開発チームを対象にしている印象があるので、三点セットで読めばアジャイルやスクラムを学べるのではないでしょうか。
雑感
SCRUMBC本にはプラクティスという言葉がほとんど(もしくは全く?)出てこない。TDDやペアプロなどの言葉も登場はするものの、言葉の説明はない。"Scrum Boot Camp"の本だからなのかはわからないですが、この割り切り(?)方は好きです。
対して、アジャイル開発とスクラムにはプラクティスが概説されています。こちらは"ユーザー向け"だからこそ説明を入れたのでしょうか。
そう考えると、この2冊(サムライ入れると3冊か)は絶妙なバランスですね。
気になったところ
SCRUMBC本、p109。
ボク「1週間で8ポイント…全部で168ポイントだから…」
SCRUM BOOT CAMP THE BOOK
ボク「今の人数で5ヶ月あれば…イケる!」
ボク「ブチョーと営業部長のところに行ってくる!」
キミ「いってらっしゃい…って、なんなの…」
仮に1ヶ月=4週間計算だったとして、5ヶ月で160が限界なのではー、と思った*2のはさておき。
これ、どう説明したのだろうね…というところが気になっていたりします。
今年はじめのTDDBC大阪(通称3.0)を開催しました
1/12に2013年はじめのTDD Boot Camp in 大阪を、1/13に2013年はじめのTDD Boot Camp in 大阪 外伝を開催しました。
色々と書きたいことはあるのですが現在進行形で修論の理に導かれているので、空き時間に随時更新していきます。
謝辞
- 会場スポンサーの株式会社Aiming様、および会場スタッフとしてお手伝いいただいたAiming社員さん
- 講演もしくはディスカッションに登壇していただいた和田さん、渡辺さん、西さん、いろふさん
- 当日スタッフおよびTAな方々
- TDDBCのMLで意見を投げてくださった皆様
- 本イベントに参加された皆様
ありがとうございました。
誰かが欠けても、本イベントは開催できなかったと、振り返ってみて改めて感じます。
開催理由
一部禁則事項に触れてしまうためすべては書けませんが、年始めにどでかい花火を打ち上げたかったとかそういうわけではないはずです。
一日目
いつもの内容で構成しました。
ペアプロの相方PC環境で苦労する問題はどうにかならないかなと思いつつ、今のところ初日にSCMBCを開催するしか思いついていないのが現状です。
何かないですかねぇ…。
二日目
当初はレガシーコード改善がいいなと思っていましたが、MLで「TDDBCで魂を削る必要は無い」という意見をいただいたため、最終的に「他人のコードを引き継ぐ」に変更しました。
イベントのゴールをもっと明確にすること、課題の難易度をもう少しゆるくすることが次回開催時に気をつけたいところでしょうか。
- 【教訓】誕生日にイベントを開催すると心に深いダメージがある
- その他2つの案「Test Double」と「リファクタリング」はAdvanced TDDBC的な感じでやってみたい
あとはこの大量のKPTをみると大体のことは察せると思われます。
雑感
そういえば、今のTDDBCとかつてのTDDBCでは雰囲気全然違うなーとか思ったりします。
どっちが良い・悪いとかそういう意味ではありませんが、なんとなくそう感じます。
あと「手を挙げれば誰でも始められる」という言葉がかつてはありましたが、今はどうなのだろうと開催中に思ったりしたのでした。
あー、もう一つ。
全工程終了後のスタッフ振り返りはスタッフオンリーでやるべきだと反省しました。
コンテキスト共有が難しいのですよね…。
おまけ
F#でやってみていましたが、私の残念加減が露呈しただけでした。とりあえず残骸を晒しておくのでどなたか改善してくだしあ。
https://gist.github.com/4605144
副作用を持たない自動販売機とは。
おわりに
終わりは始まりのための終わりなのだよ、とよくわからない言葉で締めておきます。
関数型言語を独学で勉強している学生です に対する私的考え
http://oshiete.goo.ne.jp/qa/7896221.html がTLで流れてきて、ちょっと思うところがあったので書きなぐっておきます。
なお、先に下記記事を読むことをおすすめします。丁寧かつとても面白い内容でした。
関数型言語を独学で勉強している学生です への答 - Oh, you `re no (fun _ → more)
これを読んで、自分でも少し言語化しておきたいと思いました。なので、投稿されていた質問に対する、昨年就活をしていた私個人の考えというか感想っぽい何かを簡単に書いておきます。
関数型言語で何か作って、それが新卒採用で評価されることはあるのか
あります。
私はいわゆる関数型言語の一つと言われているF#のコードを提出して、内定を頂きました。なので、技術を重視する会社であれば少なくとも可能性はあると思います。"可能性がある"と書いたのは、おそらく採用というのはコードだけで判断されるわけではないはずだからです。
ただまぁ、ほとんどの会社が"個人作成のオリジナル品"を要求するでしょうし(そうでないならコード要求しないと思います)、提示された条件をクリアしたコードである必要はありますよね、と。
いくつかの言語を試したほうがいいかも
(定義は人それぞれですが)関数型言語といってもたくさんあるので、納得がいくまで色んな関数型言語を触ってみるといいのでは、と思いました。そして、実用的なものがかけた言語でコード提出してみると。
これは時間の許す限りでしか行えない方法なので、時間のない場合は触ったことのある言語でやるしかないでしょうけれども…。
なぜ関数型言語のコードを提出したいのか
仕事で使いたいから、関数型言語に多少でも興味を持っている会社に就職したいから、自分の書いたコードが関数型言語のものしかないから…理由は様々あると思います。
いずれにせよ、何かしら肯定的な考えを持っていない限りは、無理してまで関数型言語で作ったものを提出しないほうがいいと思います…ってこれは書かなくてもわかることかもしれませんが。
何を作る?
別の言語で実装したものを移植してみる、とかでもアリなのではないでしょうか。車輪の再発明にはなりますが、まったく新しいものを作ろうとして挫折するよりは気が楽かなと。
以上、なげっぱなし記事でした。