2016年11月30日水曜日

一歩進んでRESTful API

これまでWebAPIを使ったスマホアプリを作ってきたけれど、単なるWebAPIではなく、いま主流(?)のRESTful APIを使ったアプリを考える。まず、RESTful APIとは何か知る必要がある。
RESTful APIとは何なのか
RESTful Webサービスの基本
このあたりから読んでみよう。さらに、「RESTful APIとは何なのか」からリンクが張られている「Web API」とは何なのか」、「リソース指向アーキテクチャ(ROA)とは何なのか」などにも目を通してほしい。



先行研究を調べることの大切さ

これまでの2か月間のゼミ活動で、如何に限られた狭い知識では新しい発想が出てこないかを経験したのではないでしょうか。人間誰でも似たようなことを考えるもの。何か思いついたとしても、それは既に出尽くしたアイデアの一つにすぎず、しかも独りよがりなものです。
やはり先行研究を当たり、これまでその分野でどのようなことが行われてきたかを知るべきです。また、標準的に利用されている様々な技術や概念についても知っておかないと何かやるにしてもどうしたらいいかわかりません。
学会で何か発表する以上、ひととおりの文献調査は必要です。しかし、来春には診療情報管理士の試験も控えており、卒研ばかりに全精力をつぎ込むわけにはいきません。難しいですね。
いずれにしても自分の力を知ることは大切です。

2016年11月28日月曜日

FHIR

最近注目されている(?)技術にFHIRというものがあります。オリジナルサイトは
https://www.hl7.org/fhir/index.html
ですが、全部英語で分かりづらいです。日本語の資料を見つけたのでリンクを貼っておきます。
http://www.hl7.jp/docs/49seminar_2_HL7.pdf
しかし、正直なところ、わかりやすいとは言えません。結局FHIRって何なんだ、と叫びたくなるような内容でした。
そんなとき、こんな論文を見つけました。
Using FHIR to develop a healthcare mobile application
FHIRだけでなくHL7の開発経緯なども分かってなかなか興味深い論文です。英語も比較的平易です。


天気予報アプリ

前回はAjaxを使って外部サーバと通信する技術を修得し、RSSリーダを作りました。今回も引き続きAjaxを利用して外部サーバが提供するWebAPIを利用して情報を取得するアプリを開発します。開発するのは10章の第2節「外部サーバと通信する」で扱う天気予報アプリです。このアプリは、下記のOpenWeatherMapというサイトから天気情報を取得します。

http://openweathermap.org/api
このWebAPIを利用するにはAPI key (APPID)が必要になります。API key を取得するにはユーザ登録が必要です。この画面から登録を行ってAPI key を入手してください。
入手したAPI key はHttpリクエストの際、パラメタとしてサーバへ送ります。テキストP306のプログラムは少し古いようで、そのあたりが抜けています。パラメタ config を以下のように修正してください。

            var config = {
              params: { 
                q: 'Tokyo,jp',
                id: '[ユーザID]',
                APPID: '[API key]'
              }
            }

このAPIはJavascriptオブジェクトとしてレスポンスを返してきます。したがって、レスポンスデータはそのままJavascriptオブジェクトとして利用することができます。たとえば、次のようなフォーマットです。
{
 "coord":{
  "lon":139.69,
  "lat":35.69
 },
 "weather":[
  {
   "id":803,
   "main":"Clouds",
   "description":"broken clouds",
   "icon":"04n"
  }
 ],
 "base":"stations",
 "main":{
  "temp":275.93,
  "pressure":1030,
  "humidity":52,
  "temp_min":271.15,
  "temp_max":281.15
 },
 "visibility":10000,
 "wind":{
  "speed":5.7,
  "deg":10
 },
 "clouds":{
  "all":75
 },
 "dt":1480449600,
 "sys":{
  "type":1,
  "id":7619,
  "message":0.008,
  "country":"JP",
  "sunrise":1480368684,
  "sunset":1480404486
 },
 "id":1850147,
 "name":"Tokyo",
 "cod":200
}

2016年11月16日水曜日

オープンデータ

国がオープンデータ戦略を推進しているようだ。以下は総務省のサイト。
オープンデータ戦略の推進
e-Stat API機能

また,動画による紹介もある。
統計によるオープンデータの高度化
これらを使って何ができるか考えてみるのもよいかもしれない。

2016年11月8日火曜日

MonacaでRSSリーダ

今回MonacaでRSSリーダアプリを作成します。
HTML5モバイルアプリ開発講座 RSSリーダー編  
このアプリではAjaxを用いて外部のサーバから情報を取得する技術を学びます。
まず、下記サイトからRSSリーダのプロジェクトZIPファイルをダウンロードします。
http://s3.asial.co.jp/~monaca/rss.zip
ダウンロードしたプロジェクトをMonacaでインポートしようとすると
Internal Server Error (500)
Neither project_info.json nor config.xml was found. Maybe an old project?
というエラーメッセージが出ます。どうも古いようです。しかたがありません。チュートリアルを見ながらダウンロードしたソースコードを入力(コピペ)するしかありません。

