電子カルテ

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

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


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

2017年10月20日 (金)

High Sierra に移行

シェーマ箱の順番がバラバラになる

High Sierra に移行したところ,シェーマ箱のタブやシェーマの順番がバラバラになってしまった。Sierra では File#listFiles で返ってくるリストが,ファイルネームでソートされていたが,High Sierra ではバラバラに返ってくるようになった様だ。Apple File System の影響かもしれない。

File#listFiles を後からソートする様にコードを書き直した。

ソート前ソート後
Imageboxsort Imagebox
ImageBox.java
Arrays.asList(directories).stream().sorted(Comparator.comparing(File::getName)).forEach(dir -> {
  String tabName = dir.getName();
  :
ImagePalette.java
imageList.sort(Comparator.comparing(ImageEntry::getUrl));

Drag Image が縮小される

スタンプをドラッグして移動すると,別のウインドウに入ったところで Drag Image が自動的に縮小されるようになった。これは,ネイティブの動作と同じ動作である。

SierraHigh Sierra
Ddsierra Ddhsierra

2017年9月25日 (月)

インスペクタのデザイン変更

またインスペクタのデザインをいじった。
  • 全く使っていなかったツールバーを削除
  • アクアデザインからフラットデザインに変えた
  • 左ペインのインスペクタのバックグランドが重いグレーだったのを軽いグレーにした
Old_2   New_2

オリジナルの OpenDolphin はフラットデザイン(?)だったが,Quaqua 導入時にがんばってアクアデザインにカスタマイズしていた。
しかし,結局時代はフラットデザインに戻ってしまった。
下の図では BasicInfoInspector とカルテのタイトルバー部分がフラットデザイン。
Old1   New1

2017年9月14日 (木)

WildFly10 へのアップデート

だらだらと WildFly 8.2.1. を使い続けていたが,ついに思い立って WildFly 10 にアップデートすることにした。

WildFly 10.2.0 の準備

WildFly の GitHub から branch 10.x を選択,"Download Zip" して解凍する。作業時点ではこれで 10.2.0.Final がダウンロードされた。

WildFly 10.2.0 のビルド

WildFly 8.2.1 の時と同じようにビルドできた。注意点としては,full distributable build が欲しい場合は,build/target ではなく,dist/target の方を使う必要がある。build/target の方は,maven 環境がないと動かない。

WildFly 10.2.0 のセットアップ

  • ./standalone.sh -b 0.0.0.0 で立ち上げて,./add-user.sh で管理ユーザ登録
  • JDBC の登録(ドライバは postgresql-42.1.4.jar),data-source の作成,パスワード登録
    $ ./jboss-cli.sh --connect
    [standalone@localhost:9990 /] module add --name=org.postgres --resources=~/Downloads/postgresql-42.1.4.jar --dependencies=javax.api,javax.transaction.api
    [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver)
    [standalone@localhost:9990 /] data-source add --jndi-name=java:jboss/datasouces/DolphinDS --name=DolphinDS --connection-url=jdbc:postgresql://localhost/dolphin --driver-name=postgres --user-name=dolphin
    [standalone@localhost:9990 /] /subsystem=datasources/data-source=DolphinDS:write-attribute(name=password, value=dolphin)
    [standalone@localhost:9990 /] quit
    

OpenDolphin サーバの修正

WildFly10 の pom.xml に合わせて,サーバの pom.xml のバージョンを変更する。変更したら「依存性」を右クリックして,「宣言されたている依存性をダウンロード」する。
org.apache.lucene.queryParser.QueryParserorg.apache.lucene.queryparser.classic.QueryParser になって,引数の version がいらなくなったので修正する。インデックスも互換性がなくなったので,/var/lucene の中身を消去する。

OpenDolphin クライアントの修正

pom.xml のバージョンを修正して依存性をダウンロードする。

lucene index の作り直し

以前やったとおりインデックスを作り直す。エントリー数は当時 (2013年) の 117,673 件から 219,617 件に増加しており,インデックス作成も実に 3時間28分を要した。
13:05:30,906 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: identifierloader-1) HSEARCH000027: Going to reindex 219617 entities
13:05:34,786 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-2) HSEARCH000030: 50 documents indexed in 3391 ms
  :
