Archive for the ‘Linux’ Category

LinuxとiPhoneで使える、Evernoteの代替の件。実は、結論が出てからも、しつこく探していた。

すると、たった一つだけ、LinuxとiPhoneのアプリがあるサービスがあった。Zoteroというもので、本来は研究者の文献管理用システムのようだ。元々研究者が作ったようで、(大学や研究所は、各自の好み研究の目的に従ってさまざまなマシンを使っているため)マルチプラットフォーム対応になっており、Windows, Mac, webはもちろん、Linuxのアプリまであって「完備」しているのが珍しい。更に、純正ではないが、iPhone(注意は後述)やAndroidのアプリもある。

Zoteroは、論文から参照する資料(論文の最後に載る「参考文献」)の情報を管理するものなのだが(個人的には、そんなことのために、こんなすごいシステムを作る必要があるのか疑問(それとも、今の論文は「いつでもどこでも」書くもので、しかも、大量の参考文献を列挙するのだろうか?)だが、実際に需要があるのだろう)、その文献情報の中に「メモ」という情報を格納することができる。そのメモは、まさに、Evernoteのように、普通(もちろんマークダウンでなく!、ビジュアルエディタで自由)に書けるものになっていた。書式を設定できるし、画像も貼れるし、アプリなので、ブラウザ版EvernoteのPage up/downの問題もない。つまり、ずっと探していたものが見つかったのだ!

が、やっぱり、世の中はそんなに甘くなかったw 基本機能は問題ないのだが、iPhoneアプリ(PaperShip)に問題があった。

まず、最初に試した時、Linuxアプリで作ったメモが見えなかった。検索してみたら、他の人も、「PaperShipが同期しない」、「サポートの返事が全然来ない」、「ずっと更新されてないから、ディスコン(開発・サポート終了)では?」、などと書き込まれていたし、Zoteroのモバイルのページにもそういう情報がある旨書かれていたので、使えないのかと思った。

が、やっぱり捨てがたく、更にしつこく試した。まず、Zoteroのストレージとの同期は駄目でも、自分で用意したストレージ(WebDAV)なら大丈夫かも知れないと思って試したが、WebDAVにはメモは格納できず、添付ファイルしか格納できないので、目的は果たせなかった。

それでも、今朝は「きっとできるはずだ」という、全く裏付けのない信念(直感とか本能とか「臭い」)でいろいろ試した。

余談: プログラムとかソフトの「臭い」は確実にある。ちょっと触ったりwebやマニュアルを見たり話を聞くだけで、「だめだこりゃ」(「へえ、まあ頑張ってね。僕は使わないからw」)なものは分かる。「これはいい!」ってものも分かる。演奏の最初の一音・フレーズみたいなものだ。ただ、中間は難しい。結構騙されたり、「意外にいいじゃん」てことがある。

すると、Linuxのアプリで直接メモを作るとPaperShipでは見えないのだが、資料(例: 「文書」)の中(子として)にメモを作れば、PaperShipからも見える(同期される)ことが分かった(上記の困っている人に教えてあげたいが、別の問題かも知れないし、大抵の掲示板は書き込みを無視する人が多いので、止めておく。この情報は、検索してここに来られた、日本語が読める方だけへの公開に留めるw)。ZoteroとPaperShipのバージョン違いの問題なのかも知れない。

それで、とりあえず、今日の午後、日記や買い物メモで試してみた。すると、思わぬ落とし穴が見つかった。: PaperShipは電池を食い過ぎるのだ。時間消費率は計算していないが、正午頃から夕方まで、時々メモを書くのに使っただけで、電池残量が30%程度になってしまった。これは、今までどんな使い方をしてもほとんどなかったことなので、明らかにPaperShipのせいだ。実際、iPhoneの設定のバッテリーで表示される使用率は60%を越えていた。

全く惜しい! (おらのスマホにゃ電池がねぇw)

代替策として、iPhoneではweb版を使うことを検討したが、結構ちゃんとしたモバイル用ページがあるものの、そもそも同期の問題の可能性があるのでアプリを探しているのだし、編集ページの文字が小さくて、ちょっと使い辛い。

それで、ダメモトで、PaperShipのバックグラウンド更新をoffにして、明日いっぱい試そうと思っている(多分、駄目だとは思うが・・・)。

PaperShipを起動(正確にはサスペンド状態)しているだけで約3%/hも電池を消費した※ので、アンインストールした。代替策のwebは、iPhoneでは編集ページの文字が小さいので、Zoteroへの移行は保留にした。 (12/10 5:57)

※この結果から、Appleが主張している、「不要なアプリを終了させる必要はない(OSがうまく処理する)」はやっぱり正しくないことが分かる。全部まともなアプリなら正しいのだろうが、実際にはそうではない。アプリがまともかそうでないかやOSがどう処理するのかは作った人以外には分からないので、小まめに終了させる方が得策だ。(12/10 6:01)

(12/10 20:59) その後、再びNixNote2で同期エラーが起こったのに業を煮やし、Linuxではweb版も許容することにして、Nimbus noteを試した。が、以下の問題があった。

  • 英語以外の言語が、なぜかロシア語だけある。サポートページも英語とロシア語の記述がある。 → ロシア系企業なのかも知れないので、不安がある(ただ、本当に危ない関係があるなら、下手にロシア語を出さず隠し通すはずなので、問題ないのかも知れない)。
  • Web版
    • 負荷が高い。ブラウザ(Vivaldi)の負荷(topコマンドの%CPU)は常時10%を超え、100%になることもある。
    • 見え方(スタイル・フォーマット)がiPhoneと異なる。フォントや改行の見え方が違う。
    • デフォルトのフォントがGeorgia(セリフ)でちょっと嫌。
  • iPhoneアプリ
    • 同期の動作やタイミングが今ひとつ。
    • 同期間隔を指定するうえ、最短で30分と長い。

それで、今はBox notesを試している。Web版は機能が豊富(Windowsアプリより機能が多い感じ)だし、iPhoneアプリにも大きな問題はなさそうなので、明日いっぱい試してみる。ただ、Evernoteからのインポートに難がある(標準ではできない)ので、乗り換える場合にはそれを何とかする必要がある。まずは、使うノートだけを手でコピーしていけばいいとは思うが。

(12/13 4:17) その後いろいろ検討して、(急な電池の減りはiOSの更新の影響による一時的なものと期待して、)再度Zoteroに戻ったのだが、やっぱり、PaperShipを外(LTE/3G通信)で使うと電池の減りがかなり速い。アプリを停めるだけでなく、アンインストールしてiPhoneを再起動しないと直らないようだ。上記のNimbus noteのiPhoneアプリも電池を食っているように見えたのだが、PaperShipの悪影響が残っていたようだ。

結局、昨日からBox notesに戻って、しばらく試すことにした。iPhoneアプリはまあまあ(ノートを開くたびに読み込むのがちょっと遅い)なのだが、web版はかなり使いやすい(ノートのエクスポート(ダウンロード)もできる)ので、Linuxでは全然不自由しないのがありがたい。ただ、ノートのファイルフォーマットは独自で、コチコチの石頭らしい彼らにはEvernoteに対応する気が毛頭ないので、そこは今後の課題だ。

(12/14 6:20) Box notesは使い勝手がいいし、iPhoneの電池も食わないのだが、いざ移行しようとすると、インポート・エクスポートの不自由さに困惑する。独自フォーマット(中身は滅茶苦茶)でしかインポート・エクスポートできず、Everenoteのwebやアプリからペーストしても、画像は貼れない(貼れたように見えても、Everenoteへのリンクの場合が多い)。

Boxは、そういう場合には外部の変換サービスを使うように書いているが、そんな、どこの馬の骨とも分からないサイトに自分のノートを全部通すなんて、全くの情弱だ。せめて、フォーマットの仕様を公開すればいいのに、なぜしないのだろうか?

こんなことでは将来絶対に苦労するので、正直言って使いたくない。すると、Nimbus noteかZoteroになる。NimbusはWindowsアプリでしかインポート・エクスポートできないし、Zoteroのモバイルwebのエディタは文字が小さすぎる。

