スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Notes のエラーコードを調べる - show message

2009年03月31日 00:02

昨日はNSDについて拍手など多くのフィードバックを頂き、本当にありがとうございます。
まだまだ立ち上がったばかりのブログなので、これだけ短時間で多くの拍手を頂けたことは初めてですし、NSDについては来週以降のトピックで是非とも紹介させて頂きたいな、と思います。(土日にまとめて書いている関係で、書こうと思っているトピックもすぐには反映されません。。すみません。。。)

また、これは公開情報としても出していかないといけない情報ではないかな、と思いました。すぐには実現出来ないとは思いますが少しずつ実施していきたいと思うので今後も御訪問よろしくお願い致します。


さて、今日はNotesのエラーコードについてです。時々サーバーのメッセージが0x0807 のようにエラーコードで表示されてしまう事があります。

これは何かおかしくなってそのような表示になってしまっていることもあるし、詳細ログなどでエラーコードを意図的に数値で出しているところもあるでしょうし、色々なケースがあるのではないかと思います。


このエラーコードからエラーメッセージを探す方法は色々な方法があるのですが、簡易な方法として以下のような方法があるのをご存知でしょうか。

(参考)Lotus Notes/Domino で表示される 16 進数のエラーコードを変換する方法 (文書番号 730081)

Lotus Domino 7からの新機能ですが、コンソール上で show message を実行する事によってエラーメッセージを知る事が出来ます。

こんな感じです。

> sh message 143
Halt: 他のプロセスがクラッシュしました(このプロセスではありません)。前回のクラッュを報告してください

現時点では1文字目が日本語だと以下のように1文字目が切れてしまいますのであくまで参考程度にご利用頂ければと思います。

> sh message 807
> ーバーが応答しません。

それとエラーメッセージ → エラーコード、と言うコマンドとか手法もあればいいのですが、残念ながら今の時点ではこのような機能は提供されていないようです。

 こういうツールはあまり必要になることもないかもしれませんが、何かのときにでも思い出してもらえればと思います。。
スポンサーサイト

NSD Basics

2009年03月30日 00:02

Notes/Domino がクラッシュした際には、NSDファイルが生成されますが、このファイルの見方のようなものにはどの程度興味があるでしょうか。(R5.x以前をご利用の方は notes.rip と言うファイルになると思いますが)もちろんInternal Dataも多いので何から何まで紹介する事は出来ないのですが、概要だけでも知りたい、と思う方は多いのではないかな、と思ったので。

このブログでNSDの話を簡単に取り上げようかな、て思っているのですが、需要があるようだったら少し本格的な内容を考えてもいいかな、と思っています。拍手でもコメントでも何かフィードバック下さい。

Web上で入手できる資料では私が知っている限りでは、英語になってしまうのですがこれが一番いいのではないかな、と思います。 Lotusphere 2008の資料のようですね。


HND 107 - Using IBM Lotus Domino Notes System Disagnostic (NSD) Soft copy Hand out

NSDからどの程度の事がわかるのか?と言う事や簡単なデータの見方などが紹介されていてこのブログで取り上げたいなあ・・と思っているイメージにも近いのではないかと思います。

DAOS FAQ 公開されています

2009年03月27日 00:03

以下のような文書が公開されています。

DAOS よくあるご質問 (FAQ)

# 大川さんのブログでも紹介されているのでトラックバックをつけさせていただきました。

DAOSは機能だけを聞くと、「共有メールと似たような機能」と思って添付ファイルを集約した分色々不便になったりするのではないか?と思う方もいるかもしれないですが、DAOSでは添付ファイルをNSF内ではなく、暗号化された通常ファイルとして保存する事によってバックアップなどの柔軟性を高めています。

このような点について簡潔なQA形式でまとめられているので、一度読んでみるとよいのではないかと思います。どんな感じの内容か分かるように、代表的なQAなども抜粋してみます。
単純に冗長な添付ファイルを減らす、と言うだけでなく運用面なども考慮されて扱いやすくなっているのが分かるのではないでしょうか。

システム構成編
Q3. DAOSリポジトリーは、どのように実装されていますか。
A3. DAOSリポジトリーは、OSレベルのファイルシステムとして実装されています。1つの添付ファイルにつき、拡張子NLO(Notes Large Object)を持った1つのOSレベルのファイルが作成されます。
Windowsサーバーの場合の例を示します。
(図は省略します)
NLOファイルは、デフォルトではサーバーIDファイルで暗号化されますので、ファイルシステムに直接アクセスして開くことはできません。ファイル名はランダムに決定されますので、ファイル名から中身を想像することも不可能です。


運用編
Q1. DAOS環境でのバックアップの考慮点を教えてください。
DAOS環境下では、NSFファイル、NLOファイル、daos.cfg、daoscat.nsf の4種類のファイルのバックアップを取得する必要があります。

基本的には、サーバーを停止させてバックアップを実行します。Dominoバックアップ・リストアAPIを実装したバックアップツール(Tivoli Data Protection for Domino, etc)でオンラインバックアップを行う場合、NLOファイルよりもNSFファイルを先にバックアップします。これは、NSFから参照されるNLOファイルが全てバックアップに含まれるようにするためです。