その前にAjaxを学ぶサンプルが紹介されています。 スライドのP7~16までです。スライドにしたがってやってみましょう。IDEで「新規プロジェクト」を選んでテンプレートから「Onsen UI V1 Minimum」を選びます。これが「最小限のテンプレート」です。必ずV1を選んでください。あとはスライドにしたがって作業をしていきます。
    <script>
    $.ajax({
        url: 'http://s3.asial.co.jp/~monaca/rss/blog.xml',
        dataType: 'xml',
    })
    .done(function(data){
        $(data).find('item').each(function(){
            var title = $(this).find('title').text();
            alert(title);
        });
    })
    .fail(function(err){
        alert(JSON.stringify(err));
    })
    </script>
このサンプルプログラムは以下のサイトから情報を取得しています。
http://s3.asial.co.jp/~monaca/rss/blog.xml
実は、これがRSSフィードです。ソースを見てください。XMLで情報が記述されれていることがわかるでしょう。

次に、RSSリーダアプリを作っていきます。スライドのP17から始まります。P22でindex.htmlをアップロードするように書いてありますが、どうも、index.htmlは上書きできないようです。ですから、コピペでMonacaのindex.htmlの内容を書き替えてください。

ところで、このチュートリアル、困ったことにサンプルコード集が見当たりません。ですから、スライドP23の「RSSリーダ STEP①」を実装できません。そこで、多分そうだろうと見当をつけてコーディングしてみました。それがこれです。
        // アプリ起動時の処理
        $(function(){
            $.ajax({
                url: 'http://s3.asial.co.jp/~monaca/rss/blog.xml',
                dataType: 'xml',
            })
            .done(function(data){
                var html = '';
                $(data).find('item').each(function(){
                    var pubDate = $(this).find('pubDate').text();
                    var title = $(this).find('title').text();
                    var link = $(this).find('link').text();
                    var description = $(this).find('description').text();
                    html += createArticleNode(pubDate, link, title, description);
                })
                $('#articleList').html(html);
            })
            .fail(function(){
                alert(JSON.stringify(err));
            })
        });

これは、アプリ起動時の処理です。Ajaxを使ってRSSフィード'http://s3.asial.co.jp/~monaca/rss/blog.xml'を読み込んで更新日 pubDate、タイトル title、記事URL link、そして本文 descriptionを取り出してcreateArticleNode関数を使ってhtmlタグ(li要素)を作っています。これをリストの数だけ作ってくっつけてそれをセレクタ'#articleList'で示されるulタグ内に挿入しています。
このプログラムではXMLデータの処理の仕方やHTMLの生成方法など参考になるTipsがたくさん出てきているのでしっかり身につけてください。
次はcreateArticleNode関数の中身です。
    // 1件分の記事を表示するli要素を生成
    function createArticleNode(pubDate, link, title, description) {
        var date = new Date(pubDate);
        var li = 
            '<li class="btn">' +
                '<a href="' + link + '">' +
                    '<time>' +
                        '<span class="date">' + date.getFullYear() + '</span>' +
                        '<span class="month">' + (date.getMonth() + 1) + '</span>' +
                        '<span class="year">' + date.getDate() + '</span>' +
                    '</time>' +
                    '<div>' +
                        '<h2>' + title + '</h2>' +
                        '<p>' + description + '</p>' +
                    '</div>' +
                '</a>' +
            '</li>';
        return li;
    }

RSS提供サイト一覧
これらをajaxに渡すリクエストの送信先(url)に設定してどのように変わるかを確かめてください。

はてなブックマークはRSS1.0でpubDateの代わりにdc:dateになっている。ところが、XMLのタグ名がdc:dateだとjQueryのfindメソッドでは取ってこれないようだ。そこで、その場合はDOMを使って以下のようにしてdc:date要素を取ってくる。
$(this).children().each(function(){
    if($(this)[0].tagName == "dc:date") {
        pubDate = $(this).text();
    }
})

2016年11月1日火曜日

パーソナル・ヘルス・レコード

こんなサイトを見つけました。
PHRを活用したヘルスケアサービス事例
これは、第2回クラウド時代の医療ICTの在り方に関する懇談会の資料のようです。電子母子健康手帳の開発でよく目にする株式会社エムティーアイが作成した資料です。
T君やKさんの研究の参考になるのではないかと掲載しました。
この株式会社エムティーアイという会社は千葉県の柏市と共同でスマホを使った健康サービスを展開している企業で、私の調べた限り、電子母子健康手帳に関しては一番アクティブに活動し一歩先を行く企業です。
実は私も電子母子健康手帳の開発を行っていて、情報を収集していました。私の印象では数年前(2012~2014年頃)までは盛んに行われていたけれど最近はめっきり情報が少なくなっています。その点、これは昨年(2015年)の資料なので比較的最近の動向を知るにはうってつけです。
また、最近の動向としては、AMED(国立研究開発法人日本医療研究開発機構)が募集した研究事業「パーソナル・ヘルス・レコード(PHR)利活用研究事業」に「妊娠・出産・子育て支援PHRモデルに関する研究」という研究課題があり、1.8億円で前橋工科大学が獲得しています。これは、今年の7月から始まった事業なので今のところ何も情報は出てきていませんが、これから注目していく必要があると思います。
新しい情報としては、総務省が「総務省における医療等分野のICT利活用について」という資料を平成28年10月に出しています。この中でも妊娠・出産・子育て支援について触れています。目新しい概念としてPLR(Personal Life Repository)とか分散PDS(Personal Data Storage)という言葉が躍っていました。どんどん新しい概念が登場します。ついていくようアンテナを張っておかないと・・・。