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コマンドで普通に印刷できる。

GPD WINとArchLinuxInstallBattle

今更な話な上に大した内容でもなかった感。(この記事、実は何ヶ月も前に書いてあったんだけど、どういう訳か下書きのまま放置されてたんだよね、それを今回公開しただけという…)

 

本体ストレージをいじらずにいきたいので、小型のUSBメモリを用意して、そこにインストールする事にする。

BIOSでなくUEFIな環境にインストールする事を念頭に作業を進めれば特に問題は無い。

 

以下、引っかかったところとかをピックアップ。

 

・Live環境の起動時にUSB error -110を吐いて死ぬ

最初の見た目の状況としてはUSBメモリのラベル名が正しく設定されてない時に近かったが、USBメモリを見失って起動できなくなっているという状況の方が正しかった。

よくよく見てみるとUSB error -110を吐いて死んでるっぽかった。

usb – device descriptor read/64, error -110 – Stack Overflow

によると、要は電力が足りてないらしい。

USB3.0ポートにUSB3.0メモリを刺してるんだから動いて当然っしょと思っていたけど、何らかの理由で、電力供給が不安定になっていたみたい。しょうがないのでUSB2.0の延長ケーブルを通して接続してみたら、問題無く認識するようになった。

延長ケーブルを使うのは持ち歩きに邪魔なので、USB2.0メモリを使う事にした。

 

・画面向きがおかしいやつ

ArchWikiの通りに。

インストール後の環境にも適用するために、てきとうに設定しておく。今回はブートローダにgrubを使ったので、/etc/default/grubのGRUB_CMDLINE_LINUXにi915.fastboot=1 fbcon=rotate:1を追加しておく。

設定の適用はgrub-mkconfig -o /boot/grub/grub.cfgみたいな感じで。

 

・インストールしてからwifi-menuがdialogとかwpa_supplicantを要求するのでwifi-menuが使えない

これはGPD WINつーかただ自分がアホなだけ

Live環境からてきとうに入れておきましょう

 

GPD WINはおもちゃとして面白いと思うんだけど、外でホイホイっと使うには、入力系統がしんどくてあんまり気が乗らないんですよね。そういう意味ではGPD Pocketの方が優秀なんだけど、両方なんて買うお金は無いし、GPD WINの頃にGPD Pocketなんて知らなかったし…という

AndroidStudioいじってたらjava.lang.IllegalStateException aapt2 is missingとか言われた

環境はArchLinux

Android Studio本体はパッケージ管理でインストールしたんだけど、それが必要とするコンポーネント(つーかAndroid SDK)はパッケージ管理だったりAndroid StudioのSDK Managerだったりあやふやな状態でした。Android – ArchWikiにある通り、

Android Studio をインストールして IDE を使って SDK を管理する場合、以下のパッケージをインストールする必要はありません。

以下のパッケージってのは、android-platform, android-sdk, android-sdk-platform-tools, android-sdk-build-toolsの事。

大抵の手順指南サイトではSDK Managerを利用して管理するので、それに倣うなら、環境構築の時にパッケージ管理で上記パッケージたちをインストールするべきではなかったのだ(ArchWikiはちゃんと読みましょう)。

まぁそれはともかく、結局パッケージ管理で導入しちゃって、更新が競合したっぽくて、環境が壊れてしまった。それが原因で、開発したアプリケーションを実行するときに、Execution failedとかなんとか。java.lang.IllegalStateException aapt2 is missing的なエラーが出たのだと思われる。

aapt2が無いよ、と言っているんだけど本当に無いのかfindで検索すると、/opt/android-sdk/build-tools/27.0.0以下とかに見つかる。

Android Studio側のメッセージを見ると、26.0.2以下を探している雰囲気がしたので、それを入れなおしてみる。

具体的には、

SDK Manager→SDK Toolsのタブ→Show Package Detailsにチェックを入れる→Android SDK Build-Toolsの26.0.2が見つかるので、これのチェックを外してApply(一旦削除)→チェックを付けてApply(インストール)

