2019年4月24日水曜日

満を持して登場! IBM Domino Mobile Apps

昨年(2018年)の IBM Think で公の場に登場し「Comming Soon」と言われ続け、待つこと数カ月...

Notes クライアントの iPad 版 ともいうべきアプリ「IBM Domino Mobile Apps」がリリースされました‼
次のリンク App Store からダウンロードできます。


名称を省略して「IDMA」とか「DMA」と呼ばれているようですので、ここでは「DMA」と呼びます。

DMAとは、既存の Notes/Domino アプリケーションに手を加える(つまりWeb対応やXPages対応する)ことなしに iPad での利用を可能にするアプリです。

残念なことですが現時点の DMA はメールデータベースが開きません。そのため Notes メールを使う場合はこれまでどおり Traveler や IBM Verse を使うことになると思います。
そうは言ってもメールに貼られている文書リンクや notes:// で始まるNotesURLのリンクがあれば、それををクリックすると DMA 上でアプリが起動する、といった動きをするようです。
また DMA のアプリから式言語や LotusScript を使ってメール送信するようなものは機能するようです。

それから Java が含まれていないため、Java エージェントは動きません。
とは言え、LotusScript や @関数式でのプログラム、フォーム/ビュー、ページやフレームセット、アウトラインといった設計要素は DMA 上でほぼそのまま動きます。

既存アプリの再現性については有志の方が DMA のベータ版を使い検証してくださった結果を次のリンクにまとめてくださってます。Notes アプリ開発者にとって一読の価値がある資料です。


そういえば4月の「テクてくLotus技術者夜会」にも DMA の検証結果発表のコマがありました。こちらの資料も公開されることと思います。


さて、個人的に DMA がすばらしい!と思うところを3つ挙げてみました。

  • 既存のアプリを変更せず iPad で使える
  • iPad のカメラと連動する
  • アプリケーションの複製(レプリカ)を iPad に保持できる


高速インターネットがどこでも利用できる日本と言えども、電車や航空機、船舶などの移動中だったり、作業現場などではネットワークの接続性や帯域に問題がある場所はまだまだたくさんあります。そういった場所で入力作業しなければならないときはいったん iPadのレプリカに保存しておき、事務所などネットワーク環境が良い場所でサーバーと同期する、といったことが DMA を使えば可能になります。iPad で撮影しておいた写真や動画を 「わざわざパソコンへ転送する」といった手間が無くなるわけです。

いまどきの Notes 環境ではあまり想像もできなくなりましたが、アプリにレスポンスを要求するような場合は、ローカルにDBがあることでクリアできる可能性があるかもしれません。当たり前ですがネットワーク越しにDominoサーバー上のアプリをつつくよりもローカルにあるアプリのほうがパフォーマンスは良いです、圧倒的に。


Notes アプリの開発者は DMA のおかげで最小限のスキルアップで iPad でも動くアプリを作ることができるようになりました。さらに最近聞こえてくる話によると、Android (タブレット)版、iPhone 版、Chrome OS 版の DMA も予定されているとのこと。将来は Notes クライアント向けに作ったアプリケーションが様々なデバイス上から、しかもローカルのアプリとしても利用できるようになるということです。

このことは、それぞれのデバイスに最適な開発環境を用意して言語を習得したり、開発者を雇用する、といった新たな投資も最小限で済むということです。

LotusScript ではできることが限定されますが、様々なデバイスでNotesアプリが動くことを想像すると、なんだか昔聞いた「Write once, run anywhere」の世界が見えてくる気がしました。将来はそうなってほしいですね。

最後に、DMA から Domino へアクセスさせるのは多少手間かもしれません。
ID ファイルをどうやって配布するか、ID Vault へどうアクセスさせるか、VPN かパススルーサーバーのどちらを用意するか、インターネット上にサーバーを置くか、接続文書が必要な場合 DMAへどう配布するか...
こういったノウハウも共有できるといいですね。

2019年4月4日木曜日

あなたのデータベースは新元号「令和」を表示できますか?

2019年4月1日に新元号が発表されました。

5月1日からの運用開始に間に合うよう、社内で使用している様々なシステムのアップデートが4月末までに実施されることと思います。

昨年話題になったサマータイムが日本で実施されなくてホントよかったと安堵している場合ではありません<オレ

