A5:SQL Mk-2

開発のこと、日々のこと

2019/10/27
から 松原正和
0件のコメント

A5:SQL Mk-2 ER図で自由に線を引けるようにしました。

A5:SQL Mk-2のERエディタでは、これまでリレーションシップの線は最大でも「横線-縦線-横線」又は 「縦線-横線-縦線」 など、3本の線までしか対応できていませんでした。これまでも、もっと自由に線を引きたいとのご要望は受けていたのですが、なかなか大変で実装できていませんでしたが、Version 2.15.0 beta 23でようやく対応してみました。

このモードはリレーションシップの線を選択して右クリックして、線種から「自由結線」を選択することで利用することができます。

最初は直線で表示されますが、直線の中間地点にあるグレーのハンドルをドラッグすることで頂点を追加できます。

頂点を削除するには、頂点の赤いハンドルを選択して右クリックメニューから「頂点の削除」を実行すると削除できます。

なお、サブモデルの機能を使えば、あまり複雑な線を引かなくとも(自由結線モードを使わなくとも)それなりにER図を描くことができます。あまり複雑な線を描くと、かえって分かりづらくなったりすると思います。https://a5m2.mmatsubara.com/tips/er_submodel/

2019/09/29
から 松原正和
0件のコメント

A5:SQL Mk-2のデフォルトテーマカラーを変更

90年代とか昭和とか言われるA5:SQL Mk-2のデザインセンスですが、テーマ機能を使うととりあえず、ぱっと見の見た目をマシにすることはできます。

ただ、このテーマ機能はやや重い機能であるとか、高DPIで使うとタイトルバーが細くなってしまうとかいろいろ問題があるため個人的にはあんまり好きではありません。

テーマ機能を実装するより前から、テーマ機能とはべつに「テーマカラー」機能を実装していました。テーマ機能がデフォルトの「Windows」であるとき、この「テーマカラー」機能が使えます。テーマカラーはA5:SQL Mk-2の背景色(通常は灰色の部分)を決定する機能です。これを変えるだけでもモダンとまではいかなくとも、そこそこ印象は変わるかもしれません。

今回、Version 2.15.0 beta 19から、このテーマカラーのデフォルト色を灰色(システムのボタン表面色)から「薄灰桜」というやや淡いピンク基調の色に変えてみました。(A5:SQL Mk-2のテーマカラーの色は日本古来の色の名前を使っています。)

今までのデフォルトのテーマカラー

新しいデフォルトのテーマカラー(薄灰桜)

どうでしょう?

なお、使用中の環境を更新していてテーマカラーが変わらないばあい、オプションダイアログの「全般」タブから選択することができます。

2019/09/23
から 松原正和
0件のコメント

Delphi用ライブラリであるDMonkey (ECMAScriptエンジン)のUnicode対応版をGitHubに挙げてみました。

偏差値 46の現状を打破すべく、Delphi用ライブラリであるDMonkey(ECMAScriptエンジンのサブセットライブラリ)のUnicode対応版をGitHubにアップしてみました。

https://github.com/m-matsubara/DMonkey

ECMAScriptといっても、やや古いECMAScriptの仕様なので、現状どの程度の需要があるのかはよくわからないですが。

このライブラリは以前、A5:SQL Mk-2をUnicode対応したときに一緒にUnicode対応したものです。

元々、Version 0.3.9 をベースにUnicode化してA5:SQL Mk-2に組み込んでいましたが、GitHubで公開するのに合わせて、最新のバージョンである、Version 0.3.9.1に追従しています。(何か不具合仕込んでしまっていなければいいのですが…)

また、README.mdにも記載していますが、Unicode化に伴って廃止・追加されたオブジェクトやメソッドがあります。

2019/09/16
から 松原正和
0件のコメント

A5:SQL Mk-2のソース管理をGitHub(プライベートリポジトリ)にした話。そしてちょっぴり凹んだ話。

