OpenDolphin Viewer プロジェクト

 

はじめに

以前に Save the DolphinS というプロジェクトをやっていた。

OpenDolphin という電子カルテは、データ構造に癖があり、カルテ記載内容の抽出ですら、それなりに難しい。
そのため Save the DolphinS では、データベースに直接アクセスしてデータの抽出を行うソフトの作成を行なっていた。ソフトは -味も素っ気もない言い方だが-「データ移行ツール」と呼んでいた。

「データ移行ツール」は dolphin データベースに直接アクセスして、一応

・カルテ記載内容全履歴→プレーンテキスト(画像などの特殊タグ付き)+画像など

・カルテ記載内容全履歴→ rtf 形式ファイル(画像などの特殊タグ付き)+画像など

に抽出するところまではできていた。

ただ、これだと、データを他のシステムに移行する場合には便利でも、たとえば保存はするが閲覧だけでいいという場合、視認性の面で今ひとつの感は拭えない。

何かうまい解決方法はないかなと思っていたのだが、ひょんなことから移行ツールの出力を html 形式で書きだせばいいことに気がついて、ソースコードを改変して試してみたところ、まずまずうまく動いた。

細かいところでさらに修正したいところはあるのだが、例えば、以下のカルテ画面(↓)

を、html 形式で書き出すとこんな感じになる。

 

 

2号用紙風のレイアウトやフォントの属性、画像の添付位置までほぼ完全に再現されていると思う。

データ抽出というコンセプトは同じでも、(移行を考慮して)データをテキストと画像などに分離させて出力するのと(閲覧性を重視して)それらをを html にまとめるのは、使用目的の点で微妙に異なる。

また、この機能を移行ツール内に同居させておくのは、ソースコード管理の面でも何かと不便だ。

そこで、この機能を分離させ、単独のソフトとして独立させることにした。

今後はこちらを OpenDolphin Viewer と呼ぶことにする。

 

背景色を変更

 

 

 

 

 

開発グループを代表して
猪股弘明

 

 

JavaFX on M1 Mac

以前に(別サイトだが)『M1 Mac に M1(Arm) 対応の JDK をインストールする』という記事を書いた。

そこでは JavaFX に関してはまるで触れなかった。

一応、一般的なことを書いておくと、OpenJDK 11 から、JavaFX は OpenJDK とは切り離され、開発する際には専用の SDK のインストールが必要となった。
ただこれは一般論であって JDK によっては同梱されている場合もある。

上の記事で触れた zulu のやつもその一つで、実際、以下のプログラムを何の苦もなくビルドしてくれた。


import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

実行させると

とちゃんと動く。

ただ、である。

ハローワールド的なことはできても、もっと複雑な、例えば動画の再生で mediaplayer を使いたいなどと言った時、よほど環境をしっかり整えない限りできそうもない。

そもそも OpenJFX 自体、正式に M1 対応がなされたのは比較的最近のことらしい。(こちらの記事参照)

現時点(2022/5)で凝ったアプリの開発は無理なような。。。

 

で、この現状を見て思い浮かぶのは「Java と JavaScript の立場が逆転した」というよく聞くアレと一時期の「Java 警察」のハジケっぷりだ。

その話はおいおい。

 

猪股弘明

 

OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと【改訂】

以前に OpenOcean というブログで

OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと

OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと 2

という記事を書いて、おかげさまでけっこう読まれた。

が、時間の関係で2回に分けてしまって(今となっては)ボリューム的にどうかってのと、とにかく急いで書く必要が(当時は)ありいささか雑な部分も見え隠れするので、以前の内容に若干の加筆を加えて再構成。


オープンソース(Open Source Software : しばしば OSS などと略される)の電子カルテ OpenOcean/OpenDolphin は、ビルド・デプロイするだけでも出てくる役者が多いので、整理しておきましょう。

 

Java…Win, Mac, Unix などに仮想的なマシンを設定し、それを動かすための言語。したがって、Java で開発されたソフトは原理的には Win/Mac/Unix で動く。実際には windows と MacOS ではメニューの表示構成などが OS レベルで違うため、この部分は機種依存になります。他には内部の特殊文字が違う(例えばエスケープシーケンスやファイルセパレーターなど)ため、ここら辺はプログラムを組む際に工夫する必要があります。JRE は実行環境、JDK は開発用のキットです。ビルドには JDK が必要。

 

Java EE…Java Enterprise Edition の略。通常の Java をクライアント-サーバシステムを開発できるように拡張したもの、というような理解でいいと思います。機能が多彩すぎて私は全貌がまったくつかめてません。Oracle との絡み先行きは不安のようです。→ その後の経緯で Jakarta EE に引き継がれています。

 

Jakarta EE…Jakarta Enterprise Edition の略。実質的に Java EE の後継。
Java EE で使われていたパッケージ群で javax という名称が(商標諸々の問題で)使えなくなったため、これを jakarta と改名し移行作業がなされました。
実務コーディング的には今まで

import javax.servlet.*;

などと書いていたところを

import jakarta.servlet.*;

とする必要があるわけです。
仕様の全体名も Jakarta EE となりました。

 

PostgreSQL…ご存知定番のデータベースソフト。いろんなところでお世話になってます。

 

NetBeans…Java でよく使われるIDE(統合開発環境)。Java 版 VisualStudio といった方がわかりやすいか。Java の IDE は、eclipse が有名ですが、ドルフィンプロジェクトではこちらを使っていたため、私もこちらの方に慣れちゃいました。ただ先行きは不安しかない。
最近では Visual Studio Code にプラグインを組み込んでコーディングする人も増えているようです。

 

