2010年7月12日月曜日

FreeNAS にパッケージを追加

Embeddedだと少々手間が必要。
ここに書いていあるように、TEMPディレクトリを指定する必要がある。

例:
export PKG_TMPDIR=/mnt/sysfiles/tmp
pkg_add -r curl -P /mnt/sysfiles/opt/curl

「-P」はパッケージのインストール先の指定、
ただし、これだけだと必要なライブラリがリンクされないことがあるらしいので、

ldd /mnt/sysfiles/opt/curl/bin/curl

などとして、実行させたいバイナリのリンク状況をしらべ、不足分を
ln -s /mnt/sysfiles/opt/curl/lib/xxx.so /usr/lib/xxx.so

とするように、起動時設定をする。

Mac Netbeans Encoding

Mac/Netbeans6.8/Jdk1.5で文字化けした時の対処。

NetBeans JavaFX プラグイン : エディタの日本語処理問題の回避策(?)

Netbeansの起動オプションに「-J-Dfile.encoding=UTF-8」を追加します。場所は、
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/etc/netbeans.conf

GlassFishの文字化けは別途対策が必要.

2010年7月6日火曜日

指導案

昔、教員をしていた時には研究授業などで学習指導案を書いていたものだ。あまり書くのは得意ではなかったが、一応のシナリオ的なものは作ったことがある。
今日、改めに検索してみると教師の教授の流れを主とするものと生徒の活動を主とするものと流儀があるようだ。ただし、生徒の活動を主とした場合、授業の場で望まれる成果を同一とした場合には教師主体に比べると教師側の間口がかなり広くないと対応できないような気がする。

ということで、今回は久しぶりにポルカノイドの授業案を書いているが、教師主体で行く。
ポルカノイドは自分でプログラムできる自動車型のロボットで、ここで授業を行う。

2010年7月3日土曜日

Java Swing Event のキャンセル

Event処理の途中で、後続する処理をキャンセルしたい場合は、以下のようにする。


evt.consume();

Java Swing MouseEvent DoubleClick の醜悪

Swingでのダブルクリック判定は、MouseListenerの中で MouseEvent#getClickCount() の数を見て判定するのだが、以下のようにSingleイベントとDoubleイベントの2つが発生する仕様となっている。

1) Event : ClickCount=1
2) Event : ClickCount=2
3) ......

つまり、ダブルかどうかは自分で判定ロジックを作れとのことであり、これだったらClickCountなどあまり無意味と言える。

実装例)
 タイマーを仕掛けて N miliSec以内にクリックが連続した場合をDoubleと判定し、そうでない場合はSingleとしてタイマータスクの内部から処理を実行する

2010年7月2日金曜日

UnBoundな仕事は危険

現象:
 A社では仕事の範囲が不明確なままで作業をすることがあり、後になってから作業の手戻りが発生したり、成果の一部が無駄になったり、人員などのリソースの計画が後手に回ることが多い。

定義:
 仕事の範囲がはっきりしない状況でも取りかからざるを得ないことがある。特に研究開発や提案型の場合には顕著である。これを、「UnBound(境界がはっきりしない)な仕事」と定義する。
 ここで考えている境界とは、以下のものを指す。
1)責任:どこまでが自分の仕事か
2)期限:いつまでにやり終える必要があるか
3)費用:いくらまで資金を投入してよいか
4)仕様:受け入れ承認されるか基準は何か
・機能:何ができる必要があるか
・性能:どれくらいの成績を必要とするか
・使用:使い勝手、習得コスト
・信頼:耐障害性、復旧時間
・保守:管理、修正、運用

分析:
 UnBoundな仕事が危険なのは、部分的にはそれなりの事が出来たとしても、全体としての境界があいまいなため、以下のような問題が発生することである。
1)仕様定義や完成基準があいまいなため作業が完了できない
2)期限が不明確なため、作業が間延びする(意識が集中せず散漫になる)
3)費用が未定のため、リソースをかけられない
4)責任分担が不明確なため、作業の見落としがあっても気付きにくい

対策:(*2)
 不正確でもよいのでまず「決める」ことが大切である。(*1)
 決めた範囲で最善を尽くす。
 結果を確認し、決めたことが適切かどうかを評価する。
 評価の結果で「決めなおす」ことは最初に戻り、それ以外なら対応する処置をする。


*1)マグロ舟の船長が教えてくれた、マグロ漁で一番大切なことは、「決める」こと。
 マグロがどこにいるかは、長年の経験があっても誰も分からない。いい場所を見つけてから移動しようと研究や調査をすることより、あそこに行ってみようと決めて、実際にやってみることが大切。もし決めた場所が適切でない場合は次の場所を決めればよい。
[会社人生で必要な知恵はすべてマグロ船で学んだ:齊藤 正明]

*2)書いていて気付いたが、これはPDCAサイクルだ。
 PDCAとは[P]lan,[D]o,[C]heck,[A]ct の頭文字であり、生産管理や品質管理などの手法である。
 CheckとActをSeeにまとめた「PDS」や、CheckをStudyとして「PDSA」という場合もある。

全体最適と部分最適

ついつい部分に目がいってしまうが、全体最適を心がけていないと無駄が多くなる。
詳細(Detail)を詰めることでは最適な全体(Whole)にはならない。以下の物語が一例となるであろう。

A君とB君が、道具を使用しないで長い直線を地面に描けるか競争した。
 A君のとったやり方は、最初に自分の片方の足を地面に置いて基準にし、次にもう一方の足をその延長線上の直線にくるように置き、さらにその延長線上に最初の足を置く、というころ繰り返すことであった。
長い直線を描く為には、短い直線を正確につないでいけばいいという考えである。
 一方B君はというと、初めは周囲を見回して何かを探しているようであったが、やがて動きが止まり、足元も見ないで前進しだした。
 さて、二人の結果を比べてみると、A君は部分的に直線になっているところもあるが、全体としては直線とはいけないようなくねくねと曲がった線になっていた。それに対してB君は細かく見ると多少の揺らぎはあっても全体としてみるとほぼまっすぐになっていた。
 不思議に思ったA君が訪ねた。「何故君は足元も見ないでそんなまっすぐな線が描けたんだい?」B君は遠くに見えている森の方を指さしながら答えた。「僕はあの森の一番高い木だけを見て前進しながら線を引いたんだ」

A君は部分最適を考え、狭い範囲ではB君よりもよりまっすぐな線を引いた。B君は全体最適を考え、狭い範囲は犠牲になるとしても大きな範囲ではA君とは比較にならないほどまっすぐな線を引いた。

詳細は全体と同じくらいに大切であるが、全体を忘れての詳細は無駄が増えたり、方向性が不正確になって歪んでしまったり、と努力が報われないことになってしまう。

1)周囲に目印となるものが見当たらない場合や、直線を引く方向が定められている場合の全体最適な解法には上記エピソードとは別の手段が必要となるが、部分最適な方法は「部分的な直線の延長は全体としても直線」が厳密に正しくてその通りに実行できる限りにおいては、いつも同じでやり方でよいと期待しうる。