2015年6月12日金曜日

Notes 9.0.1FP3 でUpdate site DBにプラグインをインポートしようとするとエラーがでる件について

Update Site DBにOpenNTFから落としてきたプラグインを入れようとしたら・・・
・・・はい?・・・IBMサイトをググってみるか・・・

見つかった。
http://www-01.ibm.com/support/docview.wss?uid=swg21696682
「Notes 9.0.1 FP3を入れた後に、LS2J"Java~"のエラーが出るよ!」
だってさ。んもー。

で、下記のパッチを当てればいいんだって。

2015年6月10日水曜日

SSJSで他のWebAPIにアクセスする

みなさん!XPages開発してますか?!

 今回は、Notes/DominoのQAサイト「qA9」で質問に上がった、SSJSから他のWeb APIを呼び出す方法について解説します。

 サンプルDBはこちらから ntf ファイルをダウンロードできます。
 動作確認は、Domino Designer 9.0.1 FP3 で行っています。

Apach HTTP Clientのインポート

  Web APIにアクセスするためには、HTTPで通信する必要があります。しかし、SSJSにはHTTP通信するためのクラスやオブジェクトはありません。なので、Javaを利用します。
 Javaに標準で搭載されているHTTP Clientのクラスを使ってもいいのですが、Apache HTTP Clientを利用すると何かと便利なので、そのライブラリをインポートするところからはじめましょう。

 まず、Aapache HTTP Clientのサイトから、ライブラリをダウンロードします。
ここでは、バージョン4.5のzipを落としましょう。

http://hc.apache.org/downloads.cgi

ZIPの中に"lib"フォルダがあるので、ここから下記のファイルを取得します。
  • httpclient-4.5.jar
  • httpcore-4.4.1.jar


これを対象のDBにインポートします。

ここまではOK?

HTTPでコールするためのオブジェクトをSSJSで作成する

 上のインポートでSSJSからApache HTTP Clientを使用することができるようになりました。ただ、これでは少々使いにくいので、簡単にGET/POSTできるようにSSJSで関数を作ってしまいましょう。


var HttpClient = {};

// GETでWebサービスを呼び出します
// HTTPレスポンスのcontent-typeは、text/* である必要があります。
// パラメータ
//   url: 呼び出し先のURLを指定します。URLパラメータが必要であればそれもつけたものを設定します。
// 戻り値
//   オブジェクト: 下記項目を持ったオブジェクトを返します。
//                 status: レスポンスのHTTPステータス番号
//                 body:   レスポンスの内容(テキスト)
HttpClient.httpGet = function httpGet(url){
 var result = {};
 //Apache HTTP Clientのデフォルトの設定でHTTPClientを生成
 var jClient = org.apache.http.impl.client.HttpClients.createDefault();
 //GETメソッドを作成
 var httpGet = new org.apache.http.client.methods.HttpGet(url);
 //GETでコール
 var response = jClient.execute(httpGet);
 //レスポンスのステータスを取得
 var responseStatus = response.getStatusLine().getStatusCode();
 result.status = responseStatus;
 //レスポンスのBodyを取得して、文字列に変換
 result.body = org.apache.http.util.EntityUtils.toString(response.getEntity(), 'UTF-8');
 return result;
};


//POSTでWebサービスを呼び出します
//HTTPレスポンスのcontent-typeは、text/* である必要があります。
//パラメータ
//  url: 呼び出し先のURLを指定します。URLパラメータが必要であればそれもつけたものを設定します。
//  formParam: フォームとして送られるパラメータをオブジェクトで渡します。
//呼び出し例
//var name:com.ibm.xsp.component.xp.XspInputText = getComponent("name");
//var prefix:com.ibm.xsp.component.xp.XspInputText = getComponent("prefix");
//var params = {
// name: name.getValueAsString(),
// prefix: prefix.getValueAsString()
//};
//var ret = HttpClient.httpPostByForm("http://localhost:8080/HttpClient.nsf/api.xsp/restAPI", params);
//requestScope.put('status', ret.status);
//requestScope.put('body', ret.body);

