中華的優良多媒体播放器・Ruizu X02

 1年ちょい使った Transcend MP870 の調子がどうも悪い。ちょっとした衝撃ですぐに電源が落ちてしまう。
 保証期間も切れてるし買い換えるか,ということで後継機種の MP710 を見たのですが,ogg vorbis が再生できなくなっているようです。それに,レビューを見ると MP870 と同様の(おそらく)設計上の問題も残っているようです。かといって Walkman やら iPod も好みでない。もっとディープでチープなものを。ということで白羽の矢が立ったのが,中国 Shenzhen KuRei Digital Technology Co., Ltd.RUIZU X02という機種です。
 ルイズ!ルイズ!ルイズ!ルイズぅぅうううわぁああああああああああああああああああああああん!!!
 あぁああああ…ああ…あっあっー!あぁああああああ!!!ルイズルイズルイズぅううぁわぁああああ!!!

 ……ではなく,「锐族」と表記するようです。こいつを中国のショップから購入します。
 本体色は3色展開で,「激情紅」「天空藍」「優雅白」があります。今回は「激情紅」を選びました。「激情紅」
 気になるお値段は8GBモデルで US$16.20(1700円くらい)なり。安っ。

 ポチッと注文,待つこと二週間,やっと到着。
DSC00038
 正規品確認のスクラッチも付いていてなかなかちゃんとしてますが,能書きの英語の怪しさから中小企業感がにじみ出ています。たとえば「RUIZU brand Seiko digital player」なる表現が登場します。「精工」が「Seiko」に機械翻訳されたんでしょうね…… 「美学エディション」とのことですが,他のエディションもあるのでしょうか。

DSC00039
 内容物は本体,イヤフォン,USB ケーブル,説明書類。
 なお説明書は英語(ただし機械翻訳)ですが内容が薄く役には立ちません。まあ,UI はシンプルで使いやすいので,この手のデバイスに慣れている方であれば操作に迷うことはないと思います。

DSC00095
 付属イヤフォンが意外といい感じです。高音がややチープですが聴き疲れしない音なので PC 用に最適です。日本の物価で言えばこれだけでも500円分くらいの価値はあるかも。

DSC00062
DSC00069-a
 4-5世代の iPod nano に似ていますが,素材やコストの制約を踏まえたアレンジが加わっており,中小企業であっても単純な模倣に終始する時代は終わったのだと感じさせます。
 裏面には「X02 多媒体播放器」とあります。かっこいい。

音質
 「入門級 HiFi」を売り文句にしているだけあり,ノイズなどは特に気になりません 1。特定の周波数が出ていないということもないようです。秋葉原で売っている千円くらいの mp3 プレーヤと Walkman や iPod のどちらに近いかで言えば,明らかに後者です。

対応フォーマット
 設定メニュー内に対応フォーマットの一覧があり 2,以下が示されています。
 mp3, wma[wma9, 32-48khz, 5-192kbps],Audible,Flac[8-42khz, VBR, 16bits], APE[8-48khz, VBR, 16bits], wav[8-48khz, up to 1.44mbps]
 書かれていませんが ogg vorbis にも対応しています。というか,販売店情報でそのことを知ったので買ったというのもあります。同様に販売店情報で,この機種は Rockchip 社の RKnano-B という ARM SoC を使用しているようです。
 いちおう動画も対応していますが,フォーマットは中国独自規格の amv のみ,解像度は160*128までの対応と,事前の変換が前提です。しかしまあ,この機種で動画再生をしようという人もいないでしょう。
 他に録音機能,写真再生,テキスト表示機能もあります。FM ラジオ機能もありますが日本の周波数帯には対応していないようです。
 また,「Music」ではなく「Folder」から開くことで,古き良きディレクトリベースの DAP として使うこともできます。開いた場所もちゃんと記憶されます。ただし「Folder」からの参照の場合なぜかファイルの並びが名前順にならず,バラバラになってしまいます。今後の改善を期待したいところです。
 
操作性
 時代に真っ向から反するほぼテキストベースのシンプルな UI ですが,メニューの見通しがよく,レスポンスもよくサクサク動くためとても使いやすいです。日本語の表示にもしっかり対応していますし,先に触れたとおり日本語メニューもあります。操作性は良いですが,いくつか問題も指摘できます。
・ボリューム操作がボタンひとつではできず,まず VOL を長押しして音量メニューを出してから戻る/進むキーで調節する,という手順を踏む必要がある。
VOL+戻すでホールド機能(操作無効化)が有効になるが,間違えて押してしまうことが多い,というか間違えて押してしまうことしかない。そもそもこの機能って使っている人いるんだろうか? 解除には VOL+戻るを3回押す必要がある。設定でオフにできない。
 しかし,全体的には満足のゆくものです。

バッテリの持ち
 素晴らしく良いです。公称値は80時間。自分の使い方だと二週間くらい平気でいけます。ちなみに,さらに2.5倍,公称200時間(!)の X08 という機種もあるのですが,ボタンが少なすぎますので,操作性とのバランスの良さそうな X02 にしました。

サイズ・重量・質感
 いい意味でチープです。というのも,実測で厚さ8mm・重さ30g と非常に薄く軽く,ポケットに入れていることを忘れるほどなのです。値段も値段ですから,特に扱いに気を使うこともありません。文具の感覚で気軽に使えます。近ごろ多機能化・高音質化の追求で主流派 DAP が高級化・肥大化していっていますが,やっぱり DAP はこうでなくちゃ。
 梨地加工 3になっているので,質感は意外にも高く,なんとなく指で撫でたくなる感じです。見た目にもお洒落な印象を受けます。ただ,この加工は角の削れや黒ずみが付き物ですので,使っている内にどうなるかは気になります。まあ,普通で言えばカバーぐらいの値段なので,汚れてきたら買い換えるという割り切りもできるといえばできますが。

2016/11/28追記:プラグジャックの接点がきついようで,イヤフォンのプラグに傷が付くことに気付きましたので,追記しておきます。特に実用上の問題はありませんが,高価なイヤフォンを挿すのは避けるべきでしょう。安価ながら音質の良さに定評のある KZ ED9 などを一緒に注文しておくのもいいかもしれません。

 ということで,Ruizu X02 はかなりお勧めできる DAP でした。
 しかし最近の中国新興メーカー製品の品質の向上は凄まじいです。スマートフォンなどを見るとわかりやすいですが,極端にコモディティ化した分野では既に絶対的な品質で比べても負けつつあります。日本は一刻も早く労働集約的な「ものづくり」から脱却しないと大変なことになるはずです 4

17/08/22 ちょっと修正

Notes:

  1. ただし外から来るノイズには弱いらしく,スマートフォンと重ねて使ったりすると,通信に合わせてノイズが乗ることがあります。
  2. 英語版では「Supported formats」ですが,なぜか日本語版 UI では「サポートされていないファイル形式」と誤訳されています。
  3. 古い Thinkpad とかのアレ。
  4. そこ,もう既に手遅れだとか言わない。

Raspberry Pi + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ

 3大キャリアが横並びの料金・制度を維持している一方で,ドコモの回線網を利用する MVNO 業界はますます盛り上がりを見せています。各社とも特色あるプランを用意し,様々なニーズに応えられる便利かつわかりやすいシステムを発達させています。そしてそのどれもが3大キャリアの同等プランの数分の一の料金なのです。
 この春の契約見直しで,私は IIJmio のファミリーシェアプランを契約しました。音声通話オプションを付けて月額3520円,1ヶ月に10GBが利用でき,同一回線で SIM カードが3枚まで追加料金無しで利用できるというものです。10GBの高速通信容量の利用は回線ごとではなく SIM ごとに手軽にオン・オフすることができ,オフにすると最大200kbpsでの通信となります。スマートフォンならこんなものでも困りませんから,常時オフで使えば,スマートフォンでのデータ通信では容量が減らないことになります 1。これで,光回線と DTI の490円 SIM を置き換えることを狙いました。
 今回は,その IIJmio 回線で使う LTE ルータを Raspberry Pi + L-02C で仕立てたメモです。

