2001.4.10 〜 2001.12.30

[1999.9-2000.9 2000.9-2001.3 2001.4-2001.12 2002.1-2002.6 2002.7-2003.1 2003.2-2003.12 2004.1-2004.12 最新版]

僕のホームページの更新メモですが、自分のページ作成に関して参考にしたサイトなどや興味あってちょっと調べたことなどを紹介しています。


2001.12.30
 晦日です。(といってもこれを書いているのは夜中を回っているので既に大晦日です)
 Swingの標準フォントはボールドになっているので、日本語表示がちょっと汚く見えてしまいます。前からどうにかならないかと思っていたけど対策はなし。この原因や回避策を記述しているWebサイトがあったのでメモ。
http://www.lake.its.hiroshima-cu.ac.jp/~mondo/Java/TnE/005.html
2001.12.24
 Javaで同じクラスでもアクセッサを介してフィールドにアクセスすることはクラス内の結合度を疎にするよい習慣なのですが、オーバーヘッドを指摘する声が必ずといっていいほど聞こえてきます。では、本当にアクセッサは遅くなるのか、ごく簡単な実験をしてみました(こんなちゃちなプログラムでは実証にはならないかも)。
 JDK1.3.1では、HotSpotなしとクライアント用HotSpotの時は、アクセッサがあると倍近い時間がかかっており、確かにオーバーヘッドがあると言えます。しかし、サーバ用HotSpotの条件下では、オーバーヘッドは僅か(10%程度)となっています。
 JDK1.4β3では、HotSpotなしの時はJDK1.3.1同様にアクセッサがあると倍近い時間がかかっています。しかし、クライアント用HotSpotでは、アクセッサありの方が若干ですが速い結果がでています。これは謎だ。。。サーバ用HotSpotはJDK1.3.1とほぼ同値です。
Accessor2.java
※2002.1.12 アクセッサありの結果を、finalあり・なしに分けて記載しました
 2002.5.26 JDK1.4.0における結果に更新しました(10回実行した平均値を記述)。
JDK1.3.1_02におけるアクセッサオーバーヘッド実験結果
実行オプション アクセッサなし アクセッサあり
(final)
アクセッサあり
(not final)
備考
-hotspot 1,743 ms 3,214 ms 10,765 ms クライアント用hotspot
-server 310 ms 351 ms 321 ms サーバ用hotspot
-Xint 26,478 ms 49,000 ms 54,008 ms hotspotなし
JDK1.4.0におけるアクセッサオーバーヘッド実験結果
実行オプション アクセッサなし アクセッサあり
(final)
アクセッサあり
(not final)
備考
-client 1,660 ms 1,740 ms 1,583 ms クライアント用hotspot
-server 315 ms 349 ms 331 ms サーバ用hotspot
-Xint 39,778 ms 83,319 ms 85,192 ms hotspotなし
2001.12.23
 OpenORBのIDLコンパイラで日本語が化けるバグを、OpenORBのbugzillaに登録しました。自分でもソースをちょっと修正してみたところ、化けなくなりました。単にInputStreamをInputStreamReaderに変えて、それによってコンパイルが通らなくなったところを潰していっただけですが。。。
 MeadowでIDLファイルを編集していると、valuetype型で状態値を記述している行のインデントがNG(0桁目になる)。ちょっと試行錯誤したけどうまくいかず、最新のcc-mode(Ver.5.28)を入れて解決しました。Meadowの標準cc-modeが旧いようです。
 CORBAのオペレーション呼び出しにnullを使用したらどうなるかをOpenORBで確認。引数、戻り値がIDL interface型やvaluetype型の場合はnullを渡すことができるようだ。string型にnullが入っていると、org.omg.CORBA.BAD_PARAMが発生した。
 月刊ジャバワールド2002.2号を買いました。CORBAの記事が(めずらしく)掲載されています。JavaPrintAPIの連載もあり、とりあえず買いでした。創刊号から惰性で買いつづけているけど、最近記事がつまらなくなってきているので、そろそろ買わなくなるかも。
 長年探していたドイツパン(風車のような模様がある丸いパン)をとうとうGetしました。明日の朝、ハムとチーズをはさんで食べる予定。それと、デメルでザッハトルテを買って食べました。
2001.12.20
  OpenORBのIDLコンパイラは、日本語で書かれたコメントが文字化けします。ファイル入力にInputStreamを使っているためでしょう。Reader系に変更すればよいようです。ファイル書き出しはWriter系になっているのに。。。
2001.12.16
 Java & CORBAページにコールバックとvaluetypeを追加しました。コールバックは分散環境でオブザーバ・パターンを使う場合などに利用できます。valuetypeは、CORBAでオブジェクトの値渡し(Object By Value)を実現する新しい方法で、CORBA2.3から導入されました。
2001.12.8
 新人向けの教育用メモ。クラスパスの概念が難しいらしいのでやさしく紹介しているWebサイトを検索してみた。
2001.12.5
 いわゆるオブザーバ・パターンをCORBAで実現する方法について検討してみた。POAだとオブザーバパターンを使うのがちょっと面倒かもしれない。updateでthisを渡すときに、POAだとサーバント自身のthisはCORBA参照じゃないなど。別なパターンを使うほうがよいかもしれない。以下、ローカルで実現しているモデルをリモート化する検討。
(1) java.util.Observer/Observableを使用する
問題点:
Observableがクラスであるため、分散インタフェース定義が作れない
Observerはインタフェースだが、update()の引数がObservableなため、
分散化するのに障害となる。
対策:
分散専用のObserverインタフェースを作成する
分散専用のObservableインタフェースを作成する
データ取得用の分散インタフェースを作成する
結論
結局新規に分散用Observer/Observableを作ることと変わらない。

(2) JDK1.1イベント機構を使用する
問題点:
リスナーインタフェースのイベント通知用メソッドの引数がEventObjectの
サブクラスであるため、分散インタフェース定義が作れない。
イベントソースはクラスである
対策:
EventObjectのサブクラス相当をIDL構造体として定義する、または、
EventObjectのサブクラスを分散インタフェースで定義し、コールバックとして
アクセスさせる、または、
value型を使用する
イベントソースへのリスナー登録用分散インタフェースを作成する
結論
割と筋がよさそう

