2019年2月16日土曜日

Domino Query Language (DQL) を他の検索と比べました

昨晩(2019年2月15日)は「テクてくLotus技術者夜会」に参加しました。

今回のテクてくのテーマが

新 IBM Champions for ICS にいろいろ聞いてみよう!

ということで、40分の枠をいただいて、本ブログにも度々登場している Domino Query Language (DQL) についてお話させていただきました。



今回の検証で新たに分かったことは、ODS バージョンが 20 と古くても検索できますし、クライアントのローカル nsf ファイルを検索することができることです。

また、これまでの検索機能とのスピード比較を行い、その結果を記載しています。

まだあまり知られていない(?) DQL ですが、ぜひ試してほしい機能のひとつです。

2019年2月7日木曜日

ODS

昨晩(2019年2月6日)は会社帰りに「のの会」に参加しました。

ずーっと前ですが、常駐先のエンドユーザーからこんなことを聞かれました。
データベースのプロパティに表示される「ODSバージョン」ってデータベースによって違うんだけど、何なの?
Domino のバージョンをアップグレードする担当者にはおなじみのODSですが、エンドユーザーにとってはあまり気にすることも無いだろうし、そもそもデータベースのプロパティを見るエンドユーザーなんて存在しないだろうと高をくくっていたこともあって、少々説明に困ってしまいました。

そんなことがあり、少しまとめたものがあったのですが、V10も出ているので加筆修正したものを今回「のの会」でお話させていただきました。



以下、補足します。

案外、クライアント側のODSバージョンは放っておかれがちです。ODS 20 のNSFファイルをアップグレードして Notes の起動が早くなったという Panagenda社の事例(スライド中に事例へのリンクあり)を読み、私のローカル環境にも ODS20 のデータベースがあったことから、それらをアップグレードした結果、確かに早くなったことを実感できました。

また、8.5.1 以降のバージョンでは、Domino で DAOS を有効にしている場合、クライアント側の ODS もアップグレードすると「DAOS オブジェクトコピーの最適化」が機能して添付ファイルの転送にメリットがあるとのこと。※こちらは未検証です

ODSをアップグレードする理由として、古いバージョンによる「不具合を解消するため」といった後ろ向きな理由も中にはあるでしょう。けれど、文書や設計の圧縮といった新機能を有効にすることで I/O 性能が向上することによるパフォーマンスアップが体感できると思います。

なお、ODSアップグレードにはデータベースの圧縮が伴います。デスクトップポリシーを使うなどしてクライアントの notes.ini ファイルへ NSF_UpgradeODS=1 を追加する場合、圧縮中のデータベースをユーザーが使えないため、注意が必要です。

最後に、実際にアップグレードする場合は、最悪のケースを想定して事前にバックアップを取っておくなどしましょう。

2018年12月29日土曜日

#鬼わか V10アプリ開発 シリーズが始まりました

年末のテクテクLotus技術者夜会で某I社の方から「 #鬼わか シリーズが始まります!」と発表がありましたが、ホントに年末に公開されましたねw


第 1 回「IBM Domino V10 を CentOS 7 にインストールしてみよう #鬼わか 解説」


お恥ずかしい話、私は業務で Linux に触る機会がなかった、というよりある意味避けてきたのかもしれませんが、App Dev Pack に触ってみたいし、今年から参加させていただいているノーツコンソーシアムのザ・ノーツ研究会では Linux に触れる場面で理解が追い付かず辛い経験をしたこともあって、トレーニングを兼ねてこの年末年始に自宅PCにインストールしてみようと考えていました。

そんな時にこの記事はタイムリーでありました。


ところで、自宅PCは Windows 10 Pro なのですが、ここで Linux を稼働させるとなると、これも触れる機会の無かった(避けてきた?)「仮想化」を試すチャンス到来!

そんなわけで次の3つを導入したわけです。


  1. VMware Workstation 15 Player for Windows 64-bit Operating Systems
  2. CentOS 7 x86 64 DVD 1810
  3. Domino Community Server for Non Production 10.0.1 Linux


※Notes は Community 版の 10.0.1 を Windows 10 Pro (ホストOS側)へインストールしています

冒頭の #鬼わか の記事は、後半の Tips を含め Linux を触ったことのない私でもほぼ問題なく理解できる内容でした。

これから Linux 版 Domino を導入してみようという方にとっては非常に分かり易いのでお勧めです。