全体像

  • Raspberry Pi をルータにする。回線は ドコモ LTE ネットワーク(MVNO : IIJmio)とし,L-02C で接続する。
  • RPi ルータには無線アクセスポイント機能を持たせず,市販のブロードバンドルータ(光回線で使っていたもの)を AP モードで運用,有線 LAN で RPi ルータに接続する。
  • apt-cacher-ng を導入する。
  • その他,BGM 再生機能,時報チャイム機能などを搭載する。

使ったもの

  • Raspberry Pi B 3500円 2
  • LG L-02C 2000円
  • システムトークス USB ハブ SUGOI HUB 4X AC アダプタ付き 2600円 バッファロー BSH4AE12 1600円(重要)
  • Transcend 16GB UHS-1 microSDHC カード 500円
  • テンキー 300円
  • アクティブスピーカ 500円
  • Raspberry Pi 用 USB-AC アダプタ 3 1000円
  • microUSB ケーブル 100円
  • 筐体(100均の箱・蝶番,ネジ) 600円

計:11100円
(価格は100の位までに四捨五入してあります)

 L-02C,USB ハブ,SD カードと筐体以外は実際には流用。後述しますが USB ハブの選択肢は非常に限られます。この機種を強く推奨します。

侮るなかれ熱暴走
 最初,こんな感じで使っていました。
DSCF2397
DSCF2405
 蓋を閉めて,すっきりしていいなあと満足していたのですが,なぜか止まってしまうことがあります。止まった状態でしばらく放置しても,SoC に電力は行っているようで,触ってみると熱を持っています。どうも熱暴走っぽい雰囲気です。SoC 温度のログを取ってみると,室温25度で60度近くまで行くようです。大した数字ではないようにも思いますが,初代 B で CPU が古い設計なので熱に弱いのかもしれません。熱で壊れたという話もちらほら聞くので,冷却は重要です。
 ファンをつけるというのが最も確実な対策ですが,ファンレスは男のロマンですので,なるべくファンレスの枠内でのエアフロー改善を目指しました。その結果,こんな感じになりました。
DSCF2416
DSCF2419
 はい,また100均です。前はもうちょっと精度の高いメッシュの小物入れも置いてあったのですが,近所3軒回ってなかったのでオシャレグッズコーナーにあったへなへなの小物入れで妥協しました。蝶番も100均で調達,ネジはホームセンターで購入した M3 の 8mm です。絶縁とホコリ除けのため,蓋側となる Raspberry Pi の下にはクリアフォルダから切り出したポリプロピレンのシートを敷いてあります。コンパクトさ重視のためエアフローは合理的とは言えませんが,効果はかなりあり,同条件で概ね43度以下で推移するようになりました。今のところハングアップもありません。夏場はどうなるかわかりませんが,50度を超えることはないでしょう。
 (16/5/4追記)ウワーだめだ。カーテンを開けたまま部屋のサーキュレータを止めて散歩に出かけて帰ってきたら春の陽気に誘われて意識不明の重体になっていました。室温はそれでも28度。残念ながら,部屋の隅に置く通信機器としては,来たるべき夏をファンレスで乗り切るのは難しそうです。とりあえず普段使っているBIGFAN 80Uを筐体の横に置いてみました。ファンコンスイッチを挟んで回転数を抑えてありますが冷える冷える。室温28度ですが32度で安定しています。ロマンの敗北は残念ですが,やむをえまい。次に秋葉原に行った時にでも静かそうで5V以下でも動きそうなファンを買ってきて筐体に組み付けたいと思います。

LTE 回線の仕様
 MVNO の LTE 回線には,プライベート IP アドレスが割り振られるものとグローバル IP アドレスが割り振られるものが存在しています 4。私が今回契約した IIJmio は前者です。プライベート IP アドレスはローカルエリアネットワーク内での居場所を指し示すものに過ぎず,インターネットの向こう側からこちらにアクセスすることはできません。したがって,LTE 回線を利用してサーバを公開したり,P2P ファイル交換を利用することはできません。逆に言えば,セキュリティについてはそれほど心配する必要はないでしょう。この記事はプライベート IP が割り当てられる回線を念頭に置いたものですのでご注意ください。グローバル IP が割り当てられる環境の場合,ファイアウォールやサーバ設定をより慎重に行い,ソフトウェアアップデートを欠かさず行う必要があります。

ハードウェアの仕様・問題
 Raspberry Pi は,誰もが忘れていますがあくまでも教育用のマイコンボードであり,常時稼動でバリバリ使う前提で作られているデバイスではありません。電源アダプタはノーブランド品を避け容量に余裕があるものを選択するだとか,SoC と LAN コントローラにヒートシンクをつけるだとかいった基本は抑えておきましょう。また,第一世代では USB 端子の出力電流が少なく,各ポート 100mA となっています 5。最大で 740mA 消費する 6L-02C はバスパワー駆動では全く足りないので,セルフパワーの USB ハブを用意する必要があります。B+/2B では設定の変更によって, 7,3B では,デフォルトで全ポート合計で最大 1.2A まで供給可能 8なので,一時的な使用であればバスパワーでも問題なさそうですが,後述のように安定して運用するためには USB ポートの電源を制御する機能が必須であり,B/B+/2B/3B の内蔵ハブともにその機能はないようですので,やはり SUGOI HUB を購入する必要が有ります。
 L-02C について,当初は問題が多かったようですが,最新ファームウェア V10e では安定しているようです 9。ただし,いくつか注意すべき点があります。
・初期設定では,始めに CD ドライブとして認識され,それを eject するとモデムとして改めて認識されるというわけのわからない仕様になっています。これは無効化できます(後述)。
・SIM カードの認識がシビアなようで,mini/micro/nano SIM にアダプタを噛ませた状態で挿入すると SIM を認識できません(インジケータが赤く点滅していたら,SIM を認識できていないということ) 10。これは厚みに起因するらしく,アダプタの「背」の部分を切り抜くことで解決します。

Raspberry Pi の準備
 OS として「Raspbian Jessie Lite」を使います。これは Raspbian から X 等を除いた最小版で,今回のように Raspberry Pi をデスクトップ用途でない目的に使用する場合に適しています。
 まず,Raspberry Pi Foundation 公式サイトから,Raspbian Lite のイメージをダウンロードします。
 zip ファイルを解凍のうえ,dd で SD カードに書き込みます。もし SD カードが /dev/sdc として認識されていれば,コマンドは以下のようになります。

$ sudo dd bs=1G if=Downloads/2016-03-18-raspbian-jessie.img of=/dev/sdc

 書き込み終えたら Raspberry Pi に挿入して起動し,ユーザ名 pi,パスワード raspberry でログインします。

raspi-config でもろもろの設定をする

$ sudo raspi-config

 ”Internationalization Options” および “Expand Filesystem”を実行,設定。Boot Options から Console Autologin を選択(後述するテンキーでの操作を可能とするため)。Advanced Options の SSH から SSH サーバ有効化。好みで Hostname や Memory Split 11も設定。
続きは SSH から。

ユーザ名を変更
 まあ好みの問題です。

$ sudo adduser hoge
$ sudo nano /etc/systemd/system/getty.target.wants/getty@tty1.service

 自動ログインするユーザを変更します。

ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM

となっている行の「pi」を新しく作ったユーザにします。

$ sudo gpasswd -a hoge adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi

 pi が入っているもろもろのグループに入っておきます。

$ sudo passwd

 su できたほうが便利なこともあるので,root のパスワードを設定して su できるようにします。

音が出るようにする
 Raspbian Lite では標準ではオーディオドライバが読み込まれていないので,これを読み込みます。

