ここ十数年、プログラマーの間ではデザインパターンというものが広まっています。
プログラマー以外の世界の話をするなら、これは建設業界が始めたものらしいですね。

物事の解決策を、さまざまなパターンに分けて、
それぞれについて気をつけるべき点について書き留めてあります。

ある問題を解決するべき手法というのはたいへん複雑なもので、
すべてを考えるのは大変難しいものですが。

その要素をなるべく細分化して、
その一つ一つについて考えるようにすれば、
その一つ一つはある程度単純なものとなり、考察や議論を進めることができます。
また、一つ一つについて復習をし、理解を深めることもできます。
そしてそれを組み合わせて全体の複雑な問題を解決します。

そういうパターンは、プログラム(や建築)以外でも役に立ちます。
組織を動かす場合にも。

プログラマーの本職はプログラムですが、
プログラムについての新しくてよりよいやり方を、組織に広めることも、
どうしても仕事として必要となってくるものです。

それもパターンとして分析すると、わかりやすいのではないでしょうか。
そういうパターンについて48並べたのがこの本です。

この本を読んでいて思うのですが。

プログラムのデザインパターンと比較して、
組織に働きかけることには、パターンを分析するに向いた点が少なくとも一つあると思います。

プログラムは非常に論理的なものです。
なので、パターンをいちいち暗記しなくても、
論理的に考えれば答えが出てくることは多い。
なので、デザインパターンの暗記ばかりに頼ることには善し悪しが出てきます。

が、人の動きというのはそういうものではない。
論理的に考えてばかりいても適切な答えが出てこない場合は多いです。

なので、どうしてもパターンを暗記するようなことが向いた事例が多く出てくる。

特に人間関係の理解がプログラムの理解より劣っているようなプログラマーなら、
人間関係について暗記しておく必要があることも多いため、
一度読んでおく価値はあるでしょう。
最近アイコンの登録ができる場所が大変増えてきたので、
作ってみました。

ネットでもあまり社交的なほうではないですが、
それでも5つは公開したかな。多いですね。
ここもですけど。

絵心に自信がないので、Unityを利用しました。
おかげで動くバージョンがあります。

Unity版

静止画よりも動くもののほうが作りやすいとは、
世の中変わりましたね。
ziprubyのRuby2.0対応はどうも絶望的らしい。

誰かが開発を再開してくれるとか、
いっそ自分でフォークするとかすれば別なのでしょうが。

使っているライブラリにこう言うことがあると面倒。
rubyzipに切り替えるしかないのか。

またQiitaとマルチポスト。

Rubyって何でもできるんですね。

class A
  attr_reader :x
  def initialize(x)
    @x = x
  end
end

class B
  def self.new(x)
    obj = A.allocate
    obj.send(:initialize, x)
    obj
  end
end

b = B.new('abc')
puts b.class # => A
puts b.x # => abc

もちろん多用すると収拾がつかなくなるだけですが、
newの引数によって別のサブクラスを生成したい場合などは、
自然な呼び出し方ができますね。

継承した時などに思わぬ挙動をすることがあるようなので、
いろいろ試行錯誤中。
それも考慮した書き方もできそうです。


Qiitaにも投稿しましたが、こっちを捨てるのももったいないのでこっちにも。
こっちはほとんど見ている人がいませんし、マルチポストでもいいでしょう。
シンタックスハイライトは向うでやったのをコピペですね。

.NETでストリームを扱う時に、BOMの扱いについて困りましたが、何とか解決。

stream.ToArray()を使う方法があるのですが、
この方法でBOMありのストリームを読みこんだ場合、
BOMも文字列に含まれてしまい、ストリームに書き込んだ文字列と異なってしまいます。

.NETは普通に書き込むとBOMありになるため、
これは困ります。

StreamReaderなどを使いましょう。

var input = "test";
var stream = new MemoryStream();
var writer = new StreamWriter(stream, Encoding.UTF8);

await writer.WriteAsync(input);
await writer.FlushAsync();

stream.Position = 0;
var reader = new StreamReader(stream, Encoding.UTF8);
var output1 = await reader.ReadToEndAsync();

stream.Close();
var output2 = Encoding.UTF8.GetString(stream.ToArray());

var b1 = input == output1; // => true
var b2 = input == output2; // => false
自分のまとめとしては技術メモはここに書いておきたいのですが、
最近はQiitaに書いたほうが世の中の役には立ちますね。

どう使い分けようかな。

しばらくはマルチポストでいきましょうかね。
Amazonの書評ともマルチポストしてますし。

そのうちこっちにはリンクだけというのもありですが。
それもつまらないな。
せっかく結構書いてきましたしね。
DirectX9を使ったプログラミングの解説書。

最近のプログラミングの本にしては難しいとは思いますが、
DirectXくらいの低レイヤーだと、これは必然なのでしょうね。
DirectX関連のほかの本と見比べてもそんなに遜色はなさそうです。

基本的にはリファレンス的な記述が続きます。
が、サンプルプログラムも適度に混ぜてあり、
説明もある程度はついており。
また、コードのダウンロードもできるようになっており。

頑張れば理解できるようになっているとは思います。
あとは努力なんでしょうね。

まあ最近のライブラリの解説本を読むつもりで読んだら、
挫折しかねないことは確かだと思いますが。


DirectX9実践プログラミング―WindowsXP/Vista/7対応版 (I・O BOOKS)/I/O編集部
¥2,940
Amazon.co.jp
ここ一年くらい、
会社で新技術の調査のお仕事をしています。

それ自体は勉強になっていいのですが、
新技術の調査が会社として必要であるとあちこちに説明して歩く必要がありまして。
説得とかは大変苦手なので、ものすごく精神的に疲弊しております。

おかげで家に帰って調査する気力がない。

とはいえ業務時間に調査はしているのでよく考えると勉強自体は進んでいるとは言えますが。
家でできないのとプラスマイナスしても、まあプラスではありますね。

ただまあ、会社で調査したことをそのままブログに書くのも気が引けるので、
なかなか書き込むことがない。

とりあえず、年末年始は長めに休暇が取れましたので、
ここにもなんかかけると思います。
そろそろ勉強も再開。

久しぶりに始めると、ツールのバージョンアップに対応しなくてはならず、
作業が順調に始められませんね。

SpreadSheetAsDataは、
Rubyの最新バージョンで、利用しているライブラリが動かない模様。
きちんとコンパイルからやり直さないと無理ですかね。

ストアアプリのほうはWindows8.1移行が完了。
デフォルトの設定がシンプルになってよいことですね。
社内政治に巻き込まれて力尽きて早数か月。

いや一般論としては大したことやったわけではないんですがね。
しかもなぜか交渉自体はうまくいったのですが。

ただ非常に苦手としているのでダメージが大きかった。
仕事はまあできているものの、家に帰ってからの活動が割と全滅。

おかげでブログもかけてないわけですけれど。
そろそろ復活しないとなあ。


休眠前に読んだ本の書評を書かねばならないのですが、
内容をあんまり覚えていない。
どうしましょうね。