これまでA5:SQL Mk-2のソース管理は自前で建てたgitサーバーを利用していました。GitHubがプライベートリポジトリを無償で使えるようになったというのでどうしようかな~と思っていたのですが、思い切って載せ替えてみることにしました。

gitリポジトリの移行は以下のコマンド(Qiitaより引用)

$ git clone --mirror <SOURCE_REPOSITORY_URL>
$ cd <REPOSITORY>
$ git push --mirror <DESTINATION_REPOSITORY_URL>

何かトラブルがあるかと思ったのですが、あっけなく完了しました。

あんまり今まで知らなかったのですが、GitHubにはContribution Graph(通称芝生)というのがあり、コミット数に応じて、日ごとのマス目がどんどん緑色に染まります。自分のは以下のような感じ。

すごい人はほんとに芝生のように青々としているみたいですが、自分のはそこまでいかないですね。これだけ見るとまるでサンデープログラマです。むしろ、会社休んだ日がバレてしまうのではないかといった感じ。まあ、平日は家事・育児が忙しいので。(子供たちが小学校に入ったら途端に忙しくなった。)

ただ、これまではgitサーバーは補助的に使っているだけで、ソース管理は、ビルドするごとにソース全体をzipで固める運用(そしてOneDriveにバックアップ)をしていました。なので、gitサーバーにコミットしなくても全然問題なしで、実際gitサーバーにpushするのが面倒で全然pushしていない期間もありました。

実のところ開発に使っているフォルダとリリースに使うフォルダも分かれていませんでした。これからはこれも改めて、開発フォルダとリリース用のビルドフォルダを分けて、GitHubにpushされたソースをリリース用のフォルダからpullしてビルドするように、zipで固める代わりにビルドバッチ内でタグを打つようにします(しました)。これでGitHubへのpushもまじめに行うようになるはずです。(行わなければなりません。)

…ところで、FindyというサイトがGitHubの開発状況を見て「スキル偏差値」なるものを出してくれるのですが…自分の偏差値が「46」…マジですか?、標準以下ですか?。頑張っているつもりなのだけれど…。

プライベートリポジトリだとダメなのかなあ?。こちらのサイトではプライベートリポジトリも審査の対象となるようなことが書いてあるのだけど、あまりプライベートリポジトリは重視されないんですかね?。

2019/09/15
から 松原正和
0件のコメント

Delphi のIDEと高DPIディスプレイ

この記事は、Delphiの最新バージョンである、Delphi 10.3ではなく、Delphi 10.2について書かれています。新しいバージョンでは状況が異なる可能性もあります。

最近4Kディスプレイを買ったのですが、これまでも4Kディスプレイ買おうかなと考えたことはありました。しかし 「Delphiの開発環境(IDE)の表示、どうなっちゃうんだろう?」 との不安があり、躊躇していました。

問題はDelphiはフォームの設計段階では、ウィンドウやコンポーネントの位置・サイズ指定をピクセル単位で行うことです。このため4Kディスプレイなどでは、「フォームデザイン」の画面が小さくなりすぎて支障をきたさない?などと考えていたわけです。うまくフォームデザインの画面を拡大表示してくれるのでしょうか?。でも、Delphiで使うコンポーネントはデザイン画面でも実際に動作するのがウリのはずです。また、拡大縮小しなければならないプロパティはLeft, Top, Width, Heightだけとは限りません。それとも、TFormクラスにある、PixelPerInchプロパティが何か関係しているでしょうか?。設計時と異なるDPI環境ではこの PixelPerInch プロパティとの比率に従い画面サイズを調整してくれるのでしょうか?。複雑なDPI変換のルールで、動作に支障をきたさないでしょうか?。

…4Kディスプレイを購入し、実際試してみたところ…そもそもDelphiのIDEは、そもそも高DPI環境に対応していませんでした。192DPI(200%のスケーリング)にしたところ、がっつり200%にスケーリングされます。全然フォントとかきれいになりません。

テキストエディタもカクカクフォントです。