Notes/Domino も元号に対応しているということで、IBM サポートからは次の文書が公開されています。

この文書は今後さらに更新されると思いますが、3月13日更新の情報によれば
  • バージョン 9 と 10 の Notes/Domino は修正モジュールが4月中旬に提供される
  • 修正モジュールには IBM Java の修正を含まない
  • バージョン 8.5 は新元号に対応しない
とのこと。ついに昨日からダウンロードできるようになった 10.0.1 FP1 とは別に修正モジュールが提供されるようです。


ところで、Notes/Domino の元号機能を実際に見たことがあるでしょうか?

前出の IBM サポートの文書でも紹介されていますが、フィールドのプロパティ、ビューの列のプロパティ、LotusScript の Format 関数において、年の表示形式として "ge", "gee", "gge", "ggee", "gggee" を指定すると元号の表示が可能になります。
フィールドのプロパティ
ビューの列のプロパティ
LotusScript の Format 関数

そして、元号表示機能を利用している箇所を調べる方法について、3月末に開催されたセミナー


の場でお話が聞けたようです。




ツイート内にセミナー資料へのリンクがありますので、チェックしてみてはいかがでしょうか。

さらに teamstudio 社からは同社のツール Analyzer を使って利用箇所を特定する方法が、同社のブログで公開されています。



さて、私が関わるデータベースでは Notes/Domino の元号表示機能を利用していませんでした。
しかしながら、和暦を元に番号を生成する仕組みがありました。
こんな具合です。
平成31年4月30日に作成した最初の文書の番号は「310430-001」
令和元年5月1日に作成した最初の文書の番号は「010501-001」
元号台帳のようなものがプロフィール文書で用意されているのですが、こういったアプリケーションは設計レベルの走査では発見しづらいので要注意です。

2019年3月17日日曜日

表の境界線をイメージに置き換えてみた

前回のエントリでは、表のプロパティで境界線を"イメージ"にすると、画像がどのように境界線として表示されるのかを見てきました。

今回は、ずっと前から気になっていたアプリケーションライブラリ(dblib4.ntf)におけるデータベース名の表示の不具合(下図)を改善してみたいと思います。


「不具合」とはデータベースのタイトルが長い場合、タイトルの右側が本の外側にはみ出てしまうことです。

フォームの設計を見てみます。下図はフォームの一部です。

固定幅で1行1列(セルが1つだけ)の表に、セルのイメージとして本の画像 dblib.gif を指定しています。これではウィンドウサイズにあわせて本が縦や横に伸びたり縮んだりすることはありませんね。

これを表の境界線として指定し、かつ固定幅ではなくウィンドウの幅に合わせて表の幅も変わるようにしたいと思います。

このブログでは dblib.ntf を直接修正することはせずに(一時的に作成する)別のデータベースで検証していきます。

まずは、dblib4.ntf イメージリソースに登録されている dblib.gif を Export して画像を確認してみたいと思います。
Export したファイルをペイントアプリで開いてみると、画像のサイズは 436 x 49 px でした。

これを前回と同様に、縦と横に3等分して9つの枠に分けてみました。

この図を表の境界線として表示する場合、表が縦方向に膨らむと「左」と「右」が縦方向に繰り返し表示されます。「左」を拡大してみると、線に段差があることがわかります(下図)。

この画像をそのまま使う場合「左」が縦方向に繰り返し表示されると縦線に凸凹が生まれて見た目がよろしくありません。

そこで、3等分したときに段差がなくなるように高さを調節します。画像の縦のサイズを 11 増やして 60px に変更しました。そして画像の下半分をコピーして最下部に合うようにペーストした画像がこちらです。元の画像よりも本の厚みが若干増しました。

三等分してみると「左」の縦線にあった段差が無くなっています。

この画像をイメージリソースに Import して、表のプロパティから表の境界線のイメージとして画像を設定します。そして表の外側に表示する画像の厚みを「厚さ」から調整します(下図)。

このままでは表の内側が白抜きとなってしまいますので、表の内側を埋めるドットだけの画像を作成してイメージリソースに Import したものをセルのイメージとしてタイル状に繰り返し表示するよう設定します(下図)。

こうして表の中にある文字がいくら長くなっても本の外側にはみ出すことなく折り返して表示されるようになります。
ウィンドウの幅が広い場合

ウィンドウの幅が狭い場合
いかがでしたでしょうか。

