2009年9月26日土曜日

Spacewar!

しばらく前に作ったDEC PDP-1のエミュレータをベースにActionScript(Flash)版のエミュレータを作ってみました。せっかくのFlash版なので表示はそれっぽく・・・と思ったのですがセンスが足りないためイマイチな表示になってしまいました。

太古のマシンなわけですが、表示が1024x1024の解像度があり、残像やらボカシやら縮小やらで、表示系がずっしり重たい処理になってしまいました。エミュレーション自体はたいした事ないんですけどね。。。後でソースを1つにまとめてWonderflにも投稿したいと思います。

ちなみに動いているのはSpacewar! 知っている人は知っていると思いますが、世界で最初のテレビゲームと言われている物です。パンチカードの情報をデジタル化したファイルがありまして、そいつを読み込んで実行しています。

個人的な目的としては、プリプロセッサを使ってC++向けのコードとActionScript向けのコードを共通化する実験とか、版管理ツールとしてMercurialを使ってみる実験とか。

追記:さっそくWonderfl向けにカスタマイズして投稿してみました。

2009年8月12日水曜日

wonderfl続き

Frocessing版があまりにも重たかったのでBitmapData使って直接描画するバージョンも作ってみました。私の使い方が悪いだけなんですが。。。画面の再描画が常に走ってたのがいけないのですが、その辺の制御の仕方がわかりませんでした。どうせflashで描くならドット単位の描画ではなく、ベクターで描くタイプのプログラムを組んでみたいですね。


追記:再描画はnoLoop();で抑制できるようでした。また、pointを使っていたのがまずかったようです。F5MovieClip2Dではなく、F5MovieClip2DBmpを継承すればpixelが使えて高速化できるそうです。前者では画素ごとにシェイプが作られる・・・だそうで。。。すみません。

2009年8月10日月曜日

ProcessingとかActionScriptとか

今更だけどProcessing(*1)を試してみました。
事始めに参考書としてJohn Maeda氏のDesign By Numbers(*2)とかBen Fry氏のVisualizing Data(*3)も読んでみました。前者はプログラムを全く知らないデザイナ向けのCG入門書でしょうか。後者はエクセルを使ったグラフ作成より一歩進んだ事をプログラムを使って表現したい人向け。ただ、スクリーンスクレイピングの説明をはじめとして、本筋ではない雑多な話題についてのページが多く、読んでみると中途半端な感じがしました。やはりプログラマ向けの書籍ではないために感じる違和感かもしれません。
実際ちょろっと使ってみると確かに便利は便利。ただ最初の敷居が低いだけで、アルゴリズム組み始めるとその先は他のライブラリ使って組み上げるのとあまり手間は変わらないかなぁ・・・。

で、こちらも今更なんだけど、ActionScriptを使える開発がオンラインで行えるサイトWonderfl(*4)も試してみました。せっかくなので、Processing互換のライブラリFrocessing(*5)を使って遊んでみましたが・・・この手のサービスとの相性は良いですね。
最近ウェブを漁っていてマンデルブロと類似の図形でバーニングシップというのがあるのを知って、面白そうだったので練習題材にしてみました。やっぱりちょっと重いかなぁ・・・。マルチコアのマシンでないとブラウザが操作効かなくなるかも。。。






*1:Processing 1.0
*2:Design By Numbers
*3:ビジュアライジング・データ —Processingによる情報視覚化手法
*4:wonderfl
*5:Frocessing

2009年6月25日木曜日

AVRでも使ってみようかと

今までマイコンはPICを使い続けてたんですが、ATTiny2313が機能は少ないまでも100円というお手軽価格だったりするので、ちょっと使ってみる事にしました。

AVR Writerはどうしようかなぁ・・・と思って探してみるとhidaspx(*1)がUSBから使えて便利そう。っていうかAVRはソフトウェアUSBの実装がフリーで公開されているというのが驚き。上記の100円AVRをUSBコントローラとして使えてしまいます。AVR Writer自身にAVRを使うので、鶏と卵問題があったりしますが、確かAKI-PICでもAVRに書けたよなぁ・・・という気軽な気持ちで配布プリント基板をぽちっと購入。基板を待つ間にファームをAVRに書き込んでおくか・・・と思ったら・・・AKI-PICはATTiny2313に対応していなかった。。。ショック。