記事の内容と異なる点として、今回は Community Server を使用したせいでしょうか、Domino のモジュールの展開先は
/linux64/domino/
ではなく
/linux64/DominoEval/
となりました。

欲を言わせてもらえば、ポートを開けるためのコマンド例も欲しかった...
firewall-cmd --permanent --add-port=1352/tcp


ここまで来たら IBM Domino App Dev Pack までインストールして試してみたいところですが、#鬼わか の今後の記事が公開されてから考えたいと思います。

というか、自宅PCへのインストールとなるとベータ版しか選択肢が無さそう(?)ですが、今後に期待したいと思います。

2018年12月23日日曜日

NotesDominoQuery クラスを使ってみよう!

Notes と Domino の 10.0.1 がリリースされました。

早速、トライアル版の Domino と Notes (+ Designer + Administrator)をダウンロードして、ベータ版へ上書きインストールしました。どちらも問題なく完了しました。

このリリースに合わせて Domino Designer 10.0.1 のオンラインヘルプ が公開されましたので眺めたところ、LotusScript に追加された幾つかの新たなクラスが記載されていました。

その中でも今回は NotesDominoQuery クラスに少し触れてみたのでご紹介します。

NotesDominoQuery クラスは、V10 からサポートされた Domino Query Language (以下、DQL) を扱うクラスです。

※DQL については以前のブログエントリでもご紹介しましたので割愛します。


まずは NotesDominoQuery クラスの Explain メソッド を使って、クエリの実行に関する情報を見てみたいと思います。Explain メソッドは domquery コマンドの -e オプションに相当します。
以下のコードをエージェントにタイプします。

Dim ss As New NotesSession
Dim db As NotesDatabase
Dim dq As NOTESDOMINOQUERY
Dim query As String
Set db = ss.Currentdatabase
Set dq = db.Createdominoquery()
query = "Subject = 'test document'"
Print dq.Explain( query )

そしてエージェントを実行するわけですが、クライアントから実行しようとすると「Method is not available: Function is not supported for remote databases」とメッセージが表示され、実行できません。



現状は Domino サーバー上で実行する必要がありそうです。

そこで、サーバー上でエージェントを実行できるようトリガーとターゲットを変更し、Domino のコンソールから「tell amgr "AppName.nsf" 'AgentName'」とコマンドを投入してみたところ、コンソール上に次のように表示されました。

> tell amgr run "DQ.nsf" 'DominoQuery#1'
[8228:000B-5B74] 2018/12/22 23:19:43   AMgr: Start executing agent 'DominoQuery#1' in 'DQ.nsf'
[8228:000B-5B74] 2018/12/22 23:19:43   Agent Manager: Agent printing:   Query Processed: [Subject = 'test document']  0.Subject = 'test document' NSF document search estimated cost = 100    Prep 0.153 msecs, Exec 27.660 msecs, ScannedDocs 3569, Entries 0, FoundDocs 4  ******************
[8228:000B-5B74] 2018/12/22 23:19:43   AMgr: Agent 'DominoQuery#1' in 'DQ.nsf' completed execution

オレンジ色で示した箇所が Explain メソッドの結果です。

FoundDocs が 4 ですので、4件の文書がヒットしたことがわかります。

文書検索にかかるコストが 100 と高く見積もられています。おそらくはクエリーに最適化されたビューを作っていないためコストが高くなったのでしょう。そのせいか検索にかかる時間も長くなっているように思います。


では、クエリーを実行して文書を取得する Execute メソッドを試してみたいと思います。
エージェントに次のコードをタイプします。

Dim ss As New NotesSession
Dim db As NotesDatabase
Dim dq As NOTESDOMINOQUERY
Dim query As String
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument

Set db = ss.Currentdatabase
Set dq = db.Createdominoquery()
query = "Subject = 'test document'"
Set dc = dq.Execute( query )
Set doc = dc.Getfirstdocument()
Print doc.Subject(0)

Subject フィールドの値に "test document" がセットされている文書の集合から、最初の文書を取り出し、Subject フィールドの値を表示します。

そして Domino のコンソールから先ほどと同様にコマンドを投入した結果がこちらです。

> tell amgr run "DQ.nsf" 'DominoQuery#2'
[8228:0010-0F78] 2018/12/23 00:16:51   AMgr: Start executing agent 'DominoQuery#2' in 'DQ.nsf'
[8228:0010-0F78] 2018/12/23 00:16:51   Agent Manager: Agent printing: test document[8228:0010-0F78] 2018/12/23 00:16:51   AMgr: Agent 'DominoQuery#2' in 'DQ.nsf' completed execution

