OpenDolphin

2020年6月 2日 (火)

簡易スタンプ編集機能

スタンプ編集に関して,これまで当院のカスタマイズでは,スタンプ選択後にダブルクリック or スペースキーでスタンプエディタを立ち上げる方法と,右クリックでコンテクストメニューを表示して編集する機能があった。

Editor   Popup

今回それに加えて,スタンプ選択後に数字キーを押して簡単な編集ができるようにしてみた。スタンプを選択して数字キーを押すと小さなテキストボックスが現れて数字が入力できるようになる。数字を入力して enter を押すと,内服薬の場合は日数を,外用剤の場合は処方量を変更することができる。

Screen_20200531190201

2020年5月28日 (木)

Google Calendar API の利用

当院では休日・休診情報を Google Calendar で管理して,ホームページ上で公開している。 OpenDolphin のカレンダーでも休日・休診情報を表示できるようにカスタマイズしていたが,表示データはプログラム内にハードコーディングであった。これを Google Calendar から情報を読み込めるようにして,データを Google Calendar で一元管理できるようにしてみた。

Google Calendar には Calendar API というのが用意されており,利用しやすいように主要言語のチュートリアルまで用意されている。そこに出ている java のサンプルを参考にしてプログラムした。Calendar API の認証にはブラウザが必要になるのだが,当院のサーバは CUI でブラウザは使えない。そこで,診察室のクライアントでデータを取込み,それをサーバに保存して,そのデータを全クライアントで利用するという方式にした。

CalendarSettingPanel で Calendar API からデータを取り込み,それをサーバに保存する。サーバ側ではわざわざ Entity を作るのも面倒なので,PnsServiceImpl の Preferences に保存するという素人丸出しの方法を使った。保存したカレンダー情報は,各クライアントが起動時にサーバから読み込む。

Settingpanel   Calendar

2020年5月11日 (月)

病名検索フィールドをカルテ検索と併用する

JWindow バージョンの JSheet を作っていい気になっていたら,mac だと JWindow の JTextField にうまくフォーカスが取れないことが判明してしまった。これではカルテ検索ダイアログが使えないではないか。

JWindow,JTextField のソースを読んでいろいろ試してみたがうまくいかず (native 領域の問題っぽい),どうしたものかと考えあぐねていたところ,ふと病名検索フィールドが目に付き,検索ダイアログをあきらめてこれを使ったらよいのではないかと思いついた。早速,⌘F でカルテ検索,⇧⌘F で病名検索ができるように切り替えるプログラムを書いた。結果的に無駄なダイアログを一つ廃止できてよかった。

左:JTextField にフォーカスが取れないダイアログ,右:ダイアログを廃止,⌘F でカルテ検索に切り替わるようにした

1_20200510204001  2_20200510204201

⇧⌘F で元々の病名検索モードに切り替わる

3_20200510204401  4

2020年5月 6日 (水)

JWindow を使った JSheet

mac のダイアログは,タイトルバーのあたりからせり下がってくる Sheet という方式になっている。これを java でシミュレートするために,JDialog を undecorated にしたウインドウを使っていた。しかしこれには,JDialog が表示されると親フレームがフォーカスを失って,タイトルバーがグレーアウトされてしまうという,かっこよくない欠陥があった。

JDialog ではなく,JWindow を使えば,親フレームを active にしたままダイアログが出せるのであるが,JWindow を modal にする方法がわからず,ずっと pending になっていた。

時間があるときに JDialog のソースを読んで,modal をどのように実現しているのかを調べていたのだが,ついに SecondaryLoop というのを発見することができた。これを使って JWindow で modal な JSheet を作った。

左:JDialog によるもの,中:JWindow によるもの,右:アニメーションGIF

1_20200506120001  2_20200506120201  Jsheet

こういう,機能的にはどうでもよいことにこだわるのは,マカーのマカーたる所以である。

2020年5月 3日 (日)

シェーマの拡大・縮小

