pslaboが試したことの記録

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

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

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


試用期間が終了した kintone のトライアルを再度申し込む

Delphi/C++Builderクラウドサービスをデータソースとして利用できる Enterprise Connectors が2018年11月に kintone 対応したので、kintone をトライアル利用しつつ Delphi/C++Builder との連携を試していたのですが、気がつくと kintone のトライアル期間が終了してしまいました。

しかし、kintone では下記ページに記載のとおり、試用期間終了後に再度試用申し込みすることができます。 https://faq.cybozu.info/alphascope/cybozu/web/kintone/Detail.aspx?id=1049

そこで再度の試用申し込みをすることにしました。ただし再試用後も直前の試用で使っていたサブドメイン名を引き続き使いたかったので、以下の手順で再試用することにします。

  1. 試用期間が終了したサブドメインを、一旦別名のドメインに変更する
  2. 新たに試用を申し込む
  3. 新しい使用環境のアカウントを、以前の試用環境のものにあわせる
  4. 新しい使用環境のサブドメインを、以前の試用環境のサブドメインに変更する

この手順がベターなものかどうかは知らないけど、とりあえず目的は達せられたので良しとする。

Delphi/C++Buidler/RAD Studioのデータベース接続コンポーネントFireDACからDockerコンテナのMySQLにつなぐ

とりあえずざっくりな忘備録。開発環境からつないでみるだけです。

MySQL Serverを自分の作業マシンや仮想マシンに入れるのはイマイチな気がしたので、せっかくなのでDockerで作ることにします。

手順自体は普通に MySQL Server をインストールする場合と基本的には同じです。

必要なもの

準備

Delphi/C++Builder/RAD Studio Enterprise

買いましょう。

libmysql.dll(MySQLWindowsクライアント)

libmysql.dll は MySQL Connecotr/C に含まれるので、これを開発環境に一旦インストールする。

https://dev.mysql.com/downloads/connector/c/

ただし単体インストーラは存在しないので、MySQL Installer でインストールします。

MySQL Connecotr/C はインストールの途中で明示的に追加します。

インストールしたら、パスが通っているフォルダか、またはDelphiIDEのパスにコピーします。

Docker MySQLコンテナ

Delphi 10.2 では MySQL は Version 5.7 までの対応っぽい。 ここに対応データベースバージョンが書かれている。

FireDAC データベースのサポート - Status

そこで Docker MySQL コンテナイメージも 5.7 のものを選んで入手することにします。

公式のイメージは https://hub.docker.com/r/mysql/mysql-server/ に情報がありまして、これを見ると 5.7 は次のようにインストールできそうです。

docker run \
    --name mysql57 \
    -e MYSQL_ROOT_PASSWORD=secret \
    -p 3306:3306 \
    -d mysql/mysql-server:5.7

ただしこの手順で起動しても、MySQL への接続は localhost からしか行えません。そこで一旦こんなふうに実行して、root ユーザがすべてのデータベースに対して任意のノードから接続できるようにしてみます。

$ docker exec -it mysql57 mysql -uroot -p
mysql> grant all privileges on *.* to root@'%' identified by 'secret';

実際の運用環境では、当然ながら、こんなざっくりとした設定をしてはダメです。

FireDACでの接続定義の作成

TFDConnectionで、最低限、こんな感じで設定すれば接続できるはずです。黄色でハイライトされている箇所を実際の環境にあわせて設定します。 f:id:pslabo:20181110193455p:plain

設定を作ったら「テスト」を実行して設定が正しいことを確認します。

接続できたら、あとはTFDQueryなどでクエリ実行するなりして利用できます。

うまく接続できない場合は、MySQL Workbench や mysql コマンド等で接続できるかどうかを確かめるとよいでしょう。

ちなみに最初は MySQL 8 のコンテナを立てたのですが、MySQL Workbench からは正常に接続でき、FireDAC から接続するとエラーが出たので、サポートバージョンで明記されている 5.7 のコンテナを作り直しました。とはいえ、docker run するだけなので、手間なく動かせるのは大変ありがたいです。実インストールしていたら、アンインストールするとか、スナップショットに戻すとかの作業が必要になるわけですし。