ちょっと残念ですが、あえて高DPIに対応しないおかげでDelphiの開発環境は96DPI前提のまま ピクセル単位で 開発(設計)できるのですね。 上述したような画面設計をピクセル単位で行うことに由来する問題・懸念は発生しません。

ちなみに、、、高DPIに対応しないアプリケーションを無理やり高DPIに対応させて実行する方法があります。

「ダイジョウブ・ダイジョウブ」「イケル・イケル」と唱えながら、以下の設定を変えます。(Windows 10 1903の場合)

該当の実行ファイル(DelphiのIDEはbds.exe)のプロパティを開き、「高DPI設定の変更」ボタンを押します。

「高いDPIスケールの動作を上書きします。」にチェックを入れて、下のプルダウンから「アプリケーション」または、「システム(拡張)」を選択してOKを押します。

「アプリケーション」の設定では以下のようになりました。

フォントはきれいですが、開発中の画面は指定値通りに小さくなります。ただし、タイトルバーやメニュー・非ビジュアルコンポーネントのフォントは大きくなります。あまりこのまま開発してよさそうな気がしません。

「システム(拡張)」の設定では以下のようになりました。

何か微妙にところどころフォントがきれいになるのですが、基本的にカクカクフォントです。あと、デバッグ実行されたアプリケーションまで「システム(拡張)」の設定が引きずられて96DPIで実行されてしまうようです。

DelphiのIDEはやっぱり高DPIに対応させないほうがよさそうですね。

そもそも、Delphiが画面の位置やサイズ指定をピクセル単位で行ってしまっているためだと思うのですが、DelphiのIDEは高DPI化の難しいアプリケーションのようです。最新のDelphi10.3は試していませんが、仕組み上難しいのかなあとも思います。Delphiで開発するアプリケーションは高DPI対応は問題ないのですがね。

2019/09/08
から 松原正和
1件のコメント

A5:SQL Mk-2における高DPIアプリケーション開発

A5:SQL Mk-2は一応高DPI対応ということになっていますが、これまで私の開発環境は高DPIに耐えうるディスプレイではありませんでした。1680×1050という少し変則的な解像度のディスプレイ(フルHDですらない)を2枚使って、高解像度のテストのときだけ無理やり、スケーリングを150%とかにしてみたり…。

ということで、今回4Kディスプレイを2枚導入してみました。なかなかこれ自体大変だったのですが、今回の書くのは高DPI対応アプリケーションのお話。

Windowsにおける高DPI対応は以下の3つのレベルがあります。

  • Not DPI Aware (高DPI対応無し)
  • System DPI Aware (高DPI対応あり、ただしモニターごとのDPI対応無し)
  • Per monitor DPI Aware (高DPI対応あり、モニターごとのDPI対応あり)

Not DPI Aware は内部的には古いWindowsの標準DPIである96DPIで内部的に描画され、スケーリング(拡大)されて実際のモニターに表示されます。このため高解像度のモニターでは文字や画像がモヤっとして表示されます。高DPIに何も対応しないアプリケーションはこれになります。

System DPI Aware は起動時にDPI値が決定(多分メインモニターのDPI値)され文字はきれいに表示されます。画像ももやっとしません(個別に画像を用意する必要があります)。DPIの異なるモニターに切り替わるときはシステムが自動的にスケーリング表示に切り替える仕組みとなります。ただし、Windows 10(の最近のバージョン)ではスケーリング表示時でも文字だけはきれいに描画されます。アプリケーションでは、起動時にレイアウトの調整をしたり、解像度にあわせた複数の画像を用意する必要があります。

Per monitor DPI Awareは Windows 8.1から導入され、一番新しい対応レベルです。モニターを移動するごとにDPIの変更がアプリケーションに伝達され、アプリケーション内でDPI切り替えの処理が実行されます。アプリケーションでは、起動時とDPI切り替えである、WM_DPICHANGEDイベントでレイアウト調整や画像の切り替え処理をする必要があります。