(3) 独自に分散オブザーバを作成する
問題点:
新規に作成するので、手間がかかる
updateメソッドの引数に汎用的な型を指定するのが困難。
対策:
うーん、、、Any型を使う?
結論
2001.12.2
 広島旅行から戻ったところ。行きは寝台特急で、なんとも新鮮な感じ。シーツ、枕、掛け布団、浴衣、ハンガーが置かれていました。想像よりは広めでした。ちょうど着替えている時に駅を通過しましたが、窓のカーテンを開けていたのでちょっと恥ずかしかった。宮島、広島市内、江田島と観光してきました。帰りはのぞみで戻り。
 仕事上で新人向けにソフトウェア開発実習を行って3週間ほど経過した。文法レベルのプログラミング教育しか受けていない新人に、いきなりオブジェクト指向で設計をやらせてみているが、それなりに進んでいる。UMLも書き方をごく簡単に説明しただけだが、よく使ってやっている。「OOはよく分からない」なんてこぼしながらも・・・。UMLツールにIIOSSを入れてますが、主役はホワイトボードや模造紙、ポストイット、議論がまとまるとツールを使って清書していました。今週後半からプログラミングに入る予定なので、 これからが本番ではある。
 UML Pressが出た。なかなかボリュームがあった。個々のUMLの具体的な書き方は少なかったのが残念。次号は出るのかな。。。
 先週(11/28)行われたJava Night。会場のキャパを越える大人数でした。ちょっとお手伝いで参加しましたが、前半はほとんど外(受け付け付近)にいました。なおIIOSSが4位でした。よかったですね。
2001.11.25
 UMLツールPatternWeaverがテクノロジックアート社から公開されました。サポートなしのフリー版があると書かれていますが、使用期限が定められている(2002/3/31)ので、これをフリーと呼ぶのはいかがなものでしょう。素直に試用版なり評価版と呼べばいいのに。。。
 ※2002.1.13追記)この会社のWebサイトには連絡先のE-mailアドレスが載っていないんですね。とほほ。
 Together/Jを開発しているTogetherSoft社の日本法人ができました。こちらは非常に高価なツールです。
 デザインパターン考:ポストMVCについて。MVCパターンは対話型アプリケーションの基本構造だが、古典でもある。なぜなら、最近のアプリケーションはGUIツールキットの利用、分散環境、機能の複雑化が進み、MVCの適用が困難になってきている。そこで、世の中ポストMVCともいうべきパターンがいくつか登場してきている。PAC(Presentation/Abstraction/Control)、MVP(Model/View/Presenter)、、、PACについては、SmartDocの中で使われていたりする。
参考文献
2001.11.24
 今日は読書会でした。「Java言語で学ぶデザインパターン入門」の第一回目でした。人数も多く盛況でした。
 Emacs JDEE環境設定メモ。Semantic1.4β12を入れると、Meadow起動時に
Error in init file: error: "Invalid face property. underline"
というエラーが出ます。とりあえずSemantic1.4β11にとどまっていた方がよいです。
2001.11.17
 新人実習の講師なので、1週間朝8時に出社。ここ何年もやったことのないことです。JUnitを使ったテストファーストの演習を1日入れたのですが、課題プログラムが複雑だったようで、ちょっと失敗気味。
 SunのフリーなOfficeツールStarSuite(通称StarOffice)6.0 Beta版をWindows2000(PentiumIII 500MHz)上で動かしてみました。Java(JDK1.3.1)で動くのですが、ストレスなく動きます。Microsoft Office 97で作成したデータを読ませると、見出しや箇条書き等で多少変な表示になりますが、おおむね良好。
2001.11.10
 Java & CORBAページの記述続行。いろいろ試行錯誤してようやくNamingContextとNamingContextExtの違い、NameComponentのidとtypeの違いについて分かった気がする。CORBAは七面倒だけど、きちんと設計されていて位置透過性やスケーラビリティが徹底していると思います。RMIやHORBは簡単で分かりやすいけれど、その分位置透過性やスケーラビリティが犠牲になっている、どちらが良い悪いではなく、目的・用途に合わせて適材適所でいいのでしょう。
 月曜日から2ヶ月間、新人対象にソフトウェア開発実習の講師をします。新人のうちに基本マナーを身に付けてもらうのですが、その題材探しがけっこう大変でした。XP(eXtreme Programming)や「達人プログラマー」には実践すべき事項がいろいろ載っており、随分参考になりました。さて、うまくいきますやら。。。
2001.11.5
 JDK1.4の新I/Oの解説記事「Merlinの新しい入出力クラスをマスターしよう」が日本サンのSDC Developer News 2001.11月号に記載されています。U.S.のJavaWorld online 2001.9の記事"Master Merlin's new I/O classes"の日本語訳です。ロック入出力、文字変換、メモリーマップファイル、およびバッファ管理について紹介しています。
2001.11.4
 Java & CORBAページをバリバリ書き進めました。
 映画「ピストルオペラ」を見たけど、うーむ、、、難しい。
 書籍「eXtreme Programming テスト技法 xUnitではじめる実践XPプログラミング」を購入。パラパラっと目を通しました。最初のXPの説明は不要かな。その後各種ツールの使い方紹介って感じの内容が続きます。テスト技法と呼べるような実践的なテストのノウハウはない(期待した方が間違いだったかも)。xUnitのツールをこれから使うという人が読むのに向いたマニュアル本という位置付けなのかもしれません。
 JDK1.4β3登場。Windows版のインストーラがちょっと変わり、JRE(Java Runtime Environment)をインストールするかしないか選択できるようになりました。開発マシンではJREは邪魔なことが多いのと、インストール先がシステムドライブ固定だったので、これはありがたい追加です。
2001.11.3
 Java & CORBAページを246ネットへ移行。
 JDK1.4のβ3が登場しました。Windows版のインストーラではJava Runtime Environmentをインストールするか否かオプションが選択できるようになりました。
 昨晩、IIOSSのデモを見に行きました。なかなかよいです。UMLエディタ部分は、フリーのArgo/UMLを改造しているそうです。モデル実行機能やJavaのGUIエディタなどもついており、おもしろい使い方ができそうです。これからぼちぼち試してみよう。