Windows向けのEXEやDLLが、32bitなのか64bitなのかを調べる方法をいくつか考えてみる

アプリケーションとDLLのビット数が合わないと動かないので、確認方法を把握したいと思った

あるツールのビット数と、そのツールが使うDLLのビット数が合っていないことに気づかず、意外に手間取理ました。そこで EXE や DLL のビット数の確認方法を考察してみることにした。

とりあえず見つけた方法はこんなところ。

  • dumpbinコマンドで見る
  • バイナリを直接見る
  • fileコマンドで見る
  • 7zip のコマンドラインツールを使う

この中では、自分の環境では file コマンドでチェックするのが最もよさげ。

dumpbin コマンドで見る

Visual Studio に含まれる dumpbin.exe で見れるらしい。

こんなふうに実行すると、x64 or x86 という情報が出るらしい。

dumpbin.exe /headers ファイル名 | findstr machine

でも、自分の環境には Visual Studio を入れていないので、この方法は取れない。

直接見る

0x80 前後に以下のようなデータの並びを探せばよいそうです。

50 45 00 00 4C 01 = 32bit
50 45 00 00 64 86 = 64bit

うん、わかった。でもちょっとめんどくさい。だけど、データサイスの小さいバイナリなら、notepad や command prompt で more コマンドを使ってこんなふうに上記のデータを探せます。そう考えると、これはこれで追加のツールをインストールできない環境では悪くない方法です。

32-bit の場合

f:id:pslabo:20200713202510p:plain f:id:pslabo:20200713202810p:plain

64-bit の場合

f:id:pslabo:20200713202410p:plain f:id:pslabo:20200713202741p:plain

file コマンドで見る

macOS, Ubuntu, CentOS, cygwin などに含まれる GNU file コマンドを使えば容易に確認できます。Windows 10 で WSL を入れていれば file コマンドが利用可能です。

EXEはこんなふうに示される。

$ file System32/net.exe SysWOW64/net.exe
System32/net.exe: PE32+ executable (console) x86-64, for MS Windows
SysWOW64/net.exe: PE32 executable (console) Intel 80386, for MS Windows

DLLも、こんなふうに示される。

$ file System32/winusb.dll SysWOW64/winusb.dll
System32/winusb.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
SysWOW64/winusb.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows

file コマンドはさまざまなファイルのフォーマット判定に利用できるから、これが最も汎用性が高い。

7zコマンドを使用する

7-zip をインストール済みの場合は 7z.exe l some.exe | findstr CPU のように実行すると "CPU = x86" または "CPU = x64" という結果が取得できるそうです。

実際にやってみると、ごらんのとおり。

C:\>"C:\Program Files\7-Zip\7z.exe" l c:\windows\system32\cmd.exe | findstr CPU
CPU = x64

C:\>"C:\Program Files\7-Zip\7z.exe" l c:\windows\syswow64\cmd.exe | findstr CPU
CPU = x86

C:\>"C:\Program Files\7-Zip\7z.exe" l c:\windows\system32\winusb.dll | findstr CPU
CPU = x64

C:\>"C:\Program Files\7-Zip\7z.exe" l c:\windows\syswow64\winusb.dll | findstr CPU
CPU = x86

まとめてみると、調べ方はこんなかんじです。

  • 自分の Windows 10 環境では WSLで Ubuntu を入れているので、file コマンドが一番ラクだということがわかりました

  • WSLがなく 7zip が利用可能 or インストール可能なら 7zip を使う

  • WSL がなく、7zip もインストールできないようなら、バイナリを直接見て"PE L" or "PE d" を探す

プロジェクターがない訪問先で製品デモを行うときに、操作画面を見せる方法を考える

訪問先によっては、応接場所にプロジェクタやモニタがないことがありますが、そのときにソフトウェア製品の操作デモをスマートに見せる方法について考えてみました。

どんな方法があるか?

いろいろ考えたのですが、方法は次の3種類が挙げられます

  • モバイルディスプレイを持ち運ぶ
  • タブレットをセカンドディスプレイとして使う
  • 別のPCに画面をキャストする

このときに画面サイズは13インチ程度は欲しいです。これを下回ると細かい表示が見づらくなります。

