2010年10月8日金曜日

ANTLR

参考:antlr/ANTLRWorksを使ってみる

任意の言語の字句解析(LEX)と構文解析(PARSER)による構文木(AST)変換をするツール。
構文木を最適化して変換ルールをかませることでコンパイラやインタプリタを作成できる。
yaccではLALR(1)を使って構文解析を行うのに対し、ANTLRはLL(*)を使って構文解析を行う。

yacc,lexとの違いは以下のもの、
 左再帰が使用不可
 演算優先順序は明示する必要あり
 右結合演算子に対応

出てきた用語の概要 : 構文解析 (プログラミング)

LALR
LALR法(英: LALR parser)は、構文解析手法の一種であり、Lookahead(先読み)LR法の略である。単純LR法(SLR法)の構文解析器よりも多くの文脈自由文法を扱うことができる。構文解析表の大きさがあまり大きくなく、多くの文法を扱えることから、最も一般的な構文解析器となっている。yacc や GNU bison といったコンパイラコンパイラの多くもこの種の構文解析器を生成する。

LL
LL法またはLL構文解析とは、文脈自由文法のサブセットのためのトップダウン構文解析法の一種である。入力文字列を左 (Left) から構文解析していき、左端導出 (Leftmost Derivation) を行う(このため、LL法と呼ぶ。LR法も参照されたい)。この方式で構文解析可能な文法のクラスを LL文法 と呼ぶ

2010年8月30日月曜日

httpヘッダなどの表示

Achillesを使用していたが、以下のものも便利


Fiddler : windows のみ

HttpFox : FireFox のAddOn

Tamper Data : FireFox のAddOn

2010年8月24日火曜日

Mac Mail to OutLook 2007

色々見たけど、直接はなさそう。有料ツールならあるが、フリーだと「emlx => eml => OutlookExpress => OutLook」とするしかなさそう。しかし、対象のPCではOutlookExpressは削除済みだし、、、

 ということで、ThunderBirdを試す。デフォルト構成ではemlは読めないが、アドオンを入れると読めることが分かった。ここからダウンロードできる。

 emlx => eml => ThunderBird で幸せになれそう。

2010年8月10日火曜日

OracleXE での UTL_FILE パッケージ

XEの場合、権限を付与しておかないと使用できない。

参考はここ


%>sqlplus /NOLOG

SQL> conn / as sysdba
接続されました。
-- PUBLIC (すべてのユーザ)に付与する場合
SQL> grant execute on utl_file to public;

権限付与が成功しました。

-- rivus (rivusユーザ)に付与する場合
SQL> grant execute on utl_file to rivus;

権限付与が成功しました。


再度実行すると、以下の様なエラー

DECLARE
*
ERROR at line 1:
ORA-29280: invalid directory path
ORA-06512: at "SYS.UTL_FILE", line 33
ORA-06512: at "SYS.UTL_FILE", line 436
ORA-06512: at line 89


よーーーく見てみると、未定義のディレクトリを発見;

f_main := UTL_FILE.FOPEN ('DIR_TEMP', v_file, 'w');


ググってみると、以下のような定義が必要らしい;

create or replace directory DIR_TEMP as '/tmp';


付け加えて実行したら成功!

2010年8月7日土曜日

Apache2.2 のコンパイル

configure --enable-mods-shared="all"
では、proxyなどが入らない!
ほんとにすべてをmodにするなら、以下のようにするとよいらしい。
./configure \
--with-ldap \
--enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"

参考:http://httpd.apache.org/docs/2.2/programs/configure.html

2010年7月30日金曜日

Oracle JdbcConnectionのclose問題

AdvancedQueuingを扱っていて、JMSConnection#close()でThreadがHANGするので調査したところ、どうもOracleのJDBCの古いもの(ojdbc14以前)のバグの様でojdbc5以降でHANGしなくなっているようだ。
以下に、関連情報を載せるが、close()自体は成功しても実際のTCP-Connectionは解放されないため、調査続行中:

1) 2009/12 Thread stuck waiting on java.net.SocketInputStream.socketRead : Weblogic
http://objectmix.com/weblogic/532984-thread-stuck-waiting-java-net-socketinputstream-socketread.html

ojdbcのバグだから新しいのを使え;
Hangした時に以下のSQLを実行する;