$ sudo modprobe snd-bcm2835
$ amixer sset PCM 100%
$ speaker-test

 音が出たら,起動時にカーネルモジュールを自動で読み込ませるようにします。

$ sudo nano /etc/modules

 末尾に以下の一行を追加。

snd-bcm2835

ルータ機能のセットアップ
L-02C のファームウェアアップデート,リセット,CD として認識される機能の無効化
 ファームウェアアップデートと端末リセットは Windows でやります。ドコモの製品ページに書いてあるとおりにやるだけです。
 次に CD として認識される機能を無効化します。AT コマンドを送ることで恒久的に 12無効化することが可能です。
 手順は以下を参照のこと。

L-02Cを最初からUSBモデムで認識させる/手動でAPN登録する – /dev/stkinosh

wvdial の設定,IP フォワーディング・IP マスカレード
 書こうと思ったのですが,こちらも既に素晴らしい記事が多くありますので紹介のみにとどめます。私が見つけた中で最も網羅的でかつわかりやすい記事は以下です 13

L-02CでLTEルータ作成 – /dev/stkinosh

ほぼ上のとおりにやりました。違うことをしたのは以下のみです。

  • usb_modeswitch は導入不要。
  • wvdial.conf で,
    Init3 AT+CGDCONT=1,"IP","iijmio.jp"

    を追加(フラッシュメモリに APN をあらかじめ書き込んでおいて使うのではなく,接続時に ID・パスワードと一緒に渡す)。元々の Init3 は Init4 に。

  • wvdial.conf で,/dev/ttyUSB2 ではなく /dev/serial/by-path/platform-bcm2708_usb-usb-[ここは環境によって違うはず].2-port0 を指定。こちらは(ttyUSB* と違い)物理的に同じ場所に挿される限り不変なので,L-02C を再起動した(抜いて挿し直した)場合にも Raspberry Pi の再起動が不要になる。
  • $ sudo vi /etc/network/interfaces
    iface eth0 inet manual

    となっているのを,

    auto eth0
    iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

    などとし,固定 IP を指定する。

  • iptables の設定保持用に netfilter-persistent (iptables-perssstent) を導入。仕上がったら
    $ sudo netfilter-persistent save

    するだけで保存して次回起動時にも読み込んでくれる。

  • まあ念の為ということで ssh は 192.168.0.0./24 および 192.168.1.0/24,domain および bootp (dhcp) は 192.168.1.0/24 からのアクセスのみを許可するよう変更。グローバル IP が振ってくる回線の人は必須です。別の回線から当該回線の IP に nmap -Pn してみて出てこなければオーケー。このへんがわかりやすい→iptablesの設定方法|さくらインターネット公式サポートサイト
  • ディレクトリ,ログ,DNS サーバなどを自分の好みに変更。

ほか,以下のページも参考にしました。
格安SIM(MVNO)とRaspberry Pi(ラズベリーパイ)でモバイルルータを作った 〜初期設定から完成まで〜 – $yuzu->log();
Qaplaの覚書・メモ・備忘録・独言 Raspberry Pi をUSBモデムでインターネット接続
Berrbear: Raspberry piでUSBモバイルモデム
SORACOM Air が使える USB 3G/LTE モデム、WiFi ルーターのまとめ – bearmini’s blog
Raspberry PiをL-02C+IIJmioでつないでみた: EeePCの軌跡
Raspberry Pi 2で0SIMをL-02Cで使ってみた。
Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom |
デジモノステーション2016年2月号付録の0SIMをRaspberry Piで試す | matoken’s meme

ルータ以外の機能のセットアップ
 ルータ以外の機能をセットアップします。apt-cacher-ng を導入する以外は以前書いた「Raspberry Pi ホームオートメーション計画(1)」とほぼ同じです 14。それぞれの機能は USB テンキーで操作できるようにします。

apt-cacher-ng
 Apt-Cacher Next Generation は,APT の deb ファイルをキャッシュしてくれるソフトウェアです。これを導入することによって,アップデートに伴うデータ通信を削減することができます。LAN 内に Debian 系で同じアーキテクチャ(i386 など)の同じディストリビューションが導入されたマシンが複数台ある場合に有用です。サーバにインストールしたうえでクライアントでプロキシの設定をするだけで利用できます。なお,場合によっては大量のデータをローカルに書き込みますので,SD カードの寿命を大きく削ることが予想されます。最初 USB メモリや USB HDD などに書き出すことも考えましたが,一度設定が完成したらオリジナルの(消えたら困る)データは蓄積されませんので 15,SD カード一本で行って壊れたら都度買い直して dd でイメージを書き戻すようにした方が手間を考えると低コストであると考え,とりあえずそれで様子を見ることにしました。

# aptitude install apt-cacher-ng

 次にポートを開けます。ローカルネットワークから,ポート3142への通信を許可します。上で紹介したページでの IP アドレスレンジ,rules の場合の例。

$ sudo iptables -I OPENNEW 4 -p tcp --dport 3142 -s 182.168.1.0/24 -j ACCEPT

 よくある凡ミスでパケットを全部 drop した後ろにルールを追加して反映されないというのがありますので気をつけてください 16。iptables は上から順番に逐次マッチングされて,最初に見つかった合致するルールだけが使われます。
 LAN 内のマシン全てに以下のファイルを作ります。

# vi /etc/apt/apt.conf.d/02proxy

中身はこんな感じで。

Acquire::http::Proxy "http://192.168.1.1:3142/";

 update のうえで何かインストールしてみて,/var/log/apt-cacher-ng/apt-cacher.log にきちんとログが残っていたらうまくいっています。http://192.168.1.1:3142/ にブラウザでアクセスすると,キャッシュのヒット率などを見てニヤニヤすることができます。
第315回 apt-cacher-ngを使ってAPT用キャッシュプロキシの構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

音楽再生
 次に ogg123 を導入します。この手の用途では mplayer がよく使われますが,多機能な一方 X に依存しているなどヘッドレス環境で使うにはあまり便利でないので,単機能でコンパクトなこちらのソフトを選択しました。

$ sudo aptitude install vorbis-tools

 たとえば,~/Music/Classical にある全ての ogg ファイルをシャッフルして無限ループさせる場合は以下のようにします。