バックアップする間隔は、サーバー文書のパラメーター「オブジェクトを削除するまでの保留日数: 」で指定した日数よりも短い間隔にする必要があります。これは、リストアする時を考慮し、NSFから参照されるNLOファイルがディスク上に存在するようにしておくためです。

NLOファイルは、一度作成されたら、更新されることはありません。従って、NLOファイルは、バックアップツールを使用して差分バックアップが可能です。


# 余談ですが、DAOSは「デイオス」と読みます。D・A・O・Sとかダオスとか色々想像してしまうと思いますが。。 これと似たものとして Domino Access For Microsoft Outlook (DAMO)もダモと呼ばれることも多いですが、正しくは「デイモ」と読みます。。この辺は日本人には少し分かりにくいですね。

Nagle algorithm

2009年03月26日 00:19

拍手があると励みになる、と言う事を記事に書いたら思ったよりたくさんの反応があってうれしかったです。そもそもワークスペースの操作、についてはツールが欲しかった方も多かったのかもしれません。

さて、今日はネットワークの絡むお話をしてみようと思います。
Notes の問い合わせで、Nagle algorithm とか出て来たらちょっととっつきにくいですよね。
残念ながらこの話は、NotesNetworkの問題では度々出てきます。

# 実はどう読むか悩んでいたのですが、ナグルアルゴリズムと言うカナが振られているサイトをよく見ますが、John Nagleとかが提唱者なようで、英語的に考えるとどう考えてもネーグルなんじゃないかと思いますが実際のところどうなのでしょう。。。(ちなみにアルクで検索したらネーグルとなっていました。。)

