Ubuntu に Android SDK を入れたら SQLite3 (sqlite3) がそちらを参照するようになってしまった

状況

  • 以下のように sqlite3 が複数の場所にインストールされている
  • $PATH の設定上、/home/foobar/android/sdk/platform-tools/sqlite3 が優先されて使われる
$ which sqlite3
/home/foobar/android/sdk/platform-tools/sqlite3

# sudo apt install によってインストールした sqlite3
$ ls -la /usr/bin/sqlite3
.rwxr-xr-x root root 320 KB Sun Mar 31 17:24:45 2024 /usr/bin/sqlite3
$ /home/foobar/android/sdk/platform-tools/sqlite3 --version
3.44.3 2024-03-24 21:15:01 d68fb8b5dbb8305e00d2dd14d8fe6b3d9f67e2459102ff160d956a6b75ddc18e (64-bit)

$ /usr/bin/sqlite3 --version
3.45.1 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257ccalt1 (64-bit)

この状況だと具体的にどういう挙動となるか

  • sudo apt upgrade を行っても sqlite3 のバージョンが上がっていかない(=バージョンが上がった sqlite3 が使われない)
  • SQLite3 の対話モードに入った際に、特殊なキー(カーソルキーなど)を押すと制御文字がテキスト文字として入力されてしまう
    • たとえば、左矢印キーを押すと ^[[D と入力され、カーソルが左に移動しない

gyazo.com

どうしたか(対処方法)

  • /home/foobar/android/sdk/platform-tools/sqlite3 をリネームしてコマンドを見つけられなくした*1

上記対処方法の問題点

  • Android SDK をアップデートしたときに sqlite3 が上書き更新されてしまう
  • Android SDK にて sqlite3 を使うときに問題が出るのではないか*2

結論

  • リネームにより一時的に解決したが、恒久的な解決方法はこれを書いている時点では定まっていない
    • sqlite3 以外の Android SDK 内の CLI*3 を優先的に使いたいので、$PATH の順序を変えたくはない

*1:シンボリックリンクに置き換えてもいいかもしれない

*2:まだ遭遇していない

*3:たとえば adb とか

Mermaid の Class Diagram(クラス図)にて「コロン」を含むクラス名を書く方法

結論

クラス名をバッククォートでくくる。

具体例

classDiagram
    class `XX::YY` {
        +attribute1: String
        +method1(): void
    }

    class `XX::ZZ` {
        +attribute2: Integer
        +method2(): void
    }

    class XX {
        +sharedAttribute: Boolean
        +sharedMethod(): void
    }

    XX <|-- `XX::YY`
    XX <|-- `XX::ZZ`
    `XX::YY` --> `XX::ZZ` : depends on

参考

github.com

諸点

  • GitHub の .md ファイルで確かめただけなので、他の環境だと異なる結果になるかもしれない

$ wrangler deploy 時に生成されるコードを確認する方法(デプロイを行わないでビルドだけする方法)

結論

$ wrangler deploy --dry-run --outdir=dist

補足

出力ディレクトリを .gitignore へ追加する

  • 出力ディレクトリを .gitignore に追加するのを忘れないこと*1

$ wrangler build は非推奨になった

$ wrangler build は非推奨になりました。

$ wrangler build
â–² [WARNING] Deprecation: `wrangler build` has been deprecated.

  Please refer to https://developers.cloudflare.com/workers/wrangler/migration/deprecations/#build
  for more information.
  Attempting to run `wrangler deploy --dry-run --outdir=dist` for you instead:

*1:"dist" なんかは最初から含まれていると思いますが

Visual Studio Code にて Ruby LSP のコードジャンプが働かないときに試すこと

結論

  • .ruby-lsp/ を削除する
  • Visual Studio Code を再起動する

ImageMagick の v6 と v7 では同じコマンドを実行しても生成される画像のバイナリは異なる

結論

表題のとおりで、v6 と v7 では生成されるバイナリは異なる。

理由

imagemagick.org

v6 と v7 で生成されるバイナリの比較検討のやり方

ImageMagick の v6 と v7 にて、同じコマンドにて画像変換を行い、MD5 を取得する

  • 元画像は Unsplash の画像 を用いる
    • この画像を before.jpg というファイル名で保存する
$ wget -O before.jpg "https://images.unsplash.com/photo-1720048170996-40507a45c720?q=80&w=2513&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"

ImageMagick での変換コマンド と MD5 のチェックコマンド

v6

$ convert -strip -geometry 50% before.jpg after.jpg

# macOS では "md5sum" ではなく "md5" になる
$ md5sum after.jpg

v7

$ magick before.jpg -strip -geometry 50% after.jpg

# macOS では "md5sum" ではなく "md5" になる
$ md5sum after.jpg

補足

  • 公式のダウンロードページ は常に最新版しかダウンロードできない
    • なので、パッチバージョンまで含めてバージョンを固定する確実な方法は Docker を使うことぐらいしかない(はず)
    • apt などのパッケージマネージャもバージョンは不定*1

*1:チーム全体に固定を求めるのは手間