programming

「美しいソースコード」に価値はない

「美しいソースコード」を書くために頭を捻っている時間は「コスト」だ。「価値」じゃない。同様に、「醜いソースコード」の解読やデバッグに費やす時間も「コスト」。要件定義も設計もテストもリファクタリングもみーんなコスト。どれもそれ自体に価値なん…

C#とCGアプリの相性について

etopirika5 さんが下記のように書かれているので、http://www.quatouch.com/products/hisui/index.html を作っている者として、ちょっと反応してみるよ。 C#は業務用の小さなアプリケーションをちょこっと作るには最適だと思うのですが,一年間かなり使って…

なぜプログラミングには中毒性があるのか

コードを書いてないと仕事をした気がしない。タスク分解しても、見積をしても、スケジュールを立てても、ドキュメントを書いても、ミーティングをしても、ちーっとも仕事をした気がしない。ウンウン唸ってコードを書いてバグで苦しんで「動いたーッ!」って…

C言語デバッグ小噺

先日C/C++のことを書いたせいか、ふと昔聞いたC言語プログラムのデバッグ小噺を思い出した。これは僕の体験談じゃなくてひとから聞いた話ね。もう記憶があやふやなので細かいところは間違っているかもしれない。これはUNIX系OSで動いていたとある巨大なプロ…

C/C++ から main 関数が消える日

Windows上でデスクトップアプリを開発している身としては、そのうちC/C++でmain関数を書く人って一人もいなくなるんじゃね、と思っている。もちろん簡単なテストコードのためにはmain関数が書けるほうが便利だから全く無くなるわけじゃないんだけど、C/C++で…

「ダブルの変数を宣言して」

ふと昔の笑い話を思い出した。同僚が、とある新人の指導に当たっていたときのことである。その新人はプログラミング経験がなく、ゼロからの教育であった。彼は新人のディスプレーを後ろから覗き込みながら指示を出した。「じゃあ、そこにダブルの変数を宣言…

"Let It Be" の替え歌 "Write in C" はもっと評価されるべき

知人の紹介で知った替え歌。すごい気に入ってしまった。delicious では結構ブックマークされているのに、はてブではあまりブクマされてないね。日本ではあまり知られてないのかな。 When I find my code in tons of trouble, Friends and colleagues come to…

リファクタリング力を分解する

先日のエントリ「リファクタリングとヒステリシス - カタチづくり」で色んなフィードバックを頂いたので、もうちょっと考えてみた。 先日のエントリと同様、次の2つのパターン (1) と (2) を考えることにしよう。 (1) 最初から 機能A と 機能B を把握してい…

なかなか気付かないバグ

少々ハマったので、ここにメモしておく。恥を晒しておけば同じミスは繰り返さずに済むかもしれないし。まず、次のインターフェイスを持つ「状態」オブジェクトを考える。 interface IState { void Enter(); void Exit(); } この状態に遷移したときには Enter…

僕がTDDをやめた理由

タイトルは、まあ、半分釣り。TDDな人もそうでない人も、肩の力を抜いてお気楽にどうぞ。 本題に入る前に まずお礼 ここで書くことは、前の記事 TDDはYAGNIに矛盾する? - カタチづくり から派生して色んな方と意見を交わした経験が元になっています。この場…

TDDはYAGNIに矛盾する?

Joel on Softwareに面白そうな記事が載っていた。とはいえ、どうも僕の英語力では完全な読解が難しい。会話を書き起こしたものなので当然ながら文体が会話調で、僕にはなかなか理解が難しいのだ。以下で僕の読み間違いがあれば指摘して欲しい。 さて、冒頭で…

C# でイベントハンドラを yield return してみよう

以前、yield return に関してこんな記事を書いた。C# の yield return の使い道 - カタチづくり簡単に説明すると、直線作図の機能を下記のような状態遷移モデルで捉えて、これを IEnumerator を利用して実装しようと言う話。 この記事を受けて、実際に実装し…

.NET Framework 2.0 上で LINQ を使おう(再)

先日は恥ずかしいやら情けないやらで、このまま終わるのもナンなので・・・。System.Linq 周辺のソースコードは、下記のバッチファイルを実行すればmonoプロジェクトから取得できる(Subversionがインストールされていること前提)。 svn export http://anon…

PseudoLinq 〜 .NET Framework 2.0 上で LINQ を使おう

・・・えっと、かなり凹んでます。みなさん、このエントリは読んでも無駄です。下記のmonoプロジェクトのソース使えばOKです。 http://anonsvn.mono-project.com/viewcvs/trunk/mcs/class/System.Core/ たぶん、作ったものはそのうち消します・・・。 穴があ…

C#3.0の拡張メソッドを使って As とか Switch/Case とかを作ってみた

As メソッドの巻 次のようなコードを書く機会が多い。obj が Hoge インスタンスかどうかを判定して、Hoge インスタンスの場合のみ何か特別な処理をしたいのだ。 Hoge hoge = obj as Hoge; if ( hoge != null ) { ... } しかし、どうもこのコードが気に入らな…

