PX-Q3PE4で録画機の新調

某店でPX-Q3PE4が安くなってたので、衝動的に新調してしまった。新調したのは9月くらいなんだけど、下書きしておいたのを今公開ってやつ。

構成は以下の感じで。

CPU:Intel Core i3 8100

M/B:ASUS TUF B360M-E GAMING

RAM:てきとうに8GBx1

SSD:Samsung 970EVO 250GB

PSU:Corsair CX450M

ケースはIN WINの301が良い感じだったのでチョイス。

カードリーダーは事前に購入していたSCR3310を利用。

組み立てはまぁ良いとして、環境構築がうまくいくかが問題。

Ubuntuを使って、Mirakurun + Rivarun + Chinachu gammaみたいな感じの構成(あんまはっきりわかってない)を作る。PX-Q3PE4はPLEX公式からUbuntu向けドライバが出ているので、これを使う。

というわけで実際の手順。

  1. 取り敢えずUbuntu18.04 LTSをインストールして、アップデートしておく
$ sudo apt-get update
$ sudo apt-get upgrade
  1. 時刻合わせしてほしいのでそのへんの設定しておく
$ sudo apt-get install ntp
$ sudo vi /etc/ntp.conf
$ sudo systemctl restart ntp
$ ntpq -p
  1. カードリーダーに必要なパッケージのインストール
$ sudo apt-get install pcscd pcsc-tools libpcsclite-dev
$ pcsc_scan
Japanese Chijou Digital B-CAS Card (pay TV)
  1. ビルドに必要なパッケージのインストール
$ sudo apt-get install autoconf build-essential cmake curl git-core libssl-dev libtool libboost-all-dev pkg-config yasm
  1. ARIB25ライブラリのインストール
$ git clone https://github.com/stz2012/libarib25.git
$ cd ./libarib25
$ cmake.
$ make
$ sudo make install
$ sudo /sbin/ldconfig
  1. PX-Q3PE4ドライバ(カーネルバージョンがあっているかどうか確認しておく)
$ uname -r
4.15.0-23
$ wget http://plex-net.co.jp/plex/linux/Ubuntu18.04_64bit_kernel4.15.0-23.zip
$ unzip Ubuntu18.04_64bit_kernel4.15.0-23.zip
$ cd !$
$ sudo insmod tty_Virtual.ko
$ sudo insmod usb-px4.ko
$ lsmod | grep px4
usb_px4 454656 0
tty_Virtual 24576 1 usb_px4
$ ls /dev/px4*
/dev/px4-DTV0 /dev/px4-DTV2 /dev/px4-DTV4 /dev/px4-DTV6
/dev/px4-DTV1 /dev/px4-DTV3 /dev/px4-DTV5 /dev/px4-DTV7
  1. ドライバが正しくロードできているので、インストール
$ sudo cp -p *.ko /lib/modules/<code>uname -r</code>/kernel/drivers/video
$ sudo depmod
  1. root以外からもアクセスできるようにruleを作成(デフォルトはroot:rootなのでroot:videoに変更するのと、600から666にする)
$ sudo cat /etc/udev/rules.d/99-px4.rules
KERNEL=="px4*", GROUP="video", MODE="0666"
  1. 録画コマンドを用意する(実行権限なくて怒られるので適宜追加しておく)
$ wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
$ unzip Linux_Driver.zip
$ cd ./Linux_Driver/MyRecpt1/MyRecpt1/recpt1
$ make clean
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install
  1. recpt1が正しくできていることを確認する
$ recpt1 --b25 --strip 27 10 ~/test.ts
  1. Mirakurunが要求するNode.jsを導入(v8.9.4くらいを要求するみたいなのでそれを入れる)
$ sudo apt-get install nodejs npm
$ sudo npm cache clean
$ sudo npm install n -g
$ n ls
$ sudo n 8.9.4
$ sudo apt-get purge nodejs npm
$ sudo apt-get autoremove
$ node -v
v8.9.4
  1. Mirakurunの導入
