Archive for the ‘My software’ Category

煮ても焼いても食えない楽天モバイルとそのルータRakuten WiFi Pocket(以下RWP)だったが、その後もひそかにいじっていた。その結果、「Linux遊び」ができることは分かったが、それで何かおもしろい・役に立つことに使えるかというと、やっぱり使えないことが分かったw

とりあえず、どうすれば遊べるかを書く。

PCからRWPに繋いでLinuxを使う。

まだ出たばかりで、気付いている方は少ないかも知れないが、RWPにはtelnetで接続できる。ZTEのLTEルータ・モデムで検索すると、特別な手順が必要だったり標準でないポート番号に繋ぐように書いてあるが、RWPでは変えられていないので※、「普通に」繋がる。

※中を見ると、ポート番号を変えるつもりのようだが、バグか何かで変わっていないようだ。間違えてポート番号を指定せずにやったら繋がったので、拍子抜けしたw

なお、外(WAN)からtelnetできると大変危険だが、試したら繋がらないようなので、最低限のパケットフィルタは設定されているようだ。

RWPの管理者のアカウントでログインすると、以下のように普通にLinuxが使える。

$ telnet 192.168.0.1 
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.

login: XXXXX
Password:

BusyBox v1.21.0-uc0 (2020-12-04 22:11:15 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # uname -a
Linux DEMO 3.4.110 #2 Fri Dec 4 22:06:09 CST 2020 armv7l GNU/Linux

~ # cat /proc/cpuinfo
Processor : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 620.54
Features : swp half fastmult edsp tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

Hardware : ZX297520V3
Revision : 0000
Serial : 0000000000000000

~ # df
Filesystem 1K-blocks Used Available Use% Mounted on
ubi0:rootfs 60912 16276 44636 27% /
mdev 27472 0 27472 0% /dev
tmpfs 27472 0 27472 0% /dev/shm
ubi1_0 3080 76 3004 2% /securefs
ubi0:rootfs 60912 16276 44636 27% /mnt/tmp

ノード名が"DEMO"だったりリビジョンもシリアルも0だったりして、なかなか香ばしいw 表示が正しいとすれば、カーネルを構築したのが12/4なので、まさに「作って出し」って感じか・・・

その割にはちゃんとIPv6が使えるので、なかなかカオスな感じではある。元(ZTEの物?)ができているだけのことなのか。

なお、ファーム更新でtelnetが止められて遊べなくなると困るので、自動更新を停めた。

micro SDを介してPCとファイルの受け渡し

RWPの「中身」をじっくり見るために、micro SD(以下SD)にバックアップすることができる(SDのマウントポイントは"/etc_rw/config/mmc2")。また、それをPCから取得することもできる。管理画面でSDを"HTTP Share"にすればSDの内容が見られるので、それをダウンロードすればいい。

Rakuten WiFi Pocketのmicro SDにブラウザでアクセスする。

バックアップするにはtarコマンドが便利だが、標準では使えないので、下記のようにフルのbusyboxを入れればOKだ。

標準で使えるddでもいいが、ファイルシステムがUBIFSで手軽に開けないので、僕はtarを使った。

上のような手順で、RWPでsshdなどが動いていなくてもPCとファイルがやり取りできる。

あと、curlは使えるようなので、PCにサーバがあるかクラウド経由ならやり取りできる。

フルのbusyboxでコマンドを増やす。

そのままだとbusyboxの機能(コマンド)が少なくて不便なうえに余り遊べないが、ARMv7l用のフル版をダウンロードして入れれば動く(もちろん、全部のコマンドが使えるかは不明)。RWPに入っているのと同じバージョンのもの(1.21.1)がちゃんと動いた。最新の1.31を試したらtarで落ちてしまったが、別の問題(ルートファイルシステムがフルになると落ちる感じ)だったのかも知れない。

Rakuten WiFi Pocketで(フルの)busyboxを動かす。

SSHサーバ(dropbear)は試していないが、きっと動くのではないか。

設定・状態関連

RWPの中にはいくつか設定ファイルがあり、大抵テキストなので普通に読める。また、運用中の設定や状態は/bin/nvというコマンドで取得・変更・一覧できる。以下に例を示す。

nv get rssi #  RSSIの表示
nv show # 一覧表示

参考までに、rssi以外で良く使いそうな値を以下に示す(ほとんどiV501と同じである)。

  • signalbar: 電波強度(バーの数)
  • network_type: WANのタイプ(LTEなど)
  • network_provider: キャリア名
  • mcc, mnc: 接続先のMCCとMNC
  • network_num_oper: 接続先キャリアの番号?
  • cell_id: 繋がっているセルのID?
  • sta_count: Wi-Fiの子機の数
  • monthly_tx_bytes, monthly_rx_bytes: 月の送受信データ量
  • battery_charging: バッテリが充電中か
  • battery_pers: バッテリの残量(%でなく0-4)

テキストファイル以外にsqliteのDBもあり、接続先関係の設定や接続先を固定するように見える設定があるが、どのように使われている・使うのか分からない。

接続先の固定(できず)

設定ファイルの一部を変更してauに繋がらないようにできないか試したが、できなかった。具体的には、楽天とau(KDDI)のPLMNの設定らしき部分があったので、auの値をダミーにして再起動したが、効かなかった。バグ(書いてある値の10の位と1の位がコメントと逆だった・・・)でその設定は無効なのか、設定方法が違うのかは分からない。

また、管理画面のネットワーク設定で接続先をマニュアル設定にすればLTEの接続先を選択できるのだが※、Rakuten(44011)にしても、電波状態によって勝手にKDDI(44053)に変わってしまった。

Rakuten WiFi PocketのLTEの接続先を楽天モバイルにしても・・・

※この設定を変更するには、一旦WAN(LTE)を切断する必要がある。

ちなみに、上記nvコマンドで取れる動作状態ではmcc, mnc, network_num_oper, cell_idなどが現在のLTEの接続先を調べるのに有用そうだ。

IPアドレスの変更

RWPのIPアドレスは192.168.0.1に固定されていて不便だと思って居たが、実は変更できる。上と同様に、一旦WAN(LTE)を切断すれば変更できるようになる。なお、WAN(LTE)を切断している状態で起動するとtelnetで接続できないので、接続後にLTEを切ること。

Rakuten WiFi PocketのIPアドレスを変更できた。※

※キャプチャではDHCPサーバの設定が元のままなので注意。

 

結局のところ・・・

まあ、1円で確かに「Linuxが動く小さい物」は手に入ったが、以前諦めたWi-Fi内蔵SDカード(PQI Air Card II)と同様、I/Oがない(外部のセンサや動くものなどに繋げられない)ので、僕には全くおもしろく使えない。温度計や照度センサやGPSや接点出力が入っていればいろいろ使えそうだが もちろんなく、せいぜい、電池の温度(本体が熱くなければ、周囲の温度に比例した温度になる)を取ったりセルの番号で大まかな位置を取る程度か。

これのCPUがものすごく高速だったら、何か(少し前だったら、仮想通貨のマイニング?)計算させるとかできるが、全くそんなこたぁないw ちなみに、BogoMipsはCore i7-2600 (3.4GHz)の1/10くらいだ。

ただ、USBはあるので、そこにカメラや温度計などを繋いで使えればいいが、果たしてどうだろうか(Androidスマフォと同様に繋がるのかも知れないし、ホストに繋げる専用ポートなのかも知れない)。面倒なので試していない。

もしUSBストレージやPTPが認識できれば、デジカメの画像をRWPのSDに一時保存するようにするのは容易そうだ。が、「やればできる」程度で実用性があるかどうか・・・ せめてauに繋がらないようにできれば、画像をクラウドにアップロードするようにできるだろうが、auに繋がるのではすぐに通信データ量オーバーになって不便だ。

あとは、本体に付いている小さい画面とボタンで文字などを表示・入力できるようにしたり、ゲームを動かすこともできるかも知れないが、僕は興味ないのでやらない(やってどこかに「Rakuten WiFi Pocketでテトリスを動かしてみた」とか投稿すると受けるとは思うがw)。

でも、そのうち何か思い付くかも知れない。とは言え、本当にやりたいことがあるならRaspberry Piでも買ったほうがずっと早いwww

 

最後に一応書きますが、以上のようなことは全く奨励しません。下手したら動かなくなります。「こういうこともできるかも知れないなぁ」という、初夢や幻想だと思って下さい。

 

PS. 今遊んでいる・試行錯誤されている方から、「お前、余計なこと書くなよ(塞がれるだろうが)!!」とか言って怒られるだろうか?

  •  1
  •  2

時間にものを言わせw、しつこく、煮ても焼いても食えない楽天モバイルをなんとか料理しようとした。結果を先に書くと、さまざまな制限付きで「まあ使える」ようにはなったが、やっぱりイマイチであった。

そもそも一番の問題は、勝手に容量上限付きのパートナー回線(au)に切り替わってしまうため、実質的にはデータ量無制限でないことだ。それで、どうにかして、モバイルルータ(Rakuten WiFi Pocket, 以下RWP)の現在の接続先(楽天かauか)を調べられないか、そして、可能なら、接続先(またはバンド)を楽天(Band 3)だけに制限できないかと思って試行錯誤した。

すると、接続先(またはバンド)の制限はできなかったものの、現在の接続先は、管理画面(web)で簡単に分かることが分かった。なんとも灯台下暗しだった(これ、楽天のFAQにも書いてないので、彼らも知らないのかも知れない)。以下に示す(英語モードで使っていたので英語で書いたが、日本語モードでの表現は適宜推測して欲しい)。

Network Settings → APNのタブにMCCとMNCが出る。 (下図の赤枠)

MCC= 440, MNC=11なら楽天モバイル, MNC=53ならau

Rakuten WiFi Pocketの接続先(楽天/au)を調べる。 (表示は楽天の場合)

そして、管理画面のソースを調べて、iVideoのiV501用に作ったスクリプトを少し手直してRWPでも使えるようにして、MCCとMMCが取得できた。変数名はmccとmncである。以下に実行例を示す。

./iv501-vars.sh mcc mnc
mcc="440";mnc="11"

なお、RWPの変数の取得は以下のようなコマンドでできる("rssi"(電波強度)は取得する変数名)。

wget -q -O - --header \
'Referer: http://192.168.0.1/index.html' \
"http://192.168.0.1/reqproc/proc_get?isTest=false&cmd=rssi"

更に管理画面のソースを見たら、RWPのいくつかのコマンドの実行方法も分かり、RWPの再起動も出来るようになった。以下に、wgetを使った実行例を示す(事前にブラウザなどで管理画面にログインしておく必要がある)。

wget -q -O - --header \
'Referer: http://192.168.0.1/index.html' \
--post-data='isTest=false&goformId=REBOOT_DEVICE' \
http://192.168.0.1/reqproc/proc_post

なお、RWPの変数名やコマンドは、管理画面のソース(特にservice.js)を見れば結構分かる。そういう素直な作りにしてくれていたのはありがたいw これがUSやEUや日本だと、難読化されてしまってやる気が失せるが、CNの「別にいいじゃん」精神には好感が持てる。

ここまで出来れば、RWPの接続先(またはバンド)を固定できなくても※、定期的に接続先を監視して、auだったら再起動すればいい(実際には、再度auに繋がるかも知れないし、NWが切れてしまって不便なので、良くはなくて「まあ使える」や「いいかも」程度)。

※調べると、これの元になったようなZTEのLTEルータではSET_NETWORK_BAND_LOCKコマンドでできるようなのだが(→ 参照)、RWPではできないようだ。実は少し違うコマンドでできるのかも知れないが、管理画面にないので、コマンドなどを調べられなかった。

それで、「こいつ 動くか!?」と思い、(上記のiv501-vars.shで)接続先と電波強度を監視しつつ、設置場所を変えつつ速度を測定して位置を調整した。すると、(iVideoの時と同様、)とても狭い範囲(上下左右前後: 約10-20cm, 水平方向の回転角: 20°くらい(ちなみに、この角度はiVideo(SBM)とは違う))で、(最初に比べれば)悪くない速度が出ることが分かった。例えば、ダウンロードが30-40Mbps, アップロードが2-3Mbpsである。

ただ、その狭い範囲を外れると速度は落ち、下手すればauに繋がってしまうこともあるので(今日試した限りでは、位置を変えなければauにはならなかったが、前を鳥が横切ったりしたらどうなるか・・・)、ルータをガッチリ固定する必要があり、全くモバイルではない。それに、そもそも、(特にアップロードが)遅い!!!

遅いのは、電波強度が-110dBm前後と弱いせいだと思う。-105dBm前後の場所は少し速かった。全く低レベルだ。

それで更に微調整して最適な位置を探していたら、ある時からぱったりと上下ともに3Mbpsしか出なくなってしまった。もしやと思って調べたら、また速度制限である。どうも、一日10GB使うと、その日いっぱいは3Mbpsに制限されるようで、調べたら確かにそのくらい使っていた。

再び溜息・・・

まあ、モバイルとしては一日10GBは小さくないし、3Mbpsも激遅ではないし、その日限りで解除されるのも悪くないけど、上のルータが固定必須という件も合わせて、余りにも不便だ。これでは全然光の代わりにはならないし、外に持ち出してスマフォで使うのにも気後れする。

 

というところで、また何か思い付くかも知れないけど、楽天モバイルは(光に比べて)制限が多いので、それが緩和されない限り僕には使えない。

 

でもまあ、いろいろ分かっておもしろかったので、良しとする^^

 

PS. 従来は新年の挨拶などを書いていましたが、なぜかどうも今年は全くそういう気分でないので、全部すっ飛ばして通常運行してますw たぶん、全部こいつが悪いんですwww

  •  1
  •  2

以前ちょっと書いたように、Androidスマフォでの自動処理などに便利に使っていたAutomagicが終了になってしまったので、他の同等なアプリに移るか使わないで済むようにしようとしていた。具体的には、それまで使っていた2つの処理: スマフォ内の画像のPCへの自動転送とWriteNoteの代わりのメモ作成・送信が対象だった。

調べてみると、有名なTaskerは余りにも操作性が悪いとのことだったし(あと、デモ版がない)、ちょっと試したAutomateは まあ悪くなかったが、またいつか使えなくなる可能性があるのは嫌だし、電池を食う可能性があったので、そういうアプリを使わないで済む方法を考えた。

WriteNoteの代わりについては、以前も書いたように、比較的容易にBNoteという自分用サービスができた。自分のサーバでノートを記録するサーバプロセスを動かしておき、スマフォのブラウザで書き込むものである。

残ったのはスマフォ内の新規画像(動画、音声も可能)のPCへの自動転送だが、これがなかなか難しかった。技術的には全然高度ではないが、Automagicなどのようなアプリなしでスマフォを外から状態取得・制御することは不可能なので、そこを「なんとか」するのが難しかった。具体的には、スマフォ内に新規画像が出来たことはスマフォしか知っていないが、AutomagicなどがないためPCに通知することができないのだ。

それでも、いろいろ考え、試行錯誤やAndroidの動作を確認して、以下のような処理にした。スマフォ側アプリは使わないので、全部Linux PCからの処理だが、念のため、処理の主体として"[PC]"と書いた。

  1. [PC] スマフォがLANに接続され、sshが通じるまで待つ。(= スマフォが室内に入ったか、スリープが解除されるまで待つ。)
  2. [PC] スマフォ内の新規画像の有無を調べる。
  3. [PC] 新規画像があれば取り込む。
  4. [PC] 少し(今は3分)待つ。
  5. [PC] スマフォがLANに接続されていてsshが通じていたら、2へ。
  6. [PC] スマフォにsshが通じなくなったら、1へ。

最初に書いたように、元々Automagicのプログラムからの通知を契機に画像をPCから取得するプログラム(システム)があったのだが、それを上のような処理もできるように変更(機能追加)した。従来のはサーバーモード、今回のはpull(またはポーリング)モードと呼んで居る。今回は、上の処理の3以外の部分を作った(正確には、共通部分=3は同じものを使いたかった)。

なお、「スマフォ側アプリは使わない」と書いたものの、実際にはsshサーバアプリ(SimpleSSHD)を使っている。これにより、PCからスマフォに接続してコマンド(多くのLinuxコマンドが使える)を実行したり、スマフォのストレージにアクセスしたりする。sshサーバ(sshd)はとても汎用的なので、Automagicのようにディスコンになって困ることはまずない。ある製品がディスコンになっても、互換の別のものに置き換えることが容易なためだ。

スマフォ内に新規画像が出来たことをスマフォから通知できないので、PCから定期的に調べる(ポーリング)ことにした。この方法はほとんどいつも無駄にファイルを検索するので好きでないが、仕方ない。頻繁にストレージにアクセスすることで電池消費率が増えなければ良しとしたが、今のところ問題なさそうだ。Androidの仕様なのか、スリープ状態の時は処理が遅くなる(例: 新規画像の検索(の開始)に1分以上掛かることがある)ので、GUIでないプログラムも省電力化されているようだ。

それから、外から帰って来た時などに、スマフォへの接続がなかなかできない問題があった。いろいろ調べたら、スマフォがルータに接続していないためで、当たり前のことだった。Androidはあまり頻繁にWi-Fiをチェックしないようだ。帰宅して画面を点灯しないでいると数十分は繋がらないので、15-30分間隔だろうか(それで、以前は即座に繋げるようなフローをAutomagicで作ったのだが、電池を食うので止めた)。

もう一つの問題は、やはり省電力化に関係すると思われるが、sshで繋がっても、コマンドによって処理が遅いものがあることだ(速いコマンド・場合があることが謎である)。具体的にはrsync(新規画像の取得に使う)が遅くなることが多かった。また、find(新規画像の検索に使う)も遅くなることがある。正確には、どちらも実行が遅いのでなく、起動するのが遅いようだ。rsyncは数分間掛かることがあり、普通の設定だとタイムアウトしてしまう。かといって、タイムアウトを10分などにするのも今ひとつだ。

それで、試しに、sshfsでスマフォのストレージをPCにマウントして画像取得してみたら、マウントされるのが遅いことがあるものの、その後は高速に処理できたので、画像取得はsshfs+rsync(スマフォのストレージをローカルととして扱う)で行うことにした。

ただ、そんなことは(今まで使っていて、今回も使っている)画像取得プログラムは想定していないので、いろいろな対処(「調整」)をした。それらを場当たり的でなく、なるべく汎用的にするのが大変だったが、「まあまあ」だ。

その他に、スマフォの処理状況をPCは分からないので、書き込み中の中途半端な画像を取り込んでしまうのを防ぐことにした。これも どう実装するか悩んだ。結局、ファイルの更新時刻が新し過ぎるものは取り込まないようにした。※ 具体的には、ファイルの更新時刻が現在時刻より1分以内のものは次回(約3分後)に取り込むようにした。

※他の方法として、画像ファイルなどの中身(が正しいか)をチェックすることも可能だが、既存のプログラム(例: ffmpeg, ImageMagickのidentify)で最後の数バイトが欠けても分かるものはなさそうだったので、止めた。

ただ、3分待たずに画像を取り込みたいこともあるかも知れないので、以前同様に手動取り込みもできるようにした。スマフォ側からは、ブラウザでPC側のサーバに(従来と類似の手順で)アクセスする(通知を送る)ことでできるようにした。PC側からは、上の2と3の処理を(周期的なタイミングでなく、)僕のしたいときにするような処理にしている(従来と同じ処理)。

細かい工夫として、スマフォのIPアドレスはルータの設定や交換などで変わる可能性があるが、そのたびにPCの画像取得の設定を変えなくても済むように、スマフォをMACアドレスで管理し、通信する時にarpコマンドでIPアドレスを調べるようにしている。なお、スマフォやPCが起動直後などでarpテーブルに登録されていない場合は、broadcast pingなどで調べるようにした。

 

作って(正確には既存プログラムの改良)出来て、それなりにちゃんと動き出した。手前味噌だが、スマフォで写真を撮影したり画面キャプチャして少しすれば(忘れて居たりするw)勝手にPCに来て、digiKamで"New"のタグが付けられていて一目で分かるので、かなり便利だ。

 

という訳で、めでたく(というか、多くの場合と違って何も問題はなかったので、めでたくはないのだが)Automagicを使わなくすることができた。

 

(バックグラウンドで動く、純然たるサーバプログラムなので全く画像がない。出すとしたら、(ハッカー映画みたいな)ターミナルにデバッグ文字列が流れる動画?w)

  •  0
  •  0

先日買ったLogitecのHDDケース(ビデオ用)が僕のPCや別の外付けHDD(バックアップ用)と相性が悪いようで、USB3では まともに繋げられないことが分かった。もちろん、そもそも、ビデオは観ないので気にする必要はなく、そのまま「そういうものだ」と目をつぶって忘却の彼方に放り出せばいいのだが、それはできない相談だw 随分試行錯誤して、原因に関係ありそうなことが分かって対処ができ、今は無事USB3で繋がるようになった。

環境

  • マザーボード: ASUS P8H67-V
    • USB3のコントローラ: ASMedia ASM1042
  • HDDケース
    • Logitec LGB-EKU3 (= LHR-EKWU3BK)
    • センチュリー 裸族のインテリジェントビル5Bay CRIB535EU3
  • OS: Linux Mint 20 Xfce

現象

  • LogitecのHDDケースに入れたHDDとセンチュリーのケースに入れたHDDをASMediaのUSB3ポートに繋いで同時に電源を入れると、片方(ほとんどはLogitec)が認識されないことが多い。
    • 認識されない場合、Logitecの電源はoff(ランプが消灯)になる。
    • 片方ずつ電源を入れた場合はほとんど問題ない。
      • ただし、センチュリーのケースはタイミングによっては起動しないことがある(offにした直後にonすると、まず駄目)。
      • Logitecもたまに駄目なことがある。
  • 認識されなかった場合、lsusbコマンドでも表示されない。
  • 認識されなかった場合でも、問題のドライブのUSBコネクタを抜き挿しすれば直る。

原因に関係ありそうなこと

  • ドライブを接続した場合、システムのログ(syslog)には、USBのconfig error(詳細は不明)が出ることが多い。
  • センチュリーのケースは一旦High Speedで認識され、すぐに切断されてSuper Speedになることが多い。
    • ただし、上の2つの現象が起こっても正常に認識されることもある。
  • 以下は推測
    • センチュリーのケースの電源が経年劣化で弱くなっていて、電源投入直後の動作が不安定。
      • 仕様上は電源の容量は足りている(HDDの起動時の消費電流を概算で確認した)。
    • Logitecのケースの自動電源オフ機能がせっかち過ぎて、アイドル(USBプロトコル的に非接続)状態だとすぐにoffになってしまう。
      • この状態になると、PCに繋がっていないのと同じなので、電源off/onや抜き挿しする以外は何もできない。
    • ASM1042が古く、USB3対応が怪しい。
    • 同様に、マザーボードも古く、BIOSのUSB3対応が怪しい。
    • 同様に、LinuxのASM1042ドライバが怪しい。

関係なかったこと・試さなかったこと

  • UAS(USB Attached SCSI)が問題になるという情報があったが、どうもASM1042(またはLinuxのドライバ)は対応していないようで(ログに非対応というメッセージ("usb 4-2: USB controller 0000:05:00.0 does not support streams, which are required by the UAS driver.")が出る)、UASを有効にしても無効にしても、現象には関係なかった。また、速度も変わらなかった。
    • ただ、非対応と出るので、念のために無効にしている。
    • 古い情報(2014)だが、LinuxではASM1042のUASはうまく動かないために、無効にするパッチが出ていたようだ。それが今はどうなっているかは不明(無効にはなっておらず、致命的な問題もないが、うまくも動かない)。
  • ドライブやケースが冷えていることは関係なかった(寒い朝に起動しても問題は起こらなかった)。逆に熱いほうが関係しているのだろうか? あるいは、純粋にタイミング的な問題で、温度には無関係なのかも知れない。
    • 今日の昼の比較的暖かい時に試したら問題なかったので、温度は関係なさそうだ。 (12/15 16:50)
  • BIOSのUSB関係の設定はいくら変えても関係なかった。
    • 意味が分からないものがほとんどで、マニュアルにも書いてないものがあり、手探りで試した。
  • 以下は試さず。
    • BIOSのファームウェアは最新なので、更新しようがなかった。
    • ASM1042のファームウェアは公式に配布されていないので、更新しようがなかった。
    • どちらかのドライブをUSB3のハブを介して接続すれば、あるいは、別のUSB3インタフェースボードを使えば直りそうな気がしたが、どちらも手持ちはないからお金が掛かるし、わざわざ古いPCに追加するのは馬鹿らしいので止めた。
    • センチュリーのケースの電源を交換したかったが、やっぱり手持ちはないので、壊れてからにすることにした。
    • 書いたあとで気になったが、どちらかあるいは両方のケーブルが悪いということはあるだろうか? まずないとは思うが、そういうオチもあるから怖い。

対処

  • 問題のドライブ(のUSBコネクタ)をソフト的に抜き挿ししてみたら、うまい具合に両方のHDDが認識されたので、処理を自動化するプログラムを作った(次項を参照)。
    • 検索したら いくつかの方法が見付かったが、USBコントローラを無効にしてから有効にするのが効果があった。 (→ 参照)
      • 具体的には、LinuxのUSBコントローラのunbindとbindという制御ファイルにコントローラのデバイスID(Linuxのデバイス関係にはいろいろな名前があるので、正しい呼び方は分からない)を書き込む。
        • 例(super userで実行):
          • dev_id="0000:05:00.0" (/sys/bus/pci/drivers/xhci_hcdの下にIDの名前のディレクトリがあるので、対象のものを探す)
          • 無効化: echo $dev_id > /sys/bus/pci/drivers/xhci_hcd/disable
          • 有効化: echo $dev_id > /sys/bus/pci/drivers/xhci_hcd/enable
      • この方法だと、そのコントローラに繋がっているすべてのデバイスが切り離されてしまうので、多くのデバイスを使っている場合は余り便利でない。(別のコントローラに繋がっているデバイスは全く問題ない)
    • 念のため、抜く前に、認識されてマウントされているディスクをumountすることにした。

ソフト

  • 問題発生の検出と対処を自動化するスクリプト(chk-usb3-mf.sh)を作った。
  • chk-usb3-mf.shは以下の処理を行う。 (概要)
    1. システムのログ(/var/log/syslog)にメッセージが記録されるたびにチェックし、問題に関係のあるイベント(下記)を抽出して、それぞれに対応する処理を行う。
      • USB config error (例: "usb usb4-port1: config error"): 処理に必要ではなく、参考のために抽出している。
      • Super Speedデバイスの認識 (例: "usb 4-1: new SuperSpeed Gen 1 USB device number 4 using xhci_hcd"): それほど重要ではなく、参考のために抽出している。
      • High Speedデバイスの認識 (例: "usb 3-1: new high-speed USB device number 2 using xhci_hcd"): 処理に必要ではなく、参考のために抽出している。
      • SCSIデバイスの接続 (例: "sd 6:0:0:0: Attached scsi generic sg3 type 0")
        • なぜか、ディスクIDの先頭は"sd"の場合と"scsi"の場合があった。
      • ディスクのマウント (例: "Mounted /dev/sdd1 at /media/XXXX/VOLUME on behalf of uid YYYY"): 上のattachと比べてマウントには時間が掛かるので、今は参考程度にしか使っていない。
      • 周期タイマー(ログのイベントではない): タイムアウト処理のため、一定時間(2秒)ごとに起動する。
    2. SCSIデバイスが接続されたら、ディスク数を+1する。
    3. ディスク数が想定値(2)になったらOK(= 問題は起こらなかった)なので、タイマを停めて内部状態をリセットする。
    4. そうでない場合はタイマを起動する。
    5. タイマがタイムアウトした(前回のSuper Speedデバイスの認識から規定時間(6秒)以内にディスク数が想定値(2)にならなかった)場合、問題が発生したので、USBの再スキャン(USBコントローラの無効・有効化)処理を行う。
      1. 再スキャンを行うかのダイアログを出す。
      2. 回答が「行う」の場合は、以下を実行する。
        1. Super userの権限が必要なので、以下の処理をpkexecを使って行う。
        2. 認識されたディスクがマウントされていたらumountする。
          • タイミングによっては、問題を検出したときはドライブを認識だけしていて、この処理の直前にマウントされる場合があるので、ドライブのデバイス名が分かる場合は、エラーになってもいいのでumountするようにした。
        3. そのディスクのUSBコントローラ(= ASM1042)を無効にする。
        4. 少し(1秒)待つ。
        5. 無効にしたUSBコントローラを有効にする。
        6. 少し(1秒)待つ。: 不要と思われるが、念のために入れた。
      3. 内部状態をリセットする。

結果

  • 成功: おそらく10回以上試したが、問題の発生を確実に検出できてダイアログを表示し、そこで指定することでUSBデバイスの再スキャンを行って両方のドライブを認識できるようになった。

その他

  • 電源投入直後に比べ、コントローラの無効・有効後のドライブの認識はすごく速い。これが何か関係あるのかも知れない。
    • 単に、HDDなので電源on後に回転数が上がるのを待つ時間があるだけなのか?
  • ASM1042のSuper SpeedとHigh Speedは、仮想的に別のポートとして扱われている(LinuxではデバイスIDが異なる)。
  • 一度、ファイルマネージャ(Thunar)の動作がおかしくなった。Thunarのボリューム管理と本プログラムのumount処理が競合したと思われる。
  • 想定した数のドライブが接続されていることを前提にしているので、本当にドライブが少ない場合でも問題が起こったと認識してダイアログが出るのが今ひとつ。
    • ドライブが認識されていない状態ではドライブが繋がっているかどうかは分からないので、ドライブ数を自動で判別するのは難しい。
  • イベントのチェックや再スキャン処理の実行はもっとスマートな方法(udevを使う?)があると思うが、udevはなかなか手ごわいので、今回は見送った。
  • 本当はダイアログを出さずに自動的に再スキャンしたいが、無限に再スキャンし続けることがありそうなので、今は止めている。

 

これでめでたくLogitecのHDDケースもUSB3で繋げられるようになった。USB3になった効果としては、転送速度が約2倍(80MB/s前後)になった。とはいえ、何度も書いているように、このHDDを使うことはほとんどないので、あくまでも自己満足の世界であるw

ただ、USBポートのソフト的な抜き挿しは以前からやりたかった(何度も失敗していた)ので、用途は限定的ながらもその方法が分かったのは、収穫だ。

 

そして、(前に書いたが、)Logitecのケースについては、この処理に加えて、定期的にアクセスすることで自動電源オフ機能を実質無効化できたのと電源・アクセスランプを前面に付けたので、ようやくまったく普通に使えるようになった。いやぁ、全く面倒な奴だ・・・w

 

PS. デバッグや動作確認で何度もoff/onすると、いつかセンチュリーの電源が壊れそうで ひやひやしていたが、今はまだ大丈夫そうだ。でも、古いもの(2011年に購入)なので いつかは壊れる気がする。

  •  0
  •  0

先日ようやくEvernoteからの脱却が片付いて、これで ちょっとのんびりできそうだとPCをいじっていたら、ふと、観もしないビデオが山ほど入ったHDDを整理したくなった。

詳しく書くと、僕のPCにはSSD(システムディスク)の他にHDDが2個あり、ビデオはビデオ用HDDと、(それだけでは足りず、)もう一個(ドキュメントや音楽用)に入っている。その後者に入っているビデオをどうにかしてビデオ用HDDに移し、ビデオ用HDDをPCから外して保管し、PCのHDDをドキュメント・音楽用だけにして簡素化したくなった。そうすれば、使いもしないHDDをいつも動かしておくことがなくなって気分が良くなり、将来小さいPCケースにすることもできそうだからだ。

なお、外したHDDをずっと動かさないでおくと、メカが劣化して いざ使う時に動かなくなりそうなので、HDDアダプタに入れてバックアップHDDと同じ電源系統にして、バックアップする時に電源が入るようにして、定期的に動かすことで劣化を防ぐことを考えた。

とは言え、そもそも今まで溜まったビデオを観たことなんてほとんどないので、そういう維持措置、それどころかデータ自体が不要な気もしたが、まあ、無碍に捨ててしまうのもなんなのでw、今は残すことにした。

ビデオの容量の大半は地デジなどのTV番組(当時はちゃんとN○Kと契約していたw)を録画したファイル(MPEG2-TS、以下TS)で、1本10GB以上にもなることがある(今となっては「馬鹿かな?」と思うし、当時も確かに大きいとは思って居たものの、HDDも大きいからそれほど大きな疑問はなかった)。

TSを圧縮する方法を調べたら、MPEG4(以下MP4)にするといいようだった。ffmpegというプログラムで試してみたら、容量が1/10くらいになった(例: 約30分の番組で、TSが3.3GBだったのが、MP4にしたら330MBになった)ので、「これはいい!」と、「ちょっとやってみる」ことにした。そして、いつものように想定外の問題が多発して苦労した・・・w

それにしても、もう圧縮方式の細かいことは分からなくなってしまったが、TSはなんであんなに巨大(圧縮が効いてない)なのだろうか? 駄目な子だったのか、MP4はその後の進歩の成果なのか。これだったら、一般人がTSで保存する意味はほとんどないではないか。

記憶と記録から思い出すと、以下のような想定外の問題に苦しんだ・・・

  • ffmpegのクソ仕様
    • ffmpegは標準入力(stdin)からキーを読み込むらしく、一括変換スクリプトが誤動作して(ffmpegにファイル名を読み込まれてしまい、最初のファイル1個しか変換できなかった)訳が分からず、しばらく悩んだ。普通はstdinがターミナルか判定するものだが、なぜかしていないようだ。
      • でも、今となっては(以下に延々と書く問題に比べたら)こんなのは可愛い方だったw
    • あと、警告だかを黄色い文字で出されて(ターミナルの背景が明るいので)、全然読めなくて困った。
  • 一部のファイルで音ズレ (謎) ← 二か国語とステレオ放送の切り替えが悪かったようだ。
    • TVのタイマー録画は番組開始の少し前から録画が始まるが、前の番組と本編の音声モード(二か国語/ステレオ)が異なると(例: 本編の前がニュース)、MP4に変換した時に本編が音ズレする(約0.8秒、音が遅れる)問題が起こった。
      • TSを再生する時は問題なかったのが不思議だが、実は他にもいろいろ問題はあって、どうやら まともに再生できるものは少なかった。
      • Windowsでは、日本製の日本のTVにきっちり対応しているソフトを使って居たので大丈夫だったが、Linuxではまともに再生していなかったので気づかなかった。
      • → いろいろ調べ、試行錯誤して、ffmpegのjoinというフィルタで二か国語の主と副音声をMP4のステレオの左右に振り分けてみたら(後述)、なぜか音ズレがしなくなった。
        • ↑ 主/副と左/右の対応を無意識に決めてしまったが、大丈夫かと今になって心配になった。でもまあ、左右はいつでも交換できるから、いいやw
  • 「ガラパゴスMPEG2-TS」の問題
    • デジタルTVを録画した場合、1ファイル中に複数の「プログラム」というものが入っており、中にはワンセグらしきものもある。どういう訳か、そのワンセグが再生されたり変換時に抽出されることがある(その場合、ぼやけた天気予報のようなものになることが多い。: これを見た時、放送の予定が変わってちゃんと録画されていなかったのかと、今更ながら思ってw、ファイルを削除した。でも、あとで本当のことが分かってバックアップから戻した)。正常な場合も多いので、不思議だ。
    • 上記の二か国語とステレオ放送の問題もある。
    • 更に、アナログと違って「二か国語かつステレオ」の番組もあって、一応両方残したいが、どうやったら全部をMP4に入れられるのか分からず、途方に暮れた。。。
      • → 上の音ズレに似たような処理で、ffmpegの-mapというオプションで二か国語の主と副音声をMP4の2組のステレオ音声にして対応した(合計4チャネル)。主と副は再生時にプレーヤーで選択できる。
  • MP4は万能でない。
    • 小さいビデオ(MPEG2など)を圧縮すると、画質の劣化がひどい。
      • → 一括変換時はファイル形式(suffix)でTSだけを抽出し、更に、ファイルサイズが小さい場合も変換しないようにした。
  • Linuxには何でも再生できる動画プレーヤーがない。
    • (ガラパゴス)TS, BD, DVD, MPEG2などのフォーマット全部をまともに再生できるプレーヤーはない。
      • いろいろ試した結果、対応フォーマットの幅広さに関してはffplayが一番マシで、次はCelluloidかvlcと思う。
      • ただ、ffplayは余りにも簡素で使い勝手が悪いので、再生用のスクリプトを作った。
        • DVD(IFOやVOBを指定)や、音声(MP2)が別になったMPEG2(M2V)を音声を合わせて再生できるようにしたり、動画のサイズ(画素数)に従って、適当なサイズで表示するなどの機能を付けた。
        • が、作りながら、そもそも観ないのに そんなものを作る必要はあるのかと疑問に思ったw ただ、たまに確認する時(があるとして)などに何も考えずに観られたほうがいいのは確かなので、意味はある。
      • → その後、ffplayで再生するのは、他のプレーヤーでは特殊な場合に対応できないTSだけにして、あとはvlc(DVD)とCelluloid(MP4, BD, MPG, 他)を内部的に切り替えて使うように改良した。適材適所である。
        • なお、vlcはDVDのメニューが動くので使った。
  • HDDケース(Logitec LGB-EKU3(= LHR-EKWU3BK))の問題
    • 自動で電源offになるのが早過ぎて、USB3のポートにバックアップ用HDDと一緒に繋ぐと認識されないことが多い。USB3だと単独でも駄目なことがある。
      • バックアップ用HDDの起動が遅く、それまでにHDDケースがアクセスされないと電源が切れてしまうようだ。
      • PCが古く、当時出たてのUSB3 IFとの相性が悪いのかも知れない。
      • → 仕方ないので、HDDケースはUSB 2に繋ぐことにした(そういうことなら、もっと安いUSB2対応のケースにすれば良かった・・・)。まあ、ビデオなら問題はない(そもそも観ないしw)。
    • 使っていて気付いたこと。
      • このケースは5分間(短い!!)アクセスしないとスタンバイになり、次にアクセスする時は結構時間が掛かり(数秒間だろうが、10秒以上に感じる)、その間は関係するアプリがハングしたようになってイライラするので、ディスクがマウントされている時は定期的(4または5分ごと)にアクセスするようにして、スタンバイさせないようにした。今、効果を確認中である。 (12/12 12:20)
      • 電源・アクセスランプが後ろ側(ケーブルを繋ぐ側)にあって(コストダウンのためだと思う)、正面から見えなくて不便だ。今は後ろ側を前に向けているがかっこ悪い。あとで改造して、ランプを正面に移したい。 (12/12 12:23) → 前面にランプを追加した。 (12/13 7:03記)
      • 「アルミ製ケースで放熱性がいい」とうたっているが、疑わしい。密閉して通風せず、HDDとケースが密着しておらず(上部で接してはいるが、充分とは思えない)、ケースも放熱しやすい形状ではないので、熱はこもると思う。実際、HDDの温度は通常より高目になった(10℃近く高くなった)。熱くはないが、熱を持つタイプを長時間使うと良くなさそうだ。 (12/13 5:30)
    • 結局、このケースはなんかイマイチだ・・・ 一応使えるけど。
  • Linuxのデバイス名が変わる問題
    • 大昔と違い、ディスクのデバイス名が起動時の状況で変わるため、外付けHDDを繋いだまま起動すると、それが/dev/sda(通常はシステムドライブの名前)になってしまい、状態監視ソフトMuninのHDD関連の表示がおかしくなる。。。
      • udevの設定で回避できそうだが、とりあえずは、起動時には外付けHDDはoffにすることにした。
      • デバイス名が変わってもちゃんと起動するだけマシだが・・・
        • 良く考えると、デバイス名が変わっても大きな問題なく動くのがなかなかすごいと思う。
        • 更に考えると、「だったら、デバイス名なんて意味ないから止めろよボケ!」って言いたいが、僕には作れないので言えない。
      • → その後、MuninのHDD関連のプラグイン: hddtemp_smartctlとsmartの設定で、ディスクのデバイス名でなくディスクID(/dev/disk/by-id/*)でアクセス・表示するようにして、デバイス名が変わっても値が変わらないようにした(ディスクIDはなかなか長いが仕方ない)。他にもデバイス名を使うプラグインはあるが、方法が分かったので良しとする。 (12/12 12:12)
        • → その後、hddtemp_smartctlで仮想的な(公称の?)デバイス名を使う方法が分かり、従来どおりの表示(例: "/dev/sda")にできた。また、特定のドライブのタイプを指定する方法も分かった(これにより、デフォルトでは対応していない外付けドライブの温度も表示できるようになる)。概略を以下に書く。 (12/12 23:48)
          • /etc/munin/plugin-conf.d/munin-nodeのhddtemp_smartctlセクションに以下を設定する。
          • 仮想的なデバイス名の指定: env.dev_仮想デバイス名 実際のデバイス名("/dev/"は省く)
            • 例: env.dev_sda disk/by-id/ata-ADATA_SX900_.....
          • 特定のドライブのタイプの指定: env.type_デバイス名 ドライブのタイプ
            • 例: env.type_sdc sat
      • → その後、BIOSのSATA設定でシステムドライブなどのPlug and playをoffにしたら、外付けHDDを繋いだまま起動しても内蔵ディスクのデバイス名が変わらなくなったようだ。Plug and playが有効なドライブはUSB接続と同等に扱われるのか。 (12/14 7:03)
  • 動画管理ソフト tinyMediaManagerの最新版(V4)が有料(サブスクリプション)になってしまった。しかも、安くない。
    • 今の版(V3)に不満があることもあって代替を探したが、なかなかいいものないので、「自作するかなあ」と思い掛けたが、そもそもほとんど使わないので、今使っている古い版で充分だと気付いた。

他にもあったかも知れないが、思い出せない。

そんなこんなで、ようやく落ち着いた。PCが古いため、約150本(最初は最低限だけ圧縮しようと思って居たが、段々、あれもこれもと増えた)のビデオの圧縮に数日間掛かったが、その甲斐あって、合計約3TBが約2TBに減り、目論見どおりビデオ用HDDをPCの外に取り出せて、PCのベイはまさにスカスカだ^^ 変換したビデオを削除すれば、ドキュメント・音楽用HDDの空きが500GBくらい増えて1.2TBくらいになる。こっちもスカスカだ。これなら、ちょっと怖いけど、将来は大き目のSSD一個にできるかも知れない。

 

なお、TSの圧縮(MP4への変換)は以下のようなコマンドで行った(それぞれ見様見真似・試行錯誤で決めたので、これで本当に正しいかは不明)。

通常の場合:

ffmpeg -i (ファイル名).ts -c:v libx264 -crf 29 -preset veryfast (ファイル名).mp4

説明: -crfは品質を、-presetは変換速度を指定するようで、検索したり少し試して、上のようにした。crfが29だと圧縮後のサイズが1/10くらいになった。

音ズレへの対応:

fm_cda_L_pno=(左チャネルに対応するTSのプログラム番号(例: 1024))
fm_cda_R_pno=(右チャネルに対応するSのプログラム番号(例: 1025))
ffmpeg -i (ファイル名).ts -c:v libx264 -crf 29
-preset veryfast -filter_complex
"[0:$fm_cda_L_pno][0:$fm_cda_R_pno]join=inputs=2:
channel_layout=stereo[a]" -map 0:0 -map "[a]" (ファイル名).mp4

説明:TSの中にいくつかあるプログラムなるもののうち、日本語と英語と思われるものの音声をMP4の左と右に割り当てている。本来は、放送のモードがステレオに変わったらステレオになるべきだと思うが、録画に使ったソフトかffmpegの仕様なのか、ずっと二か国語モードのままなので、このようにした。

なお、検索して参照したページにもう一つの方法として書かれていた、amendというフィルタだと、左右が混ざってしまって良くなかった。 (良く分からないで使っているせいだとは思う)

ただ、本来は、音声モードが変わる時になぜか起こる音ズレを解消したかったのに、単に音のチャネル割り当てで直ったのが謎だ。

ステレオの二か国語への対応:

ffmpeg -i (ファイル名).ts -c:v libx264 -crf 29 -preset veryfast
-map 0:0 -map 0:1 -map 0:2 (ファイル名).mp4

説明: デジタルTVの二か国語放送は主・副音声ともにステレオなので、それぞれの音をMP4に入れた。主音声は最初の2チャネルペア(-map 0:1)、副音声はそのあとの2チャネルペア(-map 0:2)になっており、プレーヤーでは、例えば、vlcでは"Audio track"で切り替えることができる。

 

それから、確認のためにMP4に変換後のビデオをちょっとずつ観ていたのだが、いろいろな感想があった。

  • 昔の洋楽のPVの番組は、ほとんど音(演奏)でしか知らないアーティスト(例: ボストン、プリテンダーズ、ブームタウン・ラッツ)が動く姿が観られて、なかなか興味深かった。あと、たまに、口パクでなく本当に演奏しているものもあって、貴重だった。
    • まあ、今ならYouTubeでいくらでも観られて、そでも観ないのだから、やっぱり僕には必要ではないのだろうが、ちょっと観るのはおもしろい。
    • でも、年代にもよって、60年代は「いかにも」で ほとんどつまらなかった。ビートルズは異質だったのか、特別僕の好みだったようだ。そして、60-80年代ではやっぱり80年代が良かった。
    • 更に余談だが、さっきPVを観たプリテンダーズのボーカルの女の人は「姉貴」って感じで頼れそうな気がする。でも、下手に甘えると「ウルセー」とか言われれそうだが、実際にはそうでもなさそうなのがいい。と妄想しているw
      • あと、プリテンダーズはギターが二人ともテレキャスだったのがポイント高い(たまたまその曲だけかも知れないが)。高校の頃はシンプルな外観が大好きだった。今は、音から言うとレスポールかねえ。
  • YMOは好きだけど、各メンバー(坂本も細野も高橋も)は全員好きじゃない。(今となっては)全員暗くて意識高そうで、更に気持ち悪い。
  • 当時(十年くらい前)好きで録り溜めた日本の女優・歌手などの番組は、全部捨てたいw
  • 当時でもベテランの領域になっていたアイドル系女性歌手を、とてもクリアなPCのディスプレイでアップで観てしまうと、「うむ・・・」という気分になった。
  • 当時書いたかも知れないが、2011年2月の「題名のない音楽会」でマーティー・フリードマンがエレクトリックギターでソロを演奏した、ラフマニノフのピアノ協奏曲 第2番(抜粋?)がなかなか良かった。乗りはいいし、音もいいし(意外にもギターの音は浮いておらず、ピアノに通じる響きすらあった)、カデンツァがうまい具合にギターソロに対応していた。
    • もう少し細部が丁寧なら、完璧になったと思う。あと、カデンツァのアドリブはもう少し自由さやゆらぎが少ない方が良かった気がする(一言で書くと、「少しやり過ぎ感があったかも」)。それがロックギターで、それは好きだけど、曲はロックではないので。: この味付けは なかなか難しいと思う。
    • そして、「やっぱりピアノには負けるよなー」と思ったw
    • この番組はYouTubeにないようなので、意外に結構貴重なのかも知れない。
    • 余談だが、彼の演奏を探したら「天城越え他」(2011)があり、僕も石川のそこら辺の歌は好き(かっこいいと思う)だし、ギターがなかなか気持ちいいので、意外に趣味が近いところがあるのかも知れない。でも、あの髪の毛は邪魔そうだw
  • ほんの一瞬を観ただけでつまらないと感じる作品は多い。松田優作は好きだけど、時代劇などはつまらない。
  • 生のキャンディーズ(初期)は歌が下手だった・・・ 小泉も。
  • 大昔にLDやVHSからPCに取り込んだビデオと同じ作品でHD版などでもあるものがあり、それらを比べるととんでもなく画質が違うので驚く。昔はあんなに小さくてボケボケの映像でも、「LDは綺麗だ」とか言って観ていたものだ・・・ (ボケや画質の悪さは、PCに取り込んだ当時に知識が足りなくて、設定が今一つだったせいもある。VHSの3倍モード的な感じで、ボケ以外にギザギザになっている。)
  •  1
  •  0

Evernoteからの脱却の一環として先日作った、WriteNoteの代わりのメモアプリ・システム BNoteを改良、というか何度も作り直して居た。いろいろ試したものの、結局、25年くらい前を彷彿させる※素っ気ないwebとなった。

※でも、marqueeやアニメGIFは使ってないので許されそうだw

僕にとって一番重要なのは、主に外出先で手軽に「サッと」ノート(タイムスタンプ付きメモ)を書くことができる、しかも、入力欄が大きくて見やすい・書きやすいということで、それらは充分に満たしているし、自分だけで使うものなので、やり過ぎるのは疲れるうえに馬鹿らしいから、とりあえずは良しとした。

以下にその変遷を書く。

  1. Automagic版
    • Automagicに問題はなかったが、この夏に終了になってしまったため、なるべく移行した方がいいと考えた。
    • また、入力欄が小さい(ほとんど調整できない)のがちょっと気に入らなかった。
  2. Automate版: 初期の機能確認まで
    • Automagicの代替アプリのひとつ、Automateを試してみた。
    • 機能的には使えそうなことは分かった(入力欄はAutomagicより良かった)が、有料だし面倒(グラフィカルなプログラミングはスマフォでしかできないので、結構疲れるし、何をするにもやり方が違う)なので止めた。
    • 入れたら電池消費が増えた(本当かは不明)気がしたのも、止めた理由の一つ。
  3. Web版 (作らなかったかも: 記憶が曖昧)
    • 試しに作って動いたが、ちゃんと使うには認証が必要なので、WordPress版に移行した。
  4. WordPress版
    • WordPress(以下WP)の非公開の投稿(ログインしないと表示できない)に無理やり(<pre>の中に入れた)HTMLとプログラム(PHP)を書いて、ノートが書けるようにした。
    • WPで認証できるメリットがあったため、やってみた。
  5. Web版 (WPで認証)
    • さすがに(中身が)綺麗でなかったので、単独のwebページにした。ただ、認証は必要なので、(無理やり)WPの認証を使った。
      • どういう仕組みかは分からないが、wp-load.phpを取り込むと、ログインしているかの確認ができる。
  6. Web版 (Joplinに保存): 中止
    • サーバにJoplinアプリ(コマンドライン版)をインストールすれば、自動でJoplinに取り込めて便利だと考えたが、以下の理由で中止した。
      • サーバにJoplinのストレージのNextcloud(以下NC)のアカウント情報を保存するのは良くない。
      • Joplinアプリのキャッシュ(Joplinのノート全部が入る)は暗号化されないが、それではNCのストレージを暗号化している意味がなくなる。
  7. Web版 (NC管理下に保存)
    • ノートのファイルをNCの管理下に保存し、NCでデスクトップPCに同期できるようにした。
    • NCの仕様により、ノートは平文で保存している。
      • BNoteのノートは量が少ないので、許容することにした。
  8. NCのFormsアプリ改造版: 断念
    • ファイルはNCに保存するのに認証がWPなのは変なので、NCの認証が効くNCのアプリを利用しようとしたが、断念した。
    • Formsアプリ(アンケートなどに使うアプリ)が結果が見やすいので試してみた。
      • Formsの入力ページを外のページのIFRAMEに入れて位置情報を追加しようとした。
        • しかし、どうしてもFormsの入力フィールドに位置情報を設定(自動記入)できなかった(設定してもサーバに届かない)ので、諦めた。
  9. NCの外部サイト版: 断念
    • NCから外部サイトを開ける機能にBNoteのweb版を指定して、NCの認証を利用しようとしたが、手軽に使える認証情報はなかった。
      • その情報(例: 外のNCのページのrequesttoken)とNCのDB内に保存された値を比較すれば、認証しているか確認できそうだと考えたが、DB内には見つからなかった。
    • NCのOAuth2機能が使えそうだったが、それほど手軽ではなかったので断念した。
  10. WP版 (Basic認証+α) ← 今ここ
    • 既にある手軽な認証機能を使うのを諦め、(昔ながらに)自分で認証することにした。
    • HTTPSなら、Basic認証は(カッコ悪いけど)それほど脆弱でないので、そうした。
    • また、愉快犯によるブルートフォース攻撃を避けるため、URLのパスを"bnote"のような分かりやすいものでなく暗号みたいな文字列にして、ログインを試すこと自体を難しくした。
      • 仮にログインできても、ノートが書けるだけで読めないので、(DoS攻撃は別として)致命的な問題は起こらなそう。
      • とは言え、変な引数やバッファオーバーフローなど、考慮していない脆弱性があるかも知れないので慎重を期した。

以下に、作った(出来た)ものについて書く。

BNoteの機能

  • スマフォで(PCでも)短いノート(タイムスタンプ付メモ)が書ける。
    • ブラウザで動くのでアプリのインストールは不要。
      • ただし、スマフォの場合、Operaでは位置が取れず、Firefoxはなぜかハングして表示できないので、事実上はChrome系しか使えない。
  • 各ノートには時刻と位置(取得可能な場合)が追加される。
    • 各ノート間は空行で区切られる。
    • その日の最初のノートの前には日付も入る。
  • 一日分のノートは1個のファイル(ファイル名に日付が入る)にまとめられる。
    • ユーザ(一人しか居ないが)・年ごとに別のディレクトリになる。
  • ノートのファイルはサーバに作成され、自動でデスクトップPCに同期される。
  • ノートを新規作成・更新したらメールで通知が来る。(Joplinへの転記忘れを防ぐため)

 

実装メモ

  • 認証: Basic認証
    • 上記のとおり、HTTPSならそれほど脆弱でないと考えた。
  • ノートの入力: HTML(FORM, textarea)
    • ノートをJavaScriptで送るためPOSTは面倒だったので、GETを使っている(URLのクエリー文字列にノートを含めている)。それぞれのノートは短いので、GETでも大きな問題はなさそうだと考えた。
  • 位置の取得: JavaScript
    • 送信ボタンを押した時に位置を取得し、ノートと一緒にサーバに送る。
    • 位置取得条件は「何でも可」(高精度でなくても可、無限に過去のものも可)にして、電池消費を増やさないようにしている。また、「あればいい」スタンスなので、取得タイムアウトを0.5秒と短めにした。
  • ノートへの時刻・位置情報の自動付加: PHP
    • ノートの送信時刻を各ノートの前に付け、位置(送られて来たら)を後ろに追加して、ファイルに記録する。
    • 時刻は、クライアント(ブラウザ)から送られて来たらそれを使い、なければサーバでの受信時刻を使う。
  • ノートの保存先: 通常のファイル (NCで同期)
    • NC(暗号化ストレージ)以外で作成・更新したファイルの取り込みを容易にするため、「外部ストレージ」の機能を使った。
  • ノートの同期: Nextcloudアプリ
    • 今までは別のファイルをrcloneで同期していたが、こちらのほうがリアルタイム性があって便利なので、全部を切り替えた。
  • 新規作成・更新ノートの通知: crontab+find
    • 定期的に検索している。
      • 最後に最新だったファイル名を保存しておき、それより新しいものを調べている。

問題点・TODO

  • サーバが停まっていたり、通信出来ない場合はノートが書けない。
    • そういう時は、エディタやJoplinを使うとか、手で紙に書けばいいか。。。
      • 通信できる場合は、元祖のWriteNoteを使ってもいい。
    • ブラウザのローカルストレージを使う手もありそうだが、なかなか面倒そうだし、やり過ぎだろう。
  • 複数のセッションで同時に書き込むと、きっと良くないことが起こる。
    • 対応するとすれば、書き込む時に排他制御するのだろうが、一人で同時に別の端末から書き込むことは物理的にできないので、対処しなくても大きな問題ではない。
  • 位置の取得条件などを変えられると便利かも。
    • そういう設定を付けても、いじることはまずなさそう・・・

その他

  • FirefoxのAndroid版は、上記のようにハングしたり位置が取れないだけでなく、viewportの動作がChromeやOperaと違っていた(textareaの幅がものすごく広くなった)ので、以前もそうだったが、相変わらず使えないと思った。
  • Operaで位置が取れないのは、navigator.geolocation.getCurrentPosition()のオプションの高精度("enableHighAccuracy")を有効にしていないからかも知れない。(未確認: これを指定すると電池を食いそうなので、余りしたくない)
  • 今はノートの記入にはChromeを使っていて、電池消費が気になるが、使いながら確認したい。
  • JavaScriptを使うと、(セキュリティ上の条件はあるが)iframeの親(外)や子(中)にアクセスできることが分かり、なかなか強力だと感心した。

 

PS. Evernoteからの脱却はほとんど終わったようなものだ。近頃はEvernoteでノートを書くどころか、全然アクセスしていない。あとは残りのノートをJoplinに移行する「だけ」だからロボットにでも頼めばいいが、適当なものがないのでw、やる気が出た時にやろうと思っている。ノートの数が多いので、重要なものだけは目で確認し、残りは一括処理しようと思っていて、その準備は大体できている。あとは一括処理するスクリプトを書く「だけ」だ。これもロボットに頼みたい(爆)

なお、Joplinは最高とは言えないが、少なくともEvernoteの10倍は いい。自分でいろいろ いじれるのもいい。ただ、Androidアプリはもう少し頑張って欲しい(大きいノートではビューア以外に使うのはキツい)。今はデスクトップ版に注力している感じなので、今後に期待したい。

PS2. その後、Hacker newsを見ていたら、僕と同じようにタイムスタンプ付きメモをしたい人(→ 元のスレッド: jlduggerという人のコメント)が居ることを知り、そのためのツール(jrnl)があることを知った。ノートの記録(表示)のされ方がBNoteそっくりなのに驚いた。 (11/26 14:16)

  •  0
  •  1

数日前には「やらない」と書いたのだが、やっぱり、できそうなことはやってみたいので、WriteNoteの代わりを作ってみた。

最初は、書いた内容をオープンなフォーマットのファイル(例: プレーンテキスト)に保存できるチャットとかメモアプリがあればいいと思ったが、そういう都合のいいものはなかった。チャットだと受け側のログをコピー・ペーストすればいいが、書き始める時に相手(= 受け専用の自分)を指定するのが面倒だし、間違って他の人を指定する可能性もあるので止めた。メモアプリは内部データの場所が分からないのと、わざわざ「エクスポート」しなければ外部フォーマットのファイルには書き出せないものばかりだった。

それで、Automagicで作った。処理は簡単で、以下のようなものだ。

  1. [僕] アイコンをタップして起動する。
  2. [僕] ノートのテキストを入力する
    • "CANCEL"を押すと書き込まれない。
  3. (GPSで)現在の位置を取得する。
    • 新しく位置を取得するのに時間が掛かるので、通常はそれ以前に得られた位置を使うようにした。
    • ただ、移動中など、特別に正確な位置を取得したい場合に備えて、位置の取得を待てるようにもした。
  4. 入力されたテキストに現在時刻(※)を前置し、位置を追加して、毎日分のファイルに追記する。

※書いていて誤りを見つけた。前置するのは時刻だけでいいのに、日付も入れている。まあ、その方がJoplinに転記する時に日の間違いが起こりにくいからいいか。あとは、その日の一番最初に日付を書くのも良さそうだ。 → そうした。

更に、PC側は既存の自作の画像自動取り込みプログラムでノート取り込めるようにした。そうすれば、外から帰宅したら、撮影した画像(あれば)と一緒に自動で取り込まれる。まだやっていないが、取り込んだノートの有無や更新を調べて通知すれば、Joplinに取り込み忘れることもない。

この方式の欠点は、ノートを書くたびにクラウドサーバに送られる訳ではない(帰宅してPCに転送するまでスマフォの中にある)ので、何かのトラブル(スマフォの故障・紛失、プログラムの誤動作※)でノートが消える心配があることだ。その代わり、ずっと通信できなくても問題ないので一長一短だろう。

※誤動作に関しては、追記する前にノートのバックアップを作るようにした。

あと、テキストの入力欄が小さくてちょっと不便かも知れないが、使って試してみたい。

(11/12 16:16) その後、ノートをDropboxに送信するようにして、ローカルだけでなくクラウドへの保存も可能にした。まあ、単なる興味からで、オーバースペックであるw

それから、Automagicの入力欄をカスタマイズできないか調べていたら、この夏にAutomagicが提供終了してしまったことを知った。便利に使っていたのに残念だが、仕方ないので代わりを探すことにした。すると、早くもAutomateというのが良さそうな感じだ。外観や機能がAutomagicより整理されているのがいい。もう一個、Taskerというのがあるが、多くの人が使いにくいと言っているので余り使いたくない。

ただ、今度はなるべくこういうツールを使わず実現できる方法を探したい。PCではいろいろ作り込むとしても、スマフォ側はなるべく標準機能だけで実現したい。今回のノート記録は(散々探してなかったので)難しそうだが、もう一つの用途の、画像のPCへの自動転送では、Automagicは基本的にはPCに転送できる(Wi-Fiで通信可能な)ことを通知しているだけなので、できそうな気がする。

 

(23:50 わずかに加筆・修正)

  •  0
  •  1

大大大(数十回繰り返し)大っ嫌いになったのでwww、ThunderbirdからEvolutionに乗り換えようとして、ほぼ完全に(正確には7/8くらいw)できた。この前試した時、カレンダーにいくつか気に入らない点があったのでメールだけ使って実感したのだが、「当たり前の感覚」で使える点でEvolutionのカレンダーの方がずっと筋が良さそうなことに気付いた。※ だから、多少の欠点はなんとかしたいと思った。

※例えば、Evolutionは基本的にプラグイン(またはアドオン)はない(あることはあるが、両手で数えられるくらいしかなく、ないに等しいうえに、ほとんど使ってない)けど、Thunderbirdと違い、それで大きな不満も問題もない。つまり、基本がしっかりしている、「分かってる」のだ。

Evolutionで一番気に入らないというか不便なのは、メールモードでウインドウの右端に縦に出せるTo Do Bar(ThunderbirdのTodayペインを意識していると思われる)が残念にも

  • 現在時刻でスクロールしない。
  • 時刻が小さくて読めない。
    • こちらは、おそらく、前回のようにGTK3のCSS(gtk.css)で変えられると思う。

ために、「今」はリスト中のどこかや今後の予定が分からないことなのだが、それは今までのように、(Evolutionの下にThunderbirdを出し、)Evolutionの脇にThunderbirdのTodayペインを表示することでしのごうと思う。

それ以外の下記の問題は、使い方や我慢でカバーできる。

  • デフォルトの通知はダイアログだけで、音を出さない。出したい時は、予定を作るたびに音のファイルを指定する必要がある。
    • → 基本的に、音はうるさいから要らないと思って居た(だったら、この文句は何だったんだ・・・w)。あと、机上にスマフォがあるので、画面を見ていない時でもそのバイブの音で分かる(可能性が高い)。
  • 色遣いがイマイチな場合・箇所がある。
    • → 一番(かつ、おそらく唯一)イマイチなのはカレンダーのTasksだが、カレンダーの色を薄くしたら、まあまあになった。
      • 色の濃度を交互に変えるのを止めるとか濃度の変化を少なくできればいいのだが、残念ながらできないようだ。
      • これもGTK3のCSS(gtk.css)で変えられればいいが、プログラムで固定かも知れない。

なお、検索したらたまたま出たEvolution関係の掲示板をいくつか見てみたが、(欧米らしくなく?)なかなか頑固でフレンドリーでもオープンマインドでもない(ぶっきらぼう? ホリ○モン的??w)方が多い感じで(GNOMEってそういう文化なのだろうか? いや、UNIX・Linux系は大抵そういう気がする)、要望を出してもサラっと(あるいは、鼻で笑われて)却下されている感じなので、期待できない。それよりは自分で何とかした方が良さそうだ。

それから、次の問題は再発しなくなった。おそらく、Evolutionの前に試したRainlender2がおかしくしていたのだろう。全くひどいソフトだ。

  • 予定の編集後のサーバへの保存に失敗することがある。繰り返すものが駄目な感じ。

そして、Thunderbirdから完全に脱却するために、Todayペイン相当を自作したくなった。やり方は分かった(下に概要を書く)ので作るだけなのだが、やっぱりそれなりに手間が掛かるので、ちょっと保留している(サボり先輩ーーーw)。

Todayペイン代替プログラムの基本機能・動作

  • 直近の予定を一覧表示する。
    • 予定のデータは、Evolutionのキャッシュ(sqlite3)から読める。また、evolution-data-server(EDS)からDbusで取ることもできそうだし、SyncEvolutionというソフトを使えばサーバからも取れる。
      • キャッシュが一番手軽そうだが、問題も起こりやすい。
      • なぜか、キャッシュ中のカラムsummaryなどの日本語の濁点がない(例: 「資源み」)のだが、バグなのだろうか? だとしたら器用だw
        • でも、本物(カラムECacheObj, VEVENT)は正しいので問題ない。
  • 現在時刻に合わせてスクロールする。
  • 予定が追加・更新されたら、それを反映する。
  • 下にTODO一覧も表示したい。
  • 予定やTODOの項目にマウスオーバーすると内容を表示し、ダブルクリックするとその編集画面を出したい。 (後者はすごく難しい)

 

Thunderbird(Mozilla)もEvolutionも独りよがりなのは変わらないのだが、Mozillaは頼んでも居ないことをして(しかも頻繁に!)ユーザーを困らせる点が一番クソ(f*cking)だ。ある時点で気に入って(というか、他になかったから)使っていても、突然大きく(不便に、でも、もともと使いにくいところはそのまま・・・)変えてしまって、ドヤ顔で「今度の最高でしょ? これからももっと良くするよ」って言うような感じだ。まるで劣化版林檎だ。

「そんなんだったら何もしなくていいよ!」と思うが、それ(何もしない)がEvolutionなのだ。いいのか悪いのか・・・。 (まあ、クソじゃないだけいいと思う。)

そんな訳で、同様のことをしているブラウザFirefoxも捨てたい気分なのだが、なかなか代わりが難しい・・・ ChromeかOperaかなぁ。

つくづくMozillaは馬鹿だと思う今日この頃。このままなら長くないね。

 

参考: 森高千里 「これっきりバイバイ」 (1989)

 

PS. こ、これは・・・ 好きだけど、一体どうして??

そして、こっちも強烈だwww

  •  0
  •  1

全く異なる2つのソフト(Tcl/Tk, digiKam7)に関する話だが、どちらも小さいこと(でも、すごく苦労したものもある)なので一つの稿に書く。いずれも、本来はそれぞれのソフトのフォーラムなどに書くべきだが、フォーラムがなかったり(digiKamにはバグ報告の手段はあるが、KDEのBTSなので なんか気軽に書けない雰囲気だった)、ソフトが余りにも古くて(Tcl/Tk)、フォーラムがあるか調べるのも無駄そうだし(→ 現代的なフォーラムはなかった。大昔の「ニュース」(アーカイブ?)だけだった)、連絡しても修正されそうもない気がするので、とりあえずここに書くことにした。

こうして書けば、少なくとも日本(語)の人には検索されるだろうし、今は海外でもキーワードが翻訳されて検索にヒットするようなので、全くの無駄ではないと思う(そもそも、本文に英語のキーワードも書いてあるから、やる気のある人は そこだけ見ればパッと分かりそうだw)。それから、題やカテゴリではLinuxとしているが、実際にはどちらも他のOSでも動く。が、Linux以外で問題が起こるかは不明だ。

(10/4 15:53 その後もう一個対処したので、3として追記する。)

 

1. Tk(wish)のtextウィジェットの高さがおかしくなる。

問題の詳細

一つのtextウィジェット(ワードラップ)にサイズの異なる(タグで指定する)数種類の文字列を入れて表示すると、Tkの認識する高さ(表示行数)と実際が食い違って、高さが低く表示され、文字列の終わりの方が表示されない場合がある。一行が長くて自動改行(wrap)される場合に起こりやすいが、一つのtextウィジェット中に複数のサイズの文字列が存在することが大きいようだ。

以下のような3つの部分からなる内容(各部分を指示しやすくするために、それぞれの頭に番号を付けた)のtextウィジェットを約250pxの幅、ワードラップで表示すると、最後の3の部分(アルバム名)が途中(ラップで改行する手前)で切れる

  1. 北ウイング - 30th anniversary mix
  2. 中森明菜
  3. ベスト・コレクション 〜ラブ・ソングス&ポップ・ソングス〜 (2012)

表示例(左側がおかしい)

原因(推定)

一つのtextウィジェット内で複数のフォントサイズを使い、ワードラップをさせている場合に、Tk内部の表示行数(displaylines)の計算・処理がおかしくなるようだ。

上の例の場合、textウィジェットのdisplaylinesは6(この値は表示されている行数の5より多いので、ある程度はサイズの違う文字列への対応がされているが、完全でないように思える)だが、それを高さ(configure -height)に設定すると不足する(この場合は7でないと完全には表示されない)。

対処

textウィジェットのフォントサイズの異なる部分ごとに高さ(displaylines)を求め、それらの合計を高さに設定する。

上の例では、1(曲名)、2(アーティスト名)、3(アルバム名)の各部分で高さ(部分の先頭から最後の文字までの表示行数: 例: .textWidget count -displaylines 1.0 end)を求めたら、それらの合計は7行(上: 3, 1, 3)となり、正しい高さで表示された。ただ、2の部分は改行を除外しないと1行高くなってしまうので、謎はある。

また、正しい高さで表示されれいる場合でも、全体の高さ(表示行数)を求めると6行のままなので、Tk内部の行数の処理がおかしいようだ。

なお、表示が完全か(目視以外で調べる)は、textウィジェットの外側(親)の高さ(なぜか正しい)とtextウィジェットの高さ(どちらもpx単位)の比較と、textウィジェットのyviewの内容から判定している。

この時、textウィジェットのsyncコマンドでは表示(内部的な処理?)が完全に終わらないようで、取得できる値がおかしいことがあるので、Tcl(Tkでない)のupdateコマンドを実行する必要がある(最初はこれが分からずに苦労した)。

上の例では、textウィジェットはgridウィジェットで配置しているので、外側(親)の高さはgridのtextウィジェットを配置している行(row)のbboxから求められる。また、textウィジェットの高さはyviewから求められる。また、yviewが空だったり、yviewの最初と2番目の要素が0, 1.0でない場合(例: 0.0, 0.8)には表示が完全でない(欠けている)。ただ、2番目の要素(最後に表示されている文字列の割合)はいつも1.0になる訳ではなく、1.0に近い値(例: 0.98)でも「完全」とみなす(許容する)必要がある(あるいは、最下部に広目の空白が入ること許容することで1.0(全く欠けがない)を守れるが、見た目が良くない)。

結果

以下のように、Minispの表示が正常になった。30曲くらい再生して表示を確認しているが、今のところ問題が起こっていない。備考に書いた高さの調整処理も行われていない(最初に設定した高さのままで完全に表示されている)。

備考

簡単に書いたが、何が原因で表示がおかしくなるのか分からず、調査にも対処にもとても苦労し、時間が掛かった。

なお、上記のようにまだ謎があるため、textウィジェットの高さの計算がうまく行かなかった場合に備えて、表示(高さ)を調整する処理も実装した(実はこれを先に作った)。基本的は処理としては、textウィジェットが完全に表示されているかを調べ(上記の方法)、そうでなかったら、完全になるまで1行ずつ高さ(行数)を増やすものである。また、高さが高過ぎた場合には減らす必要があるので、その処理も実装したが、今は使っていない。

この問題は、PCのOSをLinux Mint 20に更新した時に自作のSpotifyのミニプレーヤー(Minisp)で再発した問題である。以前は原因が分かっていなかったので、対処が不充分・不的確だった。

 

2. digiKam7でGoogle mapsの地図が表示されない。

問題の詳細

位置情報のある画像の地図をGoogle mapsで表示しようとすると、地図ペインが空白のまま。また、小さいおかしなウインドウが出て消えない。

なお、地図がMarble Virtual Globeの場合は問題ない。

原因(推定)

digiKam7がルート証明書(libnssckbi.so)がロードできない。digiKam7の想定するディレクトリ構造と実際の位置が異なるためのようだ。

Ubuntu 20系の場合、libnssckbi.soは/usr/lib/x86_64-linux-gnu/nssにあるが、digiKam7は/usr/lib/x86_64-linux-gnuを想定しているようだ。

digiKam7のログに以下のように出るので分かる。

[12345:23456:1234/23456.34567:ERROR:nss_util.cc(748)] After loading Root Certs, loaded==false: libnssckbi.so: cannot open shared object file: No such file or directory
[12345:23456:1234/23456.34567:ERROR:cert_verify_proc_nss.cc(969)] CERT_PKIXVerifyCert for maps.google.com failed err=-8179

対処

ライブラリのパスにlibnssckbi.soのあるディレクトリ(Ubuntu 20系でx86の場合、/usr/lib/x86_64-linux-gnu/nss)を、以下のいずれかで追加する。

  • digiKam7を起動するシェルなどの環境変数LD_LIBRARY_PATHに追加する。
    • 例: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/nss:$LD_LIBRARY_PATH
  • AppImage中の起動スクリプトAppRun内のLD_LIBRARY_PATHに追加する。
    • 例: export LD_LIBRARY_PATH=$DIR/usr/lib/:/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/nss:$LD_LIBRARY_PATH

念のため、上では/usr/lib/x86_64-linux-gnuも追加した。

AppRunを見るには、AppImageのファイルに--appimage-mountオプションを指定して起動する。 → マウントポイント(/tmp/.mount_digika*)直下にAppImageがある。

修正したAppRunでdigiKamを起動する方法は各自で考えること(一番簡単なのは、AppImageを展開して修正することである)。

なお、消えない小さいウインドウは、地図表示がエラーの時に出るようなので、一旦、地図を表示しないようにしてdigiKam7を再起動すれば出なくなるし、地図が正常に出ていれば出ない。

結果

digiKam7の地図のペインにGoogle mapsの地図が表示されるようになった。

備考

digiKam5の時も同様な問題があり、その時はGoogle mapsのAPIキーが期限切れで出なくなっていたので、今回もそれかと思ったが違っていた。digiKam7は今年の7月に出て、落ち着いてから移行しようと思って居て、もういいかと思ったのだが、まだ早過ぎたようだ。

こういう問題が起こるのは、digiKam7がOSのパッケージでなく、AppImageという(良く分からないけど、)手抜き的なパッケージで配布されているからだ。もちろん、数多くのディストリビューションごとにパッケージなんて作ってられないのは分かるが、始末が良くない話だ。実際、digiKamはAppImageのために日本語入力できないという問題もある(これも、以前自力で解決した)。

その後、PS2の問題(マウスカーソルがおかしい)を調べているうちに、どうもdigiKam 7はまだ駄目な気がして来た。digiKam 7にして良くなったことは特にない(むしろ、悪いことが多い)ので、digiKam 6に戻した。もう少ししたら試してみたい。 (10/2 13:31)

 

3. Spotifyの音量がなぜか下がることがある。

問題の詳細

Xfce4のパネルやJACKを再起動すると、Spotifyの音量が下がる(大体7dB以上下がるので、半分以下になる)。

原因(推定)

パネルのPulseAudioプラグイン(実体はlibpulseaudio-plugin.so)が再起動する時に悪さをするようだ。それを無効にしたら、パネルやJACKを再起動してもSpotifyの音量が下がらなくなったので。

ただ、なぜJACKを再起動するとPulseAudioプラグインが再起動するのかは不明(正確には、この時はPulseAudioプラグインが再起動したかは確認しなかったので、別の経路なのかも知れない)。

対処

PulseAudioプラグインを使うのを止め、同等の機能のアプリ(pavucontrol)を使うことにした。僕はJACKを使っているからPulseAudioの調整はほとんどしないので、アプリで充分だ。

結果

パネルやJACK(、もちろんpavucontrolも)を再起動してもSpotifyの音量が下がらなくなった。

備考

どうも、Mint 20のXfce4にはいろいろバグが多い感じだ。digiKamの外に こっちも早まった感じ・・・

余計かつまともに動かないものは入れておきたくないので、PulseAudioプラグインなど(下記)を削除(アンインストール)した(PulseAudioプラグイン以外は動くが余計)。

xfce4-pulseaudio-plugin xfce4-xapp-status-plugin xfce4-eyes-plugin xfce4-verve-plugin

(10/4 15:53 追記)

 

PS. 書いたあとで気付いたが、BTSとかTkとか、偶然だけど音楽の意味もあって なかなかおもしろいw

PS2. digiKam7にはもう一つ気に入らないことがある。マウスをサムネイルに載せた時のカーソルが酷いのだ。6では普通だったのに、「1980年代ですか?」って感じだ。いつも思うが、KDEの(アプリ以外も)センス(デザイン以外も)は全然好みでない。でも、他にいいアプリがないから使っている。

ちなみに、このカーソルのファイルがどこにあるのか分からず、なかなか直せない。 (10/2 4:58)

気に入らないdigiKam7のマウスカーソル

(10/2 11:19) いろいろ調べたり試したりしてみたのだが、直接的には、digiKam7が使うQt5のアイコン(Qt::PointingHandCursor: 指で指す形状)が見つからないようで、その代替としてX11のcursorフォントの文字hand1(0x3a)が使われているようだ(だから、80年代は当たっていたw)。

どうも、digiKam7のAppImageとOS(Linux Mint 20)の折り合い・相性が悪い感じだ。ただ、digiKam6では同じ環境で問題なくそのカーソル(実は、このカーソルもそんなにいいとは思わないが)が出るので、(本文に書いた)Google mapが出ない問題と同様にdigiKam7側に何か問題があるように思う。それが何かはまだ分からない。

いずれにしても、ちょっと早まってしまったようだ。。。

  •  0
  •  0

iPhoneで定期撮影できるカメラアプリは、どういう訳か無料ではなかなかいいものがない。あっても大抵はタイムラプス動画用で、それ以外はかなり古いものが多い。標準カメラアプリのタイムラプスなんて謎仕様もいいところで、定期撮影には全く使えない。

また、iOSにはAndroidのAutomagicのようなまともなオートメーションアプリがない。いくつかのオートメーションアプリを検討したが、今はないか今一つだった。

  • Workflowは良さそうだったが、Appleに吸収されてiOS 13の「ショートカット」アプリ(以下、ショートカット: それにしても混乱させるひどい名前だ・・・: 英語版では"Shortcuts"(アプリ名)と"a shortcut"(ショートカット)と、どうにか区別できていたのだろう)になってしまったようだ。
  • 有名なIFTTTは、僕が詳しくないせいか、作れる処理が余りにも単純で(条件 → 処理(1個)の実行だけ?? しかも、処理はネットサービスだけ??)、この作業には使えなさそうだった。

それで、iOS 13に更新してショートカットを使うことにした。が、ショートカットの出来のひどさ(今気付いたが、これは元のWorkflowに由来していそうだ。他に、iOSの不自由さにもよるのだろう)に苦労し、イライラした。

やりたいのは、以下の処理である。

  1. バックグラウンドで動き
  2. 一定時間(例: 30分)ごとに撮影し、
  3. 画像をPCに転送する。

ショートカットとそのオートメーションでは、上のどれも容易にはできなかった。

まず、ショートカットやオートメーションはバックグラウンドで動かない。詳しくは試していないが、それらの画面が表示されていないと実行が停まってしまうようだった。更に、画面をロックしたら、オートメーションが自動実行する時にコード入力画面になってしまう。

→ そのため、画面を自動ロックしないように設定し、ショートカットの画面を隠さないように注意して使うことにした。画面を自動ロックしないということは、アイドル状態でも画面が暗くならないから焼き付きが心配なので、画面の輝度を最低(0)にするようにした。まあ、こんなに使いにくいiPhoneなんて滅多に使わないから、焼き付いたっていいけど、気分が悪いので一応配慮する。

その後、画面は液晶なので、いくらバックライトを暗くしても焼き付くかどうかには関係ないと思われるので、画面の輝度を最低にするのは余り意味がなさそうなことが分かった。まあ、バックライトの寿命を伸ばすとか寝ている時の眩しさを減らす意味はありそうだ。 (7/25 4:38)

次に、一定時間ごとに処理を実行できない。あるのは、指定時刻に起動するトリガ(1個しか指定できない)だけで、しかも、それは自動的には実行できない(指定した時刻には、起動するための通知・確認が出る)という素晴らしさ。。。(→ 参照) 「オートメーション」の機能にも関わらず、自動で起動しないって「アホですか?」と言いたい(海外の掲示板でも嘆かれていた)。

→ そのため、スクリプティングの繰り返し機能を使って、撮影間隔の時間分(30分)待つようにした。なお、撮影・処理や転送に意外に時間が掛かるようで、毎回30分待つと撮影時刻が段々遅れるので、1回の処理時間(約25秒)分短く待つようにした。

本来は、処理開始時刻を保存し、処理が終わってから少し(例: 10秒)待ち、その時の時刻から経過時間を計算するのを繰り返して確実に30分待つべきで、そうしたかったが、ループから脱出する方法がないなど、余りにも使いくく・分かりにくくてくじけ、安直な方法にした。そのため、今度は早目に撮影されることも起こるようになった。。。

→ やっぱり、決め打ちの待ちをすることや撮影時刻がずれるのは気に入らないので、上記の処理をどうにか実装した(下のショートカット「1日分の撮影」中の[撮影間隔(30分)を空ける]の部分)。 (ループから脱出の代替手段の参考)

→ 更に調べた結果、今までは定数しか指定できないと思って居た待ち時間に、変数を指定する方法が分かり※、上記のループは不要になった。これができたおかげで撮影間隔の精度がかなり上がった。

※待ち時間の数値を長押しするとオプションが出る(繰り返しの回数も同様; 参照)。分かりにくいことこの上ない。数字すら直接入れられず、▲▼のボタンでしか値が変えられないフィールドに変数が指定できると思えたり、そこを長押しするとオプションが出るなんてことを思い付く人は、まさに超能力者だ。普通はオプションは「歯車」じゃないかなあ、あるいは、その部品の地の部分を長押しでもいいけど、フィールド長押しは掟破りだ・・・

また、制限は多いものの、確認なしでオートメーションを実行できる方法(裏ワザ?)を見付けた。それは、「おやすみモード」をトリガにするもので、一日1-2回なら、固定時刻に自動的に起動できる。例えば、トリガをおやすみモードがonになった時にすれば、毎日1回、おやすみモードの開始時刻に自動実行できる。

まあ、普通に使う方だと、昼夜関係ない時におやすみモードになるのは困るだろうから、余り汎用性はなさそうだ。

最初はそうしていた(1日分の撮影をおやすみモードで毎日開始するようにした)。が、良く考えると不便(一旦停めたら、起動時刻を調整しないと翌日まで開始しない)で馬鹿らしいので、1年分の撮影をするショートカット(1日分の撮影を約365回繰り返す)を作って、それを手で起動するようにした。スクリプティングでは無限に繰り返すことができないので、とりあえず1年にしたが、さすがに1年間も停めずに撮影することはないので、これで充分だ。

ショートカットやオートメーションがバックグラウンドで動かないのや、多くのオートメーションが自動で起動しないのも、Appleがセキュリティにうるさいからだと思う。元々Workflowは社外のアプリだったので できなかったのだろうし、Appleに吸収されてショートカットになっても、まだそういう改良はしていない(する予定もない??)のだろう。ガチガチで不便この上ない。

画像を(自分の)PCに転送するのは、いろいろ頑張ればできそうだが、ここまでで呆れ果てたので、安直にDropboxに送るようにした。その機能はあったので助かった。

最初は画像をメールで送ろうとしたのだが、なぜか、画像が添付されずに空のメールしか送れなかったので、Dropboxにした。結果的に、メールより手軽でいい。

他の問題は、カメラで撮影する時にシャッター音が出てうるさいことがある。

→ 撮影に無音カメラアプリを使えばいいのかも知れないが、できるか不明だったので※、とりあえずテープでスピーカーを塞いだ(イヤフォンジャックにプラグを挿しても効かないようだ)。ただ、まだ音は聞こえて、時々ちょっと驚いたり、盗撮されているような気分になるw

※別のカメラアプリは ショートカットからは起動しかできず、撮影できないので使えなかった。まったく不便だ・・・ あと、iPhoneのスピーカーは下と上(耳に当てる部分)にあるということを知って、愕然とした。美しさ()を自慢するiPhoneが そんなんでいいのかよぉ。そういう訳で、シャッター音を小さくするには両方を塞ぐ必要があるそうだ。 (7/25 12:43)

 

結局、以下のような処理(ショートカットのプログラム)を作った。

1日分の撮影

  1. [1日分の繰り返し] 以下を48回(24時間/30分= 48回)繰り返す。
    1. 現在の時刻を変数t0に格納する。
    2. 画面の輝度を最低(0)にする。: 手で明るくした場合に備えて。
    3. 背面カメラで撮影する。
    4. 撮影した画像のサイズを小さく(幅: 750画素)する。
    5. それを左に90°(-90°)回転させる。: iPhoneを横に倒しているため(回転方向は左か右かあやふや)。
    6. それをライブラリに保存する。
    7. 最新の画像をDropboxに送る。: 本来は上で保存した画像を指定すべきだが、この処理が外部のショートカットのため、方法が今一つ分からなかった。
    8. [撮影間隔(30分)を空ける]
      1. 現在の時刻を変数t1に格納する。
      2. t1とt0の差(秒)を求め、変数dtに格納する。
      3. (1800-dt)秒待つ。

1か月分の撮影: 余り意味はないが、処理単位を明確にするために作った。

  1. 以下を31回繰り返す。
    1. ショートカット「1日分の撮影」を実行する。

1年分の撮影: これをホーム画面に置き、手軽に定期撮影を開始できるようにする。

  1. 少し(例: 5秒)待つ。: 画面のタッチによる本体の揺れが収まるのを待つため。
  2. 以下を12回繰り返す。
    1. ショートカット「1か月分の撮影」を実行する。

この方式にはいい点が少しだけあって、撮影した画像をDropboxに送るようにしたので、PCを停めていても画像は転送し続けられ、それらはブラウザで見られ、PCがそれらの画像で溢れないことだ。もちろん全部、iOSでなくDropboxのおかげだwww

なお、画像サイズを小さくしているため(1枚100KBくらい)、Dropboxの無料アカウントでもほとんど無限に保存できそうだ。もし不足したら、PCに送って削除すればいい。

 

PS. 撮影には関係ないが、iPhone 6sは なぜかセルフパワーハブからは充電できず(Nexus 4や臭いはセンサはできる)、一晩動いた末に電池が空になり掛けた。仕方ないので、専用のACアダプタを追加した。全く面倒なことが多くて、本当に大っ嫌いだ

 

(7/25 12:57までに さまざまな加筆・修正)

  •  1
  •  0