沸騰冷水

煮え滾った熱い思いを氷のように冷たく見つめなおしたい

世界のライフハッカー

World Domination Summitなんてものがあるのを知った。ライフハッカーの世界イベント的なものらしい。
よく読んでいる @mehori さんのブログ lifehacking.jp/で紹介されている。
これから詳細な内容がアップされるのが今から楽しみだ。
こんなイベントがあるなら、いつか参加してみたいなーなんて思ったり。

Oracle キャラクタセットの確認 パラメーターテーブル

V$NLS_PARAMETERSにNLS関連の情報が入っている。*1

V$NLS_PARAMETERS
PARAMETER VARCHAR2(64) パラメータ名称
VALUE VARCHAR2(64) パラメータ値
PARAMETERの内容
  • NLS_LANGUAGE
  • NLS_TERRITORY
  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_CALENDAR
  • NLS_DATE_FORMAT
  • NLS_DATE_LANGUAGE
  • NLS_CHARACTERSET
  • NLS_SORT
  • NLS_TIME_FORMAT
  • NLS_TIMESTAMP_FORMAT
  • NLS_TIME_TZ_FORMAT
  • NLS_TIMESTAMP_TZ_FORMAT
  • NLS_DUAL_CURRENCY
  • NLS_NCHAR_CHARACTERSET
  • NLS_COMP
  • NLS_LENGTH_SEMANTICS
  • NLS_NCHAR_CONV_EXCP

この中のNLS_CHARACTERSETがキャラクタセットNLS_NCHAR_CHARACTERSETが各国語キャラクタセット

参考:OTN
http://www.oracle.co.jp/forum/message.jspa?messageID=8045831

*1:Oracle9iについて調査した

VMWare ESXi 仮想マシン作成についての覚え書き

仕事の関係で、VM Ware ESXiをHP ProLiant ML110 G5へインストールを試みた。
検索すれば出るが、このPCのCD/DVDドライブがESXiから認識できないため、USBドライブを使って作業。
こちらの回避方法は特にやっていない。

これからESXiをインストールする人がいたら絶対に注意してほしいことがある。
ESXiをインストールしたら、次に管理クライアントを自分のPCなどに入れることになると思われる。
管理コンソールのGUIから、ライセンス登録を一番最初に行って欲しい

マニュアルなどに特に記述していないのだが、ライセンス登録を行わないと、仮想マシンを作成しても、そこからOSをインストールすることができない。
今回は作業の依頼主から必要なファイルを送ってもらい、PCの設定をしたため、注意文などを読む機会がなかったのも原因だった。
依頼主が多忙なため、その辺のコミュニケーションが不足してしまった。
きっとどこかには書いてあるんだろう。

とにかく、多々ある参考サイトにあるとおり、ESXiをインストールしたら、ライセンス登録、という順序になっているので、手順を追って作業するべきだ。

ASP.NET VB.NET ThreadAbortExceptionについて

ASP.NETのHttpResponse.End()を実行すると、.NETの例外ThreadAbortExceptionが発生する。
MSDNには特殊な例外と書いてある。なんだ特殊って。例外自体が特殊という認識なんですが。。。

ThreadAbortException(MSDN):
スレッドを破棄するために Abort メソッドが呼び出されるときに、共通言語ランタイムは ThreadAbortException をスローします。ThreadAbortExceptionは、キャッチできても、catch ブロックの末尾でもう一度自動的に発生する特殊な例外です。この例外が発生すると、ランタイムは、スレッドを終了する前に finally ブロックをすべて実行します。スレッドは、finally ブロックで無制限に計算を実行することも、Thread.ResetAbort を呼び出して中止をキャンセルすることもできるため、スレッドが終了するかどうかは保証されません。中止されたスレッドが終了するまで待機する場合は、Thread.Join メソッドを呼び出すことができます。Join は、スレッドが実際に実行を停止するまで戻らないブロッキング呼び出しです。

http://msdn.microsoft.com/ja-jp/library/system.threading.threadabortexception(VS.80).aspx

このHttpResponse.End()の内部でAbortが実行されているということですかね。
調べてみると、このThreadAbortExceptionが実行されても、処理は継続されている模様。
意図的ではなく発生しているAbort以外は実のところエラーではないということでしょうか。
Abortしたよ!ってのをわざわざ例外発生して知らせてくれているということですね。

