PizzaFactory Document Developer の準備中

エンジニアは,文書も書かねばなりませぬ.
というわけで,PizzaFactory も文書作成の支援をしなければ.

今のところ,下記のプラグインをワンストップでインストールできるだけ.徐々に,私が勤めている会社のノウハウが入ってくる…はず.

  • eclox 0.8.0
  • Benten Basic
  • DITA-OP

eclipse-platform-3.6.1-macosx-cocoa.tar.gz を使って,バニラな Eclipse Platform にも適用可能なのは確認済み.Benten が Platform 3.5.1 以降を推奨していることから,3.5.1 以降なら対応できるはず.


アップデートサイトは, http://update.pizzafactory.jp/docdev/
pre alpha 版なので,今のところは無償.
Eclipse で文書も書かなければいけない人,とくに DITA とか翻訳とかが絡んで苦しんでいる方々は,どうぞ.

にんげんセルオートマトンプロジェクトへ行ってきた.

twitter で見かけた「にんげんセルオートマトンプロジェクト」へ行ってきた.
話題性先行でいったいどんなものなのかも判らない上に,極めて運の悪いことに台風が直撃ということもあって,前日くらいにエントリ表明したのだけれど,むちゃくちゃ裏切られた.もちろん,自分の不明を恥じる意味で.
科博やMIRAIKANでのミニイベントと同じくらい,よく練られている.帰ってきてからスタッフの経歴を見て納得.

小学校4年以上ということで小学校2年の次女は捨ててきたのだけれど,司会進行が優れていたので,たぶん小学校2年生以上でこの手のイベントに慣れている子なら,十分に対応できたのではないかと思う*1

行かなかった人には,後悔を勧めるような良いイベントだった.
今後,同様のスタッフでイベントが開催されるようであれば,要チェキ.

シミュレータが欲しい.

ただ,人がセルになるという企画の性質上,自分がいったい何をしたのかというのが判りづらい.
木の中に入ってしまうと森は見えなくなるのは当然だし,最後に,写真をパラパラ漫画的に見せてくれたりして,主催者側もものすごく考えてくれていた.
止む方無いのだけれど,大抵の子供はそれでは納得しない.また,持続的な遊びとして成立しづらい*2

打ち合わせなしでワケの判っていない不特定多数を同期シンクロさせるという手探りの作業を行っていたので,それにしては大成功だと思う.

足りていないのは,発展的に遊ぶためのツールだと直感した.
セルオートマトンの代表的なお遊びであるライフゲームとは,ルールが違うので,後で自分で遊べない.主催者は Win32 MFC アプリケーションを持っているようで,それを使った説明もしてくれていたのだけれど,公開していないようだ.加えて,なにより私はUnix系似非マカーだ.仕事以外で MFC は見るのも嫌だ.

ともあれ,主催側に足りない点があるというのであれば,代案を出すのが参加者としてのスジ.

一緒にイベントに行った娘と発展的にセルオートマトンを語りあうには,シミュレータが欲しいんだよなぁ.

…というわけで

notart ブログに続く

*1:しかし,幼稚園年長 or 小学校1年生? と覚しき女の子は,途中で飽きてきていた…時間かかる作業では,仕方ないよね.

*2:狭い意味で言うと,教育になりづらい

Eclipse/CDTでASTを使ってソースコードの構造を得る(最新版).

先日のTOPPERSハッカソンで青ざめ,乗り越えた顛末.

最初は,TOPPERS/JSP1.4.4 のリリースに向けた作業をしようかと思っていたのだけれど,参加者を見ていて,これはテストスイートの試作をしてみたほうが面白いのではないかと考え直した.

他の言語向け(特にLL向け)のテストスイートに比べてC言語のそれで一番面倒なのは,テストスイートの作成.Cutter では,共有ライブラリを使うことで面倒を解消しているけれども,TOPPERSのような規模で共有ライブラリは望めない.
そこで,ワタクシお得意CDTを使うべな,ということを思いついた.

CDT は,ソースコードを AST (Abstract Syntax Tree)に分解する機能を持っている.これを使えば関数名の抽出などはお手の物である.…ということは知っていた.

参考情報

グーグル先生にお伺いを立てると,情報が得られる.

日本語だと,例えば,
http://www.ibm.com/developerworks/jp/opensource/library/os-ecl-cdt3/
ここは難解だが,CDTの内部を知るためには必読

「CDTのパーサーを他の用途で使う」というエントリも見つかる.
http://munepi.cocolog-nifty.com/blog/2009/05/cdt-28c0.html
http://munepi.cocolog-nifty.com/blog/2009/05/cdt-daf0.html

なんとかなるもんねー,と思ったのだが,甘かった.

CDTの進化

結論から言うと,上記の「CDTのパーサーを他の用途で使う」は,古いCDT (おそらく3.x系)でのみ有効である.最近のCDTで使おうとすると,obsolete だったり internalパッケージだったりして使えない.


ハッカソン開始後に気づいて真っ青になった.

それへの追随