$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe --production
Version: pm2@3.0.0 [NG] Expected: &gt;=2.4.0 &lt;3.0.0

pm2のバージョンで怒られてしまったので入れ直す

$ sudo npm uninstall pm2 -g
$ sudo npm install pm2@2.4.0 -g
$ sudo npm install mirakurun -g --unsafe --production
$ sudo npm install rivarun -g
$ sudo npm install arib-b25-stream-test -g --unsafe
  1. Mirakurunのstatusを見る
$ sudo pm2 status
Name mode status restart cpu memory
mirakurun-server fork online 0 0% 47.3MB
  1. チューナー設定
$ sudo mirakurun config tuners
  1. チャンネル設定
$ sudo mirakurun config channels
  1. ログローテーションの設定
$ sudo pm2 install pm2-logrotate
$ sudo cat /etc/logrotate.d/mirakurun
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
/{
daily
compress
rotate 7
missingok
notifempty
}
  1. rivarunから動作確認
//Unixソケット通信
$ rivarun --b25 --sid 1024 --ch GR/27 15 ~/test.ts
//TCP接続
$ rivarun --b25 --mirakurun localhost:40772 --sid 1024 --ch GR/27 15 ~/test.ts
  1. chinachu gammaの導入
$ git clone -b gamma git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd chinachu
$ ./cinachu installer&nbsp; //1(Auto)を選択
  1. 録画予約用の空ファイル生成
$ echo "[]" &gt; rules.json
  1. 設定する
$ cp config.sample.json config.json
$ vi config.json
uidの値を実行ユーザへ書き換え
wuiHostをwuiOpenHostに書き換え
  1. chinachuのログローテーション設定
$ sudo cat /etc/logrotate.d/chinachu
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
weekly
compress
rotate 4
missingok
notifempty
}
  1. 起動確認
$ ./chinachu service wui execute
  1. pm2を使ってChinachu自動起動設定
$ sudo pm2 start processes.json
mirakurun-server, chinachu-operator, chinachu-wuiの3つが見えるはず
$ sudo pm2 save
  1. EPG取得テスト
$ ./chinachu update

以上でおしまい。特に詰まるところもなく、割と単純に作業できてしまい、拍子抜け。

これまではPX-W3PEだったので、同時録画可能数が2倍になった。旧環境ではtvrockを使っていたので、更にリッチなUIになったし、CPUはAthlonII X2 250eを使っていたので、快適に動くようになった。衝動的ではあったけど、良い買い物でした。

お次はRyzenで組みたいって気持ちだな。

NETGEAR AC785 + エキサイトモバイル最適料金プラン

以前書いた通り、NETGEAR AC785 + エキサイトモバイル最適料金プランで契約した。

モバイルルータ+MVNO SIMな感じを用意しようかな – お茶漬けぶろぐ

 

んで、2ヶ月くらい経ったので雑感をば。

 

まず、電源。

思ったより電池が保たない。ガンガン減っていく。想定用途は常時接続ではないんだろうなぁと思う。必要なときに電波を掴んで電波を発して、ってするんだろうな。

50%くらいまで減ったら充電しているのだけど、1日は全く保たず、日に2回くらい充電している。という事は100%ぶんくらい平然と使い切っているという事だ。

つっても、平日は目の前に充電器が常にある環境で生きているので、特に不便は無い。

ちなみにGL04Pを使っていた頃感じていた、発熱問題については特に問題無かった。

 

次、通信。

結構遅い。Youtubeで動画をなんとなく見る分にはそこまで気にはならないけど、それより普通のネットブラウズの方が厳しい。画像はもとより、レイアウト(CSS)が降ってくるまでの待ち時間がストレスフル。

この遅さがルータ由来なのか回線由来なのかは未調査だけど、どうせ回線由来なのでは?と思っている。

取り敢えずMVNOの回線提供元であるドコモSIMを挿してみようと思ったけど、microSIMを1枚も持っていないので試しようがない…。

データ通信回線を1本契約しようかなと思っても、定期契約ありで1900円/月、定期契約なしで3400円/月(どちらもシェアオプション)。まぁまぁ良い値段するのよね~。定期契約なしで2ヶ月くらい契約してみるのも良いかもだけどね。

