a wandering wolf

Does a wandering wolf dreams of a wondering, sometimes programming sheep?

MSTest のための Assert.Throws

まさか、1年以上投稿していなかったとは…。

さて、MSTest を使っていると、例外が発生したかのチェックには ExpectedExceptionAttribute ぐらいしか使えないの、不便ですよね?

不便でない方がいらっしゃいましたら、この記事は面白みがないので他の記事を探されるとよいかと思います。

Read more...

IDisposable な Option 値を扱う

昨夜、こんな話題がありました。

それに対する反応がこちら。

このあたりをさらっと見ていこうと思ったのが、今回のトピックです。

Read more...

PropertyChangedEventHandlerのnullを避ける

最近はWPFアプリを書いているので、そのあたりの備忘録を書き残してみます。

Read more...

整数をビッグエンディアンのバイト配列に変換する

お仕事でC言語を触ることになりまして、日々あくせくしております。他の言語なら便利なライブラリがあるところ、C言語だと「さぁ、頑張ってみよう」みたいな感じで、自力でやらなくちゃいけないので、私のような温室育ちマンには大変ですね。

ちょうど本タイトルのようなことをやる場面に遭遇したので、備忘録がてら書き残します。

Read more...

D言語のプログラムがリターンコード -8 で落ちる

はじめに

3年ぶりくらいにD言語の記事を書きます。

最近、とあるD言語のプロダクトを書いております。昨夜、新しいコミットをGitHubにプッシュしたところ、連携させているTravis-CIがテストプログラムを実行しようとして、謎のエラーを吐いて落ちました。

Job #7.1 - Gab-km/darjeeling - Travis CI

手元の環境(Windows 7/32bit/DMD 2.071.0)で動かしたときは問題ありませんでした。 Program exited with code -8 などと言われましても、果たしてこれが意味するところはいったい何なんでしょうか?

Read more...

Persimmon のテストで成功と失敗の両方を扱う

前書き

Persimmon では普通のテストだけでなく、いわゆるパラメタライズド・テストを書くことも出来ます。パラメタライズド・テストは皆さんご存じの通り、パラメータをテストの外から渡すことにより、1つのテストで複数のテストケースに対応することが出来ます。

let ``your nice test`` =
    let parameterizedTest(input, expected) = test {
        let actual = fut input   (* fut はテスト対象の関数 *)
        assertEquals expected actual
    }
    parameterize {
        case ("F#!F#!", true)   (* ここのタプルが、下でrunしているテスト関数の引数になる *)
        case ("Fortlan", false)
        run parameterizedTest
    }

たいていのケースでは問題にならないんですが、あるパラメータでは例外が発生してほしい、というようなニーズ(そういう設計が良いかどうか、は今回議論しません)がある場合もあります。Persimmon では trap コンピュテーション式でテスト対象が投げた例外を取得することが出来ます。しかし、別のパラメータでは例外が発生しないようなテストケースを用意していた場合、テスト対象が例外を投げないとテスト失敗になってしまいます。

Read more...

PowerShell で使う認証情報を設定する

自由なインターネットを謳歌出来ない方向けの記事です。具体的には、認証付きプロキシの内側からインターネットの大海原に漕ぎ出さなければならない方(私を含む)用の記事となります。

PowerShell を使う上で、System.Net.WebClient などを使うことはよくあると思います。しかし、プロキシの壁があると、以前書いたこの記事のように、System.Net.WebProxy などを用意する必要があります。

毎回こんなことをやるのは手間ですし、第一 Invoke-Expression などで Web 上のスクリプトをダウンロードして実行しようとすると、スクリプト上の WebClient がプロキシを持ってなくて407が返ってくるというケースもよくあります。

じゃあどうするかというと、あらかじめデフォルトの認証情報を設定しておけば良いのです。

Read more...

C# での Using 関数

C# でファイルなどのリソースを上手く管理するには、皆さんもちろん using 句(VB であれば Using 句ですね)を使うことだろうと思います:

using (var sr = new System.IO.StreamReader("hoge.txt"))
{
    // StreamReaderインスタンスを使って何かする
    DoSomethingWith(sr);
}

同じ.NET言語で、F# でも同じようなことが出来て、例えば use 束縛があります:

use sr = new System.IO.StreamReader("hoge.txt")
// StreamReaderインスタンスを使って何かする
DoSomethingWith sr

一方、F# では using 関数というのもあって、こちらも同じような用途に使うことが出来ます:

using (System.IO.StreamReader("hoge.txt")) DoSomethingWith

ほとんどの C# ユーザーは現状で問題ないと思いますが、ごく一部の C#er (私を含む)には欲しい機能かもしれません。

Read more...

自前で assertSeqEquals を定義する

まえがき

全世界1,600(万…ではない)人の Persimmon ユーザの皆さん、こんばんは。

Persimmon 2.0に向けた開発が(僕以外の人で)進められています。そこにおそらく入るであろう機能に、 assertSeqEquals があります。何故これが必要かというと、今の Persimmon は seq<'T> 型の値同士をアサートすると上手くいかないという問題があります。seq<'T> 型の値を使うことは少なくないので、アサートできて欲しいです。

seq同士を比較したい · Issue #73 · persimmon-projects/Persimmon

assertSeqEquals が導入されるのを待つという選択肢もありますが、私はよくこの issue にぶち当たってしまうので、出来れば今すぐ解決したい。その場合はというと、自前で assertSeqEquals を実装する、という手段をとることになります。

Read more...

Persimmon合宿に行ってきた

3/12~13の2日間、神奈川県は湯河原にて、通称「柿」こと Persimmon のための開発合宿に行ってきました。

persimmon-projects/Persimmon

この開発合宿の目的は確か2点あって、

  • 次期 Persimmon (いわゆる Persimmon 2.0)に向けてモデルの再設計を行う
  • Persimmon 用のVS拡張を作る

というのを合宿で頑張ろうということになっていました。

なっていました、というのは、目的その2がほぼほぼ解決しつつあるためです。

kekyo/Persimmon

けきょー先輩がVSテストエクスプローラなど、VS拡張周りの重い部分に電撃戦を敢行してくれたおかげで、むしろ合宿でやることがなくなったのでした。(一部動作がアレしてるところがあったようですが、そこは某社内で情報展開がなされるはず…?)

なので、本開発合宿は目的その1にフォーカスして実施されました。

Read more...