・ガルおじの道楽(w
・伏見稲荷参詣
ちょっと古い話だけど、参詣した日付で登録。
実家は商売しているので、毎年伏見稲荷に参詣しているのだけど、 ここ2年ほどは新型コロナがらみでお祭りしている玉房大神がいらっしゃる一ノ峰まで参れてなかったので、 今年は久しぶりに頂上の一ノ峰まで登ってみることにした。
入国規制がらみで外国人観光客がいないので、通路は今まで経験したことないほど空いてたので、 ちと真面目にタイムトライアル(w
入口の大鳥居、10:42
千本鳥居を経て、奥社 10:48
京都市内が見渡せる四つ辻、11:04(写ってる時計は10分強遅れている模様)
三ノ峰(下社)、11:07
二ノ峰(中社),11:11
頂上(一ノ峰), 11:13
玉房大神参拝、11:21
下り、御膳谷、11:35
下り、四つ辻、11:38
三つ辻から外縁回りで下って見かけた猫(w 11:48
同 11:50
ゴールの大鳥居、12:00
ということで、一ノ峰の参拝にざっと1時間20分ほどかかったらしい。 途中、特に休むこともなく、自撮りしている障害物もほとんど無かったから、 これが多分ベストタイムだろうなぁ。。
道中、追い抜くばかりで抜かれることはほとんど無かったんだけど、 唯一、三ノ峰の手前で後ろからの軽快な足音に道を譲ったらクロネコの配達員さんで、 さすがに普段から鍛えているなぁ、、と感心したところ(w
・「らじる★らじる」とステレオ放送
「らじる★らじる」の録音スクリプトであれこれ録音していて気づいたんだけど、 AMで放送しているラジオ第一(R1)/第二(R2)はモノラルで、FMはステレオというのは 電波に乗せる際の周波数変換の都合であって、 インターネット配信の「らじる★らじる」ではR1でもFMでも、 音源がステレオならばステレオのまま流れてくる模様。
「エア・チェック」世代のジジイは、AMとFMで同じ番組が流れる場合、当然のようにステレオなFMを選んでいたけど、 インターネット配信だと音源が同じならR1でもFMでも同じ音質でダウンロードできる模様。
# R2の語学講座とかは音源自体がモノラル化されているようで、番組内で紹介される楽曲もRLが同レベルになっているみたい
エア・チェック時代の記憶で、ついついR1/R2とFMで共通する番組(「音の風景」「名曲の小箱」「ラジオ深夜便」等)はFMで録ろうとしてたけど、 別にR1/R2で録っても問題ないみたい。
データ自体は復旧したものの、Plamo-5.xのままだったメールサーバを最新版に入れ替える際、 SpamAssasin も最新版にしようとしてずいぶんハマってしまった。
前にメールサーバを組んだのは8年くらい前で、当時はまだまだSPAM対策にニーズがあったので情報等も潤沢だったものの、 最近ではSpamAssasinこそバージョンアップは続いているものの、 procmailはサイト自体無くなってるのにSpamAssasinの使い方のドキュメントには最初にprocmailが出てくるし、 DovecotやCyrus-Maildropを使う方法はなかなか見当らず、どうもGmailあたりのSPAMフィルターが優秀すぎて、 FOSSなSPAMフィルターの開発は停滞している印象。
まぁ、手元でもkojima@linet.gr.jpに届いたメールはGmailにforwardして、メールのチェック等はそっちで見て、 返事を書く時のみローカルの emacs + mew を立ちあげるみたいな使い方だったので仕方ない気もするものの、 やっぱり手元でもSPAMのフィルタリングできないと不便だなぁ、、とSpamAssasinのビルドに挑戦。
SpamAssasin自体は、Perlの強力なパターンマッチ機能を十二分に使ったPerlスクリプトで、 CPANからインストールすれば必要なモジュールも自動的にインストールしてくれるものの、 やはりディストリ的にはパッケージ化したいなぁ、、と思って、関連するPerlのパッケージを順に作っていったら、 SpamAssasinも含めて65ほどのパッケージを作るハメになってしまった。。 orz
後で contrib の方にでも上げておこうかと思っているけど、とりあえずこれだけ作るハメになった、というリスト
perl_Archive_Tar-2.40-x86_64-B1.tzst perl_IP_Country_DB_File-3.03-x86_64-B1.tzst perl_Archive_Zip-1.68-x86_64-B1.tzst perl_LWP_MediaTypes-6.04-x86_64-B1.tzst perl_BSD_Resource-1.2911-x86_64-B1.tzst perl_MailTools-2.21-x86_64-B1.tzst perl_B_COW-0.004-x86_64-B1.tzst perl_Mail_AuthenticationResults-2.20210915-x86_64-B1.tzst perl_Clone-0.45-x86_64-B1.tzst perl_Mail_DKIM-1.20200907-x86_64-B1.tzst perl_Crypt_OpenSSL_Guess-0.14-x86_64-B1.tzst perl_Mail_SPF-v2.9.0-x86_64-B1.tzst perl_Crypt_OpenSSL_RSA-0.32-x86_64-B1.tzst perl_Mail_SPF_Query-1.999.1-x86_64-B1.tzst perl_Crypt_OpenSSL_Random-0.15-x86_64-B1.tzst perl_Mail_SpamAssassin-3.4.6-x86_64-B1.tzst perl_DBD_SQLite-1.70-x86_64-B1.tzst perl_Math_Int64-0.54-x86_64-B1.tzst perl_DBI-1.643-x86_64-B1.tzst perl_Module_Build-0.4231-x86_64-B1.tzst perl_DB_File-1.856-x86_64-B1.tzst perl_Module_Build_Tiny-0.039-x86_64-B1.tzst perl_Digest_HMAC-1.04-x86_64-B1.tzst perl_Mozilla_CA-20211001-x86_64-B1.tzst perl_Digest_SHA1-2.13-x86_64-B1.tzst perl_NetAddr_IP-4.079-x86_64-B1.tzst perl_Encode_Detect-1.01-x86_64-B1.tzst perl_Net_CIDR_Lite-0.22-x86_64-B1.tzst perl_Encode_Locale-1.05-x86_64-B1.tzst perl_Net_DNS-1.33-x86_64-B1.tzst perl_Error-0.17029-x86_64-B1.tzst perl_Net_DNS_Resolver_Mock-1.20200215-x86_64-B1.tzst perl_ExtUtils_CBuilder-0.280236-x86_64-B1.tzst perl_Net_DNS_Resolver_Programmable-0.009-x86_64-B1.tzst perl_ExtUtils_Config-0.008-x86_64-B1.tzst perl_Net_HTTP-6.21-x86_64-B1.tzst perl_ExtUtils_Helpers-0.026-x86_64-B1.tzst perl_Net_SSLeay-1.90-x86_64-B1.tzst perl_ExtUtils_InstallPaths-0.012-x86_64-B1.tzst perl_Sub_Uplevel-0.2800-x86_64-B1.tzst perl_ExtUtils_MakeMaker-7.64-x86_64-B1.tzst perl_Sys_Hostname_Long-1.5-x86_64-B1.tzst perl_File_Listing-6.14-x86_64-B1.tzst perl_Test_Exception-0.43-x86_64-B1.tzst perl_Geo_IP-1.51-x86_64-B1.tzst perl_Test_Fatal-0.016-x86_64-B1.tzst perl_HTML_Parser-3.76-x86_64-B1.tzst perl_Test_Needs-0.002009-x86_64-B1.tzst perl_HTML_Tagset-3.20-x86_64-B1.tzst perl_Test_RequiresInternet-0.05-x86_64-B1.tzst perl_HTTP_Cookies-6.10-x86_64-B1.tzst perl_TimeDate-2.33-x86_64-B1.tzst perl_HTTP_Daemon-6.12-x86_64-B1.tzst perl_Time_HiRes-1.9764-x86_64-B1.tzst perl_HTTP_Date-6.05-x86_64-B1.tzst perl_Try_Tiny-0.31-x86_64-B1.tzst perl_HTTP_Message-6.35-x86_64-B1.tzst perl_WWW_RobotRules-6.02-x86_64-B1.tzst perl_HTTP_Negotiate-6.01-x86_64-B1.tzst perl_YAML_LibYAML-0.83-x86_64-B1.tzst perl_IO_Socket_SSL-2.073-x86_64-B1.tzst perl_inc_latest-0.500-x86_64-B1.tzst perl_IO_String-1.08-x86_64-B1.tzst perl_libwww_perl-6.60-x86_64-B1.tzst perl_IO_Zlib-1.11-x86_64-B1.tzst
すごく細かくモジュールが分割されていて関連パッケージを拾っていくのが大変だったんだけど、 これってPerlの方針なんだろうなぁ。。
・「らじる★らじる」の録音用スクリプト
を動かしていたHDDがトラぶって、あわてて UTF-8 な環境で動かすように書き替えたバージョンを GitHubに上げといたので、興味ある人はそちらの方で入手ください。
2021/11/29 の10時前に、1分ほどの停電があり、その後、plamo.linet.gr.jp をホスティングしている マシンのHDDが起動できなくなった。
Plamo LinuxのFTP用のディレクトリや、plamo.linet.gr.jp の各ユーザ用のホームディレクトリは、 別のHDDに置いていたので大丈夫だったものの、/etc/passwd とかは起動できないHDD内だったので、 とりあえず専門業者に依頼して復旧待ち。
幸いなことに、クリーンルーム的な作業までは必要なくHDDの内容が復旧できたので、 /etc/passwd 等も無事回収できた。
ただ、従来の plamo.linet.gr.jp は、かなり古い環境(Plamo-5.xのころ)のままで、locale も ja_JP.eucJP だったりして、 最近のPlamo環境からは使いづらくなっていたので、この機会に最新の Plamo-7.3ベースに更新しようとしたら、 この pukiwiki 回りでずいぶんハマってしまった。
あれこれ調べたところ、pukiwikiは最新の 1.5.x でも PHP-7.4.x までしか対応しておらず、 Plamo-7.3系の PHP-8.x では動かないようなので、とりあえず PHP-7.4.26 をビルド、 インストールして pukiwiki-1.5.3 を動かし、 euc-jp だった旧コンテンツも文字コードをutf-8に変換して読み込めるようにしたところ。
・Plamo用依存関係チェックツール
ちとバタバタしているので、詳しく書く余裕が無いのだけれど、Plamo Linux用のライブラリ依存関係チェックツールを紹介。ちょうどこのあたりの話題を「続・玩式草子」の方に書きかけてるんで、そっちも参照していただければ幸い。
/usr/bin/ 等にあるELF形式のバイナリファイルをlddして、それぞれに必要なライブラリをDB(depends.sql3)に登録するためのツール。ファイル形式のチェックに libmagic を使っているので、実行前には "pip install python-magic" が必要。一部、root権限でしか読めないファイルがあるので、実行時にはsudoを使うかrootになる必要あり。
上記コマンドで作成したdepends.sql3から、あるバイナリファイルに必要なライブラリや、あるライブラリを参照しているバイナリファイルをチェックするツール
例えば ffmpeg が提供する libavformat.so.xxx を使っているバイナリをチェックするには、"-r avformat" と指定する。
$ ./query_depends.py -r avformat /usr/lib/libavformat.so.57 used by these binaries libavdevice.so.57.10.100(/usr/lib/libavdevice.so.57.10.100) libavfilter.so.6.107.100(/usr/lib/libavfilter.so.6.107.100) ffprobe3.4(/usr/bin/ffprobe3.4) ffplay3.4(/usr/bin/ffplay3.4) ffmpeg3.4(/usr/bin/ffmpeg3.4) ffserver3.4(/usr/bin/ffserver3.4) /usr/lib/libavformat.so.58 used by these binaries libavdevice.so.58.8.100(/usr/lib/libavdevice.so.58.8.100) libmpv.so.1.107.0(/usr/lib/libmpv.so.1.107.0) libavfilter.so.7.57.100(/usr/lib/libavfilter.so.7.57.100) ffaudio.so(/usr/lib/audacious/Input/ffaudio.so) libavio_plugin.so(/usr/lib/vlc/plugins/access/libavio_plugin.so) libavformat_plugin.so(/usr/lib/vlc/plugins/demux/libavformat_plugin.so) libgstlibav.so(/usr/lib/gstreamer-1.0/libgstlibav.so) ff-save.so(/usr/lib/gegl-0.4/ff-save.so) ...
一応、"-h"オプションは仕込んでいるので詳細はそっちを参照してください。
"ldd"ではなく"readelf -d"を使って必要なライブラリを調べ、elfdepends.sql3 というDBに登録するツール。"ldd"だと芋ヅル式に必要なライブラリが出てくるけど、こっちは実際にバイナリファイルに書き込まれているライブラリをチェックするので、バイナリファイルの更新時はこっちを見る方が確実かも。
elfdepends3.sql3を調べてあるバイナリに必要なライブラリやあるライブラリを参照しているバイナリをチェックするコマンド。オプションはquery_depends.pyと少し違うので、詳細は"-h"でチェックすること。
・NHKラジオ聴き逃しサービスのダウンロード
NHKラジオの聴き逃し配信サービスのデータをダウンロードするようなコード(get_ondemand3.py)を書いてみた. 基本 Python + ffmpeg で使えるけど,Python 用の tag アクセスモジュール mutagen も 組み込んでおけば,タイトルや出演者等をMP4のタグとして書き込むので便利.
mutagen は PIP で組み込める(python -m pip install mutagen)けど, Plamo用のパッケージもこのページに添付しておく(一番下).
# get_ondemand3.py も同じところにある.
使い方はこんな感じ.
NHKのサイトの[ラジオ]=>[聴き逃し]の一覧ページから, ダウンロードしたい番組を選択.
その番組内で,聴き逃し配信されている回が一覧表示されるので, ダウンロードしたい回にマウスを合わせて「右」クリックし, "copy link location" をクリックして, その回のURL(正確に言うとオンラインなメディアプレイヤーの引数)を入手する.
# 左クリックだとオンラインでの再生プレイヤーが起動するので注意
別に開いておいたターミナル上で [右クリック]=>[貼り付け] (あるいは中ボタンクリック)すると,
javascript:openPlayer('p=6311_01_2495539')
こんなURLが得られるので,これを引数に指定して get_ondemand3.py を起動する. なお,このURL中にはbashが解釈する特殊文字("()")が含まれているので, そのままだとbashのエラーになるため,前後をクォートする必要がある.
$ ./get_ondemand3.py 'javascript:openPlayer('p=6311_01_2495539')'
# 実は ./get_ondemand3.py p=6311_01_2495539 だけでいい.
この指定で,get_ondemand3.py は
https://www.nhk.or.jp/radioondemand/json/<6311>/bangumi_<6311>_<01>.json
みたいなURLから番組の配信情報を入手し,該当する回(2495539)のダウンロード用URLを見つけ, ffmpegを使ってHLS(HTTP Live Streaming)経由でMP4形式の音声データをダウンロードする. なお,ダウンロード用URLはHTTPS経由になるため,ffmpegにOpenSSLかGnuTLSを組み込んでおく必要がある. 手元のffmpegはGnuTLSを組み込んでいる.
$ ffmpeg --version ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.0 (GCC) configuration: --prefix=/usr --mandir=/usr/share/man --enable-gpl --enable-version3 --disable-static --enable-shared --disable-debug --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libwebp --enable-libpulse --enable-libspeex --enable-libv4l2 --enable-libxvid --enable-gnutls --disable-libfdk-aac --disable-nonfree --docdir=/usr/share/doc/ffmpeg-4.2.3
実行例はこんな感じ.
$ ./get_ondemand3.py 'javascript:openPlayer('p=6311_01_2495539')' program:6311 series:01 number:2495539 {'aa_contents_id': '[radio]vod;おしゃべりな古典教室「山姥(やまんば)」(2);r2,130;2021010875327; 2021-01-08T09:30:00+09:00_2021-01-08T09:45:00+09:00', 'aa_measurement_id': 'vod', 'aa_vinfo1': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'aa_vinfo2': 'r2,130', 'aa_vinfo3': '2021010875327', 'aa_vinfo4': '2021-01-08T09:30:00+09:00_2021-01-08T09:45:00+09:00', 'close_time': '2021-01-15T09:45:00+09:00', 'file_id': '2495539', 'file_name': 'https://nhks-vh.akamaihd.net/i/radioondemand/r/6311/s/stream_6311_1337882d26dd972c5f4f53859ba4e39e.mp4/master.m3u8', 'file_title': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'file_title_sub': '【出演】木ノ下裕一,小芝風花', 'headline': None, 'headline_sub': None, 'onair_date': '1月8日(金)午前9:30放送', 'open_time': '2021-01-08T09:45:00+09:00', 'seq': 1, 'share_url': 'https://nhk.jp/radio/?p=6311_01_2495539'} file_path:2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 file_url:https://nhks-vh.akamaihd.net/i/radioondemand/r/6311/s/stream_6311_1337882d26dd972c5f4f53859ba4e39e.mp4/master.m3u8 tags {'album': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'comment': '1月8日(金)午前9:30放送 おしゃべりな古典教室「山姥(やまんば)」(2) 【出演】木ノ下裕一,小芝風花', 'date': '2021-01-08_09-30', 'title': 'おしゃべりな古典教室「山姥(やまんば)」(2)'}
ダウンロードしたデータは,"放送日_開始時刻_番組タイトル.mp4" というファイルに保存される.
$ file 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]
一応,拾ってきたデータから,各種情報をタグに書き込むようにもしてみた.
$ mutagen-inspect 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 -- 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 - MPEG-4 audio (AAC LC), 900.14 seconds, 46002 bps (audio/mp4) ©alb=おしゃべりな古典教室「山姥(やまんば)」(2) ©cmt=1月8日(金)午前9:30放送 おしゃべりな古典教室「山姥(やまんば)」(2) 【出演】木ノ下裕一,小芝風花 ©day=2021-01-08_09-30 ©nam=おしゃべりな古典教室「山姥(やまんば)」(2) ©too=Lavf58.29.100
タグの情報はvlcの「メディア情報」等でも表示できる.
やってることはjsonデータの解析程度で,実処理はffmpegに丸投げしているだけのコードだけど, 結構便利だと思うし,気付いた情報はコメントで書き込んでいるので,興味ある人は試してみて.
いつの間にか、今年も年末、、、
・samba-4.x 系の設定
久しぶりにsambaのサーバを立てようと、/etc/rc.d/init.d/samba を chmod +x して、 /etc/samba/smb.conf.dist から smb.conf を作って、公開したいディレクトリの 設定だけして動かしてみたところ、ローカルでは
# mount -t cifs //localhost/samba /mnt -o user=kojima,password=XXXX
でマウントできるけど、手元のAndroid タブレットの Solid Explorer や ComittoNxN からは「不明なエラーが発生しました」とか言われて、公開しているはずのディレクトリが見えない。
あれれ、、と思って、smb.conf のログレベルをあげてやりとりを追いかけてみたところ、Android 機からのアクセスは、
Server exit (no protocol supported )
とか言われて切れてしまう。
これはどうやらSMBプロトコルのバージョンの問題っぽいなぁ、、とググりつつ、smb.conf をあれこれイジってみたところ、
server min protocol = NT1
という指定を追加すれば無事接続できるようになった。
以前、samba-3.x系でサーバを立ててた時は、この設定がデフォルトだったようで、Android機からも問題なく接続できたものの、samba-4.x系では SMB2 がデフォルトになっているようで、SMB2 以降に対応していない古いアプリは接続を拒否されていた模様。
Android側もSMB2に対応したアプリに更新するのが筋とは思うものの、愛用しているコミックビューワー Comitto NxN の更新が途絶えているので、古いプロトコルで使わざるを得ないかなぁ、、という所。
・audacious の soundfont 設定
何かシンプルなメディアプレイヤーが無いかなぁ、、と探していたところ、audaciousというのを見つけてパッケージ化してみた。
audacious はfluidsynth経由でMIDIファイルも再生できるものの、デフォルトでは「サウンドフォントが設定されていない」という表示がでて音が出ない。
この場合、タブの[Services]=>[Plugin]=>[Input]を開いて、[AMIDI-Plug(MIDI Player)]の設定メニューを開き、
[SoundFont]の設定欄に /usr/share/soundfont/default.sf2 を指定してやれば OK。
「指定された楽器が無いから代用する(fluidsynth: warning: Instrument not found on channel 10 [bank=8 prog=27], substituted [bank=0 prog=27])」みたいなメッセージはよく出るけど、まぁ普通に聞く分には問題ないくらいの音はしていると思ふ。