長いプロパティ名の話題を見て、sumimさんのこれを思い出した。
今見たらちょっとバージョンが古かったので、SeasideJOnePlusDBの最新のをダウンロードしてきて試してみた。
(Symbol allSymbols asSortedCollection: [ :a :b | a size > b size]) first => #initializeWithName:superclassName:traitComposition:classTraitComposition:category:instVarNames:classVarNames:poolDictionaryNames:classInstVarNames:type:comment:commentStamp:
173文字。さすがSqueak。Monticelloに入ってるMCClassDefinitionクラスのもの。Monticelloが素のSqueak入ってるのかどうかは知らない。いまどきは入ってるのかな?。
ちなみにSeasideJOne初めて触ったけど、拍子抜けするぐらい簡単に試せていいですね。
会社で開発者ブログをはじめました。
プライベートネタはmixi、適当なひとことはtwitterで、技術系ネタをそっちにもってくと、ここに書くことが無いのねぇ。PDF関連の話も、この先はお仕事との境が微妙になってくるので、ここには書きにくい。それでちょっと放置気味です。ごめんなさい。
ところで会社のブログはWordPressにしたんですが、いいですね、アレ。あのお手軽拡張感覚は良い。PHPがちょっと好きになった。いくら拡張性を高くしたって、小綺麗なインタフェースを用意したって、ユーザが拡張したくならなきゃ意味がない。WordPressはユーザに拡張することをアフォードしてるし、それはWordPressがPHPで書かれていることと無関係ではないと思う。
だいぶ間が空いてしまったけど、PDFのお勉強再開。前回までに基本的な文書の構造を勉強したので、これからはいよいよ描画系をやっていこうと思う。
まずはお約束のHello, Worldだ。

文書カタログとページツリーのルート、相互参照表、トレーラについては、基本的な構造で書いたのとほとんど変わっていないので説明は省略する。
3 0 obj
<<
/Type /Page
/Parent 2 0 R
/Contents 4 0 R
/MediaBox [ 0 0 100 120 ]
/Resources
<<
/ProcSet [ /PDF /Text ]
/Font << /F1 5 0 R >>
>>
>>
endobj
4 0 obj << /Length 54 >> stream BT /F1 12 Tf 10 100 Td (Hello, World!) Tj ET endstream endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> endobj |
まず、ページについては、リソース辞書の「ProcSet」エントリに「/Text」が追加され、またあらたに「Font」エントリが追加されている。 ProcSet(10.1 Procedure Sets)は、実際にはPostScript出力デバイスでしか使われておらず、PDF 1.4以降はobsoleted扱いだが、PDFを出力するアプリケーションは互換性のため、引き続きこれを指定する必要がある。 Fontは、「5 0 R」で参照されるフォントオブジェクトを、「F1」という名前で コンテントストリーム内で使用できるように定義している。 コンテントストリーム内では、テキストオブジェクトを配置している。ここで使われているオペレータは以下のとおり。
PDFで扱えるフォントはいろんな種類があって、一筋縄ではいかない。とりあえずここでは、「標準 Type1フォント」と呼ばれるものの中から、Helveticaを使用することを定義しているということだけ理解しておく。 |
TestNGの現時点の最新のリリースは5.8だけど、このバージョンだとJDK1.4環境でテストが実行できない。これはIssue25で指摘されているとおり、Java5から追加されているメソッド(String#contains)がorg.testng.reporters.XMLStringBufferで使用されているから。
trunkですでに修正されている(r629)のだけど、現時点では最新のソースをビルドしても他の部分でひっかかってうまく動かなかったので、XMLStringBufferのクラスファイルだけ5.8の中のものと置き換えて、とりあえず対処した。
ちなみに最新のリビジョンでひっかかるのは、org.testng.reporters.EmailableReporterで、こちらもJava5から導入されたStringBuilderが使用されているから。報告上げたほうが良いのかしら。
AntでTestNGタスクを利用してテストを自動実行したら、その結果はメールで送るようにしておくと、メーラー上でテスト履歴が一覧できるようになって便利。 TestNGのレポートの出力には、「emailable-report.html」という、メールで読みやすいように整形されたHTMLが含まれているので、これを使用する。
<!-- antcallでの呼び出し専用target -->
<target name="test" if="initialized" depends="prepare" description="テストを実行し、テスト結果をメール送信します。">
<!-- TestNG -->
<testng classpathref="run.classpath" dumpcommand="true" verbose="3" outputdir="result/${module.name}" sourcedir="src" failureproperty="failed">
<classpath>
<pathelement path="${module.path}" />
<pathelement location="bin" />
</classpath>
<xmlfileset dir="." includes="${module.test}" />
</testng>
<!-- 失敗したらメールサブジェクトに「FAILED!」を入れる -->
<condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch}) - FAILED!!">
<isset property="failed" />
</condition>
<condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch})">
<not><isset property="failed" /></not>
</condition>
<!-- メール送信 -->
<mail mailhost="${mailhost}" from="${mail0}" tolist="${mail1}" subject="${subject}" encoding="plain">
<message src="result/${module.name}/emailable-report.html" mimetype="text/html" />
</mail>
</target>
Cobertura1.9のAnt用タスク「cobertura-report」は、ソースファイルがUTF-8であることを前提にしているので、Windows環境でShift_JISなんかで書いてたりするとレポートが文字化けする。
ぐぐってみると、日本語対応パッチを書いてらっしゃる方も見つかるのだが(1/2)、ソースがそんなに多くないならUTF-8で一時的にコピーを作っちゃうと楽。Ant1.6以上ならcopyタスクでoutputencodingを指定できる。
<copy todir="${utf8src}" encoding="Shift_JIS" outputencoding="UTF-8">
<fileset dir="${src}">
<include name="**/*.java" />
</fileset>
</copy>
<cobertura-report format="html" destdir="${coverage}" srcdir="${utf8src}" />
昼飯を食べながら、「揮発性BDD」というのを妄想してみた。
そのかわり、
これは、
という効果が期待できると思うのだけど、どうかしら。
当たり前だけど、真面目にユニットテストをやるほうが、モジュールの信頼性は上がるし、結合してから問題は起きにくい。 結合してからのテストが、真面目にユニットテストをやらない場合よりも圧倒的に楽になる。
逆に言えば、真面目にユニットテストをやらないほうが、結合テストを真面目にやる傾向がある気がする。
これは、GUIのユーザビリティなんかに結構影響があって、何べんも結合テストで使っているうちに見えてくる問題点もあるんだよなぁと思う。 いってみればドッグフードを食べてる状態で、リリースまでに改善できる部分がより多くなるんではないか。
Weekly Squeakの記事「JSqueak - Smalltalk interpreter written in Java」経由で、JSqueak。実は2006年ぐらいからあったらしい(=>大島芳樹のカリフォルニア日記 - DanのSqueak on Java )。
ちょっとだけ触ってみたけど、これが5000行以下のコードで動くってのはすごいと思った。Java Web Startで、ブラウザからクリック一発で試せるのもうれしい。
今は冗談抜きで忙しすぎるので、落ち着いたらちゃんとコードを読んでみよう。
.NET | AIR | AOP | Ant | BDD | COBOL | CentOS | Java | Lisp | Logo | Mac | OCaml | OpenSource | Oracle | PC | PDF | PHP | Perl | PostScript | Redmine | Ruby | SNS | Scheme | Smalltalk | Spring | Squeak | Subversion | TechEd | TestNG | Trac | UML | VB | WSH | Wiki | XML | XPS | mobile | tDiary