$ ogg123 -r -z -q Music/Classical/*.ogg &

 mp3 ファイルを使用する場合は,mpg321 を使用します。ソフト名は mpg321 ですが,コマンドとしては mpg123 でもデフォルトでパスが通っています。逆に ogg321 はダメなので,ごっちゃにならないよう mpg123 として使うことをおすすめします。

$ sudo aptitude install mpg321
$ mpg123 -r -z -q Music/Classical/*.mp3 &

 これを後で alias に設定します。

チャイムを鳴らす
 部屋にいることが多い学生身分なので,だらだら過ごしてしまわないよう時報を鳴らすようにしています。私の設定は以下で,朝8時〜夜10時まで1時間ごとにチャイムが鳴ります。

$ crontab -e
0 8-22 * * * ogg123 -q [パス]/chime.ogg

なお,「crontab -e」しようとして「crontab -r」しちゃうというのは定番ネタですので,.bashrc に alias ‘crontab’=’crontab -i’ を加えておくのがおすすめです。
cron の設定ガイド

データ通信量を出す
 本当は「みおぽん API」を使おうと思ったのですが,この辺になるとそろそろめんどくさい短い人生の限りある時間を大切に使おうという気持ちが強まってきたので,/proc/net/dev を使って簡易的に済ませます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done

 これで eth0 を通った上り・下りのデータ量の合算を表示できます。単位は MB です。後述のように LTE の接続が切れて ppp0 が消えてしまうことがあり,その時に累積が消えてしまうので,入口の ppp0 ではなく LAN への出口の eth0 を見ています。Raspberry Pi の自体の通信(ソフトウェアアップデートなど)は反映されませんが,このさい細かいことは気にしない。
 /proc/net/dev は再起動するとリセットされるので,電源を切るときはどこかに書きだしておく必要があります。/var/log/packetcount.log に書き出すとして,以下のようにすると合算して表示できます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done

 このまま実行するとファイルが存在せず何も挿入されず文法エラーになるので,/var/log/packetcount.log を作って 0 とだけ書いて保存しておいてください(雑

 これを毎月リセットするために,crontab を設定します。Raspberry Pi には RTC がなく,たとえば1日0時5分などとすると5分以内に NTP サーバとの通信がうまくいかなかった場合に実行されてしまいますので,余裕を持った時間指定にしておきます。

$ sudo crontab -e
1 10 1 * * echo '0' > /var/log/packetcount.log

ネットワークの転送量を調べる方法 – ぴょぴょぴょ? – Linuxとかプログラミングの覚え書き –

OpenJTalk で喋らせる

$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

 オプションを引数で指定するのが必須だったり,wav ファイルとして出力されるのでそれを別途再生する必要があったりといろいろ煩雑なので,引数として文字列を渡せばそのまま喋ってくれるスクリプトを用意しておきます。なお,Raspbian のベースが Wheezy から Jessie に変わった関係で,OpenJTalk の使い方もやや変わっているのでお気をつけ下さい。

$ nano /usr/local/bin/ojsay
#!/bin/bash
TEMP=$HOME/ojsay.wav
echo $1 | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow $TEMP
aplay --quiet $TEMP
rm $TEMP
$ chmod +x ojsay
$ ojsay 誰かがヨーゼフ・Kを中傷したにちがいなかった。悪いこともしていないのに,ある朝,逮捕されたのだ。

 少し待たされて,読み上げられるはずです。むちゃくちゃお手軽ですね。処理に時間がかかるのと,一文が長くなると突然読み上げがやたら遅くなるというバグ?があるようなので,一度に喋らせるのは一言二言にしておくのがおすすめです。
他のコマンドの出力やウェブスクレイプイングと組み合わせれば,可能性は無限大です。

$ ojsay "$(date +"%B%d日 %I時%M分")"

 日時を読み上げ。

$ ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"

 SoC の温度を読み上げ。

$ sudo aptitude install curl
$ ojsay "$(curl http://www.tenki.jp/forecast/3/16/4410/13101-daily.html 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)" | head -n1"

 天気を読み上げ。

$ ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"

朝日新聞社ウェブサイトの見出し読み上げ。(流石に結構待たされる)
RaspberryPiにOpenJTalkをインストールする – 試したこととか困ったこととか
Debian Jessie に OpenJtalk を入れてテキストを読み上げてみた – 残しときます(自分用)
Linux – シェルスクリプトで天気予報取得! – mk-mode BLOG

テンキーで操作できるようにする
 入力は USB テンキーから行います。最初はプログラマブルテンキー「NT-19UH2BK」を検討したのですが,金欠なので無駄をなくし環境負荷を軽減するために棚に転がっている普通のテンキーを有効活用することにしました。入力そのものは数字だとか記号だけですので alias でそれぞれにコマンドを割り当てます。まあ,今回の用途なら特に不足はありません。

とりあえず,こんな感じで割り当てました。

* 再起動
*** 停止
7 SoC 温度読み上げ
8 ニュース見出し読み上げ
9 音声出力オン
+ データ通信量読み上げ
+++ データ通信量リセット
4 天気予報読み上げ
5 日付読み上げ
6 音声出力オフ
1 再生開始1
2 再生開始2
3 再生停止
0 ping
00 L-02C 電源リセット(詳細は後述)
000 アップデート試行
000000 とてもつらい

以下を ~/.bashrc に追加します。

alias '*'='ojsay '再起動します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -r now"'
alias '***'='ojsay '停止します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -h now"'
alias '7'='ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"'
alias '8'='ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"'
alias '9'='amixer sset PCM on'
alias '+'='ojsay "今月のデータ通信量は $(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)メガバイト です"'
alias '+++'='ojsay "データ通信量の記録をリセットします"; sudo sh -c "echo '0' > /var/log/packetcount.log"; sudo sh -c "shutdown -r now"'
alias '4'='ojsay $(curl http://www.tenki.jp/forecast/[お住まいの地域の URL] 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)'
alias '5'='ojsay "$(date +%B%d日%I時%M分)"'
alias '6'='amixer sset PCM off'
alias '1'='ogg123 -r -z -q ~/Music/Jazz/*.ogg &'
alias '2'='ogg123 -r -z -q ~/Music/Classical/*.ogg &'
alias '3'='sudo sh -c "pkill -f 'ogg123'"'
alias '0'='ojsay "$(ping=$(echo "$(ping -c1 8.8.8.8)"|grep " 0% packet loss"); if [ "$ping" = "" ]; then echo "ネット接続に問題があります"; else echo "ネット接続は正常です"; fi)"'
alias '00'='sudo sh -c "checkppp0"'
alias '000'='sudo sh -c "aptitude update; sudo aptitude upgrade -y"'
alias '000000'='ojsay "とてもつらい"'

 このままだと sudo sh がパスワード入力待ちで止まってしまいますので,これらのパスワード入力を不要にします(雑

$ sudo visudo
hoge ALL=(ALL) NOPASSWD: /bin/sh

を追加。ま,今回の場合パスワード入力は自分のフールプルーフになればいいのでこれでよしとします。
 テンキーにシールを貼るなどして割り当てた機能を書いておくとわかりやすいです。

L-02C の自動再起動を実現する
 よし完成,めでたしめでたし……と思ったら,ときどき通信が切れて,L-02C の電源を一度切るまで(ポートから一度抜いて挿しなおすまで)使えなくなることがあることに気が付きました。どうも L-02C のファームウェアの安定性に何かしら問題があるようです。数分おきに ping を飛ばすなどして自動切断の回避を試みるなどしても 17,あまり効果はないようです。他は完璧なのに,ここだけはどうやってもうまくいきません。
MR-GM2運用テスト、とりあえず失敗・・・ | めざせ東京リーマンの千葉週末田舎暮らし
MR-GM2運用テスト、その後・・・|めざせ東京リーマンの千葉週末田舎暮らし ー太陽光発電の売電収入で別荘が買えるかー
格安simをパソコンで使えるようにする曲者デバイスL-02cを紹介(オススメするとはいわない)|投げて、捨てて、シンプルライフ

 残念ながら AT コマンドでハードウェアを再起動させる方法はない模様です。しかしまあ,要するに,一度電源を切ってやればよいのです。/sys/bus/usb/drivers/unbind や /sys/bus/usb/devices/*/power/control 18 19 20から電源を切れますし……と思ったら,できない。前者は認識はしなくなるけど電源は切れない。後者は存在すらしない。なんで。
 しばらくさまよい歩くと,「hub-ctrl.c」というイカしたツールを見つけました。これを使えば,USB ポートの電源をより手軽に制御できるとのことです。――自分の環境ではできませんでしたが。なんでも,lsusb -v してみて Hub Descriptor に「Per-port power switching」とあるものでしか電源制御はできないらしい。「No power switching」や「Ganged power switching」とあるものはそもそもそのための回路が入っていないとのこと。最初に購入した U2HS-T201SBK という USB ハブは,案の定というか「Ganged power switching」でした。なんてこった。名前からはできそうな雰囲気が漂っているんですけどね…..光学マウスを付けて試してみたら,(全てのポートに一斉に反映されるのではなく)特定の1ポートのみに反映され,ランプが消えました。これは行けるか? と L-02C につなぎ替えてみたら無理でした。USB ランプ(単に電力を取ってるだけでなんの制御回路もなし)をつないでいると p=0 にしても光ったままですから,電源自体は供給されたままのようです。手元にあった U2HS-T201SBK(バスパワー)および BSH5U03(セルフパワー)の2機種で同じ挙動。また,実機が手元にないのと情報が少ないのでなんともいえませんが,今回使用した B に加え B+/2B/3B の内蔵ハブもポート個別の電源制御はできないようです。
 じゃ「Per-port power switching」なハブってどんなのがあるのというと,マザーボード内蔵のものを除き殆ど無いんだそうな。まあ確かに USB ハブのポートを個別に制御しようという需要なんてあんまりないでしょうからねえ。動作報告のある現行品で唯一の選択肢が,「SUGOI HUB 4X (USB2-HUB4X)」というものらしい。なんとなく不安になる製品ページですが,ともかく,4つあるポートの内なぜか2つだけですがちゃんと電源を制御でき,USB ランプのような電源ラインしか使っていない機器もオンオフできるらしい。ということで購入。予算オーバーつらい。
 喜び勇んで /sys/bus/usb/ 方面を漁ってみたのですが,power/control がない。ああそうだった。調べてみると,Raspbian が採用している4.1系のカーネルではこの制御方法は廃止されているようです。unbind にデバイス ID を書き込むやり方は使えて,無事にオンオフできましたが,両方のポート一斉にしかできません 21。まあそれでも困りませんが,せっかく買ったので実力を出し切りたい。幸い,先述の hub-ctrl を試してみたところ今のカーネルでもそのまま使えましたので,これを採用することにしました。