select
vse.username, vse.osuser, vse.status, vse.sql_address, vs.piece, vs.sql_text
from v$sqltext_with_newlines vs, v$session vse
where vse.sql_address = vs.address and vse.status = 'ACTIVE'
order by sql_address, piece


2) 2003/01-2006/12 thread deadlock but no other thread holds lock??
http://forums.sun.com/thread.jspa?threadID=343023

DaemonThreadからclose()すればいい;

3) 2003/08-2009/04 Thread Hangs at SocketInputStream.read
http://www.dbforums.com/oracle/894519-thread-hangs-socketinputstream-read.html

TableSpaceが不足した場合に発生する;


4) 2009/09 JDBC insert query to Oracle sometimes hangs
http://dbaspot.com/forums/oracle-server/19570-jdbc-insert-query-oracle-sometimes-hangs.html

複数のInsertによるブロック;

5) 2004/06 ds.getConnection( )返ってこない
http://otn.oracle.co.jp/forum/message.jspa?messageID=11004716

DBCPの設定とOracle-SharedServerの設定の問題?;
v$session周りを調べると共有サーバに設定してあるのですが、server列がNONEだったりSHAREDだったりまちまち;

共有サーバの設定値を具体的には、
alter system set shared_servers=5 scope=both;
にすると、ds.getConnection()で待つことなく正常に返ってくるようになりました。
接続セッション数は40くらいだったのですが、マニュアルには
「shared_serversの値1に対し10セッションで安定する」みたいです。

6) 2003/02-2010/06 JDBC conneciton hanging at SocketInputStream.socketRead
http://forums.oracle.com/forums/thread.jspa?messageID=4354229


FierWallの影響か?;

7) 2008/11 Deadlocks with Oracle
http://old.nabble.com/Deadlocks-with-Oracle-td20378297.html

古いojdbcのバグ?;
I'm rather certain the patches are included in 10.2.0.3 patchset

2010年7月28日水曜日

教材開発指針

自分の得意な形式にする

■トラブル解決型学習
・トラブルが発生し、その解決を通して学習する
・流れの一例
1)導入:イラスト、アニメーションなど
 状況説明:場所や組織、自分の役割、発生している現象、これまでの経緯など
2)ディスカッション:グループ分け、発表
 目的の確認:何の為に行動するのか、なぜそう思うか
 調査方針の作成:何をどこまで進めるか、役割は何か、何を仮定するか
3)資料の収集:グループ作業
 何を集めるべきか、なぜか、何をすれば集まるか
 誰、何の力を借りるべきか
4)分析、考察:
 どこに着目するか、どこの統計処理をすべきか
 何が分かるか、何が不足しているか、
 仮定との食い違いはないか、説明できうるか
 さらに調査が必要か、
5)整理と報告:グループ発表
 調査の経緯と収集した資料、分析・考察の結果と結論

2010年7月14日水曜日

アイデアソン

ログビューワ:
 縦横で設定した範囲の折りたたみができる
 例)左端から、XXのカラムまでを折り畳む
 例)XXサーバに関するログの行を折り畳む

作業表に入れる項目:
 日付、目的、完了基準、消費時間
 指示(6W2H)、リソース(機材、ソフト)
 作業環境(H/W, O/S, N/W,,,)
 意見や感想

半透明の看板:
 景色を遮断しないで広告をだせる

自動糸通し:
 糸側と穴側の双方が自走して相手を捜してつなげる=>狭い場所での配線

ピンポイントヒートガン:
 ピンポイントで高熱の空気を発射できる
 ドライヤーのように広範囲に熱を拡散しないで加熱処理ができる

IDバンク:
 共通モバイルクーポン
 1回登録すると、複数のショップで使用できる

スキルマップ:
 クイズに答えて作成する
 知識:事実を確認できる
 理解:メタ情報をTPOに合わせて選択できる
 技術:一定の時間内で水準を満たす作業ができる
 表現:伝達、説明できる

セキュリティブリッジ:
 FireWallで守られた2つのドメインを結合するDMZサーバ
 一切の発信接続を禁止して、必要な業務処理を実行できる

ソフトの開発とは;
 DSLを作成すること
 DSLとDSL間の解釈器を作成すること

無騒音発電機:
 燃料電池で発電するので、モータを使用しない

寿命とは:
 壊れそうも無いものが寿命を迎える理由は?

グレゴリオ暦の1月1日は自然科学的な意味があるのか:
 どうもなさそう、ローマは法治主義でカレンダー(ローマ時代は月初日のこと)は恣意的にきめられた

