自分に関するbleis-tiftのブックマーク (27)

  • Optionalは引数に使うべきでない、という幻想について - ぐるぐる~

    継続渡しすると戻り値は引数になるから「Optional は戻り値にのみ使うべき」というルールは無意味だよ、という話。 あ、そういう話ね、と分かった方はこれ以上読む必要はありません。 Mono が Async + Optional + 例外という欲張りパック状態なのも問題ですが、それについてはまた今度(Mono<Optional<T>> 使わずに Mono<T> を使え、という指摘があり得る。ただ、そっちもそっちで言いたいことはある、という程度)。 今回は、 Mono は Async くらいの意図として使っています*1。 まず、こんなメソッドがあったとします。 Mono<Optional<String>> f(); これ自体は戻り値に Optional を使っているだけなので、「Optional は戻り値にのみ使うべき」は守っています。 しかし、これを使う側はそうはいきません。 例えば、値が

    Optionalは引数に使うべきでない、という幻想について - ぐるぐる~
  • 続・そろそろPower Assertについてひとこと言っておくか - ぐるぐる~

    3年前にこんな記事をあげました。 bleis-tift.hatenablog.com 3行でまとめると、 Power Assertはユニットテストのためにほしかったものではない 欲しいのは結果の差分 誰か作って! というエントリでした。 そしたら id:pocketberserker が作ってくれました! github.com PowerAssertより強そうな名前でいい感じです。 Power Assertは時代遅れ、今はMuscle Assertだ!的な話かな?— 裸のWPF/MVVMを書く男(マン) (@gab_km) 2016年6月1日 MuscleAssertの使い方 このライブラリは、PersimmonというF#用のテスティングフレームワークを拡張するライブラリとして作られています。 ただ、ざっくり概要をつかむだけであればどちらも知らなくても問題ありません。 このライブラリででき

    続・そろそろPower Assertについてひとこと言っておくか - ぐるぐる~
    bleis-tift
    bleis-tift 2016/09/13
    筋肉
  • Ruby嫌いがアンダースタンディングコンピュテーションを読んで - ぐるぐる~

    アンダースタンディング コンピュテーション―単純な機械から不可能なプログラムまで 作者: Tom Stuart,笹田耕一(監訳),笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型この商品を含むブログ (2件) を見る 一番最初にはっきりさせておきますが、Rubyは嫌いな言語です。 が、このRubyが嫌いな自分でもいいだと言える*1でした。 自分が対象読者に入っているかどうかは実際に読んでみるまで微妙かな、と思っていましたが、とても楽しめました。 以下、書評です。 Rubyという選択 説明用のコードとして書はRubyを使っていますが、 これに関してはその理由が1章にあります。 私はその明瞭さと柔軟さに魅かれてRubyを選びました また、続けて 書にはRuby独自の機能に依存しているところはありません。 そのため、もしあなたにとってわか

    Ruby嫌いがアンダースタンディングコンピュテーションを読んで - ぐるぐる~
    bleis-tift
    bleis-tift 2014/09/21
    沖縄旅行楽しいです^q^
  • コンピュテーション式におけるreturnとyield - ぐるぐる~

    今日、id:htid46 とF#の話をしつつ帰った時のまとめです。 前提条件 次の2つのエントリを読んでいることが前提です。 詳説コンピュテーション式 - ぐるぐる~ コンピュテーション式の実装にStateを用いる - pocketberserkerの爆走 returnとyieldの変換規則 先日のエントリでも書いたように、ReturnとYield、ReturnFromとYieldFromは全く同じ変換のされ方をします。 T(return e, C) = C(b.Return(e)) T(yield e, C) = C(b.Yield(e)) T(return! e, C) = C(b.ReturnFrom(src(e))) T(yield! e, C) = C(b.YieldFrom(src(e))) つまり、ReturnもYieldも同じ実装にしたとしても、コンパイルは通ります。 とい

    コンピュテーション式におけるreturnとyield - ぐるぐる~
    bleis-tift
    bleis-tift 2014/01/30
    ということで、returnとyieldについて書いた #fsharp
  • そろそろPower Assertについてひとこと言っておくか - ぐるぐる~

    タイトルはもちろん釣りで・・・はない! ちょっと真面目に、Power Assertについて意見を述べたいのです。 そもそもPower Assertって何? てきとーに説明すると、 普通の比較演算子で普通にassert書けば、失敗時に各部分式の値を表示してくれる ようなものです。 Groovy製のテスティングフレームワークであるSpockがおそらく家大です((要出典。こういう系の発想は割と昔からあったし、Spock以前に実装例がありそうな気がする。そもそも、Spockは最初からPower Assert持ってたのかも調べないといけない。ちなみに、式木を弄ってAssertを組み立てる、というものであれば(PowerAssertよりも情報量は少なくなるものだけど)、自分の知る限りだと2009年6月にこんな記事があります。 http://themechanicalbride.blogspot.j

    そろそろPower Assertについてひとこと言っておくか - ぐるぐる~
    bleis-tift
    bleis-tift 2013/10/02
    てことで、PowerAssertをDisる記事書いた
  • 遅延評価いうなキャンペーンとかどうか - ぐるぐる~

    遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない」です。 Java における「評価」とは まず一番最初に、Java で「評価」って言うと、どういうことを指すのかを確認しておきます。 言語仕様の該当部分を要約すると、こんな感じでしょうか。 プログラム中の式を評価すると、結果は 変数 値 無し のうちのどれかとなる。 評価した結果が値になる、というのはいいでしょう。それ以外の 2 つを軽く説明します。 評価の結果が「変数」とは? コメント欄で指摘が入っています。 代入の結果は変数ではありません(15.26)。 結果が変数となるのは、ローカル変数、現在のオブジェクトやクラスの変数、フィールド

    bleis-tift
    bleis-tift 2013/01/06
    > id:terazzo 引数に渡す部分の評価は式木かFuncかによりません。> id:yogasa 「いわゆる」とかにしたくないがためのエントリですので・・・> id:hiratara thunk、もしくはpromiseでどうでしょうか?
  • C# から使いやすい F# コードの書き方 - ぐるぐる~

    さて始まりました、F# Advent Calendar 2012 です。 今年は、「実用」がテーマと言うことで、F# で書いたコードを C# から使いたくなった時に気を付けるべきポイントなどをまとめました。 F# と C# で異なる名前を付ける F# では、module に定義する関数や変数の名前は、lowerCamel で付けるのが一般的です (List.map など)。 しかし .NET の世界では、これらの名前は基的に PascalCase で付けることになっています。 CompiledName 属性を使うことで、この差を埋め、F# からは lowerCamel に、C# からは PascalCase に見える名前を付けることができるようになります。 (* F# *) module Util = [<CompiledName "ToStr">] let toStr x = spri

    bleis-tift
    bleis-tift 2012/12/01
    せるふくまー
  • F#言語の基礎文法(1/2) - @IT

    前回は、F#の概要や、関数型プログラミングの基礎、F#でよく使われるデータ構造のリストとタプルを説明した。今回後編では、F#でプログラムを書くに当たって必要最低限の文法を紹介していく。 ■主要な文法 ●if式 F#で条件による分岐を行うためには、if式を使用する。

    bleis-tift
    bleis-tift 2012/05/10
    セルフクマー
  • F#で初めての関数型プログラミング(1/3) - @IT

    ■F#とは F#は、マイクロソフト社製のプログラミング言語で、Visual Studio 2010から標準搭載されている。まずは、F#がどのような言語なのかを見てみよう。 ●マルチパラダイム言語「F#」 F#は複数のパラダイムをサポートするマルチパラダイム言語だ。F#がサポートするパラダイムには、 手続き型 関数型 オブジェクト指向プログラミング などがある。 マルチパラダイム言語であるため、C#やVB(Visual Basic)といった従来の.NET言語を置き換える形でF#を使うこともできる。しかし、記事ではF#のメインとなるパラダイムである「関数型」にフォーカスを当てて紹介していく。 ●関数型言語「F#」 F#は、静的型付けの関数型言語である「OCaml」に強い影響を受けている。そのため、F#の主となるパラダイムは関数型プログラミングになる。 さて、関数型言語とは何だろうか? この問

    bleis-tift
    bleis-tift 2012/04/12
    せるふくまー
  • クラウド温泉2.0@小樽で発表してきた - ぐるぐる~

    発表資料の圧縮版です。 仕事で使うF# View more presentations from bleis tift 「仕事で使う F#」と言いつつ、仕事で使う部分は少ないです。 最初の構想としては、NaturalSpec とか Excel DNA とか FParsec とかの話をしようと思っていました。 が、参加者を見てみると、関数型プログラミング言語のことを知らない人や、 F# を勉強中の人がいたので、方向転換しました。 方向性として、 関数型プログラミング言語を知らない人向けに、F# を使うとなんだか凄そう感を出す F# を勉強中の人向けに、躓きそうなところや疑問に思いそうなところを潰しておく の 2 つが考えられたんですが、デブサミの発表では前者に振ったので、今回は後者に振ってみました。 仕事で・・・の部分については、「実案件で」ということで FParsec の話を入れました。

    クラウド温泉2.0@小樽で発表してきた - ぐるぐる~
    bleis-tift
    bleis-tift 2011/08/30
    せるふくまー
  • TDD Boot Camp のお題を C# と Git でやってみた - 予定は未定Blog版

    自分で考えたお題を自分で解くとかそれなんてマッチポンプ・・・ 打ち上げ終了後のホテルと、翌日の帰りの新幹線の中で書いたコードを順番に追ってみます。 準備するものは Git で、あるといいものは Visual Studio 2010 と NUnit です。 まぁ、割と小さいコード (テストを含めても 300 行もない) だし C# を知らない人でもそれなりに雰囲気は掴めると思います。 あ、このエントリかなり長いです。 準備 Windows の場合、Git Bash を開いて、適当なフォルダに移動して git clone git://github.com/bleis-tift/MotsunabeZombieProject.git cd MotsunabeZombieProjectとしてください。 MotsunabeZombieProject というフォルダができて、その中に Git のリポジト

    TDD Boot Camp のお題を C# と Git でやってみた - 予定は未定Blog版
    bleis-tift
    bleis-tift 2011/03/24
    せるふくまー! #tddbc
  • よくあるコーディングパターンと LINQ to Objects の対応付け - 予定は未定Blog版

    あると便利ですよね、ということで書いてみた。 よくあるコーディングパターンには yield とか使ってないです。 こっちの方がよくありそうでしょ? Select 全ての要素に何らかの処理を行いたいときに使用します。 // よくあるコーディングパターンその1 // 全ての要素を2倍するメソッド public IEnumerable<int> DoubleAll(int[] target) { var result = new int[target.Length]; for (int i = 0; i < target.Length; i++) { result[i] = target[i] * 2; } return result; } // Selectで書き直し public IEnumerable<int> DoubleAll(IEnumerable<int> target) { re

    よくあるコーディングパターンと LINQ to Objects の対応付け - 予定は未定Blog版
    bleis-tift
    bleis-tift 2011/02/22
    > id:terazzo n個組み合わせてもループ回数はn倍になりません。パイプライン的なイメージと言えば分りやすいかも。
  • TDD と Git についてメモ - ぐるぐる~

    ついったーにつぶやいたものを中心にまとめました。 まだこれで正しいという確信を持てていないので、メモという位置付けでお願いします*1。 なので追記する可能性が高いです。 TDD でドキュメンテーションコメントを書くタイミング カテゴリを指定して実行するテストを分ける git stash の使い道 TDD でドキュメンテーションコメントを書くタイミング ここでは Git を前提にしますけど、rebase 使えるならほかのものでも大丈夫なはずです。 TDD でいつドキュメンテーションコメントを書けばいいのか、というのは、 Re:TDD を理解するためのまとめ - ぐるぐる〜 TDD Boot Camp の参加報告とか読んで - ぐるぐる〜 と、過去 (といっても半年も経ってないけど) ずっともやもやしてたんですが、 事前条件で楽できないかなーという考え - Logic Dice に対する自分な

    TDD と Git についてメモ - ぐるぐる~
    bleis-tift
    bleis-tift 2010/02/19
    id:nobeans > rebase前にブランチ切るのはいいですね。rebase怖い、ってのはよくわからないです
  • VSSをDisりたい

    Yuki Tamura @isoparametric @finalfusion 簡単にいうとVSSはいつも誹謗されるが、VSSを体験したことがない人は幸せで、VSSは死ね、ということですね? 2010-02-04 22:39:30

    VSSをDisりたい
  • List を文字列化 - ぐるぐる~

    List<Char>.ToString() とか C# 3.0 以降なら LINQ やら拡張メソッドやらで OK ですね。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication { class Program { static void Main(string[] args) { var hello = "hello"; // 元ネタにあわせるためにToListを呼び出す var buf = hello.ToCharArray().ToList(); // LINQ Console.WriteLine(buf.Aggregate("", (s, c) => s + c)); // 拡張メソッド Console.Wri

    List を文字列化 - ぐるぐる~
    bleis-tift
    bleis-tift 2009/11/30
    >id:neuecc インテリセンス頼り切りはいけませんね^^;クロージャを使った方法はなるほどです。情報ありです!
  • Log4Net のラッパーをつくる - ぐるぐる~

    備忘録の意味も込めて。 やりたいことは、 Debug 系メソッドはリリースモードでは呼出しごと削除したい いちいち LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); って書くのだるいから省略したい の 2 つ。 Debug 系のメソッドをリリースモードで呼出しごと削除する これは、ConditionalAttribute を使えば出来そうだと軽く考えていたんだけど、この属性、インターフェイスやら抽象メソッドやらには指定できないらしい・・・ まぁ、当たり前っちゃぁ当たり前なんだけど・・・ で、partial メソッドもなんかそれっぽいことに使えそう・・・と、思ったんだけど、こっちも制限が厳しすぎて実現不可能・・・ これも当たり前なんだけどね・・・ で、結局、ObsoluteAttribute と pragma

    Log4Net のラッパーをつくる - ぐるぐる~
    bleis-tift
    bleis-tift 2009/11/18
    ConditionalAttributeとかObsoluteの回避とか
  • NUnit 2.5 が便利すぎる - ぐるぐる~

    NUnit 2.5 RC - ZOETROPEの日記 これみてもらえればもうほとんど言うことって残ってないんですが・・・ 一応、ちょっと補足的な情報を。 TestCase 元エントリでは引数が 3 つとなってますけど、3 つ以上も可能でした。 [TestFixture] public class AttributeTestSample { [TestCase(1, 2, 3, 6)] [TestCase(10, 20, 30, 60)] [TestCase(10, 10, 10, 30)] public void TestCaseSample(int x, int y, int z, int expected) { Assert.That(x + y + z, Is.EqualTo(expected)); } } TestCaseSource との使い分けの指針としては、 コンパイル時定数

    NUnit 2.5 が便利すぎる - ぐるぐる~
  • Re:TDD を理解するためのまとめ - ぐるぐる~

    TDDを理解するためのまとめ - Logic Dice を読んで、いい機会だと思って テスト駆動開発入門 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート出版社/メーカー: ピアソンエデュケーション発売日: 2003/09メディア: 単行購入: 44人 クリック: 1,026回この商品を含むブログ (156件) を見る を買って、実際に「Part 1 Money オブジェクトの例」を写経してみた。 んで、感じたことなどを。 あ、あくまで今の時点での考えなので、変なとこあったら指摘してくだしあ! Red から Green、Green から Red ある意味では残念な事なのですが、大抵のTDDの説明に記述されている、「RedからGreenに変わることが気持ちいい」という、その感覚が分からないのです。 TDDを理解するためのまとめ - Logic Dice この気持ちは

    Re:TDD を理解するためのまとめ - ぐるぐる~
    bleis-tift
    bleis-tift 2009/09/26
    現時点での考え/TDDで成功するには前提知識として、「良い設計」を沢山知っている必要があるような気がしてきた
  • Excel を使って SQL をリファクタリング - ぐるぐる~

    結果が変わっていないことを確認しながら SQL をリファクタリングするために、EXCEL - マクロ・シート間の照合 - Office系ソフト - 教えて!gooを参考にマクロを組んでみた。 Function HasDiff_Expect_Actual() As Boolean HasDiff_Expect_Actual = False ' 必要な情報の取得 Set EXPECT_SHEET = ActiveSheet.Previous Dim END_OF_ROW, END_OF_COL As Integer END_OF_ROW = EXPECT_SHEET.UsedRange.Rows.Count END_OF_COL = EXPECT_SHEET.UsedRange.Columns.Count ' アクティブ部分を比較 Dim col, row As Integer For col

    Excel を使って SQL をリファクタリング - ぐるぐる~
  • SQL で数式を評価 (完全版 + α) - ぐるぐる~

    大阪で働く友人 mi との合作*1で不完全版が完全版に! やっぱり mi はすごかった!! WITH Input(id, str) AS ( -- idと数式を渡す SELECT 1, '1 + 3 / -8' UNION ALL SELECT 2, '2*3*4*5+99' UNION ALL SELECT 3, '4 * (9 - 4) / (2 * 6 - 2) + 8' UNION ALL SELECT 4, '1 + ((123 * 3 - 69) / 100)' UNION ALL SELECT 5, '2.45/8.5*9.27+(5*0.0023)' ) , Separators(i, ch, str_src, priority) AS ( SELECT 1, '-', 1, 1 UNION ALL SELECT 2, '+', 1, 1 UNION ALL SELECT

    SQL で数式を評価 (完全版 + α) - ぐるぐる~
    bleis-tift
    bleis-tift 2009/06/12
    大阪で働く友人miとの合作