2005/05/30
Notesクライアントでスキン
ところが、Alan Lepofskyのブログ(こここそまさに有益な「コネタ」の提供スポットです)にて、現在フリーで使えるNotesスキンがあることを知りました。
これはICODEX Software AGというところが開発、公開しているもので、こちらにて紹介されています。
実体は、dllが1つと、notes.iniに記述されるEXTMGR_ADDINS、あとはリソースの入ったDBです。EXTMGR_ADDINSを使うのは、ちょっと抵抗がありますが、まあそうはいっても、この手のことをしたい場合は必須ですので仕方がないです。あらかじめいくつかのスキンが入ってますし、自作も出来るようです。
基本的には、ワークスペースが派手に変わる程度なので、やはりNeoPlanetのようなウインドウごと派手に変わるほうが見栄えがよかったかな、、、とも思いますが、たまにはこういうお遊びも楽しいものです。
2005/05/24
DominoでAJAX
そこで、必ずネタがあると思ってましたが、「DominoでAJAX」です。Google Suggestをみると、やっぱりドミノディレクトリのタイプアヘッド検索が有力だろう、と思ったら、予想通りありました。
早速、手元のテスト環境で試してみましたが、設置も簡単だし、効果もわかりやすいです。
で、気になる実装方法ですが、基本的にはクライアント部分で動くJavaScriptが、入力にあわせてサーバーのエージェントを OpenAgentで呼び出し、その引数に入力文字を渡しています。サーバー側は、XMLではなくプレインテキストで返事をし、それをクライアントが解釈するようです。
正直なところ、1文字入力するたびにOpenAgentなんてしたくないけれど、まあ、サンプルならこんなところでしょうか(本番環境なら、サーブレットがいいです。サーブレットはサーブレットで、パフォーマンス以外の面で利便性などDominoとしてどうかとも思いますが)。
Web化したときに、タイプアヘッドに対するニーズって大きいと思うのですが、これで1つは解決できそうです。AJAX自体は面白い技術ですし、他にも可能性が大きいと思うので注目ですね。
2005/05/12
Bob Balaban Lotus復帰
先ほど、Ed BrillのBlogをよんでいたら、IrisでLotusScript/Javaのクラス階層を作ったり、その後独立してDomino/JavaのエバンジェリストをしていたあのBob BalabanがIBM/Lotusに復帰するそうです。
DHTMLセクション
最近発見したのですが、Domino 6.5.1からセクションをDHTMLで提供する機能が備わっているようです。こちらのSPR対応という位置づけになるみたいです。
http://www-10.lotus.com/ldd/r5fixlist.nsf/0/47529bfeabc18af585256e1600527b41?OpenDocument
設定などの詳細はWeb Server: Additions to dynamic HTML generated for sectionsに記述されています。(日本語のリリースノートにももちろん記載されていますが、英語版しか直接リンク貼れないので)
従来までは、セクションは展開すると、いったんWebサーバーにアクセスして、展開されたHTMLを毎回ドミノサーバーが発行していました。
一方、DHTML対応すると、もともと全ての情報をHTMLとしてもらっておき、クリックにあわせてダイナミックに展開されます。この秘訣は、セクション部分をid付きの div
タ グで定義し、その部分(getElementbyID)の表示/非表示(.style.display)をJavaScriptでダイナミックに指定して いるのですが、このためNotesクライアントのセクションと同じようにみえます。従来までも、JavaScriptで関数さえ定義しておけば、同様なこ とも出来たでしょうが、セクションというのはユーザーがリッチテキストの中に書き込むこともあって、多少コントロールが難しかったこともあったと思いま す。Dominoサーバーとしていよいよ標準でDHTML対応したことは素晴らしいことだと思います。(実際問題としては、Notesクライアントユー ザーがコンテンツを作る必要があるため、Web中心の環境ではどこまで有用かというと微妙ですが)
コードもhtml内部に埋め込まれており(というのには賛美両論あると思いますが)、簡単に見ることが出来ます。
<script language="JavaScript" type="text/javascript">
<!--
function _dSectionExpand(sec) {
document.getElementById("cSec"+sec).style.display = "none";
document.getElementById("xSec"+sec).style.display = "";
}
function _dSectionCollapse(sec) {
document.getElementById("xSec"+sec).style.display = "none";
document.getElementById("cSec"+sec).style.display = "";
}
// -->
</script>
<div id="cSec1" style="position:relative; "><a onclick="return _dSectionExpand('1');"><img src="/icons/expand.gif" border="0" alt="Show details for セクション"><font size="2">セクション< /font></a></div>
<div id="xSec1" style="position:relative; display:none;"><a onclick="return _dSectionCollapse('1');"><img src="/icons/collapse.gif" border="0" alt="Hide details for セクション"><font size="2">セクション< /font></a>
クロスブラウザを意識してかデフォルトではオフになっているようですが、browser.cnfを多少変更するだけで簡単に出来るので、ブラウザが特定されている社内環境では積極的に使ってもよいかと思います。
2005/05/05
DominoデータにアクセスするDXL
A custom DXL framework for accessing Notes/Domino data
DXL(Domino XML)というのは、Domino DTDと呼ばれる、Dominoの構造を記述したフォーマットに従って、Dominoのデータ(文書情報)や設計をXML形式で記述したもののことです。スキーマ言語はDTDを使ってますが、Domino 7からは、XML Schemaも提供されるそうです。
DXL 自体は文書情報などDominoデータをXMLで表現しただけのものですが、開発者のアイディア次第で活用方法はいくらでもあると思います。ここで は、一例として、DIIOPでもプログラムアクセスは出来るけれど通常はFirewall超えが出来ない・・・なんということが書いてあります。(つま り、XMLの利点の一つはテキストフォーマットであることであり、HTTP上で扱える。さらには、HTTPならFirewallが超えられる、という、は やりのWebサービス的な考え方、に行き着く・・・。他にも用途は多いと思うのですが、代表例ならこれということでしょう)
「Viewの データをXMLで取得してプログラム処理させる」というのは、最近ではわりと一般的になってきました。?ReadViewEntriesとい うURLコマンド一発でXMLデータを取得出来るということもあり、Domino開発者側はビューだけ作っておけば、あとはデータを利用する側の開発者 (サーブレットなど)がXML APIを使って頑張ればよいですから。なお、DXLのようにデータ構造が決まっているというのは最低条件として非常に重要だと思いますが、 ReadViewEntriesのように、XML取得のための標準インタフェース(特にHTTPメソッドとして)があるというのも重要だと思います。
この記事では、文書単位でDXLアクセスする場合のフレームワーク(ちょっと大袈裟な言い方ですが)を考えています。
文書単位でのDXLアクセスといえば次が想定されます。
- 選択文書(UNID)に対するDXLベースの情報更新
- DXLフォーマットのデータを新規文書として生成する
- 選択文書(UNID)のDXL情報を表示する
これに対して、DXLUpdateDoc/DXLCreateDoc/DXLViewDocという3つのエージェントをURLコマンドとしてインタフェースにする方法(つまりエージェントのソース)が紹介されています。
こ のエージェントは、Query_StringというCGI変数で引数(UNID)を受け取り、必要な処理を実施しています。Domino 6では、DXLに関するLotusScriptのクラスが実装されたので、これらのエージェントは全部LotusScriptで、しかもかなりシンプルに 実現されています。ソースの詳細は記事本文を見て下さい。
DXLによる文書操作がどの程度必要なのかはわかりませんが、ともあれ文書操作 に関するURLベースでの標準インタフェースを持つということは、SOAや Webサービスなどがキーワードになっている近年、非常に重要だと思います。今回の例ではエージェントで実現していますが、各DBにエージェントを配置 し、リクエストをエージェントで処理するのは、サーバーパフォーマンスも気になりますし、コードの配置の点でも最適かどうか微妙です。この点を追求すれ ば、サーブレットなどを使って他に選択肢が全くないわけではないですが、現状の製品機能ではいずれにせよ一長一短であったりして、今回の記事がやはり最適 解だと思います。ですが、この程度の機能くらい、ReadViewEntriesと同様、Domino URLコマンドとして実装して欲しいと思います。(引数がUNIDだけでよいかどうかには議論があり、GetDocumentByKeyと同じものは欲し いです)
2005/05/02
JavaScript 10のベストプラクティス 2005年度版(3)
3. 便利なJavaScriptを作ろう
Webページの使い勝手とは、 「情報の構造」「明確で直感的なデザイン」「優れた機能」などで判断されます。前述の"unobtrusive JavaScript"手法を使うことで、使い勝手をあげることが出来ます。使い勝手があがらないJavaScriptの使い方なら、考え直したほうがよ いでしょう、とのことです。
4. 簡単に適用可能なJavaScriptを作ろう
デザイナーとプログラマーのギャップと いうのは存在するもので、「XHTMLとCSS」を知っていながら、DOMやJavaScriptの知識がないデザ イナーが存在するケースはよくある話です(これはJ2EEのMVCモデルにも共通しそうですが、JSP処理などのViewの部分だけでもクライアント処理としてさらに2階 層に分かれてしまうということですね。Dominoの場合は一人の開発者が全部やってしまいがちですが。もちろん何でも一人で出来る優秀な開発者になるこ とは重要ですけれど。)。
これも、ロジックの分離をしておき、JavaScript部分を簡単に適用可能にしておくことが重要です。コードもメンテナンス出来ないくらい大量なものになることがよくありますが、極力最小化して、再利用が出来るようなコードにします。
5. 将来性が保証されたJavaScriptを作ろう
ブラウザ情報を検知するロジックではなく、オブジェクトを検知させて、ブラウザをハンドルするロジックが望ましいです(例えばdocument. でエラー発生状況を見るなど)。
XHTMLの利用はJavaScript記述上でいろいろと注意が必要です。まず、ケースセンシティブであり、各要素は小文字で記述される必要がありま す。また、そのほか、document.関連の操作では、各種の注意が必要になるようです。Dominoでは、XHTMLへの適切な対応は先になりそうで すが、いずれDomino技術者の知識としては避けられないものになっていくのでしょう(とはいえ、HTMLとXMLの基本さえ知っていればそれほど難し くはないと思いますが。パススルーHTMLなどでは、既にXHTMLの文法に注意しておいたほうがよさそうですね。)。
最先端の技術情報が必要なら、W3CやECMA、ブラウザベンダからの情報に注意しておくべきです。
6. JavaScriptの弱み、欠点、バグは理解しておきましょう
JavaScriptは、批判を浴びることが多い背景もあり、ほとんどのブラウザでは簡単に機能をオフにすることが出来ますので、注意が必要です。また、ブラウザの中には、メモリリークがあったり、ということもあります。
7. もっとよい選択肢が存在するかもしれません
JavaScriptは柔軟な言語なので、いろいろな形で記述することが出来ます。書き方は1つではないことを理解しておく必要があります。
8. 自分でコードを書くか/信頼出来るサイトからコードを拝借するか
良かれ悪しかれ、最近はいろいろなタイプのコードがインターネット上に存在します。中には古い記述や、お作法の悪いものも存在します。使いまわしをするときは、自力で多少修正することがよいケースが多いでしょう。
9. パフォーマンスチューニングされたコードを書きましょう
ダウンロード速度、実行速度を意識したコードを書きましょう。JavaScriptはローカルにダウンロードされて実行するため、実際に利用しないような 巨大なライブラリは望ましくないです。コメント文も遅くなる原因ですが、手元にはコメントが入ったものを残しておいたほうがよいでしょう。
これは、JavaScriptの塊ともいえるDomino Web Accessなどで、激しくチューニングされているのが見れます。ダウンロード速度については、HTTP1.1のgzip圧縮などもあるので、多少救いは あるかもしれないですね。(ネットワーク屋さんから言わせると、HTTPのトラフィックはかなり無駄が大きいため、gzip圧縮して欲しいそうなのです が)
10. 開発支援ツールを使いましょう
JavaScriptの開発も、JavaScriptコンソールから、文法チェッカーなど、様々なツールが存在するようです。こういったものを使うとよいでしょう。
最後に。(あまり開発が得意でないDomino技術者の独り言)
実は、この10の方法は、Domino関連サイトをネットサーフィン中に見かけて飛びついた記事です。この手の記事は割と読みやすいことが多いのですが、 読み進めてみるとDOM関連の深い技術話が多く、最後はかなり読み飛ばしてしまいました。正直DominoでのJavaScriptといえば、入力チェッ クやWindow操作、イベントハンドルで使われている程度だと思うのですが、最先端なところでは、DHTML的なコードを、いかにクロスブラウザ対応 で、かつ美しく記述出来るか、というところまで進んでいるようです。読み進めていると、とにかくキーワードは"unobtrusive JavaScript"という手法にあるようですが、いずれ時間があるときにじっくりと読んでみたいと思います。