HttpClient.httpPostByForm = function httpPost(url, formParam){
 var result = {};
 var jClient = org.apache.http.impl.client.HttpClients.createDefault();
 //Formの準備
 var formParams = new java.util.ArrayList();
 for(key in formParam){
  var val = formParam[key];
  formParams.add(new org.apache.http.message.BasicNameValuePair(key,val));
 }
 var postEntity = new org.apache.http.client.entity.UrlEncodedFormEntity(formParams, 'UTF-8');
 var httpPost = new org.apache.http.client.methods.HttpPost(url);
 httpPost.setEntity(postEntity);
 var response = jClient.execute(httpPost);  
 var responseStatus = response.getStatusLine().getStatusCode();
 result.status = responseStatus;
 if(responseStatus == 200){
   result.body = org.apache.http.util.EntityUtils.toString(response.getEntity(), 'UTF-8');
 }else{
  result.body='';
 }
 return result;
};

使い方は、サンプルDBやコメントにも書いていますので割愛。

今回は、GETとフォームの値を送信するPOSTの関数を作成しました。
至極簡素な関数で、戻りはテキストしか想定していません。
認証が必要な場合は、Basic認証やダイジェスト認証をHTTPヘッダに埋め込む必要があります。
その場合は、「UsernamePasswordCredentials」クラスや「BasicAuthCache」クラス、「BasicScheme」クラスなどを使用して、HTTPリクエストヘッダに登録することができます。

詳しくは、「apache httpclient basic認証」でぐぐってみてください。

2015年6月5日金曜日

IBM XCITE 2015(1日目だけ) レポート(4)

これで IBM XCITE については最後
Bluemixで提供されるWatsonサービス

dev@XCITEとは別に、展示のほうでBluemixで提供されるWatson APIのブースで話を聞いてきました。

Bluemixではベータ版では有りますが、Watson APIを公開していて、現在は無料で使えるとのこと。
デモは、「IBM Developer Cloud」で公開しているそうです。

ただ、日本語にはまだ対応しておらず、現在ソフトバンクの協力の下、"Watson日本語を勉強中"。
リリース時期は今年中を考えていたけど、もうちょっと時間かかりそうとのことだそうです。

APIの種類と概要は↓こんな感じ。
#私のつたない英語の翻訳と勝手な見解なので、正確には違うかもー。ご指摘があればコメントでお願いします。


  • Personality Insights(パーソナリティ分析)
    テキストの文書から、そのテキストがどのようなものなのかを予め定められてキーワード別に重み付けし、どのような文書なのか、傾向があるかを分析することができる。
  • Natural Language Classifier(自然言語分類)
    短い文書、フレーズに対して独自に事前定義されたキーワードをスコアをつけて返す。
  • Concept Insights(コンセプト分析)
    全文検索のようなもの。ただし指定されたキーワドの意味を理解し、より人間的な検索が行えるところが違う。「ニューヨーク」を「ビッグアップル」とも認識するとか。
    英語版のWikipedhiaのデータでトレーニングされているらしい。
  • Concept Expansion(コンセプト拡張)
    コンセプト分析を口語てきな不明瞭な文書でも解釈して、キーワードをスコアを付けて返す。
  • Language Identification(言語識別)
    テキストが何の言語で書かれているか判断する
  • Machine Translation(機械翻訳)
    テキストを機会ご翻訳する。Language Identificationと合わせれば、変換先の言語だけ指定すれば良さそう。
  • Message Resonance(メッセージ反響?共鳴?)
    予め設定したカテゴリの人々のブログやつぶやきなどを分析しておき、 あるフレーズの各単語が、指定したカテゴリの人たちにどの程度ウケるのかを数値化して表示する。
  • Question and Answer(質問と回答)
    自然言語の質問を解釈し、回答と思われる文書(URLなど)をスコアを付けて返す。
  • Relationship Extraction(関係抽出)
    文書から単語を抽出し、その単語がどんな種類(人、場所、イベント等)のものなのかを推測する。例えば
    IBM->組織、last year->日付
  • Speech to Text(音声認識)
    人間の言葉をテキストに変換する。
  • Text to Speech(読み上げ)
    テキストを音声で読み上げる。(音声データを返す)
  • Tradeoff Analytics(トレードオフ分析)
    さまざまな分野の目標を分析し、それぞれトレード・オフの関係にあることを分析する。
    例えば、スマートフォンを買うという目標と、将来のための資金を確保したい、という目標がトレード・オフの関係にあることを見抜く、とかそういうことらしいがよくわからない。#APIのメソッドも1つしか無いし・・・
  • Visual Recognition(画像認識)
    画像が何なのかを複数のキーワードをスコアをつけて返す。
    F1の写真であれば、car,auto racing,race car,motor sport などなどを返す。
