Hatena::ブログ(Diary)

プログラマーの脳みそ このページをアンテナに追加 RSSフィード

2010-02-09

画像を1/3ピクセルだけ左に移動しましょうか?

| 23:05 |  画像を1/3ピクセルだけ左に移動しましょうか?を含むブックマーク

「画像を0.5ピクセル左に移動させてください」

クライアントからのムチャぶり迷言集 | Webクリエイターボックス

 画像を0.5ピクセル移動させることは出来ないが、1/3か2/3ピクセルなら移動させることが出来る。

 ClearTypeフォントで用いられている手法なのだけど、一般的な液晶モニタは1ピクセルRGBの3つのサブピクセルからなる。なので、

RGB
BRG
GBR

ってな具合で1/3ずつ移動させることができる。

 もちろん、CRTのユーザだと変色して見えるだけだし、液晶モニタ縦置きでもNGなので、Webページのデザインでは使わない方がいいだろう :-P

コードの変態性とは何か

21:08 |  コードの変態性とは何かを含むブックマーク

  Java変態文法最速マスター - プログラマーの脳みその反応で、そこで取り上げられた文法は別に変態でも何でもない、という意見があったんだけど、そもそも「文法そのものが変態的」か、という話と、「ある文法を利用して変態的なコードを書く」ということを区別しておきたい。

 「文法そのものが変態的」っていうのは世の中に存在するプログラム言語に類を見ない、特殊な文法である、とかそういうニュアンスだろう。

 僕がネタにしたのは、「ある文法を利用して変態的なコードを書く」ことだった。この主体はコードであって文法じゃない。普通はやらないようなナンセンスな、変態的なコードというのがまずありきで、その手法にはこのような文法が用いられる、という話なんだ。

  Java変態文法最速マスター - プログラマーの脳みそに書いたサンプルコードはおおよそナンセンスで真似すべきじゃないものが多数だが、その原理についてはJavaの言語仕様としてできれば知っておきたいものばかりだね。

 そういう意味ではAmazon.co.jp: Java言語仕様 第3版 (The Java Series): ジェームズ ゴスリン, ガイ スティール, ビル ジョイ, ギッラード ブラーハ, James Gosling, Guy Steele, Bill Joy, Gilad Bracha, 村上 雅章: 本であるとか、Amazon.co.jp: プログラミング言語Java (The Java Series): ケン・アーノルド, ジェームズ ゴスリン, デビッド ホームズ, 柴田 芳樹: 本に載っていることしか利用していない。ごく普通の文法を用いたコードに過ぎない。しかし、だからといってAmazon.co.jp: Java Puzzlers 罠、落とし穴、コーナーケース: ジョシュア・ブロック, ニール・ガフター, 柴田 芳樹: 本で紹介されるようなコードが「ごく普通の文法を用いた特筆すべき点のない普通のコード」というわけではない。この本には変態的なコードばかりが書かれている。

 コードの変態性を求める、というのはプログラマにとってよい娯楽になる。単に楽しいだけでなく、プログラミングの訓練にもなる。与えられた文法を使って、どのようなことが出来るか創造的工夫を凝らすという遊びなんだ。

 文法を暗記することがプログラミングの技能なわけじゃない。手にした文法でどんなプログラムを組めるかが大事なんだ。そう思わないかい?

Javaバイトコードの読み方 javapの補足

20:46 |  Javaバイトコードの読み方 javapの補足を含むブックマーク

  Javaバイトコードの読み方 - プログラマーの脳みそではEclipseの"Class File Editor"でバイトコードを読む場合のさわりを紹介した。

 ブックマークなどの反応をみるとjavapの誤解があるように思う。

b:id:yujiorama デバッグ用途なら javap でもいいとこまでやってくれる。jad があればもっとよい。バイトコードはそれからでも遅くはないと思った。

はてなブックマーク - yujioramaのブックマーク - 2010年2月8日

やったことないけど、javapとかで逆アセンブルするのとどちらが早いんだろう。・・・用途で使い分けたりするのかな?「Javaバイトコードの読み方」 http://bit.ly/aNQMUJ

Twitter / qyou: やったことないけど、javapとかで逆アセンブルする ...

 javapというのはJDK(Javaの開発キット)をインストールすると標準でついてくる、コマンドラインで使うディスアセンブラだ。ツールの公式ドキュメントはjavap - Java クラスファイル逆アセンブラ

 そして、さきのエントリで紹介したEclipseの"Class File Editor"*1というのはこのjavapを自動的にやってくれて、その結果を表示してくれる機能だと思えばいい。出力される情報はほとんど一緒だ。

 デバッグ用途ならjavapでも〜という意見は、IDEを用いないでJava開発をしているのであれば分からなくもない意見だが、そもそもIDEなしで開発することがいかがなものか、と思う。javapで逆アセンブルするのとどちらが早いか、という話はEclipseを用いているなら断然"Class File Editor"が早い。IDEを用いないでJava開発をしているのであれば、javapのほうが早いかもしれない。が、そもそもIDEを使ってJava開発をするほうが断然効率がいい。

*1:"Class File Viewer"という説もある

トラックバック - http://d.hatena.ne.jp/Nagise/20100209