TFServiceを使って F# プロジェクトのビルドを試した時のメモ
そういえば、TFServiceを触ったことがないなーということで、作業メモ。
とはいえ、基本的に以下の記事を参考にすればビルドとテストが行えるようになります。
- TFService 入門(1):Team Foundation Server/Serviceについて
- Team Foundation Service で既存プロジェクトのビルドをする方法 #tfsug
- TFS2012 自動ビルドで NUnit テストを実行する #tfsug - kaji_3's blog
- Create and run unit tests
- Part 3: Unit testing with Traits and code coverage in Visual Studio 2012 using the TFS Build – and the new NuGet adapter approach - Microsoft Application Lifecycle Management - Site Home - MSDN Blogs
私の環境 + 今回使用したプロジェクトはこんな感じです。
- Windows 8
- Visual Studio 2012 Ultimate
- Gitでバージョン管理
- プロジェクトは→を使用 https://github.com/pocketberserker/FsMachines
- つまりF#なプロジェクト
- NUnit + FsCheck
Team Foundation Serverの資料であってもServiceのほうも似たような形で設定できるので、そんなに問題にならなかった気がします。
あと、C#とF#で設定方法に差は見られないようです。
細かい設定方法はまだ調査中なので、また今度。
詳しい手順
あとでかく
まとめ
TFSUGの方々が素敵すぎた。
"Async in C# and F#: Asynchronous gotchas in C#"を翻訳しました
4月末に C#の非同期の落とし穴 でとりあげられていた Async in C# and F#: Asynchronous gotchas in C# を読みながら「面白いなぁ」とつぶやいたところ、ハマの子連れ狼さんに翻訳を勧められたので、英文和訳の訓練も兼ねて翻訳しました。
Async in C# and F#: Asynchronous gotchas in C# (Japanese translation)
公開後も diff を確認しやすい Gist で公開しています。
謝辞
4月末の連休に翻訳を開始してから公開まで、2週間くらいでしょうか。
この速度で、かつこの訳質で公開できたのは、的確な助言をくださったハマの子連れ狼さん、翻訳について快諾くださった原文著者のTomas Petricekさんのおかげです。
ありがとうございました。
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のはさておき。
これ、どう説明したのだろうね…というところが気になっていたりします。