16:33:16,248 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-3) HSEARCH000030: 219600 documents indexed in 12465287 ms
16:33:16,248 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-3) HSEARCH000031: Indexing speed: 17.616922 documents/second; progress: 99.99%
16:33:22,187 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: batch coordinator-1) HSEARCH000028: Reindexed 219617 entities

2017年9月 9日 (土)

postgres 9.3.18 から空パスワードは無効

多忙な夏を乗り越えて少し余裕ができたので,久しぶりに OpenDophin のメンテをしようと,開発マシンの Dolphin サーバを aptitude upgrade でアップデートしたところ,サーバが立ち上がらなくなった。ログを見ると,postgres の認証で失敗していた。しかし,もともと postgres にはパスワードは設定しておらず,アップデート前はそのまま使えていたはずである。

    :
Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "dolphin"
	at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:420)
    :

原因は,アップデートで postgres が 9.3.18 にアップデートされていたことであった。このバージョンから,空パスワードが許されなくなっていた。

・ Disallow empty passwords in all password-based authentication methods 

postgres の dolphin ユーザと wildfly の DolphinDS にパスワードを設定して無事サーバが立ち上がるようになった。

  • psql で dolphin データベースにパスワードを設定
    dolphin=# alter user dolphin with password 'dolphin';
    
  • jboss-cli.sh で DolphinDS にパスワードを設定
    $ ./jboss-cli.sh --connect
    Authenticating against security realm: ManagementRealm
    Username: xxxx
    Password: xxxx
    [standalone@localhost:9990 /] /subsystem=datasources/data-source=DolphinDS:write-attribute(name=password, value=dolphin)
    {
        "outcome" => "success",
        "response-headers" => {
            "operation-requires-reload" => true,
            "process-state" => "reload-required"
        }
    }
    
    これで standalone/configuration/standalone.xml に反映される
    <datasource jndi-name="java:jboss/datasouces/DolphinDS" pool-name="DolphinDS" enabled="true">
      <connection-url>jdbc:postgresql://localhost/dolphin</connection-url>
      <driver>postgres</driver>
      <security>
        <user-name>dolphin</user-name>
        <password>dolphin</password>
      </security>
    </datasource>
    

2017年6月19日 (月)

Windows 10 マシンが突然再起動する

今月から突然事務で使っている Windows 10 マシンが勝手に再起動するようになった。事務からの報告によると,しばらく問題なく動いていても,突然入力を受け付けなくなって,その後画面が乱れて再起動してしまうとのことであった。Windows 10 マシン3台が同じ症状であったことから,ソフトウェアの問題と考えられた。

まずは,何が起きているかを確認するために,再起動時にエラーメッセージを残すように設定し,問題が起きたときに見せてもらうことにした。「起動と回復」の「自動的に再起動する」のチェックを外すと,再起動の前にエラーメッセージを表示して止まるようになる。

Reboot

その結果,ブルースクリーンで以下のエラーが確認できた。
VIDEO_TDR_FAILURE (igdkmd64.sys)

当院の Windows マシンはオンボードグラフィック (インテル) を使っている。システムアップデートの時点で,インテルチップセットのビデオドライバがコンフリクトするようになったようだ。 ドライバのアップデートを捜してみたが,古いマシンなので,既にドライバは古いまま放置状態。仕方がないので,Microsoft 基本ドライバを使うことにした。

  • ドライバを外すと画面が真っ黒になるので,あらかじめ電源スイッチで電源オフできるようにしておく。
  • ビデオドライバを外す。

    0003

  • 画面が真っ黒になるので,少し待ってからスイッチオフ,その後スイッチオン。
  • 再起動後,自動的に元のドライバに更新されてしまうが,「ドライバーを元に戻す」が選択できるようになる。

    0004

  • ドライバーを元に戻すと,Microsoft 基本ディスプレイアダプターがインストールされる。

    0006

