ORCA APIを利用する(Post)


仕事が少し落ち着いたので前回に引き継き日医オープンソースORCAの話題である。
前回はGetの場合であるが、殆どのAPIがPostでのリクエストに対応しているのでその場合のサンプルです。
例によって厳密なエラー処理などしていないので流用する場合は注意してください。

以下は特定の患者の診療歴を取得する場合の例です。
bodyを変更する事ですべてのAPIが利用できます。

Dim body As String
body = “<data>” & vbCrLf & _
“<medicalgetreq type=””record””>” & vbCrLf & _
“<InOut type=””string””>O</InOut>” & vbCrLf & _
“<Patient_ID type=””string””>000001</Patient_ID>” & vbCrLf & _
“<Perform_Date type=””string””></Perform_Date>” & vbCrLf & _
“<For_Months type=””string””>99</For_Months>” & vbCrLf & _
“</medicalgetreq>” & vbCrLf & _
“</data>”

Dim oruser As String = “ormaster”
Dim orpasswd As String = “ormaster”
Dim URL As String = “http://192.168.0.2:8000/api01rv2/medicalgetv2?class=01”

Dim CONTENT_TYPE As String = “application/xml”
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“UTF-8”)
Dim Result As String

Dim record_in_byte As Byte() = Encoding.UTF8.GetBytes(body)
Dim req As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
req.ServicePoint.Expect100Continue = False

req.Method = “POST”
req.ContentType = CONTENT_TYPE
req.ContentLength = record_in_byte.Length
req.Credentials = New NetworkCredential(oruser, orpasswd)
req.PreAuthenticate = True
req.KeepAlive = False


Try
Dim reqstream As System.IO.Stream = req.GetRequestStream()
reqstream.Write(record_in_byte, 0, record_in_byte.Length)
reqstream.Close()

Dim res As WebResponse = req.GetResponse()
Dim str As System.IO.Stream = res.GetResponseStream()

Dim strread As New System.IO.StreamReader(str, enc)

Dim FOO As String = strread.ReadToEnd()
Result = FOO

strread.Close()
str.Close()
res.Close()

Catch exc As WebException
Result = “ERROR”
If exc.Status = WebExceptionStatus.ProtocolError Then
Dim err As HttpWebResponse = DirectCast(exc.Response, HttpWebResponse)

Dim errcode As Integer = CInt(err.StatusCode)

‘Console.WriteLine(err.ResponseUri)
‘Console.WriteLine(“{0}:{1}”, errcode, err.StatusDescription)

err.Close()
Else
‘Console.WriteLine(exc.Message)
End If
End Try

‘以降Resultをparseする()

 

ORCA APIを利用する(Get)


ニッチな話題ですがお仕事で扱っている日医がオープンソースとして主に診療所等など用に公開しているORCAについて外部アプリケーションから患者の氏名などのデータを利用する案件があったのでメモ。

ORCAからデータを取得するにはAPIを使用するかPostgresqlのDBから直接読み込む方法があるがスマートな方法であるAPIを使用する事にした。

