SVX日記
2016-09-04(Sun) ラズベリーパイ(pidora)でメディアサーバする、そして心地良い目覚めへ
ラズベリーパイで無線LANアクセスポイントを作り、ラズベリーパイで無線LANブリッジを作ったことにより、愛用のミニコンポ「DENONのRCD-N9」を正しく宅内LANに「有線」で接続することができた。こんな感じに。
このような構成にした動機は、RCD-N9の無線LAN接続機能が「どタコ」なことにある。無線経由でflac等を再生中、他の無線トラフィックが増えると、接続が切断され、音楽が切れるのだ。切れると、再接続まで時間がかかるし、曲の再生は最初からになってしまう。それが頻繁に発生する。
実に「音楽が途切れる」という事態に対しては、恐ろしく高いレベルの腹立たしさを感じさせられるものである。仮にも高品質な音楽の再生を謳う機器においては「極力避けるべき事態」ではないのか。無線LANは不安定だから仕方ない、などということは断じてない。TCPという仕組み上、再生が止まることはあっても切れることはあり得ない。実際、動画サイトで切れるなどという事態に遭遇したことはないはずだ。
ちょっとtcpdumpでパケットの様子を調べた限りでは、RCD-N9側のTCPスイートに問題があるようで、その点ではRCD-N9は疑うことのない超ド級のクッソプロダクトなのだが、それ以外の点は十分に及第点なので、その点はあきらめて、ラズベリーパイを噛ますことでフォローすることにしたのである。
具体的にはどうするかというと、上述の通りRCD-N9とラズベリーパイ間を有線LANで直結とし、通信の安定性の低い無線LANの通信をLinuxのNFS接続で保障してやるのである。つまりラズベリーパイ上にDLNAサーバを配置するのである。
server.itline.jp:/root # cat /etc/exports
/home/mediatomb 172.xx.xx.0/24(ro)
xxxpi.itline.jp: /root # yum install nfs-utils
xxxpi.itline.jp: /root # mkdir /mnt/mediatomb
xxxpi.itline.jp: /root # mount server:/home/mediatomb /mnt/mediatomb/
xxxpi.itline.jp: /root # cat /etc/fstab
server:/home/mrdiatomb /mnt/mediatomb nfs defaults 0 0
xxxpi.itline.jp: /root # yum install mediatomb
xxxpi.itline.jp: /root # cd /etc
xxxpi.itline.jp: /etc # diff mediatomb.conf.org mediatomb.conf
< MT_INTERFACE="NOT_SET"
> MT_INTERFACE="br0"
xxxpi.itline.jp: /etc # cd mediatomb
xxxpi.itline.jp: /etc/mediatomb # diff config.xml.org config.xml
< <name>MediaTomb</name>
> <name>MediaTomb - xxxpi</name>
xxxpi.itline.jp: /etc/mediatomb # systemctl enable mediatomb
xxxpi.itline.jp: /etc/mediatomb # systemctl start mediatomb
この後http://xxxpi:50500/にWebアクセスして、/mnt/mediatombのディレクトリを登録してやれば、RCD-N9のMUSIC SERVER機能で、flacファイル等を選択、曲を再生できるようになる。これにて、ハイパーミッドナイトサーバ(オイラは寝しなに音楽を聴くので)の完成である。
オイラは起き抜けにも音楽を聴くのだが、それにRCD-N9のアラーム機能を使っている。開始時刻を6:00に設定、入力ソースにはCDを選択、寝る前に好みのCDをトレイにセットする。そして6:40頃に気分よく起き出すのだ。
仕方ないといえば、仕方ないが、そこをサッサとあきらめたりしないのがエンジニアである。インターネットラジオ機能で、自分専用に曲をストリーミング配信することで、上記をまとめて解決してしまうのである。おそらく、インターネットラジオ配信において、最短配信距離記録ギネス更新(直線距離10cm以下)という偉業達成の瞬間ではないかと思う。
icecastは、フロントエンドサービスを行うアプリ。ウェブサーバとして振る舞い、インターネットラジオ聴取クライアントに曲を配信する。が、自らは曲を扱わず、インターネットラジオ配信クライアント(?)から曲の提供を受ける。
icesは、インターネットラジオ配信クライアント。icecastにアクセスし、icecastが配信する曲を提供する。んが、icesはバージョン2からOggVorbis形式の配信しか対応していないようで、mp3形式では配信できない。古いicesはできるようだが、そんなものを使うべきではないだろう。
上記はどれも、Icecastスイートとしてxiphという開発コミュニティで扱っているようで、ここはOggVorbisやflacの開発主体でもあるようだ。
配信形式によって、アプリの使い分けが必要なことや、配信形式が特定の形式に限定されている意味がよくわからんが、なにせflacでの配信はできず、RCD-N9も対応していないので、mp3形式での配信が妥協点である。
xxxpi.itline.jp: /root # yum install icecast ezstream
xxxpi.itline.jp: /root # cd /etc
xxxpi.itline.jp: /etc # diff icecast.xml.org icecast.xml
< <bind-address>127.0.0.1</bind-address>
> <bind-address>0.0.0.0</bind-address>
xxxpi.itline.jp: /etc # systemctl start icecast
xxxpi.itline.jp: /etc # cp /usr/share/doc/ezstream/examples/ezstream_mp3.xml ezstream.xml
xxxpi.itline.jp: /etc # find /mnt/mediatomb/YUMI_54_WITH3 -name "*.mp3" > /usr/share/icecast/playlist.m3u
xxxpi.itline.jp: /etc # diff ezstream.xml.org ezstream.xml
< <filename>playlist.m3u</filename>
> <filename>/usr/share/icecast/playlist.m3u</filename>
xxxpi.itline.jp: /etc # ezstream -c /etc/ezstream.xml
mp3ファイルを羅列したプレイリストファイルを生成し、ezstreamの設定ファイルに指定、ezstreamを起動する。この状態でhttp://xxxpi:8000/にアクセスすると演奏中の状態が確認できる。また、インターネットラジオ聴取クライアントにhttp://xxxpi:8000/streamを指定すれば、とりあえず音楽を聴くことができる。
んが、これでは不満。オイラのライブラリはflacで構築しているのだ。百歩譲ってmp3配信は許容するが、ライブラリをmp3化するのは許容できない。二重に持つのもイヤだ。そこでezstreamの「リ・エンコーディング」機能を使う。
xxxpi.itline.jp: /etc # cp /usr/share/doc/ezstream/examples/ezstream_reencode_mp3.xml ezstream.xml
xxxpi.itline.jp: /etc # find /mnt/mediatomb/YUMI_54_WITH3 -name "*.flac" > /usr/share/icecast/playlist.flac.txt
xxxpi.itline.jp: /etc # diff ezstream.xml.org ezstream.xml
< <filename>playlist.pl</filename>
> <filename>/usr/share/icecast/playlist.flac.txt</filename>
< <playlist_program>1</playlist_program>
> <playlist_program>0</playlist_program>
> <stream_once>1</stream_once>
< <!-- <encode>Not supported Yet</encode> -->
> <encode>lame - -</encode>
xxxpi.itline.jp: /etc # ezstream -c /etc/ezstream.xml
曜日によって、好みのアルバムが流れるようにし、どのアルバムを選択しても起床時刻である6:40に最後の曲の再生が終わり、その後にスプラトゥーンの「Now or Never!」もしくは「イマ・ヌラネバー!」が流れるようにしたい。要するに「あと1分!」のタイミングで「あと1分!」のBGMが流れるようにするというわけだ。
というわけで作ったのがこのスクリプト。指定されたディレクトリのflac群から、再生時間が40分未満になるように適当に間引き、最後に「あと1分!」の曲を追加し、再生時間が50分ちょうどになるよう、頭に無音時間を追加したプレイリストを作成する。そしてcron機能により、5:50分からストリーミング再生を開始。
MAILTO=""
40 5 * * 2 ./create_morning_playlist /mnt/mediatomb/YUMI_03_HEAR > playlist.flac.txt
40 5 * * 3 ./create_morning_playlist /mnt/mediatomb/MARI_15_RAINSHINE > playlist.flac.txt
40 5 * * 4 ./create_morning_playlist /mnt/mediatomb/YUMI_05_AI_HA_GENKI > playlist.flac.txt
50 5 * * * /usr/bin/ezstream -c /etc/ezstream.xml
2016-09-08(Thu) RubyGems環境をなんとかする
個人的にCUI好きなのだが、GUIが必要な時もある。そんな時はcursesだ。リモートコンソール上でセミGUIが使える。作るのもラクだし、動作も軽快。てなわけで、これまで、これやら、これやら、これやらを作って、実用に供している。
んが、いつしかRubyの標準添付ライブラリにcursesが含まれなくなってしまった。Fedoraのrubygem-xxxシリーズでの提供もない。別途、RubyGemsで入れろ、ということらしい。むぅ。
ところが、たまにしかやらないし、ちょくちょくディストリの仕様側が変わるので、いつも試行錯誤になってしまう。そこで、現時点において、うまいことRubyGemsの環境を構築できた方法を「考え方つきで」メモしておくことにした。目的は「gem install curses」を成功させること。今回はFedora24で実行している。
[root@xxx ~]# gem install curses
-bash: gem: command not found
[root@xxx ~]# dnf install rubygems
[root@xxx ~]# gem install curses
……沈黙
[root@xxx ~]# export http_proxy=http://proxy.example.com:8080/
[root@xxx ~]# export https_proxy=http://proxy.example.com:8080/
[root@xxx ~]# gem install curses
Fetching: curses-1.0.2.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
/usr/bin/ruby -r ./siteconf20160909-3344-15aufht.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h ★
extconf failed, exit code 1
Gem files will remain installed in /usr/local/share/gems/gems/curses-1.0.2 for inspection.
Results logged to /usr/local/lib64/gems/ruby/curses-1.0.2/gem_make.out
[root@xxx ~]# dnf install ruby-devel
[root@xxx ~]# gem install curses
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
/usr/bin/ruby -r ./siteconf20160909-3373-17xujbr.rb extconf.rb
checking for tgetent() in -ltinfo... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
<略>
/usr/share/ruby/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first. ★
from /usr/share/ruby/mkmf.rb:541:in `try_link0'
<略>
from extconf.rb:29:in `<main>'
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in /usr/local/share/gems/gems/curses-1.0.2 for inspection.
Results logged to /usr/local/lib64/gems/ruby/curses-1.0.2/gem_make.out
[root@xxx ~]# dnf install gcc
[root@xxx ~]# gem install curses
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
/usr/bin/ruby -r ./siteconf20160909-3509-162u4n0.rb extconf.rb
checking for tgetent() in -ltinfo... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
<略>
/usr/share/ruby/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /usr/share/ruby/mkmf.rb:541:in `try_link0'
<略>
from extconf.rb:29:in `<main>'
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log ★
extconf failed, exit code 1
Gem files will remain installed in /usr/local/share/gems/gems/curses-1.0.2 for inspection.
Results logged to /usr/local/lib64/gems/ruby/curses-1.0.2/gem_make.out
[root@xxx ~]# cat /usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log
"gcc -o conftest -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I. -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -mtune=generic -fPIC conftest.c -L. -L/usr/lib64 -L. -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector -rdynamic -Wl,-export-dynamic -m64 -lruby -lpthread -ldl -lcrypt -lm -lc"
gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory ★
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return 0;
6: }
/* end */
[root@xxx ~]# dnf provides /usr/lib/rpm/redhat/redhat-hardened-cc1
redhat-rpm-config-40-2.fc24.noarch : Red Hat specific rpm configuration files ★
Repo : fedora
redhat-rpm-config-41-2.fc24.noarch : Red Hat specific rpm configuration files ★
Repo : updates
[root@xxx ~]# dnf install redhat-rpm-config
[root@xxx ~]# gem install curses
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
/usr/bin/ruby -r ./siteconf20160909-3658-cnj5ie.rb extconf.rb
checking for tgetent() in -ltinfo... no
checking for tgetent() in -ltermcap... no
checking for ncurses.h... no
checking for ncurses/curses.h... no
checking for ncursesw/curses.h... no
checking for curses_colr/curses.h... no
checking for curses.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
<略>
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log ★
extconf failed, exit code 1
Gem files will remain installed in /usr/local/share/gems/gems/curses-1.0.2 for inspection.
Results logged to /usr/local/lib64/gems/ruby/curses-1.0.2/gem_make.out
[root@xxx ~]# cat /usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log
:
:
have_header: checking for curses.h... -------------------- no
"gcc -E -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I. -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -mtune=generic -fPIC conftest.c -o conftest.i"
conftest.c:3:20: fatal error: curses.h: No such file or directory
#include <curses.h>
^
compilation terminated.
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <curses.h>
/* end */
--------------------
[root@xxx ~]# dnf install ncurses-devel
[root@xxx ~]# gem install curses
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
/usr/bin/ruby -r ./siteconf20160909-4359-1h9o77p.rb extconf.rb
checking for tgetent() in -ltinfo... yes
checking for ncurses.h... yes
checking for initscr() in -lncursesw... yes
header: ncurses.h
library: ncursesw
<略>
checking for function curses_version in ncurses.h... yes
checking for variable curses_version in ncurses.h... no
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/usr/local/lib64/gems/ruby/curses-1.0.2/mkmf.log
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
make "DESTDIR=" clean
sh: make: command not found ★
current directory: /usr/local/share/gems/gems/curses-1.0.2/ext/curses
make "DESTDIR="
sh: make: command not found ★
make failed, exit code 127
Gem files will remain installed in /usr/local/share/gems/gems/curses-1.0.2 for inspection.
Results logged to /usr/local/lib64/gems/ruby/curses-1.0.2/gem_make.out
[root@xxx ~]# dnf install make
[root@xxx ~]# gem install curses
Building native extensions. This could take a while...
Successfully installed curses-1.0.2
Parsing documentation for curses-1.0.2
Installing ri documentation for curses-1.0.2
Done installing documentation for curses after 1 seconds
1 gem installed
2016-09-12(Mon) Fedora24でsdccしてrakipicする
先日、主たる環境をFedora24に移行したのだが、早々にPICマイコンを使って電子工作をする用事が出てきて、開発環境を整えることに。
基本、オイラはフリーのCコンパイラであるsdccを愛用しているので、Fedoraの標準リポジトリから導入すればいいのだが、Fedoraはフリーソフト原理主義なので、非フリーのライブラリやインクルードファイルが故意に外されていて、毎度ややこしい作業が必要になるのが面倒くさい。また、バージョンが上がるとコンパイラの仕様もチョイチョイ変わるので、それでコンパイルが通らなくなって悩まされることも多い……って、いわんこっちゃない。いってるそばから両方とも引っかかったワイ。
まずは、非フリーのライブラリやインクルードファイル関係。sdccのソースを持ってきて、ライブラリをコンパイルして、適切な場所にコピー……とかしようとしたが、以前のMINTと環境と様子が変わっていて何やらよくわからん。結局、非フリー除外のスイッチを外し、パッケージを丸ごと再ビルドするのが正解みたいだ。手順で言うと以下。これで、サクッとmakeが通るようになった。
# dnf install gputils
# dnf download --source sdcc
# rpm -ivh sdcc-3.6.0-2.fc24.src.rpm
# vi rpmbuild/SPECS/sdcc.spec
< %configure --enable-doc --disable-non-free STRIP=: ${OPTS}
> %configure --enable-doc STRIP=: ${OPTS}
# dnf install rpm-build
# dnf install python bison boost-devel flex latex2html lyx texlive-ulem texinfo
# dnf install gcc-c++
# rpmbuild -ba rpmbuild/SPECS/sdcc.spec
# rpm -ivh rpmbuild/RPMS/x86_64/sdcc-3.6.0-2.fc24.x86_64.rpm
< static __code char __at (__CONFIG1H) configword1h =
< _IESO_OFF_1H & // Oscillator Switchover mode disabled
< _FCMEN_OFF_1H & // Fail-Safe Clock Monitor disabled
< _OSC_INTIO67_1H; // Internal oscillator block, port function on RA6 and RA7
> #pragma config IESO = OFF // Oscillator Switchover mode disabled
> #pragma config FCMEN = OFF // Fail-Safe Clock Monitor disabled
> #pragma config OSC = INTIO67 // Internal oscillator block, port function on RA6 and RA7
最後に、自製のLinux用の秋月PICライタ「rakipic」もチョイチョイと修正。今回は、PIC16F688で赤外線リモコン信号の送信を行いたいので、ライブラリとサンプルプログラムも更新した。パッケージを置いておく。
2016-09-17(Sat) ラズベリーパイ3B(Raspbian)で電子工作を始める
先日、PICマイコンの開発環境を整えたことだし、ラズベリーパイ側をイジり始める。現在、ウチにはラズベリーパイが4台(A, B,B+, 3B)あるが、B+は無線アクセスポイント、Bは無線コンバータとして、実用に供しているので、3Bで開発を行う。なお、3BのNOOBSではpidoraが選べなかったので、Raspbianが入っているが、まぁ、開発する限りでは似たようなもんだろう。
user@raspberrypi:~ $ gpio readall
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |★
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
user@raspberrypi:~ $ gpio -g mode 25 out
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | OUT | GPIO. 6 | 6 | 25 |
user@raspberrypi:~ $ gpio -g write 25 1
user@raspberrypi:~ $ gpio -g write 25 0
user@raspberrypi:~ $ while true; do gpio -g write 25 1; sleep 0.5; gpio -g write 25 0; sleep 1; done
root@raspberrypi:~# gpio -g mode 14 ALT0
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 |
root@raspberrypi:~# raspi-config
9 Advanced Options
A7 Serial
<いいえ>
<了解>
root@raspberrypi:/boot# diff config.txt.org config.txt
> enable_uart=0
root@raspberrypi:/boot# diff cmdline.txt.org cmdline.txt
< dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
> dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
root@raspberrypi:~# stty speed 115200 < /dev/ttyAMA0
115200
root@raspberrypi:~# stty -g < /dev/ttyAMA0
0:4:1cb2:a30:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
root@raspberrypi:/boot# diff config.txt.org config.txt
59a60,61
> enable_uart=0
> dtoverlay=pi3-miniuart-bt
root@raspberrypi:/boot# diff config.txt.org config.txt
> enable_uart=1
> dtoverlay=pi3-miniuart-bt
2016-09-27(Tue) 15年ぶりのアードベック
以前から「ハイローミックス」体制を構築しようと、安ウイスキーを物色しているのだが、やはり、安いとそれなりだ。基本、呑み切ることにしているので、スカを引いてしまうと長らくツラい。なにしろ、安物とタリスカーでは、擦りガラスとステンドグラスくらいの違いがある。
とはいえ、タリスカーばかりでもつまらないので「ハイ」の方も時々散らすわけだが、以前、クセの強さに定評のあるラフロイグには、それほどピンとこなかった。そこで「……ラフロイグがやられたようだ」「ククッ……奴は四天王の中でも最弱……」というわけではないが、今回はクセの強さでは最強クラスのアードベックに登場を願ったのであった。
ちなみに「ロー」の方は、クレイモア、あかし、キャッスルロックと、1000円クラスを試してきたが、クレイモアは悪くなかった。タリスカーとベクトルは違うが、甘さを前面にまといつつ、それなりの深みも感じる。例えるなら黄色のベッコウアメか。あかしとキャッスルロックは、どっちも単なる擦りガラス。
そういえば、以前呑んだフロム・ザ・バレルも擦りガラスとまではいわんが、ピンとこなかった。
一方で、先日、鳥貴族の呑み放題プランで頼んだ響 JAPANESEHARMONYは悪くなかった。初めて、サントリーのウイスキーでウマいと思えた気がする。刺激はそこそこだが、かなりの華やかさを感じた。んが、静かな場所でゆっくり味わいたい気はするものの、タリスカー以上の値段を出して、ボトルで買うかといわれるとどうにも微妙なのも確かなんだよな。
それはそうと、先日、なにげなくコンビニで買ったミックスナッツをツマミにウイスキーをやったら、これが驚くほどにミート。これまでチョコレートをツマミにやっていたのだが、いきなり完全放置状態に。何をイマさらミックスナッツなんていう、ツマミの定番中の定番に驚いているんだといわれるかもしれないが、ホントにそのとおり。
しかしさすがにダイソーのはあきまへん。その後にそこそこのミックスナッツを食ったら品質の差に歴然。さらに、カルディのスモークナッツミックスは舌からウロコのウマさ。
ふと、ナッツのトップメーカってどこだろうかと思って調べたら、東洋ナッツという会社があるのね。それほどには高くないみたいだし、今度試してみることにしよう。
2016-09-29(Thu) 卓上カレンダにムキーッ!!
ウチは壁にカレンダを吊るす習慣はなく、ダイニングの横に卓上カレンダを置いているのだが、気に入るアイテムがなくてずっとイライラしていた。単に「表と裏」に「今月」と「来月」を配置したいだけなのだが、製品を「綴る」の都合上、そういうアイテムは売っていないのだ。で、作った。
例によって、自作のTrueLegacyGraphicsCairoライブラリを使い、以前に作ったカレンダ作成スクリプトをチョイチョイと手直しして作った。生成されるPDFとライブラリごとスクリプトを置いておく。
アイデアという程のものでもないが、ミソは、スタンド部分の一部を切り欠いて、表と裏にダブルクリップでカレンダを止められるようにしたこと。よく考えれば、卓上カレンダにおいて「綴る」必然性なんてまったくない。サッと紙を外せたほうが、記入する場合にもラクだ。
いざ印刷しようとしたらプリンタ複合機(PX-403A)の給紙トレイが折れていたので、1.5mmのドリルで穴を穿けて針金を通して修理しておく。
気づけば、このプリンタも既に5年も前に買ったものだが、使用頻度が極めて低いにもかかわらず、軽いインク詰まり程度で助かっている。メーカにしてみれば「1万ソコソコの製品をいつまで使う気だよ」と思っているかもしれんが、なにせ使用頻度が低いもんなぁ。