あんままともに考えてないけど、そういえばL-04EがmicroSIMだったような気がするので、復活させて挿して見るってのもありかな。

 

最後、NETGEAR AC785本体

1万円しないやつだから、当然だし望んではいけないんだけど、安っぽいよね。

ボタンがパカパカ。ぎっしり感が一切無い。バッテリーカバーがしっかり閉まった感が薄い。

 

はい、今後。

遅さの理由を見つける。デバイスを変えたり回線を変えたりしよう。

それと、普通に安っぽくて物欲が一切満たされないので、ルータの新調。もっと重くていいので、しっかりしたものがほしい。

 

…と思っていたけど、結局、家族と一緒の回線で使っていくのがしんどいという話なので、そこを独立しようと思うと、つまりそもそもモバイルルータ不要なのでは?という気持ちになってくるな…

まぁそのへんは追々って感じ。17歳。(?)

 

モバイルルータ+MVNO SIMな感じを用意しようかな

理由は2つ。

ひとつは、家族でシェアしている通信容量を気にしながら通信しているのが微妙にしんどい事。

もうひとつは、久々にモバイルルータを使ってみたい事。

2012年頃、今は亡き(?)EMOBILEのLTE回線を契約した。当時はドコモでSC-02Cを使っていたのだが、この端末はLTE通信に対応しないため、新しいLTEとかいうのに触れてみたいと思いつつも、機種変更するお金も無かった折に(分割購入なので、当時まだ払い切っていない)、外側だけLTEにして内側は無線LANの速度になれば、3G端末を使っていてもLTEが体感できるのではないか?と思って、ドコモのデータ通信を絞って、EMOBILEと契約したのだ。

当時は長く使っていくつもりだったので、ドコモドメインのメールでやっていた諸々を、EMOBILEのメールサービスに移行したし、次世代モデルのモバイルルータが出ればそれらしい時期に機種変更するつもりだった。

しかし、丁度2年が経って契約更新?となっていた頃には、その熱はもうすっかり冷めてしまっていた。

(SC-02Cの支払いが終了したタイミングでスッとL-04Eを購入していたため)LTE対応端末が普通に手に入っていた事、それから、EMOBILEと契約した時に入手していたモバイルルータGL04Pが普通に使いにくかった事が理由だ。

音声通話は3大キャリア、データ通信はEMOBILEやWiMAX等のモバイルルータで、みたいな環境にしていた人がこぞって言うのは「電源の管理が面倒」という事。

確かに、スマホ(或いはタブレット)単体で運用するよりも、1台多くの端末電源を管理しないといけないので、労力は増える。とは言え、モバイルバッテリー(当時は大容量モノが少なかったので、5000mAh程度のものを複数持ち歩いていた)があれば特に問題なく充電できていた。

不便を感じたのは、熱処理。いつもモバイルルータ本体は鞄の中に入れて持ち歩いていたのだけど、本体がめっちゃ熱を持ってしまって、まともに通信できる状態じゃなくなってしまうのだ。しかもその状態になると充電すらまともにできない。とにかく冷やす必要があるが、屋外で冷やす道具なんて持ってやしない。モバイルバッテリーを組み合わせて、アクティブクーラーを自作しようかと思ったこともあるけど、結局やらなかった(工作するよりもゲームに時間を費やしていたかった)。

で、冷えるまでは通信ができないので、スマホそのものが使いにくい感じになってしまう。

という訳で、データ通信を外側に出しておく運用は、EMOBILEの2年契約が満了を迎えるタイミングで、やめてしまった。

さて、現在は、家族で10GBの通信容量をシェアして(我が家は全員ドコモなのだ)使っているが、殆どの通信は自分1人が食いつぶしている状態。とは言え、通信制限にかかるほど大胆に通信することは殆ど無い。稀に、新幹線の中で映画が見たいと思い立って、急に数GBの通信をするとか、そういう事はしないでもないけど。

要は自分がほんの少しだけ気をつけていれば、それで問題なく運用できる状態であった。

ところが、ここ最近どうも様子が変わっていて、これまで殆ど通信していなかった家族が、月によって多くなる事がちょいちょいある。それを察知して、自分が調整して容量を残すようにしていたけど、何回か通信制限を食らってしまう事があった。

それならいっそ、自分のデータ通信だけ外側にまた追いやってしまって、家族の契約はもう少し小容量…と言っても5GBプランしか存在しないが、その程度にしても良いのではないかと思うようになった。

つまり、家族みんなはみんなで好きにやってくれ、自分だけ抜けさせてもらう、みたいな感じだ。ドコモドメインメールだけは残そうと思ってるので、データだけ逃がす。

幸い、今はMVNOの選択肢も多く、割安で使いやすい。

で、問題は端末をどうするかという話。基本線の利用はドコモで良いと思う。普段の利用からそうたくさん通信する訳ではないからだ。使うときは一極集中だし、それかテザリングとかなので、メインのスマホで使うことを強制する必要はない。

LTEが使えるノートPCというのも魅力的だが、1年ほど前にDellのXPS9360を購入したので買い替えは流石に時期尚早。

そんで、2012年当時よりもモバイルルータの省電力性能も向上しているだろうし(?)、またそういう環境にしてみても良いのではなかろかと思った次第だ。

考えているのは、回線がエキサイトモバイルの最適料金プランで、端末はNETGEARのAC785という組み合わせ。

使わないときは多分とことん使わないので、使用量に応じて料金が変わっていってもらえると管理も楽ちんで良い。容量増えた時のコストだけ言えば勿論最安ではないけど、管理コストも含めればコスパはめっちゃ良いはず。

端末選択は結構てきとうで、安物過ぎないこと、聞いたことあるメーカーであること、ドコモ系MVNOが利用できバンド的にも問題ないこと、くらいしかこだわってない。

Huawei製品が沢山目につくが、2012年頃に使っていたものがHuawei製だったのでなんとなく敬遠。

NECのAterm MR05LNがデュアルSIMいけてまあまあ使いやすくていいよ、みたいなのをよく聞くんだけど、そういえばNETGEARって名前よく聞くけど使ったことないなっていう、NECに何のいわれもない理由で排除してしまった(自宅の固定回線ルータにずっと使ってたのよね、NEC)

というわけで、何を選ぶのか決めてしまっているので、すぐにでも契約できるのだが…

ここ最近出費がかさんでいること、それから、もう少し通信容量をウォッチしてから決めようという気持ちでいる。

特に後者は、これまでは月末近辺になって「そろそろだぜ」メールが来て、マジ!?って感じで確認して、あ〜確かにという気持ちになってそこから調整するという流れだったので、状態の分析を全然してないのだ。

半分以上は好奇心で通信環境変えるって話なので実益はぶっちゃけ薄くとも良いけれど、一応ね。

契約したらまた書きます。

コンパクトでカスタマイズできるメカニカルキーボードKUMO

Kickstarterで資金調達中のプロジェクト。

キーの配置が気分で気軽に交換できる楽しそうなやつ。

よくある自分で組み立て系のキーボードは、半田ごて片手に、気合を入れて毎スイッチについてソルダリングしないといけないものが多いようだけど、こちらはぐいっと押し込むだけっぽい。

 

また、レイアウトはWeb上で自由にカスタマイズできる。どうやってキーボードに反映させるかはようわからんかった。

レイヤー機能を持ち、レイヤーをトグルさせてキーの振る舞いを変更させながら使うみたいだ。ITmediaの記事によると、レイヤーは15枚まで使えるようだが、そんなにたくさん管理し切る自信が無い。Steam Controllerにも似たような機能があったが、2枚までで記憶が限界。

そして見て分かる通り、44キーのコンパクトな製品で、HHKBみたいなのを彷彿とさせるけど(スイッチが全然違うけど)、試しにレイアウト作っても、気に入らなければ変えてしまえば良いのだ。