みたいな感じでなんとかなった。一旦削除する意味があるかは微妙だけど、結局うまくいったのでまぁいいや。

 

なんかノリでAndroidアプリを作ってみてるんだけど(勿論Javaは何一つ勉強してないです)、なんかAndroidStudioの動作が大変鈍重だし(比較対象はQt Creator)、UIはちっちゃくて見えないし、中々厳しい世界だなと思いました。まる。

NASからうっかり消してしまったデータを復元する

保存していた録画データを操作ミスで消してしまった。あまりにもつらい。

まとめ。

・extundelete:exFATに対応していない

・testdisk:目的ファイルは復元されたっぽいがデータが完全に壊れている

・photorec:死ぬほど時間がかかるが復元される、ただし目的のファイルがどれかは不明(最終的に目的データは復元できなかった)

 

 

以下、雑多な記録。

 

extundeleteが良さげだったけど、exFATに対応していないようなので別の手を探すと、testdiskが見つかる。どうだろ?

取り敢えずインストールして実行してみる。十字キーとEnterキーで操作できる。

$ sudo pacman -S testdisk
$ sudo testdisk

起動するとまずログを保存するか聞かれるので、取り敢えずCreateを選んでおく。

次にディスク選択画面に入るので、目的のディスクを選ぶ。

Select a media (use Arrow keys, then press Enter):
>Disk /dev/sda - 128 GB / 119 GiB - PLEXTOR PX-128M5S
Disk /dev/sdb - 4000 GB / 3725 GiB - MARVELL Raid VD
Disk /dev/sdc - 2000 GB / 1863 GiB - WDC WD20EZRX-00D8PB0

NASとして使っているのは/dev/sdbなのでこれを選択。するとPartition TableのTypeを選ぶ段になるが、正解がどれだかよーわからん…

Please select the partition table type, press Enter when done.
[Intel ] Intel/PC partition
[EFI GPT] EFI GPT partition map (Mac i386, some x86_64...)
[Humax ] Humax partition table
[Mac ] Apple partition map
>[None ] Non partitioned media
[Sun ] Sun Solaris partition
[XBox ] XBox partition
[Return ] Return to disk selection

Noneが自動選択されていたので、そのまま進んでみると、なんかコマンドメニューみたいなのが表示されるので、

[ Analyse ] Analyse current partition structure and search for lost partitions
>[ Advanced ] Filesystem Utils
 [ Geometry ] Change disk geometry
 [ Options ] Modify options
 [ Quit ] Return to disk selection

Analyseする。

Analyseが終わると、Quick Searchが選べるようになるので、取り敢えずそれを選ぶ→Structure:Okの表記が出る

パーティションが正しく発見されたっぽい

Disk /dev/sdb - 4000 GB / 3725 GiB - CHS 486382 255 63
 Partition Start End Size in sectors
 >P exFAT 0 0 1 486382 59 13 7813730560

ので、Pを押してファイルリストに入って、そのまま目的のファイルを探す。

見つけたら画面の指示に従ってコピーすると復元されるはずだ…………

 

しかし、復元された動画データは、完全に壊れていた…(再生できなかった)

 

もうひとつ、testdiskと一緒に入ってきたPhotoRecというものがある。どうも、testdiskはファイルではなくディスクの破損を修復するのがメインの目的で、ファイルについてはPhotoRecを使えという事みたい。ArchWikiには「ファイルシステムは無視して素のデータを探し当てるので、再フォーマットされたり完全に破壊されたファイルシステムやパーティションテーブルでも動作」とのことで、強い(こなみ)

それから、どうやらこのソフト、復元できるファイルを手当たり次第に復元しまくるらしい。また、このソフトが知っているファイル形式に限って復元可能である…とは言え、File Formats Recovered By PhotoRec – CGSecurityによれば大抵のファイルは問題なく復元可能である。中にはNintendo DSのゲームイメージであるnds形式なんかもあるし、結構強そう。

しかし、4TBのボリュームを選択しているからか、FilesystemAnalysisで異常に時間がかかった。ファイルが存在しない領域のみにしぼって復元するはずだが、結局5~10時間くらいかかっていたっぽい。

