– セキュアなコードを書くための、 Sun 公式ガイドライン。
Eclipse の PMD プラグインで自動チェックしてくれるみたい。
<http://java.sun.com/security/seccodeguide.html#gcg>
– Security Code Guidelines
<http://pmd.sourceforge.net/>
– PMD 公式
Eclipse(2.x/3.0.x/3.1.x) 用プラグインをインストールするときは以下の URL を指定すればよい。
http://pmd.sourceforge.net/eclipse
<http://www.eclipsewiki.net/eclipse/?PMD>
– EclipseWiki – PMD
使えるルールと、なぜいけないかという理由が日本語でまとめられている。
投稿者: editor
OpenOffice.org が GetStorage .. というエラーで起動できなくなる
OOo 起動中に電源ごと落ちて起動したあとに次のエラーがでて OOo 起動しなくなった。
GetStorage, name : “No Content !”
とりあえず検索したところ、OOo Forum で同じ現象について回答で次のような説明があった。
<http://www.oooforum.org/forum/viewtopic.phtml?p=17054#17054>
OOo stores configuration files into Two layers.
1. The SHARE layer.
2. The USER layer.
The User configuration layer holds any settings that are DIFFERENT from the Shared configuration. For example, if you change your color scheme, or default font, the change is saved into the user layer.
These two layers are stored in directories of files. It is different on Linux and Windows. You don’t say which you are on, so I’ll explain both. Please read both, it will give you insight.
On Linux, for example, suppose OOo is installed in the following path…
/opt/OpenOffice1.1.0
Then the System configuration layer is in the folder….
/opt/OpenOffice1.1.0/share
And the User configuration layer is in each individual user’s home directory….
/home/danny/OpenOffice1.1.0/user
On Windows, suppose OOo is installed to
C:\Program Files\OpenOffice1.1.0
Then the System configuration layer is stored in….
C:\Program Files\OpenOffice1.1.0\share
And the user configuration layer is stored in….
C:\Program Files\OpenOffice1.1.0\user
(以下略)
ここまで読んで User 層の変更があった設定を戻せばいけるんじゃないかと思い、最後に動いていたあたりに変更があったものを削除したら問題なく動くようになった。
$ # Windows なので Cygwin で作業
$ cd d:/OpenOffice.org1.1.4/
$ touch -t 071208050 /tmp/timestamp.tmp # 最後の変更直前くらい。
$ for i in `find . -type f -newer /tmp/timestamp.tmp`; do echo $i && mv $i /tmp/;done
$ # rm でもいいけどいざというとき戻せるように mv
ちなみに該当したのは次のファイル
./user/config/inethist.dat
./user/registry/cache/org.openoffice.Setup.dat
./user/registry/data/org/openoffice/Office/Common.xcu
./user/registry/data/org/openoffice/Setup.xcu
Linux で Windows のようなサスペンド
swsusp というのがあるらしい。
<http://www.suspend2.net/>
– Software Suspend 2 for Linux 公式
<http://thlug.sourceforge.jp/pukiwiki/pukiwiki.php?swsusp%BE%DC%BA%D9>
– THLUGPukiwiki – swsusp 詳細
Canvas.processEvent の使い方
– パラメータの意味について(とりあえず Doja 2.x では)詳しく書かれておらず、ちょっと試行錯誤してしまったのでメモ。
public void processEvent(int type, int param);
低レベルイベントが通知されたときに呼ばれるメソッドです。
パラメータ:
type – イベントのタイプが渡されます。
param – イベントのパラメータが渡されます。 パラメータの意味はイベントによって異なります。 パラメータを持たないイベントの場合は、0が渡されます。
– type : Display の定数のうち、xxxイベントと説明されているもの。
例えば
Display.KEY_PRESSED_EVENT (=0) がキーを押した時に呼ばれ、
Display.KEY_RELEASED_EVENT (=1) がキーを離した時に呼ばれる。
– param : キーイベントの時は Display.KEY_xxx のいずれかが入る。同時押しは考慮にいれず、実際にトリガを引いたキーの値が与えられる。
Canvas.getKeypadState() とは全く形式が異なるので注意。
xargs が標準入力が空のときにも実行されてしまう
find . -type f | xargs wc -c
など xargs を使うときに、標準入力が空だと実行されないのかと思っていたら、標準入力がなくても一度は必ず実行するというのがデフォルトだった。このため、上の結果は wc -c < /dev/null のようにとられて 0 になる。
これを避けるには、 -r オプションを使う。
xargs -r <command>
上の例だと次のようにすればよい。
find . -type f | xargs -r wc -c
バイナリエディタ
– 昔から PowerWitch The Royal というバイナリエディタを使っている。高機能でフリー。ただしもれなくバニーさんがついてくる。スクラッチパッド編集で使いたくなったので久しぶりにダウンロードしてみた。
<http://www.nx.sakura.ne.jp/~elysium/software/pwtr/>
– PowerWitch The Royal
MediaImage から Image の取り出し
– MediaImage.use() で利用可能にしたあと MediaImage.getImage() とする。
dispose(), unuse() は呼び出す必要はない模様。
非互換, 機種による制限のある機能
– 利用するメソッドが本当に全機種対応しているかどうか各機種オプションAPI・拡張API実装状況を見たほういい。
対応していない場合は利用を避けるか、
System.getProperty(“microedition.platform”).indexOf(“N504”) >= 0
とかして端末によって処理を分けること。
– 以下公式の iアプリ作成上の注意点より端末固有の制限。
– N504i(S) では Graphics.drawString() は半角 33 文字までしか描画されない。
– N504i(S) では ScratchPad クローズ処理は
– P504i(S) では扱う画像の一辺の長さは 256 ピクセルまで。
– P504iS では同様に 512 まで。
– F504i では Connector.open() に渡す URL は 256 バイトまで。
– F504iS では同様にクエリ以外が 255 バイトまで、クエリ部が 512 バイトまで。
– F504i と SO504i ではキーを押したまま(key press イベント発生中)システムのポップアップメッセージ(iモード接続中など)が表示されると Canvas.getKeypadState() の結果が残る。回避するために、ポップアップが立ち上がる処理のトリガはキーリリースにする。
– D504i では(Canvas.processEvent(), Canvas.getKeypadState() 等を使った低レベルキーイベント処理で)一部のボタン同士の同時押しを受け付けられない。(1,2,3), (4,5,6), (7,8,9), (*,0,#) のそれぞれは同時押しができない(ex. 1,2 はだめ)。
– SO504i では MediaImage オブジェクトは use() で有効になることができるのは 255 個まで。
– SO504i では時刻情報処理で 1 時間につき約 3.5 秒の割合で遅れる。正確には経過時刻に対し 0.09756% 遅れる。
– D2101V ではサマータイムが有効になっているため 3月の最終日曜の 10:00 から 10 月最終日曜の 11:00 まで +1:00 となる(10:00 が 11:00 になって始まり、11:00 が 10:00 になって終わる)。
画像処理 paint の置き換え
paint(Graphics g){ /* do something */ }
は、次のものに置き換えられる。
Graphics g = getGraphics(); // Canvas.getGraphics() メソッド
g.lock();
// do something
g.unlock(true);
Jarg, 7zip による Jar ファイルサイズ削減
– ここ <http://www.moreread.net/mario/Any/appli/memo.html?id=1> のソースを改変して一つのファイルで実行するようにしたもの。空白を含むパスに微妙に対応してある。DOJA エミュレータと同時に実行するとロックのために書き換えに失敗するのが難点。
– JavaBlender <http://homepage.mac.com/t.sekiguchi/javablender/index-j.html> を先に実行したらいいらしい。(Java Blender はクラス融合/パッケージ構造の平坦化などでプログラム自体のサイズ最適化を行う)
@echo off
REM ———————————————————-
REM = 使い方:
REM = optimize.bat “C:\path\to\jars\app.jar”
REM = 指定した jar のサイズを削減し、同じディレクトリにある同名
REM = の .jam のサイズ指定を書き換える。ドラッグ&ドロップ実行に
REM = 対応
REM ———————————————————-
REM = 下準備:
REM = ●jarg.jar <http://jarg.sourceforge.net/index.ja>を
REM = ダウンロードして、適当なところに配置。
REM = ●7zip <http://www.7-zip.org/> をインストールして
REM = 7za.exe にパスを通しておく。
REM ———————————————————-
REM = 設定
REM ———————————————————-
REM = クラスパス(DOJA 付属の zip 2つ)
set _CP=D:\Progra~1\Java\iDKDoJa4.0\lib\classes.zip;D:\Progra~1\Java\iDKDoJa4.0\lib\doja_classes.zip
REM = preverify.exe のパス(DOJA に付属)
set _PREVERIFY=D:\Program Files\Java\iDKDoJa4.0\bin\preverify.exe
REM = jarg.jar のパス
set _JARG=D:\Program Files\Java\tool\jarg\jarg.jar
REM ———————————————————–
if %1 == “” goto MES
set TARGET_F=%~f1
set TARGET_P=%~p1
set TARGET_SP=%~sp1
set TARGET_N=%~n1
mkdir %TARGET_P%bin
cd %TARGET_P%bin
mkdir temp
java -jar “%_JARG%” -nobco -j2me-prev “%_PREVERIFY%” -j2me-cp “%_CP%” “%TARGET_F%”
7za x %TARGET_SP%%TARGET_N%_s.jar -otemp -w -r -y > nul
REM del .\%TARGET_N%_s.jardel “%TARGET_SP%%TARGET_N%_s.jar”
REM ! “%TARGET_F%”
cd temp
7za a -tzip “%TARGET_F%” * -mx=9 -mpass=4 -r -y > nul
cd ..
rd temp /s /qtype %TARGET_SP%%TARGET_N%.jam | find /v “AppSize” > %TARGET_SP%%TARGET_N%.tmp
type %TARGET_SP%%TARGET_N%.tmp > %TARGET_SP%%TARGET_N%.jam
echo AppSize = %~z1 >> %TARGET_SP%%TARGET_N%.jam
del %TARGET_SP%%TARGET_N%.tmp
cd %TARGET_P%
rd bin /s /q
exit /b
MES
echo optimize.bat [App.jar]
ERR
pause