それぞれの方法を深掘りする

モバイルディスプレイを持ち運ぶ

  • どんなデバイスからも出力できます
  • 表示品質は最良です
  • セッティングの手間も最小限です
  • ただしそれ以外の目的に使えません

ただし自分はこの方法は選びません。普段からカバンにはMacBook Pro Retina 13 inch 2台と9.7インチiPadが入っているので、ここにさらに外部モニタを追加するのは無理です。

それでもこの方法を選ぶとしたら、たとえばこんな製品があります。

タブレットをセカンドディスプレイとして使う

  • あくまでPCの出力用としてのみ利用できます
  • PC側(Windows or MacBook)とタブレットの両方に専用のソフトウェアをインストールします
  • 表示品質はそれなりだけど、描画の遅延があります
  • セカンドディスプレイとして使わないときは、普通にタブレットとして使えます
  • PC側のOSメジャーアップデートの際に問題を引き起こすことがあるので、メジャーアップデートの際は事前にアンインストールしておくことが推奨されます

すでにタブレットをお持ちならば、すぐに始められる方法です。たいていの場合はタブレット側にインストールするアプリが有償ですが、モバイルディスプレイの購入に比べるとリーズナブルな価格です。

ただしソフトウェア的に処理する都合上、どうしても処理の遅延が避けられません。

またタブレットの画面サイズは11インチ以上が望ましいです。これを下回ると大変見づらくなります。自分の場合は9.7インチ iPadでこの方法を試してみましたが、720p (1280x720) で用いた場合でも細かい部分が見づらいことがありました。

Android で使うなら iDisplay, iPad なら Duet Display あたりが選択肢になりうると思います。

別のPCに画面をキャストする

2名で訪問する場合や、1名でもPCを2台持ち運んでいる場合は、この方法がとれます。

PC の組み合わせにより、以下の3パターンが考えられます

この方法はネットワーク接続が前提なので、WiFiモバイルルータまたはスマートフォンテザリング利用が最低限必須です。5GHz帯が使える環境があればベターだと思います。

MacBook 2台の場合は「画面共有」を使うのが、どう考えても鉄板です。これは macOS 10.x の標準機能なので、何かを追加する必要がありません。操作される側のMacBookで「システム環境設定」の「共有」メニューから「画面共有」を実行すれば準備は完了。あとは操作したい側から "vnc://接続先PCの名前/" に接続するだけです。(Safariのアドレスバーや、Finder で「サーバに接続」で指定する)

同様に、Windows 8.1/10 Pro の画面を別のPCで表示する場合は、リモートデスクトップ接続がOS標準機能です。操作される側の Windowsリモートデスクトップ接続を有効にしておきます。

操作される側が Windows 8.1/10 Home の場合や、MacBookWindows 間で画面のキャストを行いたい場合は、Chrome Remote Desktop が扱いやすいです。

その他の方法

VNC を用いる方法は汎用的に利用できるはずですが、実際にはあまりオススメしがたいです。たとえばmacOS 標準の「画面共有」には VNC から接続できますが、2回目以降の接続がうまくいかない(接続後のユーザ認証が完了せず利用できない)ことがありました。

他にも、macOS の画面を別のPC上の Reflector でミラーリングする方法もありますが、こちらもおすすめしません。実際に試してみると画質があまりよくないようでした。

他に思いつく方法としては、PC2台+ビデオキャプチャ装置という方法があります。接続に一手間かかるけど、この方法は割とキレイに見せられるはずです。

自己メモ:Android SDK と NDK の違い

なんとなく自己整理のためのメモ

Android SDK - Android アプリケーション開発で一般的に使うもの。 - Kotolin (以前なら Java)で開発する - OSバージョンによって必要なAPIレベルが異なる。Google Play でアプリを配信する場合は2018年11月1日からは APIレベル26への対応が必要 - ちなみに Delphi/C++Builder/RAD Studio で APIレベル26 でアプリをビルドするには、10.3 のベータ版が必要らしい。10.2.x では未対応。10.3 ベータは、年間保守契約(アップデートサブスクリプション)期間内の場合にベータプログラムに参加することで入手できる。

