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