2001.10.28
 これからCORBAプログラミングに取り組むならば、POA、インターオペラブル・ネーミング・サービス(INS)を押さえるとよいかな、ということで、大分昔に書いたままとなっていたJava&CORBAのページを更新し始めました。POA、INSといった機能はJDK1.4になると標準搭載されます。JDK1.3系で使うには、サードパーティ製のCORBA実装(ライブラリ)を使います。今回は、フリーのCORBA実装の1つOpenORB 1.2.0を使っています。他のフリーな実装系では、JacORB 1.3.30、商用利用でなければフリーなORBacus 4.1があります。有償の製品で評価版を提供しているものでは、VisiBroker 4.5(60日間トライアル)、Orbix2000(30日間トライアル)があります。
 新たたなロギングAPIの登場。ApacheのAvalonプロジェクトLogKitです。Apacheからはlog4jとLogKit、そしてJDK1.4のロギングAPIとバリエーションが豊富になってきたようです。log4jとLogKitはけっこう似たAPIですが、ポリシーが違うようです。LogKitは、Avalonというアプリケーションフレームワークとコンポーネントの集大成プロジェクトにおけるロギング機能を担うAPIとして開発されています。そのため、Avalonが対象とするエンタープライズアプリケーション(どっちかというとサーバサイドかな)に適する設計になっているようです。一方log4jは、特にサーバサイドに限定しておらず、汎用の設計となっています。
2001.10.27
 Java読書会の日でした。丸1年間かけた「Javaスレッドプログラミング」が完了しました。スレッドにおける様々な問題について認識させられ、また様々なテクニックに触れることができました。とても良い書籍ですが、読みにくい。一人で読んでいたら確実に挫折していたので、まさに読書会向けの本です。
 ペアプログラミングの導入に関して参考になりそうなもの
2001.10.23
 JDK1.4の新機能を解説しているWebページをみつけました。"New Features of Java2 SDK, Standard Edition, v1.4"では、JDK1.4で新たに加わった機能の解説があります。Graphics編、Swing編、言語仕様編、小粋なAPIたち編、New I/O編。見やすくまとまっているサイトなので、見習いたいなと思いました。