A5:SQL Mk-2 Version 2.14系ではPer monitor DPI Awareに対応していました。開発環境である Delphi 10.2 も Per monitor DPI Aware に対応することになっています。ただ、実際DPI値の異なるモニター間の切り替え動作は正しく動作していなかったようです。A5:SQL Mk-2が今どき珍しいMDIアプリケーションであることも影響しているかもしれません。

色々試してみたのですが、なかなか完全対応は難しいようです。また、DPI切り替えの処理は複数ドキュメントを開いていると結構時間のかかる処理のようで、切替処理にモタついてしまうのもなんだかいけません。

これらのことから A5:SQL Mk-2では一つレベルを落とし、 System DPI Awareに変更することにしました。これなら、DPIの異なるモニター間を移動しても画面崩れなどは起きませんし、切り替え時にアプリケーションがモタつくこともありません。実際やってみて、表示もなかなかきれいに表示されているように思います。

実際のやり方は 以下の通り。

これまでは、Delphiのプロジェクトオプションで「アプリケーション」の「高 DPI の有効化」にチェックを入れていましたが、

System DPI Awareにするには、マニフェストファイルを自分で用意するようにします。

実際のマニフェストファイルの記述は以下の通り…。「<dpiAware>true</dpiAware>」というのが、 System DPI Aware に対応する記述です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly 
          xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
          xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <dependency> 
    <dependentAssembly> 
        <assemblyIdentity 
            type="win32" 
            name="Microsoft.Windows.Common-Controls" 
            version="6.0.0.0" 
            processorArchitecture="*" 
            publicKeyToken="6595b64144ccf1df" 
            language="*" 
        /> 
    </dependentAssembly>
  </dependency> 
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
  </compatibility>
</assembly>

2019/08/28
から 松原正和
0件のコメント

A5:SQL Mk-2 Version 2.14.3 公開…ちょっと不具合

A5:SQL Mk-2 Version 2.14.3 が公開されました。…が早速ちょっと不具合を発見。

Version 2.14.3 で構文入力支援の高速化をしたのですが、ちょっとミスしたようです。

普通に、Ctrl+Spaceで構文入力支援を呼び出したあと…、


何文字か文字を入力して絞り込むと、本来は構文入力支援の候補数がそれに合わせて減っていくはずですが、候補数が減らずに、空白が表示されます。

空白の行を選択しようとすると、選択行を表す、青色の反転も表示されなくなり…、

さらにその行を選択しようと、Enterを押下すると「引数が範囲外です」エラーになってしまいます。

大きな不具合ではないと思いますが、早めに修正版をリリースしたいと思います。

2019/07/28
から 松原正和
0件のコメント

VirtualBox 6 に古いLinux(VineLinux 4.3)を導入する。

古いPostgreSQL (PostgreSQL 7.3 )の動作検証として、古いVirtualBox 6.0.10にLinux 7.3 を入れてみました。今どき何かの役に立つのかは知りませんが、何かの備忘録ということで…。

VineLinux 4.3自体の導入はすんなりと行きました。仮想マシンの作成は、タイプをLinuxに、バージョンは Linux 2.4 (32bit)を選択。メモリは 128MBがデフォルトでしたが、512MBに拡張、仮想ハードディスクは4GBから20GBに拡張しました。(なんとなく)

古いOSなので、VirtualBox Guest Additionsが入るかな?と思ったのですが、最近のUbuntuなどのように、Guest AdditionsのCDをマウントさせたら、自動実行とはいきませんでした。自動マウントまではしてくれるようでしたが、自動実行はしないようです。

とりあえずコンソールから、./autorun.sh を実行しようとすると、何かエラーが…。

詳細は良く分かりませんでしたが、(仮想)CD-ROMから実行ではなく、(仮想)CD-ROM内のVBox_GAs_6.0.10ディレクトリを適当なディレクトリ(ホームディレクトリとか)にコピーしてから実行するとうまくいきました。

しかし再起動してみると、解像度がなぜか640×480しか選べません。

