半田病院とオープンソースと OpenDolphin
半田病院
手が空いたので、例の半田病院の報告書をちょい詳しめに読んだのだが、ちょっと微妙。
ファイルの暗号化の話は触れられているのだが、肝心のデータベースはどうなったのか?という件はほとんど触れられていない。
半田病院のシステムがどうなっていたかは知る由はないのだが、通常、電カルの主要な情報は検索性高めるためにデータベースに格納する。
一般に、電カルのデータベースの置き場所を外部から特定して侵入するのは難易度高い。今回も周辺の設定ファイルなどを荒らしただけのような気がしないでもない。
なんで、これで業務全体がストップするのか、よくわからない。
オープンソース
半田病院の件の影響なのか「では、オープンソースの電子カルテはセキュリティの観点から安全なのか?」という話題が某所で上がった。
さて、どうなんでしょ?
OpenDolphin
私がある程度知っているオープンソースの電子カルテというと OpenDolphin なのだが、これに関していえばログイン認証などはクローズドで開発されたものに比べればやはり甘いと思う。
なにしろログイン認証の方式などセキュリティに関わる情報を教えているようなものなので、クラッキングする側から見れば「事前に問題をバラした筆記試験に挑む」ようなものだろう。
だが、それがそのまま弱点につながるかというと、そんなに単純なものでもないと思う。
半田病院の件で言えば、切れ切れに漏れてくる情報から察するに担当者がどの程度の被害なのかさえ把握できていなかった節がある。
これがもしオープンソースであり、担当者がシステムに対してある程度の知見を持っていたならば、状況はかなり違っていたものになっていたのではないかと思う。
(追記)この問題に関しては、WebDolphORCA のページなどで「3層クラサバ構成にする」というアイディアを出してます。
大阪急性期・総合医療センター病院との対比
大阪の病院でも似たような事件が起きた。
だが、こちらの方は早期に復旧した。
これは、この病院がバックアップデータを保管していて、そこから直接カルテ記載情報を復号することに成功したからだ。
半田病院はバックアップデータを取るのを怠っていたか、取っていても復号できなかったとしか考えようがなく、かなり初心者的なミスと考えられるだろう。
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 レベルで違うため、この部分は機種依存になります。他には内部の特殊文字が違う(例えばエスケープシーケンスやファイルセパレーターなど)ため、ここら辺はプログラムを組む際に工夫する必要があります。
仮想的なマシンで Java プログラムを動かすためには、当然、実行環境を提供するプログラム群が必要になってくる。Java 11 より前では、JRE という実行環境が用意されていた。Java 11 以降は、この方式は廃止され、各アプリ毎に実行環境を組み込む方式が推奨されるようになった。
Java プログラムを開発するためには JDK が必要。
Java EE…Java Enterprise Edition の略。とりあえずは、通常の Java アプリをクライアント-サーバシステムとして開発できるように拡張したもの、というような理解でいいと思います。
ただし、動的なサイトが作成可能な tomcat は、Java EE とは考えられていません(なお tomcat に Java EE の仕様のいくつかを実装した TomEE というプロジェクトがあります。日本語記事は少ないんですが『tomacat 魔改造 vs TomEE』あたりをご参照ください)。逆にウェブフレームワークとして認知されている Spring には Java EE の仕様の一つである JPA が標準で使えたりします。
これは、Java EE の機能が多彩で、単体でウェブアプリを問題なく動作させることができるアプリケーションサーバを構成するのが難しいためと思われます。
私も Java EE の仕様の全貌はまったくつかめてません。
現状だと「Java EE に対応したアプリケーションサーバは、WildFly・GlassFish・Payara・WebLogic 」と思っていいのではないでしょうか。
Java 自体 Oracle との絡みで先行きは不安のようです。→ その後の経緯で Jave EE は Jakarta EE に引き継がれて開発も継続されていますが、どうも Spring 系の方が勢いがあるような。。
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 に関しては、他サイトですが
をご参照ください。雰囲気掴めるかと思います。
? 参考
より詳細なソースコードレベルでの解説は
『OpenDolphin ソースコード解説』
を参考にしてください。