$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ sudo aptitude install libusb-dev
$ gcc -o hub-ctrl hub-ctrl.c -lusb
$ chmod +x ./hub-ctrl
$ mv ./hub-ctrl /usr/bin/
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 0
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 1

 おー,いけるいける。lsusb して NEC Corp. HighSpeed Hub とあるものの Bus を -b, Device を -d,ポート番号(向かって左から1,2)を -P で指定しています 22。-p 0 でオフ,-p 1 でオン。これさえあればこっちのものです。
というわけで,

$ sudo vi /usr/local/bin/checkppp0
#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" ); if [ "$pppalive" = "" ]; then /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 0; sleep 10; /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 1; fi

 (crontab に一行で書こうと思ったけどなんかうまくいかなくて面倒くさくなってそのまま外部のスクリプトにしたというアレ)
 
 (16/9/11追記)追記し忘れていましたが,ハブを BSH4AE12 に交換して,1)ハブしか接続していなくても Device の番号がたまに変わるようになる,2)ポートのひとつひとつを選択して入切してやらないといけないっぽい?という仕様の違いがあったので,それに対応するために checkppp0 を修正しました。BSH4AE12 対応版は以下です。たぶん大丈夫と思いますがちゃんとチェックしてないのであんまり自信ない。

#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" )
if [ "$pppalive" = "" ]
        then
        HUB=`/usr/bin/lsusb -v 2>/dev/null | grep ^Bus | grep "Genesys Logic, Inc. USB-2.0 4-Port HUB"`
        BUS=`echo $HUB | awk '{print $2}'`
        DEV=`echo $HUB | awk '{print $4}' | sed -e "s/\(.*\)\:/\1/p;d"`
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 0
        done
        sleep 20
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 1
        done
fi

 
 ここまで何日もいじっていて,圏外(ランプ黄色),接続待機でのハングアップ?(ランプ白),接続再試行中のハングアップ?(ランプ青点滅)問わず通信ができなくなった時には確実にセッションも切れて(そしてそう認識されて) ppp0 が消えるらしいということがわかったので,単に ppp0 の存在確認をしています。ping を飛ばすのと違いネットワークに負担がかかりませんし,CPU も食いませんので,毎分だって実行できます。これによって,ダウンタイムを最小化でき,自宅回線としてストレス無く利用することができるようになります。15分の load average を見ても 0.1 を超えることはない(おおむね0.05〜0.07で推移)ようなので,更にチェックの頻度を上げるのもアリでしょう。
 (16/5/1追記)と書きましたが,ダメっぽいです。時々ひっそりと死んでいることがあります。理由は特定できていませんが,ログに出てないのでハードウェア側っぽく,熱は大丈夫なので電源周りっぽい雰囲気があります。2.4A対応アダプタ+ケーブルで試してもダメなので,本体の問題の模様 23。だとしたら,B+以降やポリヒューズ改造後の個体なら大丈夫かもしれません。そのへんはまた後で検討するとして,とりあえず毎分ではなく5分おきに実行するようにしてみたところ安定しています。
 (16/11/2追記)別ハードウェアで毎分の実行を試してみて気付きましたが,wvdial の自動再接続で事が済むような“正常な”接続断にまで L-02C 再起動で対応することが増えてしまうため,却ってダウンタイムが一気に増えてしまいます。やはりチェックのインターバルは数分程度はあったほうが良いようです。
 なお,今回は Raspberry Pi 本体にハブしか挿しておらず数字が変わらないのでベタ指定してますが,他のデバイスも挿している場合は,こちらを参考に lsusb から自動取得するようにするとよいでしょう 24
 
では,最後の敵をいざ倒さん。

$ sudo crontab -e
*/5 * * * * /usr/local/bin/checkppp0

 ふー,倒した。長かった。ともあれ,これでやっと RPi ルータが完全体になりました。

 (16/8/14追記)SUGOI HUB 4X が早くも故障してしまいました。享年4ヶ月という夭折です。改めてネットを眺めてみると,比較的ニッチな製品の割に故障報告が多く目に付きます。じっさい製品の値段もそう高くありませんし,回路は奢っていてもコンポーネントの質は高くないのかもしれません。修理をしても(これがまた販売店への持ち込み不可で最初にメールであれこれしないといけないとやたら煩雑なのですが,それはまた別の話……)また壊れてしまうかもしれません。そこで代替機種を調べてみることにしました。白羽の矢が立ったのが,「節電 USB ハブ」を謳うバッファロー BSH4AE06 です。とても小さい上,手にとってみると非常に軽く,おそらく中はスカスカでしょう。しかしその分,部品点数が少なく壊れにくいことが期待できます。この機種は既にディスコンになっており,後継機種として BSH4AE12 というものが出ています。型番や能書きを見る限り,中身は miniUSB 対応から microUSB 対応に修正された以外は同じものではないかと思われます。今はまだ BSH4AE06 の方が安いですが,まもなく入れ替わることになると思います。なお,USB 3.0 ハブにも目を向けると,電源制御に対応しているという報告のあるものがいくつもあります。 25ただし,セルフパワー対応のものはまだ値段がこなれていません。
 さて BSH4AE06 ですが,結論としては「当たり」でした。Per-port power switching ではなく ganged power switching ですが,先述のような,実際には電源制御できないのに(おそらくは設計上の不備によって)情報だけはそう渡していると思われるものではなく,「本物の」 ganged power switching ですので,ポートごとの電源制御はできませんが,ハブの全ての電源を一度にオンオフすることであれば可能です。lsusb すると「Genesys Logic, Inc. USB-2.0 4-Port HUB」というのがありますので,/usr/local/bin/checkppp0 を先述の要領で書き換えます。また,/etc/wvdial.conf のモデムのパスも書き換える必要があります。
 あと,この件に関する修正を加えるにあたって,この記事がものすごく役に立ちました。当然といえば当然ですが,何かするときに記録を細かく残すのは大切ですね。

 しばらく運用してみて大丈夫そうなら,完成です! おめでとう! 忘れずにバックアップしておきましょう。shutdown -h now したあとカードを別のマシンに刺して,わかりやすいファイル名で保存しておきます。圧縮をかけると未使用領域が縮んでナイス。

$ sudo sh -c "dd if=/dev/sdc | gzip -c > RPI-LTE-ROUTER-$(date "+%y-%m-%d").gz"

(/dev/sdc の部分は環境によって異なります)
 いやあ〜よかったよかった。