とりあえず、/etc/grub.conf で「vga=0x318」(1024×768 24bitの設定値)などと記述してみるも…。

再起動してみると…、

848×480が精いっぱい。まあ、GUIでゴリゴリ何かをするわけではないのでこれで良しとします。

とりあえずは、昔ダウンロードして持っていた postgresql-7.3.21.tar.gz をドラッグ&ドロップで仮想マシンに転送し(これがしたかったので VirtualBox Guest Additionsを入れた)、以下コマンドでPostgreSQLをインストール

$ tar vfzx postgresql-7.3.21.tar.gz

$ ./configure --without-readline --without-zlib --enable-multibyte=EUC_JP

$ make

# make install

とりあえず、今日はここまで。

2019/05/06
から 松原正和
0件のコメント

A5:SQL Mk-2にテーブル設計機能を追加

これまでずっと要望があったのですが、Version 2.15.0 beta 4でようやくA5:SQL Mk-2でGUIで設計できる機能を追加しました。



これまで実装していなかったのは、テーブルの作成(再作成)はGUIでやるべきではなくDDLを書いてからやるべき派だったのと、各DB製品ごとのDDLの方言を吸収するのが大変ということがあったためです。テーブルをDROP後にCREATE TABLEでエラーになったりしたら最悪ですし。

とりあえずは、直接テーブルを作成または再作成するのではなく、そのためのDDLを作成してSQLエディタに展開するだけの機能です。

なお、再作成時はテーブルデータを消さずに再作成するためのDDLを作成します。(ワークテーブルに退避してから、DROP&CREATE、ワークテーブルからデータを戻してワークテーブルを削除する)

データを引き継ぐには列定義のグリッドで右端の列(引き継ぐ値(式))に記述します。基本的には「old.列名」を指定することになると思いますが、データ型が変わったり、列の長さが短くなったりするときは、変換を行う式を指定することになると思います。

あと、現状ではまだ作りかけの機能で、以下が未実装または不完全です。

  • オプションタブの機能(DB製品ごとのオプション項目…テーブルスペースとか、ストレージエンジンとか、キャラクタセットとか)
  • 参照整合性制約に未対応
  • トリガー機能に未対応(再作成すると消える? or エラーになる?)
  • 翻訳がまだ(英語リソース無し)
  • おそらく Oracle Database, Microsoft SQL Server, IBM Db2, PostgreSQL, MySQLのみの機能になるが、画面呼び出し時に現状ではDB製品の判別をしていない。
  • その他方針等が迷い中…。

新規テーブルを作成するには、DBツリーで対象DBを選択した状態で、メニューから[データベース(D)] – [新規テーブルの作成]を選びます。

既存のテーブルのレイアウトを変更するには、DBツリーで対象テーブルを選択し、右クリックメニューから[テーブル定義の変更(テーブル設計)]を選びます。

何か、テーブル設計の画面で何かアイディアがある方はご意見などいただければと思います。

2019/04/28
から 松原正和
0件のコメント

Windows 10 でタスクバーに消せない透明アイコンが残ったときの消し方。

これまで、Windows 10 で Windows Subsystem for Linux (WSL)の一つで、WLinux というのを使っていたのですが、これがいつの間にか、Pengwinという名称に変わっていました。

それはいいのですが、タスクバーにピン止めしていると、WLinuxの名前で透明なアイコンが残ってしまいます。しかも、右クリックしても、「WLinux」と「タスクバーにピン留めする」しか出てきません。なぜか「タスクバーからピン留めを外す」が出てきません。

困っていたのですが、以下のようなページを発見!!。

https://answers.microsoft.com/ja-jp/windows/forum/all/windows10%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90/7b7de726-695d-4524-b7c1-f314a02a5395

LINEアプリでも同じようなケースがあったようですね。

単に、Shift+右クリックで「 タスクバーからピン留めを外す 」が出るようになります。

分かってしまえば、なんだって感じのことですね。