音による位置合わせ器:
 縦横高さを音で表現して離れた物体の位置的な同期を容易にする

局所と大局:
 局所の最適より大局の最適をもとめるべき

Drupal 6.17J on TurnKey LAMP

 すんなりインストールできたが、php-gdのバージョンが古いようなので、ubuntu から更新をかける。

apt-get update
apt-get install php5-gd


cron も設定する。

bash
mv scripts .scripts
cd .scripts
vi cron-curl.sh
example.com => localhost
export EDITOR=vi
crontab -e
45 3 * * * /home/korabo/drupal/.scripts/cron-curl.sh


続いて、CleanURL(?p=xxx がなくなって、RESU風になる):この辺はJoomlaの方が格段に簡単だ。

apache/mod-rewrite を有効か(webmin)
.htaccess を確認すると、以下の様な設定がある
RewriteEngine on
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
状況によってはコメント部分を設定する必要があるようだ。

TurnKey Linux LAMP インストール

 TurnKey は Ubuntu 8.04.3 LTS ベースのLinuxディストリで、LAMP/LAPP/Drupal/Joomalなどすぐに使用できるような形でパッケージングされている。
 基本はUbuntuServer+shellinabox/Webmin(/PhpMyAdmin)なので、X11などのGUIはないが、その分サイズがコンパクトである。
 メモリー256M以上、HDD必要量
VirtualBoxにインストする場合は、VMwaremの構成に合わせて、NetはAMDを指定し、SCSIはLSI-Logicにする。

*AMD Phenom or Barcelona-level Opteron CPU の場合は、「IO APIC」をONにすること

VMwareのRemoteDeskを使用する場合は、以下をxxx.vmxに追加
RemoteDisplay.vnc.enabled = "TRUE"
RemoteDisplay.vnc.password = "password"
RemoteDisplay.vnc.port = "6910"

2010年7月13日火曜日

アイデアソン:トレーニング

思いついてメモしていたアイデアを記録

■方針
・ナチュラルプランニング(GTD):目的からスタート
 *「7つの習慣」では「Begin with the End in Mind」を「目的を持って始める」と訳している
 自然に行っている思考の流れで以下の5段階
  1)目的と価値を見極める
  2)結果をイメージ
  3)プレスト:あれこれ思いつき連想
  4)思考の整理
  5)行動の決定
 *陥りがちなのは、リアクション型プランニング:タスクからスタート
  頑張れば達成できる、もっと頑張ろう

・習得レベルの方針
知らない=>知っている=>成果を出せる
概念として知る:習得期 解説やクイズ
体験として知る:訓練期 事例研究、課題解決

・DMD(Diff that makes Diff)を押さえる:つまり、ポイントとなる部分を明確にする

■テキストに書くべきこと
・目的と目標を想起させる
・知識の整理:クイズ、穴埋め、3択
・課題の解決:事例研究、推理ゲーム、ロールプレイ

例)
1)知識の整理
 XXとは何か?3択クイズ
 ZZするにはどれが一番いいか?
2)ポイントの指摘
 共通するのは、、、
 重点は、、、
3)課題の提示
 XXの問題が発生している
4)解決方法の検討
 優先してすべきことは何か
5)調査と仮説
 実際の調査を実施
 仮説を立てて検証方法を検討
6)検証作業
 実際の作業
7)まとめ
 作業概要のまとめ
8)復習クイズ
 繰り返すことで印象を深化させる

■モチベーション向上の為に
プレゼント
資格付与
資格取得への保証

2010年7月12日月曜日

VMware Server でVMが表示されないときは

Webの管理画面でログインすると、
「server not responding ...」
となってVM一覧が出てこない場合の対処。

ログインユーザを「__vmware__」グループに所属させる。
これだけだったのかーーー!

参考にしたページ:How To Fix: The VMware Infrastructure Web Service at "http://localhost:8222/sdk" is not responding (Connection Refused).

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

2010年6月28日月曜日

Swing 文字列を傾けて描画

参考ページはここ
要は、Font自体にAffinTransformをかけてから描画すること。

2010年6月22日火曜日

javax.swing Component preferredSize の罠

Swingでの部品のサイズは、sizeでも、maximumSizeでも、minimumSizeでもなく、preferredSizeが使われるため、ここを設定することが多いのだが、サイズが可変になる場合にはむしろ「null」にしておいた方が吉である。