という事で、まずはAVRSP-COM(*2)互換のWriterを作ることにしました。最初はRS-232Cの信号から5Vを作るつもりだったんだけど、AVRSP-COMのプロトコル的に常時アサートされてる信号がなかったので、諦めてUSBから電源をとることにしました。最近は自作回路の電源をとる時はもっぱらUSBを使ってます。USBなら電力制限で保護がかかってるので、うっかりショートさせてもブレーカー落ちないし(笑。

で、次に作ったのが購入した基板で作ったhidaspx。わりと融通のきく回路になってて、基板と一緒に買えなかったものは手持ちの部品で事足りました。これだけでUSBデバイスとして動くのだから凄いですね。

その後、avraを使ったアセンブラでの開発をちょろっと体験し、すぐに面倒になってavr-gcc環境を構築しました(汗。まぁ、速度が必要になったらgccからインラインアセンブラ使えばいいや・・・って感じで。動作確認するまではWindowsで作業し、うまくいったのでメインマシンのMacで環境を整えることにしました。avr-gccはMacPortsからインストールして、hidspxは自前でコンパイル。なんとなくGUIも欲しかったので、Windows版hidspx-GUIを参考に見た目移植をしてみました。

開発環境はtcl/tkなので、MacでもLinuxでもOK。なんでtcl/tkなんか・・・ってのはご愛嬌。最近CADでtclを書く事が増えてきたので、その練習も兼ねて。M.Hiroさんのページ(*3)とか、「もっとTcl/Tk(*4)」を参考にさせてもらいました。前者のページはOh!Xとか、懐かしいですねぇ(しみじみ)。一応このGUIもアップしてみました(*5)。一部機能が未実装かつATtiny2313でしか動作確認していませんが。。。

という事で、まずはお約束の8x8 LEDを使って遊んでいます。LEDの制御だけでI/Oがわりといっぱいいっぱいなので、LED用の出力ポートを時分割でボタン入力にも使ってみました。子供のおもちゃにいいかもw


*1: 千秋ゼミ AVR/HIDaspx00
*2: ELM AVRライタの製作
*3: Tcl/Tk お気楽 GUI プログラミング
*4: もっとTcl/Tk
*5: hidspx-GUI/tk ver. 0.5.0/0.1

2009年3月2日月曜日

Java 3種の神器

最近eclipseを使う機会が増えました。Ruby on RailsとかOVMとかで良く使ってます。メインはOVMかな。そうなるとわりとJavaのお世話になる機会も増えたりして。例外はいて落ちたりすると中を追いかけたくなるのが人情というもの。という事で便利に使ってるのが以下のツール。
  1. Jad (decompiler)
  2. ClassFileAnalyzer (disassembler)
  3. jasmin (assembler)
1つ目はいわゆる逆コンパイラですね。classファイルにはメソッド名やメンバ変数名に関する情報も残ってたりするので、かなり可読性の高いコードに戻してくれます。とりあえず落ちた場所の周辺をざっと見るのに便利です。んで、単純な場合はこのまま逆コンパイルで得られたソースを直して、再びコンパイルすれば片付くんですが・・・解析が不完全に終わるとコンパイルできないソースを吐く事が多々あります。そんな時は2つ目のツール。こいつはいわゆる逆アセンブラで、classファイルを3つ目のツールに対応したアセンブラコードに変換してくれます。そんなわけで3つ目はアセンブラ。逆コンパイルが不完全な時にも、2と3のツールがあればソースに戻してからパッチを当てて、再びclassファイルに戻す事ができます。HAS、HLK、DISがあればなんでもできた、古き良きX68kユーザ時代を思い出します。

*1: http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html
*2: http://classfileanalyzer.javaseiten.de/
*3: http://jasmin.sourceforge.net/

2009年2月15日日曜日

The Benchmark Handbook

ベンチマークについての古い資料で、昔はウェブで無料公開してたものらしいんだけど。今は公開サイトのドメインも失効してしまい、Morgan Kaufmannから出てた書籍も中古(しかも、わりと高価)でしか入手できない・・・と思ってたんだけど、試しにweb.archive.orgにかけてみたら、PDF含めてしっかりと残ってました。

というわけで、The Benchmark Handbook Online版。たまに論文に出てくるThe Wisconsin Benchmarkについて、それなりに詳しく書かれた唯一の資料でしょうか。

2009年1月31日土曜日

つまらないけど重要

趣味で開発している時には問題にならないけど、仕事で開発となるとついてまわるのが仕様書の問題。特に大きい会社では仕様書を書くのに割く時間は馬鹿にならない。ソフトウェアの場合、doxygenみたいなツールを使えば、わりとつまらない図を書いたりする時間も削減できたりするんだけど、ハードウェアだとなかなか良いツールがない(知らないだけ?)。

という事で、ソースから図を自動生成しようかな・・・とか考える。とりあえず
  • スクリプトでお手軽かつ適当に生成したい(テキストベースが楽ちん)
  • Wordに貼付けた際に汚くならない(ベクトルデータが良い)
って方針ですか。そう考えて思い出したのがSVG。XMLが出てきた当時、どう使うと便利なんだろう・・・とか思い悩んだもんですが、今や空気みたいなもんですね。出力するにはテキストが楽。でも入力時に解析するにはバイナリの方が楽。。。そんなわがままを受け入れてくれるのがXMLのうれしいところです。

さっそくSVGの仕様書(*1)を眺めてみたわけですが、結構シンプルで簡単。仕様書にも図付きでサンプルが載っていて、みながら数分で基本的な図形は作れるようになります。あとは、ここで理解したタグをスクリプトから自動生成してやるだけ。RTLからの変換にはRubyを使いました。って事でできたのが下の図。こんな馬鹿げた図でも、VisioやExcelでヘロヘロ作っていたらどんどん時間が飛んでいきます。くだらない事にタラタラ時間使って「忙しい」とか言う人間にはなりたくないものです。作業の効率化は研究者、技術者にとって永遠の課題です。

ソースはこんな感じ。お手軽ですよね。
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g>
<text fill="black" x="62" y="50" font-size="6">RI2S1_DATA</text>
<line stroke="black" stroke-width="1" x1="50" y1="53" x2="250" y2="53"/>
<polygon fill="black" stroke="black" stroke-width="1" points="244,50 244,56 250,53"/>
</g>
... 中略 ...
</svg>
生成したSVGのプレビューや変換にはInkscape(*2)を使いました。Ubuntuからはapt-getでヘロっとインストールできました。EPSへの変換ができます。SVG Import Filter(*3)を使えばOpenOffice経由で色々と変換も可能。いきなりWMFとかにも出来るんだけど、グループ化を解除すると黒い豆腐になる問題があって、どういう経路で変換するのがベストかは今のところ模索中です。

*1: Scalable Vector Graphics (SVG) 1.1 Specification
*2: Inkscape
*3: SVG Import Filter for OpenOffice 2.0