これにて症状は再現しなくなった。ビデオパフォーマンスについても,業務用に使うのであれば,基本ドライバで十分なようだ

2017年4月28日 (金)

ATOK29 関連フリーズ

診察室の iMac が,4月初めの 10.12.14 アップデートの後くらいから,1日に1回〜数日に1回程度,レインボーカーソルを出してフリーズするようになった。再現頻度が低いので,なかなか原因がつかめなかったが,top コマンドの監視でついに ATOK29 が CPU を食い尽くしている現場をつかまえた。

Atok29freeze

うすうす予想はついていたが,やっぱりまたおまえかー!という感じである。その後は,とりあえず cputhrottle で ATOK の動きを制御して対応していた。

$ sudo ./cputhrottle ${atokのpid} 10

いろいろ Web を検索してみたところ,「ATOKインサイト」のトラブルが結構報告されていたため,試しに切ってみた。環境設定の「変換補助>一時文書学習候補を表示する」を外すことでATOKインサイトが常駐しなくなる。

Atokenviron

その後10日くらい運用してみたが,フリーズは再現しなかった。試しに ATOKインサイトを再び ON にしてみたところ,その日の夕方にフリーズが再現したため,どうやら ATOK インサイトが関係している可能性が高い。ATOKインサイトは切って運用することにした。


追記) その後 ATOK30 にアップデートして,ATOKインサイトを入れても全く問題なく使えている。

2017年3月11日 (土)

受付のキーボード壊れる

受付で使っていたキーボード (Justy JKB-109B)が朝から入力を受け付けなくなった。15年前くらいに買ったキーボードで,開業当時から受付で酷使を続けてきたものである。ここまでよくがんばってくれたと思う。Do夢さんに行って,同じキーボードを買おうと思ったら,Justyさんはもう倒産してしまっているらしく,代わりに AOTECH のキーボード(AOK-112UPW)を購入した。

2017年3月10日 (金)

受付マシンを Windows 10 にアップグレード

OpenDolphin を大幅に変更したのに伴って,受付用の Windows バージョンも mac バージョンに合わせて書き直した。受付では Windows 7 を使っていたが,この機会に Windows 10 にアップグレードした。昨年の無料アップグレード期間のうちに,がんばって別のハードディスクにアップグレードしておいたので,ハードディスクを取り替えるだけで Windows 10 マシンになった。

Win1

Win2

2017年3月 9日 (木)

Independence from Quaqua

思い返せば,OpenDolphin 改造の最初の段階が Quaqua の導入であった。それ以来ずっと使用していて,本家が更新されなくなってからは自分で細々とメンテナンスをしていたが,今回少しがんばって Quaquaから独立した。

Mac の java は,JTabbedPane に wrap モードがない。スタンプ箱のようにタブ項目がたくさんある場合,wrap がない方がデザイン的にはすっきりするが,実用的にはタブは最初から全部見えた方がいいと思う。この JTabbedPane の wrap 表示が Quaqua 導入の目的の1つであった(下の画像の左)。その後,mac native design に似せた tabbed pane らしきものを独自に作ったため(下の画像の右),quaqua の JTabbedPane は使わなくなっていた。

Diagnosis2    Diagnow

もう一つ quaqua の機能で大きかったのが JSheet であった。これもそれっぽいものを java で作って置き換えた。Modal にするのに undecorated JDialog を使ったら,owner window が inactive になってしまってちょっとみっともない。Modal な JWindow ができればよいのだが,今後の検討課題とする。

Jsheet

その他のいろいろな見た目の細かいところも,UI と renderer を作って対応した。

  • JTable,JList,JTree のストライプ表示,selection color の active / inactive 切換

    Treeactive Treeinactive

  • JButton の default button 文字色の active / inactive 切換

    Buttonactive Buttonnonactive

  • JTextField の枠

    Textfield

2017年3月 7日 (火)

WaitingListImpl の年齢と生年月日を分離

受付リストの生年月日表示を,年齢と生年月日に分けた。
上が分離前,下が分離後。ちょっと見やすくなったかもしれないが微妙。

Age

«TransferHandler#getVisualRepresentation から setDragImage へ