Javaで日本語フォント -- 2004-07-14
Javaで文字を表示するとき, GUIならばいろんなフォントを利用できる。
てことで, 「ぽっぷまる」とか「懐遊体」とか試してみたにょ。
なよなよした文字を描きたいときにはオススメ ♥, みたいな。
動作確認には, コレ(↓)を使うことできるだよ。 Rhinoなスクリプトなので, Java SDK がなくてもだいしょーぶぃ。
てゆーか Font2DTest.jar
があるのならソレの方がもっと簡単カモ。
/* フォント一覧 */ importPackage(java.lang, java.awt, Packages.javax.swing) function createComponents() { var pane = Box.createVerticalBox() var fnt = GraphicsEnvironment.localGraphicsEnvironment.availableFontFamilyNames for (var i = 0; i < fnt.length; i++) { var lbl = new JLabel(fnt[i]+': 日本語?') lbl.font = new Font(fnt[i], Font.PLAIN, 16) lbl.border = BorderFactory.createEtchedBorder(Packages.javax.swing.border.EtchedBorder.LOWERED) pane.add(lbl) pane.add(Box.createVerticalStrut(2)) } var btn = new JButton('quit') btn.addActionListener(function (event) { quit() }) pane.add(Box.createVerticalStrut(10)) pane.add(btn) pane.border = BorderFactory.createEmptyBorder(5,5,5,5) return pane } try { UIManager.setLookAndFeel(UIManager.systemLookAndFeelClassName) //UIManager.setLookAndFeel(UIManager.crossPlatformLookAndFeelClassName) } catch (e) {} var frame = new JFrame('フォント一覧') frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE frame.contentPane.add(createComponents()) frame.pack() frame.visible = true
フォントリストからフォントを選択できるアプリケーションなら, フォントファイルを準備するだけで十分なんだけど, 自らプログラムを作るばーい, java.awt パッケージの Font クラスでそのフォントを指定する必要があるにょ。 あるいは java.awt.font パッケージとかネ。
そこに指定するのは 物理フォント(=Physical Fonts) 名。 たとえば「Monotype Sans WT J」とか「懐遊体」とか, そんなの。 (ファイル名じゃないので間違っちゃダメ)
これとは別に, 論理フォント(=Logical Fonts) てのもあったりする。
論理フォントに物理フォントをマッピング, んで, 間接的に扱うって寸法にょ。 (Serif, SansSerif, Monospaced, Dialog, DialogInput の 5種類)
間接的に扱う論理フォント
にどんなメリットがあるのか … ソレは, font.properties ファイルを変更するだけで, いろんなフォントに変更できる。 ある範囲の文字はこっちのフォント, 別の範囲はあっちのフォントとかも指定できたりする (英数字はこっち, 漢字はそっち, カタカナはコレ, みたいな)。そんなトコ。
くわしいことは, こっち見てけろ (↓)
J2SE 1.4 ドキュメントの 機能ガイド → 基本機能 → 国際化 の中の「フォント」の項目とか,
(ひとつ前のソレ) J2SE 1.3 の同じ 国際化 のトコ
◇
文字表示の問題は他にもあって, InnoTekの Javaが ODINを使ってるっぽいことが原因てのも存在するだよ。
Java での GUIつったら Swing とか, (その前の) AWT とか (ほかにも SWT とか)あるんだけど, Swingは Javaでできているので上(↑)でアレした通り。
でも AWTでは, (動かしている) OSで使われているものが利用される。
このため, 動かしている OS によってイメージが異なったりする訳だけど, ODINだと そもそも OS/2の GUIコンポーネントですらない。
Java の中での文字列は Unicode。 で, AWTの (例えば)ボタンとか使うとすると, Javaとしては Unicodeでボタン文字列を指定できるのならソレ, そうでなければ一度 OSの内部コードに変換したものを与え, ボタンを描画するって訳 (たぶん)。
InnoTekの Javaで使われているウインドーズの GUIコンポーネントで, そもそも日本語が表示できるのか。
表示できるとしたらソレには Unicodeでアレするのか, Shift_JISだったりするのか。
どちらの文字コードを指定するかってことを InnoTekの Java自体は認識できているのか。
そんないろんなアレがあると思うだよ。そんな訳で, σ(^^) のトコでは AWTの GUIコンポーネントは ?
で文字列が表示されてたりする。
参考: … Java peer
で検索して見つかったトコ。
◇
追記: … ojinさんからの情報によると, AWTでもアルファベットが表示できるよーになるらしいだよ。 ソレは font.properties ファイル のコンポーネントフォントの文字エンコーディングのトコ。 例えばこんな指定をするとよいだよ。
fontcharset.dialog.0=sun.io.CharToByteCp1252 fontcharset.dialog.1=sun.awt.windows.CharToByteWingDings fontcharset.dialog.2=sun.awt.CharToByteSymbol
J2SE 1.4 -- 2004-06-07
Java 2 Platform, Standard Edition (J2SE) 1.4 (の OS/2版) には, Golden Code J2SE 1.4.1 for OS/2 と, InnoTek OS/2 Kit for Java 1.4.2 の二つがある。 そんな訳で, 二つもあれば Javaに関して 問題は全くない … のかとゆーと, そーでもなかったりして。 (つか, J2SE 1.5 Tiger が控えてるのに今ごろ 1.4ってのもアレかもだけど)
てゆーのも, Golden Code のソレは native なので, 速度的にも有利っぽいけど, でも, 動かしてみると 動作が「なんだか微妙」ってトコが散見されるのら。 対して InnoTek のは, Swing (=GUI コンポーネント(=部品) のセット) もソレなりだし, 速度的にもそこそこ, 起動速度だけ見たら Golden Code よりも (なぜか)早かったりするし, 今のトコ InnoTek 有利カモ。 でも nativeじゃないケド。
◇
てなことで, InnoTek の OS/2 Kit for Java (の設定とか) を今回取り上げてみよー。
まずは導入だね。
で, そのためには InnoTek Runtime for OS/2 が必要。 Java に限らず InnoTek Products のブツは, コレが必須のものも多いっぽいだよ。
導入そのものは .exeファイルを実行するだけだから, 特に何の問題もないカモ。
普通だったら導入後に, PATH=
の設定, config.sysファイルの LIBPATH=
… を整えたりする必要があるけど,
「InnoTek Runtime」にはソレが必要なかったりする。
なぜかとゆーと, OS/2 のディレクトリに (勝手に) iwquery.exe がコピーされてたりするから。
そしてそれは, (たぶん registry から)必要な情報を得てるっぽくて, 導入した場所を特定したりできるのら。
◇
Java を導入してみて, んじゃ まず何を行いたいかっつーと, 「開発」って人は少ないカモね。 普通は 導入時に作成されたフォルダーの中身をチェックかな。
で, Java Plug-in
とか Java Web Start
が起動するのなら, Java が動いたつってもよいのカモ。
けれどそれぞれの機能(?)は, さらに設定が必要で, この時点では入り口に立ってるにすぎなかったりする。
しかも日本語フォントの部分は □
になってて読めないし。
でも, OS2.jp に投稿された kujira さんからの情報で, 日本語フォントの問題はほぼ解決だお。
ソレは, 日本語 TTFファイルを Java 環境にコピーするとゆーものにょ。
てことで, まずは (Appletのための) Java Plug-in。
Java 付属の readme.txt
によると, npj2*.dll をブラウザーの plugins ディレクトリにコピーするだけっぽい。
なんだ簡単じゃん … そう思っても Appletは動いてくんない。 about:plugins を見てみても, ちゃんとそこに記されてるはずなのに。
ジツは, コレは Mozilla 1.4 までのもの。 それ以降だともうひとつ DLLが必要だったりするのら。
Warpzilla のトコの 「Mozilla と IBM Web Browser for OS/2 用の Java Plug-In サポート」 の項目が参考になるカモ。
それとも, about:plugins の画面の先頭部分にあるリンク plugindoc.mozdev.org を辿るってのもよいかも。
なんにせよ ipluginw.dll を components ディレクトリ内にコピーしといて compreg.dat を削除 するだけにょ。
んで, 次に Java Web Start。
導入時のフォルダーにあるソレを動かしてみるのもよいけど, できればブラウザーから起動してみたいもの。
Java Web Start Demos とか Java Web Start Demos (日本語) とか, ソレから他にも, SVG の Batik Demo なんかよさそげ。
さて, readme.txt
読んでみると, その設定はごく単純なアレで, ヘルパーアプリケーションを登録するだけらしいのら。
File Extension と MIME type, ソレらに合致するとき, 指定されたプログラム … (JAVA_HOME のトコの) \javaws\javaws.exe を起動するよーセットするだけ。
Firefox だとヘルパーアプリケーションを登録するトコが見つからなかったんだけど, どーしても見つからないなら mimeTypes.rdf ファイルを加工するって手もあるにょ。
◇
InnoTek版 Java 1.4.2 の日本語表示ができた, とか喜んでる訳だけど, ソレは Swingであって, AWTでの日本語表示が まだできなかったりする (そちらは ???
て感じ)。
もしかすると MS明朝だとかそんなフォントを用意すると表示できるのカモだけど, ちょっち保留だお。
OS/2 Warpの導入 -- 2003.9.13, 9.15, 9.18
とーとつだけど, そーゆーのを紹介してみよー。・・・ てゆーか, メモ代わりかもだけど。
さて, OS/2 Warpの導入 ソレ自体は難しくないんだけど, そのあとの fixpak間違えちゃうと, (何か問題が起きたとき) 起動時のAUTOCHECKでファイルをぼろぼろ損失したり, 何気なく作るそのファイル名に たまたま全角文字が含まれていたとき異常停止してしまったり, さんざんな目に合うだよ。 (σ(^^) のことなんだけどね)
・・・ ソレが fixpakを間違えたせいだってゆー 確たる証拠はないんだけど, でもソレを証明するのは大変だし, とりあえず そーゆーことにしておこー。ま, いいよね 別に。あはは。
まずは OSの導入。
その最初の方でディスプレイ・ドライバーとか, いくつかのデバイスドライバーを指定できる訳だよね。
必要なソレが用意されていないばーいもあるかもだけど, ひっそりと用意されていることもあったりする。
Software Choice (CP) だと, そこに Scitech Display Doctor/se
とか, そんな項目があったりするし, Thinkpadのばーい, 「マルチメディア」に Thinkpad Audio
とかゆー項目を選ぶことできたりする。
・・・ って, Thinkpad Audio
は試したことないんだけどね。
次に進むと, インストールする機能を選ぶとこ。
そこでは, めったにその画面を見ない人にとって分かりづらいかも, みたいな項目があったりするだよ。
「Unicode フォント〜」, 「日本語フォント」, 「日本語アウトラインフォント」, 「DBCSユーティリティー」 ・・・ フォントに関係するものがこんなに。
その中で もっとも必要そうな「日本語フォント」が, 実際には もっとも不必要だったりするもんね。 ソレは特殊なアレらしーけど, だったら「〜用の日本語フォント」って項目名がよいと思うんだけどね。
んで, σ(^^) のばーい, いつも選んでいる項目は ・・・
- 「Unicode フォント〜」の中の,
Unicode フォント(U)
と,日本語フォント(J)
- 「日本語アウトラインフォント」の中の,
平成明朝体
,平成角ゴシック体
,TrueType
2種で, 合計 4つ - 「DBCSユーティリティー」は, 気分によって適当に ・・・
さて, それだけたくさんの項目をアレしたにもかかわらず, やっぱり日本語が表示できないってこともあったりする。
tcpcfg2の画面だったり, Webページを手繰っている そのうちのいくつかのページだったり ・・・。
理由は, PSFONTS ディレクトリを覗いてみると一目瞭然。ファイルサイズが 0になっているフォントがあったりするから。
原因は ・・・ なんだろね。あはは。
「システム - プロパティー」の[フォント(F)]の, フォント関連付け
に指定されているフォント名, σ(^^) のとこでは HeiseiMincho-W3-90-TT
なんだけど, そのファイル DFHSM-W3.TTF
が, なんの拍子にか壊れてしまうことがあるだよ。
バックアップしておく必要あるのかも。それとも読み込み専用属性付けてりゃ大丈夫なのかな?
◇
さて, 次は fixpak と DDPak。 (って, ホントは その前の Home からたどるのがよいのかもだけど)
まず NCS Fixpak Repository から Cross Referenceをアレしてみると, (たとえば)CP2のばーい Convenience Package 2 - OS/2 Warp 4 Base Operating System
てことになるよね。
そこには
- P4_FIX
- XR_C003
- XR_D003
- XR_F001
Supersedes:,
Superseded By:の部分は重なっていない訳で, だから, 必要ならすべてアレしなきゃなんないのら。 コレが XR_C002のばーいだと, XR_C001に取って代わるブツで, XR_C003に取って代わられている, なーんて記されている訳だから, C003だけでオッケーなんだけどね。
で, ソレをあてるには, RSUと ZIPと 大きく二つの方法があって, でも RSUはそのツールを最新にしても失敗するっぽいので今回はパス。
ZIP側は, すなわち手動で ってことなんだけど, 慣れてしまえばこっちのが楽かも。 (←慣れるのも どーかと思うゾ)
てことで, 準備だお。
- XR_F001, XR_C003 ・・・ (P4_FIXは XR_F001と一緒に入ってたりする)
- CSF Utility のとこから手に入る, loaddskf.exe と, csj144.exe (てゆーか, 最新のソレ) (service.exeとか)
- Hobbes から, vfdisk あるいは svdisk
Download and unzip files manuallyに書いてある通り, 展開して・環境変数をセットして・SERVICEと入力するだけ。 でも, そこにあるよーに, floppy diskを用意しなきゃなんないので, 仮想 floppy diskをソレに先駆けて用意すると便利にょ。 で, コレは config.sysに DEVICE=[そのドライブ&パス]\VFDisk.sys みたいに追加し, 再起動するだけ。
再起動したら, こんな手順でアレする訳だね。
ちなみに, ここでは F:
は一時的ディスク空間, D:
は, 仮想 floppy diskのドライブだお。
set csfutilpath=f:\csf144 set csfcdromdir=f:\xrjf001 F: cd %CSFUTILPATH% \usr\fix\csj144.exe copy \usr\fix\loaddskf.exe . cd '*.?DK のあるところ' set VDISK=D: for %f in (*.?DK) do %CSFUTILPATH%\loaddskf %f %VDISK% /Y/Q & xcopy /o/t/h/e/r/s %VDISK%\ %CSFCDROMDIR% F: cd %CSFUTILPATH% service
とりあえず(?)再起動して, もいちど今度は xrjc003 ・・・
set csfcdromdir=f:\xrjc003 rem 以下, (↑)の処理と同様 cd '*.?DK のあるところ' set VDISK=D: for %f in (*.?DK) do %CSFUTILPATH%\loaddskf %f %VDISK% /Y/Q & xcopy /o/t/h/e/r/s %VDISK%\ %CSFCDROMDIR% F: cd %CSFUTILPATH% service
ホントは P4_FIXもあるかもだけど, CDROM要求してきたから中止しただよ。よかったのかな, コレで。 (← ぉぃ)
◇
なんだか, 当初予定してたよりずいぶん長くなっちゃったんですけどコレ。 (T-T)
で, 次は DDPak から OS/2 Component Updates。 その中の, こーゆーの(↓)をアレするとよいかも。
- Enhanced IDE Support (IDEDASD)
- OS/2 Loader Support
んで, あとは必要に応じてアレするとよいかも。
- DVD/UDF Support
- OS/2 PCCard (Cardbus) Support
- OS/2 Power Management
- USB Basic Device Support
- ThinkPad Infrared Stack (IrDA) Support for OS/2
導入後は Config.sysをアレしたりするとよいんだけど, ソレについてはいろいろまとまったページがあるだよ。
Webサーバーのためし方 -- 2002.11.25
ホームサーバーができたらすごいとか, そんな風に思ったりしないだろーか?
外からアクセスすると, 留守録の状況だとか見ることできちゃったり, 部屋を暖気しといてくれたり, お風呂沸かしておいたり ・・・
って, そーゆーのはまだ無理かもだけど, PCにつないだ電子機器が動いたりするくらいにはできるかも知れない。 (^^)
ま, 常時接続の普及率もソレなりだし, この際だから Webサーバーを構築してみて, 外部からアクセスすると FDをフォーマットするとか, そんなのを試してみてもよいかも。 (← 意味ないじゃん, ソレ)
んで, Webサーバーつったら まず思い付くのは Apacheだよね。
σ(^^) が作ったブツ 思い付く人は, たぶんいないはず。あははははー。
てなことで, かるーく ApacheのWebサーバーを構築してみよー。 ・・・ てゆっても, ソレはジツに簡単にょ。
Apache をdownloadしてきて展開するだけ。
Readme.os2だか, そんなファイルが見つかると思うんだけっちょ, そこに書いてあることは, copy httpd.conf-dist-os2-preconfigured httpd.conf な感じで confファイルを用意すれ, ってくらい。
あとは, ADSLモデム使っているとかゆーばーいは, 外部からアクセスできるよーに static routingとか, そんなのを変更して内部の LANに到達できるよーにするだけにょ。
◇
さてー, そこまでできたら今度は Rexxでアレコレできるよーにしてみよー。そう, あの Mod_Rexxてヤツだお。
でも, コレもいたって簡単。
Mod_Rexx Project からブツを downloadしてきて, bin\os2\ の mod_rexx.dll を Apacheのとこに移すくらいにょ。
でも, Apache / Apache2のうち, Apache2側にはソレがなぜか入っていない。
てことで, コレを使うばーい Apacheは, (↓)のうち 1.3.xx 側を使うことになるのかも。
- apache_1.3.xx-os2.zip
- httpd-2.0.xx-os2.zip
んで, これを使うために confファイルにちょっと追加, それがアレすれば Javaでゆーところの Servletっぽいことも, そして JSPっぽいこともできるって寸法にょ。
まずは mod_rexx.dllを使えるよーに LoadModuleの行を追加するのら。似たよーな部分に追加するとよいかも。
LoadModule rexx_module libexec/mod_rexx.dll
あとは, Typeの指定とか, RSP を使えるよーにするだとか, そんなことにょ。 ファイル名は適当に変えてちょ。
# Note: These lines form a new methodology for execution of Mod_Rexx scripts. # With these lines, REXX programs can now be placed anywhere in Apache's # document tree. The scripts only need to have one of the file extensions # specified on the AddType application/x-httpd-rexx-script statement. AddType application/x-httpd-rexx-script .rex .rexx AddType application/x-httpd-rexx-rsp .rsp #Add these for REXX Server Page support RexxTempFileNameTemplate "/temp/execrsp????.rex" RexxRspCompiler "/usr/local/mod_rexx/rspcomp/rspcomp.rex"
mod_rexxを展開したとこには, それぞれのサンプルも入っているから, まずはソレをためしてみるとよいかも。
htdocsに ディレクトリごと moveすると簡単だお。
そしてこーゆーのが ブラウザーでページを開こうとするだけで Rexxが走り出す。ちょっと不思議な感覚にひたれるかも知んない。(^^)
それから, σ(^^) が作った RSP compiler も公開してみただよ。