モーション検出でUSBライトのON・OFF
LinuxからUSB HUBの電源のON/OFFを制御してみる – memoメモ
電源制御型USBハブでUSBチューナーの見失い状態を解消する。(PX-W3U3、S3U2ほかUSBチューナー汎用): Vladiのブログ
IoTでアボカドの発芽促進とカビを防止する – Part2: BeagleBone Blackで植物育成LEDライトを制御する – Qiita
えびめも(2011-05-30)
GitHub – codazoda/hub-ctrl.c: Control USB power on a port by port basis on some USB hubs.

感想
 3,4年周回遅れなだけあり情報が多く,基本機能については OS 導入から DHCP で IP アドレスを貰ってネットに出られるようになるまでが1時間くらいで終わりました。が,そこからが長かった。ちょっとした問題を潰すために試行錯誤したり,問題の原因を探るために勉強しなおしたりで,期間で一週間以上,丸何日かを費やしました。この記事を書くにあたっても,調べなおしたり再現するか確かめたりしてさらに1日潰れました。いちおう2週間近く実用したうえでの記事公開ですが,まだ何か起こるかもしれないとヒヤヒヤです。しかし,市販のモバイルルータも常時稼動に対応するほどには安定してはいないらしく,データ通信ドングルに対応したルータもいまいち痒いところに手が届かないようですから,LTE 回線を自宅回線として使いたいのであれば,「Raspberry Pi で DIY する」というのがいまのところ最良の選択肢でしょう。ネットワークの復習を含めなかなか勉強になるので,時間に余裕があればやってみると面白いはずです。

4ヶ月使ってみての感想
 記事公開から4ヶ月ほど経ちました。しばらく光と併用していたので正味では2ヶ月くらいですが,中間報告をば。

  • 1ヶ月10GBに収めるためには1日あたり333MBまでの通信に収める必要があります。これはけっこう厳しいですが,ストリーミング系は禁止とし,漫然とウェブブラウジングすることもやめれば,特に問題ない範囲です。この負のインセンティブにより時間を有効に使えるようになるというメリットもあります(?) ブラウザを起動しない日を週に何日か取るようにすれば完璧です。土日は古今東西の名著を手にとったり近場を散歩したりして過ごしましょう。なんて健康的なんだ。
  • 通信速度はそれなりですが,LTE なので ping が速めで,体感としては割と快適です。テキストベースのサイトであれば光回線と違いがわかりませんし,画像の多いサイトでも少し引っかかる程度です。混雑する時間帯でも体感としては ADSL の遅いとき程度です。
  • 自動再接続のおかげで「使おうと思ったら繋がらない」ということはほとんどありませんが,回線が混雑する時間帯には複数のタブを同時に開くと読み込み中のまま止まったり接続がタイムアウトしたりすることがあり,その場合にはページを再読込する必要があります。
  • Linux ディストロのインストールディスクなど大きなファイルのダウンロードは困難です。通信速度が充分でも途中で失敗してしまうことが多いです。Wget などのダウンローダを使用すると多少改善しますが,それでも失敗が多いです。Bittorrent は“無駄”な通信が多いので容量制限のある回線では避けたほうが無難ですが,IIJmio では遮断されているようでそもそも使えません。ダウンロードに失敗するとその分のデータ容量が無駄となり痛いので,大きなファイルのダウンロードはなるべく避けましょう。なお,OS のアップデート程度であれば,回線が空いている時間帯であれば特に問題なくできます。
  • 空冷にしてからとても安定していますが,帰宅したらラズパイが落ちていたことが一度だけありました。電源か熱でしょうが,再現しないのでなんともいえません。思えば今使っている初代Bはもう4年くらい前に買ったブツですので,ハードウェアの変更も視野に入れています。

更新履歴

  • 16/05/01 接続確認の頻度が高すぎて動作が不安定になることがあった件を修正
  • 16/05/04 ファンレスの夢が破れた件について追記
  • 16/08/14 SUGOI HUB 4X がすごいすぐ壊れた話と BSH4AE06 への乗り換えについて追記
  • 16/09/08 4ヶ月使ってみての感想を追記

Notes:

  1. もっとも,高速通信オフ時は3日で366MBまでという制限があります。 通信規制はありますか? | IIJmio
  2. Raspberry Pi (1) B+ の現在の価格より
  3. SUGOI HUB 付属 AC アダプタの出力は 5V2A なので数値上は USB ハブから余裕を持って取れそうなのですが,なぜか正常動作しませんでした。気になりますが,面倒なので今回は調べません。
  4. 一般的には前者が多く,OCN 系や Biglobe 等はグローバル IP らしい。Interlink のように安価に固定 IP を提供しているところもあります。
  5. USB – Raspberry Pi Documentation
  6. マニュアル p.120
  7. Raspberry Piブログ : [コラム] Raspberry Pi Model B+でUSBの最大出力を1.2Aにグレードアップしよう, なお safe_mode_gpio=4 は古いバージョンでのオプションで,互換性のために書かれているだけのため,最近のバージョンを使っている場合は max_usb_current=1 だけで大丈夫です。
  8. Raspberry Pi • View topic – RPi 3 – Very poor wifi performance, 16/4/19 Raspberry Pi Foundation エンジニアの Dom 氏曰く,”1.2A is the default and max_usb_current has no effect on Pi3.”
  9. 価格.com – 『バージョンV10eで安定化』 docomo L-02C [レッド] のクチコミ掲示板
  10. L-02C SIM(UIM)カードが認識しなくて困っていたが解決のようです|ぽちびろの日々ツイート
  11. ディスプレイに繋いでも CUI のみで VRAM はほぼ使うことはないのでがっつり減らしてよい。その分,システムに割かれるメモリ容量を増やせる。ただ,最小値は16MBらしい。 RPiconfig – eLinux.org – http://elinux.org/RPiconfig
  12. 設定がフラッシュメモリに保存されます。
  13. さすがに LTE 回線を自宅回線にしようというニーズはまだ殆どないようで,安定しそうにない構成だったり,重要な情報が抜けていたり,中には明らかに問題のあることをしている記事も散見されますので,実際に作業を始める前に検討する必要があります。
  14. なお part2 は結局まだ書けていません。音声入力はやたら手間がかかる割にうまく行っても他の入力手段より実用上快適にはならないということがわかったので pending という名の放置中です。そのうちやる気と時間がある時にでも……
  15. 犯罪に巻き込まれたような場合にログが残ってなかったら困るな,という程度
  16. またやっちまった。
  17. 定期的に ping を飛ばす手順はこちらを参照のこと。 常時接続の維持 (PING コマンド)
  18. Controlling a USB power supply (on/off) with linux – Stack Overflow
  19. kernel – Turning off power to usb port. Or turn off power to entire usb subsystem – Unix & Linux Stack Exchange
  20. Power OFF and ON USB device in linux (ubuntu) – login: root
  21. 細かく指定しようとするとエラーが出る。
  22. そこに挿しているデバイスではなく,ハブを見ることに注意してください。
  23. Minecraft Pi もできたので,Bとはいえ改良後のリビジョンのはずなのですが……
  24. ただし,手数が増える分 CPU 負荷はやや増えるはずです。
  25. 詳しくないですが,USB HDD エンクロージャも USB 3.0 のものはどれも電源連動に対応していますし,規格上対応が必須になるなどしたのではないか? という気がします。

Debian 8 で Bluetooth DUN

 Debian 8 Jessie で Bluetooth DUN しようとして……泥沼にハマった。
 Bluez のバージョンが 5 に入り仕様が大きく変わったようで,これまでの定石が通用しません。一応 blueman や gnome-bluetooth なども入れて試してみましたが,やはりうまくいかない。つなぐ先も「BlueDUN」という市販のアプリを入れた Android スマートフォンで,こっちが特殊な仕様である可能性もあります。せめて他にいくつかモデムがあればいいのですが……なんとか調べながら設定してはみるものの,正体不明のエラーとか……検索してみるとバグがうんたらかんたらとか言ってるし……うわこのコマンドも無くなったのか……このエラーは何だ?……しかし眠い……寒い……外明るくなってきた……つらい……などと合計10時間以上を無為に費やし,「これは複雑なバグまたは心霊現象が関与しており自分の手には負えない」という結論に達したところで以下のページを見つけました。

