MacからSambaでWindows 7のファイルを読もうとした時に一部のファイルが表示されない

.DS_Storeファイルが変なタイミングで作られると、それ以降に同フォルダに追加したファイルが表示されなくなることがあるようです。
.DS_Storeを削除すれば解決しました。
このファイルはフォルダ毎に作成されるので、サブフォルダも含めてまとめて削除する必要があります。

Sambaで共有しているドライブに.DS_Storeを作らせないようにするには以下を実行する

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true

出来てしまった.DS_Storeをサブフォルダ含めて削除するコマンド(Macコマンドプロンプトから)

find (削除したいディレクトリパス) -name .DS_Store -exec rm {} \;

バッチ処理後Windowを開いたままにする

WindowsでXXX.batファイルもしくはショートカットを作成しダブルクリックした時に、通常は処理が終わるとウィンドウも強制的に閉じられてしまうので、結果のログなどを確認できない。
そういうときは下記のようにする。

cmd /k

例)

cmd /k dir

参考
http://ameblo.jp/one-of-the-wnet/entry-10111695003.html

ラズパイでディスプレイをスリープさせない

温湿度センサをラズパイに取り付けて、ディスプレイで見える化するときにスリープしてしまう問題を解消。

~/.xinitrcを作成し、以下を記述する

xset s off
xset -dpms
xset s noblank

lightdm.confの編集

/etc/lightdm/lightdm.confを開き、

xserver-command=X

の行を以下に変更

xserver-command=X -s 0 -dpms

screensaver.desktopの作成

~/.config/autostart/screensaver.desktopを作成し、以下の内容を書き込む。

[Desktop Entry]
Type=Application
Exec=/home/pi/.xinitrc

最後にラズパイを再起動する

参考URL
http://akiomik.hatenablog.jp/entry/2013/09/12/211523

MIDlet(ガラケーJavaアプリ、海外・ソフトバンク系)作成時の陥りやすいミス

10年ほど前の自分のメモを発掘したので念のため保存しておく。

Canvas

  • repaint()

repaint()はpaint要求を出しますが、必ずしもpaint()が実行されるとは限りません。呼ばれるタイミングはJavaVMに依存します。もしrepaint()を読んだタイミングで必ず画面更新を行いたければrepaint()の直後にserviceRepaints()も呼びましょう。

  • paint()

paint()の中で描画以外のことをするのはやめましょう。たとえばHTTP通信など。想定外の動きをすることがあります。

  • paint()

paintの引数のグラフィックスコンテキスト(Graphics g)をフィールド変数などに保存して別のメソッドから使用することは禁止されています。予期せぬ動作をする場合があるようです。

GameCanvas

  • paint()

GameCanvas.getGraphics(), flushGraphics()を使用しているならpaint()は空関数でオーバーライドしないほうがよいでしょう。
VMによってはrepaint()が自動でかかってpaint()→画面更新が走り、flushGraphics()で表示した内容を上書きしてしまう場合があるようです。

GameCanvas(true)はゲームキーをkeyPressedイベントとして取得しないようにするモード。getKeyStates()だけをゲームキー取得に使用するならtrueが良い(keyCode系、KEY_NUM0などはtrueにしても来る)が、keyPressedイベントでゲームキーも取りたいならfalseにする必要あり。

HTTP通信
HTTP通信は処理が占有されてしまうのでほかの処理も平行して動かすならThreadにしましょう。

Display

  • setCurrent()

setCurrent()はDisplayableのインスタンスを現在の画面に割り当てますが、呼び出してすぐ反映されるとは限りません(VM依存)。Thread.sleep()を入れるかDisplayable.isShown()で表示されていることを確認するまで次の処理に進まないようにしましょう。

補足として、CommandAction等のイベントリスナの中でisShown()を呼ぶとsetCurrent()がブロックされてしまい、いつまでたってもisShown()がTRUEにならないのでThreadなどで動かす等の工夫が必要です。

SpriteCanvas(JSCL, VSCL, MEXA)

drawFrameBuffer()はpaint()内で呼びましょう(というかMIDP1.0系のMIDletでは描画処理は基本的にpaint()内で行いましょう)。表示されなかったりすることがあります。

MIDlet

  • startApp() (JSCL, VSCL, MEXAの場合)

起動時の初期化の処理(画面の初期化など)を、startApp内に記述してしまう傾向がよく見受けられます。startApp()は、Resume時にも呼び出されてしまうので、初期化処理はコンストラクタ内に記述するか、Resume時に意図しない再初期化を引き起こさないようなガードを入れておく必要があります。

例)

 private boolean isRunning = false;
	
 protected void startApp() throws MIDletStateChangeException {
     if(!isRunning){
         Display display = Display.getDisplay(this);
         main = new Main(this);
         display.setCurrent(main);
         System.out.println("setCurrent finished!");
         new Thread(main).start();
         isRunning = true;
     } else {
         System.out.println("already running!");
     }
 }

Jenkinsの自動ビルドでFindBugsやJUnitを実行したときに行番号を表示させたい

antによる自動ビルドをさせたが、FindBugsJUnitの指摘でなぜか行番号が表示されない。
Eclipse上で実行した時は出るのに…
ということで調べてみたらこういうことだった。

build.xmlのjavacの要素に、 debug="on" を追加する

参考URL
http://kan-high.hatenablog.com/entry/2013/03/27/200043

MacOSXでSWTのJavaアプリを起動出来ない

WARNING: Display must be created on main thread due to Cocoa restrictions.

Exception in thread "main" org.eclipse.swt.SWTException: Invalid thread access

等と出るのは

 -XstartOnFirstThread

というオプションをつけてJVMを起動すると良い


参照URL
http://www.fukudat.net/wiki/ja/Mac_OS_X/Programming/Java