Diary/2007-4
前の月<< 2007-4 >>次の月 | ||||||
---|---|---|---|---|---|---|
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 気づいたら | 2 | 3 Fedora Core 6 | 4 続Fedora Core 6 | 5 Mailer On Eclipse 0.1.5 | 6 | 7 鯉のぼり |
8 Mailer on Eclipse | 9 | 10 | 11 | 12 可視化ツール | 13 Mailer On Eclipse 0.1.8 | 14 |
15 イージー | 16 | 17 カーネルのコンパイル | 18 | 19 Jarのマニフェストをいじる | 20 | 21 |
22 | 23 Swingとスレッド | 24 軽井沢 | 25 | 26 | 27 | 28 |
29 | 30 |
Diary/2007-4-24
軽井沢
発表無事終了。発表終了後にもう少し説明しやすい図を思いついたり。
今回は(も?)割と騒いだので、
前より先生方に覚えてもらえたかな?
家に帰ったら
子供には忘れられていたのかも.大泣きされてしまいました.
Diary/2007-4-23
Swingとスレッド
Swingに関する処理はSwingのイベント・ディスパッチ・スレッドで実行しなくてはならない。
で、このイベントディスパッチスレッドをmainスレッドとは別にするために、
GUIを構築するコードをmainスレッドから直接呼び出すのではなく、
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new MySwingApp(); } }); }とか、invokeLaterを使って呼び出すようにするべきのよう。
こうするとmainスレッドとは別にイベント・ディスパッチ・スレッドが
生成されることになる。
Swing使ったソフトで何やら挙動不審な動作をしていたのは、
Swingのスレッドまわりの勉強不足によっていたのかなぁ。
気づいたものから置き換えていこう。
http://java.sun.com/docs/books/tutorial/uiswing/components/examples/index.html#ScrollDemo
http://itpro.nikkeibp.co.jp/article/COLUMN/20070413/268205/
http://www.pc-view.net/article/162/2.html
CSTコンペ
http://www.ieice.org/~cst/compe07/マルチカーエレベーターの最適制御。
面白そう。
Diary/2007-4-19
Jarのマニフェストをいじる
マニフェスト中の、特定のキーの値が欲しいときManifest manifest = jf.getManifest(); Attributes ma = manifest.getMainAttributes(); String classpath = (String)(ma.getValue("Class-Path"));
COINSを実行可能JARから利用する
実行可能なJarファイルでは、manifestのClass-Pathで必要なライブラリへのパスを通すことができる。
したがって、COINSを自分でつくったアプリケーションから使う場合、
COINSをビルドしてjarにしたファイル
(COINSで配布されているjarではなくてclassesの下だけをjarにしたもの)
に対して、manifestでclass-pathを指定すればよいはずである。
が、Unix系(Linux、FreeBSD、MacOSX)ではうまく動かなかった。
# なぜかWindowsXPではうまく動いた。
これは、manifestの中のClass-PathがJavaのプロパティであるjava.class.pathに
含まれないために、COINSの中でクラスを動的にロードしようとしても
当該クラスをみつけることができないことに起因していた。
というわけで、これを回避するために、ちょっとハックしてみた。
coins-1.4.2.2-ja-searchClass_resursive.patch
COINSのディレクトリの中で、
patch -p0 < coins-1.4.2.2-ja-searchClass_resursive.patchとすれば適用できる。
COINSを実行可能JARから利用するための作業工程
たとえば、wallet.jar lib/coins.jarというようなディレクトリ構成にしていて
wallet.jarは実行可能jarファイルで、manifestファイルで次のように
Manifest-Version: 1.0 Main-Class: net.wasamon.wallet.WalletGUI Class-Path: lib/coins.jarClass-Pathにlib/coins.jarをちゃんと指定していても
java -jar wallet.jarとしてLinuxやFreeBD、MacOSXで起動しようとすると
次のような例外が発生して実行できない。
ちなみにWindowsでダブルクリックするとなぜか実行できる。
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: coins.driver.SuffixFactory at coins.driver.CompilerDriver.initializeSuffixFactory(CompilerDriver.java:81) at coins.driver.CompilerDriver.<init>(CompilerDriver.java:184) at net.wasamon.wallet.WalletDriver.doCompile(WalletDriver.java:156) at net.wasamon.wallet.WalletGUI.actionPerformed(WalletGUI.java:204)ちなみに、
java -cp wallet.jar:lib/coins.jar net.wasamon.wallet.WalletGUIとした場合には、ちゃんと実行できる。
もちろん、coins.driver.SuffixFactoryはcoins.jarに含まれている。
で、みてみると、coins.driver.CompilerDriver.initializeSuffixFactoryで
getAttachedFileInputStream(Class String)という関数を呼び出していて、
このメソッドが原因となる例外を発生している。
このメソッドでは、
System.getProperty("java.class.path")で得られる
パスから、該当するクラスを検索するために
ディレクトリあるいは、jarファイルであっても求めるクラスを探す
searchClassメソッドを呼び出し、この戻り値が全て偽の場合に、例外が投げられる。
ここで問題となるのは、
java -jar wallet.jarとして起動した場合には、System.getProperty("java.class.path")で得られるのが
wallet.jarだけであるということ。
たしかに、これじゃあ、coins.jarの方は検索していないわけだから見つかるはずもない。
なのでmanifestで指定したClass-Pathファイルについても検索してもらう必要がある。
たとえば、こんな感じ。
Manifest manifest = jf.getManifest(); Attributes ma = manifest.getMainAttributes(); String classpath = (String)(ma.getValue("Class-Path"));Attrubutesには、get(Object)というメソッドもあるが、getValue(String)でないとダメ。
で後は、ここで得られたclasspathを空白で分割して、
それぞれについて再帰的にsearchClassを検索すればいい。
幅優先で探索するべきなのかもしれないけど、まあ、とりあえず深さ優先で。
ちなみに、オリジナルのsearchClassは、真偽値を返すメソッドだが、
これでは、新しくmanifest中のClass-Pathから得たパスを返すことができないので、
真の代わりにパスを文字列で返し、偽の場合はnullを返すようにした。
Java
COINS
Diary/2007-4-17
カーネルのコンパイル
http://memo.blogdns.net/kernelsource.htmlやhttp://bbs.fedora.jp/read.php?FID=9&TID=4013を参考に。
makeとかgccとかは、既にインストールしていたので、
SRPMを操作するツールとかをインストールして設定
yum install rpmdevtools rpmdev-setuptreeホームディレクトリにある、rpmbuild以下で作業をすることになるようだ。
http://download.fedora.redhat.com/pub/fedora/linux/core/updates/6/SRPMS/
からカーネルのSRPMをダウンロードしてきて
rpm -Uvh kernel-2.6.20-1.2944.fc6.src.rpmで展開。~/rmpbuild/SPECSの下で
rpmbuild -bp --target i686 kernel-2.6.specとすると、~rpmbuild/BUILD/kernel-2.6.17/linux-2.6.17.i686/に
ソースが展開される
cp configs/kernel-2.6.17-i686.config .configで、現在のconfigファイルをもってきて、
さらに、MakefileのEXTRAVERSIONに適当に-miyo0とか指定。
後は、
make oldconfig make bzImage && make modulesrootになって
make modules_install make installgrubのメニューなんかも一緒に更新してくれる
Linux
Diary/2007-4-15
イージー
なんかちょっといろいろイージーに考えやすいというか,「のぼせもん」なのは,昔からの悪い性根.
もっと真剣にならねば.
いろいろ今月はやらないといけないことが多いので,
順々にきちんと片付けていこう.
Diary/2007-4-13
Mailer On Eclipse 0.1.8
Mailer On Eclipseの0.1.8をリリース.ひらの君と,だらだらとコード書き.
でも,サマリアップデートの別スレッド化や,
メールサマリへの検索ができるようになってだいぶ便利に.
特に別スレッドでサマリアップデートするようになったために
bmobileみたいな遅い回線でメールを受信している間でも
Eclipseで他の操作ができるようになったのは便利.
...でもまだEclipse上のWebブラウザで
GMailとかの方が便利なんだよなぁ,きっと.
次はキャッシュだ.
Eclipseでスレッド生成
というよりSWTかな.勝手に自分で作ったスレッドの中でSWTなオブジェクトに対して
操作を行おうとすると,例外が発生する.
正しくは,runメソッドに行いたい操作を記述した
Runnableインターフェースを実装するクラスを
Display::asyncExecの引数に与えて実行してもらうようにする.
ちなみにEclipseのViewPartを継承しているクラスからは
getSite().getShell().getDisplay();としてDisplayのインスタンスが取得できる.
Diary/2007-4-12
可視化ツール
子供をあやしながらプログラミング...なんてまともにできるわけもないので,
作っているコンパイラの途中結果を可視化するために,
Java3Dで作った三次元グラフツールとか,
GrinEditとかに吐き出すツールとかを生成したり.
Diary/2007-4-8
Mailer on Eclipse
Mailer on Eclipseを0.1.6にバージョンアップ。いい加減メールがたまってきてしまったという必要にかられて
とりあえずメールの削除とフォルダ移動を実装。
さて、いよいよ次は、フィルタでの自動振り分けとかか。
しかし、そろそろローカルでのデータのキャッシュとかも考えたいところ。
Eclipseでは、たとえばInputDialogの引数で与える
IInputValidatorの実装クラスとかで入力文字列の有効/無効を判定できる。
なので、これを利用して、移動先のフォルダがあるかどうか
動的に判定するようにプログラムを書いてみたのだが...遅い。
まあ、判定の度にネットワークアクセスすれば遅いよな。
というわけで、今はその機能はオフにしていますが、
他にもいろいろデータをキャッシュしておくと便利そう。
なんとなく
年度末、年度始のごたごたが一段落した(つもりになった)からかだらだらしてしまった一日。
Diary/2007-4-7
鯉のぼり
まさか、鯉のぼりを買う日がくるとは。とはいえ、ベランダにこじんまりと収まりのいい奴。
すぐに子供の方が大きくなってしまいそう
サークルの先輩と
久しぶりにご飯を食べに。アルバイトなどでお世話になっていた頃は
しょっちゅう、いろいろ話を聞かせてもらえていたのだが、
アルバイトをやめてからは、
なかなかそういう機会もなく、実に一年ぶりくらい。
近況を尋ねたり、面白い遊びについて相談してみたり。
キーワードは聖徳太子。
夜は短し歩けよ乙女
テレビでタイトルを聞いた瞬間に、読みたくなってしまった小説。独特の文体で彩られた独特の世界観に飲み込まれてしまい
あっという間に読み終えてしまいました。
時代は現代かもしれないけど、異次元的だよなぁ。
と、振り返りながら、村上春樹のダンスダンスダンスを
読み返したくなってきた。
Diary/2007-4-5
Mailer On Eclipse 0.1.5
Mailer On Eclipseを0.1.5にしました。添付ファイルを送信できるようにしたり、
サブジェクトなどの日本語が部分的あるいは、
複数回エンコードされている場合にも対応。
フォルダ操作はまだできないのでINBOXフォルダに
メールたまる一方だけど、普段使いには困らない...かな。
もう少しUIとか工夫...するくらいなら0.2.x系に移行だな。
Diary/2007-4-4
続Fedora Core 6
Fedora CoreというよりFedora Core上のEclipseで、Mailer On Eclipseでメールを送ろうとしたら、
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String at java.util.Properties.getProperty(libgcj.so.7rh) at javax.mail.Session.getProperty(Session.java:861) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:333) at javax.mail.Service.connect(Service.java:275) at javax.mail.Service.connect(Service.java:156) at net.wasamon.mailer.driver.SMTPClient.sendMessage(SMTPClient.java:60)というエラーで送れない。
どうやら、SMTP AUTHのためにJavaMailに指定しているプロパティ値のようだ。
ちなみに、同じキャストによる例外は、
プラグインをパッケージングしようとするときにも発生する。
でもテスト用のワークベンチ上だと、ちゃんと送れる。
解決
Eclipseと、gcj関係のパッケージを全て削除して、SunのJ2SDKと、eclipse.orgで配布されているバイナリで試したら解決。
確かに、起動は、FedoraCoreパッケージ版のが速かったなぁ。
ついでに、OpenOfficeも削除されてしまったのが、ちょっと残念。
まあ、使わないからいいけど。
Diary/2007-4-3
Fedora Core 6
いろいろあって、結局メインで使うコンピュータにFedoraCore6をインストールしてみた。
マシンが速くなったからか、MacOSXなどで慣れたからか、
GNOMEなインターフェースも恐くない。
とりあえず、パッケージでEclipseを入れてみたら
gcjが入ってて、ソースが軒並コンパイルできなくて、びっくり。
sunのJavaいれて、Eclipseの設定を5.0用に変えて、解決。
ちなみにEclipseのプラグインを開発するためには、
yum groupinstall Eclipseとするだけでは、ダメで、
yum install eclipse-pdeとか別途インストールする必要があるようだ。
emacsとかzshとかTgifとかいれて、満足。
あと,Acrobat Readerを起動するとexprが延々エラーを吐くのは
http://bbs.fedora.jp/read.php?FID=5&TID=4123を参考に,起動スクリプトを変更.
Mailer On Eclipse 0.1.4
Eclipse上でメールが読みたくて書いているプラグインMailer On Eclipse添付されたデータを保存できるようにしたので、
とりあえず受信に関しては問題がなくなったかな。
あとは、フォルダ操作とかがあれば、常用に耐えるのか?
でも将来的にスレッド表示とか、キーボード操作とかすることを
考えると、もう、ちゃんとエディタを定義する方向で実装しないと、な。
Diary/2007-4-1
気づいたら
4月。特に面白い嘘をつくまももなくエイプリルフールが終わった。
Copyright (c) 2001-2008 Takefumi MIYOSHI, All rights reserved