2020年7月15日水曜日

GPSセンサーの無いPCでも位置情報を取得できました

HCL Nomad では、端末の GPS 機能を利用して位置情報を取得するための LotusScript のクラスがあります。 

イマドキは GPS センサーが無い PC でもブラウザさえあれば Wi-Fi から位置情報を取得することができるらしいと噂で聞いたことがあります。

ところで先日、ノーツコンソーシアムのアプリ開発研究会に参加して Domino Volt を使ったアプリ開発を行いました。先月は Domino Volt を使ったアプリ開発のハンズオンだったのですが、今月は各自テーマを決めて自習する形式でした。※最近は全員がリモート参加のためグループでの取り組みが困難なのです

私は、Domino Volt ではまだ経験の無い Web API を利用したものにチャレンジしたかったのと、冒頭の「位置情報をGPSセンサー無しに取得する」を組み合わせて、位置情報を住所に変換する「リバースジオコーディング」アプリに取り組みました。

今回初めて Volt アプリを何もないところから作成したこともあり、研究会の限られた時間の中では Web API の部分しか実現できなかったのですが、その後 Domino Volt の Interface object についての Document の中に app.getLocation というコールバックファンクションがあることに気付き、今朝から取り組みました。

コールバックファンクションというのは、情報の取得が終わった後に呼び出される機能といったところでしょうか。

そして app.getLocation を使って取得できた位置情報から緯度と経度を取り出し、フォーム上の入力欄(単一行エントリー)へセットすることができました。

自宅PCでブラウザからこの Volt アプリへアクセスしてみたところ、取得できた緯度経度はGPSの値と大きな違いはなさそうでした。

次の画面ショットは、自由が丘駅のホームで iPhone からこの Volt アプリへアクセスしたものです。住所の精度は未確認ですが「自由が丘」というワードがあるので位置情報が大きくずれていることはなさそうです。
フォームを表示したとき、緯度と経度のデフォルト値をセット

実行ボタンをタップするとWeb APIを呼び出し、レスポンスを表へセット

これを実現するため、次のコードをフォーム「F_Form1」を表示するときに実行される onShow イベントへ設定しています。
var myForm = app.getForm('F_Form1');
var formBO = myForm.getBO();
var highAccuracy = true;
var myCallbackFunction = function (position) {
  if (position !== null) {
    formBO.F_SingleLine4.setValue(position.coords.latitude);
    formBO.F_SingleLine5.setValue(position.coords.longitude);
  }
};
app.getLocation(myCallbackFunction,highAccuracy);
フォームのイベントへカスタムアクションとしてJavaScriptのコードを追加


6行目の「F_SingleLine4」は緯度、7行目の「F_SingleLine5」は経度の入力欄です。フォームを表示すると、現在地の緯度と経度がデフォルト値としてセットされるという仕組みができました。

なお、このアプリをノーツコンソーシアムで用意していただいた Domino Volt 環境で実行すると、きちんと位置情報を取得できるのですが、私個人のPC内にある仮想環境上に構築した Domino Volt 環境では取得することができませんでした。検証できていませんが私の環境は https に対応していないことから、ひょっとすると位置情報を取得するためには https でアクセスできなければならないといったセキュリティ要件があるのかもしれません。

2020年7月2日木曜日

Sametime 関連 nsf ファイル

Sametime のインストールを経験して3ヶ月が経過した頃、管理クライアントを操作していてある事に気づきました。

「タイトルがやたら長いデータベースがある...」

それは Sametime のインストールによって追加された vpuserinfo.nsf というファイルなのですが、そのタイトルがこちらです。

Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.

私は検証環境として Sametime サーバーを2台構築しているのですが、他方のサーバーも同じファイル名になっていました。

ここで Sametime インストールで追加されたファイルのタイトルを見てみると「エラーメッセージか?」と感じるような明らかに変なタイトルが幾つもあることがわかりました。※下図赤枠部分のファイルです
タイトルが明らかに不正なnsfファイル