この文書の7.5のところを読んでみて見ると、Nagle アルゴリズムを無効にしてみるような内容の記事があります。
トラブルシューティング:クライアントとサーバー間の接続の問題 (#731795)

Nagle Algorithm は、NotesNetworkパフォーマンスに悪い影響を与える事が分かってきて、8.5 からデフォルトで無効になっています。このような背景もあり、7.x 及び 8.0.x の環境においても無効にすることを推奨しています。

「DEBUG_PD_NAGLE_OFF & EnableNagle: the Nagle algorithm should be disabled」(Domino Wiki)

Notes側でどんな症状が出るのか?と言うと、サーバー接続やDBを開く際にはそれほど大きな遅延が無いのですが、複製や添付ファイルのダウンロードのように大きなストリームデータを扱う際にパフォーマンスが大きく遅延します。別に止まったりするわけではないので気が付きにくいので、ネットワークのスループットなどにかなり自信がある環境でないと気が付きにくいかもしれません。

このアルゴリズムはNotesだけが使っている怪しいアルゴリズムではありません。
RFC896 などで規定されているもので、小さなネットワークパケットが頻繁にネットワーク上を飛び交うの抑えるためのものです。
 送信データのサイズがMSSを超えない場合に、全ての送信パケットにAckが帰ってくるまで送信バッファを遅延させるのですが、Windowsではこのタイムアウトがデフォルトで200msになっているのでうまく帰ってこないときはパケットが200msほど遅延してから送信されます。小さな遅延に思うかもしれないですが、パケット単位で周期的にこの遅延が起こると結構な影響を受けてしまいます。

 更に悪い事にこれは遅延Ack(Delayed ACK)を相手側が有効にしていると、受け手はAckをバッファリングするので更に応答遅延してしまったりもするし、色々な場面でヒットします。

と言うわけで、Notesでヒットする事は度々あるのですが、ネットワーク関連の話になると話が分かりにくく感じてしまう部分もあるかと思うので、関連症状に当たったらちょっとこの可能性は無いかな?と思い出してもらえるといいかな、と思います。


DSKTOOL - ワークスペースアイコンのエントリを編集する

2009年03月25日 00:33

最近記事紹介が続いたので、ツールの紹介でもしようかな、と思います。
出来るだけ反応がいいものを取り上げたいと思うので是非気に入ったら拍手なども御利用頂けると本人も励みになりますのでお願いします。。

As-is なのでツールに対するサポートなどは提供されないのですが、以下のようなツールが提供されているのをご存知でしょうか。

DSKTOOL.EXE Utility - Updates Notes desktop icons for user after recertification (#4004260)

CUIベースでワークスペースアイコンの削除や追加を行うことが出来ます。

7.x では、Desktop6.ndk が利用されているため、「6.x DSKTOOL.EXE Utility」をダウンロードしてください。8.xでも、「6.x DSKTOOL.EXE Utility」をを使うしかないのですが、desktop8.ndkをdesktop6.ndkに変えないと動きませんでした。。

こんな感じで使います。
手順:
1. 実行前はdesktop*.ndk をバックアップしてから作業を行ってください。
2. ダウンロードしたファイルは自己解凍形式になっているため、Notesクライアントのプログラムディレクトリに、dsktool.exeを解凍してください。
3. プログラムディレクトリに以下のような形式のスクリプトファイルを作成してください。
 使えるコマンドについてはリンク先の文書を参照してください。

Script.txtの内容
Delete ServerName/Org!!mail\XXXX.nsf
Delete ServerName/Org!apps\YYYY.nsf

4. コマンドプロンプトから以下のコマンド例のように、スクリプトファイルを指定する事によって実行する事が出来ます。
注: クライアントが起動している際に実行すると、自動的に終了されるので注意してください。

コマンド例:
dsktool.exe script.txt -V -I
※ I はiの大文字です。

5. Notesクライアントを起動すると、アイコン情報が削除された状態のワークスペースにアクセスする事が出来ます。



ツールのサポートが限定されるので、大規模なサイトには向かないと思いますが、サーバー名の変更などには便利なときもあるのではないかと思います。

クライアントをサーバー上で動かしたい

2009年03月24日 00:07

特にR4.x からご利用のお客様では簡易なシステム管理作業は、サーバー上でクライアントを動かして、ローカルのアクセス権で処理してしまいたい、と思う方は多いのではないでしょうか。

これは非常に便利な方法だったと思うのですが、残念ながらこの方法は現在ではサポートされません。 特に6.x以降のDominoサーバーでは、nlnotes.exeを無理やり起動するだけでエラーメッセージが出るのが分かると思います。以下の文書にある通りです。

Running the Notes client on the same machine as a Domino server (#1094021)

しかし、この文書を読むと、「別のディレクトリにプログラムディレクトリとデータディレクトリを入れればサポートされる」と読めるのでこの点については違和感を感じてしまう方もいるかもしれません。
 これは、「Where it makes sense」と言うフレーズにも代表されるとおり、アーキテクチャ上の話について言及したもので、実際にはサーバーとクライアントが両方サポートしているOSはR6.x 以降は無いので、結局はサポートされません。 この文書が想定しているのはAPI プログラムをスタンドアロンプログラムとして動かす場合には、このようにクライアントをサーバー筐体にインストールして利用する事も考えられるからです。APIが主に使うnnotes.dll はサーバー・クライアント共に同じものなのでディレクトリさえ分けてもらえれば、あまり影響が無いためです。

なので、サポート的にはこのようなアクセス方法の代替機能として、フルアクセスアドミニストレータを利用する必要があるわけですが、やはり何でもかんでもフルアクセスアドミニストレータで作業するわけにも行かないので、運用上厳密にどのような場合に使うのか、と言うのは規定しておいたほうがよいのではないかと思います。

同じディレクトリからサーバーとクライアントを起動すると何が問題なのでしょうか?
このような実行方法を示すのに分かりやすい例として、サーバーコンソールから「load nlnotes」を実行して動作を見てみてください。
 このとき、ノーツを終了するとサーバーのシャットダウン処理がスタートします。
これは、ノーツ内で終了処理が入ると、メモリを共有しているサーバーもシャットダウン状態に入ってしまうためなのですが、このようにクライアントとサーバーで考え方の違うメモリ管理をしているために正しく処理されない場合が発生するからです。

とは言え、簡易にサーバー上でクライアントを使えたら便利だなあ・・・・と思うときは確かにあるのですが・・・・

Lotus Domino 8.5 IF2 / 8.0.2 FP1 IF1 が出ています

2009年03月23日 00:34

サーバー側で、 Lotus Domino 8.5 IF2 と Lotus Domino 8.0.2 FP1 IF1 が出ています。

(参考)MsgMimeDirectoryStreamStore 処理で IMAP がクラッシュする(文書番号 732679)

IMAPに関連したクラッシュなので、Notesのみを利用している環境などでは影響ありません。
該当する方はFix Central からのダウンロードを検討して下さい。

Notes と iCal/vCard

2009年03月19日 00:04

インターネット宛に会議招集を送るとどうなるか知っていますか?

そんな大それたことを・・・て思うかもしれないですが、Domino 6.x以降だとiCal 形式(*.ics)で届きます。なので、Outlook ユーザーなどでもちゃんと会議招集を受け取る事が出来るのです。

他にもNotes クライアントからカレンダーを使用しているときなどは書き出しのオプションでiCal が使えたり、個人アドレス帳でvCard 形式で書き出せるようになったり、vCardやiCalが使える場面がLotus Notes でもかなり増えてきました。

以下に二つの記事を紹介しますが、NotesのiCalなどを使用した相互運用などについて紹介したものです。 Notesでどんな風にiCal が使えるかがざっと分かるので是非一度読んでみてください。

IBM Lotus Notes 8.5 iCalendar: Interoperability, implementation, and application
Support for iCalendar and vCard in Domino

Lotus 製品のライブ・デモ

2009年03月18日 00:09

 前回Ultraliteのデモサイトを紹介しましたが、Lotus製品のデモとして以下のようなサイトがあることを御存知でしょうか。

Lotus製品のライブ・デモ(トップページ)
Lotus ソフトウェア デモ

YouTubeでも以下のようなサイトがあることを教えて頂きました。日本語でのデモがあるのはいいですね。以前のエントリでマルチメディアを利用したコンテンツが増えている事に少し触れていましたが、日本はまだだと思ったのですが営業資料などではどんどん活用されているみたいですね。
 これと同じように、マルチメディアの技術情報とかあったら需要があるのでしょうか?(個人的には技術情報だと、迅速に必要な部分だけ読めるテキストの方が便利なのですが・・・)
IBM Lotus Channel (YouTube)

ブログを始めるようになって、こういう情報提供をしてくれる方が出てきて個人的にも色々勉強になっています。

最後にLotus iNotes のWidget機能のデモをつけておいたら削除されてしまったので(詳細は大川さんのコメントを参照してください)、Quickr 連携のデモでもつけておきます。




Lotus Domino 8.5 performance for IBM Lotus Notes users

2009年03月17日 00:05

こんな文書が出ていますね。

IBM Lotus Domino 8.5 performance for IBM Lotus Notes users

もちろん8.5が8.0より悪い結果が出ていたらこんなベンチマークを公開する意味はなくなってしまうので、当然8.5のほうがよいパフォーマンスを示した、と言う内容に決まっているので、少し詳細をみてみましょう。

プラットフォーム毎に結果が並んでいますが、マシンスペックなども同じでないのでプラットフォーム毎の比較はあまり重要ではありません。ここでの記事は全てのプラットフォームで有意な効果があった、と言う風にに読んでおけばいいのではないかと思います。

 今回のレポートでのパフォーマンス改善のキーは、どれも劇的なDisk I/Oの低減が確認出来た、ということに尽きるのではないかと思います。「xx% レスポンス向上」と言うのは環境によってはそれほどの数値効果が得られないかもしれないのですが、I/O低減はどんなマシンスペックでも効果が得られるものなので非常にポジティブな結果なのではないかと思います。

この結果を注意深く見ると、テスト条件として8.5では以下の設定が加えられています。

・ Compress document data
・ Use Lotus Domino attachment and object service
・ Debug_NSF_Compress_All_Notes=1

つまり、I/O低減のため、文書の圧縮と、添付ファイルに対してはDAOSを有効にしていることがポイントなのではないかと思います。
 DAOSに関しては、Server.loadのN85Mail workload とかを使っている限りではそれほど重複した添付ファイルが出ない気がするので、DAOSの効果よりも文書圧縮の効果が大きく出たのではないかと思います。(ちなみに、文書の圧縮はODS 48が必須ですが、8.0.1 から使用可能です。)
 HTTPのGZIP圧縮とかでもよく懸念される事ですが、「データを圧縮したり解凍するとCPU 負荷が高そう」と思ってしまうのですが、ほとんどの場合ドミノではディスクがボトルネックになっている事が多いので、圧縮してデータのサイズを小さくしてI/Oを減らす効果は圧縮や解凍処理のペナルティより効果が高いようです。

もちろん、文書圧縮の効果だけでなく、Lotus Domino 8.5 では Routerタスクのパフォーマンス向上で各種最適化が行われた、とも聞いているのでI/O低減はその効果もあるんだと思いますので何もかもこの設定のおかげだ、と言う訳では無いと思います。

興味がある方はベンチマークレポートもじっくり見てみてください。

Lotus 評価版/体験版サイトが更新されました

2009年03月16日 00:12

Lotus の評価版サイトが更新されました。

IBM Lotus 評価版 / 体験版サイト

8.5やSametimeに加えて、Symphony の日本語版ダウンロードサイトなどのリンクも加わっているようです。

バージョンアップなどのご検討の助けになればと思うので是非ご利用下さい。

3月分のLotus Notes/Domino 注目サポート技術情報が発行されました

2009年03月13日 00:13

掲題の通り、3月分のLotus Notes/Domino 注目サポート技術情報が発行されました。

Lotus Notes/Domino 注目サポート技術情報 (2009年3月)

今月のハイライトは、8.0.2 FP1 CCH1 のリリース情報が含まれたのもそうですが、8.5 関連の情報として、以下のトピックも含まれました。

Lotus Notes Basic クライアントから Lotus Domino Designer を起動することができない (#732637)

8.5 のデザイナーはスタンダード版でのみインストール可能なのですが、その環境で Notes Basic を使っている場合には、デザイナークライアントは同時起動出来ない、と言う問題です。

他にもアクセス数の多かった技術情報が寄せられているので是非一度ご確認下さい。

iNotes Lite Framework - Common Property

2009年03月12日 00:14

iNotes Lite Framework ではグローバル変数のような仕組みを使う事が出来ます。
これは、Common Property と呼ばれるのですが、今日はこの詳細について見てみます。

バックナンバー
1. iNotes Lite Framework - Frameset
2. iNotes Lite Framework - iNotes Lite Widgets
3. iNotes Lite Framework - Lazy loading code
4. iNotes Lite Framework - Basic Layout
5. iNotes Lite Framework - Common Property

(このエントリは以下の記事を参考に書かれています)
iNotes Lite framework (Notes/Domino Wiki)

iNotes Lite framework では、二つ以上のWidgetが一つのProperty を扱えるような"Common Property"と言う方法を提供しています。 Common propertyは名前つきの値で、どんなWidgetもアタッチする事が出来ます。
Common Property に対して変更が起こった場合、Widget にアタッチしているEYK() [observe()] メソッドが非同期的に実行されます。
p-color と言う名前のCommon Propertyと値を得るには、以下のようにします。

var oProperty = EPx.get('p-color'); 
var vValue = oProperty.BoB;

BoB vValue
EPx com_ibm_dwa_misc_commonProperty
BRW setValue

common propertyに新しい値をセットするには以下のようにします。

var oProperty = EPx.get('p-color');
oProperty.BRW('#808080');


common property を使用すると、以下のようなWidgetを作る事が出来ます。
com_ibm_dwa_ui_colorBox widget がどのように実装されているのかを知ることなく、<select> のonChange属性に書き込む事ができるようになります。


// Box changing color
// ------------------
function com_ibm_dwa_ui_colorBox(sId){
var oElem = AAA.EcK.getElementById(this.sId = sId);
var oProperty = EPx.get(oElem.getAttribute('com_ibm_dwa_misc_observes_color'));
oProperty.attach(this);
this.EYK(oProperty); // Pick up existing value
}

// =====================================
// Observe the color
// Inputs:
// oProperty - The property to observe
// =====================================
com_ibm_dwa_ui_colorBox.prototype.EYK = function com_ibm_dwa_ui_colorBox_observe(oProperty){
// ERD() checks if oProperty represents the latest value - As this function is called asynchronously
if (oProperty.ERD && !oProperty.ERD())
return;
var oElem = AAA.EcK.getElementById(this.sId);
oElem.style.backgroundColor = oProperty.BoB;
};
更に、以下のような要素があります。

<div class="s-stack" style="padding-top:5em;">
<div class="s-basicpanel" style="border:solid black 1px;"
com_ibm_dwa_ui_widget_class="com_ibm_dwa_ui_colorBox" com_ibm_dwa_misc_observes_color="p-e-colorselect-currentselected">
</div>
</div>
<div class="s-toppanel" style="height:5em;">
<form>
<select name="e-colorselect" class="s-label-light" onchange="EPx.get('p-e-colorselect-currentselected').BRW(this.value);">
<option value="#ffffff">Select color</option>
<option value="#ffc0c0">Red</option>
<option value="#c0ffc0">Green</option>
<option value="#c0c0ff">Blue</option>
</select>
</form>
</div>



iNotes Lite Framework - Basic Layout

2009年03月11日 00:05

今日のトピックは iNotes Liteでのレイアウトテクニックです。
 CSSの具体例に目を奪われがちですが、Table を入れ子にした場合にブラウザパフォーマンスが落ちる事を避けるために積極的に今回のようなDIV 要素を利用した配置を採用する事によって、iNotes Liteではブラウザのレンダリングスピードを向上させています。

バックナンバー
1. iNotes Lite Framework - Frameset
2. iNotes Lite Framework - iNotes Lite Widgets
3. iNotes Lite Framework - Lazy loading code
4. iNotes Lite Framework - Basic Layout
5. iNotes Lite Framework - Common Property

(このエントリは以下の記事を参考に書かれています)
iNotes Lite framework (Notes/Domino Wiki)


iNotes Lite のコードでは、タグを入れ子にして使う事を避けています。入れ子にされたtableタグはブラウザのパフォーマンスに大きく影響する事がわかったからです。
いくつかのAJAXフレームワークは入れ子にした入れ子にされたtableタグの代わりになるようなJavaScriptベースのレイアウトをしますが、iNotes Lite ではコードサイズの増加を避けるためにその利用も避けています。

注: DOM Inspector ツール(IE Developer Toolbar, Firebug etc)もレイアウトテクニックを理解する助けになると思います。
.

iNotes Lite では、 広範囲にわたって CSS をレイアウト目的で使用しています。 いくつかのキーになるCSSクラスをここで示します。







Class Description
s-basicpanel 全体の要素の余白全体を占める要素となります。この次の要素はこの要素の配下になります。
全体の要素の余白を指定した要素で埋めたいときや、複数の要素を一つの領域に重ねたくないときなどに便利です。
s-stack 含まれる要素の全体を占める要素となります。次の要素はこの要素と同じ位置に来ます。
複数の要素を一つの領域に積み重ねたいときに便利です。
s-toppanel この要素は、含まれる要素の全幅を占めた状態で上部に配置されます。
全体の要素内の上部に配置したい要素があるときに便利です。
s-rightpanel この要素は、全体の要素の全高さを占めた状態で、右側に配置されます。
全体の要素内の右側に配置したい要素があるときに便利です。
s-bottompanel この要素は、含まれる要素の全幅を占めた状態で下部に配置されます。
全体の要素内の下部に配置したい要素があるときに便利です。
s-leftpanel この要素は、全体の要素の全高さを占めた状態で、左側に配置されます。
全体の要素内の左側に配置したい要素があるときに便利です。


上のクラスを利用した例を以下に示します。 青いエリアは、5em分(注:1em=1文字分)だけ上部を占めており、赤いエリアが残りを使うようにしています。s-basicpanelが先に定義されていますが、s-toppanelが計算された後に余白を占めているのが分かるのではないかと思います。

<div class="s-stack" style="padding-top:5em;">
<div class="s-basicpanel" style="border:solid red 1px;background-color:#FF8080">
</div>
</div>

<div class="s-toppanel" style="height:5em;border:solid blue 1px;background-color:#8080FF">
</div>


Basic Layout

次の例は、青いエリアが上部5em分を占め、赤紫色部分が左、緑部分が残りを占める場合の例です。上の例と同様に、下部のs-basicpanelが黄色枠(少し見にくいですが)で示されており、その中に二分割された右側に緑枠のs-basicpanelが位置しているのが分かります。

<div class="s-stack" style="padding-top:5em;">
<div class="s-basicpanel" style="border:solid yellow 1px;">
<div class="s-stack" style="padding-left:5em;">
<div class="s-basicpanel” style="border:solid green 1px;background-color:#80FF80">
</div>
</div>
<div class="s-leftpanel" style="width:5em;border:solid magenta 1px;background-color:#FF80FF">
</div>
</div>
</div>
<div class="s-toppanel" style="height:5em;border:solid blue 1px;background-color:#8080FF">
</div>


Basic Layout (2)

先に指定した要素が上に来ないことに気が付くと思いますが、これはs-stack CSSクラスが position:absolute スタイルを使用しているためですが、iNotes のレイアウトでもよく利用されます。



iNotes Lite Framework - Lazy loading code

2009年03月10日 00:50

今日は iNotes LiteのLazy loadingについてです。必要なときにだけコードを読み込むようなことが出来るようになったために iNotes Liteでは読み込むコード量を最小化することが出来るようになった、とよく言いますが、この技術によるところも大きいのではないかと思います。
今日はそんな話です。

バックナンバー
1. iNotes Lite Framework - Frameset
2. iNotes Lite Framework - iNotes Lite Widgets
3. iNotes Lite Framework - Lazy loading code
4. iNotes Lite Framework - Basic Layout
5. iNotes Lite Framework - Common Property

(このエントリは以下の記事を参考に書かれています)
iNotes Lite framework (Notes/Domino Wiki)

iNotes Lite Widget では、コードの読み込みを実際に必要になるまで先延ばしにする事が出来ます。これは、"lazy loading"と呼ばれています。
Lazy Load を実装するには、始めにEKc.prototype.EQj に対してエントリを追加する必要があります。EKc.prototype.EQj はiNotes Lite Widget クラス名を "code chunk symbols" のリストと関連付けているテーブルです。
これは「Lazy Loading Table」と呼ばれます。Lazy Loading Table に追加するには、Custom_JS_Lite サブフォームにあるScene_PostLoad_Lite() で行うのが一番よいのではないかと思います。
var asClass = (s_SceneName || '').split(':');
if (asClass[1] == 'EVy')
EKc.prototype.EQj['com_ibm_dwa_ui_hello'] = ['Hello'];}

Scene_PostLoad_Lite() はWidgetが初期化を終える度に実行されます。Root Element ID Widget の名前が組み合わさった形で、s_SceneNameに格納されています。なので、asClass[1] はWidgetの名前が入っています。
EVy[com_ibm_dwa_ui_panelManager] はiNotesの初期化の非常に早い段階で実行されるため、これを利用します。
この後に、以下のタグを l_StdPageOperations, l_StdPageOperations_Gecko, l_StdPageOperations_Safari などのフォームの適切な場所に挿入します。
<NotesVar name=s_GetHelloScript type=number initialvalue={0}>}

更に以下のタグも入れます。
<InsertNotesSubForm name=@{@If(s_GetHelloScript != 0; "l_Hello"; "")}>}

最後に以下のような設計要素を持つ、l_Hello Notes サブフォームを作成します。
function com_ibm_dwa_ui_hello(sId){
var oElem = AAA.EcK.getElementById(sId);
oElem.innerHTML = 'Hello world';
}}

