私のコード履歴

satさんが面白いことをしていたので、のっかってみました。仕事柄、直接職業に関わることはここには書けませんが、プロとしてコードを書いたのは就職して最初の4年だけです。私の散発的なコーディング歴の中でも無視しうる長さでした。

以下、おおざっぱに時系列です。

  • きっかり4つの数字をソートするプログラム。大学に入ってすぐ、電子計算機の講義で「来週からFORTRANを教える。君たちにとって最初の言語はNative Languageとなって体に染み付き、一生ついて回る」と言われたので震え上がって生協に駆け込み、Pascalの本を買って懸命に勉強した。次の授業が始まる直前にプログラムをコンパイルして走らせることが出来た。計算機センターの先生(?)に後ろから「なにしてるの?」と聞かれた覚えがある。三菱 MELCOM COSMO 800。多分これが、実機で書いた意味のある初めてのプログラム。
  • Mandelbrot集合を印字するプログラム。日経サイエンスのコラム記事(だったと思う)が面白かったのでFORTRANで書いた。計算機センターのグラフィックス出力は2値のように見えたので、ラインプリンタのテキスト出力で濃淡をつけるという乱暴なプログラムだった。少ない計算機時間をやりくりしながら100×100の印字を四枚つなげて悦に浸っているところを計算機センター長に見つかり、「おもしろそうだな」と拉致されて説明を強要された。お駄賃として計算機時間を余計にもらった。
  • Pascalコンパラ写経。『Pascalの言語処理系』を写した。これもメインフレーム。私が真面目にやった唯一の写経だと思う。当時コンパイラに興味があって本を読み漁っていた。ちゃんとP-CODEを吐いたが、年度末にバックアップしようとしたらすでに消えていた。
  • Pascalの清書プログラム。計算機センターにパソコン端末が導入された。TurboPascalで書いたプログラムで、予約語だけダブル・ストライクして強調した。三菱Multi-16 & CP/M-86
  • コンウエイのLifeゲーム。これも日経サイエンスのコラム記事がネタだったと思う。留年中だった。NEC FORTRANで書いて、居候していた研究室のPC-9801で走らせた。平面はトーラス構造にした。このPCではMandelbrot集合のプログラムも走らせた。
  • ゲーム必勝法解析プログラム。bit誌のプログラムコンテストに友達と応募したプログラム。NEC FORTRANで書いた、木構造データをトラバースする渾身のプログラムだった。『プログラム+データ構造=プログラム』の影響で、データ構造をきちんとしようと心がけていた。が、レポートは「字が汚い。読む方の身にもなれ」と酷評された。ごめんなさい。その時の友だちは、今は酔っ払った虎のアイコンでブイブイいわせている。
  • Mandelbrot集合はお気に入りで、就職して買ったプロサイド のPC-286でも書いた。PC-DOS 3.3 &Turbo Pascal。オプションの8087(287?)を付けて計算部分ををアセンブリ言語で記述した。100MBのHDDを輸入して「もう一生ストレージに困らない」などと世間知らずな事を考えていた。
  • 職場で頼まれて労働時間集計スクリプトをつくった。あれは挫折した私を慰めるための依頼だったと思うが、出来上がったスクリプトは不評だった。
  • TurboVision日本語化。Borlandがリリースしたテキスト画面用GUI(TUI)ライブラリであるTurboVisionが好きで、ひとりで日本語対応に改造した。Niftyでソース差分を配布したが、ボーランドの担当者が難色を示してバイナリ差分に差し替えたように思う。このバイナリ差分はどこかのアンチウイルスソフトのローカライズに使われたはず。TurboVisionが好きだったのは、MacAppにあこがれていた影響もあるとおもう。
  • UI設計ツール。NeXTの講習会に参加して雰囲気に当てられ、TurboVision用の画面設計ツールを開発した。20000行ほど書いてそこそこの機能はあったし期待通りに動作した。今でいうシリアライズ機能も使用してファイルに設計中の状態を保存できた。全UIパーツに対応する前に飽きてやめた。
  • 逆アセンブラ。職場のロジアナが出力する16進のダンプを追うのが苦痛だったので、深夜残業中に逆アセンブラを書いた。HPのプリンタがシリアル出力だったので、ロジアナと開発機をシリアルでつないで読み込んだ。要するにプリントアウトを逆アセンブルする。一部同僚に好評。
  • プロトコル・シミュレータ。職場で使っていた特殊な通信プロトコルを再現するシミュレータを作った。なんとOS/2。あまりに特殊だったのでシミュレーション言語から開発し、コンパイラを私が開発し、中間言語インタープリターのスペックを書いて後輩に作らせた。2つのプロトコルが多重化される変態仕様をシミュレートできる。大学生の頃に勝手に勉強した言語理論とコンパイラの知識が役に立った。
  • 当時流行っていたDOS/Vで、ビデオカードからASCIIフォントを抜き出してDOS/V側にコピーするプログラムを書いた。英数字が太くなってPCらしくなる。
  • UIラピッド・プロトタイピング。職場で開発している装置のUIシミュレータをHyperCardで作った。管理職に「あらかじめUIをシミュレートしておけば営業部との齟齬がなくなる」と提案したが、やんわりと退けられた。人が宇宙人を見るときにはこんな顔をするのだろうな、と思った。
  • このころ体を壊し、プログラムに対する関心が薄れた。Borland DelphiでCDプレイヤーやRPN電卓を作ったくらい。
  • メッセージ・逆アセンブラ。この当時勤めていた会社は2社目。開発部隊とお客さんはCPUとASICの間をロジアナで観測し、メッセージの流れを読んでデバッグしていた。が、FAEは自分でやれることが少なくてつまらなかったので、メッセージ逆アセンブラを書いた。社内で屈指のハッカー(生まれた国では冬山でイノシシを撃っていた猛者)が「これはいいね」と喜んでくれた。Pascalで書くかCで書くか悩んだ気がする。サンデー・プロジェクトだから前者でいいのだが、社内でシェアしたかったので。
  • BeOSで小さなプログラムを書いたが、ウインドウを出して閉じるレベルだった。このころも「200MHzデュアルCPUのPowerMacがあれば、もう何もいらない」などと世間知らずを引きずっていた。
  • ADSP-2191のボードを使って信号処理の実験をした。この頃書いたプログラムは2191空挺団に公開していた。
  • TOPPERS/JSP for Blackfin。DSPでプログラムを書いているうちに、「違う、割り込みハンドラの中で主処理をやっちゃだめだ。ここはRTOSの出番じゃないの?」と思い立つ。学生時代から注目していたTRONプロジェクトからスピンアウトしたTOPPERSプロジェクトの成果物をBlackin DSPに移植する。最後の詰めで(コンフィギュレーション・スクリプトめんどくせぇ)と足踏みしていたら、うじのすけさんがサクッと完成させてしまった。その後、GCCにバックポート。多分私の書いたプログラムで一番評価が高い。商業用途にも使われた。高校生の頃にInterface誌の付録でRTOSの動作原理を追って興奮していた頃から25年位経ってる。このプロジェクトからSourceforceを使い出した。
  • ROMライター。BlackfinをSerial ROMからブートしたかったが書き込みツールがなかったので、C#で作った。FTDIのUSBチップのマイクロコードを自分でプログラムし、JTAGポート経由でSPI接続しているROMに書き込んだ。このときはC#言語、JTAG、BSDL、XML、ROMの書き込みプロトコルと随分勉強した。インドの方から礼を言われて嬉しかった。「C#さえあれば、Javaはいらないのでは」などと世間知らずな事を考えていた。
  • TOPPERS/JSP for LPC2388。TOPPERS/JSP for Blackfinが一時期行き詰まったので、GNUツールチェーンをきちんと勉強するためにTOPPERS/JSPをLPC2388に移植した。これは非常に勉強になり楽しかったので、他の人とも共有しようと思ってCQ出版社に持ち込んだ。Interface誌2010年04月号に特集記事として出版されている。ペンネームの『健真』は、父が私につけようとして母からボツを食らった名前。見せたら大はしゃぎしていた。
  • TOPPERS/ASP for LPC。調子に乗って、TOPPERS/ASPをLPC1768に移植する。TOPPERSプロジェクト本家と同時期で、Cortex-M4Fへの対応は私のほうが早かったと思う。本家は2層構造だったところ、CPU、チップ、ターゲット(ボード)の3層構造とする工夫をしていた。
  • LPC1768(CORTEX-M3)にTOPPERS/ASPを載せて、輸入したCODECボード(MMCODEC01)と接続してオーディオ操作コードを書いた。LPC1768のI2SやDMAに手間取って、3ヶ月くらいかかった。当時COMIPOで遊んでいたので、苦労の元を取るために『漫画で読むTalkthrough』という漫画を描いた。
  • Uzumeフレームワーク。このころからしばらく汎用オーディオ・フレームワークを書こうとしていたが、志半ばでうやむやになった。
  • WMPプラグイン。新しい会社での社内向けのデモコードとしてWindows Media Playerのプラグインを書いた。当時勤めていた会社の信号処理アルゴリズムをWindows上でリアルタイムに動かせる。「私」のデモなので、その後仕事には使ってない。
  • 会社でものすごく面倒な処理を自動化するプログラムを書いて、お客さんに渡した。が、どんなプログラムだったかまるっきり忘れている。
  • VST。やはり社内でデモコードとしてVSTプラグインを書いた。このくらいのことができるから、FAEも積極的にコードを書こうよ、といったメッセージだった気がする。
  • 平戸。CQ出版社のSDR企画にお声がけしてもらって始めたプロジェクト。プロプライエタリのBlackfin SDRソフトがバイナリで供給されるので、それとプロトコル互換のフレームワークをオープンソースで作ろうというプロジェクトだった。プロトコルの理解に苦戦したことと仕事のピークが重なり、おまけに最後の最後にBlackfinのブートファームウェアのバグを踏み抜いてしまった。とんでもなく時間がかかってしまったプロジェクト。今リリース日付を見るまで忘れていたけれど、ちょうどこの頃に転職している。軽い燃え尽き症候群になった。
  • 雲仙。もうDSPはこりごりって気になっていたけど、人と話すうちにまたマイコンをいじってみたくなって作った。mbedの上にベアメタルのオーディオフレームワークを実装した。DSPにRTOSを移植したことと矛盾するが、mbedの手軽さとオーディオ信号処理を共有させたかった。汎用的なものにしたかったので、NXPとSTのマイコンに実装している。このプロジェクトは私が飽きたあとも、がれすたさんが移植したり、ボブさんがライブで使用したりと嬉しい思い出に彩られている。
  • 。mbedはお手軽にプログラムを書き始められるが、規模が大きくなるとあっという間に使いにくくなった。「オフラインでも使えますよ」と聞いたが、そりゃ缶コーヒーをサイフォンに通すようなものだと思って扱うのをやめた。結局IDEだろと思い、RTOSだろうとも思ったのでSTのマイコンをいじり始めた。以前は箸にも棒にもかからないと思ったSTM32 HALをなんとなく使えそうに思ったけど、やっぱり美しくないと思ったのでClassで包み始めたのがことの起こり。このプロジェクトではC++の強い型付け言語の側面と名前空間を利用してIDEの入力補完を活用できるようにした。規模が大きくなっても私の能力でまかなえるよう、assertionを使いまくっている。また、githubやそのissue, projectといったツールによる管理を試した。プロジェクトの名前は自分にとって理想のプログラミング環境にしたいという気持ちを込めて、源氏物語の紫の上よりいただいた。源氏が幼女だった若紫に目をつけ、未成年者略取を働いたのちに自分好みの理想の女性に育てたあげく手籠めにしたエピソードから。

私は環境が整わないと指一本だって動かしたくないというタイプの人間です。環境が悪いと、ちっとも何かを作る気になりません。こうして見返すと、自分の仕事を楽にしたいとか、自分の遊びすら楽にしたいとか、そういったプログラムばかりですね。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください