min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

AppleWatchに「再生中の楽曲名」を表示させる

自作の音楽プレイヤーで再生中の曲名AppleWatchに表示させたい。

f:id:min117:20200712074907g:plain

min117.hatenablog.com

 

思いついたのは車に乗ったとき。

 

まず、カーナビってBluetoothで繋いだ)iPhone再生中の楽曲名が表示される。

f:id:min117:20200712075017j:plain

iPhone(ミュージックアプリ)画面でも曲名が表示される。

f:id:min117:20200712075239p:plain

そして、AppleWatchにも曲名が表示表示される。

f:id:min117:20200712075334p:plain

これがAppleの素晴らしいところ。製品が統一されている。

 

これって、自作の音楽プレイヤーでも実装できるんじゃないか?と思った。

min117.hatenablog.com

 

プレイヤーの見た目はこんな感じ。

f:id:min117:20200505082144p:plain

Safariからアクセスすれば音楽が聴ける。動画も再生できる。

f:id:min117:20200209210212g:plain

 

ソースのtitileタグは doLSglob.php(ファイル名と同じ)になっていて

f:id:min117:20200712080428p:plain

 

これにiPhoneSafariからアクセスすると

f:id:min117:20200712075859j:plain

 

AppleWatchにはそのページのtitleタグの情報が(楽曲名として)表示される。

f:id:min117:20200712080113p:plain

これを再生中の曲名に変えられればいいわけだ。

 

 

 

できた。こうなる。

 

f:id:min117:20200712074907g:plain

ヌルヌル動く。

f:id:min117:20200712081627p:plain

今再生してる曲名が分かって超便利。

f:id:min117:20200712081850p:plain

 

ソースはこんな感じ。

f:id:min117:20200712081530p:plain

外部から(グローバル変数で)受け取った曲名($myCALLED_MP3)をtitileタグに設定してやるだけ。

 

これはひとえにAppleWatchが「titleタグの情報を曲名として表示する」というシンプルな仕様にしてくれているおかげ。Simple is best. アップル最高。

 

 

 

 

 

fedora30 python3 から MeCabを使う → エラー「 [ifs] no such file or directory: /usr/local/etc/mecabrc」が出たら sudo cp /etc/mecabrc /usr/local/etc/ で解決

f:id:min117:20200711143904p:plain

動画をガンガン保存する。だから溜まる。

 

最近保存した動画の名前を分析して、よく出てくる単語を30コくらいピックアップして、自分がいつも最初に入るサイト(自前のポータル画面)に表示できたら面白そうと思った。

 

まずは動画の名前を分析するところを実装する。mecabで名刺(noun)を分析すればよかろう。

 

このサイトのコード使わせてもらう。

qiita.com

 

の前に、python3からmecabを使えるようにしなきゃ。

 

$ pip3 install mecab-python3

だと失敗する。権限エラー。

 

--user オプションをつけたらうまくインストールできた。

$ pip3 install mecab-python3 --user

f:id:min117:20200711143348p:plain

 

動作テスト。

f:id:min117:20200711143443p:plain

一見よさげだが

 

ソースそのまま写して

$ vim my_count_noun.py

f:id:min117:20200711144826p:plain

 

引数にテキストファイルを食わせても

$ python3 my_count_nown.py ytdl_news_all.txt

f:id:min117:20200711144950p:plain

こんなエラーになる。

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

mecabrcが無いのが原因ぽい。

 

こんなときは、コンソール上で(ソースにあるのと)同じことをしてみる。

$ python3

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711145139p:plain

やっぱmecabrcが原因くさい。

 

こういうときは、エラーメッセージそのままでググるのが鉄則。

f:id:min117:20200711145358p:plain

 

このへんが参考になりそう。

qiita.com

f:id:min117:20200711145502p:plain

パスを通せば治るらしいが、pip3でインストールしたmecabの場合はどこにパスを通せばいいのか分からない。

 

とても参考になりそうな記事。

qiita.com

 

$ python3 -V

$ python3

>>> import sys

>>> sys.executable

>>> sys.version

 

$ pip3 freeze | grep mecab

 

$ python3

>>> import sys

>>> sys.path

>>> sys.path.append('みつかったpath')

 

なるほど。python3の実行PATHはこんな感じで探せばいいのか。

f:id:min117:20200711151846p:plain


みつけた。

f:id:min117:20200711151626p:plain

自分の環境では

/home/fedora/.local/lib/python3.7/site-packages

ここにmecabがあるっぽい

 