シェーマの拡大・縮小ができるようにした。図を option + クリックすると拡大して,shift + option + クリックすると縮小する。設定した拡大・縮小率は,画像データの meta data に埋め込んで保存するようにした。

1_20200503144001

    option + クリック ↓ ↑ shift + option + クリック

2_20200503144001

2019年11月23日 (土)

domU の dolphin サーバを ubuntu 18.04 にアップグレード

  1. 準備と do-release-upgrade
    $ sudo aptitude update ; sudo aptitude upgrade
    $ sudo apt-get autoremove
    $ sudo do-release-upgrade
    
  2. java 1.8 は PPA でインストールしていたので,do-release-upgrade の際に停止される。アップデート後に自動的に java-8-oracle がインストールされる。
    リポジトリ情報のアップデート
    サードパーティが提供するリポジトリを使わない設定にしました
    sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。アップグレード完了後、'ソフトウェアソース'
    ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができます。
    
  3. アップグレード完了後,再起動する。
    システムのアップグレードが完了しました。
    再起動が必要です
    アップグレードを完了するには再起動が必要です。
    'Y' を選択すると再起動します。
    
  4. postgresql は自動的に 10.10 にアップグレードされるので,postgresql 9.5 は purge する。
    $ sudo service postgresql stop
    $ sudo aptitude purge postgresql-9.5 postgresql-client-9.5
    
  5. postgresql.conf の設定。port が 5433 になってるのを 5432 に直す。
    port = 5432
    
  6. データベースを dump から戻す。なお,dump を戻すときは posgresql.conf で fsync = off にしておくと時間の節約になる。パスワードも忘れずに設定
    $ sudo service postgresql start
    $ sudo -u postgres createuser --super dolphin
    $ createdb dolphin
    $ psql -c "alter user dolphin with password 'dolphin'"
    $ pg_restore -Fc -d dolphin dolphin_db.dump
    
  7. 再起動
以上で ubuntu 18.04 へのアップグレードは完了。

2019年11月15日 (金)

WildFly18 へのアップデート

だらだらと WildFly 10.2.0 を使い続けていたが,ついに重い腰を上げてアップデートすることにした。

WildFly 18.0.1 の準備

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

mac で WildFly 18.0.1 のビルド

brew をアップデートして mvn と ant を最新にしておく。

$ brew update ; brew upgrade

しかる後に build。ちなみに,java はまだ 1.8.0 のままである。

$ mvn install
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/jboss/jboss-parent/35/jboss-parent-35.pom
 :
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17:02 min
[INFO] Finished at: 2019-11-01T09:17:17+09:00
[INFO] ------------------------------------------------------------------------

これで wildfly-18.0.1.Final-SNAPSHOT ができる。WildFly 10.2.0 と同じく,full distributable build が欲しい場合は,build/target ではなく,dist/target の方を使う必要がある。

WildFly 18.0.1 のセットアップ

  • ./standalone.sh -b 0.0.0.0 で立ち上げて,./add-user.sh で管理ユーザ登録
  • JDBC の登録(ドライバは postgresql-42.2.8.jar),data-source の作成,パスワード登録
    $ ./jboss-cli.sh --connect
    [standalone@localhost:9990 /] module add --name=org.postgres --resources=~/Downloads/postgresql-42.2.8.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 の修正

WildFly 18 の pom.xml に合わせて,OpenDolphin クライアント・サーバの pom.xml のバージョンを変更する。
これでサーバは動いたが,ログに warning が出ていた。

WARN  [org.hibernate.orm.deprecation] (ServerService Thread Pool -- 76) HHH90000014: 
Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; 
use org.hibernate.id.enhanced.SequenceStyleGenerator instead.  
See Hibernate Domain Model Mapping Guide for details.