幸い、Zoteroはオープンソースなので、自分のサイトにZoteroのシステム構築して、アプリはそこをアクセスするように変更し、モバイルwebのエディタの文字サイズを大きくすれば万事解決するのだが、それをやるには百年くらい掛かりそうだw

(12/15 22:17) Zoteroで無理をするのは諦めてBox notesを使っていたのだが、iPhoneアプリの出来が悪く、ノートを開くたびに10秒以上待たされることがあるのが嫌になった。それで、古いEvernoteのLinuxアプリのEverPadを動かそうとしたが、どうしても無理だった。それで、Nimbus noteしかなくなったのだが、webとiPhoneの表示(書式)が異なる(例: Webで入れた改行がなくなる)のがどうしても許せず、結局、Evernote(LinuxはNixNote2)に戻ることにした。が、戻るためにノートを移す時もNixNote2は同期エラーになったので、いつかは絶対に別のに移りたい!

(12/17 21:26) その後、惜しいサービスが2つ見つかったので、書いておく。

  • NexusPad
    • カレンダー、アドレス、ノート、画像、ブックマーク
    • iOS, Web, Android, Web対応 (ただし、iOSアプリは検索しても出ない)
    • Webはビジュアルなエディタで、画像の挿入も可能。
    • かなりいい感じなのだが、全部無料なので逆に怪しい(名前からして怪しいが、ちゃんと動くし、アプリはオープンソースになっている)。
    • 去年の6月からブログが更新されていないし、全部無料ではサービスの継続は難しそう。
  • Toodledo
    • 基本的にはカレンダーやTODOのサービスだが、ノート機能がある。
    • iOS, Android, Web対応
    • 標準ではノートやタスクのフォーマットはHTMLで書くしかないが、非純正のアプリのTaskUnifier Pro(Linux)やTaskAngel(iOS)ではノートのビジュアルな編集・フォーマットが可能。
    • ただし、ノートやタスクへの画像の挿入は不可(有料版(Gold)では添付ファイルとしては可能)。

 

PS. これは僕だけの考えかも知れないが、Zoteroの人はこういう用途があるのに気付いて、Evernoteに近づけるように抜本的に改良したら、結構儲かると思う。が、(これを投稿したって「なるほど。検討します」で終わるし、)まさに本末転倒な気がするから、止めた方がいいw でも、今だって随分いい線行っているのだから、Evernoteを超える可能性はあるとも思う。でもまあ、すごくいいシステムできてユーザーが激増してしまったら、規模(スケーラビリティ)の問題が出るだろう。

そもそも、この件は、Linuxユーザーが少ないのが悪いのだろう・・・

PS2. Nimbus noteにLinuxアプリの予定を聞いたのたら、回答は例によって、「そのうち」的なものだったが、送信してから約2分後に回答が来たのに驚いた。そんなにサポート要員が暇なのか、やっぱり「何か」やっているのか?? (12/10 20:59)

  •   0
  •   0

Web版Evernoteで書いたノートをNixNote2で開くと日本語が化ける問題が解決したので、web版を使っているのだが、どうしても我慢できないことがある。それは以下だ。

  • Page up/downキーが正しく動作しない(大きく上下してしまう)。
    • (Linux版)Vivaldi, Chrome, Firefoxで起こる。Vivaldi, Chromeでは、ほとんどページの先頭と最後に移動してしまうし、Firefoxではまともに動かない。
    • Vivaldiの「上に移動」/「下に移動」のキー割り当てを変えてみたが、有効にならなかったので、Evernoteのプログラム(JavaScript?)が悪そうだ。
  • 画像がノートの最後にしか挿入できない。
    • 一旦挿入してからカット・ペーストして移動はできるが、面倒。

それで、ここ数日間、上記の問題がなく、Linux(またはブラウザ)とiPhoneで使えるという条件で、30以上のサービス・アプリを探し、試してみたのだが、結局、いいもの(許せるもの)はNimbus noteしかなかった。

Nimbus note(web版)なら、Page up/downキーは正しく働くし、画像も希望の位置にドロップできる(ペーストは不可)。しかし、以下の欠点がある。

  • Linuxアプリがなく、web版ではノートのエクスポートができないため、バックアップしたい時はWindows版(Wineでは全く動かないので、仮想環境を使う必要がある)を起動する必要があって、面倒。
  • ブラウザ(Chrome)のプラグインは機能が少ないので、使うと却って使いにくくなる。
  • システム(ブラウザ)の負荷が高くなることがある。

また、無料版があって、僕の用途には充分なのだが、いつか有料版(約5USD/月)だけになる可能性もあるのが怖い(最初からなら払ってもいいが、後から有料になるのは騙し打ちのようで、嫌だ)。なお、移行するとしたら、大量のEvernoteをインポートすることになるため、その月は有料会員になる必要がある。更に、エクスポートの形式はJSONで、標準的なオープンなフォーマットなのはいいが、仮にサービスが終わってしまった場合、簡単にはEvernoteに戻れない(フォーマットを変換すればいいとは思うが、結構面倒だ)。だから、「すぐに乗り換えよう!」とは思えなかった。

探している時に感じたのは、どういう訳か、マークダウン(HTMLのように、書式をコマンド文字列・記号で指定する(→ 参考)。なぜ、マークアップでなくマークダウンというのかは不明だし、僕にはどうだっていい)を使うサービス・アプリが多いことだ。大抵は、それが通っぽい(とは書かれていなくて、「書くことに集中できる」とか書かれている)という認識のようだ。

へえ。もちろん、好みの問題だから何を使おうと自由だが、世の中には変人が多いものだ。「文章」を書きたいのに、プログラミングのように、いちいち書式の指定方法を思い出したり、書式がメニューで指定できるにしても、プレビューしないと書式が確認できないののどこが書くことに集中できるのかと思う(使わないから別にいいけどw)。そんなんだったら、書式なしテキスト(プレーンテキスト)のシステムの方がマシだと思う。

そんなマークダウン勢の一つに、(エゴサーチされて文句を言われるのが嫌なので)名前は書かないが、マークダウンであること以外は結構良くて、我慢して使おうかと思い掛けたものがあったのだが、 「『デジタルクリエーター』なる人は(普通の)WYSIWYGのエディタでなく、マークダウンを使う」(大意)とか書かれていて、それを読んだ途端に、意識高さが押し付けがましくて却下した。僕には、クリエーターとマークダウンがどのように結びつくのか、さっぱり理解できない。単に「クリエーター」と言いたいだけじゃないの??

(ここからさらに余談) だってだよ、その人の言う「クリエーター」が何を指すか知らないが、(分野は違うが)音楽だって書道だって文学だって、演奏者や作者は演奏したい・書きたいように表現している訳で、一本調子で演奏しつつ、MIDIみたいに「大きい音でスタッカートです」とか言ったり(更に、コンサートではMIDIのデータとか印刷物を配って、「あとは自分で再生して下さい」とかw)、書を全部同じ文字で書いて、赤で「大きいサイズの篆書」とか文字の横に書いたりしないでしょう(作曲家は楽譜に文字や記号で指示を書くけど、そうするしかないからで、もっといい書き方があればそうするはず)。文学は基本は全部同じ文字で書くが、昔は原稿用紙に手書きしていて、作家によっては、マス目を無視して、(表現の一環なのか、単に気分なのか)書きたいように書いていた(→ 。それが出版物にはほとんど反映されないのは、ちょっと残念である)。

そういう指示を書くのは編集とかの裏方さんであって、それを「クリエーター」というのなら分かるが(悪いけど、僕は編集者はクリエーターとは思わない。というのは、編集者だけ居たって作品は生まれないから)、それにしたって、マークダウンで書式を指定するのは、本来の仕事(文章を書く)以外の余計な作業としか言えないね。せいぜい、システムの内部で機械が使うもので、人間は使わない、表面には出さない・出すべきでないものだ。

という訳で、web版のEvernoteを我慢して使うか、バックアップの不便さを我慢し、将来の不安を抱えながらNimbus noteに移行するかの、(究極の?)選択となった。まあ、何かあるまでは様子見かな。。。

(12/8 21:09) 別の投稿に書いたが、Evernoteのweb版がiPhoneで書いたノートを上書きしてしまったので、ブラウザ版は懲り懲りだ。それで、Linuxはブラウザ版になるNimbus noteは却下にした。あとは、EverPad(昔のEvernoteのアプリ)かZoteroしかない。前者は、新しいOSでセットアップする必要があり、後者は、バグがあって同期できないiPhoneアプリPaperShipの、WebDAV機能で同期できるかを試す必要がある。どっちも面倒だ。

  •   0
  •   0

LinuxではEvernoteアプリは動かない(頭に来ることに、対応する予定もないとのことだ)。頭には来るが、まだ他にいいものがない(Dropbox Paperは駄目だった)ので使っている。選択肢として、web版かNixNote2がある(他にWhateverやTuskもあるが、単にwebをアプリに見せているだけである)。

最初はweb版を使っていたのだが、ノート全部のバックアップができないので、ずっとNixNote2を使っていた。しかし、普通に使っているだけなのに、同期に失敗したり(ノートの内部フォーマットがおかしいと判断されるようだ)、(タイミングによっては)ノートがiPhoneアプリに上書きされたり、編集不可になったりして(ノートのフォーマットかノートのサイズの関係?)、かなり使いにくい。はっきり言って、使い物にならない。

Web版にも今ひとつな点(例: 画像はノートの最後にしか挿入できない)はあるが、純正だけあって、安定性の点ではNixNote2よりずっとマシなので移りたかったのだが、web版で書いた日本語の文字がNixNote2では化ける(画像の下半分)問題があった。一旦化けるとweb版でも化けてしまうので、たちが悪い。NixNote2を絶対に使わなければいいのだが、ノートのバックアップのために使いたいから、そうも行かない。

そのため、web版(の日本語)が文字化けしない方法を探していた。長らく見つからずに諦めていたのだが、昨日ようやく見つかった。NixNote2の設定で、"Force UTF8 Encoding"をonにすればいいのだ。設定を直したら、あっけなく解決した(ただし、設定変更前の化けは直らない)。

各図の上半分(正常)は、NixNote2の設定変更後にweb版で書いたもの。下半分(化けている)は、NixNote2の設定変更前にweb版で書いたもの。

検索してもなかなか見つからなかったということは、当たり前のことなのか、こういう使い方(Linux+iPhone+日本語)が珍しいのかだろうが、おそらく後者だろう。今後は、バックアップの時だけNixNote2を使うことにした。ただ、それだけでも、同期に失敗したりノートがおかしくなる可能性はあるので、その時は、バックアップには純正アプリを使うか、バックアップすることを諦めるしかない。

(12/8 20:26追記) あれから、Linuxではブラウザ版Evernoteを使っていたのだが、さっき、ブラウザがiPhoneを上書きしてしまって、昼に書いたはずの日記がなくなってしまった。今日は忙しかったから余り書かなかったのと、自分でも何を書いたか忘れたので、大したことはないのだが、気分が悪いので、まだ問題の少なかったNixNote2に戻ることにした。NixNote2なら、運が良ければ、「競合ノート」として残る可能性があるのがいい。

ブラウザ版は、基本的に、書いたらすぐに同期するようだが、何かのタイミング(今日はPCのスリープだろうか)で同期が遅れると、上書きしてしまうのだろう。

LinuxとiPhoneの両方でネイティブのアプリが動くサービスを探してもないので、我慢するしかないようだ・・・

  •   0
  •   4

年賀状の時期になった。がらさんの投稿で知ったのだが、「年賀価格」は12/15-1/7までだそうで、それ以外は10円の追加が要るそうだ。追加の件は知っていたが、1/7までなんてのは、いくらなんでも早過ぎる。結構ムカついた、というより、かなり面倒な気がして来た。実際には、1/8以降に出すことはほとんどないが、その魂胆というか、アホさにイライラする。「そんなにやる気がないのなら、無理して使う必要もないな」という気分になった。

それで、今年からは紙の賀状を削減することにした。まず、賀状だけで全く付き合いのない人には出さないことにした※。更に、メールで連絡できて、失礼にならない方には、メールで出すことにした。

※ いろいろな考えはあるだろうが、ずっと年に1回の賀状を出すだけで、会うことも手紙も電話もメールも一切ない人は、もはや親しいとは思えず、賀状を出す意味がないと思う。親しくなくても出す価値はあるという考えもあるかも知れないが、今までの経験上、長く付き合いがない方に出し続けても、今後会ったりすることはまずないだろうから、出すことにどういう意味があるのだろうか?

すると、10枚未満になった。それなら自分で印刷した方が速いし安上がりなのだが、プリンタがない(滅多に使わないし、使いたい時にインクが詰まっているので、持たないことにした)ので、外注するしかない。会社のを使うことも考えたが、落ち着かないし、後ろめたい気分になるので止めた。コンビニのプリンタもあるが、持ち込みのはがきに印刷できるか分からないし試せないから、失敗したら高く付きそうだ。

それで、印刷業者に頼むことにした。例年はイロドリにしているのだが、若干高い(例: 300円/枚)ので、もっと安いところや、直接投函してくれるところを探した。すると、候補が3社見つかった。

一番安かったのは、グラフィック・ビズ(またはグラフィック)で、入会時にもらえる500円分のクーポンを使うと最安(100円/枚)になった。次はウェブポ、その次はネットで年賀状(サービス名)だった。後の2社は印刷サンプルを無料で送ってくれるので試したところ、ウェブポは淡い色がくすんでいて綺麗でなかったので、ネットで年賀状※かグラフィック・ビズとなった。

※ ネットで年賀状の色がいいのは、「補正」機能のおかげのようだ。使っているプリンタの特性に合わせて色を調整しているようだ。

(安いから)グラフィック・ビズに決めようと思ってwebを見ると、入稿の仕方が今ひとつ分かりにくかった。ページによって、PDFは「どんなアプリのものでも可」と書いてあったり、「Adobeのだけ」とあったりするのだ。それで問い合わせたら、返事が遅い。まる1日後にようやく来たのだが、グラフィック・ビズとグラフィックのサイトごとに(別サイトだと気付いたのは、結構後だった)仕組みが違うようで、片方は何でも良く、もう片方はAdobeだけという具合だった。

「あのぉ、だったら、相互に飛ばないようにするとか、『これはこのサイトだけ』と明記するとかするべきでしょう」と意見したかったが、ああいう手合い(他にも、会員登録でメールアドレスを2個入れるうえに、どちらもペースト不可など、意図不明のアナクロwebを作っている)には言うだけ無駄なので、無言で会員登録を解除した。きっと、いつもはプロ用だけど、儲かりそうだから年賀状も始めた程度なのだろう。舐めた商売はして欲しくないね!

てな訳で、今はネットで年賀状に決めている。ここは基本料がないから、追加の印刷も割高にならないし、何度でもサンプルを注文できるのもありがたい。 そこで、宛名なども印刷してもらって直接投函してもらうか、自宅に送ってもらって手で宛名や一言書くかの選択になった。直接投函は送料(650円)が不要なので、かなり安くなる(130円/枚)。

従来は、全部印刷なんて味気ないと思っていたのだが、それぞれの方に一言書けば(宛先の設定時に可能)いいような気がしたし、書き損じがなくなるので、今は直接投函にしようと思っている。なお、印刷文字の代わりに手書きの文面をスマフォで撮影して入れることもできるようだが、さすがに面倒なので、そこまではしないことにした。

その検討の段階で思ったのは、ここまでオンラインでできる・してしまうのなら、わざわざ紙で出す必要はないということだ。個別に一言書くのなら、(僕にとっては)メールと同じだ(個人的には、紙という物に本質はないと思う)。それで、更に紙を出す相手を絞り、今では5人未満になった。

長い前置きで申し訳ないが、ここからが本題で、つくづく思うのは、郵便(会社)のアホさだ。どうして、メール(今はLINEなどもあるだろう)を取り込まなかったのだろう? 例えば、(別会社は既にやっているだろうが、)メールアドレスやLINEのIDで郵便が送れるサービスとか、紙と電子媒体の本格的な融合・統合(例: 出し手・受け手の選択で、紙でも電子媒体でも出せる・受け取れる)をやればいいのに。余程頭が硬いのか古いのか(そう思う時、この前死んだ、Nという会社潰し名人の顔が浮かんで来る。ああいう輩は、いかにも革新的なことを言うが、実際には何も新しくなく(逆に会社には良くないことしかない)、とりあえず現状維持のハンコだけ押して過ごしているのだろうか)。規制はあるだろうが、政治家に取り入ればいくらだって何とかなるはずなのに、私利私欲のためにしかしないのか。

まあ、このままじゃ、だれも普通の郵便なんて使わなくなるだろう(手で文字を書くのはいいが、はがきを買い/便箋を封書に入れて切手を買って貼って、ポストまで出しに行く時点で面倒過ぎるし、印刷物を送るなんて時代錯誤・無駄もいいところだ)。ゆうパックはまあ大丈夫だけど、それだって、ヤマトに比べれば不満が多い。もっと危機感を持って欲しいが、まだまだ国に頼れる気分があって無理なのかね・・・

以下は余談。

肝心な年賀状の絵柄は、去年ボツにしたのを修正して(季節外れの花を消して)使うことにした。絵心はないが暇と挑戦心はあるのでw、グラフィックソフト(GIMP)でちょっと試したら、意外に綺麗に隠せたので、採用することにした。

それから、メールは(多少遅れてもいいとは思うのだが、凝り性なので)元日の0時に出そうと思い、その時は実家に居るので、そのための仕組みも確立(というほど大したものではないが)した。メールを日時指定の送信にし、メールを出す時刻に自動でPCの電源を入れ、メールを送信し終わった頃(10分くらい後)に自動でPCをスリープさせるのだ。具体的には、以下の手順である。

  1. Thunderbirdと日時指定送信用のアドオンSend Laterで、メールを元日の0:00の指定で送信予約する。
  2. LinuxのACPIによる自動起動設定ファイル/sys/class/rtc/rtc0/wakealarmに元日の0:00のUnix時刻(UTC, 秒)を書き込み、PCの自動起動日時を設定する。
  3. 指定時刻にコマンドを実行するコマンドatで、メールを送信し終わった頃(元日の0:10)にPCをスリープさせるコマンドpm-suspendを実行させ、メール送信後にPCをスリープさせるように設定する。
  4. (帰省する前に)PCをスリープさせる。

ブログサーバから送るようにすれば、上のような手間は不要なのだが、メールのドメインのトラブルがありそうだし、画像を添付したメールの送信は面倒そうな気がしたので、自宅のPCからにした。また、iPhoneなら実家から送れるが、操作が面倒で間違いそうなので止めた。

と、準備し(てここに書い)ただけで、実際にはほとんど進んでいないのに、もう年賀状が終わった気分であるw

(題は、書いたあとの今掛かっている曲より。対極というか同じというか、似たようなニオイを感じたので: 12:11: 検索したら、この歌は33年前の今日が発売日だった!)

更に余談だが、題の曲の詞に出てくる「カラオケ」は、Wikipediaでは当時のカラオケのテープを指しているように書いてあるが、僕は空の桶(当然、そんなのを掛ける機械なんてない)ではないかと思っている。これは本人に聞いてみたいw (12:20)

(11/26 0:06 加筆; 11/26 22:09 わずかに加筆)

  •   0
  •   1

半年くらい前から、LinuxでのテキストエディタにはAtomを使っていたのだが、全然良くないことに気付いた。僕の使い方(変なプラグインを入れたせい?)が悪いのか、頻繁に遅くなる。開いているファイルが多いと、ひどい時には数分間固まるし、そうでなくても、文字を打ち込むだけでも遅いから、GPMDBの改良作業の足かせとなって、大変イライラしていた。更に、それ以外に、山ほどプラグインを入れないと普通のエディタのようには使えない(まだ普通のに劣ることがある)など、基本的な機能が劣っている。

それで、前に使っていたjEditに戻ろうかとも思ったのだが、日本語のインライン入力ができないので(いろいろやればできるとは読んだが、面倒なのでしない)却下し、いろいろ試した結果、Kateにすることにした。忘れていたのだが、インストール済みだった。

が、KateでなくjEditにした時の記事を読んだら、Kateは「ハングした」とか書いてあったので、やっぱりjEditに戻ろうと思う。ありがたい、これも消していなかったので残っていた。今度は日本語のインライン入力の設定をしてみようか。

  •   0
  •   0

風邪ひいて調子悪いし、台風(今はまだ普通の雨)で外に出るのも億劫だしで、全くのプログラミング日和なのでw、昨日に引き続き、GPMDPの改良に余念がない。いや、余念があるから捗っているのかも知れない。僕の場合、別にプログラムをいじったりしたくはないのだが、音楽を気持よく聴きたくて、いろいろ考えるとできそうだから、仕方なくやっているのだ。

それはともかく、ついにGoogle Play Music (GPM)のプレーヤーGPMDPで音量の正規化ができた。我ながら大変強引な方法だし、いろいろ制限はあるが、とにかくできた。

方法は、基本的には昨日書いたとおりであるが、実際に作ってみると、細かいことがいろいろあったので、その辺りを書いてみる。

見つかった問題点

  1. 曲を再生中に再生ゲインを計算するために曲を取得すると、GPMは同時に1つの機器からしか再生できないので、次の曲の開始時にエラーになって、再生が停まってしまう。
  2. そのエラーダイアログの実装が汚く(まあ、元々がwebなのだから汚いというのは言い過ぎだが)、ブラウザ内のダイアログもどき(昔のワープロのようなもの)なので、xdotoolのようなツールで自動的に閉じるのが難しい。
  3. 曲の再生ゲインの計算が難しい。単純な最大値では聴感に合わない。実効値(どのくらい大きく聴こえるか ≒ 波形がどのくらい太くて黒いか)を求める必要が要る。
  4. GPMDPの音量のステップが段階的なので、細かい再生ゲインが反映されない。
  5. クラシックなどを聴く時のために、音量の正規化機能をon/offできるようにする必要がある。

実際に書き出すと少ないが、結構苦労した。

問題の解決

  1. GPMの同時再生エラーとエラーダイアログの問題
    • エラーダイアログが出たことを検出することすら難しいし、検出して自動で閉じるようにしても、音楽の再生中に勝手にマウスが動くのは鬱陶しい。
    • JavaScriptの機能で、ページ中にあるダイアログを探して、閉じようとしたのだが、なぜか、ダイアログもボタンも見つからず、どうにもならないので、一旦、後回しにした。
    • その後、手を抜きたかったので、曲の再生中でなく、曲間で一時停止して処理するようにしたので、最終的には、問題は起こらなくなった。それでも、処理はすぐに終わる(2秒未満: 下で訂正)ので、気になることは滅多にない。そもそも、正規化はラジオでしか使わないので、曲が間隔なしでつながることはないから、多少曲間が伸びても問題はない。(9/18 14:35 訂正: 実際に測定したら4秒前後だったが、ラジオのせいか、気にならないのは確かである。)
  2. 曲の再生ゲインの計算
    • 最初は最大値を使ったのだが、聴いてみると余り効果がなかった。
    • 値を調べると、多くの場合、最大値は100%近いので、ほとんどの曲で、正規化されていなかった。
    • 平均値を試したが、余りいい結果にならなかった。どういう訳か、平均値は小さいのに大きく聴こえる曲(The Cars "Heartbeat city": どういうことなのだろう??)があったからだ。
    • 処理に使っているffmpegにはloudnormという正規化する機能があるのだが、今のOSに入っている版には入っていないので諦めた。また、曲を正規化してもGPMDPでは再生できないので、余り便利でない。
    • 最終的には、ffmpegのastatsという機能で短時間の実効値(RMS)の最大値を取得することにした。理論的に正しいのか分からないが、聴いた感じでは良さそうだ。実効値を求める期間(時間)の設定が難しいのだが、昔のポップスを聴く限りでは1.75秒がいいようだ(ちなみに、この値は「異邦人」(1979)でチューニングした)。
  3. GPMDPの音量のステップが段階的
    • 今は音量を2.5%ステップにしているので、確かに細かい違いは反映されないが、聴いた感じでは分からない(細かい音量設定よりも、演奏の性質による違いが大きい)ので、今は保留している。
  4.  音量の正規化機能のon/off
    • 設定項目を追加すれば可能だが、いちいち開くのが面倒なので、再生メニュー(曲の右に出るもの)に追加することにした。
    • 追加はできたのだが、「ラベルの翻訳がない」という表示になってしまい、なかなか解決できなかった。
    • プログラム中のHTMLを良く見たら、<span>の属性(is="translation-key")で翻訳したラベルを使う指示をしているようだったので、それを止めるようにした(そんなものすごい機能があるとは、恐ろしい。脆弱性になるような気がするが、考え過ぎか)。
    • また、メニューでon/offするので、メニューのラベルが現在の状態を反映するように、設定変更時にラベルを書き換える(例: Onの場合は「無効にする」、offの場合は「有効にする」と表示する)ようにした(下図参照)。本来は、モードを示すアイコンなどを追加するといいのだが、それも面倒なので、このようにした。