境界線として使えそうな画像を「枠」や「フレーム」などでググると素材を扱うWebサイトがいくつかヒットしました。フォームのデザインに合う境界線があるといいですね。

表の角を丸くする仕組み

前回の「のの会」でのお話です。
Domino Domain Monitoring (DDM) についてアクセルの岡本さんがお話されている時、DDM.nsf 内にあるイベント文書を開き「この角が丸い枠はどうやってんねやろ?」みたいなことをおっしゃってました。

下図は ddm.nsf のイベント文書を開いた画面の一部です。色のついた四角の角が丸くみえます(追加した2つの赤い矢印で示しました)。

言われてみればどう実現しているのか説明できないぞ?!ということで、その場で設計を覗いてみました。

すると表の周りを角の丸い四角でふちどっているような感じでしたので、表に何らかの仕掛けがあるのかと考え「表のプロパティ」をチェックしてみました。すると「境界線のスタイル」に"イメージ"が選択され、さらに「イメージ」として "TableBorderRed.gif" が指定されていることがわかりました。(下図)


そしてのの会の翌日、ddm.nsf 内の「イメージリソース」にある TableBorderRed.gif をエクスポートしてペイントで開いてみると、サイズが横193px 縦146px、薄い赤色で角の丸い四角形が描かれていました。


なるほど。表の外側を特定の画像(の縁)で縁取ることができるようです。

しかし、Notesの表というのは表全体の幅がウィンドウやフレームの幅にあわせて変化したり、表の中に表示するものによっては縦に伸びたりする場合があります。
TableBorderRed.gif の縦横のサイズは、フォーム上に表示されれている表とは全く異なりなりますが、違和感なく表のまわりに表示されています。

この仕組みをみていきたいと思います。

下図の画像(以降「元画像」と呼びます)を用意してみました。これをイメージリソースへ登録します。


そして表のプロパティで境界線の「イメージ」に指定したものがこちらです。
左上を拡大すると次のように見えます。どうやら「伸びている」のではなく「繰り返している」ようですね。

では、元画像のどの部分を繰り返しているのでしょうか。

元画像のサイズは 24 x 24 の正方形です。下のように縦横三等分して9つの枠で示すことができます。この9つの枠それぞれに「左上」「中」といったように名前をつけてみました。

これを先の拡大図にあてはめてみると、次のようになります。
左上隅に、元画像の「左上」が表示されました。
左上の下側には、元画像の「左」が縦方向に繰り返し表示されます。
また「左上」の右側には、元画像の「上」が右方向に繰り返し表示され、「左」の右側と「上」の下側には「中」が繰り返し表示されました。

さて、縦横三等分した「左」と「上」と「中」が繰り返されていることがなんとなくわかったので、表の右側も見ていきます。下は表の右上を拡大したものです。
最上段では「上」が右方向に繰り返し表示され、最後に「右上」が表示するのですが、表のサイズは元画像の倍数とは限りませんので、余りが生じる場合があります。その余りとして「上」が部分的に表示されました。
「右上」の下側にある「右」の左に接するものも同様に「中」が部分的に表示されました。

続いて表の左下です。
 表の左側では「左」を縦方向に繰り返し表示して、最下段に「左下」を表示しますが「左」と「左下」の間には余りとして「左」が部分的に表示されました。
「左下」の右側は「下」が繰り返し表示されますが、その「下」の上に接する「中」も余りとして部分的に表示されました。

そして最後は表の右下の拡大図です。
表の右下の隅には元画像の「右下」が表示され、それに接する「中」「右」「下」が部分的に表示されました。

表の伸縮へは、元画像の「上」「右」「下」「左」「中」の繰り返しと、幅と高さの余りの調整にそれらを部分的に表示することで対応していることがわかりました。


ところで、皆さんは「データベースライブラリ」というデータベースをご存知でしょうか。Dominoサーバーやローカルにあるデータベースを登録することができるデータベースです。バージョン 10.0.1では、テンプレート "Application Library (8)" dblib4.ntf を使って作成できます。

「データベースライブラリ」にデータベースを登録し、登録した文書を開いたものが下図になります。

本を横にしたような画像があり、その背表紙には登録したデータベースのタイトル(図では ”HTTPRequest” )が表示されます。