キーボードのキーが少ないということは面積も少ないという事で、つまりは手が動く範囲が小さくなるため、手首への負担もかなり少ないはず。自宅でメインで使っているのがフルサイズのリアフォってあたり、説得力無いけど。

 

デフォルトではKailh製のCherry MX互換スイッチが付属してくる。スイッチ種別は3種から選べるようだ。が、これは自分で用意しても良い。気分でスイッチを変えたって良いのだ。

 

ハードウェアのみならず、ソフトウェア(レイアウト)まで含めて、自分で育て上げる事と、手軽さの共存したバランスの良い製品という印象。

 

ところで、上記見ればわかるとおり、資金調達は未達成なのである…

そしてこのプロジェクトはAll or Nothingのため、2週間と少し後の期限たる8/18(土)の1:48までに残りの25%程度が集まり切らなければ、無かったことに……

残りのプレッジは150USDのプランしか無いので、とすると更に145人くらい集まらないといけないのか。

最終日付近になったら駆け込みがあるだろうけど、そんなに沢山集まるかな~~~どうだろう

印刷禁止サイトを印刷する

下書きにおいてあったけど公開してなかったシリーズ。

 

日本電気技術者協会の解説講座、学生時代は結構お世話になったんだけど、研究で何度も見に行くうちに、あーこれ印刷して机にでも貼り付けておきたいなと思うようになった。

でもここ印刷禁止なのよね。

 

当時は大学でやってる研究が目的で印刷したかったんだけど、著作権法を眺めてると「授業の過程における使用に供することを目的とする場合には、必要と認められる限度において、公表された著作物を複製することができる」って記述があるんだよね。

研究も、履修登録を要する仕組みなので、「授業」の一環だよね!と解釈すれば、複製可能なはず。あくまで個人の勝手な解釈です。あと当該サイトに印刷に関する記述がぱっと見つけられないのも怖い。

 

という訳で、てきとうにソースコード眺めてると、window.onbeforeprintとかいうものが。

これ、最初はerase関数を実行するようになっているので、これを別ので再定義してしまえば良いのでは?と発想。

CSSでbodyにdisplay:noneを設定しているみたいなので、これをblockにしてしまえ

というわけで

window.onbeforeprint=function(){
document.body.style.display='block';
};

これであとは印刷し放題

 

ソース読めばそれとなくわかるし、大して難しい事もしてないけど、本当におkなのかは知りません。JSが読み書きできると、Webに関するいろんな事ができるよ、の一例でした。

kindle paperwhite買ってみた

別段すごく安くなってたって印象ではないけど、こないだのプライムセールで多少安くなってたので、買ってみた。

Wi-Fiモデル、キャンペーン情報無し。

もともと、買うならキャンペーン情報は無しだなと思ってたし、3Gモデル楽しそうだなとは思ってたけど案外価格差あるしで、取り敢えずエントリーしてみるのに丁度よいモデルを選んだつもり。

一応画面保護フィルムと、ぱたぱたのカバーも用意(Amazon純正)。スクリーンに対する防御が2重になっちゃってやり過ぎ感もあったけど。充電器はスルー。USB microBで充電できるので、わざわざ専用に用意する意味がない。

 

 

使ってみた感じ、やっぱ画面はきれいだ。画素密度もきちんとあるので。それから、ぱたぱたのカバーはスマホも含めて一切使ったことが無いんだけど(持つ手を制限される構造が気に入らない)、でもカバーの開閉でkindleのスリープが自動で切り替わるのはなかなか快適。

一週間ほど使ってみて、思ったより電池が持たない。別に画面輝度最大にしてるって訳じゃない。必要な時以外は輝度最低にしてるし、必要なときも半分以下くらいしか光らせてない。それでも、日に2時間程度の利用で、電池残量表示が目減りしていく印象がある。印象なので、事実からは大きく離れているかもしれないけどね。

 

 

さて、kindle使って外で気軽に読もうと思ってたのは、物欲を刺激されない(取り敢えず読めればいい)ラノベやコミック、あとてきとうな読み物、それから、できたらお勉強の本も読めたらなーとか。

 

