Blog

  • アートワークのSQLiteデータベースからPersistent IDとHASH文字列の対応を出力するSQL

    とりあえず作業用メモ

    sqlite> SELECT ITM.ZPERSISTENTID, SRC.ZURL, IMG.ZHASHSTRING FROM ZDATABASEITEMINFO AS ITM, ZSOURCEINFO AS SRC, ZIMAGEINFO AS IMG WHERE ITM.ZSOURCEINFO=SRC.Z_PK AND SRC.ZIMAGEINFO=IMG.Z_PK;

    ついでに、xmlのPERSISTENT_IDをSQLで64bit整数に変換してファイル名のhash文字列を検索するSQL。
    “FFFFFFFFFFFFFFFF”の部分に実際のPERSISTENT_IDが入る

    SELECT ITM.ZPERSISTENTID, SRC.ZURL, IMG.ZHASHSTRING FROM ZDATABASEITEMINFO AS ITM, ZSOURCEINFO AS SRC, ZIMAGEINFO AS IMG WHERE ITM.ZSOURCEINFO=SRC.Z_PK AND SRC.ZIMAGEINFO=IMG.Z_PK AND ITM.ZPERSISTENTID=(SELECT 0xFFFFFFFFFFFFFFFF as integer_result);
  • 16進数のPERSISTENT_IDをNSNumber相当の整数型に変換するPythonスクリプト

    ミュージックアプリ(iTunes)のライブラリ書き出しで出力したxmlファイルにあるPERSISTENT_IDは16進数に変換されていて、sqliteの中に保存されているPERSISTENT_IDと対応させるには変換することが必要。

    調べるとPERSISTENT_IDはNSNumber型で、どうもNSNumber=int64で変換すれば良いらしい

    >>> from ctypes import c_int64
    >>> c_int64(int('xxxxxxxxxxxxxxxx', 16)).value

  • iTunesライブラリを操作できそうなPythonライブラリ

    ライブラリの情報はXMLで出力すればテキストで読むこともできるが、下記のライブラリを使えば直接アクセスすることもできそう。
    https://github.com/liamks/libpytunes

  • iTunesで自動取得したアートワークを取り出したい

    やりたいこと

    iTunes(ミュージックアプリ)で「アートワークを取得」した音楽ファイルは、外部のサービスに持っていくとアートワークが設定されていないことがある。これはミュージックアプリが独自の形式でアートワークを管理しているからで、mp3のファイル自体に埋め込むようにしたい。

    外部からダウンロードした画像をアートワークに設定した場合にはmp3のタグとして設定される仕様のようなので、すでに自動取得されているアートワークはとりあえずたとえば「アルバム名.jpg」のような形で保存したい。(とりあえず判別がつけばなんでも良い)

    アートワーク情報の保存場所

    アートワークの情報は下記のパスにある
    ~/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents

    上記の中に、
    ・画像ファイル自体のフォルダ:artwork/
    がある。


    ただしartwork/配下にはjpgファイルが直接置かれているが、ファイル名がhashっぽいものになっているので直接判別はできなそう。ここの対応付の解読がポイントになりそう。

    その他、
    ・データベースっぽいもの:artworkd.sqlite
    がこのフォルダにはあるので、このあたりに画像ファイルの情報が入っていると推測する。

    その他元になりそうな情報としては、ミュージックアプリから「ファイル>ライブラリ>ライブラリを書き出し…」したxmlファイルが使えそう。
    ※どうもswiftのフレームワークでライブラリファイルを直接読むこともできそうだがいったん書き出したxmlファイルで良しとする。

    なんとなく上記の情報から取り出しはできそうな気がしてきた(続く)

  • Raspiで音楽サーバ:3.5mmジャックの有効化

    家に眠っていたRaspberry piを音楽サーバとして復活させる際、LibreELEC (12)をインストールしたのだが、3.5mmジャックが出力先で選択できないことに気づいた。

    インストールメディア(microSDカード)のconfig.txtの末尾にコメントアウトされている行があり、3.5mmジャックを有効化するにはそれをコメントアウトせよ、と記載があった。

    いちどraspberry piをシャットダウンしてmicroSDカードをMacに接続、該当のファイル(SDカードのルートにある)を編集して再度raspberry piを起動、音声の出力先で無事に選択できるようになった。

    なお、上記のconfig.txtは起動後のシステムからは/flash/配下でマウントされているらしかった。

  • Raspberry piで音楽サーバの構築

    iTunesライブラリが壊れた

    家のルータのNAS機能を使ったストレージ上に置いていたiTunesライブラリが壊れた(これまでも頻繁にディスクエラーが発生していたが、本格的に壊れた)のを機に、死蔵してあったRaspberry pi(3)を使って音楽サーバを構築してみることにした。

    元々AYI Voice Kit用に持っていたRaspi3だが、分解。16GBのmicroSDカードも再利用することにした。下記の公式サイトからPi Imagerをダウンロードして、LibreELECをインストール(よくわからなかったがとりあえず一番メジャーっぽいものを入れた)

    https://www.raspberrypi.com/software

    SDカードを差し込んでTVのHDMIに接続するとすぐに起動した。

    音楽ファイルは元々のルーターに接続していたUSBメモリを再利用。すぐに起動したので、LibreELECのGUIメニューから音楽ソースにUSBのディレクトリを選択してライブラリの再構築をするとすぐに利用できた。90GB程度で10分ぐらいかかったかもしれない。

    音量が小さい

    家にあるスピーカー(JBL Authentics 200)の3.5mmジャックに接続してみるが、音が小さい。検索するとLibreELECにはamixerというCUIのツールはプリインストールされてるようで、これでマスタボリュームを設定しようとするがなんだかよくわからない。alsamixerというGUI(といってもターミナル上のもの)を使ったほうが良さそうだが、これはAddonをLibreELECのGUI上からインストールする必要がありそうだった。

    さっそくLibreELECのAddonのインストール画面から、Multimedia ToolsというAddonを選択してインストール。中にalsamixerが含まれているので、インストールが完了したらターミナルにsshログインして起動して設定。3.5mm出力を選択すると、たしかに出力が90%ぐらいになっていたので100%に設定(なんでかはよくわからない)。再度スピーカーに設定すると音量が改善していた。が、いまいち大きくないので、RaspiにDLNA経由でiPhoneから接続してAirPlay接続したほうがいまのところ使い勝手が良さそう。

    今後、DACをRaspberry piに増設して本格的な音楽サーバ化していってみることにする。

  • SSL証明書をLet’s Encryptに変更した

    前のポストで書いたようにACMで証明書をAWSの外にエクスポートするとお金がかかる(FQDNなら$15だけどwildcardだと$149とかかかってつらい)ことに後から気づいたので、速攻で(と言っても気づいたのは1か月後とかだった)キャンセルの申請をしつつLet’s Encryptに変更しました。

    certbotというツールでほぼ自動で証明書を取得することができ、やり方はセットアップも含めて下記でそのまま動いた(nginx+pip)。といってもツールの途中で、証明書の取得までだけやるかどうかが選べるのでそうして(そうすると「ここに保存してあるよ」って教えてくれる)nginxのconfの差し替えは手動で行った。

    https://certbot.eff.org/instructions?ws=nginx&os=pip

    # systemctl restart nginx
    で証明書が切り替わったことを確認してこの件一件落着(たぶん)。ちゃんと調べてなかったとはいえ、AWSの課金恐ろしい…

  • AWS Certificate Managerをよく分かってなくて予定外の出費が発生した

    ふとクレカの請求を確認してみると、AWSから身に覚えのない多額の請求が来ていることに気づく。調べてみるとAWS Certificate Managerが数万円請求されている??

    ACMって無料じゃないの??ということで慌てて調べてみる

    https://dev.classmethod.jp/articles/amazon-certificate-manager-export-certificate-file

    >ACM を利用してエクスポート可能なパブリック証明書を作成すると、追加料金がかかります。完全修飾ドメイン名ごとに 15 USD、ワイルドカードドメイン名ごとに 149 USD かかります。証明書の有効期間中に一度だけお支払いいただき、証明書の更新時にのみ再度課金されます。詳細については、「AWS Certificate Manager サービスの料金」ページにアクセスしてください。

    とのこと。確かに深く考えずにエクスポートしたいじゃんと思って、エクスポートを請求していたよ…さらにこれも深く考えずにワイルドカードにしてしまっていた…高い授業料と思うしかなさそうだ

    しかし料金が相変わらずめちゃくちゃ分かりづらいのはどうにかならないのか…

  • サイトを引っ越しました

    imho.jpから変更します
    Bloggerの.atomファイルのインポートはプラグインが対応していた
    https://github.com/mnasikin/btw-importer

  • macの環境構築を初めからやってみるよ:anyenvとphpenv

     Macbook Airを買った。13インチのm4モデルだ。

    これまでは2016年のintel Macbook Proだったので 実に約9年ぶりである。さらにその前はたしかPowerBook G4、もっと前はPower Macだった気がするので毎回プロセッサが変わってるということになる(Power Macはさすがに処分した)。

    それはそうと、これまでは基本的に旧環境を引き継いでいたんだけどさすがにごちゃごちゃしてきたし、いまやほとんどのデータはクラウドに保存されているので、環境はイチから構築してみることにした。

    網羅的ではないが、いくつか環境構築メモを残していこうと思う。

    PHPが入ってなかった 

    そもそもとしてこのbloggerを自前のWordPressに移行しようと思っているのだけれど、どうやらbloggerのエクスポート形式が最近?RSS XMLからatomに変更されてしまって、インポートができないっぽい。インポートするにはatomからrssへの変換が必要そう。
    調べるとここに情報があった:https://atom.geekhood.net/
     
    WordPressのdockerイメージと合わせてPHPは8.2.29を入れようと思った
    #振り返るとどうやら8.2系以降を入れようとしたことによるエラーも多そうだった 
     
     (続く)
    入れたいもの:$ phpenv install 8.2.29 
    エラーを一つずつ潰す… 
    $ brew install pkgconf
    $ brew install openssl
    ここでエラー
    configure: error: Please reinstall the BZip2 distribution
    を解消しようとして、homebrewでbzip2を入れた 
    $ brew install bzip2 
    が、解消しない 
        export LDFLAGS=”-L/opt/homebrew/opt/bzip2/lib”
        export CPPFLAGS=”-I/opt/homebrew/opt/bzip2/include” 
    を設定したのだが状況が変わらずなので、別の方法
        export PHP_BUILD_CONFIGURE_OPTS=”–with-bz2=$(brew –prefix bzip2)” 
    を.zshrcに設定して $ source ~/.zshrc で次に進むことができた
     
    $ brew install libpng
    $ brew install libjpeg-turbo
    $ brew install libiconv 
        export PHP_BUILD_CONFIGURE_OPTS=”–with-bz2=$(brew –prefix bzip2) –with-iconv=$(brew –prefix libiconv)” 
     
    $ brew install icu4c
     
    さらにエラー 
    —————————————–
    configure: error: *** A compiler with support for C++17 language features is required.
    —————————————–
    こんなものを見つけた 
    https://zenn.dev/shogogg/articles/b358c1dec37426785a12 
    https://github.com/php-build/php-build/issues/783
    …正直詳細はあんまりわからんが
    $ export CXXFLAGS=”-std=c++17″
    を.zshrc に書いて
    $ source ~/.zshrc で進んだ
     
    $ brew search oniguruma
    ↑よく知らなかったが正規表現のライブラリらしい
     
    次のエラー 
    —————————————–
    configure: error: Cannot find libtidy
    —————————————– 

     $ brew install tidy-html5

    こういうパッケージ名を探すのは正解はどうなんだろう 
     
    解消しないなーと思ったら先人のブログ 
    https://qiita.com/kmuro/items/5eb1b09f333a4a07dfbe 
    > 環境変数PHP_BUILD_CONFIGURE_OPTS--with-tidyオプションを指定 
    そうだろうと思った。パターンは見えてきた
    .zshrc の該当記述はこんな状態に 
    export PHP_BUILD_CONFIGURE_OPTS=”–with-bz2=$(brew –prefix bzip2) –with-iconv=$(brew –prefix libiconv) –with-tidy=$(brew –prefix tidy-html5)” 
     
    $ brew install libzip
     
    こんどは以下のようなエラーになった(たしかにjpeg-turboパッケージを入れた)
    ld: warning: search path ‘/opt/homebrew/opt/jpeg/lib’ not found
     
    phpenv installはエラー終了しているが、インストール自体はできているようだ…どういう状態?
    $ phpenv global 8.2.29
    $ php -v
    PHP 8.2.29 (cli) (built: Aug 11 2025 08:33:04) (NTS)
     
    warningは一回無視するとしてこのへんかなあと検討をつける 
    PEAR package PHP_Archive not installed: generated phar will require PHP’s phar extension be enabled. 
    ググるとブログを見つけた。autoconfとな 
    https://zenn.dev/massat/articles/install-php8-with-phpenv 
     
    $ brew install autoconf
    $ phpenv install 8.2.29
    (略) 
    [Success]: Built 8.2.29 successfully.
    (略)
     
    ようやく成功したようだ