以下VB.Netでのサンプル。
このサンプルは唯一getメソッド?でアクセルするタイプのAPIです。
(https://www.orca.med.or.jp/receipt/tec/api/patientget.html)

サンプルはエラー処理などキチンとしていないのでもし再利用する方がいましたらその辺注意してください。
またC#のサンプルが本家にありますのでそちらも参考にしてください。

Dim USER As String = “ormaster”
Dim PASSWD As String = “ormasterpass”
Dim URL As String

URL = “http://192.168.0.5:8000/api01rv2/patientgetv2?id=<ptnum>”
URL = Replace(URL, “<ptnum>”, “1”) ‘患者番号

Dim ResultXML As String

Dim req As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
req.Method = “GET”
req.Credentials = New NetworkCredential(USER, PASSWD)
req.PreAuthenticate = True
Dim res As HttpWebResponse = Nothing

Try
res = DirectCast(req.GetResponse(), HttpWebResponse)

Catch wex As WebException
If wex.Status = WebExceptionStatus.ProtocolError Then
Dim err As HttpWebResponse = DirectCast(wex.Response, HttpWebResponse)

        Dim errcode As Integer = CInt(err.StatusCode)

        Console.WriteLine(err.ResponseUri)
Console.WriteLine(“Response server => {0}”, err.Server)
Console.WriteLine(“{0}:{1}”, errcode, err.StatusDescription)

        err.Close()
Else
Console.WriteLine(wex.Message)
End If
End Try

If res IsNot Nothing Then
Dim str As Stream = res.GetResponseStream()
Dim strread As New StreamReader(str)

    ResultXML = strread.ReadToEnd()

    strread.Close()
str.Close()
res.Close()
End If

GC.Collect()
req.Abort()

‘正常に取れたらResultXMLをparseする

RaspbeeryPiで子供のプログラミング教育 OSをセットアップ


1.OSインストール

RaspberryPiは購入した状態ではOS(WindowsやMacOSに相当するもの)が入っておらず只の基板です。
OSはラズパイ財団が提供しているものを用意したMicroSDメモリカードに書き込み動作させます。
現在はいろいろなものが用意されていますが今回は難易度が一番低いと思われるNOOBSというインストーラーを使用します。
なんだか難しそうですが基本的にはコピーするだけなので初心者でも簡単。

https://www.raspberrypi.org/downloads/

NOOBSのDownload zipをクリックしパソコン内に保存しましょう。
記事作成時点ではNOOBS_v2_1_0.zipというファイルがダウンロードされます。
V2_1_0の部分がバージョンなので時期により名前が違う事もありますが読み違えてください。
ダウンロードが完了したらファイルを展開し、展開されたファイルを丸ごと用意したMicroSDカードへすべてコピーします。
コピーが完了したらMicroSDカードをRaspberryPiに取り付けいよいよ電源投入

モニターやキーボード、マウスなど接続が完了したら電源ケーブルを刺しましょう。
電源スイッチは無いので問題なければNOOBSが起動します。
画面が真っ暗なままなら一旦電源ケーブルを抜き、MicroSDカードや接続部分の見直しをします。

電源が入らない場合のチェックポイント
MicroSDカードのフォーマット形式がFAT32になっているか?
モニターとの接続、モニターの入力ソースの設定などの正しいか?
RaspberryPiの基板上のLEDが点灯しているか?
電源の容量は足りているか?2.5アンペア以上

DSC02944

正常に起動すると上画面のようなNOOBSのインストーラが起動するのでRaspbianにチェックを入れ「Install」をクリック。

DSC02945

SDカードを上書きするよ的なメッセージが出るのでYesをクリック。
するとOSのコピーが始まりインストールが完了する。

DSC02946DSC02947DSC02949

OKをクリックすると再起動がかかりRaspbianというLinux OSが起動します。

DSC02950

↑起動画面

2.OSのインストール後初めにやること

OSのインストールが完了するとすでに一通りのアプリケーションがセットアップされているのですぐ使用する事ができますが、RaspberryPiの生まれが英語圏ということで色々な部分が外国使用です。それらの設定は「Raspberry Pi Configration」というツールで設定変更することができます。

画面左上のラズベリーボタンを押し、「Preferences」→「Raspberry Pi Configration」をクリックします。

設定が必要な部分はLocalisationの部分です。
Locale、Timezone、Keyboard、Wifi Countryをそれぞれ次のように設定してください。

Locale
2017-01-08-141947_1824x984_scrot

Timezone
2017-01-08-232021_1824x984_scrot

KeyBoard
2017-01-08-232052_1824x984_scrot

Wi-Fi Country
2017-01-08-232120_1824x984_scrot

設定が完了したら右下のOKボタンで閉じます。
Rebootが必要とでるのでYesを選択して再起動します。

3.日本語入力環境をセットアップ

2017-01-02-100332_1824x984_scrot

左上のラズベリーボタンがWindowsのスタートメニューのような役割です。
すでにインターネットブラウザやOfficeアプリケーションなどインストールされていますのでいろいろ使用できますがこの状態では日本語の入力ができません。
今回は最後に日本語の入力ができるようにしてみましょう。

その前にRaspbianのパッケージを最新のものに更新します。
WindowsのWindows upateのようなものですがRaspbianの場合はコマンドで行います。

左上の左から4番目のボタン、もしくはラズベリーボタン-「アクセサリ」-「LXTerminal」をクリックしコマンドライン端末を開きます。

sudo apt-get update
sudo apt-get –y dist-upgrade

此れだけです。
バラバラと英文字が表示されますがほおっておけば終わりますのでしばらく待ちます。

パッケージの状態によっては以下のようなメッセージが表示されて待機状態になる場合がありますのでENTERキーなどでスクロールさせ「Q」押します。

2017-01-02-104217_1824x984_scrot2017-01-02-104221_1824x984_scrot

日本語入力環境パッケージ

sudo apt-get install ibus-mozc fonts-takao

システムを再起動します。
(ラズベリー-「Shutdown」-「reboot」)

先ほどまで一部英語だったメニュー表示が日本語表記になり「半角/全角」キーでWindowsのように日本語入力ができるようになります。

次回はいよいよプログラミングの準備を始めたいと思います。

RaspbeeryPiで子供のプログラミング教育 ~準備編~


最近では小学校でもパソコン授業があるようで、そういった知識を持たない親御さんはどうしたら良いか、また今後プログラミングが必修科目になるなどプログラミング教室みたいなものに通わせようかなんて考えている人もいるかと思います。

学校では先生方も苦労しているなんて話も聞きますが、今回は子供(小学生くらい)を対象にした最適なプログラミング教材であるRaspberryPiを紹介します。
私のblog内でもさんざん扱っていますが、このRaspberryPiは海外で教育用目的で開発された安価なボード型のコンピューターで世界中である程度の実績を持っております。
改めて紹介すると、RaspberryPiは現在バージョン3のModelB。
初代と比較すると処理能力も大幅にアップ。
RaspberryPiの詳しいことは以下参照されたし。

https://ja.wikipedia.org/wiki/Raspberry_Pi

ここでは私の子供を交えて RaspberryPi で出来るプログラミング教育について考えてみたいと思う。
プログラミング教育と言っても将来プログラマーになって欲しいという訳ではなく、物事の考えからというか論理的な考える力をプログラミングを通して養ってもらいたいと思う。
私の子供が小学2年生になる頃、ログラミング授業が必修化になるようですが如何なる言語をつかうのか?
どのような端末で?
また文部科学省からは内容などについては学校の裁量でなど不透明な部分が多く不透明。
また現段階で如何なるプログラミング言語を選択したとしても将来的には陳腐化している可能性もあり様々な面で難しい問題を抱えているのも事実。
しかしプログラミングに要する思考は将来的にも役に立つと思うし、私が小学校の時に習得したBASICもすでに過去の遺物と化しておりますがその時の知識や思考過程は今のIT系の仕事をしていく上での基礎となっています。
当時はポケコンという関数電卓での簡易プログラム機能でしたので今とは比較になりませんがコンピュータの基礎的な部分は変わりません。
RaspberryPiでは様々な言語形態でプログラミングをすることが可能ですが、ここでは教育目的につくられたビジュアル的にプログラミングを行えるscratch(スクラッチ)を使用しプログラミング学習を進めていきたいと思います。
Scratchは最近であればiPadなどでも試すことができ子供向けのプログラミング教室などで広く採用されているものであります。
このscratch、

if a==0 { ・・・

とか英文でのプログラミングでなく、部品を並べて行く感じのプログラミング手法です。
(https://scratch.mit.edu/)

学習というと勉強?
というと子供しては引いてしまう感がありますが今人気のMineCraftと組み合わせることでグッと興味をそそる事でしょう。
そう、この興味がある、が重要です。
MineCraftを組み合わせることで実行結果が目に見えて判るから楽しみながら自然と学習できます。
ラズパイを使用すれば以上の事は安価で実現できるのです。

では、さっそく始めましょう。

個人的な何でもない話ですが、昔コモドールという海外のメーカーが日本でのみ販売していたMaxMachineという家庭用のゲーム機のようなコンピュータがありまして、私もなけなしのお年玉で購入した一ユーザーでした。
MAX-BASICというBASICを使えるカセットでBASICのプログラミングが出来るのですが開いたマニュアルの初めの言葉が「さあ、はじめよう」だったと思います。
子供心に何かわくわくするものを感じた一瞬でした。
今回はとりあえず実行環境を準備するところを解説していきたいと思います。

RaspberryPi 本体と必要なものを準備しましょう。

最低限必要なモノリスト

(1)RaspberryPi3 ModelB本体

パソコン本体だと思ってください。これが無いと何もできません。
できれば専用のケースとセットのものが良いかもです。
私が代々 RaspberryPiを使ってみた感覚では RaspberryPi3Bでないと快適に動作しましえん。
価格差も差ほどないので過去のものを選択する利点はありません。
最新のものをチョイスしましょう。
無線LANが内蔵されている所もポイント高いです。

(2)MicroSDメモリカード 16GB~32GBくらい

スマホなどで使うMicroSDメモリカードです。
MicroSDカードはあらかじめFAT32形式でフォーマットしておきましょう。

(3)SDカードリーダー/ライター

セットアップ時に必要です。
パソコンからMicroSDカードへOSを書き込む際に必要です。
ノートPCだと本体に付いている場合がありますので余計に買わないように注意してください。

(4)電源+ケーブル

USBケーブルで給電するので容量が足りればスマホ用の充電器でも使えるかもしれませんが余裕をもって専用のものを使った方がトラブルがなくていいかも。
一応5V2.5A以上が安心です。
電源とRaspberryPiはMicroUSBのケーブルで給電します。
ちなみにRaspberryPi側に電源スイッチはありません。
電源挿したら即起動って感じです。

(5)キーボード・マウス

USBのものであればパソコン用のものが使えます。
あれば代用しても可。
新品を購入しても2000円くらいのものからあります。

(6)HDMIケーブル

RaspberryPiとモニターを接続するのに必要です。
安価なもので構いませんが長さは環境に合わせてチョイスしてください。
家電量販店などではメーカー製の高価なものしかありません。
amazonやPCショップのワゴンセールなどを利用すると安く済みます。

(7)モニター

モニターは今どきのものなら家庭用の液晶TVでも使用できます。
TVで代用する方はHDMI入力端子があることを確認しておきましょう。
ちなみに20インチ程度であればパソコン用の新品モニターは12000円くらいからあります。

(8)インターネット環境

常に必要ありませんが初めのセットアップ時にはいろいろと使います。
また必須ではありませんがOSやパッケージ(アプリのようなもの)を更新したりするときに必要です。

以上あればRaspberryPiでプログラミングの学習を始めることができます。
またRaspberryPiにインストールされているワープロソフトや表計算ソフトを利用できます。

次回はいよいよOSの導入をしたいと思います。

Xojoというクロス開発プラットフォームを試しに使ってみる、のその後


先月Xojoというクロス開発プラットフォームを試しに使ってみるを書きましたが、そこそこ使ってみた感想を述べたいと思います。
以前の記事:http://www.k2-y.com/archives/2109

まだまだXojoの本来の実力をぜんぜん使えてない状態ではあるけど、ここはダメってところを言いたい。
まず第一に日本語のドキュメントがほぼ無いという点がこれを初めてプログラミングをやる方のハードルをグンとあげている。
.Net系であれば書籍も山ほどやるしネットにもあらかたやりやい事を解決できるだけの情報がある。
Javaもしかりだ。
XojoはRealBasicの後継?みたいなもののようだがそちらの情報が使えると思いきや、微妙に違うようでRealBasicで書かれたものが動いたり動かなかったり。
最終的に海外の英語で書かれたリファレンスをを見る羽目になる。
統合環境にサンプルが同梱されており結構あるので他の言語を習得している人の場合は大いに参考になるが、これからプログラミングを始めてみようという人向けの参考になるような情報が非常にすくないと感じた。

次に標準で装備されているコントロールが少なくVisualStudio系と比較した場合に作ることができるUIが貧相なものになる。
自分で使用するアプリや、業務の効率化などを目的としたアプリならば多少の事は妥協できるとしても顧客相手の開発となった場合にはカレンダーコントロールすらないのでアプリの使いやすさの面で.Net系に劣る。
業務で使用するとなると、そのあたりのUIの改善にサードパーティー製のカスタムコントロールを有償で購入する必要が生じるかもしれない。
ここでも日本のものは見つけられなかったので海外のものとなる可能性が高いだろう。

あと.NetやJavaであれば基本的には無償でバイナリーまで生成できる開発環境を構築する事ができるのにXojoではバイナリーを生成するにはライセンスを購入する必要があるのでこれもマイナスポイントだ。

以上が半月程度使った私が思うダメな点だがあるが、それを補うプラスな面がいくつかあります。

まずはデスクトップアプリケーションの場合。
以前も述べたがマルチプラットフォームなアプリケーションを簡単に作ることができる。
これはXojoを使用する上での最大のメリットであろう。
しかもJavaに比べてると情報がすくないというマイナスな面はあるが言語の習得は文法的なことで言えばそれほど難しくない。
C#やJavaではプログラミング技術や知識がないと出来ないようなことが、簡単にできる。
下手すれば1行でできる。
Windows3.1のころのGUIアプリの開発といえば開発言語はC++のみでWindowから生成する必要があったことを思うと夢のような話だ。
私的にはVB.netと比較しても簡単であると感じた。
反面、UIの自由度は低くブラックボックス的な面もあるのでローレベルな階層へのアクセスはどうなるのか現在の私のレベルでは不明である。
このデスクトップエディション?はAccessで作られた業務アプリを移植するとかには向いていると思う。
顧客情報管理用のフロントエンドにどうだろうか。
Linux版で作ればセキュリティ面で有利になるしWindowsしか使えないオペレーターに業務以外のことをさせないという意味でも良いと思う。

次にwebアプリケーションの場合。
私はこれに一番注目している。
簡単なwebアプリを作ってみたが簡単なことは本当に超簡単にできる。
(.Netでwebを開発するのに似ている)
普通のGUIアプリのようにwebアプリをプログラミングできるのでphpやjavaより100倍生産性が良いと思う。
デスクトップアプリケーションの場合のところでも触れたがDBのフロントエンドみたいなことなら簡単にできるだろう。
またphpでもJavaでもそれを稼働させるサーバーが必要だがXojoで作ったwebアプリケーションはそれすら不要である。
何形態かあるようだが、webアプリとwebサーバーを丸ごとアプリとして生成するので例えば普通のWindowsPCでもそのままサーバーになる、
XojoCloudというのもあるようでとにかく手間なくwebアプリを公開することができるようである。
apacheなどは基本無償で使えるがWindows系のサーバーを使用するとweb公開するにはバカ高いライセンス料金がかかるがXojoは自分で機器を用意すればこれも無償で済ます事ができる。
私のような自営業者には非常においしい。

まだ未知数な部分としてはwebサーバーの性能であるが、ちょっとしたものなら十分か。
なにか試験する方法はあるのだろうか。

さておきwebアプリケーションライセンスだけ、買うかもしれないです。

あとiOSとラズパイは試してないがラズパイはARM対応というだけで(Linux)デスクトップと変わらないと思われる。
でもあえてラスパイでGUIアプリを動かす事もないだろうという事でスルー。
学習用には良いとおもう。
iOSはxcode+swiftが無償で使えるしこちらのほうが情報が多いので私としてはスルー。
objectiveCやswiftチンプンカンプンで挫折した人でどうしてもiPhoneアプリとか作りたい人には有用かも。

一旦評価を止めもう少し購入検討をしたいと思います。
すべてのエディションに技術的には興味あるが、おそらく購入するとしてもwebアプリケーションだけになるでしょう。