>>> sys.path.append('/home/fedora/.local/lib/python3.7/site-packages')

して続行。

f:id:min117:20200711152249p:plain

しかしエラー。

/home/fedora/.local/lib/python3.7/site-packages/MeCab/__init__.py

の124行目に何かありそう?

 

いや、辞書の場所を探そう。ここに見つけた。

$ ls -sahl /usr/lib64/mecab/dic/

f:id:min117:20200711154721p:plain

 

$ python3

>>> import sys

>>> sys.path.append('/usr/lib64/mecab/dic/')

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711154926p:plain

しかしエラー。どうも辞書を見に行く場所が違ってるっぽい。やっぱ

/home/fedora/.local/lib/python3.7/site-packages/MeCab/__init__.py

を探る必要があるのか。

 

どうもmecabrcが原因ぽく思える。ググって調べたら/etc/mecabrcがあるらしいことがわかった。

$ ls /etc/mecabrc

f:id:min117:20200711161015p:plain

あるね。

 

ということは

$ sudo cp /etc/mecabrc /usr/local/etc/

f:id:min117:20200711161206p:plain

からの

$ python3

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711161318p:plain

おっしゃエラー消えた!

 

あらためてスクリプトを動かす。

$ python3 my_count_noun.py ytdl_news_all.txt

f:id:min117:20200711161447p:plain

動いた。素晴らしい。

 

ここまでくれば、最近保存した動画名に含まれる単語分析なんて、すぐできる。

 

$ ls -rt | egrep 'mp4$|mkv$|webm$' | tee -a test_noun02.txt

f:id:min117:20200711162826p:plain

 

$ python3 my_count_noun.py test_noun02.txt

f:id:min117:20200711162808p:plain

mkvが一番多いのか。面白い。

 

あとでワンライナーでできるよう改良する。Linux最高すぎ。

 

 

 

 

Window10の生存確認 5分ごとに日付+時間をファイル出力するバッチ(bashと比較)

Windows10が起動しているかどうか。生存確認したい。

f:id:min117:20200705090528p:plain

ネットワークドライブZ:¥に割り当てたNAS5分ごとに「Windowsの日付+時間」を吐き出すプログラムを延々と回して生存確認とする。

 

ワンライナー

for /L %i in (1,1,10000) do @echo %i && date /t >> ip.txt && time /t >> ip.txt && @timeout 300

 

複数行版

for /L %i in (1,1,10000) do (

 @echo %i

 date /t >> ip.txt

 time /t >> ip.txt

 @timeout 300

)

 

こんな感じで動いてくれる。

f:id:min117:20200705091223p:plain

 

サーバ上からファイルを見るとこう。

f:id:min117:20200705091330p:plain

SJISファイルをUTF8な環境(fedora)で開いてるけど、時刻を見る分には文字化けとかない。

 

同じことをLinuxbashでやるとこれ。

ワンライナー

for i in $(seq 1 10000); do echo "$i"; date +"%Y%m%d%H%M%S"; sleep 300; clear; done

 

複数行版

for i in $(seq 1 10000); do

 @echo %i

 date +"%Y%m%d%H%M%S" >> ip.txt

 sleep 300

done

f:id:min117:20200705091648p:plain

もう毎日の業務で手が慣れちゃってるけど、日常の記録に。

 

 

 

 

 

 

 

「Windows 10はライセンス認証無しでも実は使える」を試す(slmgr /rearm) → 失敗

これ。素晴らしい記事。試す。

wicachi.com

 

きっかけはこれ。仮想環境にあるWindows10が勝手にシャットダウンされるので原因を調査していたら

min117.hatenablog.com

 

原因はライセンス切れだったからっぽい。

blog.putise.com

 

冒頭記事によるとslmgr -rearm」コマンドさえ打てば管理画面に行ける(行って、ライセンス情報を更新できる)とある。

f:id:min117:20200705072509p:plain

slmgrコマンドとは、ボリュームライセンスを管理するためのコマンド。会社なり官公庁なりのシステム管理部門にいる人はたまに耳にしているはず。

docs.microsoft.com

 

まあ、記事は2016年の古い記事だし既に内容は古いかもしれないが、試す価値はある。

 

記事の環境をみると

f:id:min117:20200705072751p:plain

f:id:min117:20200705074353p:plain

Windows10Proでバージョン1607、ビルドは14393となっている。かなり古い。Windows10といっても初期ビルドだろう。

 

で、今回試すWindows(手元の環境)はというと

f:id:min117:20200705073746p:plain

Windows10のバージョン1176、ビルドは10586