いざ買ってみて思ったのは、結論から言うと、元々が文庫本サイズじゃないとかなり厳しいということ。

加えて、(これは前からずっと思ってるけど)画像として配信される書籍はもっと厳しい。

 

まず読んだのはラノベ。そもそもサイズが近いという事もあり、また文字データとして配信されているから字もきれいで、大変読みやすい。惜しむらくは、表紙やカラーページも白黒で見るしかないということ。まぁその辺は他のデバイスで見ればいいんだし、そこはぶっちゃけ中身に大きな影響を与えない。挿絵はそもそも白黒で印刷されているし。

ちなみに妹ちゃん推しです。

 

次に読んだのはコミック。長く続いているからモノを集めるのはしんどいけど気楽に読みたくなるもの、という事でNARUTOをチョイス。

大判コミックじゃないのはわざと。丁度いいサイズを狙った結果。物欲刺激されないが読みたいというタイトルがぱっと見つからなかったのもある。

これもかなり読みやすかったが、見開きページがつらい。一応画面下の方に「全体のうちのこの辺がうつってますよー」という表示はあるのだが、これがあるからと言って見えていない範囲が見えるようになる訳じゃない。

 

次はこちら。

結城浩著、暗号技術入門。もとはA5判らしく、そんなに大きくないのでいけるかなと思い。

しかしこれが一番キツい。文字がめちゃくちゃ小さい上に、凄く薄い。画像として配信されているので、調整しようもない。

薄くて何も見えない

 

正直かなり目を凝らして読む状況で、全然無理。

電子版で買ってしまったので、どうやって読もうかめっちゃ悩んでいるところである。

 

きちんとものを選べばかなり快適に読める事がわかったのは、大変収穫だった。つまりは、画像としてではなくテキストで配信されているコンテンツは、大変快適。

 

今は、ラノベとして

これを読みつつ、読み物として、じわじわと

これを読んでいる。

まぁなんていうか、予想できていた事だけど、めっちゃ気軽に迂闊に本を買っちゃうので、Wi-Fiモデルでよかったなって思うよ。無限に購入しちゃうもん。

改行コードを変換する

nkfでokだけど、メモ書き。ふと必要になった時は忘れているのだ…

 

Linux環境で吐き出した計算結果ファイルをWindowsに持ってきてそこで処理しようとすると(Linux環境で開発した自前ツールで計算した結果をWindows環境にインストールしたMATLABでグラフ化したかった)、改行コードの違いでクソ面倒な事に…

 

改行コードはCarriage Return(CR)とLine Feed(LF)の組み合わせが存在して、MacはCR、unix系(Linux)はLF、WindowsではCR+LFと完全にバラバラな状態となっている。どれかに統一すりゃいいじゃんという気持ちでいっぱい。

 

nkfでは、-L[uwm]オプションで改行コードの変換ができる。

-Lu→unix(LF)

-Lw→Windows(CR+LF)

-Lm→Mac(CR)

 

今回はWindows(CR+LF)の形に変換したかったので、

nkf -Lw –overwrite hoge.txt

みたいな感じで。(オプションで–overwriteをつけると上書き保存される)

 

Kumanの3.5インチモニタを回転させる

これ

今回はRaspberry pi 3 model Bに挿してつかう。

付属のCDにそのまま使えるRaspbianのイメージが入っているが、これを使うのは何されるのかわからんな?という声もよく見る。しかしまぁ、どのネットワークにも接続しないで使う予定だったので、ドライバ等の自前導入はせず、付属のイメージを使うことにした。

で、用途上はモニタを90度回転させると丁度良い感じなので、回転させる。

 

類似の商品が多いのでてきとうに調べていたら、2種類の情報があって、/boot/config.txtに

・display_rotate=90

・lcd_rotate=90

とかを書くとかいうのを得た。

ただし、前者だと画面は回転するがタッチスクリーンが回らなくて操作しんどい、後者だといい感じ!みたいな論調ばっかり。この口ぶりから分かる通り、うまくいきませんでした。lcd_rotateだとそもそも画面が回転しなかった。(要は別製品の情報なのかね)

 