そもそも、Swingでは、サイズはLayoutManagerの管理下にあり、上記のサイズ指定は参考値という扱いのようだ。とはいっても最大の参考値は「preferredSize」であり、初期表示はこの値が使用される。

■状況:
JPanelにBorderLayoutを設定し、NorthにJToolBarを配置、Centerにはイベントに応じて異なるJPanelが挿入され、サイズも動的に変化するという画面を開発していた。始めはJDialogを継承したクラスでうまく動作したものをJPanelに変更し、別に作成したJFrameに埋め込んで使用する形に変更したら、内部の部品変更でサイズが変わらなくなってしまった。

■調査:
最初は、pack()やvalidate(),invalidate()などの呼び方や対象が間違っているのではと、何種類もコードを追加、削除をしてみたが一向に変化がなかった。ネットや資料を見ているうちに、そういえばサイズは「preferredSize」を見ていて、これが固定値だと、、、ということでnullにしてみたらという考えに思い至った。

■判明:
nullに指定すると、見事にサイズが内部部品に応じて変化するようになった。もともとJDialogで試していた時にはgetContentPane()で取得できるContainerのpreferredSizeにはnullが入っていたいようで、内部に応じて変化する場合にはこの指定が正しいようだ。

■教訓:
前提を疑え

2010年6月10日木曜日

Mavenからアプリを実行する

以下のように記述し、exec:exec とする。

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<!-- automatically creates the classpath using all project dependencies,
also adding the project build directory -->
<classpath/>
<argument>net.korabo.lib.h2ctrl.App</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

MavenのThreadで動作するJavaアプリの場合は、以下のように記述し、exec:java

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>net.korabo.lib.h2ctrl.App</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

WaveMakerで3rdPartyのjarを使用する

h2databaseが使用したくて調べたら、以下のようにものを発見した。

WaveMakerでParadoxを使用する

ふむふむ、まずシステムとして認識させるには、
$WAVE_MAKER_DIR/studio/WEB-INF/lib/

にjarファイルを配置し、作成したプロジェクトで使用するには、
$PORJECT_DIR/xxProject/lib/

に配置すればいいようだ。プロジェクト側の「WEB-INF/lib」はクリーンされると消去されるので、使用できない。

なお、使用するHibernateの方言は、
org.hibernate.dialect.H2Dialect

となる。

2010年5月26日水曜日

ps コマンドでの角括弧付きプロセス名

linux(ubuntu) で、psすると、[]に入ったプロセスがある。


$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:32 ? 00:00:00 /sbin/init
root 2 0 0 20:32 ? 00:00:00 [kthreadd]
root 3 2 0 20:32 ? 00:00:00 [migration/0]

これは、特権モードで動いているプロセスのことだそうな。

psコマンドでの[]付き表示について

2010年5月22日土曜日

古いマシンでのAndroid-X86

VIAの古くて組み込み向けのマザボ(EpiaM)でX86を起動しようとして格闘した記録。

LiveCDでの起動=>画面出ない
VGAモードを選ぶか、
 grub で、e => e としてkernelパラメータを編集
「vga=788」を追加

InstallでHDD認識しない
 最初は、IDE_BLKDEV_VIA8xxx を追加すればと思ってやったが、
 これだと、/dev/hda と認識させられるが、grubのインストールでこける
 「setup (hd0)(hd0,-1)」 ?????
 そのまま再起動すると、「Detecting Andoird-x86 .......」となって一向に進まない。

*色々調べると、新しいKernel(2.6.x)では、HDDは/dev/sd に統合されている様子。
そこで、別のオプション「CONFIG_PATA_VIA=y」を有効にしてビルドしなおすと、
/dev/sdaとして認識してくれ、 grubエラーもでなくなった。

タッチパッドの設定は以下のようにすればよさそう。
1)Debugモードで起動(正常時と同じ「vga=788」を指定)
2)/data が mount されるステージまで進む
3)mkdir /data/system/tslib
4)ts_configure
5)順番に5つの点をタッチ(上左、上右、下右、下左、中央)
6)ls -l /data/system/tslib/pointercal
7)再起動(reboot -f)

2010年5月20日木曜日

VMware/Ubuntu 10.04/EasyInstall

簡易インストールすると、キーボードが使えなくなる問題あり。

スクリーンキーボードを使ってとりあえずログインし、設定をやり直す。

