電子カルテ

当院では,電子カルテとして,オープンソースの OpenDolphin 1.3.0(デジタルグローブ社)を使用させていただいています。素晴らしいソフトをオープンソースで公開されているデジタルグローブ社には,とても感謝しています。

 どんな素晴らしい電子カルテも,実際に運用するには個々の医院に合わせたカスタマイズが必要だと思います。その場合,オープンソースなら,自院のためだけに自由にカスタマイズすることができます。このブログでは,OpenDolphin を当院で運用するにあたって,色々カスタマイズした内容を公開しています。


  • カスタマイズしたソースは公開しています
  • デジタルグローブ社はライフサイエンスコンピューティング(株)と合併し,現在同社のオープンドルフィンラボとなっています
  • 本家オープンドルフィンラボの OpenDolphin は既に ver. 2.x になっています

2016年7月 9日 (土)

プリンタ更新

処方箋を印刷していた HL-5450DN が,印刷後に用紙の角がカールするようになったり,文字がにじんでしまったりするようになっていた。何とか使えるレベルではあったが,さらに,時々紙送りに失敗してエラーを出して止まってしまうようになったため,そろそろ限界と考えて,新しいプリンタを買った。ページカウントは 54,578。

当院の初代プリンタ HL-5250DN は14万ページの名機だったが,2代目の HL-5450DN は1台目は9万ページ,今回の2台目は5万ページでの交代となった。既に HL-5450DN は廃番になっていたため,3代目プリンタとして HL-L5100DN を購入した。30万ページの高耐久性をうたっているが,どれくらいがんばってくれるか楽しみである。

Photo 2 3
初代 (HL-5250DN) 2代目 (HL-5450DN) 3代目 (HL-L5100DN)
2008年〜2013年 2013年〜2016年 2016年〜

2016年7月 8日 (金)

スタンプ箱ポップアップから病名入力

スタンプ箱の傷病名ツリーのポップアップから病名入力できるようにした。病名を選択してポップアップすると,その時に開いているカルテの一覧が表示され,そのカルテに選択した病名を送ることができる。病名入力の際に,ドラッグ移動距離を大幅に減らすことができた。

Popup

2016年7月 7日 (木)

診療中に ORCA の印刷止まる

午後の診療開始直後,受付から処方箋,領収書,診療明細が印刷されなくなったという連絡あり。orca サーバを再起動してみたが症状は変わらず。処方箋を印刷しようとすると syslog にわけの分からない dump が出てくる。患者さんが結構待っていたのでかなり焦ったが,ここは冷静に頭を医者モードからコンピュータ管理者モードに切り替えてトラブルシューティングを開始した。

まずは orca の cups にブラウザでアクセス,プリンタにテストプリントを送ってみたところ正常にプリントされた。当院では,処方箋等は cups のバックエンドに送って,バックアップマシンにカーボンコピーを残しつつプリンタに送る様に設定している。そこで,orca のプリント出力先を,ダイレクトにプリンタに送るようにしてみたところ,プリントされるようになった。とりあえずこれで診療を乗り切った。

患者さんが切れてから cups のログを見てみた。

E [14:06:50 +0900] Unable to fork /usr/lib/cups/filter/foomatic-rip - Cannot allocate memory.
E [14:06:50 +0900] [Job 224056] Unable to start filter "foomatic-rip" - Success.
E [14:06:50 +0900] [Job 224056] Stopping job because the scheduler could not execute a filter.
E [14:06:51 +0900] Unable to fork /usr/lib/cups/backend/socket - Cannot allocate memory.
E [14:06:51 +0900] [Job 224059] Stopping job because the sheduler could not execute the backend.
E [14:06:52 +0900] Unable to fork /usr/lib/cups/backend/pdf - Cannot allocate memory.
E [14:06:52 +0900] [Job 224058] Stopping job because the sheduler could not execute the backend.
cups がメモリ不足で止まっていたようだった。そこで,メモリを調べてみると。
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 911564  23084  13584 165496   17  106   124   134   77   67  1  0 99  0  0
$ free -t
             total       used       free     shared    buffers     cached