Kumanのこの製品はWaveshareの3.5inch RPi LCD (A), 320×480 – waveshareのコピー製品、という情報を得たので(下の方にAnti-PiracyとかThis product is protected by patentとか書いてあるけど気にしない…)、Waveshareのそれっぽいサイトを眺めることにする。

5inch HDMI LCD -Waveshare Wiki

Screen orientation settings及びTouch screen calibrationの項で全てが解決した。キャリブレーションはメニューにも選択肢が最初からあったのでそっちを使っても良いかも。

 

きちんと一次情報を当たろうねとか、自前できちんと環境構築しようねとか、思いました(いつもの事では?)

Raspberry Pi 3 Model BでBrother HL-L2300を使う

環境はRaspbian(久々のDebian系だ)

 

一先ずCUPSを入れておく

$ sudo apt-get install cups

brotherから公式に提供されているドライバはi386なのでRaspberry piでは使えない…

という訳でぐぐってみたところ、それっぽいものをgithubで発見。

pdewacht/brlaser – github

対応プリンタ一覧にHL-L2300は無いが、HL-L2300Dがある。同一モデルのロケール違いっぽいのでそのまま突っ込む。

ビルドに必要なものをインストールしてから、REAMD.mdの通りに操作

$ sudo apt-get install build-essential
$ sudo apt-get install cmake libcups2-dev libcupsimage2-dev
$ git clone https://github.com/pdewacht/brlaser.git && cd brlaser
$ cmake .
$ make
$ sudo make install
$ sudo service cups restart

プリンターを接続し、CUPSのWebインターフェイスからプリンターを追加。

brlaserをインストールすると、モデル一覧にBrother HL-L2300D, using brlaser v4が出現するので、ここから追加すればおk

 

このままlprコマンドから印刷しようとすると怒られる。

$ lpr -o fit-to-page ./test.pdf
lpr: エラー - 利用可能なデフォルトの宛先がありません。

登録してやれば良い。一覧をlpstatで表示して、これをlpoptionsで指定する。

$ lpstat -p
プリンター Brother_HL-L2300_series は待機中です。2018年03月02日 00時55分09秒 以来有効です
$ lpoptions -d Brother_HL-L2300_series
copies=1 device-uri=usb://Brother/HL-L2300………(以下略)

あとはlprコマンドで普通に印刷できる。

PhantomJSで遊ぶ

Javascriptでいじれる、webkitベースのヘッドレスブラウザであるPhantomJSでスクレイピングを行う。

だいぶ前に、ファミマTなクレジットカードのログイン画面がクソ認証を導入したのでログインにマウス操作が必要になってしまった。どうせ見に行く情報も限られているし、この際スクレイピングしてしまおう。

クソな画像認証

 

 

まずはログイン画面の仕組みを探す。いじってみると、正解の記号(ここでは星)のみ掴めるようになっていて、他はただ置いてあるだけ。droppable関係を見てみれば良いのかな?とか思いながらソースコードやインスペクタとにらめっこしていると、「画像認証に必要なJS」とかいういかにもなコメントの下にjsファイルが3つくっついていた。

これを見てみる(HTMLにもJSにも丁寧にコメントが書いてあるので解釈が捗る)と、droppableの設定の下にdropした時の挙動が書いてあり、その辺の動作を真似てしまえば画像認証を突破できるのでは?という気持ちに。…突破も何も、ただソース読めば誰にだってわかる内容である、難読の工夫は見られないし、ご丁寧にコメントで可読性もバシバシ向上。

 

という訳でPhantomJSのお話。

てきとうなjsファイルを作成して、それをphantomjsに食わせると動く。

$ sudo pacman -S phantomjs
$ cat hello.js
console.log('hello phantom');
phantom.exit();
$ phantomjs hello.js
hello phantom

 

 

取り敢えずログイン画面を表示してスクショをとってみるのが以下。