// Specify the symbol in all non-capital letters here
EKc.prototype.FKd['hello'] = true;}

EKc.prototype.FKd [com_ibm_dwa_io_widgetListener.prototype.oLoaded] オブジェクトはロードされたモジュールを管理しています。また、複数のコードをlazy loading tabuleのエントリに指定する事も出来ます。

一度、Lazy loading table とlazy loading に必要なその他のものを指定すれば、iNotes Lite framework はどのコードがロードされていないかが分かるので、自動的にロードし始める必要があるかどうかを決定する事が出来るようになります。
ロードが必要になった場合には、iNotes Lite framework は自動的にロードされていないコードを収集し、一つのHTTPリクエストの間に、ブラウザの種類に応じて、 l_StdPageOperations, l_StdPageOperations_Gecko, l_StdPageOperations_Safari などのフォームを使用して読み込みを開始します。このようにしているのは、HTTPリクエストの増加はクライアントの応答時間に大きく影響するためです。

注:  iNotes Lite frameworkはl_StdPageOperations, l_StdPageOperations_Gecko, l_StdPageOperations_Safari などのフォームを読み込むときに自動的に、s_Getと言う接頭辞や、Script と言う接尾辞をcode chunk symbols につけます。この問題は、8.5.1 に修正される予定です。