f:id:min117:20200705073008p:plain

記事の環境よりさらに古い。Windows10の出たて(Longhornのあと)くらいに、実験用に作った仮想環境だから。

 

やってみる。まずはコマンドプロンプトを管理者として実行し

f:id:min117:20200629214836p:plain

slmgr -div」コマンドで現在の情報を表示する。

f:id:min117:20200705074611p:plain

あ、まちごうた。正しくは「slmgr /dlv」だった。「スラッシュディーエルブイ」が正しい。ハイフンじゃない。アイじゃない。

 

間違うと使い方を教えてくれる。

f:id:min117:20200705075151p:plain

/rearm は「コンピューターのライセンスの情報をリセットする」コマンド。

f:id:min117:20200705075217p:plain

ふむふむ。

f:id:min117:20200705074922p:plain

ほうほう。

f:id:min117:20200705074948p:plain

ADのオプションまであるのか。こんどじっくりいじることにする。

f:id:min117:20200705075007p:plain

 

気を取り直して、正しいコマンドを打つ。

slmgr /dlv

f:id:min117:20200705080103p:plain

残りのSKU猶予期限リセット可能回数: 2 とある。

f:id:min117:20200705080118p:plain

 

さて、/rearmしてみる。

slmgr /rearm

f:id:min117:20200705080845p:plain

コマンドが正常に完了し、再起動を求められた。

再起動する。

shutdown -f -r -t 0

f:id:min117:20200705080636p:plain

 

再起動完了。結果やいかに。

slmgr /dlv

f:id:min117:20200705081713p:plain
ダメでした。リセット回数が減っただけで、有効期限切状態は変わらず。

 

slmgr /rearmする前後を比較すると

f:id:min117:20200705082633p:plain

f:id:min117:20200705082727p:plain

通知の理由が変わっているのと、リセット回数が2から1に減っている。

 

このままだと「突然シャットダウン」現象はたぶん収まらない。また別のやり方を探す。

 

予定

・「通知の理由 0xC004FC07」でduckduckgo

・「残りのSKU猶予期限リセット可能回数 変更」でduckduckgo

・「ライセンス切れ 自動再起動 レジストリ」でduckduckgo

 

https://support.microsoft.com/ja-jp/help/10738/windows-10-get-help-with-activation-errors

 

 

 

 

 

Windows 10 が勝手にシャットダウンするのを調査 → DISM.exe /Online /Cleanup-image /Restorehealth で解決

VMwareにいる Windows10(Build 10586)が突然なんの前触れもなくシャットダウンしてしまうようになった。

f:id:min117:20200629222158p:plain

なんだこれ。2019年6月頃に初めて発生。しばらく放っておいたが、今も起きる。

 

これと全く同じ現象。

f:id:min117:20200629214418p:plain

answers.microsoft.com

原因調査も面倒だったので放置しておいたけど、最近Windows10でいろいろやってみたくなって、あらためてこの「いきなりシャットダウン」現象に本気で取り組むことにした。

 

<結論>

下記で一応解決?したっぽい。

 

<直し方>

1. システムのプロパティ→詳細設定「自動的に再起動する」のチェックを外す

f:id:min117:20200629213646p:plain

手順はこう。

まずは左下のスタートを押してすぐ「cmd」と打つ。

f:id:min117:20200629214756p:plain

コマンドプロンプト」が出るので右クリックして「管理者として実行」する。

f:id:min117:20200629214836p:plain

ユーザーカウント制御が出たら「はい」

f:id:min117:20200629214957p:plain

コマンドプロンプトが起動したらsysdm.cpl」と入力しEnter

f:id:min117:20200629215100p:plain

「起動と回復」にある「設定」を開く

f:id:min117:20200629215222p:plain

「自動的に再起動する」のチェックを外して「OK」する。

f:id:min117:20200629215332p:plain

とりあえずこれで、システムエラー時に勝手に再起動はしなくなったはず。

 

ただ、今回困ってるのは勝手に再起動じゃなくて勝手にシャットダウンだから、果たしてこれだけで治るかは微妙なところ。

 

そこでもう一つ試しておく

 

2. システム ファイル チェッカーを使う(DISM.exe)

このサイトにある「3. DISM.exe …の記述を試す。

https://support.microsoft.com/ja-jp/help/4026529/windows-10-using-system-file-checker

f:id:min117:20200628125058p:plain

これは(どうやら)今インストールされているWindows10の起動イメージマイクロソフトのサイトからダウンロードしてきて強制的に修復するコマンドらしい。

 