var page = require('webpage').create();
page.open('https://wis.pocketcard.co.jp/netservice/login?type=ft', function(status) {
 console.log(&quot;Status: &quot; + status);
 if(status === &quot;success&quot;) {
  page.render('screen_shot.png');
 }
 phantom.exit();
});

 

実際にはページ遷移を挟むので参考URLを見ながらそれらしいものを書いたのが以下。今月の請求額をぴょろっと吐き出して終了する。

var page = require('webpage').create();

page.onInitialized = function() 
 page.evaluate(function() {
  document.addEventListener('DOMContentLoaded', function() {
   window.callPhantom('DOMContentLoaded');
  }, false);
 });
};

var funcs = function(funcs) {
 this.funcs = funcs;
 this.init();
};
funcs.prototype = {
 init: function() {
  var self = this;
  page.onCallback = function(data) {
   if(data === 'DOMContentLoaded') self.next();
  }
 },
 next: function() {
  var func = this.funcs.shift();
  if(func !== undefined) {
   func();
  } else {
   page.onCallback = function(){};
  }
 }
};

new funcs([
 function() {
  page.open('https://wis.pocketcard.co.jp/netservice/login?type=ft');
 },
 function() {
  page.evaluate(function() {
   $('#username').val('USERNAME');
   $('#password').val('PASSWORD');
   $('#imgCertf').val('1');
   $('#command').submit();
  });
 },
 function() {
  page.render('out.png');
  var seikyu = page.evaluate(function() {
   return $.trim($('div.table-cell-width501:first div span.bold').text());
  });
  console.log(&quot;seikyu:&quot; + seikyu);
  phantom.exit();
 }
]).next();

 

 

 

ページ内でJSな処理を行うには、page.evaluate(function(){処理});みたいな感じでやれば良く、データを取り出すには、その処理からreturnしてあげれば良い。単純だ。

 

スクレイピングと言えば、コニカミノルタの強そうな複合機の消耗品残量を見れるWebページから情報を取り出してチャットツールに放り込むスクリプトを書いた事があるけど、その時はScrapyを使った。Python何もわからんところからスタートしてやっていくのとてもとてもしんどかったし、Scrapyなんだかんだ複雑だった…(しかもそのWebページはJavascriptで情報更新だったのでただ見に行くだけでは情報は得られず、ScrapinghubのSplashを使って情報を取得したのだった)

Javascriptは遊んだ経験が多少あったので、違和感なく簡単にコードが書けてよかった。

ただ、ES6の構文(アロー関数とか)を何も言わずに使うと処理も進まず思考停止みたいな感じになってしまってつらいことがあった。しょうがないのでES6の構文は使わずに上記コードを書いていたけど、github(ariya/phantomjs)では

Hi. Answering to your questions:

  1. When we solve all issues listed here #14458
  2. Yes. 2.5 will have full support for ES2015.

とある。pacmanで降ってきたのは2.1.1だったし、gihubの最新Releaseも2.1.3ということで、まだのようだ。

それからエラーを何も吐いてくれない感じだったので(ここでは閉じカッコの対応を間違えるというただのSyntax errorだったけど)参考URLの通り、nodeに読み込ませるとスッと教えてくれた。なんなんだろ。

 

 

参考URL:

PhantomJS でログインが必要なページでも自由自在にスクレイピング – 凹みTips

CasperJS/PhantomJSでシンタックスエラー行を取得する方法 – yohgaki’s blog

 

 

蛇足:

研究室では今までMajestouch NINJA(茶軸)を使っていたんだけど、追加で自分用にリアフォ(104UB-S)を買った。本当は少しお値段ケチって静音モデルでない方(104UB)が欲しかったんだけど、どこにも在庫が無くてネット販売でも取り寄せだったので、諦めて静音の方。

打ち心地は勿論最高に良いです。ずっと触っていたくなる…という訳でこのキーボードは研究が落ち着くまで研究室に置きっぱなしにしておく()

んで、このリアフォで書く最初の(趣味の)プログラムがこれ、というわけ。最近ずっと研究関係のものしか書いてなかったので時間があいてしまった。これからよろしくね♡