Wikipedia の英語版に、OSバージョンとAPIレベルの一覧表があったのでリンク貼っとく。

Android version history - Wikipedia

Android NDK - NDK = Native Development Kit の略 - C や C++Android 向けの開発ができる - 通常の開発では使わない - Delphi/C++Builder/RAD StudioではネイティブコンパイルしてNDKでビルドしている。(Java や Kotolin にトランスパイルしているわけではない)

2018/10/12以降にDelphi/C++Builder/RAD StudioのIDE利用時に表示されるエラーを出ないようにしたい

2018/10/14 08:00 補足 エラーの発生は解決しているようなので、この記事の作業は必要ありません。 この記事は、発生したエラーの原因や、その対処方法に関する資料としてのみ、お読みいただけます。

続きを読む

iPhone7PlusのAppleCareが切れる前に無料のバッテリー交換に申し込む

バッテリー充電容量が低下したiOSバイスのパフォーマンスが意図的に下げられていた問題で2018年末まではバッテリー交換費用が通常よりも格安でできるようになりましたが、そもそもAppleCareが有効な期間は無償で交換できるので、購入してからもうすぐ2年になるiPhone7+のバッテリーを交換することにしました。

普段ならばiPhoneの修理はAppleStoreに持ち込むのですが、今回は配送修理を手配してみることにしました。単純に、どれくらいの日数で対応完了するかを知っておきたかったのです。

どうせなら、日数がかかりそうな条件で手配してみよう

各種対応は平日しか行わないと思うので、週末に集荷手配すれば、Appleへの到着はきっと月曜日になるはずです。というわけで、土曜日午前中の集荷を手配。

集荷のための準備をしよう

詳細は以下のリンク先に出ている通りなのですが、配送修理の場合は iPhone を初期化して個人に紐づかない状態で送付する必要があるようなので、以下の作業を行います。

  • バックアップする
  • iPhoneSuica を使っている場合は Wallet から明示的に削除しておく
  • iPhoneを探す」をオフにする
  • iMessage をオフにする (修理期間中に、SIMをiPhone以外で使う場合は電話番号でのiMessage受診を無効化する必要があるため)
  • 端末を初期化し、Apple ID を紐付けない状態で使える状態にしておく
  • SIMカード、ケース、フィルム類は全て取り外す。

support.apple.com

集荷の時系列ログ

あえて日数が掛かりそうなパターンで申し込んでいるので、このケースでは9/1集荷、9/6返送受け取り、となっています。これが8/31(金)の集荷だとしても土日はApple側の受け取り対応が行われないでしょうから、受け取りまでに1週間かかると考えられます。

日付 内容
2018/8/28(火) 配送修理申し込み
2018/9/1(土) 集荷
2018/9/3(月) ADSC支店宛配達完了
2018/9/4(火) Apple側 受領
2018/9/5(水) 修理
2018/9/5(水) 返送
2018/9/6(木) 到着(クロネコメンバーズで受け取り場所をコンビニ受け取りに変更)

ちなみにこれは関東圏での集荷配送を依頼しています。Appleの修理拠点がどこにあるかはよく知らないのですが、配送修理を依頼する場所によっては日数がもう少しかかるかもしれません。

感想

  • 修理期間中の予備機が無い方は持ち込み修理の方が良いと思います。

  • 予備機が手元にあるなら、配送修理はアリです。指定の時間帯に機器を引き取りにきますので、それまでに準備しておけば大丈夫です。持ち込み修理は当日(または翌日)に修理完了するメリットはありますが、都合の良いタイミングで予約を取るのが難しかったりします。

  • 修理品の集荷や配送はヤマト運輸なので、クロネコメンバーズに入っておき、修理後の受け取りをコンビニ等に変更すればタイムラグ少なく受け取れます。

  • エクスプレス修理なら端末交換になるので修理待ちが発生せず良いような気がしますが、バッテリ交換でこれが選べるかどうかは未確認です。

support.apple.com

  • Apple Store や正規サービスプロバイダへの持ち込み修理予約が都合の良い日時に取れるなら、そちらの方が待ち時間少なく対応できると思います。ただし、予約日時に機器を預けた上で、1時間後以降に再度来店する必要があることに注意が必要です。