Server.Loadに関連したwhite paperが出ています

2009年03月09日 01:03

iNotes Lite のトピックはひとまずお休みして・・・・

以下のような文書が発行されています。
Notes/Domino 8.x に関連したServer.Load の使い方とその実践例のような話です。
Server.Loadの実際の使い方だけでなく、各種INI設定や、nmonやパフォーマンスモニター等のパフォーマンス情報収集ツールの使い方なども紹介されていて色々と参考になるのではないかと思います。

"Using Server.Load to evaluate and enhance IBM Lotus Domino server performance".

 Server.Load をどのくらいの方が使った事があるか分からないのですが、始めにエージェントを作ってメールデータベースをある程度作ってから、初期化用のテストを流せば、後はパラメータを入れるだけで色々な負荷テストが行えるので一度試してみてもよいのではないかと思います。

このWhite Paper でも紹介されていますが、Server.Loadについては過去にも色々な文書が出ているのでここで簡単にまとめて紹介させていただきます。

Howto:Quick start guide to IBM Lotus Domino Server.Load V8

Lotus Domino 7 Server.Load の新しいワークロードと機能

IBM Lotus Notes/Domino 6.5 Server.Load 新機能ご紹介

その他:
IBM Lotus Notes V8 workloads: Taking performance to a new level
New workloads and features in Lotus Domino 7 Server.Load