Mem:       1013348     991528      21820      39876      13628     166520
-/+ buffers/cache:     811380     201968
Swap:      1048572     911536     137036
Total:     2061920    1903064     158856
血の気が引いた。慌てて最新 orca の必要メモリを調べてみたら,4GB 以上,最低 2GB となっていた。以前から orca には 1GB しか割り当てていなかったため,スワップ領域を食い尽くして,ギリギリの状態で動いていたようだ。

緊急に容量を工面して,orca のために 3GB 用意した。これでプリンタ出力先をバックエンドに戻しても問題なく印刷されるようになり,その後の業務も問題なく終了。

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 404244 124896 528624    0    0    23    23   63   56  1  0 99  0  0
$ free -t
             total       used       free     shared    buffers     cached
Mem:       3069452    2665032     404420      64548     124904     528628
-/+ buffers/cache:    2011500    1057952
Swap:      1048572          0    1048572
Total:     4118024    2665032    1452992

業務終了後,メモリを買ってきて造設 (DDR3メモリずいぶん安くなってた)。余裕をもってトータル 16G にして,orca には推奨の 4GB を割り当てた。メモリ増設後の1日業務終了後,かなりの余裕。

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1148244 147516 679468    0    0     4    21   77   68  1  0 99  0  0 
$ free -t
             total       used       free     shared    buffers     cached
Mem:       4097504    2949632    1147872     141864     147524     679532
-/+ buffers/cache:    2122576    1974928
Swap:      1048572          0    1048572
Total:     5146076    2949632    2196444
2010年には 4GB で湯水のようにメモリが使えると喜んでいたのに,今や orca だけで 4GB である。

2016年7月 1日 (金)

Retina iMac 対応

結構高いので,昨年からどうしようかと悩んでいたが,ついに物欲に負けて Retina iMac 27 インチモデルを購入した。OpenDolphin に細かい修正を加えて Retina 対応した。

  • JTable のグリッドを表示すると,グリッドが2ドット幅になって,しかも少しずれてしまう。 workaround を探していたところ,レンダラの print(Graphics)を Override して,以下のように,はみ出して線を引くと1ドット幅の線が描けるのに気付いた。通常の解像度ではこの線は表示されない。
    // grid for retina iMac
    @Override
    public void paint (Graphics graphics) {
      super.paint(graphics);
      Graphics g = graphics.create();
      g.setColor(Color.WHITE);
      g.drawLine(0, getHeight(), getWidth(), getHeight());
      g.dispose();
    }
    
    左が JTable のグリッドを表示したもの,右が上記のコードで1ドット幅の線を引いたもの。

    Scr5

    どうもバグを利用している感がある。

  • JavaFX のフォントが今ひとつ汚くて,ヒラギノ丸ゴシックでごまかしていたが,Retina にしたら "Hiragino Sans" できれいに表示されるようになった。
  • コマンドラインから起動したときには自動的に Retina 対応になるが,*.app から起動するときは,パッケージ内の info.plist に以下のキーを追加する必要がある。
    <key>NSHighResolutionCapable</key>
    <true/>
    
    これは,appbundler-1.0.jar の代わりに appbundler-1.0ea.jar を使うと自動的に入れてくれる。

画面の違いは想像以上に明らかで,Retina を見た後で普通の画面を見ると,ボケボケに見えてしまう。初めて PC-98XL の画面を見せてもらった時の感動を思い出した。

受付リスト (下が Retina)

文字のくっきり度が全然違った。

Scr1

JavaFX で作った SchemaEditor (下が Retina)

SchemaEditor のアイコンを SVG で作っていたので,retina にして違いが際立った。

Scr3

2016年6月 8日 (水)

XQuartz 2.7.9 アップデートではまる