C#3.0とLINQでマンデルブロ集合を描いてみた

ただいまLINQ勉強中。無理やり(?)LINQを使ってマンデルブロ集合を描いてみたよ、という話。LINQ面白いよLINQ。 マンデルブロ集合の定義をWikipediaから引用しておく マンデルブロ集合(まんでるぶろしゅうごう、Mandelbrot set)とは、 次の漸化式 で定義…

慌てるな、ゆっくり急げ

先日は久しぶりに休日出勤というものをした。 背後に「締め切り」という名の怪物が迫りくる気配を感じている。思わず何度も振り返りそうになる。思わず、呼吸が乱れそうになる。思わず、慌てて走り出そうとしそうになる。 いや待て、慌てるな。ゆっくり急げ…

僕の開発スピードが最高に上がるとき

それは、完成が楽しみなとき。 早く完成した姿が見たい、早く頭の中のアイデアを実現してみたい、そう思っているときが一番速い。 逆に、完成がぜんぜん楽しみじゃないときは、何をやってもスピードが上がらない。アジャイルとかタスク分解とかTDDとか、そん…

C++のここがダメ、あるいは、何故私はC++を捨ててC#を選んだのか

気が向いたので続きを書くぞ。C++がダメというよりは、C++/Windows(要するにVisualC++)という開発環境がキツイと感じた、というほうが正確な言い方かもしれない。だって、C++という言語自体は結構好きだったから。あのマニュアルでコンピュータを操作して…

何故私はC++を捨ててC#を選んだのか

先日のとある飲み会にて、複数の方に訊かれた。 「どうしてC#にしたの?」 「そうそう、あんなにC++好きそうだったのに」 「C++の何がダメだったの?」 「何故C#なの?Javaでは駄目だった?」 新しい会社(株式会社カタッチ)で挑戦を始めて以来、僕はC++か…

C# の yield return の使い道

突然ではありますが、とっておきの yield return の使い道を紹介しようぢゃないか。・・・って別にそんなたいそうなものじゃないけどね。まず、IEnumerator ってのは次のような状態遷移モデルで捉えることが出来るわけだ。逆に考えると、状態遷移でモデル化…

readonly な struct に気をつけろ

軽くハマったので、メモ。 本当は怖い readonly な struct、の巻。 using System; // 値型(struct)であることがミソ struct Counter { public int Value; public void Increment() { ++Value; } } // Counter を readonly で保持していることがミソ class …

longのハッシュコード

longのハッシュコードにヤられたー。いやまあ、分かってみれば当たり前のことで単に僕が無知でしたってだけの話ではあるのだけれど、long値(64bit整数)の GetHashCode() が何を返すか僕は知らなかったわけで、そのせいで Dictionary の検索がめちゃくちゃ…

リフレクションで値型(struct)のデフォルトコンストラクタが取得できない

ハマッたのでメモ。結論から書くと、Activator.CreateInstance() を使用すればよい。サンプルとして下記のクラスと構造体を用意する。 class SampleClass {} struct SampleStruct {} コイツらのインスタンスをリフレクションで生成したい。つまり、typeof( S…

ShellExecuteで開けばいいんじゃない?

Linuxのエミュレータはたくさんあれど、Windowsをそのまま操作可能なのはCygwinだけではなかろうか。ファイルをWindowsネイティブで開きたい時だってcygstart fileで糸冬cygstartは要するにダブルクリックみたいなものである、関連付けられた実行ファイルで…

F#でテトリスを作ってみた

※ [2007.10.29] 画像載せました&ちょっと追記 ダウンロードはこちら。 http://www.geocities.jp/u_1roh/software/tetris_by_fsharp.zip ソースはこちら。 いまいち F# らしいコードになっていない気がする。誰か添削してくれるといいのに。 #light open Sys…

パイプ演算子 |> (F#)

この演算子はイイ!UNIX系のコマンドは、以下のようにパイプで連結して使われることがよくある。 % ls | grep hogeこれと同じようなことがF#の関数呼び出しで出来るのだ。 #light let numbers = [ 1; 4; 2; 5; 2; 6; 9] List.iter (fun x -> printfn "%i" x)…

F#から.NETライブラリの呼び出し(F#)

F#は.NETの上で動作する。だから.NETの強力なライブラリにアクセスが出来る。 static 関数を呼び出す #light open System Console.WriteLine( "Hello {0} libraries.", ".NET" ) FileInfo クラスを使う #light open System.IO let file = new FileInfo( "tes…

命令型プログラミング(F#)

F# はマルチパラダイム言語だ。次の3つのパラダイムをサポートしている。 関数型プログラミング (functional programming) 命令型プログラミング (imperative programming) オブジェクト指向プログラミング (object-oriented programming) ここでは命令型プ…

union type (F#)

"Foundations of F#" には "union type" って書いてあるんだけど、日本語訳すると何になるんだろう? (* ジャンケン型 列挙型(enum)のように定義できる *) type Janken = Goo | Choki | Pah let janken = Choki printfn "%A" janken // "Choki" と表示 (* …