ファイル名不正なタイトル
 vpuserinfo.nsf Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.
 stauths.nsf You cannot do a remote queue put to a pre-R5 server
 stautht.nsf You cannot administer Enterprise Directories on a pre-R5 server
stconf.nsf  Network protocol error: message from server is too large
 stconfig.nsf Accelerated replica creation cannot be used with an encrypted database
 stcs.nsf Invalid profile 
 stdomino.nsf Cannot close a database within an NSFSearchStart - NSFSearchStop loop that was opened outside of the loop
 stlog.nsf LookupExtended on server %a
 stnamechange.nsf Invalid VJournal property found


こういった事象は Sametime のフォーラム技術情報にも似たような報告がありました。



ところが、これらが私の環境と違う点は、CentOS8 でなく CentOS7 である事と、11.0 から 11.0FP1へのアップグレードではなく 11.0FP1 を新規にインストールしている事です。

そこでサポートへ問い合わせてみたところ、次の事がわかりました。

  • Linux 版 Sametime のインストールで Sametime 用のデータベースを作成する際データベースタイトル設定時にインストーラー側の問題で不正な文字列が入りタイトルにエラーメッセージのような文字列が入り不正になる
  • 技術情報では Sametime 11.0 から 11.0FP1 へのアップグレード時と記載があるがバージョンアップに限定されず、Sametime 11 や Sametime 11.0 FP1 の Linux 版 Sametime サーバー新規インストールの場合にも発生することを確認している
  • Windows 版では発生しない
  • ファイル名が正しいならば Sametime の機能上の問題はない
  • 正しいタイトルをテンプレートが保持しているため、テンプレートがあるファイルについては不正なタイトルは Design タスクが稼働すれば正しい名前に置換される。ただ、データベースの設計の引継ぎが無効にされている vpuserinfo.nsf は管理者が手動で「Sametime User Information」と変更しないと変わらない
つまりは、Design タスクを実行すればほぼ解決、という事なのですが、今回は検証環境という事で、普段は検証後にOSをシャットダウンしてしまうことから夜間に Design タスクが動いていなかったのです。

おそらく本番環境では定期的に Design タスクを実行しているでしょうから、なかなか気付く事は無いかもしれません。


ところで Sametime インストール時に追加されるファイルにはどのようなものがあるのでしょうか。こちらもサポートに聞いてみました。

 ファイル名  概要
 stofflinemessage.nsf オフラインメッセージ(チャット相手がオフラインの時に相手に送ったメッセージ)を格納するデータベース
 stlog.nsf Sametime のログデータベース
 stconfig.nsf Sametime の設定情報を格納するデータベース
 stauths.nsf Sametime SecretKeys を格納するデータベース
 stautht.nsf Sametime のサーバーのホスト名やポート番号を格納しているデータベース
 stdomino.nsf どのユーザーがオンラインであるかを格納する為のデータベース
 stnamechange.nsf Sametime で STNameChange タスクを使用し名前変更機能を使用する際使われるデータベース
 vpuserinfo.nsf ユーザーのコンタクトリストを格納するデータベース
 stcenter.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime に Web ブラウザからアクセスする場合のホームページ(起点のページ)を表示していたデータベース
 stsrc.nsf Sametime 8.5.2 まで提供されていた Sametime Classic Meeting 機能を利用するための Notes データベース。Sametime 9.0 以降では Classic Meeting 機能が提供されていないので、アクセスが製品側で意図的に禁止されています。
 stconf.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
 stcs.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
これらのうち次のデータベースは Sametime 8.5.2 までのリリースで使用されていたデータベースで Sametime 9.x 以降、製品としてアクセスが禁止されているとの事。
stcenter.nsf
stsrc.nsf
stconf.nsf
stcs.nsf

上の4つのデータベースは、そのまま運用するか、OS レベルでリネームし NSF ファイルとして認識されない状態にして運用してほしいとの事でした。

また、stcenter.nsf と stsrc.nsf は、Sametime Community Server のインストールでは除外するよう機能改善要望が提出されているそうです。