2006-07-30

xkeropi

xkeropi (WinX68k for X)

xkeropiというX68000のエミュレータのビルドに挑戦した(on Solaris10/x86)。

makedependがC++に対応していなかったり、nasmが-iオプションを受け付けてくれないようだったりはしたけど、とりあえずコンパイルは終了。
さっそくHuman68kを起動… うーん、"Can't init screen"で終了してしまう。エラーチェックをはずして強引に起動させると、コマンドプロンプトを出すところまではいってるのだけど、表示がおかしい。
良くドキュメントを読むと15/16bppのvisualをサポートしてないとダメらしい。しかし実際にはgtk_widget_get_visual()でGdkVisualを1つしか取得せず、それでしか判断をしていないようだ。そこでgdk_visual_get_best_with_both()で置き換えてみたが、同じ結果。あれれ?
そこでxdpyinfoでvisualのリストを見てみると… 24bppしかないじゃん orz... Xサーバの拡張機能使ってカラーデプス変えられるかなと思ったけど無理。xorg.confをいじって16bppでXサーバを起動させようとしたけど、なぜか無視される。どうすりゃいいんだ…
んじゃ、描画部分を24/32bppに置き換えてやろうかとも思ったけど… これはこれで歯が立たず。うーん、泣きそう。

mdbとエミュレータのチート

Solaris/x86でInfoNESを動かしてみる… ヌルゲーマなので必然的にチートに手を出さざるを得ない、というかチートを使うがためのエミュレータ。だが、巷で出回っているコードはInfoNESでは使えない。そこでmdb。

例えば"0123-1-cd-ほにゃらら"というコードだったら、
% mdb -p `pgrep InfoNES`
> RAM+0x123/v0xcd
> ::cont
こんな感じ。イヤーンw

条件分岐や演算が必要なものはdumpしてから書き直せばいいけど、ちょっと面倒。そうでなくても毎回InfoNESの実行を止めるのはやっかいなので、メモリイメージファイルと同名の.soファイルがあったら動的にロードし、チートコードを実行するように微修正。

2006-07-29

バルーンアート

お祭りでバルーンアートをやることになった…
夏休みの間練習しないと後輩君に怒られる…w

バルーンアートでぐぐってみると、イベントに出張するタイプの業者もいるみたい。確かに子どもが喜びそうだ。我々もそれを狙っているわけだから、客寄せとしては悪くないのかも。

それっぽく見せるにはくびれをどこにつくるかがカギになるのかな? まあ結局のところただのゴムなので、うかうかしてるとどんどんくびれがずれてきてしまう。それなりに難しい。

失敗知識データベース

「失敗知識データベース」は知識の宝庫!?

存在は/.jで知っていたのだけど、なんとなく読む機会がなかった失敗知識データベース。紹介記事を読むとやっぱりおもしろそう。

あーでもやっぱどうなんだろうなあ… いや、データベースそのものが面白いとしても、自分が「楽しめるか」というところが微妙。図面のラベルを「ちょっと」間違えただけなのに、部長と役員の前でレビューさせられた人が最近身近にいたので orz...

2006-07-26

ブリーフケース

ブリーフケースをWSH、あるいはバッチファイルから作成する方法はないものだろうか? 一応作成するだけなら以下の方法で可能らしい:

  • foo.{85BBD920-42A0-1069-A2E4-08002B30309D}というディレクトリを作る。アイコンは変わるが、エクスプローラから見るとクラスIDがバレバレ。

  • 以下の内容のdesktop.iniをディレクトリに入れる。
    [.ShellClassInfo]
    CLSID={85BBD920-42A0-1069-A2E4-08002B30309D}
    ConfirmFileOp=0

    アイコンも変わり、クラスIDもばれないが、内部にある「ブリーフケースデータベース」ファイルをどういじったらいいのかわからない。

  • foo.{86747AC0-42A0-1069-A2E6-08002B30309D}というディレクトリを作る。クラスIDがばれることはないが、アイコンは変わらず。でも偽装にいいかもしれない。


「どこと同期を取るか」までスクリプトで設定したいのだけど…

技術文書

会社で目にする技術系文書なのだが、漢字の「おくり」や、そもそもどこまで漢字表記にするかという細かいところでひっかかる点が多い。もちろん「てにをは」を間違えた豪快な悪文も見かけないではないが、内容的にはそう難しい文章を扱うわけでもないのでむしろ少数だ(ただし特許関係の書類は除く。あれはそもそも日本語とは認めたくないwww)。