で、 これらのサービスは、基本的にはまずWatsonを教育するところから始めなければならないそうなので、すぐにパワフルな分析ができる、というわけではな いらしいです。またWatsonの調教(?)によっても正確性に影響があるようなので、そのへんのスキルも必要になるかも。
#全てではなく、Concept Insignts はWikipediaのデータでトレーニングされているらしいですし、音声や画像に関しては、分析のもととなるデータの登録とかは必要ない・・・と思う。

で、Watsonとは別の人工知能としてAlchemyAPIも提供されています。こちらは、今年3月にIBMが買収した企業のサービスですね。分析のアプローチが異なるのだとか。

こちらは、インターネット上の文書をソースとして分析するようで、すぐに使えるサービスになっているようです。APIも同じようなものがいくつか有ります。

しかし、独自のデータを分析のソースとして登録したり調整したりできないので、組織特有の分析はできなそうで、この辺りがWatsonとの使い分けになってくるでしょうか。

買収したばかりなので、サービスとしてBluemixとは別のページだし、ちょっと扱いは異なるようです。いずれ統合されるでしょうね。




2015年6月2日火曜日

IBM XCITE 2015(1日目だけ) レポート(3)

イベントから2週間経過して旬も過ぎた感じですが、まだ続けます。

IBM Notes/Domino 最新事例と未来

最後に参加したセッションが、IBM 平塚さんと、鴨志田さんによる、「[クラウド × モバイル × ソーシャル]で革新を!- IBM Notes/Domino 最新事例と未来 -」のセッション。
お二人の軽快な掛け合いトークがGoodでした。

大手の小売業でXPagesとConnectionsをうまく連携して、取引先とのシームレスな連携を図っているという事例が紹介されていました。
Connectionでは、さらに社内だけではなく社外の取引先からもアクセスできるようにして、シームレス化を進めていく方針なのだとか。
コミュニケーションがスムースに取れるというのが重要で、且つその環境が簡単に用意できるというのはConnectionsの魅力ですね。

また国立がん研究センターでの導入事例も。こちらは一般向けに病院を探すという、XPagesを使ったWebでのサービス。
XPagesを利用することで、操作性の向上だけでなく、情報の修正にNotesクライアントしか使えないところを、リッチなWebUIを用意しクライアント無しでできるようにし、ライセンス数を削減するなどの工夫がされていました。
これについては別セッションで詳しく聞けるとのことでしたが、2日目で無理・・・(涙

いずれにしても、Notesの資産を最近のWeb技術を利用して、Notes以外のプラットフォームでスクラッチから作成するより非常に安価に素早く構築できなのだろうな、ということと、XPagesが要約広まりつつあるなという実感と、XPagesがDominoに与えたインパクトは、やはり大きいなと。

また、平塚さんの熱いビジネス論のお話も良かったです。
スタートアップに注力するだけでなく、やり続ける・続ける力が大事なのだと。
確かにスタートアップでは、スタートアップさせることのみを考え、継続させるための方策や、その仕組にあまり意識が行かないですよね。
あと、Give takeも大事だけどGive backも大事!
見える化だけでなく、言える化も!
言える化は受け側の問題がある場合も多いですが、言う側も日本人は謙虚すぎたり間違っているかも・・・と考えてしまいがちですよね。
環境、意識、風土を変える努力が必要。


さらにもうちっと続くんじゃ