OpenDolphin

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年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

2017年2月23日 (木)

TransferHandler#getVisualRepresentation から setDragImage へ

Java 1.6 の時代から,Drag & Drop の際に,ドラッグ中のイメージを表示するのに,PatchedTransferHandler を使って,getVisualRepresentation を使用していた。
 しかし,最近 PatchedTransferHandler が頻繁に InvalidDnDOperationException ("Drag and drop in progress" exception) を出すようになったため,TransferHandler のソースを読んで解決策を探っていたところ,TransferHandler#setDragImage なるメソッドがあることに気付いた。調べてみたら Java 1.7 からこんな素敵なメソッドが標準で用意されていたのであった。早速,これを使ってソースリファクタリングして,PatchedTransferHandler は引退となった。
 なお,Windows では TransferHandler#setDragImageOffset の offset 方向が Mac と逆になるのに気付いて,そんなところにも文化の違いがあるのだなと思った。
 ちなみに,最近はダブルクリックCodeHelper での入力が多く,Drag & Drop はほとんど使わなくなってしまっている。

2017年2月 7日 (火)

カレンダーの改造

カレンダーのコードを大幅に改造した。
  • 年月は,インスペクタのタイトル部分に西暦と,薄くバックグランドで和暦も出すようにした。1ヶ月送り(Mdfb2Mdfb1)だけでなく,1週送り(Mdb2Mdb1)もできるようにした。ボタンクリックだけでなく,マウスホイールでも1週毎にスクロールできるようにした。イベントを表すバックグランドは円で出すようにした。

    Calendar1

    3週戻したところ。ピンクは受診日。

    Calendar2_2

  • 休日データベースを更新して,自院の休日も出るようにした(自分だけ使うものなので当然ハードコード)。ToolTip で休日名も出るようにした。

    Obon_3

  • Mdejectで1年分のカレンダーが出るようにした。

    Oneyear_2

  • インスペクタのカレンダー(LiteCalendarPanel/CalendarCardPanel系)と CareMapDocument のカレンダー(SimpleCalendarPanel系)が,別々のシステムになっていたのを,今回作成したカレンダーパッケージで統一した。

    Caremap_2

2017年2月 6日 (月)

DiagnosisInspector の ToolTipText

DiagnosisInspector で開始日/終了日を,年号で ToolTip 表示するようにした。

Tooltips

ToolTip 情報を見ながら書類を書いているときなどに ToolTip が消えてしまうとストレスたまるので,ToolTip を自動で消えないようにした。
// ToolTip を自然に消えないようにする
ToolTipManager manager = ToolTipManager.sharedInstance();
manager.setDismissDelay(Integer.MAX_VALUE);

より以前の記事一覧

その他のカテゴリー