<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>不可解計画</title>
<link>http://www.project-enigma.jp/members/kagelow/locus/</link>
<description>熱く、硬く、重い。陰郎の開発日記。たまには与太話も。
http://www.project-enigma.jp/</description>
<language>ja</language>
<copyright>Copyright 2010</copyright>
<lastBuildDate>Wed, 01 Sep 2010 00:30:30 +0900</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.17-ja</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>諸連絡・近況報告</title>
<description><![CDATA[<ul>
    <li>【Scrooge】 休止中</li>
    <li>【Esprit】 休止中</li>
    <li>【Japonica】  休止中</li>
    <li>【SmartPointer】 休止中</li>
    <li>【SquareRoot】 休止中</li>
    <li>ニート対策には人頭税と強制労働を！</li>
    <li>トラックバックを送信したい方は mt-tb と .cgi の間に 2 を入れてください。</li>
    <li><a href="http://ppl.palmwareinfo.com/">PPL</a> の活動も参照せよ。</li>
</ul>
]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/09/post_149.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/09/post_149.html</guid>
<category></category>
<pubDate>Wed, 01 Sep 2010 00:30:30 +0900</pubDate>
</item>
<item>
<title>だってそっちの方が楽しいから。</title>
<description><![CDATA[<p>　職場の友人が、「世界一難しい数独の問題」というのがネット上でニュースになっていると教えてくれた。また、<a href="http://nande-palm.cocolog-nifty.com/palm/2010/08/post-1cd7.html">MA-CY さんも weblog で取り上げていた</a>。そこで、陰郎もいっちょやってみようかと思った。</p>

<p>　といっても、自分で解くわけじゃない。機械に解かせてみようと思ったのだ。で、できたのがこれ。ZIP ファイルにソースコードと結果の画像が入っている。自分で解きたい方は画像の方は見ないように。</p>

<p>・<a href="http://www.project-enigma.jp/members/kagelow/locus/archives/numplc.zip">numplc.zip</a></p>

<p><br />
　ソースの拡張子は cxx だが、ほとんど C 言語だ。たいていのコンパイラでコンパイルできると思う。実行は、以下のような感じでパラメータとして問題を与える。９×９のマスを、左上から右方向・下方向に数字を羅列する。空欄は０にする。なんとも適当な作りだ。</p>

<pre>
 ./numplc.exe  005300000800000020070010500400005300010070006003200080060500009004000030000009700
</pre>

<p>　なんで今回こんなことをやったかというと、何年も前に同じものをでっちあげたことがあったからだ。当時、母と兄が数独にハマっており、自動的に解くプログラムを Microsoft Excel の VBA マクロで作ったら「お前はなんてイヤな奴だ」と言われたことがあった。まぁ楽しみを奪うつもりはなかったのだが、そう言われるのも仕方がないかもしれない。</p>

<p>　話を戻そう。で、「世界一難しい問題」ということで、当時の自分のロジックが通用するかどうか試してみたかったのだ。今回は C で書いたが、覚えている限りで実装してみたところ、簡単に誤った解答をハジき出して平気な顔をされた。こりゃいかんとイジり回して完成させたわけだ。結果わかったことは、初歩的な消去法だけでは解答できないということ。「ここが仮に３だったら‥‥‥」などといった仮定のもとに進め、矛盾に行き当たったら仮定を置いたところまで戻って別の選択肢を‥‥‥というのを再帰的に繰り返していかないとダメだった。300～400 行程度のプログラムだが、なかなか面白かった。</p>

<p>　計画的に作ったわけじゃないので、あまりキレイなコードじゃないし、最適化の余地が至るところに残っている。それに、そもそもちゃんと C++ で作れば良かった。そうすれば同じロジックで４×４のを解いたりもできたかもしれない。ま、それはそれで。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/09/post_617.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/09/post_617.html</guid>
<category>開発</category>
<pubDate>Wed, 01 Sep 2010 00:30:00 +0900</pubDate>
</item>
<item>
<title>異環境データのためのデータ抽象</title>
<description><![CDATA[<p>　以前、「<a href="http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/post_615.html">コンパイル時点での構成体サイズチェック</a>」という記事を書いた。今回は、その続編とでもいうべきお話。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/post_616.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/post_616.html</guid>
<category>開発</category>
<pubDate>Sat, 21 Aug 2010 04:30:00 +0900</pubDate>
</item>
<item>
<title>iPhone 版 「おやじのための自炊講座」</title>
<description><![CDATA[<p>　宣伝で恐縮だけど、マイカ出版のiPhone 版電子書籍「おやじのための自炊講座～おやじの旬魚旬菜」が本日発売。</p>

<p>・<a href="http://itunes.apple.com/jp/app/lets%20enjoy%20cooking%20daddy/id383318804?mt=8">おやじのための自炊講座～おやじの旬魚旬菜</a></p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/iphone.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/iphone.html</guid>
<category>2010年</category>
<pubDate>Sun, 01 Aug 2010 01:00:00 +0900</pubDate>
</item>
<item>
<title>コンパイル時点での構成体サイズチェック</title>
<description><![CDATA[<p><br />
　仕事をしていると、プライベートな開発ではあまりやらないことをやる。これもそのひとつだ。ある決まった長さのベタ詰めの文字列が何処かから飛んできて、それをさらに決まった部分文字列に分けて構造体のように扱う必要がある。大抵の場合、char 型配列のメンバがずらりと並んだ構造体を用意して、あたえられた文字列の先頭ポインタをキャストして使うことになるだろう。以下のように。</p>

<pre>
  struct Record {
      char item1[16];
      char item2[8];
      char item3[24];
      char item4[8];
  };
    
  void foo( const char* pData ) {
      const Record* pRecord = (const Record*)pData;
      // :
      // :
      // :
  }
</pre>

<p>　ここで問題になるのは、「何処かから飛んでくる」データの長さだ。上の Record 構造体のサイズはそれに合わせておく必要があるが、こういうのは変動したりするし、そうでなくても人間の目でチェックするのは面倒だしミスの元にもなる。機械的なチェックがしたいわけだ。</p>

<p>　最初に考えつくのは、assert を使用したものだ。ベタ詰めの文字列の長さが 56 と決まっているのであれば、例えば以下のように。</p>

<pre>
  assert( sizeof(Record) == 56 );
</pre>

<p>　ちなみに、文字列長を strlen で調べて構造体サイズとの一致を assert でチェックするのもあるが、これはどちらかというと文字列長のチェックだ（pDataがNULL終端しているという前提）。</p>

<pre>
  void foo( const char* pData ) {
      assert( sizeof(Record) == strlen( pData ) );
      const Record* pRecord = (const Record*)pData;
  }
</pre>

<p><br />
　そして、これらは実行時チェックだ。そこが問題である。ランタイムに依存しないチェックが実行時まで持ち越されるのはおかしい。というわけで次に思いついたのは以下のような間違った（実際には動作しない）チェック。</p>

<pre>
  #if sizeof(Record) != 56
    #error "size mismatch!"
  #endif
</pre>

<p><br />
　これはコンパイラではなくプリプロセッサが処理するものだから、そもそも sizeof 演算子が使えるわけがない。ここに至って、コンパイル時点でのチェックを C 言語でやる方法を自分は知らないことに気付く。</p>

<p>　そこで、C++ 前提でテンプレートを使う方法を考えてみた。まず、記述は以下のようになる。コンパイラがこのインスタンス化に失敗すればコンパイルエラーにできる。</p>

<pre>
  SizeChecker&lt;Record, 56&gt; recordSizeCheck;
</pre>

<p><br />
　で、SizeChecker クラステンプレートは以下のようにする。同様にクラステンプレートである SizeCheckerImp からの派生とし、与えられた構成体の実サイズと想定サイズの差をテンプレートパラメータとして与えているわけだ。</p>

<pre>
  template &lt;typename STRUCT, int SIZE&gt;
  class SizeChecker : public SizeCheckerImp&lt;sizeof(STRUCT)-SIZE&gt; {
  };
</pre>

<p><br />
　これで、SizeCheckerImp&lt;0&gt; からの派生の場合のみコンパイルに成功すれば良い。そこで、以下のようにした。</p>

<pre>
  template &lt;int N&gt; class SizeCheckerImp {
  private:
  	SizeCheckerImp( ) { };
  };
  template &lt;&gt; class SizeCheckerImp&lt;0&gt; { };
</pre>

<p><br />
　SizeCheckerImp の本体はコンストラクタを private にし、特殊化でテンプレートパラメータが０の場合だけ別扱いとする。こうすれば、SizeChecker テンプレートに与えた構造体のサイズが想定サイズでない場合にのみコンパイルエラーになる。</p>

<p>　ここではクラステンプレートを２つ使ったが、できれば１つにしたいし、そもそも C 言語で簡単にやれる方が良いが今のところ思いつかない。とりあえずは自分の目的は達成できたので、ひとまず良しとしよう。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/post_615.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/08/post_615.html</guid>
<category>開発</category>
<pubDate>Sun, 01 Aug 2010 00:00:00 +0900</pubDate>
</item>
<item>
<title>地道に拡大中</title>
<description><![CDATA[<p>　<a href='http://itunes.apple.com/jp/app/ProjectPalm2/id356574502&mt=8'>ProjectPalm</a> 以来、地道に iPhone OS 向けの電子書籍の仕事を続けている。なんだかんだかで人気があるのは、以下の『殺人博物館』シリーズだ。３つめの「女でも殺す」は、まさに今日リリースされたばかり。既刊ともども、興味のある方は是非。</p>

<p>・<a href='http://itunes.apple.com/jp/app/murdermuseum1/id363154497?mt=8'>殺人博物館　きちんと後始末</a><br />
・<a href='http://itunes.apple.com/jp/app/Murder%20Museum%20Serlal%20Killers/id368706885?mt=8'>殺人博物館　シリアル・キラーズ</a><br />
・<a href='http://itunes.apple.com/jp/app/Murder%20Museum%20Lady%20Killers/id374506572?mt=8'>殺人博物館　女でも殺す</a></p>

<p><br />
　また、しばらく前に公開されたもので、オススメしたいのが<a href='http://itunes.apple.com/jp/app/Learning%20STD%20and%20HIV/id371444622?mt=8'>『ドクター尾上のすぐわかる性感染症』</a>だ。自分には関係ない、と考える人は多いだろうがさにあらず。大人の必須教養と言っても良いと思う。</p>

<p>　その他、立読版を除けば全部でコンテンツは14種類になった。一覧は<a href='http://www.project-enigma.jp/wiki/index.cgi?page=products%2FBookView'>こちら</a>を参照されたし。マイカ出版と協力の上、今後も少しずつ増やしていく予定だ。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/06/post_613.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/06/post_613.html</guid>
<category>2010年</category>
<pubDate>Thu, 03 Jun 2010 22:00:00 +0900</pubDate>
</item>
<item>
<title>作りたいものを、作りたい</title>
<description><![CDATA[<p>　４月中頃から、普通の社会人生活に復帰している。去年の末から着手している、iPhone OS 向けの電子書籍の仕事も続いている。通勤電車は東京都心のそれなので、ほとんど座ることができない。職場は情報セキュリティがガチガチなので、昼休みに別の仕事をするような余地はない。</p>

<p>　．．．結果、自分のやりたいこと、作りたいものが全部ストップしている。</p>

<p>　所詮は趣味の領域なので、それをやらなければ生活に困るとかいうわけではない。生活に困るかどうかという意味では、半年以上続いた無収入の期間の方がよほど困っていた。貯蓄を削り続けていたからだ。時間はあるが金が無い（というか減っていく）生活。しかし、実際に仕事中心の生活に戻ってみると、それが単に「金は少しずつ貯まっていくが時間が無い生活」に切り替わっただけであることに気付く。</p>

<p>　作りたいものを、作りたい。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/05/post_612.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/05/post_612.html</guid>
<category>開発</category>
<pubDate>Sun, 23 May 2010 12:00:00 +0900</pubDate>
</item>
<item>
<title>久し振りに写真を</title>
<description><![CDATA[<p>　撮ったんだけど、とくに目新しいことはなく。</p>

<p><a href="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050801.jpg"><img alt="2010050801.jpg" src="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050801-thumb.jpg" width="300" height="225" border='0' /></a></p>

<p><a href="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050802.jpg"><img alt="2010050802.jpg" src="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050802-thumb.jpg" width="300" height="225" border='0' /></a></p>

<p><a href="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050803.jpg"><img alt="2010050803.jpg" src="http://www.project-enigma.jp/members/kagelow/locus/archives/2010050803-thumb.jpg" width="300" height="225" border='0' /></a><br />
</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/05/post_611.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/05/post_611.html</guid>
<category>Photo</category>
<pubDate>Sat, 08 May 2010 20:00:00 +0900</pubDate>
</item>
<item>
<title>昨日の続き</title>
<description><![CDATA[<p>　さて、本題に入るとしよう。テンプレートを使用したメタプログラミングでエンディアンを操作するやつだ。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_610.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_610.html</guid>
<category>開発</category>
<pubDate>Sun, 25 Apr 2010 18:00:00 +0900</pubDate>
</item>
<item>
<title>アセンブラまで降りるとわからない</title>
<description><![CDATA[<p>　なぜだか、エンディアンを操作する処理をクラステンプレートを使用したメタプログラミングでやる、というのを楽しんでいる。が、その話は後だ。読んで楽しいと思う人が少ないだろうからだ。それよりも、自分が悩んでいることを先に書いて助けを請うことにしよう。</p>

<p>　何で悩んでいるかというと、エンディアンを little ─ big 間で相互に変換する際の処理で一番早いのがどれか、自分では判断がつかないのだ。候補として扱う条件は、分岐やループなど、遅くなる要因がないことや、可能な限り局所変数の数や演算の量が少ないこと。扱うのは 32 ビット変数のみと（ひとまずは）しておく。最初は std::reverse() で片付けようかと思ったが、ループやスワップが多いので論外。で、ひとまずイケそうなのは以下の２つと考えた。無論、int が 32 ビット幅だという前提はあるものとする。</p>

<pre>
int endian_invert( int n ) {
    return ( ( n & 0xFF000000 ) &gt;&gt; 24 ) |
           ( ( n & 0x00FF0000 ) &gt;&gt;  8 ) |
           ( ( n & 0x0000FF00 ) &lt;&lt;  8 ) |
           ( ( n & 0x000000FF ) &lt;&lt; 24 );
};
</pre>

<pre>
int endian_invert( int n ) {
    union { int val; char ch[4]; } wk;
    wk.ch[3] = ((char*)&n)[0];
    wk.ch[2] = ((char*)&n)[1];
    wk.ch[1] = ((char*)&n)[2];
    wk.ch[0] = ((char*)&n)[3];
    return wk.val;
};
</pre>

<p>　正直言って、どちらが速いのか自分にはわからない。アセンブルリストを出してみた限りでは、後者の方が短いようだ。自分の無根拠な直観も、後者の方が速いのかな‥‥‥と思ってはいる。しかし、アセンブルリスト上で１行でも、命令によって実際に実行するのにかかる処理コストは異なるという話を聞いたことがある。しかし、そもそも自分はアセンブラを読めない、で困っているというわけだ。こういうときの判断のためのガイドラインとか知っている方、教えて下さい。<br />
</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_609.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_609.html</guid>
<category>開発</category>
<pubDate>Sat, 24 Apr 2010 20:30:00 +0900</pubDate>
</item>
<item>
<title>昼間の仕事世界に復帰</title>
<description><![CDATA[<p>　昨日から、ようやく昼間の仕事の世界に復帰。仕事内容とかはともかく、生活時間帯のズレを修正するのが大変だ。仕事をしていても、なんだか時差ボケのような状態になっている。これまでは５時とかに寝て１４時とかに起きてたのが、今週からは６時半起きの生活。これがまずツラい。</p>

<p>　あと、毎日昼飯を外で食べるのは財布に優しくない。そりゃ仕事についたんだから仕方ないが、この仕事のお金が入るのは５月の末。それまで毎日昼メシ外でか。弁当買ったって500円。正直厳しいが、この出費を厳しいと認識するほど逼迫してる自分の立ち位置そのものが厳しい。いろんな意味で危機だ。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_608.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/post_608.html</guid>
<category>日常・非日常</category>
<pubDate>Tue, 20 Apr 2010 23:30:30 +0900</pubDate>
</item>
<item>
<title>Aceeca の Garnet OS 新デバイスについて</title>
<description><![CDATA[<p>　PalmInfoCenter が、ニュージーランドのメーカー Aceeca が 4/10 に発売する <a href="http://www.palminfocenter.com/news/6511/aceeca-pda32-pictured-and-detailed/">Garnet OS の新デバイスについて報じている</a>。<a href="http://www.palmfan.com/">PalmFan.com 経由で知った</a>。</p>

<p>　「なんでPalmやねん」の MA-CY さんは、<a href="http://nande-palm.cocolog-nifty.com/palm/2010/04/playminoaceecan.html">『ちょっとごついですね』 と書かれている</a>。気になったので、Acceca 新デバイスのスペック表と Palm TX の（適当な）実寸を比べてみた。</p>

<p>　まず、重さは 196g で、Palm TX は 150g。Aceeca の方がちょっと重いようだ。次に、デバイスのボディサイズだが、Aceeca は 128 x 76 x 25 mm で、Palm TX は 120 x 75 x 13 mm 程度。TX よりも縦に少し長く、幅はほとんど同じ。厚みが２倍近くあるのが気になるところだ。ついでに書いておくと、Aceeca のは 5-Way Rocker 搭載だが、アプリケーションボタンは２つしかないようだ。そして、WiFi および Bluetooth はオプションである、とされている。</p>

<p>　おそらく、MA-CY さんでなくとも 「ちょっとゴツいな」 と思ったはずだが、それはディプレイに対して筐体が大きく見えるからだ。しかし、厚みを除けば実は Palm TX とほぼ同じ。実は、この Aceeca のデバイス、ディスプレイは W320 x H480 ピクセルで Palm TX と同じ解像度ではあるものの、スペック表には表示領域実寸が W46.64 x H68.95mm と書かれている。一方、手元の Palm TX の画面実寸は W53 x H80 mm なので、より細かいドットを使用していることになる。つまり、筐体サイズはほぼ同じで画面解像度も同じだが、物理的な画面のサイズだけが小さいのだ。</p>

<p>　ここまでをまとめると、筐体サイズは TX とほぼ同じで厚さだけ２倍、少し重く、画面は（解像度は同じだが）物理的に小さい。うん、それほど悪くないような気がしてきた。ただ、デザイン的な意味でバランスが悪いのが気になるところ。しかし、$199 というのは魅力的な値段ではある。国内で購入した場合いくらになるのか、またオプションとされている WiFi や Bluetooth をつけた場合にどうなるのか。やっぱり気になる。</p>

<p></p>

<p><br />
</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/aceeca_garnet_o.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/aceeca_garnet_o.html</guid>
<category>2010</category>
<pubDate>Sat, 10 Apr 2010 04:00:00 +0900</pubDate>
</item>
<item>
<title>無線LAN機能付き Tungsten T5、失敗</title>
<description><![CDATA[<p>　タイトルだけだと、なんだかスゴいことをやろうとしたみたいだが、そうではない。単純に Palm TX と中身を交換しようとしただけだ。まぁ実際には「T5 筐体の TX」にしかならないわけだが、ケースや基盤は（ほぼ）同じモノを使用してると思ったのに微妙に違って入らなかった。</p>

<p>　なんでそんなことをやろうと思ったかというと、陰郎は TX よりも Tungsten T5 のボディの方が好きなのだ。メタリックな表面が高級感を感じさせてくれるからだろうか。実際には両方ともプラスチックなのだが。写真は、このブログの以前のエントリから。</p>

<p><img alt="2007092601-01.jpg" src="http://www.project-enigma.jp/members/kagelow/locus/archives/2007092601-01.jpg" width="320" height="240" border="0" /></p>

<p>　ちなみに、別にエイプリルフールのネタにしようと思ったわけではない。人様のエイプリルフールネタは楽しませて頂いているが、陰郎は自分でやろうとは思わない。自分がやっても（多分）面白くないからだ。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/lan_tungsten_t5.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/04/lan_tungsten_t5.html</guid>
<category>2010</category>
<pubDate>Thu, 01 Apr 2010 22:30:00 +0900</pubDate>
</item>
<item>
<title>マイカ出版の電子書籍 for iPhone、３つ新発売</title>
<description><![CDATA[<p>　本日、project-enigma がビューワアプリを提供するマイカ出版の iPhone 向け電子書籍が３本新規公開となった。</p>

<p>・<a href="http://itunes.apple.com/jp/app/shakunetsunosouro1/id363151968?mt=8">灼熱の走路１</a><br />
・<a href="http://itunes.apple.com/jp/app/shakunetsunosouro2/id363153537?mt=8">灼熱の走路２</a><br />
・<a href="http://itunes.apple.com/jp/app/murdermuseum1/id363154497?mt=8">殺人博物館　きちんと後始末</a></p>

<p>　「灼熱の走路」は、あの「ゲームセンターあらし」の作者であるすがやみつるさんの著書だ。陰郎は F1 などのカーレースにはあまり詳しくないが、そんな門外漢でも十分楽しめる。２本立てでボリュームもたっぷりだ。オススメ。</p>

<p>　もう１本の「殺人博物館　きちんと後始末」は、古今東西の殺人事件について死体処理に注目してまとめた書籍だ。ちょっとグロいが、平気な人は楽しめるだろう。これもオススメ。</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/03/_for_iphone.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/03/_for_iphone.html</guid>
<category>2010年</category>
<pubDate>Wed, 31 Mar 2010 05:00:00 +0900</pubDate>
</item>
<item>
<title>７年以上こつこつと</title>
<description><![CDATA[<p>　ここ最近、自作の正規表現エンジンをイジっている。現時点の開発資産のうち、もっとも古いもので 2003年６月というのがあるから、少なくとも７年前から作っていることになる。2006年くらいには安定したので、ここ４年くらいは使うだけで修正はしていないが、今の時点で自分にできる状態まで引っ張り上げようということで、再び手を入れ始めたのだ。</p>

<p>　少なくともこの５年で、自分の開発ベースも大きく変わった。昔は開発環境といえば Visual C++ を使っているだけだったが、今では基本的に g++。UNIX 系も Mac も Windows も使うし、Palm 環境なら 16bit だし仕事では 64bit も使う。文字コードだって少なくとも４種類以上は使っているのだ。全部とは言わなくても、これらをカバーしたいと思ったら、何らかの手を加える必要があるだろう。そしてその修正内容たるや大きなものだ。もちろん新しい機能も付け加えたい。</p>

<p>　以前にも書いたことがあるが、自分が昔作成したプログラムに手を入れるのは良いことだ。他人の作ったプログラムから得るものも多いが、過去の自分の作品を振り返ることには別の意味がある。それは、当時自分がどこにいるかを知り、それによって自分が今どこにいるのか、そしてどこに行こうとしているのかを知ることができるということだ。自分の昔の作品を見ると恥ずかしくなることがあるが、それは良いことと言うべきだろう。それは自分が変化（そして願わくば向上）していることの証なのだから。</p>

<p><br />
</p>]]></description>
<link>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/03/post_607.html</link>
<guid>http://www.project-enigma.jp/members/kagelow/locus/archives/2010/03/post_607.html</guid>
<category>開発</category>
<pubDate>Tue, 30 Mar 2010 22:00:00 +0900</pubDate>
</item>


</channel>
</rss>