ここへ登録したデータベースのタイトルが長い場合、下図のように本の中に納まってくれません。これが個人的にはすごーーく気になっていたのです。

この不具合は表の境界線で”イメージ”を活用することで改善できそうです。
次回はこれを改善してみようと思います。

2019年3月8日金曜日

変数の型とパフォーマンス

昨日は会社帰り「のの会」に参加しました。


ところで Notes の設計をちょっといじっただけで見違えるほど体感速度がかわることってありませんか?

例えば「ビューのカテゴリを閉じた状態で開く」とか。

今回はそんな「ちょっとしたこと」を LotusScript の処理のパフォーマンスと絡めてご紹介しました。

下のスライドで共有いたします。



のの会では、発表中の発言は自由ですので「1億回ループの処理時間をどうやって計ったの?」「ダイナミックって言うけどいつ割り当てるの?」等、やさしい質問から厳しいツッコミまでいただきました。いちユーザーの立場では製品の内部仕様まで存じ上げないこともあり、これまでの経験から「あーじゃない?こーかも?たぶんそう!」程度の受け答えしかできないこともありますがそこはご容赦ください(汗)

スライドのコードはわかりやすくする目的でシンプルにしましたが、もっと現実味のあるコード(?)のほうがののさん向けだったかも、と反省してます。

2019年2月25日月曜日

エンドユーザーが全文検索をもっと使いやすくするアイデア

ビューの上部に表示される検索バーへ Japan などとタイプして Enter キーを押す、という操作は多くのエンドユーザーが行っていますが、この場合すべてのフィールドにある Japan というワードがヒットしてしまいます。
検索結果をもっと絞り込みたい場合、例えば
[Country] = "Japan"
といったようにフィールド名を含めたクエリーに書き換えて検索するようエンドユーザーへ勧めますが、これがなかなか浸透しません。

浸透しない理由は、フィールド名はエンドユーザーに馴染みがないからではないか、と推測しています。フィールド名が多く覚えられないことも原因の一つかも?

検索ビルダーを利用してフォームを使って検索できることは承知しているのですが、例えばキーワードリストから選択するようなフィールドの場合は検索ビルダーではキーワードリストが表示されず、タイプするために値を覚えておく必要があったりと使い勝手はいまひとつと言わざるを得ません。

そこで、こういった検索バーにおける不便を解消するため、次のような作りこみを行い、実現しました。
  1. ビューのアクションボタン「詳細検索」をクリックする(ダイアログボックスを表示する)
  2. ダイアログボックスにあるフィールドへ文字列をタイプ(またはリストから選択)して[OK]ボタンをクリックする(検索バーへ転記する文字列を生成してクリップボードへ転記。検索バーを表示してクリップボードの値を貼り付け、Enterキーを押すコードを実行し、ビューに検索結果を表示する)
しかしながら、Enterキーを押すために Win32 API をコールしており Windows 向けのものとなっています。このコードではもうすぐ登場する Domino Mobile Apps に対応できないと考えています。

もし、検索バーへのクエリーの転記をもっとシンプルにしたり、転記後にEnterキーを押すコードを呼ぶこと無しに検索が始まるアイデアなどございましたらシェアしてくださると嬉しいです。

以下、現在のコードです。

ビューのアクションボタン「詳細検索」では次のコードを書いています。

--- 詳細検索ボタンの式 ---
tmp := @DialogBox("MakeQuery"; [AutoHorzFit]: [AutoVertFit]: [NoNewFields]: [NoFieldUpdate]: [NoNote]: [SizeToTable]; "Input for Search String");
@If(tmp=@True; @Success; @Return(""));
@Command([ViewShowSearchBar]; "1");
@Command([EditPaste]);
@Command([RunAgent]; "PressEnterKey")

1行目で呼び出すダイアログボックス内で使用しているサブフォーム「MakeQuery」には、キーワードのリストからの選択が可能なフィールド「Country」を配置しています。
フィールド「Country」で値を選択してダイアログボックスのOKボタンをクリックすると、フィールド「Query」の式がクエリー文を生成します。

--- フィールド Query の式 ---
str := Country;
"[Country] = (\"" + str + "\")"

※MakeQuery には Country 以外にも複数のフィールドがあるのですが、ここでは1つだけとしています

生成されたクエリー文をサブフォームのイベント Postrecalc のコードでクリップボードへ転記します。