MacBook キーボード/日本語/.... と設定する。
再度ログインすると正常に戻る。

2010年5月18日火曜日

Group Ware gsession2

Mac OS-X Server でも手軽に利用できるGroupWareを探している。
Thetisがよさげだが、インストールが面倒くさそうなのと、最近は更新が内容なのでパス。
次に目をつけたのがZimbraで、途中までやったがうまく動作せず。
そこで、Aipo という国産のものを試すが、BSD系だとインストーラのスクリプトが動作せず。
最後にこの「Group Session 2」にたどり着く。
warファイルをインストールするだけでいいのがお手軽。H2Databaseを組み込んでいるとのこと。これは当方作成のRmtwebも同じだ。ざっと見た感じでは細かいカスタマイズはHTMLやJSPなどを直接触る必要がありそうだが、小規模な組織で必要なものはそろっている感じだ。

関連リンク集:
* Group Session 2 java/H2db/J2EE
* Thetis Ruby/MySQL
* Zimbra php/MySQL/smtp?/ldap?/???
* Aipo java/Postgres/Tomcat

2010年5月8日土曜日

OSS 医療系IT

医療系データ連携:Mirth Connect
- ESB/Mule ベース java/js にてカスタマイズ可能
- サポートするプロトコル:HL7,DICOM,Text,,,
- 日本語の資料がほとんどない

HIS:Medical
- openERPベースの統合医療情報システム
- HL7,DICOMなどの可否が不明

その他の資料:wiki List of OSS healthcare software

医療系IT規格 DICOM とその周辺

医療系で使用されている、データ通信などの規格を調べる。
参考は、株式会社ビゴメントソフトウェアさん。

DICOM:Digital Imaging and Communication in Medicineの略称
医用画像の規格及び通信プロトコルを決める全世界共通仕様
元は北米発の業界仕様であるが、日本メーカも対応を進めている
DICOMでの接続にあたっては、両者のCSを検討して接続設定などを行う。
* CS:Conformance Statementのことで「適合宣言」と訳される
* SCP:サービスクラスプロバイダ サーバ機能
* SCU:サービスクラスユーザ クライアント機能
* IE:情報実体(Information Entity) 個別のデータで、患者情報とか、画像とか、、、
* IOD:情報オブジェクト定義(Information Object Definition) 複数のIEをパッケージングしたもの
* DIMSE:DICOMメッセージサービス要素(DICOM Message Service Element) コマンドとデータの規定
* 転送構文:Transfer Syntaxの訳 データ要素の構成方法を規定するもの
以下の3種類がある
- 暗黙VR Little Endianバイト順(デフォルト)
- 明記VR Little Endianバイト順
- 明記VR Big Endianバイト順

データパッケージングの規格は、動画系ソフト開発でいろいろと調査したが、基本的には以下の2つの次元で定義されている。

 1)コンテナ規格:複数の情報を混合/分離するための規定
 2)コーデック:画像や音声をデジタルデータに変換する規定

DICOMでは、IODでは、1)のコンテナとしてはタグ付き形式を採用しており、2)はタグの指定により形式を選択できるようによなっている模様。

データ転送の仕組みは、リアルタイム系では RTP/RTCP で規定されている。RTPがデータ部の伝送規格、RTCPがコマンド系である。DICOMでは、この規格にあたるのがDIMSEとなる。


* DICOMDIR:画像の索引などに使用するファイル(固定名称)
* Modality:機器の分類や様式 医療現場ではCT, MR, CR, DR, XA, US, ESなど
* MWM:モダリティワークリスト管理(Modality Worklist Management) ModalityからRISに問い合わせる
* MPPS:モダリティ実施済手続きステップ(Modality Performed Procedure Step) 検査の実施状況をRISに伝える仕様
以下のような状態がある。
- 進行中(IN PROGRESS)
- 完成(COMPLETED)
- 中止(DISCONTINUED)


* PACS:画像保存通信システム(Picture Archiving and Communication Systems)
* HIS:病院情報システム(Hospital Information System) 受付システム、電子カルテ、入退院管理、医事会計、薬局管理など
* RIS:放射線科情報システム(Radiology Information System) 放射線機器による検査と治療の予約から検査結果までの管理を行うシステム

2010年3月20日土曜日

ubuntu で、/dev/fb0 (FrameBuffer) を使う

TouchScreenを使うため、tslib(linuxで一般的なeventドライバ)にて ts_calibrate をしようとすると、以下のようなエラーになる。