その後はドカドカ復元されていくので、保存先容量がいっぱいいっぱいにならないように順次チェック。

というのも、復元されたものはファイル名が無いので一つ一つ再生してみて確認しないといけないのだ。結構めんどい。

再生可能ファイルと再生不可能ファイルがそれぞれあったが、多分普通にデータが壊れている。空き容量に対して復元されたデータ量が3倍くらいあったので、一部分しか復元できなかったんだろう(ファイルサイズはそれらしいサイズだったので、重複したゴミデータでも含みまくっているのだろうか、と)

傾向としては、ファイルサイズが500MB程度までのもの(小さすぎるものは除外)だと再生可能な事が多かったように感じる。GBのオーダーまでいくと大抵の場合再生できなかった。断片化とかしてるともうダメなんだろうか?ファイルシステムとか全然勉強してないのでよーわからん。

 

取り敢えず、ファイルの復元手段を得たのは良いが、目的のファイルは復元できなかった。testdiskの時点で復元したものが再生不可だったので、そもそも復元不可だったのかもしれない。残念。

シェルで直前の入力を使う

なんか使いたくなったときはいつも忘れてるのでメモ。

まず、直前に入力した引数を使いまわすには!$を使う。

$ mkdir hoge
$ cd !$

直前に入力したコマンドそのものを使いまわすには!!を。

$ pacman -Syu
$ sudo !!

!!が直前の入力に置き換わるような感じなので、次のような使い方もできる。

$ sudo eject
$ !! -t

ejectコマンドは-t, –traycloseをつけると光学ドライブのトレイを閉じてくれる。

Linuxで音楽CDをリッピング

今メインに使ってるWindows PCにディスクドライブが装備されていないので、リッピング部分のみLinuxマシンにやらせて、あとの変換とか再生行程は従来どおりにやりたい的な感じ。

当初/dev/sr0からddで引っ張り出せばいいだろと思ってたけどダメらしい。てきとうにぐぐった結果できそうだったのでやってみる。

 

CDを挿入後lsblkにエントリが追加される

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 256M 0 part /boot
├─sda3 8:3 0 111G 0 part /
└─sda4 8:4 0 7.8G 0 part [SWAP]
sdb 8:16 0 3.7T 0 disk /mnt/r_array
sdc 8:32 0 1.8T 0 disk
sr0 11:0 1 324.2M 0 rom

ケツにあるsr0がそうだ。cdrdaoでリッピング。

$ sudo cdrdao read-cd --device /dev/sr0 --read-raw --datafile ZMCZ-11306.{bin,toc}
Cdrdao version 1.2.3 - (C) Andreas Mueller <andreas@daneb.de>
/dev/sr0: HL-DT-ST DVDRAM GH24NS50      Rev: XP01
Using driver: Generic SCSI-3/MMC - Version 2.0 (options 0x0000)

Reading toc and track data...
~以下略

tocファイルをcueシートに変換。

$ toc2cue ZMCZ-11306.{toc,cue}

できあがったbinファイルはエンディアンが異なるっぽいのでddで変換する。このまま再生するとホワイトノイズにしかならない。

$ dd conv=swab if=./ZMCZ-11306.bin of=./ZMCZ-11306.bin.swap

以上でリッピングは終了。

 

ここまででbin+cueな状態にできたので、完了ということで。あとはてきとうに、煮るなり焼くなり。

 

ちなみに上記で使っていたZMCZ-11306はメイドインアビスのED。

あとOPも買ったよ

原作コミックスも全部買った。最高に心がきゅうっとするのでおすすめです(?)

ひどい広告記事になってしまった…

特定文字列を含むファイルを検索する

NOMP(node-open-mining-portal)を使ってオレオレプールをつくってひっそりとソロマイニングしていたけど、恐らくsegwitが有効化されてから、getblocktemplateがエラーでこけるようになってしまった(全然気づかなかった)

ぐぐってみると、bitcointalkにドンピシャの話が。getblocktemplateの引数に”rules”:[“segwit”]を追加しなさい、と。