Maven…「メイヴェン」と読むのが正しいようです。「マーベン」でも通じると思うけど(内輪だけ?)。Java 用プロジェクト管理ツール、と紹介されることが多い。実用的なソフトを構築する場合、自力で書いたソースの他にライブラリが必要になってくる。OpenDolphin/OpenOcean の pom.xml に

<dependency>
 <groupId>postgresql</groupId>
 <artifactId>postgresql</artifactId>
 <version>8.4-702.jdbc4</version>
</dependency>

などと書かれてあるのは、その指定のためです(この場合は、「postgresql を使いたいので jdbc ドライバをリポジトリから取ってきてね」という意味です。ver が 8.4 と最新ではないのは古い ORCA の postgres に対応するためだと思われます)。
他にもビルドの際の細かいルールを指定できる。例えば、ウェブアプリを作成する際、最終産物を jar や war (いずれも後述)の形式にしたいときがほとんどですが、設定で対応できます。

 

WildFly…Jakarta EE(Java EE) に準拠したアプリケーションサーバ。Jakarta EE(Java EE) は仕様しか決められていないため、Java で書かれた Web アプリ実運用のためにはサーバ実体が必要。このサーバ実体の一つがWildFly。 Redhat が開発し配布している。なお、この商用版が JBoss。
Jakarta EE(Java EE) 同様、機能が多彩すぎて、全体がつかみにくい。実稼働時には(アプリ名).war (後述)をWildFly 内に配置(デプロイ)する。
なお、現時点(2022/5)での WlidFly と対応する Jakarta(Java) EE の関係は以下の通りです。

公式サイトより

Jakarta EE 9, 10 あたりの実装が遅れているようです。

 

jar と war … 通常のソースコード ***.java を javac コマンドでコンパイルするとできるのは ***.class です。実行するには、「java 環境でクラスを呼び出す」必要があるので、コマンドは

java ***

となります。「コンパイル済みのクラスを呼び出す」これが Java アプリ実行の原則です。

ところが、Ocean/Dolphin プロジェクトでは、クライアントは OpenOcean.jar 、サーバーは OpenOcean.war などという名称です。

これは、ある程度まとまった機能を提供するためには、クラスだけでは足りず、設定ファイルや画像などのリソースファイルが必要なため、それらをまとめたファイル形式が必要とされたからです。jar は、その一つで Java ARchive からきています。読み方は「ジャー」でいいと思います。

Java EE を用いる Web アプリの場合には Web application ARchive 通称 war (ウォー :戦争 war と同発音)となります。

 

 

git と github … github は先日マイクロソフトに買収され、それを日経新聞が「設計図共有サイト、8200 億で買収」と報じたため、そのネーミングセンスが話題になりました。

オープンソースのソースをインターネット上で公開しておくには、何らかの場所(リポジトリ)が必要で、その一つが、GitHub (ギットハブ。ネイティブっぽく発音するならギッ ハブでしょうか)です。他には sourceforge や GitLab などもありますが、ドルフィン一族は、その多くが GitHub でソースを公開しています。

公開されたソース(リモート)を自分のマシン(ローカル)にクローンすることもできます(というかしないと自分のマシンではビルドできない)。

ローカルやリモートのリポジトリの橋渡しをしたり、改変を記録しておくためのシステムが Git (ギット)です。
雰囲気掴みたい人は『お手軽にWin機で Git や GitHub を使う』など参照。

歴史的に見るとまず Linux カーネル構築のためのバージョン管理システムとして Git がリーナス・トーバルズの手によってつくられ、そのホスティングサービスとして GitHub ができたわけですが、実用的には上のような理解でいいと思います。

 

windows にはデフォルトで git コマンドが入っていないため、自前で git が使える環境を構築する必要があります。私は随分前に構築したっきりなのですが、それなりに面倒だった記憶があります。たぶん、ここらへんで多くの人が嫌気をさすのではないかと思います。

ただ、ここらへんくらいまでの知識があれば、ビルド・デプロイはなんとかできるでしょうか。

Open Dolphin 2.7.0b を Win10 にインストールしてみた

OpenDolphin 2.7(m) を Mac OSX にインストールする

OpenDolphin-2.7m を M1 Mac にインストールする

あたりの記事をどうぞ。
ソースコードは

github https://github.com/Hiroaki-Inomata/OpenDolphin-2.7m

に置いてあります。

 

デザインパターン…迂闊なことをいうと本職の方々に怒られそうなので wiki から引用しておくと

 

ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

 

だそうです。ソースと最終産物との間にある中間的な機能を設計する上での定型的なパターン、とでもいったらいいんでしょうか。
apple 系のOS のフレームワーク( cocoa と cocoa touch )で頻出の「xxxxdelegate」も典型的なデザインパターンの一つです。
ですが、プログラミングの初心者コースではまずは教えないと思うので、それなりに経験積んだ人でも知らない人は知らないんではないでしょうか。
また、デザインパターンを「アンチパターン」として嫌う人もいます。
OpenOcean/OpenDolphin ではシングルトンやメニューファクトリーといったパターンが使われています。
これがある程度頭に入ってないと、ソースを追っていっても何やってるかわからなくなると思います。逆に C++ あたりで過去に一回でも経験しているとその類推で何とかなることも多いと思います。

 

 

実際に改変を試みようとするとここら辺から、難しくなってくるのかなと思います。

後は、主要なライブラリなどでしょうか。私もいまだに使い方がわかっていないライブラリは山ほどあります。

Java のライブラリとしては、ORM の Hibernate が有名ですね。ORM や Hibernate に関しては、他サイトですが

ORM に関して書くよ

をご参照ください。雰囲気掴めるかと思います。

🌟 参考
より詳細なソースコードレベルでの解説は
OpenDolphin ソースコード解説
を参考にしてください。

OpenOcean / HorliX 開発チーム