Blog
Server.Loadは使える! (大川さんのブログより)

iNotes Lite Framework - iNotes Lite Widgets

2009年03月06日 00:13

iNotes Lite Framework の第二弾はiNotes Lite Widget と言うiNotes Liteフレームワーク上に作られたUI についてです。

バックナンバー
1. iNotes Lite Framework - Frameset
2. iNotes Lite Framework - iNotes Lite Widgets
3. iNotes Lite Framework - Lazy loading code
4. iNotes Lite Framework - Basic Layout
5. iNotes Lite Framework - Common Property

(このエントリは以下の記事を参考に書かれています)
iNotes Lite framework (Notes/Domino Wiki)

出来るだけ翻訳記事にならないように、少しでも自分の言葉で書こうと思ったのですがこの章は非常に例とかも分かりやすいので、元々のお話のままのほうがいい気がします。。
なので、ちょっと翻訳記事っぽくなるのですが、その点はご容赦下さい。。


以下のような"Hello World"を挿入するシンプルな Widgetを作る事を考えます。
以下のようなコンストラクタを始めに作成します。

function com_ibm_dwa_ui_hello(sId){
var oElem = AAA.EcK.getElementById(sId);
oElem.innerHTML = 'Hello world';
}

このWidgetを使うために以下のようなタグを用意します。
<div id="e-hello" com_ibm_dwa_ui_widget_class="com_ibm_dwa_ui_hello"> </div>