Graphics編では、ハードウェアアクセラレーションを生かすImage関係、
フルスクリーン、ホイールマウスなどが紹介されています。
Swing編は、JSpinnerとスクロール可能なタブです。
言語仕様編は、あのassertです。
小粋なAPIたち編は、Preference APIとLogging APIです。
New I/O編は、導入、BufferとChanelです。
2001.10.21
 ManeuverRecordEssential Java Styleコーナーに3章stateまで追加しました。最大の山が次の4章Collectionです。
 同じくManeuverRecordのツール/ライブラリ・リンクに、LGPLのシリアル/パラレルポートライブラリRXTX(ずばりな名前でいいです)を追加。(情報源は安藤さんのJavaFAQ What's Newより)。
 Cマガジン2001年11月号に、JDK1.4で追加されたVolatileImageクラスの解説記事が載っています。VolatileImageを使うと、Imageのメモリ領域がメインメモリではなくビデオメモリ上に確保されるのでハードウェアアクセラレーションを利用できるのだそうです。でも我が家のマシン(Windows2000とVoodo Banshee)では、VolatileImageを生成してもメインメモリにしか取れませんでした。やはりグラフィックスボードの替え時かも。
2001.10.20
 中世ヨーロッパ騎士物の映画「Rock You」が公開されています。まだ見に行ってないけど、はずしていそうな感じがしないでもない。それよりも、指輪物語(The Lord of the Rings)
が映画化される方に期待が大きい。こちらは3部作で、まず1作目「旅の仲間(The fellowship of the Ring)」が来春日本で公開されます。予告編のムービー(QuickTime5)やスクリーンセーバーもなかなか。
2001.10.15
アドホックなXPオフ会。Kent Beck氏も訪れ、びっくり。Kent氏のXP本を持っていなかったので、やむを得ずessential Java Styleにサインしてもらった。ま、いっか。Booch氏、Royce氏とサインコレクションが増えた。
2001.10.13
 AspectJ 1.0正式版のリリースが今月予定で、今日現在1.0リリース候補2が公開されています。2001.3.22の雑記帳にAspectJのリンクをいくつか紹介しましたが、その後見つけたよさげなリンクを追加します。 昨晩は、Javaごはんの日(ドイツ編)でした。Eisbeinのボリュームは凄いものでした(^ ^;;;
2001.10.11
 Java用リファクタリングツールJRefactoryというオープンソース(フリー)があります。
特徴: 他にもいろいろあるようですが、興味深い。JBuilder、NetBeans他IDEに組み込めるようです。
 ゲーム創作のための技術資料、フリーサウンドなどを公開しているCreation Collegeというページを見つけました。シミュレーションゲームやファンタジーRPGなどに詳しい。ここを見ていると、自分でゲームを作りたくなってきました。
2001.10.9
 このページを、niftyから246ネットへ移行。
 JDEE(Java Development Environment for Emacs)のVer.2.2.9beta3が公開されました。Meadowで開発のページのimport文の自動生成に、自動ソート機能設定を追加しました。
 ManeuverRecordSwingコーナーにルック&フィールの入れ替えを追加しました。
 同じくManeuverRecordのEssential Java Styleコーナーに2章まで追加しました。パターンは6章まであるので、完成まではまだまだしばらくかかりそうです。それにしてもこの本"essential Java Style"はよく書けています。翻訳本が出ないのが不思議です。
 Robocodeという、自分で動作をプログラムした戦車同士を戦わせるプログラムがあります。IBMのAlphaworksで公開されています。プログラムはJavaで記述します。JDK1.3以上で動作します。setup.jarをダウンロードし、java -jar setup.jarで解凍される。Windowsだと、robocode.batを実行する。BattleメニューのOpenで、sample.battleを選択すれば、サンプルの戦闘を実行できます。Robot battleといったジャンルのJava版ですが、おもしろいです。
2001.10.8
 ここ1年ほど、「Javaはサーバーサイド」、「クライアントのJavaは死んだ」なんて論調が増えているけど、Javaこそクライアントサイドに向いていると思うんだけどなぁ。。。
 ということでJavaWebStartをかじろうかと思っているところです。
2001.10.1
 Java/SwingのLook and Feelをかじる。 起動時に、デフォルトのLookAndFeelを指定するには、swing.propertiesファイルを作成し、そこに記述する。ファイルは、Java Runtime Environmentディレクトリ下のlibディレクトリに置く(フォント関係のプロパティファイルがある場所)。例えばJDK1.4をC:\jdk1.4にインストールした場合、C:\jdk1.4\jre\libの下に置く。
参考:http://java.sun.com/docs/books/tutorial/uiswing/misc/plaf.html
# Swing properties
swing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel
補助的(Auxiliary)LookAndFeelの導入
標準のLookAndFeelに置き換わるLookAndFeelを開発するのは大変だが、補助的LookAndFeelを作れば部分的に標準のLookAndFeelを変えることができる(らしい)。 JDK1.4でWindowsLookAndFeelで日本語フォントが豆腐になる件(9.19の続き)
WindowsLookAndFeelクラスはメニューフォントをtoolkit.getDesktopProperty("win.menu.font")として取得している。toolkitは次のFontオブジェクトを返却している。
java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11]
これでTahomaフォントになる理由はわかった。Windows2000上で画面のプロパティ→デザインでメニューのフォントを見るとTahomaになっている。うんうん。次になぜTahomaフォントでは日本語がNGなのだろうか。
 Tahomaフォントは欧文フォントしか持っていないが、Windows2000でTahomaフォントを使用する場合は漢字コードの場合MS UI Gothicあたりにリンク(?)される仕組みがあるらしい。Javaからはこのリンクが参照されないみたいだ。回避策として、画面のプロパティ→デザインで、メニューのフォントをTahoma(サイズ8)からMS UI Gothic(サイズ9)に変更すると、上記のtoolkitが返却するFontオブジェクトは
java.awt.Font[family=MS UI Gothic,name=MS UI Gothic,style=plain,size=12]
となる。こうすると、WindowsLookAndFeelでのメニューフォントに日本語表示が可能になる。
2001.9.30
 UMLで表記したものがどのようにプログラミング言語になるか?最初はここに悩むのではないかなぁ。また逆にソースコードがどのようにUMLで表記されるか?も気になるかもしれない。UMLの説明はたくさんあるけど、UMLとコードとのマッチングについてはそう多く解説されていないかも。
□コードからUMLへ □UMLからコードへ
2001.9.27
 事前条件、事後条件について検索。原典(Meyer著「オブジェクト指向入門」 )を当たるのが一番かもしれないけど。
2001.9.25
 遅い夏休みも今日でおしまい。夏に忙しかったことは久々なのでした(いつもは年度末の冬場が忙しい)。ちょっと怠惰な生活だったかもしれません。気温がぐっと下がったせいか、風邪気味です。うーん、、、
 最近西洋史ものから遠ざかってましたが、こんな本がでていたので買ってきました。オプスレイ・メンアットアームズ・シリーズの中から中世騎士関係のものです。(下記はアマゾンへのリンクです。)
2001.922
 Maneuver Recordページに"essential Java Sytel"のページを作成しました。いま9個目まで作成。同じくSwingのページもLook&Feelの内容を追加しています。
2001.9.19
 インナークラスから外側のクラスOuterの"this"を参照するには、Outer.thisとする。一度覚えたけど忘れてしまってはまってしまった。
 JDK1.4β2、LAF(Look&Feel)をWindowsに変更したら、日本語フォントが豆腐(□)になってしまった。フォントを自力でセットすれば表示される。LAFがWindowsだとTahomaフォントが設定されているけど、これは日本語が通らないらしい。
 MySQLが3.23.42にマイナーバージョンアップしていたのでダウンロード。12MBあるのだが、1分20秒で完了してしまった。実効150KB/秒なので、ADSLのほぼMax値、あまりの珍しい出来事でちょっと驚きました。いつもはISDNよりは速いな程度の体感速度だったのです。
 久々にJavaでGUIプログラミング。昨日から遅い夏休みに入ったので、いろいろ手を出しているところです。APIを調べるのに一番はやはり実際にプログラムを動かすことですが、いちいちコーディングしてコンパイルして実行、というのはいくらIDEが便利でも手間です。そんなときはスクリプトからJavaのクラスをいじるのが便利です。Javaのクラスをいじるスクリプトは何種類かありますが(Pnuts, JPython,等)、JDEEに組み込まれているBeanShellを使ってしまいます。
 Look & Feelの仕組み。javax.swing.UIManagerというのが管理しています。標準では、Metal/CDE Motif/Windowsの3種類のLook & Feelが用意されています。BeanShellで下記のように調べました。
BeanShell 1.1a16 - by Pat Niemeyer (pat@pat.net)
bsh % lafs = UIManager.getInstalledLookAndFeels();
bsh % print(lafs);
Array: [Ljavax.swing.UIManager$LookAndFeelInfo;@329f3d {
   javax.swing.UIManager$LookAndFeelInfo[Metal javax.swing.plaf.metal.MetalLookAndFeel]
   javax.swing.UIManager$LookAndFeelInfo[CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel]
   javax.swing.UIManager$LookAndFeelInfo[Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel]
}
bsh %
でもってデフォルトのLook & Feelは何かを調べるには、
bsh % print(UIManager.getLookAndFeel());
[The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]
bsh % print(UIManager.get("ButtonUI"));
javax.swing.plaf.metal.MetalButtonUI
bsh %
とすればよいのです。上記ではさらにJButtonの見栄え(UserInterface)を提供するクラスも調べています。簡単ですね。UIManagerはこのように見栄えを管理しています。ここで、Look & FeelをWindowsにしてみましょう。
bsh % UIManager.setLookAndFeel(lafs[2].getClassName());
bsh % print(UIManager.getLookAndFeel());
[The Microsoft Windows Look and Feel - com.sun.java.swing.plaf.windows.WindowsLookAndFeel]
bsh % print(UIManager.get("ButtonUI"));
com.sun.java.swing.plaf.windows.WindowsButtonUI
bsh % 
このようにUIManagerにWindows Look & Feelを設定することで、JButtonの見栄えがMetalButtonUIクラスからWindowsButtonUIクラスに変更されたことが分かります。UIManagerは内部でUIDefaultsと呼ぶ対照表を持っており、ここにLook & Feelに応じたデータを管理しています。
bsh % print(UIManager.get("Button.font"));
を実行すると、Metal Look & Feelのときは
javax.swing.plaf.FontUIResource[family=dialog,name=Dialog,style=bold,size=12]
と表示され、Windows Look & Feelのときは
javax.swing.plaf.FontUIResource[family=Tahoma,name=Tahoma,style=plain,size=11]
と表示されます。 
2001.9.18
"essential Java Style"から、Intention-Revealing Method Name":
メソッドの命名はクラス設計の最重要事項。小さなメソッドに分割されていれば、単一のタスクしか実行しないので、正確に名づけられる。
メソッドの分類: 略語は避ける(ビジネスドメインで常識となっているものは可)。"type once, read hundreds"
if (employee.getTerminationDate() != null)
これはemployeeが解雇されたのか否かが不明瞭なメソッド名。そこで、分かりやすいメソッドを追加する。
public boolean is Terminated() {
    return getTerminationDate() != null;
}
他の例:clear()よりもremoveAll()を使うほうが分かりやすい。
2001.9.17
"essential Java Style"から、Method Comment":
コメントの問題点:コメントとコードとの正確性を保つ術がない。不正確なコメントよりコメントがないほうがまし。javadocはクラスの利用者へ理解の助けとなる情報を提示するが、保守に十分な情報ではない。不明瞭なコードにコメントする位なら、コードをきれいに書き直す。
コメントすべき項目:
2001.9.16
"essential Java Style"から、Debug Printing Method":
toString()メソッドをオーバーライドする。 ただしtoStringメソッドは開発用途で使い、ユーザインタフェースには使用しない。プロジェクトでtoString()の規約を決めるとよい(例:クラス名[各フィールドの値] 等)。
2001.9.15
"essential Java Style"から、Parameter Object":
Composed Methodを適用して、各メソッドに多くの変数を渡さなくてはならなくなった場合、その変数を保持するインナークラスを定義する。分割された各メソッドでは、Cの構造体のようにそのインナークラスのフィールドを直接アクセスする。
Composed Method適用後 パラメータ収容クラス Parameter Object適用後
void longComplex() {
    :
  mA(a, b, c, d, e);
    :
  mB(a, b, c, d, e);
    :
  mC(a, b, c, d, e);
    :
}
class Para {
  T a;
  T b;
  T c;
  T d;
  T e;
}
void longComplex() {
  Para p = new Para();
    :
  mA(p);
  mB(p);
  mC(p);
    :
}
2001.9.14
"essential Java Style"から、Method Object":
長い複雑なメソッドを整理する。インナークラスを定義し、元の長いメソッドのローカル変数をそのインナークラスのインスタンス変数として定義する。ただし、多くの場合はParameter Methodパターンで解決できる。これは振る舞いをカプセル化したいときに利用する。Composed Methodパターンで分解した結果、多くの一時変数を各メソッドに渡さなくてはならなくなったときなど。
適用前 Composed Method適用 Method Object適用
void longComplex() {
  // do A
  :
  // do B
  :
  // do C
  :
}
void longComplex() {
  simpleA();
  simpleB();
  simpleC();
}

void simpleA() {
  :
}
void simpleB() {
  :
}
void simpleC() {
  :
}
void longComplex() {
  Calculator cal =
    new Calculator(..);
  cal.compute();
}

class Calculator {
  :
  void compute() {
    a();
    b();
    c();
  }
  :
}
2001.9.13
"essential Java Style"から、Reversing Method":
メッセージの受け取り手と引数を逆にする。例えば、bulletArt1.drawOn(canvas); ---> canvas.draw(bulletArt1);
ソースコードの並びをきれいにするときに使用する。
Canvasクラスにメソッドを追加
public void draw(Art art) {
    art.drawOn(this);
}
適用前 適用後
canvas.moveTo(3, 4);
canvas.drawLineTo(7, 11);
bulletArt1.drawOn(canvas);
canvas.drawLineTo(12, 13);
bulletArt2.drawOn(canvas);
canvas.moveTo(3, 4);
canvas.drawLineTo(7, 11);
canvas.draw(bulletArt1);
canvas.drawLineTo(12, 13);
canvas.draw(bulletArt2);
ソースコードを分かりやすくするための技です。たいした事はないようですが、ソースコードの読みやすさはプログラムの品質を高めます。
2001.9.12
"essential Java Style"から、Query Method":
例えば、プロパティ名の前にbe動詞、haveなどを付け、boolean型を返す。
isOpen(), hasDependents(), wasDeleted()
これはJavaでは結構登場していますね。
"essential Java Style"から、Converter Constructor Method":
クラスAからクラスBへ変換。クラスBのコンストラクタにクラスAを引数に取るものを追加する。

"essential Java Style"から、Comparing Method":
Componentインタフェースを実装する。compareToメソッド。
Java2から導入されたコレクションAPIで使われています。
2001.9.11
"essential Java Style"から、Converter Method":
クラスAからクラスBに変換するとき、
class A {
    :
    public asB() {
        return new B(...);
    }
}
このパターンは極力使わず、Converter Constructor Methodを使う。どうしてもクラスBに変換メソッドを追加できない場合に限って使う。
2001.9.10
"essential Java Style"から、Shortcut Constructor Method":
引数を初期値とするオブジェクトを生成するメソッド
new Sentence(existingSentence, word);
としていた場合
public Sentence cat(Word word) {
    return new Sentence(this, word);
}
というメソッドを提供する。すると、呼び出し側は
existingSentence.cat(word);
と記述すればよい。本パターンは、操作が繰返し頻繁に表れる場合にのみ使う。
2001.9.9
今日も実装パターンの本「essential Java Style"からです。
"essential Java Style"から、Default Parameter Values":
オーバーロードを使い、少ない引数のメソッドから多い引数のメソッドへ委譲する。これはC++のデフォルト引数の代替。
int setCursorTo() {
    return setCursorTo(1, 1);
}
int setCursorTo(int x) {
    return setCursorTo(x, 1);
}
int setCursorTo(int x, int y) {
    //メソッドの処理の実体
}
ポイント:
- 必須引数とオプション引数を決める
- 全ての引数を持つメソッドを最初に書く
- 必須引数を左側、オプション変数を右側に書く
- 次に1つの引数の少ないメソッドを書く
- javadocで見やすいように、少ないメソッドがソースコードの上にくるように書く
2001.9.8
"essential Java Style"から、Constructor Parameter Method":
コンストラクタの引数をインスタンス変数にセットする。アクセッサメソッド(Indirect Variable Access)を使ってもよいが、オブジェクト生成時とその後では異なる処理をする場合があるので、直接代入をする。
複数のコンストラクタや複雑な設定処理がある場合、privateなコンストラクタ・パラメータ・メソッドを使う。
public Manager(String name, String ssn, int contractedRate) {
    set(name, ssn, contractedRate);
}
// コンストラクタ・パラメータ・メソッド
private void set(String _name, String _ssn, String _contractedRate) {
    name = _name;
    ssn = _ssn;
    contractedRate = _contractedRate;
    baseSalary = contractedRate * 2000;
}
デフォルト値を扱うコンストラクタが必要なら、Default Parameter Valuesを使う。 
2001.9.7
 JavaReport誌の今月号に、AspectJのレビュー記事があります。
 先日ノートPC用の増設メモリを買いにいきました。標準64MBでちょっと不足気味なので、もう64MB足そうと思って値段を調べると、64MBも128MBもほとんど値段が変わりません(差は1000円位)。そこで128MBを買いました。5千円でおつりです。
 "essential Java Style"から、Constructor Method":
 コンストラクタは有効なインスタンスを生成し、無効なインスタンスを作らない。具体的には、必要な属性値はコンストラクタで渡すようにする。クラスの利用者に、有効なインスタンスをどう作ればよいか示すことになる。
Manager manager = new Manager();
manager.setName("Blow Joseph");
manager.setSSN("999-99-9999");
manager.setContractedRate(40);
というコードにContractor Methodを適用すると
public Manager(String name, String ssn, String contractedRate) {
    :
}
になる。
2001.9.6
 Antのインストールページをやっと1.2から1.3に対応させた翌日に1.4がリリースされてしまった。
 Java Coding Standardのページに、Writing Robust Java CodeのAmbler氏がIBM developerWorksに寄稿している記事へのリンクを追加しました。このWriting Robust Java Codeはよい品質のコードを書くための指針に富んだ極めてよいルール集です。特にアクセッサ関数の使い方には学ぶ点が多かったです。この日本語版翻訳の改訂作業も残していた推奨文献の章を加えてひとまず完了しました。
 Writing Robust Java Codeの推奨文献にも挙がっている"essential Java Style: Patterns for Implementation"(by Jeff Rangr, Prentice Hall)を精読しています。朝会社に行く途中で喫茶店に寄って1時間前後メモをとりながら読んでいます。英語なのでなかなか進みませんが、非常に多く学んでいます。買ったのは2年近く前ですが、積読になってしまっていたのが残念。
最初のパターン"Composed Method"に出てくる開発の3段階:
  1. Making It Run
    公開メソッドの抽出と命名、インスタンスが保持する属性を定義、公開メソッドの記述
  2. Making It Right
    クラスを読みやすく保守しやすくする。Composed Methodがここに適用される。
  3. Making It Fast
    ツールで性能を計測。想像は誤りの元。小さなメソッドに分割されていれば、すぐにボトルネックが分かる。
最初はまずうごくコードを作るけど、それは大抵長いし分かりやすくはない。1つのメソッドでは1つのタスクだけを実行するように複数のメソッドへ分割していくのがこのパターン。見てすぐわかるようなメソッドになるまで分割するので、1つのメソッドの大きさは大抵5−10行になる。メソッド名は、タスクを正確に表現するように付けることで、コメントを付けなくても読みやすいコードになる。
 小さなメソッドで構成すると、読み易く、置き換えやすく、拡張しやすく、テストしやすくなるためです。
public void createCustomerCSV() {
    テンポラリファイル名の決定
    出力ファイルのオープン
   データの作成、書き出し
    ファイルクローズ
}
をComposed Methodを適用して
public void createCSV(ファイル名) {
    ファイルオープン
    writeCustomer(データ);
    ファイルクローズ
}
public String getTempFilename(ファイル名プリフィックス) {
    テンポラリファイル名決定
}
public void writeCustomer(fs, データ) {
    fsへデータ書き出し
}
2001.8.29
 JDK1.4β2がリリース。β1に比べてJava2D系パフォーマンスが向上、ロギングAPIがかなり変更、など。
 JDK1.3.1とのJava2D性能比を、demoのJava2Demoを実行してFPSで比べてみる。
項目 JDK1.3.1 JDK1.4β2 JDK1.4β3
Arcs 21.3 23.7 23.7
Bezier Anim 18.2 - - 表示が欠け読取不可
Ellipses 21.2 23.3 23.6
Clip Anim 18.4 25.2 24.0
Intersection 22.8 23.9 22.7
Rotate3D 15.2 18.7 18.6
Fade Anim 13.1 20.8 20.7
Duke Anim 170[ms] 157[ms] 160[ms]
Warp Image 23.3 28.2 28.2
Line Anim 19.7 22.0 21.3
Balls 22.4 24.4 24.0
Bezier Scroller 22.4 23.6 23.1
Grad Anim 22.5 25.1 25.2
Texture Anim 22.4 26.0 25.4
Select Text 14.1 20.7 22.8
Transform Anim 13.9 - - 表示が欠け読取不可
Total 258.8 305.6 非測定項目、単位ms項目を除く

実行時のメモリモニタ。JDK1.4β2ではTransform Animationの時だけ激しくGCがかかっている。β1のときはほとんどすべてが激しいGC状態だったので、随分改善されていることが分かる。今後に期待。

JDK1.3.1 JDK1.4β2
2001.8.24
 C用ユニットテストフレームワークcheckのためのAutoconf/Automakeメモ
 まず、最低限のconfigure.inを作る。
AC_INIT(check_main.c)
AM_INIT_AUTOMAKE(check_money, 1.0)
AC_CHECK_LIB(check, suite_create)
AC_OUTPUT(Makefile)
次に、aclocal、autoconfを実行する。
$ aclocal
$ autoconf
Makefile生成の雛型となるMakefile.amを作る。
TESTS=check_money
noinst_PROGRAM=check_money
check_money_SOURCE = money.h money.c check_money.c
そして、automakeを実行するのだが、いくつかの標準ドキュメントファイルが存在しないとエラーになるため、まずは空ファイルを用意してからautomakeを実行する。automakeに指定したオプションは、インストール用シェルスクリプト等がなければ自動生成させるためのものだ。
$ touch NEWS README AUTHORS ChangeLog
$ automake --add-missing
これで、シェルスクリプトconfigureが生成された。あとはこのconfigureを実行すればMakefileが出来上がり。
 Cygwinでcheckを構築するには、cygipcが必要になる。cygipcライブラリをインストールした後にcheckのconfigure.inにcygipcをリンクするように下記1行を追記する。
AC_CHECK_LIB(cygipc, msgctl)
これで、aclocal、autoconf、automakeと3発実効すると、Cygwin用のconfigureスクリプトが生成される。後は普通のオープンソースを構築する要領でconfigure/makeすればlibcygipc.aをリンクするlibcheck.aが出来る。
2001.8.21
 Cygwin/XFree86について、@ITサイトでインストール方法が紹介されています。「真ゼロ円でできるXサーバ[インストール編] 日本語キーボード(多分JIS配列のことだらう)対応等の環境設定は8月下旬に公開予定とのこと(もうすぐだ)。
 2001.8.1に紹介したC言語用(C++ではなく)のユニットテストフレームワークcheckを使ってみました。2001.5.17に紹介したcUnitとの違いは、 といったところです。簡単で使いやすいというのが今の時点での感想です。GLibを使ってないのでSolarisへ簡単にインストールできました。上記サイトからはソース以外にrpmとdebパッケージが公開されています。プロセス間通信にメッセージキューを使っているので、Cygwinで動かすにはIPCが必要です。Cygwinでmakeしたら、sys/ipc.hがないと言って怒られました。CygUtilsサイトからcygipcを入手すると実行できるかもしれません。ただし、リンク時に-lcygipcを追加しないといけないので、、、。ごく簡単なテストを書くと、下記のようなコードになります。
#include <check.h>
#include <stdlib.h>
#include "product.h"

/* テストコードは、マクロSTART_TESTとEND_TESTの間に書く */
START_TEST(test_name)
{
  int answer = product_func(10);
  fail_unless(answer == 55, "not correct"); /* 結果が55でなければテスト失敗 */
}
END_TEST

/* テストスイートを作成する関数を定義するのが常套手段
 * テストスイートには複数のテストケースを登録できる。
 * テストケースには複数のテストコード(START_TEST〜END_TEST)を登録できる。
 */
Suite* make_suite()
{
  Suite* s = suite_create("SuiteName"); 
  TCase* tc = tcase_create("TestCaseName"); 
  suite_add_tcase(s, tc);
  tcase_add_test(tc, test_name);
  return s;
}

/* テストランナーを作成し、実行する。テスト結果は失敗した数を取り出せるので
 * これを判定する。
int main()
{
  int num_fail;
  Suite* suite = make_suite();
  SRunner sr = srunner_create(s);
  srunner_run_all(sr, CRNORMAL);
  num_fail = srunner_ntests_failed(sr);
  srunner_free(sr);
  suite_free(suite);
  return (num_fail == 0)? EXIT_SUCCESS : EXIT_FAILURE;
}

 checkのチュートリアルでは、autoconf/automakeを使って、make checkでテストが実行できるような例が解説されています。いままで猿のように./configureしてmakeしてmake installしていただけだったのですが、この機会にautoconf/automakeを覚えようと書籍「GNU Autoconf/Automake/Libtool」(オーム社、ISBN4-274-06411-5)を買いました。
2001.8.5
 WindowsにUNIX環境を構築するCygwinプロジェクトの上でX Window Systemを動かすCygwin/XFree86プロジェクトがあります。
2001.8.2
 以前訳したAmbySoftのWriting Robust Java Codeの最新版の翻訳がやっと一通り終わった。この翻訳ページが最近あちこちで紹介されているようなので、URLを短くなるように位置を変えた。とりあえずこちらのページから。それにしても翻訳は難しいです。日本語にちゃんとなってないところが多いですがご容赦を。。。
2001.8.1
 CRTの調子が悪いなぁと思っていたら、画面が縦に裂けるような表示になってから表示が消え、以降電源が入らなくなってしまった。5年以上使っているし、引越し2回を経験しているからにしても、もうちょっと長持ちして欲しかったかなぁ。とにかくCRTがないとどうしようもないので急遽買い物へ(夏季連休初日に壊れたので、すぐに動けました)。17インチCRTは3万円前後と随分安くなっています。液晶も考えたけど、5,6万とちょっと高いので承認がおりませんでした(^^; で、無事接続完了。前のCRTより高い周波数に対応しているので、画面解像度を1段階アップ(1024x768->1152x864)、ちょっとだけ広いデスクトップになりました。
 モデムがつながらなくなってしまった。ノートPCではOKなので電話線の問題ではない。最近ADSLなので、あまりモデムを使わなくなったけど、メールのチェックで2,3日に1回はアクセスしているので不便。ADSLが入ったのでモデムがぐれたか。。。
 C言語用ユニットテスト・フレームワークcheckがリリースされています。C言語だと、ちょっとポインタや配列の添え字を誤って落ちてしまう(Segmentation Fault等)ので、テスト側とテスト対象関数を別プロセスで実行する仕組みとなっているそうです。なるほど〜ぉ。
 今やっている仕事とそっくり同じ内容の求人が出ているページを見つけた。どこの会社かは書いてないけど、うーん、航空管制用のレーダ画面表示なんてそうないからなぁ。。。(それにしても時給1500円〜ってのは、、、いいのだろうか)
2001.7.25
 JDK1.4のPreference APIを触る。java.util.Propertiesと似ている。Propertiesの場合データをファイルと読み書きするような永続化処理を自前で書かなくてはならなかったけど、Preference APIではその永続化部分が抽象化され隠蔽されている。簡単なプログラムを作ってみたところ、Windowsの場合はレジストリが使用され、Linuxではホームディレクトリの.javaディレクトリの中にXML形式でデータが保存されていた。
 7/16に紹介したLumberjackと同様なJDK1.4互換LoggingライブラリJLoggerが公開されている。JLoggerはもともと独自ロギングAPIとして公開されていたものをJDK1.4仕様に合わせて変更したものらしい。パッケージ名はcom.javelin.util.loggingとなる。一方Lumberjackはパッケージ名がJDKと同じjava.util.loggingとなる。これはブートストラップクラスに指定するために可能な技なので、Java 2以降のみの対応となる。
2001.7.16
 JDK1.4で新たに追加されたロギングAPIについてページを作成開始した。JDK1.4のβ版を入手すると試すことができます。JDK1.2.x 1.3.xでloggingAPIを使えるようにするライブラリLumberjackが公開されています。
 先日の読書会で、マルチスレッド用デバッガの話題が出ましたが、市販のツールでJProbe/Threadalyzerというのがありました。
2001.7.7
 どうもLynxOSのPOSIXスレッドのmutexではまってしまった。
 IBMのサイトに、「Next Generation POSIX Threading project」なるものがありました。LinuxにM:Nスレッディングモデルを実装するそうです。(LGPL)  POSIXスレッドの日本語書籍リスト
2001.7.1
 2001年もすでに後半になります。今年は何をしたのだろう。。。
 手伝い(?)で動員された仕事もはや3ヶ月、手伝いというよりは本腰となっています。過去のシステムの換装なのですが、意外といろいろあり。。。設計は古いし言語もCだし、あまり没頭する気もないはずだったのですが。LynxOSって組み込み系OSといいながらUNIXしています。POSIXスレッドのお勉強もしています。開発環境はCVSを全面導入してみました。makeなんぞにもはまっています。プログラマーな仕事になると、なぜか手を抜けない自分を見てしまった。
 POSIXスレッドは覚えて損はないかなと思うので、少し情報源を挙げておこう。ちょうど読書会でJavaスレッドを勉強しているので、興味深い技術でもあります。
共通のスレッド:POSIXスレッドの説明(第1回〜3回) IBM developerWorksより。 [連載]Solarisカーネル研究 第32回 Solarisのスレッド・ライブラリ POSIX1003.1cというのがPOSIXスレッドの正式規格ですが、正式化以前のドラフト案(1003.4a)に基づく実装を持っている環境もまだあります。Solarisは、POSIXスレッド規格化前に独自APIのSolarisスレッドを作っていますが、最近のSolarisにはPOSIXスレッドも添付されています。
(2002.8.11追加)
LinuxとSolarisの違いを知る:第3回/第4回 スレッドモデル(その1/その2)
2001.6.25
 Cygwinのgdbを起動してみたら、いきなりウィンドウが立ち上がって驚いた。20010428版からだろうか。。。これは使えそう。
2001.6.10
 この2ヶ月ほど仕事では昔のシステムの焼き直しのようなことをしている。どっちかというと組み込み系なもので、設計はタスクとバッファ、言語はCだったりする。ボードコンピュータだとCPUはモトローラ系を使うことが多いようで、今回の場合もPowerPC(G3)。ターゲット環境に一番近いマシンが自宅のPowerMacに入れたLinuxPPCだったりするのが面白い。構造体のアラインメントやビットフィールドの並びをLinuxPPC上で調べてみた。ふーむ。
2001.5.26
 Java読書会5月は今日でした。
2001.5.19
 昨日はObjectDay2001に行ってきた。午前中の基調講演はRubyのある生活だったが、遅くいったので聞きそびれてしまった。午後は組み込みUML、VisiBroker for RTOSのセッション、XP談義と聞いた。終わった後はXPメーリングリストの人たち8人で居酒屋へ。XP談義では、XP推進派と懐疑派に分かれて意見を言い合う形だったが、ちょっと盛り上がりに欠けた気がする。ソフトウェアエンジニアのためのホームページの主催者清水さんも参加されていてびっくり。生の意見を聞けたのがよかった。「設計とは何か言えるいえますか」という問いかけが印象に残った。ペアプログラミングというのは、XP以前から存在したということを知った。
 cUnit続報。glibは、Windows用も公開されていた。下記URLからダウンロードできる。 サンプルをコンパイル/実行するのに最低限必要なのは、下記2つ。
  1. glib-dev-20001226.zip
  2. libiconv-dev-20001007.zip
とりあえずどこかへ展開し、1.の中にあるヘッダファイルとglib-1.3.dll/glib-1.3.lib、および2.の中にあるiconv-1.3.dllを参照できるようにしてコンパイル・実行する。Cygwin1.1のgccはOK。VC++でも試そうと思ったが、VC++ならC++用のユニットテストを使えばいいんじゃないかと思ってしまう。
2001.5.17
 XP(eXtreme Programming)のユニットテスト用フレームワークのC言語版を調べてみた。(C++ではなく、Cです)
2001.5.13
 JXTA(ジュクスタ)は、ピア・ツー・ピア型の分散コンピューティングを構築するためのインフラとなるプロトコル集のようなもの(らしい)。サンが開発しており、Apacheライセンスで公開されている。Webサーバのようなサーバを必要とせずにファイル交換などの情報交換を機器間で行うアプリケーション構築に使う。JXTAを使うソフトウェアは、JXTA Core/JXTA Services/JXTA Applicationsのレイヤーから構成される。プロトコルの実装はJavaに限定されることはないので、例えばC言語でも記述できるらしい。JiniはJavaに限定されていたので、Javaの動かないデバイスでは利用できなかったので、その反省を活かしたものらしい。
2001.5.8
 Javaのプログラムコードを解析して問題点を指摘してくれるツールJlintについて使い方をちょっとだけ書きました。
 Java読書会「Javaスレッドプログラミング」の日取りが5月26日(土)に決まりました。7回目ですが、やっと半分を超えたところです。
2001.5.4
 GWは初日から風邪でダウン。あっという間に後半となってしまいました。
 先日本を2冊買いました。1つは「XPエクストリーム・プログラミング実行計画」(ピアソン・エデュケーション刊)です。計画をたてること、ストーリーを作成すること、見積もること、を中心に解説されています。Tom DeMarco氏が序文を寄せています。もう1つは「Javaデバッグ明快技法」(オーム社刊)です。デバッグ・テスト以外にも、リスクファクター分析による見積もりやバグを防ぐコードの書き方といったことが取り上げられている。最初にユーザマニュアルを作成する、最初にコメントを書くといったことは大いに賛同できます。
2001.4.17
 Antのメーリングリストができました。AntはJavaで書かれたmake風のビルド用ツールです。単なるmakeと違い、クロスプラットフォーム、CVSやJUnitといった開発作業を統合しています。
 今週末(4/21)はJava読書会開催日です。Javaスレッドプログラミングもやっと半分を過ぎたところです。
 大手企業のソフトウェア部門は、仕様をブレークダウンして工程・体制を考えて外注へ発注する仕事、それを受注する企業もさらにブレークダウンして外注へ発注・・・と連鎖していくのが日本のソフトウェア産業のあり方のようです。ソフトウェア(受注開発の)が高い理由はこのあたりにあるのかな。こうした構造は建築業界によく喩えられるようです。コンクリートが危なくなったのと同じようにソフトウェアも危なくなる(最初から危ない?)日も近いかも。
2001.4.10
 JNIをちょっとかじる。JNIの最初の1歩を書き始めるけど眠さのため途中で挫折。CSSを変更してみようと遊んでいたのが敗因かも。。。ゴミが残っているのでここからリンクはまだ貼りません。
 Meadow1.14が4/1にリリース。これはエイプリルフールではありません。Meadowのページに1.14の記述を追加。
 VisualC++でEmacsをエディタとして使用する方法に、VisEmacsというものがあります。VisualC++のデフォルトエディタをEmacsにしてしまうものです。なおVisEmacsを使用するには、gnuservがいるようです。gnuserv日本語ページを参照。
 「JavaプログラマーのためのC++講座」 Q)public final staticのように定数を宣言するにはどのように書けばよいのですか?A)C++ではstatic constと宣言します。
    

以前のメモ


Contact me : torutk@alles.or.jp