正しく表示できました。

ベータ版では今回試した Explain に相当する機能は提供されていましたが、文書を取得する手段は存在しませんでした。

10.0.1 では文書を取得するメソッドも実装され、それが正しく機能することが確認できました。

2018年12月22日土曜日

テクてくLotus技術者夜会に参加しました

ここ数年の「テクてくLotus技術者夜会」12月度のテーマは

年忘れ!テクてく Lotus 技術者夜会ライトニングトーク

となっていまして、いつも登壇されている IBM Champion の方々のほか、私のように普段は参加するだけの人も何かしゃべってね!と数カ月前から軽く釘をさされます。

今回も事前に準備していた資料を夜会オーナーに渡していたのですが、発表当日になって「今年前半に取り組んだ事のほうがうけるかなあ」と思い直して急いで資料をこしらえて差し替えてもらったのがこちらになります。





上の資料を少し補足します。

ACLに登録されているユーザーやグループといったエントリに加え、グループの場合はドミノディレクトリのグループ文書からメンバー欄の値を取得し、「グループとメンバー」「グループとグループ」といった構造を整理してhtmlを出力する、といったプログラムを LotusScript で作りました。

「ユーザー」や「グループ」をノード、各ノードの関係を矢印で表現します。

Cytescape.js では表示するグラフの種類を選ぶことができます。私が試したDBの中でもノードが多すぎるものは描画時間が長くなるせいか、ブラウザがタイムアウトするような挙動となることもありましたが、別のグラフで表示してみると表示できる場合もありました。





そして私の発表が終わって、いつもの終了時刻まで他の登壇者のトークをお気楽に聞いていたところ「2次会が21時開始でまだ時間がある」ということで、差し替えたはずのスライドもお話することになりました。




こちらは、たまたま読んだ FP8 の What's New で見つけたものが、私の欲しかった機能じゃないか?とピンときて検証してみた、というお話です。

What's New の説明文は、私にはとてもイメージしづらかったので、フォーム/ビュー(設計)とコードとテスト結果を記載してます。

実は createViewNavFromKey 、バージョン 10.0.1 のオンラインヘルプ にも記載がありません(汗)。追加してくださいねー >IBM & HCL


以上の2つのお話が夜会オーナーに評価されたようで賞品をいただきました!


(昨年に続き)今年もありがとうございます!


2018年12月14日金曜日

Notes/Domino のサマータイム対応について調べてみた(後編)

先月の「のの会」でお話したサマータイムについての話題が「入門編+管理者編」でした。

昨日開催の「のの会」第10回では、開発者編としてお話させていただきました。

次のスライドがその内容です。



サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか from Haruyuki Nakano

今年最後の「のの会」ということで、会の後には忘年会を兼ねた懇親会がありました。
いやー、呑んだし食ったし行きたい店だったしメニューの希望が通ったし、サイコーでした。

来年もわかりやすくて実感しやすく、ちょっとタメになる小ネタを準備して皆さまのご来場を心よりお待ちしています。

引き続き「のの会」をよろしくお願いいたします。

2018年12月2日日曜日

Notes/Domino のサマータイム対応について調べてみた(前編)

早いもので今年も残すところ1ヶ月を切りましたね。

IT関係者として今年を振り返ると、「元号」「サマータイム導入?」といった、カレンダー絡みの話題が世間を賑わせた1年だったな、という印象です。

サマータイムについては、勤務先の関係でぼんやりとした関心はありましたが、その時どうなるのかといったことを深く考えたことはありませんでした。

そして「日本に導入することになるかも?」となった今年、初めて自分事として考え、真面目に検証してみようと思い立ったのです。


そして検証した結果をまとめ、「のの会」第9回でお話させていただいた内容が次のスライドです。


 
サマータイム導入?【管理者編】 - その時 Notes/Domino は正確な時を刻むのか from Haruyuki Nakano


この発表資料は「管理者編」としています。そうはいってもNotes/Dominoと直接関係しない話題(タイムゾーンとは、といったようなもの)」が前半を占めていますので、適宜読み飛ばしていただければと思います。
ここに開発関連の話題を含めなかったのは、ボリュームがありすぎて発表時間とページの都合がつかなかったからです(笑)。


近いうちに「開発者編」も公開いたしますが、まずは「のの会」第10回でお話してからでしょうかね...