なるほど~と思ってgit pullとかnpm updateとかしてみたけど、なんだかうまく取り込まれなかった気がした…ので、自分でなんとかしてみることにした。

 

というわけで、getblocktemplateという文字列を含むファイルを検索する。

grep一発でおk

$ grep -rnw hoge -e "PATTERN"

今回は「カレントディレクトリ内にgetblocktemplateという文字列があるファイルを検索する」のが目的なので、

$ grep -rnw . -e "getblocktemplate"

あとは適当に修正していけばなんとかなった。よかったよかった。

Nagiosでサーバ監視〜導入編〜

運用しているサーバや常時稼働しているマシンを監視したいという願望はあったのだが、偶然Nagiosというものを知ったので、取り敢えず使ってみることにした。

 

長くなってしまった気がするので、導入編と利用編で分けようと思う。こちらは導入編。

 

環境はArch Linux(ただしsystemd-nspawnでコンテナ立ててその上に設置する。ホイホイ実験できて便利だね)

基本的にはいつもの通りNagios – ArchWikiで。

 

Nagiosは本来はWebサーバは必要としないのだが、Webフロントエンドがあるので、Webサーバを用意しておいた方が便利に使えるだろう…ということで、ArchWikiではnginx, php, php-fpm, fcgiwrapが良いと思うよって書いてある

ただ、nginx全然使い慣れてないし、nginxで四苦八苦することは今回の趣旨から外れるので、ApacheでPHP使えるようにして…みたいな感じで。省略。ちなみにNagios入れたあとPHP動かなくて苦しんだけど、どうやって解決したのか全く覚えてないので、自宅サーバ新調してから手順をまたまとめ直します()

 

公式リポジトリにnagiosはいらっしゃらないので、nagios – aurのお世話になる。また、monitoring-pluginsが必要になるやろって書いてあるので、それもインストールしておく。

$ yaourt -S nagios
$ sudo pacman -S monitoring-plugins

monitoring-pluginsをnagiosから使えるように設定する。具体的には、/etc/nagios/resource.cfgの$USER1$が向いている先をmonitoring-pluginsに変更する

#$USER1$=/usr/share/nagios/libexec
$USER1$=/usr/lib/monitoring-plugins

コンフィグファイルをsampleをもとに作成する(つってもコピーするだけ)

$ sudo cp /etc/nagios/cgi.cfg.sample /etc/nagios/cgi.cfg
$ sudo cp /etc/nagios/resource.cfg.sample /etc/nagios/resource.cfg
$ sudo cp /etc/nagios/nagios.cfg.sample /etc/nagios/nagios.cfg
$ sudo cp /etc/nagios/objects/commands.cfg.sample /etc/nagios/objects/commands.cfg
$ sudo cp /etc/nagios/objects/contacts.cfg.sample /etc/nagios/objects/contacts.cfg
$ sudo cp /etc/nagios/objects/localhost.cfg.sample /etc/nagios/objects/localhost.cfg
$ sudo cp /etc/nagios/objects/templates.cfg.sample /etc/nagios/objects/templates.cfg
$ sudo cp /etc/nagios/objects/timeperiods.cfg.sample /etc/nagios/objects/timeperiods.cfg

ファイル群のオーナー変更

$ sudo chown -R nagios:nagios /etc/nagios

認証情報作成(ArchWiki通りにユーザ名はnagiosadminにしてみた)

$ sudo htpasswd -c /etc/nagios/htpasswd.users nagiosadmin

/usr/share/nagiosがroot:rootだとまずいようなのでこれも変更しておく

$ sudo chown -R nagios:nagios /usr/share/nagios

Apacheにnagiosを設定する。ArchWikiではPHP5使っているようだけどPHP7でもおkっぽい

$ sudo vim /etc/httpd/conf/httpd.conf
〜略〜
LoadModule php7_module modules/libphp7.so
〜略〜
Include &amp;quot;conf/extra/nagios.conf&amp;quot;
〜略〜
Include &amp;quot;conf/extra/php7_module.conf