やってみる。まずは上記と同じ手順で「コマンドプロンプト」を出し、右クリックから「管理者として実行」する。

 

コマンドプロンプトが出たら

DISM.exe /Online /Cleanup-image /Restorehealth

と入力しEnter。

f:id:min117:20200629220425p:plain

しばーらく時間がかかるが放っておく。

f:id:min117:20200628125322p:plain

20.0%のまま1時間くらい進まなかった。

f:id:min117:20200628125429p:plain

しかししばらく放っておくと、あっけなく100%になる。

f:id:min117:20200629213515p:plain

「復元操作は正常に終了しました」「操作は正常に完了しました」と出れば終わり。

f:id:min117:20200629213543p:plain

 

ちなみに今回試したWindows10のバージョン(ビルド)は10586

f:id:min117:20200629221901p:plain

Windowsのバージョンコマンドプロンプト「winver」と打てば表示できる(豆知識)。

 

最新のWindowsのビルドは19041だから、それに比べれば10586なんてかなーり古い(Windows10がベータだった頃の)バージョンだが、そんな古いのでも1や2の手順で治った。ということは最新版でも同じ手順で治せるだろう。

docs.microsoft.com

f:id:min117:20200629221207p:plain

 

参考)

 

レジストリを使って強制再起動させないようにする手順。たぶんいろいろ危険。 

www.youtube.com

 

消えないようにメモ。 

f:id:min117:20200628124941p:plain

f:id:min117:20200628125014p:plain

DISMは面白そうだから今後も調べる。

onoredekaiketsu.com

 

追記)勝手にシャットダウンするのはWindows10の評価版の仕様ぽい。

blog.putise.com

 

 

 

 

 

 

macOS ロードアベレージの見かた → topコマンドのLoad Avgが「system_profiler SPHardwareDataType」コマンドの「Total Number of Cores」の数を超えていたら高負荷

f:id:min117:20200627224943p:plain


ロードアベレージって何だっけ?何のロードの平均だっけ?」って。いつもなる。なんでか覚えられん。

 

いろいろ分かりやすい記事があるんだけど

www.tweeeety.blog

で?結局なんだっけか?になる。

 

てことで端的にどの数字がどうなればヤバイのか?だけ取り出して覚える。今回はmacOSで試す。topコマンドを使う。

 

<結論>

ロードアベレージが、CPUのコア数超えていたら高負荷

 言い換えると

 

topコマンドのLoad Avg「system_profiler SPHardwareDataType」コマンドの「Total Number of Cores」の数を超えていたら高負荷

 

やってみる。

 

まずは topコマンド。

$ top

f:id:min117:20200627223604p:plain

Load Avgロードアベレージ)は1.35、1.16、1.10 の3つある(なんで3つあるかは話すと長くなるので、とにかく3つあると思っておく)。

 

次に system_profilerコマンド。

$ system_profiler SPHardwareDataType

f:id:min117:20200627224028p:plain

Total Number of Cores(コア数)は4つ

 

で、今回は 1.35、1.16、1.10 の3つそれぞれが4を超えていないので問題なし。負荷はかかってない。そう判断する。

 

仮にこれが、4.35、4.16、4.10 みたいに、コア数を超えてしまっていれば高負荷。そういうことらしい。

 

詳しくは「ロードアベレージ」でググればいくらでも情報は出てくるから割愛。

 

ただしこのサイトはいつも勉強になるので参考リンク。

orebibou.com

macOSでなくてLinux(でのtopコマンド)だけど、とても分かりやすい。素晴らしい記事。じっくり読む。

 

 

 

 

 

 

RaspberryPi4 のケースも衝動買い

RaspberryPi4 のケースも衝動買い。 

f:id:min117:20200627145141p:plain

 

 

min117.hatenablog.com

 

Amazonで購入。

f:id:min117:20200627140544p:plain

www.raspberrypi.org

 

dポイントUPモールから入ってポイント1.5倍にして

f:id:min117:20200627144240p:plain

 

d曜日もエントリーして

f:id:min117:20200627144402p:plain

 

ポイント還元を+2%(ホントか?)にして

f:id:min117:20200627144550p:plain

 

Amazonでの支払い方法を

f:id:min117:20200627144209p:plain

d払いにする。

f:id:min117:20200627144127p:plain

 

注文を確定

f:id:min117:20200627144718p:plain

 

OK。

f:id:min117:20200627144823p:plain

今日だけで朝から1.5万円くらい買い物したな。ま、使うものだからいいか。