以下のようにして呼び出します。
EPl(AAA.EcK.getElementById('e-hello')); 

EPl() [com_ibm_dwa_ui_loadWidgets()] はWidgetsを初期化するためのAPIです。EPl()は始めの引数で与えられたオブジェクトに対して初期化を行い、com_ibm_dwa_ui_widget_class 属性を持つ各HTML要素を探します。
EPl()は、 com_ibm_dwa_ui_widget_class 属性で指定されたJavaScriptオブジェクトを作成し、始めの引数で渡された HTML要素のID をコンストラクタに渡します。このようなHTML要素は iNotes Lite Widgetの 「Root Element」と呼ばれます。

上の例では、EPl() はe-hello HTML要素のcom_ibm_dwa_ui_widget_class 属性を見つけ、com_ibm_dwa_ui_hello('e-hello') を呼びます。このようにして、 com_ibm_dwa_ui_hello クラスはここで指定されたUIを認識できるようになります。

ある要素が com_ibm_dwa_ui_widget_class クラスを定義しながら、EPl() がWidgetを初期化するのを避けるための方法があります。これは、com_ibm_dwa_ui_widget_delayed="true" と言う属性を該当要素に指定する事によって出来ます。
そのような場合、EPl()の二番目の引数にTrueを指定した場合にそのようなWidgetを初期化することが出来るようになります。 Widgetの初期化を遅らせる事は非常に有益です。 実際には、iNotesはEPl()をBody全体を初期化しようとするからです。

非常に短いコードサンプルですが、 iNotes Lite内で、

1. コンストラクタを定義
2. タグでコンストラクタを指定
3. 表示するときに初期化と同時にコンストラクタを呼び出す

のような流れで UI コンポーネントが積み上げられている様子が何となく伝わるんじゃないかな、と思います。

iNotes Lite Framework - Frameset

2009年03月05日 01:33

 これから何回かに分けて以下のWiki で紹介された、Lotus iNotes Lite Framework の話を取り上げてみようと思います。

バックナンバー
1. iNotes Lite Framework - Frameset
2. iNotes Lite Framework - iNotes Lite Widgets
3. iNotes Lite Framework - Lazy loading code
4. iNotes Lite Framework - Basic Layout
5. iNotes Lite Framework - Common Property

すでに書かれている事をブログに取り上げるのは野暮に思えるかもしれないのですが、このエントリは8.5 以降(8.0.x系のライト・モード含む)のLotus iNotes を理解するためにもじっくり読む価値があるのではないかと思います。

iNotes Lite framework (Notes/Domino Wiki)

一応このブログでは「1つのエントリで話が終わらない記事」は出来るだけ書かないようにしているのですが、ここの話はChapter毎に話が切れているので何回かに分けてもそれほど違和感無いのではないかと思います。


今日はIntroductionの後の初めに書かれている、「Container for application-specific data and architecture 」と言う章について簡単に紹介したいと思います。

始めに、従来のiNotes はこの記事でも紹介したとおり、ビューもフォームも全て、1つのフォームからページを次々に重ねて表示するような仕組みを使っていました。

iNotes Lite framework ではより非同期にコードを読み込み、不要なロードを減らすためにFrameset ベースのアーキテクチャに変わっています。
各フレームセットには以下のようにしてアクセスする事が出来ます。


AAA.ESb : UI 用のフレーム
AAA.EcK : 文書情報を格納するためのフレーム
AAA.DSq  : JavaScript Code を格納するためのフレーム

