昔はLinuxをメインに使っていました。

昔はLinuxをメインに使っていました。
はじめて使ったLinuxは1995年ごろのSlackwareだったかな。
カモノハシの絵のディストリです。
Linuxといえばペンギンと思っている人が多いと思うかも知れませんが、私の世代で言うとLinuxといえばカモノハシかも知れない。
JEという日本語化するパッケージを入れて使っていました。
それでもあんまり日本語化されてませんでしたけどね。
メインに使っていたころはTurbolinuxというディストリを使っていました。
当時はあんまり日本語対応できてなくてあちこちで文字化けするのにそれでも無理して使ってました。
Linuxでも動作するWebブログラムに興味持っていたんですけど、
なんかひょんなことから鍋田辞書を作ることになって、そこからWindowsメインというか、ほぼWindowsだけを使うようになりました。
今ではLinuxは仮想環境(VirtualBoxとVMWare)に入れていてたまに使う程度です。
PHPで鍋田辞書Pを作ってようやく元々やろうとしていたWebプログラムに戻ったような感じです。
(PHP版は2012年かな?Perl版は2010年)
Linuxのネイティブソフトにももちろん興味を持っていました。
鍋田辞書のわりと初期の時代はWindows版の他にLinux版も公開していました。
2006年からLinux版を公開していました。
ですが、開発海峡であるKylix3(C++使用)が開発中止されたのにLinuxが大変化していって、ついていけなくなりました。
フォントの処理の方法が変わりましたし、クリップボードの方式も変わりました。
別のOSのように大変化しました。
昔のクリップボードは三つボタンマウスの真ん中ボタンで貼り付けていたんです。
C++ BuilderとKylixでWindowsとLinuxのクロスプラットフォーム開発ができるはずだったのに、夢、幻となってしまいました。
ながらくLinuxから遠ざかっていましたけど、
またいつかLinuxに戻りますよ。

なぜ今までQtを使わなかったか