delx » Bluetooth DUN Tethering with Linux and a Nokia Symbian Phone

 2014年? Arch? もしや,これでいける? 藁にもすがる気持ちで試してみると……いやっほううう!!! 繋がった!!! 何度再起動して試してもオーケー。引っ掛かりポイントは Debian では「python-dbus」ではなく「python3-dbus」が必要であるという点と始めに wlan の接続を切ってから試さないとダメという2点くらいで,本当に書いてあるとおりにコピペして書き換えて実行するだけ。恐ろしく簡単。
 スクリプトを眺めてみるとなにやら見たことのないことをしている部分がある。やっぱり仕様変更絡みで別のやり方をする必要があったらしい。この辺はそのうちちゃんと調べないといけませんね。
 いやあ,ありがたやありがたや。

よさそうなキーボードのメモ

 現在,安いメンブレンキーボードを使用中。腱鞘炎になりそうになったら高いキーボードを買おうと思いつつも,意外となんともないもので,なんとなく使い続けている状況。晴れて(?)腱鞘炎になりそうになった時のためにメモ。

私の理想のキーボード

  • 腱鞘炎などになりにくく,疲れにくく,さらに作業能率を落とさないもの。
  • キー荷重は軽めがよい。キーストロークは,テンポ良く入力できるものであればどのようなものでも構わない。
  • キートップに位置に合わせた傾斜加工が施してあるもの。
  • コンパクトなもの。テンキーは不要。
  • 可能な限り標準的な配列であるもの(少なくとも,少し慣れればタッチタイプが可能である程度であること)。また,ファンクションキー(F1〜F12)やカーソルキーが独立したキーとして存在するもの。
  • 無線であることが望ましい。その場合,安全な暗号化方式でなければならない。
  • 曲線的なデザインよりは角張ったデザインがよい。
  • タイプ音は静かであることが望ましい。
  • キートップの刻印が消えにくいものが望ましい。あるいは逆に無刻印のものもよい。
  • キーボードを見るたびに Windows のロゴが目に入るのは不愉快だから代わりに Tux キーをつけろ(暴言)

Realforce91UBK(約14,500円)
 最有力候補。東プレが誇る静電容量無接点方式のスイッチで,実用品としてはおそらく最高峰のもの。キータッチは言うに及ばず,耐久性も折り紙つきで,チャタリングの心配もない。テンキーレスモデルでトラックボールまで動かす手の移動が少なくてすむ。無線ではなく有線であるという欠点はあるものの,他は非の打ち所がない。なお,テンキーレスではないが30g荷重モデル(このモデルは45g荷重)もあり,悩むところ。

I-T Touch AS-KB91T(約7,500円)
 テンキーレス,シンプルなデザインと自分の好みにあっている上,Cherry スイッチのメカニカルキーボードとして最安クラスでもある。これも有力候補ながら,下記 Majestouch 2 Tenkeyless との価格差2500円が悩ましい。

Majestouch 2 Tenkeyless FKBN91M/NFB2(約10,000円)
 国内メカニカルで一番人気の Majestouch で,Cherry MX 茶軸,テンキーレスで,刻印がキートップではなく側面になされているモデル。すっきりした印象でかっこいいけど,あと5000円足せば Realforce に手が届くんだよなあ。

EnduraPro(14,380円)
 Model M などが有名な IBM バックスプリング方式キーボードの末裔で,静電容量無接点方式でもメカニカルスイッチ方式でもない独自のスイッチ構造を採用している。キーに仕込まれた大きなバネの反発力でキーを戻すという仕組みで,音もかなり大きいらしい。このモデルは Ultra Classic というモデルの派生で,ユニークなことにトラックポイントが付いている。ニッチさ+機能性を考えれば安い印象だが,実用品として Realforce と比較すると……? ダイアテックが国内正規代理店になっている。Unicomp 直販でも買えるものの,送料が6000円くらいするのでダイアテックで買ったほうが得。余談ながら Unicomp 直販では Linux ユーザのための交換キートップセットなんてのも売っている。

Happy Hacking Keyboard Professional 2(約22,000円)
 ファンクションキー(F1〜F12)がないので,残念ながら日本語の文章を書くのがメインである自分には厳しい。

Kinesis Advantage Qwerty(42,530円)
 いわゆるエルゴノミクスキーボードの代表的なもの。Cherry MX 茶軸。疲れにくさに定評があるが,流石にこの値段では手が出ない。

The Recreated Sinclair ZX Spectrum(77.99GBP+送料約20GBP)
 英国のコンピュータ史に名を刻む名機 ZX Spectrum を忠実に再現した Bluetooth キーボード。忠実に再現しているのでゴム製キートップのチクレットキーボード。実用性とかそういう退屈なことを考えてはいけない。これ自体はそうでもないけど Amazon.co.uk の関連商品にある「Sinclair ZX Spectrum Mug」がむっちゃ欲しい。

Qwerkywriter(329USD+送料50USD)
 タイプライタ風 Bluetooth キーボード。見た感じかなりしっかりした造り。中身はメカニカルキーボードなので,こっちは実用もできそう。ただやっぱり高すぎる。

iBuffalo BSKBC02BKF(約1,300円)
 最低価格帯にもかかわらず手の込んだ作りになっていて,コストパフォーマンスが素晴らしいと人気のキーボード。値上げ騒動があったものの,まだ在庫があるようで今のところ実勢価格は変わらず。まあ上がっても2000円を切るくらいだとは思うけど,欲しい方はお早めに。

SANWA SUPPLY SKB-KG3BK(約1,500円)
 コンパクトな PS/2 キーボードが欲しくて買ったやつ(って最初の趣旨から完全にズレてるな……)。軽いキータッチ,配列やキーピッチへの影響を最低限にしつつのフットプリント圧縮となかなか悪くありません。安物シリーズではこれもおすすめ。

IPS パネルは壮絶に焼きつくけど,簡単に元に戻せる

 いつものように昼なお暗い魔窟 a.k.a. 自室で PC 作業に励んでいたある日のこと。気分転換にすこし散歩に出て,30分ほどして帰ってきたら,2枚ある液晶ディスプレイの両方が壊れていました。具体的には,画面が激しく点滅し(ちらつき),縦縞状のノイズが画面全体に広がり,四隅は白っぽく変色しているという状況。しかも,開いていたウィンドウの像が,ウィンドウを動かしてもくっきりと残ったままです。
「げげっ。なんじゃこりゃ!」
 少し前からちらつきが気になってはいて,だましだまし使っていたのですが,ここまで来てしまうともう使いものになりません。静電気のいたずらである可能性を考え,PC とディスプレイの電源ケーブルを一晩抜いたままにして放置してみるも,残念ながら改善は見られず。「これはもう修理に出すしかないな……」
 幸い2枚とも標準で3年保証付きで交換の早い法人向けモデルですので,修理直行です。保証書を探して,たまたま取っていたダンボールも引っ張りだして。しかし何が原因だったんだろう。先月変えたグラフィックボード? しかし,グラフィックボードが液晶を破壊するなんてことがあるんだろうか。それにそうだとしたらグラフィックボードも調査を依頼しないと……などと考えつつ,最後の悪あがきとして念の為いろいろ検索してみました。すると,こんな気になる情報を発見。

[PCモニター]画面表示がバグったDell U2410がLCDコンディショニングで復活! | トラエラ流 WEB CMの作り方

