OpenDolphin

2018年2月 6日 (火)

java 1.8.0_162 で変換中の記号フォントが小さくなる

java 1.8.0_162 にバージョンアップしてみたところ,変換中の記号のフォントが小さくなるのに気付いた。記号以外のフォントは普通に表示される。また,確定後は普通のフォントに戻る。java 1.8.0_161 ではこの現象は起こらない。

java 1.8.0_161java 1.8.0_162
Take3 Take4

変換中から確定に移行する時に,記号が入っていると,フォントのサイズが変わってパタパタうるさく見えてしまう。なんだか気持ち悪いので,1.8.0_161 を使うことにする。

インストールされている jre の削除方法

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Java

2018.5.15 追記
java 1.8.0_171, 172 でも直っていない
2018.8.1 追記
java 1.8.0_181 でも直っていない

2018年2月 3日 (土)

NetBeans から IntelliJ に移行

昨年の Java IDE のシェアは IntelliJ が 45.8% で一番になったようである。使用中のNetBeans が不調で,java がアップデートできない状態だったので,この機会に試しに IntelliJ に移行してみることにした。

IntelliJ 導入

01_2 無料の Intellij Community version をダウンロードする。起動すると Import IntelliJ IDEA settings from ダイアログが出るが,初めての使用なので Do not import settings を選択。初期設定は Skip してデフォルトにする。
11 IntelliJ の初期画面が出たら,Check out from Version Control → Mercurial と選択。
12 ダイアログに必要事項を入力,Clone をクリック。
14 Import Project ダイアログが出るので,maven を選択。
15 デフォルトに加えて,
  • Serch for projects recursively
  • Import Maven projects automatically
にチェックを入れる。
16 インポートするプロジェクトを選択する。
17 JDK を選択する。
18_2 Project Name を設定する。
20 プロジェクト読み込み完了。
21 Edit Configurations
22 Maven コマンド登録。
23

24
Build は mvn install でできるようになっているので,設定すると,メニューから,client,server を選んで pom.xml に書いた手順で jar,war ができる。
26

27
アプリケーションを設定すると,メニューからクライアントを起動できるようになる。サーバの方は,NetBeans は WildFly を使ってサーバを起動することができるが,IntelliJ の community version ではできない。
28 OpenDolphin 起動。

Directories used by Intellij to store settings, caches, plugins and logs

  1. Configuration (idea.config.path): ~/Library/Preferences/IdealC/
  2. Caches (idea.system.path): ~/Library/Caches/IdealC
  3. Plugins (idea.plugins.path): ~/Library/Application Support/IdealC
  4. Logs (idea.log.path): ~/Library/Logs/IdealC

主なショートカット

⇧⌘FPath 内のソース内容検索
⌘KCommit
⇧⌘KPush
⌘TUpdate project (Pull だけだとソースが更新されない)
^Tリファクタリングのポップアップメニューが出る
^⌥Lソースのインデントなどの整形

移行後,無駄なリファクタリングをたくさんして練習した。
慣れると結構手になじんできたので,このまま IntelliJ で行ってみることにする。

2018年1月25日 (木)

編集中カルテの自動一時保存機能

その時,突然画面から書きかけのカルテが消えた。直前まであったはずのカルテウインドウは忽然と姿を消し,デスクトップには紅葉に映えるシエラネバダ山脈 - High Sierra - の美しい景色が広がっていた。OpenDolphin の礎たる Java VM が何の託ち言も残さず突然落ちたのだ。こんな悲劇が現実に起こり得て,しかも,まさに今,実際に目の前で起きたのだと,そう認識するまでにやや数秒を要した。

泣きながらカルテを入力し直し,そして,このような悲劇を2度と繰り返すことがあってはならない,その強い思いから,編集中カルテを 1秒ごとに一時ファイルとしてローカルディスクに保存する機能 Autosave を付けた。

Autosave は 1秒ごとに KarteEditor の dirty 状態をチェックし,dirty だった場合,KartePaneDumper_2 でカルテ内容を dump して AutosaveModel を作り,さらに json 化してローカルの一時ファイルに保存する。正常にカルテ編集が終了すれば一時ファイルは削除されるが,Java VM が落ちたりした場合は一時ファイルが残る。ChartImpl 立ち上げ時に一時ファイルをチェックして,もし一時ファイルがあれば DocumentModel を復元して KarteEditor に渡し,カルテ編集中状態を回復する。

Karte

バックグランドで動作し,保存にかかる時間は数ミリ秒,シェーマの encode があっても 50ミリ秒程度以下で,パフォーマンスにはほとんど影響なかった。

がんばってプログラムしたが,実際にはこの機能が使われる日が来ないことを祈りたい。

2018年1月13日 (土)

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

まずは autoremove
$ sudo apt-get autoremove
しかる後にアップグレード。
$ sudo do-release-upgrade
java 1.8 は PPA でインストールしていたので,do-release-upgrade の際には停止される。
リポジトリ情報のアップデート
サードパーティが提供するリポジトリを使わない設定にしました
sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。アップグレード完了後、'ソフトウェアソース'
ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができます。
設定ファイルについていくつか聞かれるが,いずれもパッケージメンテナのバージョンをインストールする
設定ファイル /etc/postgresql-common/createcluster.conf の新しいバージョン (/tmp/postgresql-common.h3j36L) が利用可能ですが、現在インストールされているバージョンは、ローカルで変更されています。
設定ファイル /etc/apt/apt.conf.d/50unattended-upgrades の新しいバージョン (/etc/apt/apt.conf.d/50unattended-upgrades.ucftmp) が利用可能ですが、現在インストールされているバージョンは、ローカルで変更されています。
アップグレード完了後,再起動する。
システムのアップグレードが完了しました。
再起動が必要です
アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。
再起動したら,まず postgresql-9.3 を削除する。
$ sudo service postgresql stop
$ sudo aptitude purge postgresql-9.3 postgresql-client-9.3
データベースを 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
java 1.8 の apt line を再有効化する。 /etc/apt/sources.list.d/webupd8team-java-precise.list のファイルネームを変更し,先頭の # を除去して有効化する。*.distUpgrade は削除する。
$ cd /etc/apt/sources.list.d/
$ sudo mv webupd8team-java-trusty.list webupd8team-java-xenial.list
$ sudo rm webupd8team-java-trusty.list.distUpgrade
$ sudo vi webupd8team-java-xenial.list
$ sudo aptitude update
$ sudo aptitude upgrade
$ sudo update-alternatives --config java
以上で ubuntu 16.04 へのアップグレードは完了。

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

より以前の記事一覧

その他のカテゴリー