Qtを今まで使わなかった理由は、
・C++ Builderのような質のよいRADがない。
・GPL/LGPLライセンスが気にいらない。
・商用ライセンスは高い。
・難しい。
・GTK+に負けて衰退するんじゃないだろうかという懸念があった。
・Windows固有の機能を利用する場合は制限がある。
・開発環境をダウンロードするのが難しかった。(エラー中断ばかり)
・なるべくC++ Builderでやりたかった。
などです。
個人的にはQtはいいものだと昔から思っていたんですが、
Qtは長らく前からGTK+と対立していて、GTK+にシェア争いで負けて衰退すると見られていた。
今現在、Qtは健在で人気がありこれからも無くなるとは思われてはいないが、KDEは人気ないしGTK+アプリは多いしLinuxディストリではGTK+のほうが重要視されているようには見える。
Qtは昔はTrolltechという会社が開発していてオープンソースの未来をこの会社一社に左右されることを懸念してQtは使うべきではないという意見があった。
オープンソースとして使う場合のQtのライセンスに対しての問題も指摘された。
こういう意見があることでQtへの興味はそがれた。
衰退するかも知れない状況のQtとオープンソース界で支持が強まっているGTK+のどちらのほうがいいのかというのは永遠?のテーマのような感じだった。
昔GTK+を試したことありますがQtと比べると機能不足で鍋田辞書をGTK+に移植はできないという結論に達してあまり興味がなかった。
Qtの機能が十分なのは知っていたけど商用ライセンスが超高額で手が出せず、フリーのライセンスだと(昔は)GPLで、GPLというライセンスにはものすごく抵抗があった。
ソースを公開したくないから。
ソースを公開するということは、せったく作ったソフトを開発の苦労をしていない他人に乗っとられて功績を全て持って行かれるということに多分なる。
C++ Builderではそんなライセンス制限ないし。
今は、Qtのオープンソース版はLGPLになって昔よりは制限が少なくなった。
LGPLではソースを公開しないですむ方法もある。
2011年にDelphi/C++ Builderの新しいGUIフレームワークのFireMonkeyが登場しQtへの興味をさらにそぐことになった。
FireMonkeyはクロスプラットフォームで今ではWindows、Mac OS、iOS、Androidに対応している。
Mac OS Xに対応しているなんてすごいと思った。
できればC++ Builderで開発したかったのでFireMonkeyにはものすごく期待した。
FireMonkeyに期待している内はQtは眼中になかった。
しかしFireMonkeyは低機能だったしVCLやCLXととの互換性が少なく不満は多かった。
2002年に出たC++ Builder6のCLXのほうが今のFireMonkeyよりずっと高機能だ。
それでもバージョンアップでFireMonkeyが進化することを期待した。
2015年のXE8からTWebBrowserが追加されるなど改善があったが機能的にあまり役に立たないものだった。
2016年8月にC++ Builder 10.1 Berlinを試してみて非常にがっかりすることになった。
TStringGridのイベントの一部をオブジェクトインスペクタで見えないように隠して、既存のプロジェクトの読み込みでTStringGridのOnClickやOnKeyDownがエラーになった。
それを解決してもコンパイル時にCellControlByRowがないとエラー、そしてTTextCellがないとかエラーが出てソース互換がなくなった。
見えるイベントを減らしたことは大きな退化。
FireMonkeyはもうだめだ。期待できないと思うようになった。
それでもTStringGridとTWebBrowserを使わない開発ではFireMonkeyも大きなメリットがあると思う。
ただ、鍋田辞書の移植にはこの二つのコンポーネントがものすごく重要だった。
FireMonkeyの期待が薄れて少しずつQtに目が行くようになった。
とは言ってもQtは前試したときにちんぷんかんぷんだったし、QtCreatorがC++ Builderと比べるとできが悪すぎて直感的に何もできないと感じた。
これは勘違いとか使い方をよく知らないだけかも知れないが、Visual StudioのC#の画面設計は特に調べなくても直感的に使えたし、調べても思うように使えなかったQtCreatorに少しは問題があるとは思う。
10月6日に暇だったのかなぜかふと思い立ちQtをやってみようと思った。
開発環境だけは大部前からインストールしてあった。
QtCreatorは使わないほうがいいのではと前にやった時に思った。
使い方を調べてもQtCreatorを使わない方法で説明されていたらどうしていいか分からないという不利な点があった。
コマンドラインでコンパイルする方法を知らなかったのでまずそこからだった。
全然分からないところからはじめたので、どうせ物にならずすぐやめてしまうだろうと思っていたが、
分からん分からんと悩みながらも根気よく数日続けると使えるようになった。
C++ BuilderのようにRADで画面設計を高速にできないが時間かければできるようになった。
(QtCreatorは使っていない)
今はQtすごくいいんじゃないかと思っている。
問題はLGPL対策というか、LGPLを受け入れる必要がある。
Qtの商用ライセンスを買えない以上はC++ Builderで作ったように気楽に作ったソフトを公開するわけにはいかない。
ソースを隠す方法を考えるのも面倒くさいし、GPLで公開したほうがいいかも知れない。
LGPLを使用していると、ライセンスを順守した上でソースを隠していても、ライセンスを理解していない人にライセンス違反とか言われるリスクがある。

Qtで開発はじめました。

QtCreatorを使わないという手段を選んで、make(nmake)でコンパイルできるようにして、勉強して作り方は分かったつもりです。
もうお勉強というよりは開発をはじめています。
C++はできるし、C++ BuilderのCLXで間接的にQtを長年使っているのでここからは速いです。
開発しているものというのは Qt版の鍋田辞書です。

Qtは入門の域を脱した。

Qtのお勉強の再開四日目。
Qtでプログラムを作れるようになったと思う。
開発を停止しているFireMonkey版の鍋田辞書の開発は非常に残念だが中止になると思う。
FireMonkyの機能不足は鍋田辞書を作るには致命的だ。
CLXで作った既存の鍋田辞書Windows版はTStringGridとTTextBrowserを使用しているが、
FireMonkeyのTStringGridはVCL、CLXとは仕様が違い過ぎる上に低機能。
そして、FireMonkeyにはTTextBrowserがない。
CLXのTTextBrowserの代替になりそうなFireMonkeyのTWebBrowserも低機能すぎて使えない。
QtかJavaなら機能面では問題ないと思う。
現行の鍋田辞書Windows版で使っているGUIフレームワークのCLXは下層でQtを使っているからQtはいろいろと都合がいい。
鍋田辞書はQtに移植できると思う。
全ての機能は移植する気はないけど部分だけでも十分価値があるかと。
そしてQtに移植するということは同時にMac OS XやLinuxにも移植できるということだ。

Qtやりはじめて三日目