再生メニューに音量正規化機能のトグルを追加

という訳で、随分苦労した気がするのだが、書いたらあっけないものだ。。。 実際には、Googleの検索と、そこから見つかった有用なページを書いてくれた方々に随分お世話になった。もし昔だったら、たった数日で、全く使ったことのない環境やプログラムをこんなにいじることはできなかっただろう。

それから、書く必要すらないことだが、もしWindowsを使っていたら、全く無理だったし、やる気も起こらなかっただろう。あれを使っていたら、どんなに普通のことでもなぜか大変になるから、ソフトウェアの正常な発展には大変な障害だとつくづく思う。

音量正規化の効果はおそらくあると思う(GPMDPの音量はちゃんと変化している: スライダーを表示させたままで見ていると、曲間でスライダーが自動的に動くのがおもしろい)のだが、気のせいかも知れない。上記のように完全ではないので、時々、小さく感じたり、大きく感じたりすることはある。ただ、以前は頻繁に音量を変えていたが、これができてからはほとんど変えていないので、やっぱり、効果はあると思う。

以下に、実装メモを書く。

  • 処理の流れ
    1. 曲が変わったイベントを待つ。 → 再生しようとしている曲情報が来る。
    2. 再生キュー(再生する曲一覧)を取得する。
    3. キューから曲のIDを取得(曲名、アーティスト名で検索)する。上記の曲情報には入っていないため。
    4. 計算済みの最大値が保存されていたら、使う。 → 9へ
    5. gmusicapiの機能を使い、IDよりstream URLを取得する。
    6. wgetにstream URLを指定して、曲を取得する。ただし、もしキャッシュにデータが残っていたら、再利用する。
    7. ffmpegのastatsフィルタでRMS(1.75s)の最大値を求める。
    8. 再利用できるように、いくつかの最大値を保存しておく。
    9. 最大値より、正規化するための音量値(%)を計算し、GPMDPに設定する。
    10. キャッシュ中の古いデータを消す。
    11. 1に戻る。
  • 制限事項
    • 再生ゲインはトラックモードのみ対応 (本質的に、アルバムモードには向かない。気長な人なら別)
    • 当初は、再生中にバックグラウンドで次の曲の処理をする予定だったのだが、暫定的に作ったものが結構うまく動いて、それ以上は面倒だったので、再生前にこれから再生する曲の処理をすることにした。
      • 上にも書いたが、処理は短時間(クラシックのような長い曲を除き、概ね24秒以内)に終わるので、曲間が長く感じることはない。
      • これならシャフルにも対応できるので、却って良かったのかも知れない。
    • 計算した再生ゲインの情報は保存しないので、過去に計算した値が再利用できない。(TODO)
    • GPM自体やwebページの仕様に大きく依存しているので、それらが変わったら、途端に動かなくなる(これはGPMDPも同様)。

 

PS. 前にも書いたが、どういう訳か、僕が聴くGPMのラジオで斉藤由貴の曲が頻繁に掛かる。今日は「悲しみよこんにちは」だ。好きな曲だが、今の彼女はそういう状況なのだろうか? というか、今でも彼女が現役でラジオ番組を持っていたことが驚きだった。

PS2. 本題とは関係ないが、GPMのおかげで分かったことを書く。

Winkの曲だとばかり思っていた「ふりむかないで」は、実はザ・ピーナッツの曲だった! そんな昔の曲にしては、全然違和感がなかったのがすごい。「ほう」と思った。(21:21)

PS3. この作業中に気付いたことがある。アプリをビルドして起動するのが意外に遅いのだ。もちろん何分も掛かる訳ではないのだが、一瞬ではないので、何度も繰り返すと結構イライラする。たかが(と言っては悪いが)JavaScriptなのに、ものすごく大量のモジュールが集まっているからなのだろう。そして、僕のPCが遅く感じたのは、これが初めての気がする。さすがに古くなったのかも知れない。(22:39)

(22:29 音量のスライダーが自動で動く動画を追加; 23:20 若干加筆・修正; 9/19 7:09: 実装メモ中の処理時間の訂正漏れ(4秒が正しい)を修正)

  •   0
  •   0

Google Play Music (以下GPM。実際にはアプリ(GPMDP)またはweb)には、いくつかの不満(改良したい点)があるのだが、いろいろな手段を組み合わせることで、全部ではないが、大分良くなった。以下に、概要を書く。

要改良点

  • 音量の正規化(再生ゲイン)対応 (特にラジオで、曲ごとに音量が大きく変わって不便なので、トラックモードだけでもいい)
  • 音量調整のステップを細かくしたい。今の半分程度に。
  • GPMDP
    • 「この曲が終わったら一時停止する」機能が動かない。
    • 英語での表示
    • マウスジェスチャ対応
    • ミニプレーヤーの改良 (情報量が少ない。使い勝手が悪い)
    • gmusicbrowser(GMB)との統合 (プレーヤーを1個にしたい)
  • リモコンで操作したい。

改良できた点

  • GPMDP
    • 「この曲が終わったら一時停止する」機能が動かない。
      • バグだったようだ。その機能のプログラム(src/renderer/windows/GPMWebView/interface/
        pauseAfter.js)を修正して、正常に動くようになった。
      • 基本的は、以下の修正をした。
        • Emitter.on('pauseAfter:show', ...)の(toast): pauseAfterに設定する値をPAUSE_AFTERからPAUSE_NEXTに変更した。
        • GPM.on('change:track', ...): 再生開始前は停める処理をしないようにした。
        • Emitter.on('pauseAfter:show', ...)のwindow.showToast: 停める設定後に表示されているダイアログ(?)で設定を解除すると、以後うまく動かなくなるので、解除する文字列(リンク)を表示しないようにし、解除はメニューで行うようにした。
      • PAUSE_AFTERは何に使うのか謎だし、手抜きなダイアログの処理には不満があるが、充分実用的だ。
    • 英語での表示 (暫定対応)
      • 以前書いたように、GPMのページのURLに"?hl=en"を追加した。
      • GPMDPの言語設定から自動で指定できるようにしたいが、そうしてもそれほど便利になる訳ではないので、やるなら、動的に変えられるようにしたい。
    • マウスジェスチャ対応
      • Linux用ジェスチャプログラムEasystrokeを使った。
      • これで、GPMDPでもブラウザと同様に、マウスジェスチャでページを移動(戻る・進む)することができるようになった。
      • 更に、Chromeでもジェスチャが使えるようになった(なぜか、右クリックが不便になるアドオンよりもずっといい)。
    • 音量調整のステップを細かく (9/16 11:48追記)
      • GPMDPが読んでいるGPMのページをVivaldiの開発者ツールで調べたところ、ページ内に音量調整用のスライダーの要素(id="material-vslider")があり、そこでステップが5に指定されており(下の例を参照)、その値を変更すれば、そのステップで動くことが分かった。
        • <paper-slider id="material-vslider" ... step="5" ...>
      • GPMDPの起動時にスライダーの要素を検索し、ステップを変更するようにした(下の例を参照)。
        • 要素の検索: slider= document.getElementById("material-vslider");
        • ステップの変更: slider.setAttribute("step", 新ステップ);
      • 新しいステップは2.5にした(整数でなくてもいいようだ)。
      • この方法は、GPMのページの作りが変わってしまったら駄目になってしまうが、その時はまた対応しよう。
      • また、この機能の有効/無効切り替えを、簡易に設定に追加した。