この問題が発生している社内システムでは、例外は全てキャッチして、イベントビューワに内容を出力しておき、ユーザー打上げのみならず、開発側から積極的に分析できるようにしてある。
そのためこのThreadAbortExceptionが発生する度、イベントビューワに例外が起きたという出力が残ってしまうのだ。

ユーザーの端末にはエラーが見えていないにも関わらず、開発側の私としてエラーが発生しているように見える。うーん、普段は逆パターンになるんだけどなぁ。

対策としていろいろ議論されているが

  • 無視する
  • HttpResponse.End()を呼び出さない

の2つで対策を検討。

1:無視する

1では、イベントビューワに書き出さないという方向で検討した。
例外オブジェクトを作成するとき、ThreadAbortExceptionの場合は処理しないという作りか、発生しているファンクションのTry〜Catchで意図的に取得し、処理は特に何もしない、という2パターン。
前者を行うのは、これ以外でThreadAbortExceptionが発生したときに検知できなくなるため、断念。
後者で行こうと思ったのだが、この例外はなんとCatchした後、Catchの末尾でもう一度発生するらしい。
この例外が発生する関数の呼び出し側にTry〜Catchが書かれていると、そちらにもThreadAbortExceptionが発生してしまうのだ。
これでは呼び出し側の親へ親へ同じ記述が増えてしまう。

2:HttpResponse.End()を呼び出さない

そこで2の案を考えた。
HttpResponse.End()を呼ばない仕組みに変更できないかということ。
処理内容としては、データをCSV形式にしてユーザーへ送信する。というものなので、代替手段として、HttpResponse.Flush()→HttpResponse.Close()に置換えてみる。
HttpResponse.End()と、この関数の大きな違いは、最終的に呼び出されるEndRequestイベントがHttpReponse.Close()では発生しないようだ。

このイベントというのは

EndRequestイベント
ASP.NET が要求に応答するときに、実行の HTTP パイプライン チェインの最後のイベントとして発生します。

http://msdn.microsoft.com/ja-jp/library/system.web.httpapplication.endrequest.aspx

とある。

しかしHttpResponse.Close()もクライアントとのリクエストを閉じるのため、内部的に同じイベントが発生するんじゃないのか?と少し疑問。そこについては深く調べなかった。

この代替案にてテストを実施すると、結果の出力はもちろん変わることがなく、さらに例外も発生せずに処理が終了できた。

ORACLE 9iでの正規表現

Oracleでの正規表現を行いたくて調べてみた。

owa_patternパッケージ

amatchファンクション
select * from dual where owa_pattern.amatch(Column, start, pattern, flg)

  • column:対象のカラム
  • start:マッチを開始する文字数
  • pattern:正規表現パターン
  • flg:大文字、小文字を判別するかのフラグ
http://otndnld.oracle.co.jp/document/products/as10g/1013/doc_cd/web.1013/B28606-01/pspatt.htm

レスポンスはやはり良いとは言えないので、できる限り使わない設計をしたほうがよさげ。

ASP.NET AJAXのJavascript出力について

なんだかASP.NETで使っているAJAX Control ToolKitとやらで、ユーザーの環境でエラーが出ていたりする模様。
IEのJavascriptエラーが出力されているみたいだが、どうみても自動で吐き出されているJavascriptにしかみえない。
ためしにFireBugを使って見てみるとエラーだらけでどこが本当の原因なのかわからないので、現象からネットで調べてみた。
AjaxControlの各種Extenderなどと一緒に貼り付けるToolScriptManagerのプロパティCombineScriptをFalseに設定すると、自動でサーバー側でJavascriptをまとめてしまう機能を無効にでき、ソースのバイト数は増えるが、問題が解決する場合もあるとか。

ORACLE Application Server(OAS)のログ設定

ORACLEの Application Server(OAS)*1 周りで調査したこと覚え書き。

OASログの肥大化

テスト環境にてOASのログが大きくなってリソースを圧迫していたので調査。
$ORACLE_HOME/sysman/log/em-web-access.logへログが累積されていた。
別環境では日別にem-web-access-YYYY-MM-DD.logとして吐き出されていたので環境の違いを見てみた。
$ORACLE_HOME/sysman/j2ee/config/emd-web-site.xmlを編集すればいいみたい。


これを


に修正する。
xml編集後はApplication Server Controlを再起動すれば完了。

*1:バージョン:Oracle9i Application Server - 9iAS