Qtを試してみたことはかなり前から何回かあるんですが
よく分からないいつもすぐやめていました。
難しいしQtのライセンスにも抵抗があったしFireMonkeyの進化にも期待していたし。
しかし二日前からまた試しはじめたというか、お勉強を始めました。
正直すごく難しいです。
ものすごいスローペースでしか進まない。
初歩的なことをひとつ解決するのに半日かかったりしている。
QtCreatorを使うのはやめました。
コマンドラインでやったほうが速いんじゃないかという結論。
とりあえず、makeでコンパイルできるようにはなりました。
QTextBrowserというコンポーネントに興味を持っています。
C++ Builder6のCLXは下層でQtを使っているので間接的にQtやQTextBrowserを使ってプログラムを作ってきました。
しかし直接使うとなると、C++ Builderとの比でものすごくQtは開発効率が悪い。
学習効率も悪い。
それでももうちょっとお勉強続けます。
C++ BuilderのCLXはかなり前に開発中止になっていて不具合も残っているし古くなっているから新規開発に使えるようなものではなくなった。
C++ BuilderはCLXの代替としてFireMonkeyを出したが機能が少なくいまいち使えない。
CLXで作った鍋田辞書Windows版をFireMonkeyに移植させることはFireMonkeyの機能不足のためうまくできない。
VCLなら移植できるけどもWindowsでしか動かないなら今できあがっているCLXのままでもいいやという気があって移植ははじめてない。
難しいがQtなら理論的には移植が可能だ。
現時点とてもQtに移植できるような状態ではないですけどね。
Qt入門レベルの域を脱せれるかどうかもよくわからない状態ですから。

Javaについて

Javaは世間に思われているほど悪いものではないです。
むしろ良いものかと。
Androidも開発にはJava使ってますし。(実行環境は純正のJavaではないが)
Javaはウェブブラウザのプラグインから撤退が決まって、使える場所が限られるようになってきました。
その分、Androidに進出していて全体では衰退していないのかも知れませんが。
しかし、Androidでは純正のJava SEや、Java MEは動きません。
Javaという言語はあまり好きではありません。
Javaに対応するC言語コンパイラがあれば、よろこんでJava VMを使いますががありません。
やはり特殊な孤立した言語ですから、JavaではWindowsネイティブのソフトが普通には作れないんですね。
一応、Excelsior JETというJavaネイティブコンパイラはありますけど通常のネイティブコンパイルとはちょっと違うような気がする。
それでも十分価値があるんですが、金額が高すぎて手が出せない。
あとは、JavaもどきであるC#の台頭により価値が少なくなりました。
Javaがやっている中間言語によるマルチプラットフォーム思想は実際にはほとんど必要ないことだったんだと思います。
プラットフォームごとに作り直したりコンパイルしなおしてもさほど問題はなかった。
実際マルチプラットフォームに対応したソフトのほとんどはJavaを選ばすC言語やC++を選んでいます。
もっと言えば、マルチプラットフォーム化しないでWindows版だけ出していても特に何も問題はなかった。
私もほとんどWindows版だけ出しているし。

昨日Tcl/Tkをまた少し調べてみた

Tcl/Tkは大昔に雑誌で紹介されているのを見てちょっとだけ実行したことがあります。
その時は、真面目にこれでGUIブログラムが作れないかと考えたんですね。
すぐにこれは使えない判断する結果になりました。
Javaなどの言語が出る前はTcl/Tkも価値があったんでしょうが、今となってはわざわざTcl/TkでGUIプログラムを作る必要があるかどうかというと、まあ普通に考えてないですね。
それからはるかなる月日が経ち思い出したかのようにまたちょっと使ってみたことがありました。
テトリスのソースをダウンロードして実行して、こういうこともできるのか、すごいなあと思いました。
そして昨日、何を思ったのか実行はしませんでしたが、再度検索して調べてみました。
毎回毎回思うのは、使う気になれないですね。
Tclというスクリプト言語が邪魔なんですよね。
この言語仕様では使う気になれない。しかもインタプリタだし。
C/Tk ってできないんだろうかと思ったんですが、よくあるサンプルはC言語からTclインタプリタを呼び出すような感じでこれではC言語で書いているとは言えない。
C言語からTclをインタプリタを呼ばすにTkを使えるのどうか知りたかったですが今のところ良く分からない。
CINTっていC言語インタプリタからTkを呼ぶのが一番簡単かも知れないという古すぎるかも知れない情報が検索して出てきましたが、CINTって今もあるんでしょうか。
最近聞かないですね。
で、今日、CINTを検索しましたがなぜかダウンロードできなかった。
CINTは昔ダウンロードして試したことはあります。
いまいち使えないような感じだったかな。
CINTとTkの組み合わせの情報も皆無に等しいです。
昔、CQ出版社から発売された書籍が唯一の情報に近いかも。