Tinkererのしょぼちむテーマ作った #syobochim

これは しょぼちむ Advent Calendar 2014 の1日目です。

しょぼちむ とは、

そんな若手エンジニアです。

このアドベントカレンダーではみんなで毎日しょぼちむに関する何かを書こうというもので、 作った当初は全日程埋まるか本人も心配していましたが割と早々に埋まったので良かったね、っていう。

Java EE アドベントカレンダーよりも早く埋まったのは少々複雑でありますが! いや、でも、埋まって良かったね!

本題

さて、今回はこのブログの基盤となっているブログツール、 Tinkerer のカスタムテーマを作ってみました。 と言ってもゼロから作るようなセンスは皆無なので、組込みの modern5 というテーマをコピーして ウルトラ怪獣としょぼちむカラーを混ぜ込んでみました。

今後、もとのテーマに戻した場合を考慮してスクリーンショット貼っておきます。

../../../_images/syobochim-theme.png

ヘッダ、本文、サイドバーなどの構成や基本的なカラーリングは modern5 のままですが、 ヘッダの背景色とリンクの色を変えてしょぼちむカラーにし、ヘッダの背景画像とセクションの見出しに ウルトラ怪獣の絵をはめ込みました。 余談ですが、私はバルタン星人が好きです(V)o\o(V)フォフォフォ。

あと、ブログタイトルをしょぼちむのブログっぽくするためbefore疑似要素、after疑似要素で文章を足しています。 念のため書いておきますが、このブログのタイトルは「裏紙」です。

……といった所で、残念ながらだいぶ力尽きました。 己のHTMLちから不足、CSSちから不足、Tinkererちから不足などに凹みました。

まあやり過ぎるよりは良いかー、と言う感じでどうかひとつ! このとおりだ!

まとめ

ここまで”しょぼちむカラー”の説明なし!

おまけ

セクションの見出しの前に出してるレッドキングがちょっとかわいく描けた気がするので もうちょい大きいサイズも置いておきます。

../../../_images/redking.png

スタックトレースろふ #irof

これは いろふ Advent Calendar 2014 の1日目です。

いろふアドベントカレンダーとは、我らが いろふさん への愛をワールドワイドなインターネッツに大公開する感じのやつです。

いろふさんをご存じない方はTwitterでヒョローをキメて、著書である養成読本を熟読すると良いですよ!

本編という名の出オチ

こちらのリポジトリをcloneして、

irofディレクトリに移動し gradlew run してください。

するとこうなります。

../../../_images/stacktracerof.png

なんといろふさんが例外吐いて終了しました! (-∧-;) ナムー

投げっぱなしの解説

Java言語ではメソッド名に空白や記号を使えませんがクラスファイルとJVM的にはもうちょい制約緩いっぽいので その辺を利用してスタックトレースでいろふさんを描きました。

いろふさんのアイコンからAAを作ったのは次のサービスです。

で、クラスファイルを書き出したのはASMというライブラリです。

ASMの ClassWriterGeneratorAdapter を使えば割と簡単にクラスファイルを書き出す事ができます。 詳しくはGeneratorAdapterのJavadocと今回のいろふソースコードを参照ください。

それと今回は使っていませんが ClassReader を使うとクラスファイルを読む事ができます。

例えばインスタンスメソッドを実行してるコードを見つけて標準出力に書き出すようなアレは次のように書けます。

ClassReader reader = new ClassReader("irof.Irof");

MethodVisitor methodVisitor = new MethodVisitor(Opcodes.ASM5) {

    @Override
    public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
        if (opcode == Opcodes.INVOKEVIRTUAL) {
            System.out.printf("owner=%1$s name=%2$s desc=%3$s%n", owner, name, desc);
        }
    }
};

ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM5) {

    @Override
    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
        return methodVisitor;
    }
};

reader.accept(classVisitor, 0);

ちなみにASMはJDKにも入っています。 rt.jarcom.sun.xml.internal.ws.org.objectweb.asm 以下がそうですね。 JAX-WSに使われているようです。

あと jersey-server にも使われています。 jersey.repackaged.org.objectweb.asm 以下がそうです。

まとめ

いざやってみるとすんなり出来ちゃって変態度が低すぎてアレですが、まあいいか。