nagios.confを読み込ませるようにしているので、無いと死ぬ。作成する(サンプルからコピーする)

$ sudo cp /etc/webapps/nagios/apache.example.conf /etc/httpd/conf/extra/nagios.conf

Apacheの実行ユーザ(http)がnagiosグループに入っていないとこれも死ぬので追加

$ sudo usermod -G nagios -a http

PHPがnagiosのWebフロントエンドを実行できるようにopen_basedirを編集する

$ sudo vim /etc/php/php.ini
open_basedir = /usr/share/nagios/share/

以上でセットアップ終了。起動してブラウザからhttp://localhost/nagiosにアクセスしよう。設定しておいた認証情報(nagiosadminとか)を使ってログインできる。

$ sudo systemctl restart nagios
$ sudo systemctl restart httpd

 

最近はあまり見なくなったフレームレイアウト

 

以上。

PHPでiCalendarなデータをパースする

PukiWikiにGoogleカレンダーのデータを表示したかったんだけど、それらしいプラグインがいまいち見つからなかったので自前で書くことにした。

Googleカレンダーでicsファイルへのリンクを取得して、それをプラグインで読み込んで、あとはてきとうにパースして整形して〜と思っていたけど、パース書くの面倒だなぁと思ってぐぐったら、File_IMCを使えば良いようなので使うことにした。

File_IMCはPearを通してインストールする…がPearもデフォルトでは入っていないのでインストールしよう。

環境はUbuntu 16.04.2

$ sudo apt-get install php-pear
$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.4.0 stable
Console_Getopt 1.4.1 stable
PEAR 1.10.1 stable
PEAR_Manpages 1.10.0 stable
Structures_Graph 1.1.1 stable
XML_Util 1.3.0 stable
$ pear install File_IMC
Failed to download pear/File_IMC within preferred state "stable", latest release is version 0.5.0, stability "beta", use "channel://pear.php.net/File_IMC-0.5.0" to install
install failed
$ pear install File_IMC-0.5.0 [Ret:1 16:11:41]
Cannot install, php_dir for channel "pear.php.net" is not writeable by the current user
$ sudo pear install File_IMC-0.5.0 [Ret:1 16:11:54]
downloading File_IMC-0.5.0.tgz ...
Starting to download File_IMC-0.5.0.tgz (32,161 bytes)
.....done: 32,161 bytes
install ok: channel://pear.php.net/File_IMC-0.5.0

以上でFile_IMCのインストールはおしまい。

 

使ってみる。

require_once('File/IMC.php');
$ical = file_get_contents('うんたらかんたら.ics');
$parse = File_IMC::parse('vCalendar');
$parse->fromText($ical);
$events = $parse->getEvents();

$data = array();
while ($events->valid()) {
$event = $events->current();
$data[] = array(
'start' => $event->getStart(),
'end' => $event->getEnd(),
'summary' => $event->getSummary(),
'description' => $event->getDescription()
);
$events->next();
}

print_r($data);

startの値でソートしたければ、

foreach((array) $data as $key => $value) {
$sort[$key] = $value['start'];
}
array_multisort($sort, SORT_ASC, $data);

 

あとはてきとうに整形するなりなんなりでいいんだけど…Googleカレンダーでは場所情報が記録できるのに、File_IMCにgetLocation()つーメソッドは無い。

見たとこイベント開始/終了時刻、タイトル(summary)、詳細(description)しか拾えないっぽいので強引になんとかしてやるぜ!

/usr/share/php/File/IMC/Parse/Vcalendar/Event.phpに各メソッドが記述されているので、これをそれらしく書き換えればなんとかなるのでは?

というわけで下記コードをてきとうに追加

public function getLocation()
{
return $this->data['LOCATION'][0]['value'][0][0];
}

あとは同じ感覚で$event->getLocation()とかすれば拾い出せるはず。

PHP欠片も勉強しないで触ってもなんとかなるもんだね(目的のプラグインが作れたので)

まーセキュリティは何も考えてないんですけど