残りの実現に向けて

  • [済] 音量の正規化(再生ゲイン)対応
    • 基本的に難しいが、以下のような処理が可能かと思っている。この方式だとトラックのゲインにしか対応できないが、ラジオには充分である。
      1. 今の曲を再生中に次の曲のデータを取得して、再生ゲイン(≒最大の音量)を計算する。
      2. 計算した再生ゲインで再生音量を変える。(再生部を改造できない場合は、LinuxのGPMDPの再生音量を変える)。
    • 9/17に対応できた。(9/17 19:06)
  • [済] 音量調整のステップを細かく
    • GPMDPのソースを見て試行錯誤したところ、GPM(のweb部品?)では5%の倍数の音量しか受け付けないようだった。
    • それで、GPMDP自体の音量(LinuxのGPMDPの音量)を変えることを検討している。
    • この場合、新たな音量調整用のUIを追加する必要があるのが、面倒。
      • 元の音量調整機能を使い、GPMDP自体は5%ステップだが、LinuxのGPMDPの音量をうまく増減する(例:GPMDPで5%上げたらLinuxでは2.5%減らし、全体としては2.5%の増加とする)ことで、ステップが細かくできる気もする。が、表示と実際が乖離しそうな気もする。
    • 上記のように、簡易に対応した。(9/16 11:48)
  •  ミニプレーヤーの改良
    • 以下をやりたいが、ミニプレーヤーはGPMの部品のようなので、できるかは不明。
      • 曲名などを常に表示したい。ただし、再生制御は不要。(GMB同様にする)
      • キューを開けるようにしたい。あるいは、簡単に本体を開けるようにしたい。
      • 閉じて再度開くと位置が下がるのを直す。
  • リモコンでの操作
    • GPMDPでは、各種API(JSON, Web socket)やMPRISを使うことを考えている。
    • GMBもリモコンを使うので、切り替えを煩雑にせずに(可能なら切り替えなしで)併用できるようにしたい。そのため、実際に使うパターン(ユースケース)の検討が要りそうだ。
  •  GMBとの統合
    • 以下を検討しているが、必要(メリット)があるのか、良く考えたい。全体的なユースケースの検討が要りそうだ。
      1. ダミーの曲ファイルに曲やプレイリストのIDを入れておく。
      2. そこからGPMの曲の再生URLを取得して、GMB (→ GStreamer)で再生する。
    • GMBからGPMDPを制御できるようにするだけでも、いいかも知れない。

GPMDPはソースが公開されていて変更が可能なので、web版と比べて優位になった。

「この曲が終わったら停める」機能が動かない問題は、単純な間違いなのか、もっと奥深い問題があるのかは分からないが、とりあえず、うまく動いている。「こうやって直した」とGPMDPのフォーラムに投稿するといいと思うが、以前、別のフォーラムに投稿して情報を出したのに結局無視されたことが何度もあるし、この問題も以前に指摘されたのだが、なぜか"closed"(解決済み)になっているので、今は投稿する気が起こらない(もし欲しい方がいらっしゃったら、ここで公開します。ただし、その場合、公開するのは変更したソースコードだけですので、使うには開発環境(npm)が要ります)。

 

余談

GPMDPの言語はJavaScript(Node.js)なのだが、昔はブラウザで動くおまけみたいな言語だと思っていたのに、いつの間にあんなに発達したのかと驚く。最初から、あんなにまともなオブジェクト指向だったのだろうか? しかも、画面表示と関係のない処理すらやっているのは不思議だ(PHPも同様だが)。まるで、小さいガキだった親戚を久し振りに見たら、立派な大人になっていたかのようだ。

JavaScriptも馴染みがないが、Pythonより10倍くらい使いやすい気がする。

 

PS. GPMでいろいろな曲を聴いていると、結構、マスタリングが駄目な曲がある。例えば、途中で途切れてしまったり、曲間に「ザッ」という雑音が出るものがある。あと、ダイジェスト版のように短縮された曲もあった。膨大な曲数なので、たまに壊れていたり、おかしかったりするのだろう。まあ、買う前に分かるので、ありがたい。でも、それを指摘する簡単な手段がないのは、どうかと思う。まあ、Googleらしいが。

 

(9/16 11:48 音量調整のステップを小さくできたので、追記; 9/17 17:39 昨日の追記の日付が間違っていたので修正)

  •   0
  •   0

近頃見つけた豆知識やら小技を(検索してもすぐには分からなかったので、誰かの役に立つかもしれないから書く)。統一感がないが、あまり分量がないのでまとめて書く。なお、以下はUbuntu系で確認したことで、他のディストーションでも可能かは不明。

1. Linux on MacBookのトラックパッドでの右クリック

近頃、(Intel CPUの)MacにはLinuxを「普通に」インストールできることを知った。LinuxがわざわざMacに対応している(できる)とも思えないから、Macの中身はWindows PCと同じなのだろうか? あの、先進的で美しく、非の打ち所のないアポー先輩が、まさかそんなことするのか? ふーんw

まあ、それはどうでもいいが、インストールして使ってみると、トラックパッドの右下端を押しても右クリックにならなくて、がっかりした。検索すると、「2本指でクリックすればいい」と出て、実際にできたのだが、すごく不便だしスマートでないので、なんかやる気をそがれる。でも、

できまーす!

丹念に調べたら、設定すれば、トラックパッドの右下端を押して右クリックにすることが可能なことが分かった。

ポイントは、synclientというプログラム(Synapticsドライバのユーティリティー)である。「(仮想的な)右クリック」と判定する領域(のトラックパッド中での上左端と下右端の座標)を、synclientの以下の引数に指定して起動すればOK。

  • RightButtonAreaLeft:仮想右クリックの上左端のX座標 (X1)
  • RightButtonAreaTop: 同上左端のY座標 (Y1)
  • RightButtonAreaRight: 同下右端のX座標 (X2)
  • RightButtonAreaBottom: 同下右端のY座標 (Y2)

実行の書式:

synclient RightButtonAreaLeft=X1 \
RightButtonAreaTop=Y1 RightButtonAreaRight=X2 \
RightButtonAreaBottom=Y2

なお、トラックパッドの大きさ(座標)は/var/log/Xorg.0.logに記録されているので、そこから適宜、右クリックに使う領域を計算して指定する(例: 右端・下端から10%)。

注意事項は、Y座標が(通常の想定とは)上下逆(数値が小さい方が上だったか)なことである。うまく行かない場合は、上下逆に考えること。

上記は設定ファイルに書くことも可能のようで、そこでは割合(%)で指定できるので綺麗だが、試していない。

参考: Synaptics タッチパッド (ArchWiki) : まったく、ArchLinuxのドキュメントはとても有能だ。いつもお世話になっている。

PS. トラックパッドについては、上記の他に、(普通のノートPCのように)右端や下端で上下・左右スクロールできるようにも設定できるので、そこは結構便利だと思う。

2.Linux on MacBookのディスプレイのバックライトの輝度の保存と復旧

Linuxをインストールしたままでは、バックライトの輝度が起動のたびに最大になってしまってまぶしく、げんなりする。そこで、検索したら、輝度の値がファイルに入っているので、システムの終了前にそれを保存し、起動後に復旧させれば良いことが分かった(grubに指定する方法もあったが、うまく行かなかった)。

実際のファイルは、/sys/class/backlightにいくつかのディレクトリがあり(ディスプレイデバイスごとにあるようだ)、それぞれの下のbrightnessである。

cat /sys/class/backlight/DEV/brightness など(DEVはデバイスの名前)で輝度が取得でき(例: 128)、

echo X > /sys/class/backlight/DEV/brightness などで輝度を設定できる(Xは設定する輝度)。

実際には、保存と復旧スクリプト(例: mb-backlight)を作り、systemctlで有効化する。スクリプトは、引数が"stop"の時(終了時に呼ばれる)に輝度をどこかのファイルに保存し、"start"の時(起動時に呼ばれる)に保存しておいた輝度を設定するようにする。