ts_open: No such file or directory


これは、実はメッセージが不十分であり、ここにあるように、環境変数の指定がないのが原因であった。
以下のように、環境変数をセットすると上記エラーが出なくなる。


export TSLIB_TSDEVICE=/dev/input/event7


上記は、bashでの設定例。なお、デバイスは、 cat /proc/bus/input/devices や、lsusb 、dmesg |grep input などでTouchScreenに割り当てられたものを確認しておく。USB以外のデバイスではどうするかは確認中。

これで動くかと思ったら、今度は次のようなメッセージ。


open fbdevice: No such file or directory


いろいろ調べると、FrameBufferが問題らしい。しかも、/dev/fb0が存在しない。
結局、ここに書いてあったのだが、以下の手順が必要だった。


/etc/initramfs-tools/modules にvesafb とfbcon を追加。
/etc/modprobe.d/blacklist-framebuffer からvesafb をコメントアウト。
update-initramfs -u
/boot/grub/menu.lst のdefoptions にvga=791 を追加。(791:1024x768;16bitColor)
update-grub


これ以外にも、/etc/modules で指定するやり方もあるようだ。

参考:
https://lists.ubuntu.com/archives/ubuntu-jp/2007-December/000638.html
VGA-Mode https://wiki.ubuntu.com/FrameBuffer?highlight=(framebuffer)

2010年2月16日火曜日

Glassfish v3 を移動したら起動しない

インストールした場所を移動したら、起動しなくなった
操作
mv /home/xx/glassfishv3 /export/home/xx/

then cannto start

Waiting for DAS to start .......................................................................................................

Error starting domain: domain1. It didn't start in 600 seconds
Command start-domain failed.

調査
-vフラグを付けて起動

~/glassfishv3/bin/asadmin start-domain -v domain1



解決
OSGi(apache felix)のキャッシュが不整合を起こしていたようだ。

cd /export/home/xxx/glassfishv3/glassfish/domains/domain1/osgi-cache/felix
rm -rf ./*

2010年2月12日金曜日

役に立つページのメモ

Java開発に役立ちそうなので、メモ

Java関連
Object-Oriented & Java maneuver 別室


HUDSONでPXEブート環境の管理
Hudson PXE plugin

仮想マシンを自動的にクラスタ化
Hudson swarmプラグイン

HUDSONで変数、パラメータをビルドで使用できるようにする
Parameterized Build

2010年1月30日土曜日

GlassFishV3 OSGi でのJNDIにバグあり

内部JMS.ConnectionPoolへのlookupが成功したり失敗したりするので、どうもおかしいなと思って調べていたら、ここにバグとして出ていた。

* 1度以上OSGi以外からlookupしていれば見つかるが、そうでないとだめ。
* 3.0.1で修正の見込みの模様

ただし、外部リソースへのlookupは問題ないようだ。

2010年1月27日水曜日

GlassFish(V3) での JMS-MQ(Embeded)

OSGiからJNDI/JMSを利用していてトラブったのでメモ:

GFでEmbedモードの時は、ConnectioFactoryは1つしか作成できない模様。
正確にいうと、作成できるが使用できるのが一つとなる模様。
なぜこれに気づいたかというと、JNDIの一覧を見ていて、4つ作成したCFの中でまともに登録されているのが最初の1つだけだったことから思いついた。
 複数指定していたCFの設定を1つにまとめたところ、嘘のように動作した。

その他のトラブル:

OSGiでは、Thread.currentThread().getContextClassLoader() で返ってくるのが独自のものになる、そのためにContextClassLoaderを利用している部分があると、クラスが見つからなかったり、CASTできなかったりというトラブルが発生する。これは、Activatorのstart(BundleContext bc) などの時も同じであり、そのまま使用するとはまる。

さらに、JMXから呼び出した場合や、JMSのListenerのThreadからonMessage()された場合もやはり異なっているようで注意が必要だ。

残っている問題:

JMS/MessageListener の登録とThreadを完全に消去する方法が不明:
setMessageListener(null); だと、OracleAQではエラーになる。
完全はThreadの停止方法が知りたい!

Class AQjmsConsumer のJavaDocによると、AQjmsConsumer#close()は、ブロックする仕様となっている。

This call blocks until a receive or message listener in progress has completed. A blocked message consumer receive call returns null when this message consumer is closed.