【OpenDolphin】 商用開発元もデータ移行ツールはなかったっぽい【電子カルテ】

 

? お役御免になった電子カルテ

ちょっと前にネット上で調べものをしていたときにたまたま見つけたのがこれ。

ええと、診療所を開設していた時に OpenDolphin(という電子カルテ)を使っていたが、クローズしたので、保存義務のために環境をそのまま維持してますっていう趣旨の元商用版ユーザーさんの投稿です。

これまでにも何度か書いたが(よく参照されているは『OpenDolphin と電子カルテの3原則とメドレー』)、電子カルテには満たすべき3原則というものがあり、その一つは「保存性」だ。診療録自体に、法令上、所定の期間の保存義務があるため、極めて当然の要請なのだが、基本設計がつぎはぎだらけだと「データを外部に抽出して保存しておく」というのが難しくなる。

商用開発元がここら辺も解決していないようでは売れなくなるのは当然だったかなとは思う。

 

? お役御免になった電カルの再利用

ところで、データベースに対して新規の情報を押し込むのは面倒だが、読み出して再構成するのはそこまで難しくない。
以前に OpenDolphin のデータベースからデータを抽出してブラウザに表示させる簡単なコードを書いたことがある。

試しに患者さんの一覧(もちろんテスト患者さん)とそのカルテ(の途中経過版も含めて)のタイトルを表示させている。
カルテの表示(再構成)は若干難しいとは思うが、原理的に無理ということはない。

お役御免になった dolphin の環境を維持していくのは開業医さんにとっては負担でしかないだろうから、商用開発元はこういったツールを提供したらどうだろう。

もちろん、他電子カルテに乗り換える場合には、データ移行のツールのお世話になることになると思うが、OpenDolphin を最後に閉院ということになれば、こういったツールの方が簡便でいいだろう。

(追記)データ移行ツールに関しては以下の記事を参考にしてください。

Save the DolphinS -OpenDolphin データ抽出ツール・プロジェクト-

(追記2)データ移行ツールの出力を html に対応させました。以下の記事をご参照ください。

OpenDolphin HTML Viewer プロジェクト

 

? お役御免になった電カルを復活させる

たびたび「お役御免」という言葉を使ってはいるが、それは商用利用しているユーザーの話であって、自力運用している施設はある。

私のところにも度々連絡が来るくらいだから、それなりにいるのではないかと推測する。

Java のアップデートなどにも専用の職員さんやら医師自らがメンテしているのはないかと思われる。

ただし、設計の古さは否めず、作り替えの話は度々出ていた。

私も OpenOcean だとか言ってたし、業者さんも別言語でウェブアプリに書き直したいというようなことを言っていた。

ところで、まったく、「たまたま」なのだが、某SNSでその話になったとき、プロトタイプのプロトタイプみたいなものを披露したところ、そこそこは関係者の興味を引いたようである。

こんなやつ。

元々は(これも設計が古くなった)ORCA に一部ウェブから操作できるような改良を加えたものだが、同じコンセプトで OpenDolphin の作り直しを考えて、その雛形?を作成したのだった。

なお、ソースコードは

https://github.com/air-h-128k-il/OpenOceanDolphinBrowser

で公開している。

 

 

猪股弘明
OpenDolphin-2.7m 開発者

 

Mac で学ぶ Arm アーキテクチャ 1-2

前回、唐突にアセンブラ言語から入ったわけであるが、アセンブラ言語で注意しなければいけない点はなんだろうか?

よく言われていることだが、アセンブラは抽象度が低い。

C++ はいうに及ばず、比較的低レイヤーの操作を得意とする C でも普通にコーディングする際にはハードを意識する必要はほとんどない。

この事情は 1-1 からでも伺えるであろう。
CPU のアーキテクチャが x86-64 であっても arm であっても、(当たり前だが)C のコードは一緒でいい。アーキテクチャの違いをコンパイラーが吸収してしまからだ。

ところが、アセンブラは、命令セットなどは基本的には CPU に依存するため、CPU の仕様が頭に入ってないとまとまったプログラムを組むのは難しい。

つまり、汎用性のあるアセンブリ言語というものは存在せず、
arm に対応したアセンブリ言語
x86_64 に対応したアセンブリ言語
がそれぞれ存在している、というのが実態なのだ。

幸運なことに MacOS に入っている clang はアーキテクチャを指定することで、x86_64 向け・arm 向けのアセンブラを出力できるので、arm 向けのアセンブラ出力から arm のアーキテクチャを探っていくことにする。

なお、一口に arm といっても、型番によって微妙に違いがある。
例えば、v7 までは 32bit CPU だが、v8 は 64bit である
ここでは Mac を前提にしているので、特に断らない限り cortex シリーズを前提に話を進めていく。

 

 air-h-128k-il

 

Linux カーネルのソースコード

気にはなっていたのだが、今まで linux カーネルのソースコードを読んだことはなかった。

現在(2022 年頭)、ソースは2700万行くらいらしく、全部を読むのは無理。
動かしながらゼロから学ぶ Linuxカーネルの教科書
が、導入書としては結構良書だったので、それを手がかりにして GitHub のソースを漁る。
https://github.com/torvalds/linux/blob/master/init/main.c
が、まず最初に実行される main 関数。

アイキャッチは、ページ機能の init (初期化)をおこなっている箇所。(これでメモリが使えるようになるわけです)
関数名からカーネルが何やっているか大体想像はつくと思うが、書き方がすっきりしてますね。

だからどうしたと言われればそれまでなんですが、たとえば、医療機器を超高速で制御したいときなんて、カーネルに手を加えた方がいい場合が多い(はず)なので、担当者にはそれくらいの知識・経験を要求しますね、私なら。

 

猪股弘明

 

Mac で学ぶ Arm アーキテクチャ 1-1

実行したら 10 を返す

int main(void){
    return 10;
}

という C プログラムを

・intel Mac 向け

・M1 Mac 向け

にそれぞれアセンブラで「寸止め」コンパイルして出力させてみた。

Intel(x86_64)アーキテクチャ向け
M1(arm64)アーキテクチャ向け

すぐに気がつくのは

・レジスタの名称が全然違う

・M1 向けの方が若干すっきりしている

あたりだろう。

 

ところで、これを某所でネタにしたら「どうやってアセンブラ出力させたんですか?」という質問があった。
じゃあ、これ、クエスチョンにしますか。

Q1.1 C プログラム(ここでは test.c とします)を Mac 上で clang を使って
・x86_64 アーキテクチャ向け
・arm64 アーキテクチャ向け
にそれぞれアセンブラ出力(testx86.s と testarm.s)させるコマンドをそれぞれ作ってください。

ついでにこれも。

Q1.2 どちらのアーキテクチャでも良いが test.c の実行ファイル(test)を作成してください。
このとき実行ファイルを実行させても端末には何も表示されません。
この時の main 関数の返り値 10 を(ソースに手を加えずに)端末上に表示させるにはどのようなコマンドを用いたら良いでしょう?

解答は近いうちにアップします

解答はこちら

 

air-h-128k-il