注意事項は、値を保存する場所に/var/runを使うと、ここはRAMディスクのようで、終了時になくなってしまうので、別の場所を指定する必要があることだ。

PS. 普段使ってないので試していないが、キーボードのライトも同様にできるはずだ。

余談: MacBookでのLinux、それなりに動くのだが、なぜか変なキーが入ってしまうことがあるなど今一つなところがあり、そもそも本体がずっしりと重いこともあって、使い続けたいかというと「うーん・・・」だ。でも、もしMacBook(のハード)を使うことを強制されたら、僕にはmacOSより(もちろん、Windowsよりも)ずっといい。

3. LinuxでDropboxにサインインできない(「アプリが古い」?)

Dropboxアプリにサインインしようとした時、何度やっても、「アプリが古い」とか言われて失敗するので、近頃Dropboxが(勝手に)仕様を変えてしまって、まだLinuxが対応できていないのかと諦めていたのだが、しつこく検索したら原因と対処が分かった(→ [SOLVED] Dropbox can't 'sign-in' or install newer version.)。

本当にLinuxのアプリが古いので、~/.dropbox-dist を削除して、再実行すればいい。

まったく拍子抜けした。

これだったら、古いファイル名を表示するとか、「更新しますか?」とか聞いてくれてもいいと思うのだが・・・

  •   0
  •   0

ある夜、ふとPCの状態表示画面を見ると、あるHDD(新HGST)の温度が高くなっていた。高々2℃程度ではあるが、ずっと下がらず、原因も分からないので、気持ちが悪かった。原因として考えられたのは、以下である。

  1. たまたま気温(室温)が高かった。
  2. そのHDDに頻繁なアクセスが行われていた。
  3. そのHDDの内部で処理が行われていた。
  4. 冷却ファンの調子が悪い。

室温が高かったのなら、他のHDDやSSDの温度も上がるはずなので考えにくいし、アクセスや内部処理にしても、ちょっと調べた感じでは、特に何も行われていなかった。ファンについても、回転数は下がっていなかった。

それで、室温とPC内部の温度は違うのではないかと思い、HDD温度と同時に内部温度を測りたくなって、Amazonを調べたら、おもしろそうなUSB温度計があった。Linuxでも(純正ドライバではないが)使えるもので、約800円または約1600円だった。

「あと少しで注文」というところで、ふと思い付いた。「マザーボードの温度は、室温に同期(室温+α(=マザーボードの固定的な発熱))しているのではないか?」と。そうであれば、温度計を使わなくても、室温の推定ができる。実際、マザーボードの温度は、この時期は約32-34℃でほとんど変わらないので、室温に同期している可能性が高い。

そして更に思い付いた。ケースファンはマザーボードの温度で回転数制御しているのだが、マザーボードの温度がほとんど変わらないから、回転数も変わらず、制御している意味がない。それで、その回転数制御機能をHDDファンの回転数制御に使えないものだろうかと。

ただ、(以前も書いたように、)HDDの温度は外部ハードウェア(センサ)で取得できない(HDDのSMARTという仕組みで取得する)ので、回転数制御チップ(SuperIO)に入力されていないので、SuperIOの自動制御機能は使えない。ただ、手動(=プログラム)でファンに入れる電圧(またはパルス幅)を変えて回転数を設定することはできるので、HDDの温度に応じて回転数を制御するプログラムを作れば、HDDファンの回転数制御も可能だ。

おもしろそうだったので、早速作ってみた。最初の版は、昨日の夕方に30分くらいでできて、それなりに動いた。処理内容は以下のとおりである。

  1. 各HDDの温度を求める。: hddtempコマンドを使った。
  2. 最高の温度を求める。
  3. それに応じたファン回転数設定値(0-255)をファンの回転数制御レジスタに書き込む。: SuperIO(NCT6775)の"Smart Fan IV mode"同様の単純な比例計算にした。
  4. 次の処理時刻まで待つ(約30秒)。
  5. 1に戻る。

なお、元々HDDファンを接続していた端子は回転数(出力電圧)を設定(変更)できないので、ケースファンの端子と入れ替えた。また、今までは、HDDファンの騒音を減らすため、回転数を下げるために抵抗を介して接続していたが、今度はソフトで回転数が変更できるので、直結にした。代わりに、ケースファンの回転数が丁度良く(約900rpm)なるように、抵抗(100Ω)を使用した。

例によって、それからが長かった。結局、今日丸一日、調整や改良に費やした。改良の内容は以下のとおりである。

  • 回転数設定値の変化が少ない時は、更新しない。: ファン回転数の精度が良くなく、同じ設定値で30rpm程度上下し続けるため、頻繁に変更しても意味がない。
  • HDD温度が設定以下なら、ファンを停める。 : 静音化のため。
  • HDD温度が設定以上なら、通常より回転数を高くする。: 冷却が間に合わずに過熱することを避けるため。
  • HDD温度を移動平均する。 : HDD温度は一時的に微妙に上下することがあるので、その影響を避けるため。また、1℃単位でしか取得できないHDD温度を、もう少し細かく(小数点以下の値を出す)扱いたかったため。
  • HDD温度で直接制御するのでなく、HDD温度とマザーボード温度との差で制御するようにした。: 本来のHDDの発熱量は室温からの増分だから、室温を無視して回転数を設定しても、無意味だと考えたため。上述のとおり、マザーボード温度は室温と同期している(マザーボード温度= 室温+約5℃)と考えられるので、HDD温度とマザーボード温度との差を使うことにした。 → 失敗だった。詳細を追記する。(7/19 20:17)
  • 上の制御をしている時、(マザーボード温度との差でなく)HDDの絶対的な温度が設定値以上になったら、通常より回転数を高くする。 : システム負荷や気温が高くてマザーボードが熱くなった時に、HDDの過熱を防ぐため。→ 上が失敗だったので、取りやめた。(7/19 20:17)
  • マザーボード温度も移動平均する。
  • 想定しているマザーボードでない場合にエラーで終了する。: 忘れて別のPCに移してしまった場合の対処。

改良の結果、プログラム(スクリプト)の行数は4倍近くに膨れ上がったが、今のところ、うまく動いている。一番熱い新HGSTの温度(の青)は、概ね37-38℃に保たれている。CPU負荷が大きい時(の右の、オレンジと緑が山になっている部分)でも、マザーボード温度(の一番下の青)が上昇することはなかった。そのため、HDDファンの回転数(の一番上の緑)もほとんど変わっていない(中の急な山や谷は、プログラムの修正中の一時的なもの)。

ただ、暑く感じる時でもマザーボード温度がほとんど変動しないのが気になる。体感的な問題か、エアコンのせいだろうか? 論理的に考えれば、ペルチェ素子や水冷などの吸熱機構なしで、物の温度が(周囲の温度から独立して)一定に保たれることはあり得ないので、 室温に同期しているのは確かで、部屋に居る(=PCを動かしている)時はエアコンを動かしているので、室温はそれほど変動していない(せいぜい±1℃程度)が、体感温度が変動していると考えるしかない。ちょっと長期的に見てみたい。

(7/19 20:38追記) HDD温度と(室温と並行に変化する)マザーボード温度との差でファン回転数を制御する効果を調べるため、日中にPCを動かし続け、その間のHDDやマザーボードの温度やファン回転数の変化を調べた。

なお、室温も記録しようと、スマフォ(Nexus 4)のタイムラプス撮影用アプリ(EasyLapse)で15分おきに温度計を撮影していたのだが、大変期待外れなものだった。撮影開始の1時間後にスマフォがスリープしてしまっていて、たった4枚しか撮影されていなかったので、すごくがっかりした。また、撮影した画像は動画にするしかなく、動画に変換すると、「撮影したデータ」(静止画と思われる)が削除されてしまうし、「データ」を取り出す機能もないので、全く役立たずだった。このような用途には、「インターバル撮影」で検索した方が良かったようだ。

その結果、HDD温度とマザーボード温度も並行に変化しており、日中、室温がかなり高くなり、帰宅時に約30℃になっていたにも関わらず、ファンの回転数がほとんど上がっておらず、HDD温度は40℃まで上がっていた。

この原因を考えると、確かにHDD自体の発熱は室温との差なのだが、HDD温度もマザーボードと同様に、室温と並行に遷移するため、差は常にほぼ一定になるので、その差でファンの回転数を制御しても、ほとんど回転数が変化しないのである。

ちなみに、最高温度は、室温: 30℃(推定)、マザーボード: 35℃、HDD: 40℃だった。マザーボードとHDDの温度のグラフの形状は似ているので、それぞれは約5℃の差で並行に遷移するようだ(HDDがアイドル時)。

だから、やはり、絶対的なHDDの温度でファンの回転数を制御することに意味があるのだろう。そして、いくら室温が高くても(HDDの温度より低ければ)、風を当てればHDDは冷えるのだ。

マザーボード温度は、室温の推定には使えるが、冷却の制御には使えないようだ。名案だと思ったが、残念だ。

(7/22 7:12 グラフを追加)

(7/22 7:07追記) その後、回転数制御に絶対的なHDDの温度を使う方法に戻し、設定を調整して、再度、PCに苦行をさせてみたw 昨日の朝から夕方まで、冷房を停めた室内でPCを起動したままにして、その間の外気温・室温(注)、HDD温度、マザーボード温度、ファン回転数を記録した。以下に結果を示す。

測定終了時(19時頃)の状況(気温・室温以外は、その日の最大値だった):

  • 外気温
    • 今回: 30.0℃
    • 前回: 27.4℃
  • 室温
    • 今回: 32.8℃
    • 前回: 30.7℃
  • HDD(新HGST)の温度
    • 今回: 41.0℃ (室温+8.2℃)
    • 前回: 40.0℃(室温+9.3℃)
  • マザーボードの温度
    • 今回: 36.0℃ (室温+3.2℃)
    • 前回: 35.0℃ (室温+4.3℃)
  • HDDファンの回転数
    • 今回: 1216 rpm (通常時: 約1050rpm)
    • 前回: 1036 rpm (通常時: 約1050rpm)

今回は、期待どおり、HDD温度に合わせてファンの回転数が変化した(約100rpm/3℃)。ファンの回転数がほとんど変化しなかった前回と比べて、以下のようなことが分かった。

  • HDDの室温からの増分は、前回より1℃しか低くなかった。→ まだファンが遅い? 室温が高くて冷えない? HDDの熱容量は大きいので、1℃でも効果があったと考えられる?
  • マザーボード温度の増分も、前回より約1℃低かった。HDDファンが速くなった効果?

結論としては、期待ほどではなかったが、それなりにファン回転数制御の効果が見られたので、しばらく使ってみることにした。なお、ファンの回転数は約200rpmの余裕があり、まだ高速化することも可能だが、効果は疑問だし、その分うるさくなるので、更に高温になった場合に備えることにする。

注: 外気温と室温は、「beeCam Easy連写」というインターバル撮影アプリで温度計を撮影していたのだが、間抜けなことに、ACアダプタの電源を入れ忘れていて、約4時間でスマフォ(Nexus 4)が落ちてしまって、失敗した。また、このアプリも画像を外部に取リ出せないので、期待外れだった。次回(やるとしたら)は別のを使おう。どうも、名前に"Easy"と付いているのは良くない気がする。

 

PS.アイデアが浮かんで、プログラムを作って、更にアイデアが浮かんで来て、それを実現していくのはおもしろかったのだが、この制御の仕組みは今のマザーボード(ASUS P8H67-V)に大きく依存しているので、もしPCを新しくしたら、このプログラムはまず使えない。少なくとも、同じメーカーでないと無理だろう。その点が、ちょっともったいない気がする。でも、考え方は転用できるし、おもしろかったから良しとしよう。

そういう意味では、今のPCのハードとLinuxは、さまざまなカスタマイズをしてしまっていて、新しいPCに移転させるのは、ものすごく手間が掛かる気がする。カスタマイズした自分ですら、(記録はあるけど)何をどうしたか思い出せないので、同じことをやれる自信はないし、する気分にもならない。まあ、バックアップはあるし、まだ壊れていないので、その時に考えたい。

(7/18 6:24 加筆・修正)

  •   0
  •   0

近頃は暇なことが多いので、自分の興味のあることができる。今週は、Linuxのプログラム(正確にはスクリプト)の改良をしたのだが、かなり劇的に改善できたので、悦に入っている。

そのスクリプトは、使っているディスプレイ(2台のうちの1台)の欠点を補うために必要になって、少し前に作ったものだ。スクリプトと言っても、実際には、Actionaという、X Window System(以下、X11)の処理を自動化する(例: ボタンを押す)プログラムで動かすプログラムである。

問題のディスプレイは、電源を切ったり省電力モードになった後に復帰すると、一瞬、PCとの接続を切ってしまうようなのだ(普通のディスプレイは、本当にPCとの接続ケーブルを外さない限り、そんなことにはならない。だから、そのディスプレイは腐っている)。そのため、Linuxは新しくディスプレイが接続されたと思って、そのディスプレイをどうするかというダイアログを、もう片方のディスプレイに出してしまう。そのダイアログの中のボタンを押してどうするか指定しない限り、問題のディスプレイには何も表示されない。

毎回それだったら、さすがにそんなディスプレイは捨てたくなるので、上記のActionaを使って、ディスプレイの再接続後にダイアログが出たことを検出して、そのボタンを自動的に押すようにした。

概ねうまく動いていたのだが、タイミングが悪いとうまく働かなかったり、スリープからの復帰に対応していないなどの問題があったので、直しながら使っていた。が、段々、Actionaの使い難さに嫌気が差して来た。プログラムといっても、BASIC程度のもので、制御構造が貧弱(基本的にGOTOしかない)なので、見やすいプログラムが書けず、保守性が悪いので、ちょっと直そうとするだけで、さまざまな落とし穴に落ちる。大幅な変更はかなり苦労する。

それで、何とかしてActionaを使わないで済ませられないか考えた。まずは、プログラムを見やすくするために、シェル・スクリプトにすることにした(というか、他に手軽な選択肢はほとんどない)。そして、幸い、ダイアログを探したりボタンを押したりする処理は、別の自動化プログラムxdotoolでできることが分かった。それで、今週の中頃に作ってみたら、うまく行った。

が、前から思っていたのだが、短時間(数秒間)でもダイアログが出て、スクリプトがそれを消すまでは自分が操作できないのが嫌だったし、Windowsじゃあるまいし、ダイアログのボタンを押すしか方法がないってのも馬鹿らしいと思い始め、ダイアログを使わないで済ませる方法を探したら、xrandrというディスプレイの設定のためのコマンドが見つかった。それを使う方法は、Actionaを使う前に検索して知っていたのだが、その時はどうもピンと来なかったので、使わなかったのだ。ちなみに、このコマンドは新しいようで、昔のX11にはなかった。そのために、すぐに思い浮かばなかったということもある(あと、その名前は何から来ているのか、謎だ)。

それで、今週の後半にxrandrを使ってプログラムを作り直した。更に、ダイアログを出さない方法(Linuxのデスクトップ環境の設定だった)も見つけたので、ダイアログを見つけて閉じる処理も不要になり(そのため、xdotoolも不要になった)、結局、最初とは全く異なる、すごくシンプルなプログラムになった。省電力モードなどからの復帰時にダイアログは出なくなり、一瞬で問題のディスプレイが使えるようになった。

ソフトは作る時(正確には動き出した時)はおもしろいけど、こうして、思わぬ展開でうまく(ドラスティックに?)改良できた時も、かなりおもしろい。

PS. ちょっと気に入らないのは、Windowsの時は、同じディスプレイが何も問題なく使えていたことだ。Windowsはディスプレイの状態や設定をうまく記憶しているのかも知れない(単に、何もしてないだけかも知れない)。Linuxにだってそういう機能があってしかるべきだが、今は分からない。もし見つかれば、作ったスクリプトが不要になる。新たに作る・動かすプログラムは少ない方がいい(プログラムなんて、作らないに越したことはない)から、例えそれまでの作業が無駄になったとしたって、それが理想の状態だから、作ったものを捨てるのは全く惜しくない。そして、そういう工夫もおもしろい。

  •   0
  •   1