--- Postrecalc のコード ---
Sub Postrecalc(Source As Notesuidocument)
    Call Source.GotoField("Query")
    Call Source.SelectAll
    Call Source.Copy
End Sub


「詳細検索」ボタンの3行目以降で、検索バーを表示してクリップボードの値を貼り付け、Enterキーを押すコード(エージェント「PressEnterKey」)を呼び出します。

--- Enter キーを押すコード(エージェント「PressEnterKey」) ---
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Integer, ByVal bScan As Integer, ByVal dwFlags As Integer,ByVal dwExtraInfo As Integer)
Sub Initialize
    keybd_event &hd,0,0,0 ' Enter key down
    keybd_event &hd,0,2,0 ' Enter key up
End Sub

以上

2019年2月24日日曜日

Domino V11 と IBM と HCL と

おととい(2019年2月22日)は朝から晩までノーツづけの一日でした。

ノーツコンソーシアムの「ユーザー情報交換会」に始まり、その後「通常総会」。
午後は大きな会場へ移動し「ノーツコンソーシアム FESTA」と「IBM Notes/Domino Day 2019 Spring」。その後、会場ロビーにて「大感謝祭」と称したパーティーが催され、終了後は有志による二次会と、どのタイミングで隣の人に話しかけても Notes Domino を知らない人はいない、そんな一日でした。

ノーツコンソーシアムFESTA 2019 オープニング
午後一番はノーツコンソーシアム FESTA 2019 から始まりました

大きな話題の一つである、昨年12月に発表された HCL 社への Notes/Domino の売却については、どこへ行っても冒頭にお話しがありました。
HCL 社はコンタクトのあった日本の Notes ユーザー企業への訪問を始めているようです。日本 IBM の人が HCL 社へ移る時期について具体的な話はありませんでしたが、有効なSS&S とライセンスは自動的に HCL 社へ移行される見込みとのことでした。

NDDay の Ayasa さんによるパフォーマンス
Notes Domino Day 2019 Spring のオープニングは Ayasa さんによるパフォーマンスで始まりました
IBM Notes/Domino Day 2019 Spring のオープニングは Ayasa さんによるヴァイオリン演奏のパフォーマンスでした。本イベントのエンディングにもパフォーマンスを披露されたのですが、その時スクリーンに流れた映像が Notes Domino History とも言えるもので、映像が素早く切り替わっていくあたり、これからの Domino がめざましく進化していくように感じ、Ayasa さんが演奏する曲ともマッチしていてとても感動的でした。

ところで Notes Domino の今後については、ADFS 連携やテンプレート拡張といった、日本からの要望があったものが V11 で採用されるといった嬉しい話がありました。
また、軽量版 Notes クライアントと、iPad 版に加え Android版 と Chrome OS 版の Domino Mobile Apps の計画があること、英語版のリリースと同時に日本語を含む言語版もリリースすること、XPages への投資が継続されること、が特に気になったポイントでした。

次世代クライアントとは Red Pill Now で見たアレかしら

ADFS 同期は日本の V11 Jam でも重要性を伝えた機能

日本の V11 Jam で指摘した、アプリやサンプルテンプレートのことにも触れていました

それから、来る新元号にも対応を予定しているとのことで、今後こちらが更新されるようです。

新元号対応を 9.x と 10.0.x で予定

V11 の文字が現れ、演奏はクライマックスに

そうそう。イベント開始前に前から5列目くらいに陣取っていたら「IBM Champions はリザーブシートへどうぞ」と2列目中央の特等席へ案内してくださいました。その時最前列の HCL 社の Rechard 氏と会話する機会があり「HCL では Champions でなく Heros です」と教えてくださいました。

その後の大感謝祭では、多くのノーツ関係者で大賑わいの中、新たな IBM Champions のひとりとして紹介していただいたり、ノーツコンソーシアムから感謝状を頂いたり、このブログを見ていただいている方からお声掛けいただいたりと嬉しいことが波のように押し寄せました。

その後も有志のメンバーから2次会にお誘いいただいたのでそちらへも参加させてもらったのでした。
初めてのラクレット!

そんなこんなで頂いた品々がこちらです。


励ましの言葉などたくさんのパワーをいただいた一日でした。
どうもありがとうございました!

(個人的に一番楽しみにしていた DQL Explorer が見えなかったような...)