個別の文字コードで保存されているテキストファイルをUTF-8に変換する
あるディレクトリ以下に複数のサブディレクトリがあり、その中に更に日本語、中国語のディレクトリに分かれて情報が保管されているフォルダがありました。
たとえば、こんなカンジです。
\project\ subproject1\ JP\ CN\ subproject2\ JP\ CN\
今どきはそういうファイルはUnicodeで保存されているはずですが、過去のファイルは言語ごとの個別の文字コードで保存されているので扱いが微妙に面倒です。しかも単なるテキストファイルかつ何かのシステムと連携してもいないファイルなのでまずは中国語のディレクトリのファイルをUTF-8に変換したくなったので方法を考えてみました。
もっとも単純に行おうと思ったら、ワンライナーでこういう方法です。
find . -type f -name '*.txt' | grep 'CN' | xargs -Ifilename iconv -f GB18030 -t UTF-8 filename -o filename
しかしこの方法だとファイルのタイムスタンプがすべて変わってしまいます。
ファイルの内容は文字コード変換されたことを除けば論理的に同一なのにファイルのタイムスタンプが変わっているのは不適切だと思うので、touch コマンドで次の方法に復元させつつファイルを上書きすることを考えてみました。
for filename in $( find . -type f -name '*.txt' | grep 'CN' ) ; do ls -l ${filename} iconv --from-code=GB18030 --to-code=UTF-8 ${filename} --output ${filename}.utf8 touch --reference=${filename} ${filename}.utf8 mv ${filename}.utf8 ${filename} ls -l ${filename} done
InterBase 2020 に付属するADO.NETドライバやODBCドライバを調べる
InterBaseはRAD Studio/Delphi/C++Builderで開発する時はFireDACから接続するので細かく気にしたことは無かったんですけど、InterBaseのDeveloper Guideを見るとJDBCやODBCというキーワードも見つかります。
そんな中で、そもそもInterBaseを単体でインストールしようとすると、クライアントドライバとしてADO.NETやODBCドライバのインストールができます。では、それらのドライバってどこにどんなものがインストールされるのかを調べてみようと思いました。
まず、ADO.NET 2.0 ドライバがこちら。
ビルドが2011年で、htmlのreadmeを読むとInterBase XE3のときにリリースされていることが分かります。 InterBaseはXE3以降、XE7, 2017, 2020のバージョンがリリースされていますので、そういう意味でもちょっと古め。 ただし製品に付属するのだからこれでもサポートは受けられるはず。
C:\Program Files (x86)\Embarcadero\InterBase_ADO.NET のディレクトリ 2012/08/22 16:20 65,626 ADO_NET 2_0 Driver for InterBase.htm 2011/11/07 14:55 108,544 Borland.Data.AdoDbxClient.dll 2011/11/07 14:55 1,035,776 Borland.Data.DbxCommonDriver.dll 2011/11/07 14:55 51,712 Borland.Data.DBXInterBaseDriver.dll 2011/11/07 14:55 100,864 Borland.Delphi.dll 2011/11/07 14:55 369,664 Borland.VclDbRtl.dll 2011/11/07 14:55 1,637,888 Borland.VclRtl.dll 2011/11/07 14:55 218,112 dbxadapter.dll 2012/02/22 08:16 292,864 dbxint.dll
ちなみに、ビット数を調べてみると、当然ながら32ビットのDLLでした。
ADO_NET 2_0 Driver for InterBase.htm: HTML document, Little-endian UTF-16 Unicode text, with CRLF, CR line terminators Borland.Data.AdoDbxClient.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows Borland.Data.DBXInterBaseDriver.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows Borland.Data.DbxCommonDriver.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows Borland.Delphi.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows Borland.VclDbRtl.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows Borland.VclRtl.dll: PE32 executable (DLL) (GUI) Intel 80386 Mono/.Net assembly, for MS Windows dbxadapter.dll: PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows dbxint.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows
そしてODBCドライバがこちら。 2012年や2013年のタイムスタンプなので、ADO.NETよりは新しい。
C:\Program Files\Embarcadero\InterBaseODBC のディレクトリ 2004/08/07 08:26 26,516 IDPLicense.txt 2012/08/06 15:35 1,622,016 instregodbc.exe 2012/08/09 15:46 1,315 License.txt 2012/08/10 14:41 38,699 OdbcIB.chm 2013/06/28 16:50 974,848 Odbcib.dll 2002/07/26 17:02 153,088 UNWISE.EXE 2013/06/28 16:55 1,368,576 x66\OdbcIB.dll
こちらはx64のディレクトリを含む通りで64ビットのドライバもあります。
IDPLicense.txt: ASCII text, with CRLF line terminators License.txt: Non-ISO extended-ASCII text, with very long lines, with CRLF line terminators OdbcIB.chm: MS Windows HtmlHelp Data Odbcib.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows UNWISE.EXE: PE32 executable (GUI) Intel 80386, for MS Windows instregodbc.exe: PE32 executable (console) Intel 80386, for MS Windows x64/OdbcIB.dll: PE32+ executable (DLL) (GUI) x86-64, for MS Windows
中国語(簡体字)をUnicode (UTF-16LE)に変換
ある種の元データがGB2312エンコードとの説明を受けていて、それをちょっとした処理の都合上でUnicode(UTF-16LE)に変換しようとしたら変換できずにハマったのでメモしておく。
手元のマシンはWindows Subsystem for Linux入りなので、こういう文字コード変換はbashを起動して次のように実行する。
iconv -f GB2312 -t UTF-16LE ファイル名 > 出力ファイル名
しかし実際にやってみると iconv: illegal input sequence at position 132
というエラーが出て変換できない。
どうやら、GB2312といいつつGB18030の範囲の文字が含まれていたようなので、次のようにGB18030と指定して変換したら意図通りに動いた。
iconv -f GB18030 -t UTF-16LE ファイル名 > 出力ファイル名
なおUTF-16LE に変換できたところまでは良かったのだけど、実は UTF-8 のほうが目的に合致していたので再度変換しなおした。
iPhone XR (iOS13) + Delphi 10.3 Update 3 でIDEからのデバッグ実行ができない
Delphi 10.3 Update 3 でiPhoneアプリを作成し、デバッグ実行してみると、iPhone XRでアプリ起動後にフリーズしてしまう。そしてIDEもフリーズしてしまう。
その状態でiPhoneからLightningケーブルを抜くとiPhone側ではアプリが起動するけれど、IDEはフリーズしたまま。 これではデバッグできないのでちょっと困っています。
手元の別の試験機、iPhone7+iOS11の組み合わせではデバッグ実行できたので、しばらくはこれで対応するけど、旧端末のiOS13試験機は手元にキープしていなかったので、iOS13ベースの回避方法はよくわからない。(2019年12月に、迂闊にもiPhone8からiPhone XRに端末を買い替えてしまったので)
QP (Quality Portal) で本件に関連しそうなissueがレポートされていたのでリンク貼っておきます。 https://quality.embarcadero.com/browse/RSP-26709
macOSでウィンドウのリサイズを支援するアプリ
とりあえずのメモ
Slate
細かいカスタマイズもできるし、ざっくり使うこともできる。 問題点があるとしたら、2013年2月以降のアップデートがないこと。
https://github.com/jigish/slate
Spectacle
メンテナンスが今後積極的に行われない旨が宣言されている。 最終更新は2019年11月
Magnet
Mac App Storeで配布される有償ソフト。 メンテナンスが継続しているので最も安心して使えそう。
macOSでアプリやインストーラがNotarizationされているかどうかの確認
とりあえずのメモ
アプリケーションやインストーラがNotarizationを取得しているかどうかの確認 https://applech2.com/archives/20190904-apple-adjust-app-notarization-on-macos-catalina.html
spctl --assess --verbose [path-to-app] spctl --assess --verbose --type install -v [path-to-pkg]
インストーラがNotarizationを取得しているかどうかを確認する別の方法 https://applech2.com/archives/20190612-suspicious-package-support-apple-notarization.html
DelphiでiOS向けのブリッジファイルを作る
基本的にはこちらの記事のとおりなのだけど、元記事をGoogle検索でひっかけようとすると、自分が考えるキーワードでひっかからないので、自分の検索用に残すためのエントリです。
Delphi 10.1 Berlinからは SDKTransform.exe により、 iOSやmacOS のSDKにアクセスするためのObject Pascalコードを生成することができます。
しかしこのツールはパラメータが複雑なので、それを楽に行うための wrapper を pik さんが作成されています。
コードは10.1Berin向けに作成されているそうですが、実際に動かしてみると10.3 Rioでもいけそうでした。