例えば身の回りでは「条件xxが成立する時、StackOverFlowが発生する事が有る。この為、呼出す時は注意する事」などという文章がまかり通っている。お前はいつの時代の人間ですかと小一時間(ry

これは個人的には「条件xxが成立するとき、スタックオーバフローが発生することがある。このため、呼び出すときは注意しなければならない」でないとしっくりこない(「とき」は「際」に置き換えるべきだが、ここは例文ということでご勘弁を)。
  • 条件を表わす「とき」は形式的な名詞であり、時間を表わす「時」とは別の表記を用いるべき。
  • 中途半端にアルファベットを混ぜるな。そもそも"overflow"で一語だぜ。それから単語の間にはスペースを入れろ。中学生でも知ってる。
  • 最初の「こと」は漢字のままでもいいかな… ただし、"事項"というほどの強い意味はないのでひらがなで十分だ。
  • 「有る」も間違いではないが古い。"存在すること"に強い意味がなければ、普通はひらがなを使う。
  • 「為」もわざわざ漢字にしない。明治期の作家かっつーの。漢字にする副詞というとたぶん「多分」くらいw
  • 「注意する事」ってそもそも仕様書に書く文体ではない。小学校の校則じゃあるまいし。
要するに漢字が多すぎるのだ。IMEで候補に漢字があったら必ず使ってやろうというくらいの心意気だ。文字の並びというビジュアルな情報も、文章を読んだ時の印象に影響を与えることを知らないのだろうか。

これはただの予想なんだけど、やたらムダに漢字を使いたがるバカ方たちって「漢字を使えると偉い」と思ってるのかなと。自分の身の周りを見てみると、虚栄心の強い、こけおどしの好きな人たちがこういう書き方を好むようだ。電子メールに平気で「御参集の程宜しく御願い致します」と書いてみたり、カタカナ言葉をわざわざアルファベットで書いてみたり、そのアルファベットは筆記体で書いてみたり。

はあ、よく考えるとそういう人が周りに多いな orz...

まあ自分だけは平易で肩の力の抜けたスタイルを維持したいものです、でもりんごタンハァハァというサイトではわざわざ気にすることもないよね…
という長い前振りだったけど、文章を書く際に参考になりそうなサイトがあったのでメモ:

国語審議会資料(文化庁), Sunの翻訳ガイド, ↑の紹介, JF 文書文体ガイド

2006-07-25

TableCellRenderer

JTableに対するTableCellRendererオブジェクトは、各列に対して1つ作成すれば良い。
その1つのオブジェクトを各行の描画に利用し、それを繰り返すことでJTable全体を描画するとのこと。

なんてこった、2000行近いJTableを使っていたので2000個の余分なJTextAreaを生成していたよ。そりゃ遅いわけだ… orz
で、書き直してみたら目が覚めるほど速くなった。うひょー

IBMのサイトSwingのJTableコンポーネントでセルを描くが詳しい。

ゼロの使い魔第3話

いまさらながらゼロの使い魔第3話を見てみた。
釘宮理恵さん演じるツンデレ… 別にテンプレじゃないから繰り返す必要もないか… 魔法使いさんはなんか2話以降もサービスいいですね。
まだストーリーは動き出していないので様子見だけど、ルイズ様の下僕テラウラヤマシス
はっ、私は何を口走ってしまったのか!?

おとぎ銃士赤ずきん第2話

いまさらながらおとぎ銃士赤ずきん第2話を見てみた。
釘宮理恵さん演じるツンデレ風味の幼なじみ小学生がかわいすぎる(*´∀`*)ポワワ
妙にヲタネタがちりばめられているけど、大きいお友だちが見ればわかる程度で、小さいお友だちには無害。
子どもにも安心して見せることができ、かつヲタも満足させるこのさじ加減は絶妙。素晴らしい。

貧乏姉妹物語第1話

いまさらながら貧乏姉妹物語第1話見てみた。
金田朋子さん演ずる小学生あすに激ハマり。かわいいなあ(*´∀`*)ポワワ
かといって今時のあくどい萌え路線というわけでもなく、「賢者の贈り物」系のほろっとくる良いお話。
あすがぶわっと泣き出す表情なんか最高っす。
ああ、あしながおじさんとして二人を応援してあげたい。

極魔界村

極魔界村Flashのアーサーは黒田アーサー氏が演じていた

なにこのおもしろニュースwww
Flashも面白かったけど、こんなオチは予想だにしてなかった。
カプコン超GJ、担当者偉すぎ

2006-07-22

ATA over Ethernet for Solaris

Coraid :: The Linux Storage People

さとうタンのきになるもの経由。iSCSIのATA版みたいなものと考えればいいのかな。ただしiSCSIがTCP/IPのパケットの中にSCSIコマンドを入れるのに対し、Ethernetフレームの中にATAコマンドを入れるものらしい。暗号化もない? いろいろ割り切ってるなあ。

カーネルモードドライバはdkio ioctlを受け付け、かつSTREAMSインターフェースを提供するようだ。これから推測すると、カーネルからはATAディスクに見え、ユーザ空間プログラムがEthernetフレームをioctlでカーネル空間に渡す方法なのかなと。

2006-07-19

貧乏姉妹物語

貧乏姉妹物語

ツインテールの悟りを開くさんで大絶賛されていたので見てみようかなと。

NTTドコモ、Windows Mobile搭載3Gスマートフォン「hTc Z」

NTTドコモ、Windows Mobile搭載3Gスマートフォン「hTc Z」

日本でもようやくスマートフォンの機運が高まってる、と考えていいのかな? W-ZERO3も意外と法人向けに売れているらしいし、リーマンがケータイの小さい画面と格闘している図もイマイチ「サマ」にならないしね。

W-ZERO3をいじってる自分は…ははは orz

ただ最近はオカ板の洒落怖スレの過去ログを読むことが多いので、顔はにやけてないはず。

2006-07-18

電卓さらに続き

Windowsと浮動小数点演算の誤差を調べてみる。

JDS(GNOME): [1][tan/atan][*][4][-][PI][=]で"0"表示、このまま[1/x]を押すと"11136696004.299135332"

Windows: [1][tan/atan][*][4][-][PI][=]で"-1.393267707463821448075635979701e-37"表示、このまま[1/x]を押すと"-7.1773715463506261657687196560427e+36"

…CPU/FPUは同じはずなんだけどねえ。πの定義が違うのかな?

JDS=3.141592653, Windows=3.1415926535897932384626433832795

違うらしい… これでいいのかJDS(GNOME)… orz

ちなみにWM5(RPN Calculator on W-ZERO3)では[1][atan][4][*][pi][-]で"0"を表示、[1/x]で"INV Error: Division by zero"。なかなかすばらしい。

電卓続き

Windowsの電卓ソフトは有理数を正確に扱えるらしい。
つまり1/3*3を計算させるとぴったり1になるとのこと。おお、知らなかったよ。実際に試してみても、確かに浮動小数点化したことによる誤差がでないようだ。すげー。

JDS(GNOME)で同じことを試すとどうなるか。1/3*3を計算させてみると"1"の表示。でもこれは単にまるめられているだけだろう。この状態で[-][1][=]を押してやると、"-0"の表示になる。さらに[1/x]を押してやると、"-1.004336278e+59"の表示に。まあ普通に作ればこうなるよね。

ところで、学生時代はSHARPのPC-U6000というポケコンを使ってたので、関数電卓は社会人になってから買った。
シチズンのSRP280Qだけど、とくにこだわりもなく、傷モノが1000円くらいで売ってたので買ってみただけである。
入力は数式を入力するタイプ(ってHP以外は当たり前か)で、演算子の優先度を考慮する([=]キーを押すまで計算されない)。グラフ機能なし、統計機能あり、ビット演算なし、財務機能なし。カーソルキーを多用するところが利点であり、欠点。だれか他に持ってる人いるのかなあ…

Tom Boldt's RPN Calculator

W-ZERO3用のよさげな電卓ソフトはないものかと思っていろいろ調査。Hello worldと電卓はプログラミング入門の二大テーマだが(ちょっと嘘)、10/16進数の四則・論理演算がきっちりできるものはあまり多くない。しかもWM5用のフリーのものとなると… また、RPN電卓にもちょっと興味があるので、これをサポートしてればなお良し。

というわけで週間Windows CE通信経由でHP16Cエミュレータを探してみたがデッドリンク。

で、HP電卓が一種のステータスwになっているらしいのでEmu48というエミュレータを探し出してインストール。…すごい高機能ですなあ。方程式を解く機能があるらしいので、多項式を入れたら余裕で解く。まあそれは簡単すぎかなと思って、ためしに入れてみたsin(x)+cos(x)=0をあっさり解いてしまってちょっと興奮。作った人、いい仕事してますなあ。

んがこのEmu48、動作がかなり重い。キー入力がすぐに確認できないようでは実用にならないので、残念ながらパス。とはいえかなり勉強になりそうなので、時間があったらマニュアルでも読んでみますか。

次にHP11Cというプログラマ向け電卓のシミュレータをゲット。
何のシフト動作もなしにA〜Fを入力でき、ビット演算はもちろん、シフト演算、はてはローテート演算までやってのけるところは確かに計算機屋が喜びそうなところだ。操作もきわめて軽快。ただ、残念ながら10進実数演算がかなり弱い。[f][FLOAT]で有効桁(表示桁かも)を設定してやらないと、妙に桁数が少なく表示されてしまう。とどめにフリーソフトではない。よってパス。

というわけで、Tom Boldt's RPN Calculatorを試しているところ。

しかし、普通の用途では100円ショップの電卓で済ましているけど、実はかなり濃い世界だったのね… いろいろ勉強になりました。

ゼロの使い魔

ゼロの使い魔 OHP

釘宮さんのツンデレキャラがまた見れますよ…
1話を飛ばし見してみたけど、なんかサービス良いなあ。

2006-07-17

N・H・Kにようこそ!

N・H・Kにようこそ!

第1話だけ見てみた… ああ、なんだこのもやもや感は… 言いたいことはいろいろあるが、天に唾する所業なのでやめておこう。親近感と近親憎悪の入り交じったこの妙な気持ち、どうにかならないか orz...
とりあえず岬ちゃん萌えと無難な感想を。サクラクロニクルのサクラの人がCVだったかな?

ところでマンガ版の作者が本気で大「槻」ケンヂだと思ってた。監修的な立場でシナリオ書いたのかと。しかもあのEDを作りそして歌っているわけで、すごいマルチな才能だよなあ…と思った純真な心を返して頂きたい。

OHP、「NHK」という表記じゃなくて「N・H・K」とご丁寧に中黒を入れた挙げ句、「N・H・Kとは、日本ひ○こ○り協会のことだよ」とよく分からない伏せ字付きの解説がついている。うーん、妙に面白いw おまけにこんなことを発見された方もいるようで。

2006-07-16

先読みの正規表現

Bayesian推定のプログラムを作っている途中で気が付いたこと。

ファイルをトラバースする際に、探索を打ち切るパス名を正規表現で表現したい。具体的には「パス要素がちょうど3で、第3要素が"image"ではない」パス名だけマッチさせたい。

で、最初は[^/]+/[^/]+/[^i][^m][^a][^g][^e].*かな?と思って試したんだけど、良く考えるとa/b/xxxがマッチしない(探索を打ち切れない)ので、これは間違い。

次に「幅ゼロの否定先読み」という難しい機能が使えるかなと思って[^/]+/[^/]+/(?!image)を指定したけど、何もマッチしない。

おかしいなあと思ってPerlの正規表現(Javaの正規表現はPerlの影響が大きいようだ)を調べてみると… うわ、よくある間違いだった… orz

上記の例だと、「imageが後続しない、第3要素が空の、3つのパス要素を持つパス」の意味になって、"aaa/bbb/"などにしかマッチしない。

正解は[^/]+/[^/]+/(?!image).+だった。しかし、Perl/Javaの正規表現は難しいなあ…

Bayesian推定を使ったファイル分類プログラム

CG定点観測などのサイトを巡る身としては、落してきた画像ファイルの分類は結構めんどうな作業だ。そこで、URL文字列に基づくBayesian推定を利用するファイル分類プログラムwを作り始めたり。

幸い、いままで「/a/flower/カテゴリ/image/取得元URL」というルールで画像ファイルを格納してきた。例えばダウソ元がhttp://www.haruhi.tv/img/sos_logo.gifならば、/a/flower/s/suzumiya_haruhi_no_yuuutu/image/www.haruhi.tv/img/sos_logo.gifに格納するといった具合。

だから、分類プログラムは/a/flower以下を走査し、カテゴリと分類キーワードを抜き出して出現確率を学習してやればよい。分類キーワードはURLから抜き出すものとし、上記の例ならば「www.haruhi.tv」「www.haruhi.tv/img」「sos_logo」が分類キーワードになる。

…で、試作品ができた。実行はこんな感じ
% java Bic learn
% java Bic prob nagato
P(An[s/suzumiya_haruhi_no_yuuutu])=577/23472 P(Bm[nagato])=43/92485 P(Bm|An)=41/2210 P(An|Bm)=0.9808896341240785

% java Bic prob sakura
P(An[c/card_captor_sakura])=465/23472 P(Bm[sakura])=42/92485 P(Bm|An)=35/2338 P(An|Bm)=0.6530529632379997
P(An[d/dc_da_capo])=177/23472 P(Bm[sakura])=42/92485 P(Bm|An)=1/684 P(An|Bm)=0.024276667975038708
P(An[n/nanika])=54/23472 P(Bm[sakura])=42/92485 P(Bm|An)=3/187 P(An|Bm)=0.08127281866455452
P(An[@Circle/neko_ni_terumin])=361/23472 P(Bm[sakura])=42/92485 P(Bm|An)=1/1467 P(An|Bm)=0.02308601651808125
P(An[m/mahojin_guruguru])=1304/23472 P(Bm[sakura])=42/92485 P(Bm|An)=2/5330 P(An|Bm)=0.04590418614808859

sakuraというキーワードから木之本桜だけではなく、芳乃さくら・任意さくらも自動的に候補としてくれるあたりが面白い。サクラ大戦の画像はほとんどないので、当然これはひっかからない。

んが、
% java Bic prob nanoha.com
P(An[l/lyrical_nanoha])=3229/23472 P(Bm[nanoha.com])=19/92485 P(Bm|An)=19/12567 P(An|Bm)=1.0124128163161337


100%越えてるよ!?www

2006-07-13

議論のしかた

議論のしかた
RinRin王国経由。とっても参考になりそうなのでメモ。

こちらのサイトでは特に言及されてなかったけど、詭弁のガイドラインに触れたページって多い気がする。
あれの元ネタってあるのかなあ。Morphy Oneの擁護派・批判派についてそれぞれ適用したものがあるので、その時代からあるものなのか。

さてこのサイト、他にもソフトウェア開発関係で良さげな文章があってハァハァ
新人君に教えてあげよう。ただ、参考になるサイトを「読んどけよ〜」と言って放置しておくだけなのに、何かを教えたつもりになってるのは良くないかもしれないw

Amazonでメイド服

Firefoxの普及イベントのレポート記事に入ってたアフィリエイト経由。
Amazonでメイド服の扱いが妙に充実していることを発見www
こんなに種類があったのか!とびっくり。
それぞれのスタイルの違いについてどなたか解説してくれませんかね?

2006-07-10

もしも、綾波・長門・ルリルリが3兄弟だったら

もしも、綾波・長門・ルリルリが3兄弟だったら

無口系キャラって、人工的な出生を経ている設定が多いのかな?

Yahoo!ニュース - 時事通信 - 男前豆腐店を書類送検=大豆殻を不法焼却−京都府警

Yahoo!ニュース - 時事通信 - 男前豆腐店を書類送検=大豆殻を不法焼却−京都府警

今さらではあるが、「男前豆腐」の小サイズ版が発売になったので買ってみた。
醤油をかけないで食べたほうが良かったんだっけ?と思って公式サイトを見たら、なぜか謝られた。
はて?…と思ったら、大豆殻の不法焼却で書類送検されていたのね。

大豆殻はおからのことなのかな? 炒り豆についてるような薄皮っぽいやつかな?

豆腐自体は大変おいしゅうございました。
甘みがあって、しっかりした味がある。
冷や奴にするならいつもこれくらいうまいものを食いたいものだ… でも高いんだよなあ orz

それはそうと、あのサイト見ると玄人志向のサイト連想するんだよねw

2006-07-09

JDS付属のディスク使用量レポートソフト

あまりじっくり調べたこともなかったJDSのメニュー。
アプリケーション→システム ツール→ディスクアナライザというのが
ちょっと気になったので起動してみる。

duを高性能にしたようなディスク容量の使用状況を調べるツールが起動した。
xduなんてのもあったけど、見栄えが良くなってる。
調べてみるとJavaで動作しているらしい。

でも、なんで「ディスクアナライザ」って訳なんだろう。
表面検査やSMARTのデータを読み出すツールだと思うじゃないか。

2006-07-06

たとえミサイルが飛んでこようが暑いものは暑い

会社でエアコンが壊れてぐったり…

たまたま何かで知ったのだけど、事務所に空調を設置することは
事業者の努力事項らしい。

あ、あったあった。事務所衛生基準規則っていうんだ。

第五条 3 事業者は、空気調和設備を設けている場合は、室の気温が十七度以上二十八度以下及び相対湿度が四十パーセント以上七十パーセント以下になるように努めなければならない。

他にもトイレの数とか部屋の広さについて規定があって、
個人的にはへぇーと思うことしきり。

2006-07-04

W-ZERO3 [es]

W-ZERO3 [es]発表。
かるい、うすい、ほそい、ぺったんこw

これはケータイユーザに歩み寄ったかたちなのかな?
QRコード読めるのは良いなあ。
あと落しづらくなってるかもしれない。
値段も安くなってるし。

2006-07-03

日清食品 : ニュースリリース : ご案内

日清食品 : ニュースリリース : ご案内


1.「カップヌードル 夏の辛口 スパイシーチリ」
(1) め ん
しなやかでコシとつるみのあるめんです。


「つるみ」ってなんだろうw

地図データ

W-ZERO3 Monitorがらみで公共の地図データを探していたのだけど…
なんだかずいぶん種類があるのにびっくり。

総務省統計局の統計GISプラザ(http://gisplaza.stat.go.jp/GISPlaza/)
国勢調査の結果を表示するために町丁・字等境界データもダウンロードさせてくれる。

国土交通省国土計画局の街区レベル位置参照情報ダウンロードサービス(http://nlftp.mlit.go.jp/isj/index.html)
街区単位の位置座標(代表点の緯度・経度、平面直角座標)がわかる。
使用条件的には一番融通が利いて使いやすい。

同じく国土交通省国土計画局の国土数値情報(http://nlftp.mlit.go.jp/ksj/index.html)
交通だけでも道路・鉄道などの基本的な情報だけでなく空港・航路も載ってるらしく、
さらには土地の利用用途・地価(笑)・公共施設などのデータも入っている。
これも使用条件的には使いやすい。

最後に国土地理院の数値地図(空間データ基盤)(http://sdf.gsi.go.jp/)
1/2500と1/25000のデータが入っていて、相当細かい(3m幅くらいの道路くらいまでは載ってる)街区データや、行政区分(番地表示)が入っている。
詳細さでは一番なんだけど、法律の関係か使用条件はかなり厳しい。

とこんな感じっぽい。
…まあ、用途ごとに調査項目が違うから、こんな別れてるんでしょうね(と信じたい)。
国土計画局と国土地理院でそれぞれ航空写真の閲覧サービスがあるらしいし…

2006-07-02

W-ZERO3: QRコードのデコード

さて、MIDPアプリががしがし書ける状況にはなったけど、本題のQRコードはどうしようか。

QRコードを解読するための画像をMIDPアプリに食わせるには、
多分2通りの方法があると思う。
1つめは直接Javaからカメラの画像を取得してしまう方法。
もう1つがJavaからファイルシステムに格納された画像ファイルを入力する方法。

第1の方法は、Mobile Media APIを使えば良いらしい。
だがMIDP的にはオプションなので、本当に使えるかはわからない。
そこで公式ページに乗っているサンプルコードをコンパイルして試してみたが… ダメっぽい… orz

カメラからの入力を受け付けるデバイスはvideo.snapshot.encodingsというプロパティを持つらしいのだけど、そんなものはない。(関係ないが、J2MEではPropertiesを列挙できないのでちょっと困った)

そこで第2の画像ファイルを読む方法を試してみた。
こちらはPDA Optional Packages for the J2METM Platformというもので、ネイティブ実行環境のファイルやPIMデータへのアクセスを提供する。

んが… これどう使ったらいいんだろう?
ん・ぱか工房さんのサンプルを試してみたけど、JBlendは黙ってすぐに終了してしまう。
らるるのメモ帳さんを参考にしてfile://localhost/に置き換えてもダメ…

というわけでお手上げ〜
画像ファイルのURLを入力して読ませることはできると思うんだけど、
画像ファイルをどううpするのとか、そのURLは手打ちかよ!とかいろいろ難がある。

Solaris/x86におけるMIDPアプリの開発環境 その3

Solaris/x86におけるMIDPアプリの開発環境の続き。

さて、どうにかJ2ME+CLDC+MIDPのコンパイル/エミュレーション環境がそろったので、
いよいよアプリケーションを作ってみる。

SunのMIDPのドキュメントについているHelloMIDlet.javaをsrc/に置き、
カレントディレクトリに以下のMakefileを置いてやる。
JAR = HelloMIDlet

MIDP_DIR = ../../j2me/midp2.0fcs/build/solaris
WTK_DIR = ../../j2me/WTK2.2

MIDP_CLASSES = $(MIDP_DIR)/classes
OPT_CLASSES = $(WTK_DIR)/lib/jsr75.jar

PREVERIFY = $(MIDP_DIR)/bin/preverify
EMULATOR = $(MIDP_DIR)/bin/midp
BOOT_CP = $(MIDP_CLASSES)
REF_CP = $(MIDP_CLASSES):$(OPT_CLASSES)
RUN_CP = classes:$(MIDP_CLASSES):$(OPT_CLASSES)
JAVAC = javac -bootclasspath $(BOOT_CP) -classpath $(REF_CP) -source 1.4

all: tmpclasses
$(JAVAC) -d tmpclasses `find src -name \*.java`
rm -rf classes; mkdir classes
$(PREVERIFY) -cldc -classpath $(RUN_CP) -d classes tmpclasses

jar:
@echo 'Manifest-Version: 1.0' > $(JAR).mf
@echo 'MIDlet-Name: $(JAR)' >> $(JAR).mf
@echo 'MIDlet-Version: 0.0.1' >> $(JAR).mf
@echo 'MIDlet-Vendor: unknown vendor' >> $(JAR).mf
@echo 'MicroEdition-Profile: MIDP-2.0' >> $(JAR).mf
@echo 'MicroEdition-Configuration: CLDC-1.0' >> $(JAR).mf
jar -cmf $(JAR).mf $(JAR).jar -C classes .

cp $(JAR).mf $(JAR).jad
@echo 'MIDlet-Jar-URL: http://localhost/$(JAR).jar' >> $(JAR).jad
@echo 'MIDlet-Jar-Size: '`ls -l $(JAR).jar | awk '{print $$5}'` >> $(JAR).jad
@echo 'MIDlet-1: $(JAR),, $(JAR)' >> $(JAR).jad

run:
$(EMULATOR) -classpath $(RUN_CP) -descriptor $(JAR).jad

tmpclasses:
mkdir tmpclasses

clean:
rm -rf classes tmpclasses $(JAR).mf $(JAR).jar $(JAR).jad

これでmake all jarしてやれば、jarファイルとjadファイルができる。
エミュレータを起動するにはmake run

MIDP_DIRWTK_DIRはそれぞれMIDPのリファレンス実装を展開したところと
Wireless Toolkitをインストールしたところを指定する。
WTK_DIROTP_CLASSESはMMAPIなどのオプションAPIを使うときだけ指定する。

2006-07-01

Java ME - Micro App Development Made Easy

Java ME - Micro App Development Made Easy

Solaris/x86におけるMIDPアプリの開発環境の続き。
J2ME Wireless Toolkitに含まれるエミュレータとpreverifyがプラットフォーム依存なため、
結局Solarisでは動かない(SPARCもx86)と判断した。
ある意味Sun純正の開発環境なんだけど… orz

そこでさらに調べると、素のMIDP開発キットがあって
Solaris(SPARC), Linux(x86), Windowsで動作するらしい。
前述のJ2ME Wireless Toolkitはこの開発キットが前身で、
これを簡易IDE風にまとめたものらしい。

ならばこれをSolaris/x86用にビルドしてやろうか… というのが以下のメモ。

  1. J2ME CLDC 1.0.4 RIJ2ME MIDP 2.0FCSを入手。
    どちらもSolaris/SPARC版を選ぶ。
  2. 伸長
    % unzip archive/j2me_cldc-1_0_4-src-winunix.zip
    % unzip archive/midp-2_0-src-solaris-sparc.zip
  3. パッチあて
    % ln -s j2me_cldc kvm
    % (cd j2me_cldc; gpatch -p0 -b -z .ORG < ../patch/j2me_cldc-1.0.4ri.patch)
    % touch midp2.0fcs/build/solaris/dummy_ssl.c
    % (cd midp2.0fcs; gpatch -p0 -b -z .ORG < ../patch/midp2.0fcs.patch)
  4. ビルド
    % cd midp2.0fcs/build/solaris
    % gmake
  5. サンプルを実行
    % bin/midp -classpath classes -descriptor games.jad


まあ、下のパッチを見ると分かるようにSSL関連の関数をダミーで置き換えていて、
相当あやしいシロモノである。

j2me_cldc-1.0.4ri.patch
--- ./api/Makefile.ORG Thu Nov 14 08:07:07 2002
+++ ./api/Makefile Sat Jul 1 17:46:51 2006
@@ -20,7 +20,7 @@
DEBUGFLAG=":none"
endif

-JAVAC = javac
+JAVAC = javac -source 1.4 -encoding ISO-8859-1
PREVERIFY = ../tools/preverifier/build/$(PLATFORM)/preverify
JAR = jar

--- ./tools/jcc/Makefile.ORG Thu Nov 14 08:07:09 2002
+++ ./tools/jcc/Makefile Sat Jul 1 17:43:27 2006
@@ -15,7 +15,7 @@
include $(TOP)/build/Makefile.inc

JAVA = java
-JAVAC = javac
+JAVAC = javac -source 1.4 -encoding ISO-8859-1
JAR = jar

JAVAFILES = $(shell find src -name "*.java"|grep -v SCCS)
--- ./tools/kdp/Makefile.ORG Thu Nov 14 08:07:10 2002
+++ ./tools/kdp/Makefile Sat Jul 1 17:43:27 2006
@@ -14,7 +14,7 @@
all: tools

JAVA = java
-JAVAC = javac
+JAVAC = javac -source 1.4 -encoding ISO-8859-1
JAR = jar
JAVAFILES = $(shell find src -name "*.java"|grep -v SCCS)

midp2.0fcs.patch
--- ./build/share/makefiles/Defs.gmk.ORG Fri Nov  8 06:02:05 2002
+++ ./build/share/makefiles/Defs.gmk Sat Jul 1 17:36:03 2006
@@ -156,7 +156,7 @@
#
JAR = $(BOOTDIR)/bin/jar$(EXE)
JAVA = $(BOOTDIR)/bin/java$(EXE)
-JAVAC = $(BOOTDIR)/bin/javac$(EXE)
+JAVAC = $(BOOTDIR)/bin/javac$(EXE) -source 1.3 -encoding ISO-8859-1
JAVADOC = $(BOOTDIR)/bin/javadoc$(EXE)

# MIDP tools
@@ -304,7 +304,9 @@
PLATFORM_OBJ_FILES += $(patsubst %.rc,$(OBJ_DIR)/%.res,$(filter %.rc, $(PLATFORM_SRC_FILES)))

SSL_OBJ_DIR = ssl_obj$(g)$(ARCH_DIR)
-SSL_SRC_FILES = nativecrypto.c MD5.c SHA.c bnlib.c MD2.c messagedigest.c
+#SSL_SRC_FILES = nativecrypto.c MD5.c SHA.c bnlib.c MD2.c messagedigest.c
+#SSL_OBJ_FILES = $(patsubst %.c,$(SSL_OBJ_DIR)/%.o,$(SSL_SRC_FILES))
+SSL_SRC_FILES = dummy_ssl.c
SSL_OBJ_FILES = $(patsubst %.c,$(SSL_OBJ_DIR)/%.o,$(SSL_SRC_FILES))

# generate OBJ_FILES list; we need to sort the files due to a linker
--- ./build/solaris/makefiles/Defs-pre.gmk.ORG Fri Nov 8 06:02:07 2002
+++ ./build/solaris/makefiles/Defs-pre.gmk Sat Jul 1 14:34:19 2006
@@ -76,6 +76,7 @@
endif
ifeq ($(ARCH), i386)
_BOOTDIR = /usr/local/java/jdk1.3/x86
+_BOOTDIR = /usr/java
endif

# Uncomment the following definition if you want to build both Solaris/x86
--- ./build/solaris/dummy_ssl.c.ORG Sat Jul 1 17:36:48 2006
+++ ./build/solaris/dummy_ssl.c Sat Jul 1 17:36:48 2006
@@ -1,0 +1,8 @@
+void Java_com_sun_midp_ssl_Alg2_modExp(void) {}
+void Java_com_sun_midp_ssl_Alg3_nativetx(void) {}
+void Java_com_sun_midp_ssl_MD5_nativeUpdate(void) {}
+void Java_com_sun_midp_ssl_MD5_nativeFinal(void) {}
+void Java_com_sun_midp_ssl_MD2_nativeUpdate(void) {}
+void Java_com_sun_midp_ssl_MD2_nativeFinal(void) {}
+void Java_com_sun_midp_ssl_SHA_nativeUpdate(void) {}
+void Java_com_sun_midp_ssl_SHA_nativeFinal(void) {}

ソフト開発について - W-ZERO3 Wiki

ソフト開発について - W-ZERO3 Wiki

MIDPアプリのSolaris/x86用開発環境を探してみるが… 微妙に敷居が高いなあ。

W-ZERO3 Wikiを見るとまず、
* J2SE Development Kit 5.0 Update 6 with NetBeans 4.1 Bundle
* NetBeans Mobility Pack 4.1
が挙げられているのだけど、すでにNetBeans 5に移行しているため
4.1のファイルはダウンロードできなくなってる。
5は5で問題があって、英語版しかMobility Packが用意されていないようだ。

* Java 2 SDK, Standard Edition, v 1.4.2_10 (J2SE)
* J2ME Wireless Toolkit 2.2
マシンにはJ2SE SDK 5.0が入っているのだけど、
これにLinux(x86)用のJ2ME Wireless Toolkit 2.2を入れてktoolbarという
ツールが動くところまでは確認した。

ただし、WTK2.2/wtklib/SunOSというシンボリックリンクがWTK2.2/wtklib/Linuxを
指すようにしないといけない。
また、WTK2.2/bin/*.soやWTK2.2/bin/{preverity*,zayit}はLinuxのバイナリ/ライブラリなので、
これを使うところでこけることになりそう。

SourceForge.jp: Project Info - QR Code

SourceForge.jp: Project Info - QR Code

W-ZERO3でQRコードを解読させてみたくて、デコードライブラリを検索してたらこんなプロジェクトが。
さっそくダウンロードしてみたが… おいおい、ドキュメントの類がひとつもないじゃないか。不親切だなあ。
まあいいやコンパイルしてみるか、と気を取り直してantコマンドを… build.xmlもないのね。

Eclipseで作った形跡があるんだけど、Sun儲としては今さら入れるのも微妙だよなあ…
で、しょうがないのでMakefile作りますた(←オールドタイプ)。

JAVAC = javac -encoding shift-jis

compile: classes
$(JAVAC) -d classes -sourcepath src `find src -name \*.java`

jar:
jar cvf qrcode.jar -C classes .

classes:
mkdir classes

clean:
rm -rf classes

これでjarファイルはおk。

お次はサンプルプログラムのqrcodeExample.zipを伸長して…
って、できあいのjarファイル入ってたね… orz
まあ気を取り直してこんな感じのMakefileを書いてみる。


all:
$(MAKE) jar JAR=QRCodeDecoderSampleCUI
$(MAKE) jar JAR=QRCodeDecoderSampleGUI

jar:
echo 'Manifest-Version: 1.0' > $(JAR).mf
echo 'Main-Class: jp.sourceforge.qrcode.example.$(JAR)' >> $(JAR).mf
mkdir $(JAR)
(cd $(JAR); jar xf ../qrcode.jar; cp -rp ../classes/* .)
jar cfm $(JAR).jar $(JAR).mf -C $(JAR) .
rm -r $(JAR).mf $(JAR)

clean:
rm -rf *.mf
rm -rf QRCodeDecoderSample*

実行するのはこんな感じ。

% java -jar QRCodeDecoderSampleGUI.jar

おお、とりあえずなんとか動かせた。