pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


個別の文字コードで保存されているテキストファイルを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を見るとJDBCODBCというキーワードも見つかります。

docwiki.embarcadero.com

そんな中で、そもそもInterBaseを単体でインストールしようとすると、クライアントドライバとしてADO.NETODBCドライバのインストールができます。では、それらのドライバってどこにどんなものがインストールされるのかを調べてみようと思いました。

まず、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

どちらを使うかと聞かれたらちょっとだけ迷いそうだけど、ADO.NET 2.0よりはODBCドライバでしょうか。

中国語(簡体字)を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月

https://www.spectacleapp.com/

Magnet

Mac App Storeで配布される有償ソフト。 メンテナンスが継続しているので最も安心して使えそう。

https://magnet.crowdcafe.com/

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検索でひっかけようとすると、自分が考えるキーワードでひっかからないので、自分の検索用に残すためのエントリです。

qiita.com

Delphi 10.1 Berlinからは SDKTransform.exe により、 iOSmacOSSDKにアクセスするためのObject Pascalコードを生成することができます。

しかしこのツールはパラメータが複雑なので、それを楽に行うための wrapper を pik さんが作成されています。

コードは10.1Berin向けに作成されているそうですが、実際に動かしてみると10.3 Rioでもいけそうでした。