persistence.xmlhibernate.id.new_generator_mappings を false にして互換性を保っていたが,これだと deprecated になった SequenceGenerator を使うことになるので何とかしろと言うことらしい。Hibernate ORM 5.3.13.Final User Guide を見ると hibernate.model.generator_name_as_sequence_name のところに "Users migrating from earlier versions using the legacy hibernate_sequence name should disable this setting." と書いてあったので,hibernate.id.new_generator_mappings を消して hibernate.model.generator_name_as_sequence_name に書き換えた。

起動時に dolphin サーバを立ち上げる

wildfly を起動時に立ち上げるために /etc/init.d/jboss スクリプトを作ってルート権限で起動していたが,init.d システムは時代遅れらしく,この機会に /home/dolphin/ に wildfly を置いて,cron を使って dolphin ユーザ権限で wildfly を立ち上げることにした。lucene index も /var/lucene ではなく,${jboss.server.base.dir}/lucene に置くことにした

$ echo "@reboot /home/dolphin/wildfly-18.0.1.Final-SNAPSHOT/bin/standalone.sh -b dolphin.server.ip.addr > /dev/null 2>&1" | crontab

lucene index の作り直し

エントリー数は WildFly 10 に移行した 2017年 の 219,617 件から 259,968 件に増加したが,爆速新サーバのおかげでインデックス作成は 1時間30分で完了。

2019-11-13 08:32:00,532 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: identifierloader-1) HSEARCH000027: Going to reindex 259968 entities
2019-11-13 08:32:01,854 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-7) HSEARCH000030: 50 documents indexed in 1055 ms
 :
2019-11-13 10:02:34,091 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-8) HSEARCH000031: Indexing speed: 47.843922 documents/second; progress: 99.99%
2019-11-13 10:02:36,021 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (default task-4) HSEARCH000028: Reindexed 259968 entities

WildFly アップデート記録
  • 2008年 JBossAS 4.0.5
  • 2009年 JBossAS 4.2.3
  • 2010年 JBossAS 5.1.0
  • 2013年 JBossAS 7.1.4
  • 2015年 WildFly 8.2.1
  • 2017年 WildFly 10.2.0
  • 2019年 WildFly 18.0.1

2019年10月24日 (木)

bitbucket から github に移行

2011年から bitbicket さんのお世話になっていた。当時は bitbucket といえば mercurial だったのだが,mercurial の凋落ぶりが激しく,来年の6月から mercurial が使えなくなることが決定し,git 一択となってしまった。

vcs の導入当時 git は難しくて github を敬遠していたのだが,どうせ git 使わなきゃならないんだったら github だよなぁ... ということで github に移行することにした。移行は import repository に bitbucket の レポジトリ url を入れるだけで,とても簡単で驚いた。

ちなみに,git は xcode インストールしてると標準で入っている。

$ git --version
git version 2.21.0 (Apple Git-122)

2019年4月18日 (木)

ORCA 登録情報変更への対応

push api には患者さん登録を行った場合に push 通信してくれる api がある。これを利用して,受付患者さんのデータ変更があった場合,dolphin 側で自動的に反映させるようにした。

淀橋亀三さんの性別と生年月日を間違って登録して受け付けしてしまった。

Before

orca の患者登録画面で性別と生年月日を修正して登録する。

Orca

すると,dolphin の受付リストでも変更が反映される。

After

ちなみに,患者登録通知の subscription イベント名として "patient_information" を送ってテストしていたのであるが,orca から反応がなくて悩んでいた。試しに "*" を送って全てのイベント通知をする設定にしたところ,患者登録通知も返ってくることが分かったので,受け取ったレスポンスをイベント名 "patient_information" でフィルターして受け取ろうとしたのであるが,なんと受け取れなかった。この時点て初めてイベント名が "patient_information" ではなく,"patient_infomation" であることに気付いた。あわててウェブページや仕様書を確認してみたら,全て "patient_infomation" になっており,やられたーと思った。これはハマる人が多いのではなかろうか。

2019年4月 9日 (火)

EditorFrame のツールバーをカスタマイズ

EditorFrame のツールバーをワープロ風にしてみた。

 
Editorframe_1

より以前の記事一覧