どう調べたとかいうのは端折って,結論だけ書く

	ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault().create((IFile)resource);
	IASTTranslationUnit ast = tu.getAST();
	ASTVisitor visitor = new ASTVisitor(true) {
		public int visit(IASTDeclarator decl) {
			/* do something */
			return ASTVisitor.PROCESS_CONTINUE;
		}
	};
	ast.accept(visitor);

以前は,IASTTranslationUnit が Java と微妙に違ったりしたのが,統一的になり割とスッキリしている.本来的には歓迎しなければならないところと思う.けれども現場技術者としては,壮大な仕様変更に,やるかたない気持ちがしなくもない.



builder の中なので,resource の型は,IResource.上の例に挙げた ASTVisitor.visit() の引数型は,IASTDeclarator なので,関数宣言があったときに呼び出される.他の要素で引っかけたいときには,ASTVisitor にある,大量の visit() を参照するとよい.

というわけで

一瞬,真っ青になったが,ハッカソン終了までには,なんとかソレっぽいものを仕上げることができた.CDT怖い.

TOPPERSハッカソン2010

この10年間で,組込み屋さんは,お互いに情報交換するようになったと思う.SWESTは一つのエポックメイキングだったと思うし,ETロボコンの意義も大きい.LinuxWindowsといった大きめのOS開発者が流入した結果として,勉強会は以前よりも開かれるようになった.

でも,常々思っていた.そこにはコーディングが無いよね.
でき上がったコードやモデルを持ち寄るけれども,本当に面白いのは,そこに至るまでの過程であり,共有の価値が最も高いのもそこだと思う.
SSEST とかNCES教育コースとかは,それなりに近いけれど,あれらはあくまでも教育が主眼.実践ではない.

とりあえず,やってみた.

TOPPERSプロジェクトの会員のみ参加資格のある,年一度のイベント,TOPPERS開発者会議.
最近マンネリだよねーっていう話につけこみ,「じゃあハッカソンやりません?」と.

結果

資料はTOPPERS会員のみ閲覧可能であり,概要が公然となるのは,次回のTOPPERSニュースレターになりそう.
とりあえず速報的リーク

  • 特定条件で TOPPERS/FMP カーネルが 3000倍遅くなる件
  • CD-ROMブート可能なTOPPERS/ASP開発環境
    • cfg のビルドがなぜかできなかったけれど,概ねできたよ
  • 組込み向けユニットテストフレームワーク
    • とりあえず,Eclipse/CDT を使った TestSuite の自動生成はできたよ
  • 最小セットカーネルのコンフィギュレータ修正
    • 割と進んで,キモである CRE_TSK への変更は完了したよ
  • TOPPERS統合仕様書への要求タグ付与作業
    • 方針はほぼ固まって,実際に付与してみたよ

感想

14人(実働10人程度)で,昼食の時間も含めて5時間弱. なんつー高い生産性なのかね…と驚いた.
電話や打ち合わせとかの割り込みが無ければ,ガンガン進んじゃうのね.

組み込み系は,守秘性や専門性が極端に高い案件が多いせいもあって,なかなかお互いの作業効率を垣間見る機会がない.だからこそ,ハッカソンのようなイベントは刺激になると思った.まる.

TeraStation(初代)からOpenFilerにコンテンツを移行しようとしてハマる(が,解決)

電気代がバカにならない昨今.また購入から時間も経ってクラッシュリスクが高まっていることもあり,OpenFiler に移行しようと思った.世間のブログを見渡せば嘆いている人が山盛りであるとおり,TeraStation の初期のバージョンは,SAMBA が 2.x 系で,多バイト文字の扱いが宜しくない.有り体にいうとOSXLinuxでは漢字が文字化けする.OpenFiler は Linux がベースカーネルであるため,文字コード周りでハマるに違いない.…と思っていたら,案の定ハマった.

まず,OpenFiler の Web UI には,smb のコピーや同期のような機能は持っていない.Linux ベースであることを利用して,コマンドラインで解決する.
方針は,TeraStation の共有フォルダを OpenFiler でマウントし,そのマウントしたディレクトリを rsync で OpenFiler が管理しているディレクトリに移す.別に rsync でなくても cp でも tar でも構わないはずだけれど.ネットワークの問題で途中でマウントが落ちたりするリスクを考えれば rsync がベストのはず.

[root]# P=share && mkdir -p $P && mount -tcifs -v //smb-client/$P $P -o ip=192.168.0.29,codepage=cp932,iocharset=utf8,username=guest

など実行する.
最近は,smbfs は廃れて cifs になったらしい.Linuxカーネルの動向なんて,最近は全く追いかけていないからなぁ….

//smb-client/share on /home/mntpnt/share type cifs (rw,ip=192.168.0.29,codepage=cp932,iocharset=utf8,username=guest)

など出てきて上手くいったようにみえる.しかし,/var/log/messages には,

Oct  2 00:22:15 localhost kernel: CIFS: Unknown mount option codepage

など出ていて,cp932 の設定がなされていないことが解る.

(後で続きを書く)