XQuartz 2.7.9 が来ていたので,何気なくアップデートしたら,クライアントから xserver につながらなくなった。
GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Error: cannot open display: xxx:0.0
XQuartz の「環境設定>セキュリティー>接続を認証」のチェックマークが外れていたので,入れ直して再起動,しかしつながらず。色々やっているうちに,サーバマシンで
$ xclock
とすると表示されるが,DISPLAY 変数を設定するとエラーになることに気付いた。
$ DISPLAY=localhost:0.0 xclock
Error: Can't open display: localhost:0.0
もしかして,tcp ポートを聞いてない? と気付いてググったらヒットした。
調べてみると,確かにポート 6000 を聞いていない。
$ netstat -na | grep 6000 | grep LISTEN
$
/opt/X11/bin/startx に以下のパラメータをセット
defaultserverargs="$defaultserverargs -listen tcp"
6000 を聞くようになった。
$ netstat -na | grep 6000 | grep LISTEN
tcp4       0      0  *.6000                 *.*                    LISTEN     
tcp6       0      0  *.6000                 *.*                    LISTEN     
$
解決に2時間くらいかかった orz。

2016年6月 7日 (火)

iMac のヒンジが折れる

土曜日の診療中,診察室の iMac が突然うなだれて下を向いてしまった。画面の角度を変えようとしても,ガタンと戻ってしまう。

とりあえず,その辺の物でつっぺかまして対応し,診療終了後にウェブで調べてみたところ,iMac Late 2013 で頻発するヒンジ折れの故障らしく,無償修理の対象となっていることが分かった。
 札幌のアップルストアが撤退してしまったので(泣),週明け月曜日の診療終了後にアップルサポートに問い合わせた。アップルサポートはこちらから電話しなくても,ウェブでリクエストすると向こうから電話をかけてくれる。長々と保留音を聞かせられずにすむのでよいシステムだと思った。
 事情を説明すると,やはり無償修理の対象とのことで,木曜日の午前中に引き取りとなった。壊れた iMac はヤマトさんに回収されていき,帰ってくるまでの診療はバックアップマシンで行った。そして土曜日にアップルに到着したとのメール,さらに同日修理完了,製品発送のメールが届き,月曜日にはもう帰ってきた。火曜日から元の iMac で診療できるようになった。

2016年2月29日 (月)

Ethernet が突然つながらなくなる

今朝,いつもどおり院長室の imac を起動したら,ネットワークがつながらなかった。ケーブルを挿し直したり,再起動したりしてみたがダメで,システム情報のハードウェアの "Ethernet カード" を見てみたら,
このコンピューターには、PCI Ethernetカードが取り付けられていないようです
との表示。当院では wifi は使わないことにしているが,こういう場合なので,診察室の imac をテザリングにしてネットに接続,ググってみたところ,なんとソフトウェアの問題だった。
https://discussionsjapan.apple.com/thread/10171150
知らないうちに /System/Library/Extensions/AppleKextExcludeList.kext が書き換えられて,ether ドライバをブラックリストに載せてしまうため,ドライバがロードできなくなるということだった。幸い,診察室の imac はネットにつながっていたので,慌てて自動アップデートを切って調査開始。
/System/Library/Extensions/AppleKextExcludeList.kext/Contents/version.plist によると
診察室:3.27
院長室:3.28.1
で,確かにバージョンが上がっていた。
院長室の imac を ⌘-R を押してリカバリモードで起動,診察室の imac から持ってきたバージョン 3.27 のファイルをターミナルでバージョン 3.28.1 と入れ替え,kext キャッシュを消去して再起動したら無事つながるようになった。
# cd /Volumes/MacintoshHD/System/Library/Extensions/
# rm -rf AppleKextExcludeList.kext
# cp -r /Volumes/MacintoshHD/Users/xxx/AppleKextExcludeList.kext .
# rm -rf /Volumes/MacintoshHD/System/Library/Caches/com.apple.kext.caches
今回は診察室の imac が無事だったので助かったが,同時に入れ替わっていたらと思うと背筋が寒くなった。こういうときのために,非常用非公開 wifi ネットワークを作ることにした。

  1. 追記1
    さらに調べてみたら,アップルから公式の対処法が出ていた
    https://support.apple.com/en-us/HT6672
    $ sudo softwareupdate --background 
    
    これで,AppleKextExcludeList.kext が version 3.28.2 になる。
  2. 追記2
    /Library/Receipts/InstallHistory.plist を調べてみたところ,2/27(土)の 1:37 am に問題の 3.28.1 が勝手にインストールされていた。そういえば,院長室の imac が,金曜日に設定をいじったせいでバックアップ後のシャットダウンに失敗していて,土曜の朝まで電源がつきっぱなしになっていたのを思い出した。そしてその日に限って,夜中にバグ入り security update が発行されていたという・・・何という運の悪さ。