しかし画面には少し前に表示していたGoogleの画面の焼き付きと黒いはずの背景も黄ばんでいます。また、LEDの明るさもチカチカと安定せず、一見故障にしか見えない画面表示となっていました。

 そう,そう,こんな感じなんですよ。完全に壊れ…え? 故障じゃないの?
 どうやら,IPS 液晶は TN 液晶と異なり「焼き付く」ようです(そう,この液晶は2枚とも IPS です)。なお,VA 液晶は IPS 液晶よりも更に「焼き付き」しやすいらしい。恐ろしや…… 参考123
 しかし幸運なことにこの「焼き付き」は簡単に元に戻すことができるようです。その方法とは,RGB・黒白を順番に表示させることで液晶についたクセを取るというもの。なんか胡散臭い気がしなくもありませんが,どうせ修理センター行きの予定です。モノは試し。私の使用している D 社の液晶ディスプレイでは,「LCD コンディショニング」という名前でディスプレイの標準機能の一つとなっていますので,これを試してみましょう。それでは,とりあえず1時間。
 ……んで,その結果なんですが,これがなんと完全に元通りに直ってしまったのです。いやはやなんともお恥ずかしい限り。修理を申し込む前で本当によかった! 記憶の糸をたぐり寄せてみると,たしかに数週間前に液晶の自動電源オフまでの時間の設定を10分から60分に変更したのでした。なにがグラフィックボードじゃ。仕組みがよくわかりませんが,ともかくこの変更により「焼き付き」が蓄積するようになって,ついには今回のような現象が起こるに至ったのでしょうか。しかし,一見万能の IPS パネルにこんな弱点があったとは(あるいは,D 社だけや安物だけの問題なのかもしれませんが)。対策は LCD コンディショニングを実行して放置するだけとはいえ,突然表示がおかしくなると焦りますし,作業も滞ります。個人で使う分には IPS のメリットはどうしても捨てがたいですが,オフィスなどで仕事のために使う場合はあえて TN 液晶を選んだほうがいい場合もあるでしょう。
 結論。IPS パネルは「焼き付き」ます。メーカーやロットなどにもよるようですが,私の持っている D 社のディスプレイはいずれもかなり壮絶に症状がでるようです。でも,CRT の(本来の意味での)焼き付きとは異なり,簡単に元に戻せます。画面が点滅したり変な縞が出たりとどう見ても故障にしか見えない症状が出ても,落ち着いて「LCD コンディショニング」を実行してみましょう。ディスプレイの標準の機能として搭載されていない場合は,こちらの動画を使わせてもらいましょう。日頃の対策としては液晶のこまめな電源オフやスクリーンセーバの利用が考えられます。あまり頻繁に電源のオンオフを繰り返すとバックライト(今時は LED が普通であるとはいえ)やインバータへの影響が心配なので,スクリーンセーバも併用したほうがいいかもしれません。CRT の絶滅した今ではもはや装飾としての価値しかないと思われがちですが,猫も杓子も IPS の今,改めて見直されるべきかもしれません。

LDE-SX010U,M-TP01DS

買ったきりあまり使わず転がしてたデバイスのミニレビュー2つ。

Logitec USB ディスプレイアダプタ LDE-SX010U
秋葉原東映ランド。どこから出てきたのか2008年発売の機種です。古い機種なので出力解像度は WXGA(1440×900)やら SXGA+(1400×1050)までとなっていますが,1980円と安く,DisplayLink 社製チップ採用とのことでまあツブシはきくだろうと,古い SXGA ディスプレイの再利用でもしようかと購入(衝動買い)。
PC に接続するとデバイス内のフラッシュ ROM から autorun でドライバのインストールプロセスを開始するという最悪最低な仕様になっている(これは Logitec には罪はなく Displaylink 側の仕様らしい)以外は,まあいい意味で平凡,特に困ることもない感じです。とりあえず Windows タブレットにつないでみたところなぜか表記スペック以上の 1600×900 での表示ができました。FullHD など今時のパネルのアスペクト比でも比率が合っていい具合になりますが,FullHD ディスプレイでも利用するつもりがあるのであれば FullHD 対応のアダプタを購入するべきでしょう。
年代的にたぶん Displaylink 製のオープンなドライバが使えるはずですし,ドライバ導入のノウハウみたいなのもネットにいくらでもありますので,恐らく Linux でも普通に使えるのではないかと思います。まあ今のところその必要を感じないので試していませんが。……コレ買う必要あったか?

参考:
DisplayLink – ArchWiki
Atelier Orchard: Raspberry Pi でDisplayLinkのudlfbドライバを使う
DisplayLink: Windows Software Windows 版最新ドライバ

ELECOM 無線タッチパッド M-TP01DS
東映無線。けっこう前から絶賛投げ売り中の Win8 対応無線タッチパッド。タブレット固定アームでベッドに固定した(こんな感じですな) Android タブレットを腕をなるべく動かさずぐうたらに操作するために購入。あまり期待していませんでしたが意外とよくできています。作りもまずまずしっかりしています。が,パワーセーブからの復帰のために物理ボタンを押す(ゴム足がボタンになっているので盤面を押す)必要があるとか,そもそもポインティングデバイスとしてタッチパッドは使いにくいんじゃとか,いろいろ問題はあります。マウスと違って平面がなくても使用出来るのはメリットですが,どうせなら3倍出して M570t かタッチパッド付きハンディキーボードを買ったほうが幸せになれそうな気がします。

激安 bluetooth イヤフォン「LBT-HPC20」

 春頃から絶賛投げ売り中のロジテック「LBT-HPC20」。ごくシンプルな bluetooth 4.0 イヤフォンで,女性をターゲットに据えた豊富なカラーバリエーション展開とコンパクトな筐体サイズが売りのようです。なお,あくまでもイヤフォンなのでマイク機能はありません。発売時(昨年の今頃)のメーカー直販価格は3,480円だったそうですが……今,秋葉原では運がよければ500円以下で買えたりします。ネット通販でもプラス数百円程度の模様。僕は本来この手の無線イヤフォンには興味がないのですが(なんせバッテリが持たない!),なにせこの価格でステレオです。お試しには丁度いいしブログのネタにもなるしということで買ってみました。
 良い点。まず気がつくのは説明書の手厚さです。さすがに女性をターゲットに据えているだけのことはあります。筐体は正直ゴツい印象(カクカクしており,USB プラグもむき出し)ですが,かなりコンパクトなのであまり違和感はないかと思います。質感もまずまずで,人前で付けていても恥ずかしくはない感じです。使いやすさはかなりよく考えられている印象です。たとえば,ボリュームボタンの「+」は出っ張っている一方で「-」は引っ込んでおり,指で触っただけで判別ができます。ボタン操作には電子音(ピポパポ,みたいな感じ)のフィードバックがあり,インジケータを見ずとも状態がわかります。音質もまずまずです。なんだかスカスカした感じではありますが,変な癖がなく疲れません。まあワンコインと考えるとかなりいい方です。
 次に悪い点ですが,これはもちろんまずバッテリ持ちの悪さです。メーカー公称値は連続再生で4時間とのことですが,まあそんな感じです。普通に使おうとすれば毎日充電が必要になるかと思います。もっとも,これはこの製品の問題と言うよりもこの手の製品全てに共通する問題ですね。次に電波の弱さです,障害物がない状態でも2,3メートル離れると挙動が怪しくなります。また,離れていなくても向きなどの条件により音飛びが激しくなります。スマートフォンを胸ポケットに入れてみたりカバンに入れてみたり,安物ラジオを聴く時のようにあれこれ持ち方を工夫することになります。定位置を見つければ後は安定しますが,ちょっと下を向いたりするだけで音が途切れるのは多少ストレスです。ただ,ネット上のレビューではそれほど問題視されていないようなので,相性問題もあるのかもしれません(BT 4.0 対応機器はひとつしか持っていないので検証できず)。トラブルに期待(?)したのですが,接続の怪しさ以外は特に問題ないようです。
 多少の問題こそありますが,この安さはそれらを相殺してなお余りあります。安い bluetooth イヤフォンをお探しの方にお勧めです。