AAA と言うのは何だかでたらめな文字列に見えますが、別に適当な変数名としてあげたのではありません。
これはこの記事でも紹介したとおり、DWA 内での Obfuscation されたオブジェクト名です。
 このWikiの記事ではオリジナルの名前を [ ]で表示しているのですが、AAA の場合ですと、AAA [com_ibm_dwa_globals] と言うのが元々の名前です。

その他のフレームについてもオリジナルの名前を見てみましょう。

ESb [oMainWin]
EcK [oMainDoc]
DSq [oScript]

iNotes Liteではページ構造からもスクリプト部分とUI 部分が独立している事が分かるのではないかと思います。

明日以降はこのWiki の記事のキモになる、iNote Lite Widget と言う概念について紹介していきたいと思います。

NSDをVBSで実行する

2009年03月04日 00:02

NSD を実行するバッチファイルを作った事がある方は多いと思うのですが、どうしてもプログラムディレクトリやデータディレクトリの値を環境毎に書き換えないといけないのがあまり好きでなかったので、VBSで作ってみました。 データディレクトリとプログラムディレクトリの値をレジストリから取って実行します。これだと設定無しで動くので使いやすいかな、と思います。
 これだけでVBSを使うのは面白くないので、OSの判別コードも入れて、Windows XP/Vista でサポートされている、「nsd -detach」 に出来るようにしました。8.x 以降はデフォルトで入っているので入れても入れなくてもいいのですが、何かのバッチ処理でプログラムディレクトリやデータディレクトリの値を取ったり、OSの判別をするようなことはあるのではないかと思うので、他の目的でも使える部分は多いのではないかと思います。

注:
・ Lotus Notes 6.5.x 以降のクライアントで実行する事を想定しています。
  それ以前のクライアントでは -detach がサポートされていません。
・ マルチユーザーでは実行できません。
  (ただし、どっちもレジストリキーの問題なので、書き換えれば動くと思います)
・ 実行後クライアントをクリーンアップしたい場合は、strOption = " -DumpAndKill" に書き換えてください。この場合はOS判別コードは要りません。



RunNSD.vbs
Function GetProgramDir()
GetProgramDir = ""
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
strValue = objWshShell.RegRead("HKLM\SOFTWARE\Lotus\Notes\Path")
if Right(strValue,1) <> "\" Then
strValue = strValue & "\"
End if
GetProgramDir = strValue
End Function

Function GetDataDir()
GetDataDir = ""
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
strValue = objWshShell.RegRead("HKLM\SOFTWARE\Lotus\Notes\DataPath")
if Right(strValue,1) <> "\" Then
strValue = strValue & "\"
End if
GetDataDir = strValue
End Function

Function IsWin2k()
IsWin2k = False
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
If Instr (objOperatingSystem.Caption, "Windows 2000") > 0 Then
IsWin2k = True
End If
Next
End Function

Dim objWshShell
Dim strCmdLine
Set objWshShell = WScript.CreateObject("WScript.Shell")
NSDPath = GetProgramDir() & "nsd.exe"
objWshShell.CurrentDirectory = GetDataDir()

If Not isWin2k() Then
strOption = " -detach"
End If

strCmdLine = NSDPath & strOption
objWshShell.Exec(strCmdLine)

If Err.Number <> 0 Then
WScript.Echo "NSD 実行エラー: " & Err.Description
End If

Lotus Notes/Domino 8.5 機能評価ガイドが公開されています

2009年03月03日 01:42

以下の文書が公開されています。

Lotus Notes/Domino 8.5 機能評価ガイド

ここで紹介した文書の英語版になります。

IBM Lotus Notes and Domino 8.5 Reviewer’s Guide

結構なページ数になるので英語のまま読むのは大変だったと思うので日本語版が出たのは良いニュースだな、と思います。

8.5を検討されている方は是非一度ご覧になってみてください。

DWA 警告/iNotes 警告 の変遷

2009年03月02日 00:15

今日はこのTechnoteから。

「Domino Web Access 警告:現在リクエストを処理できません」 が出力された場合のトラブルシューティングガイド (文書番号 730940)

DWA では、JavaScriptのランタイムエラーが出ると、DWA 警告(iNotes 警告)と呼ばれるダイアログが出て何らかのエラーが発生した事を通知します。
これは製品版のJavaコードでException発生時にスタックトレースを出力しないのと同じで、あまりデバッグ情報をエンドユーザーに見せないようにするための措置だったのですが、調査の際にはときどき困難な状況が発生する事も少なくありません。

このため、DWA警告の問題調査を行う際には、7.x以前の環境の場合、iNotes_WA_Debug=1 を設定して詳細情報を取得していました。Technoteで書かれているのもそのような情報採取の話です。

この設定は8.x以降は不要になり、8.5や、8.0.xのライト・モードではiNotes コンソールと言うのが用意され、ユーザーにダイアログ形式でランタイムエラーを通知する事はなくなりました。これは、iNotes 8.5 では大きな改善と言えるのではないかと思います。

 表示に影響が無い程度の問題であればユーザーオペレーションを妨げない表示になりますし、一つの問題で複数回ダイアログが表示されてしまう問題なども一つのエラー通知ですみます。
 更に、コンソール形式で出力されるので DWAでは難しかったトレース情報も得られるようになりました。

これによって何か新しい事が出来るようになるようなものではないですが、これもすばらしい改善なのではないかと思います。



最新記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。