2016年2月 5日 (金)

8年目の運用まとめ

8年目はサーバの rest 化,orca 4.8,java 1.8, el capitan へのアップグレードなどがあったが,大きなトラブルもなく過ごすことができた。ハードウェアでは,サーバ の HD を,メイン・バックアップ共 SSD (512G) にした。
トラブルでは,プリンタ故障→交換があったが,診療が止まるようなトラブルにはならなかった。

  • データベースの PatientModel の件数
    dolphin=# select count(*) from d_patient;
     count
    -------
     24422
    (1 row)
    
  • データベースの ModuleModel の件数
    dolphin=# select count(*) from d_module;
     count
    --------
     930690
    (1 row)
    
  • Dolphin サーバの df。去年から used が全然増えていないのは,多分,HD 交換でログが整理されたから。
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda1       46G   14G   30G  32% /
    none            4.0K     0  4.0K   0% /sys/fs/cgroup
    udev            971M  4.0K  971M   1% /dev
    tmpfs           200M  184K  200M   1% /run
    none            5.0M     0  5.0M   0% /run/lock
    none            997M     0  997M   0% /run/shm
    none            100M     0  100M   0% /run/user
    
  • Orca サーバの df。7.4G → 12G に増加。
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda1       46G   12G   32G  28% /
    none            4.0K     0  4.0K   0% /sys/fs/cgroup
    udev            469M  4.0K  469M   1% /dev
    tmpfs            99M  220K   99M   1% /run
    none            5.0M     0  5.0M   0% /run/lock
    none            495M     0  495M   0% /run/shm
    none            100M     0  100M   0% /run/user
    
  • データベースの dump ファイルのサイズ。
    dolphin_db.dump.gpg 1,883,168,267 
    orca_db.dump.gpg 90,200,961
    
  • 作成したスタンプ数。
    $ grep -c stampInfo stamp.xml 
    2104
    

2015年11月 5日 (木)

AppleScriptEngine

El Capitan に移行したところ,AppleScript のスクリプトエンジンが使えなくなった。これは以下のようにすると使えるようになる。
  • client/src/resources/META-INF/services というフォルダを作って,以下の1文を書いた "javax.script.ScriptEngineFactory" というファイル名のファイルを作る。
    $ cat javax.script.ScriptEngineFactory
    apple.applescript.AppleScriptEngineFactory
    
  • new ScriptEngineManager().getEngineByName("AppleScript") となっているところを "AppleScriptEngine" にする。
     return new ScriptEngineManager().getEngineByName("AppleScriptEngine").eval(code);
    

2015年10月23日 (金)

El Capitan に移行

El Capitan に移行した。
  • El Capitan に移行したところ,プログラムはいじってないのに monsiaj の GUI 部品のデザインがフラットに変わった。Apple の java 用の L&F 部分が変わったということだろうか。
    YosemiteEl Capitan

    D01old

    D01new


  • OpenDolphin は,機能的には問題なく移行できたが,何カ所か GUI 部品の調整が必要になった。
    • デフォルトボタン,選択ボタンの色が青地に白になったために,ウインドウ状態,pressed / armed 状態,selected かどうか等で text の色を調整しなくてはならなくて,結構面倒くさかった。
    • JTextField の focus ring や文字の表示位置の調整をした。
El Capintan 移行に合わせて,Magic Trackpad を Magic Trackpad 2 に換えた。古い Magic Trackpad はクリックが難しい(上の方でクリックすると,てこの原理でものすごく力がいる)ので,タッチでクリックするように設定していたが,2 の方はどこでも軽くクリックできるので,普通にクリックで使えるようになった。クリック感がとてもよくて気に入っている。

«java 1.8.0_51 で全角スペースが入力できない