Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2017-10-30

技術書典3に薄い本出しました

いままで技術書典には開催趣旨に反して本は出さない感じで、VRゴーグルとかストローで組み立てるC60キットとかやってきました。

が、なんか一日ちょっとでネタができて、あんまりWebに書けるようなネタでもなかったので、薄い本にしてみることにしました。


印刷屋に出すにはコスパがよくなかったし、おそらく頒布に参加してくれるような人はゼロ人というニッチネタでしたので部数も少ないため、自家製本にしました。急に思い立って時間もなかったということもあります。

事務局に発禁措置をくらいかねない内容であったりしたので、全損になってもダメージ少なめにという狙いもあります。


アプリ

使ったアプリはPages。

それもOSの都合なんかで、だいぶバージョンの古いものです。

前に、イベント用にCardboardアプリを作る薄い本を配布したことがあるので、A5での書式のテンプレートは作ってありました。その時は、ただのホッチキス綴じだったのであんまり工夫はないのですが、そのまま使用。

miで書いた中身を流し込んでレイアウトするだけです。ページ数も少ないので目次もなし。


用紙

用紙は、いくつか試した上で、白がきれいで厚みがある程度あるTOUHOKUのコピー用紙を使ったのですが、黒文字で両面刷ると透けが気になります。前回は印刷コストが安かったので、文字はグレイにして透けを防止したのですが、今回はプリンタの変更で印刷コストが高くなってしまったので透過率を変えることで色を落としました。しかし、白黒を選択してプリントしても、いろんな色を使って印刷しているようで、思わぬ色のインクが減って、夜中にスーパーにインクカートリッジを買いに走ることになりました。

あとは、今のプリンタは、この用紙だと紙送りで二枚出てくることがあって、チェックが全数で泣けてきました。事前に空気吹き込んでやっても結果に変わりはありませんでした。


印刷

古いPagesには、ページ番号を表示しないページを作る機能はないので、作ったデータを2つに分けて、ページ番号の入る本文とそれ以外分割にしました。

プリンタには両面印刷の機能はないので、部数を決めて手差しで両面印刷しました。

部数の決定は、ビニ本にしようと思っていたので、ラッピング用の糊付き透明フィルム封筒のロットの倍数に合わせました。


綴じ

表側の見返し用紙にはステープラーの針の位置を三ヶ所印刷しておきました。

ステープラーの針は、普通のものだとあとで錆びてくるので、ステンレス製の針を使いました。普通のものより硬さもあるので貫通力が強いです。

ステープラーは、30年くらいまえに自営の時に買ったフラットクリンチの初代のものを使っています。樹脂は変色していますが、今でも普通に使えます。


表紙

さて、表紙が問題です。プリンタを変更したので、A4までしか印刷できません。リーガルサイズが、A4よりわずかに大きく、ギリギリでA5二面と厚さの印刷面をカバーできそうだったので、これで行くことにしました。

在庫の100均の色画用紙があったので、全数同じ色にはならないのですが、それもいいかということで、これを使うことに決めました。

サイズ的にはそのままプリンタに入らないので、リーカルの短辺に合わせてカット。

一枚ずつ手差しで印刷しました。


筋つけ

表紙の筋つけですが、以前は手芸用のヘラでやったのですが、行方不明なので100均で手芸用のヘラを買ってきました。しかし使ってみると、2枚ほどで磨り減ってエッジがなくなってしまいます。さすが100均クオリティ。

千枚通しでは画用紙相手には強すぎて切れてしまうので、以前ノベルティでもらったペーパーナイフ兼定規の三角形の金属のものをエッジをやや潰して使いました。

印刷時に薄い下線を入れてあったのですが、グレイにしたので見にくく作業効率はイマイチでした。


合わせ

ステープラーでとめた本文と表紙の接着は、お手軽に両面テープにしました。一応、速乾の木工用ボンドも買ってありましたが、乾燥に時間がかかるので、ギリギリのスケジュールに向かないので使いませんでした。

100均で一番細いものが1リールでだいぶ余りました。


化粧断ち

化粧断ちは、スチール定規とカッターマット、アートナイフで手でやりました。

手持ちのカール事務器の裁断用のカッターは、10枚までしか対応していないので、今回は使用を断念しました。下押さえマットの消耗品がだいぶ弱くなっていて、薄いものはきれいにカットできないという点も見送り理由です。

手作業になったので、仕上がりにはややむらがあります。


100部程度であれば、手作業でも十分に買ってもらえる本が作れると思います。

技術書典後に、50枚が切れる裁断機を新調したので、次回からはこれが活躍してくれると思います。

もし、次回があれば、筋つけをもっとスピードアップできる治具を作りたいと思います。

2017-09-06

Mac OSXでFTDIのドライバが刺さって強制再起動になるのでRaspiでシリアルサーバーを作った

Mac OSXでスイッチサイエンスのUSB-TTL変換を使っていると、抜いたタイミングでドライバが刺さって、OSXが強制再起動してしまうことがある。

何かと面倒くさいし心が折れるので、遊んでいるRaspiでシリアルサーバーを作ることにした。

特に難しいことはない。ether経由でログインして、USBシリアルを有効にして、minicom使うだけ。

RaspiのSDカードをインストールし直すのも面倒くさいので、raspbianは入ってたjessieのまま使う。

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install minicom lrzsz

USBシリアルを刺す。

[  415.459959] usb 1-1.2: new full-speed USB device number 4 using dwc_otg
[  415.617059] usb 1-1.2: New USB device found, idVendor=0403, idProduct=6001
[  415.617080] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  415.617091] usb 1-1.2: Product: FT232R USB UART
[  415.617101] usb 1-1.2: Manufacturer: FTDI
[  415.617112] usb 1-1.2: SerialNumber: A702IZ5W
[  416.734320] usbcore: registered new interface driver usbserial
[  416.734465] usbcore: registered new interface driver usbserial_generic
[  416.734629] usbserial: USB Serial support registered for generic
[  416.749000] usbcore: registered new interface driver ftdi_sio
[  416.749157] usbserial: USB Serial support registered for FTDI USB Serial Device
[  416.749672] ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
[  416.784749] usb 1-1.2: Detected FT232RL
[  416.786093] usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB0

デバイス名は、普通にttyUSB0か。

pi@raspberrypi:~ $ sudo minicom -s

+-----[configuration]------+

| Filenames and paths |

| File transfer protocols |

| Serial port setup |

| Modem and dialing |

| Screen and keyboard |

| Save setup as dfl |

| Save setup as.. |

| Exit |

| Exit from Minicom |

+--------------------------+

Serial port setupを選んでAキーを押し、デバイス名を変更する。

A - Serial Device : /dev/ttyUSB0

Save setup as dflで設定を変更して、Exit from Minicomで一旦終了。

BBBにTTL側を接続して、minicomを起動する。

pi@raspberrypi:~ $ sudo minicom

Debian GNU/Linux 7 beaglebone ttyO0

default username:password is [debian:temppwd]

Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian

The IP Address for usb0 is: 192.168.7.2

beaglebone login:

よし来た。

これで、強制再起動に怯えずに作業できるわー。

お手軽さはだいぶ下がるけどね。


このRaspiは他の用途にも使っているので、sshログインですぐにシリアル出るような設定にはしない。

ほんとは、アカウント別に作ってログインシェルをターミナルアプリにしたほうがシリアルサーバーっぽくて楽かな?


minicomじゃなくてscreenを使うと、面倒くさくはないんだけど動的にボーレートの変更できないのがイマイチ。

専用のユーザー作らなくても素直にsshしたらシリアル出るようにしたい(失敗)

そういえば、昔、こんなの書いたな。

Ubuntuでminicom起動すると/dev/ttyUSB0のパーミッションがないと言われる

http://d.hatena.ne.jp/kinneko/20140118/p2


Rasbianではどうなっているかというと、こんな感じ。

pi@raspberrypi:~ $ ls -l /dev/ttyUSB0

crw-rw---- 1 root dialout 188, 0 Sep 6 04:00 /dev/ttyUSB0

pi@raspberrypi:~ $ grep dialout /etc/group

dialout:x:20:pi

piユーザーはdialoutグループに入っているので、ttyUSB0は使える。

Debian系は楽だな。

グループがdialoutというのが前時代の遺産な感じだけど。


というわけで、sshごしに直接起動できるハズ。

MacBook:~ kinneko$ ssh pi@192.168.2.124 "minicom"

pi@192.168.2.124's password:

No cursor motion capability (cm)

できません。


rootなら?

MacBook:~ kinneko$ ssh pi@192.168.2.124 "sudo minicom"

pi@192.168.2.124's password:

No termcap entry for unknown

できません。

termcap書くとか、ほんと前時代だ。


cmエラーは、端末の設定がないから。

とりあえず、vt100にしてみる。

MacBook:~ kinneko$ ssh pi@192.168.2.124 "export TERM=vt100 && minicom -D /dev/ttyUSB0"

minicomで入れますが、Ctr+コマンドが通りません。

Ctr+Zでssh切れちゃうし。

minicomの終了もできないので、セッションの正常な終わり方ができずに、Raspi側にプロセスが残ってしまう。

これでは使えない。

エスケープシーケンスもおかしいようで、kernelの起動メッセージとか一行で繰り返してしまう。

これでは使えない。

vt102にしてみたが同じ。

xtermではどうかな。同じ。


cuは?

MacBook:~ kinneko$ ssh pi@192.168.2.124 "cu -l /dev/ttyUSB0 -s 115200"

pi@192.168.2.124's password:

bash: cu: command not found

うぐぐ。

pi@raspberrypi:~ $ sudo apt-get install cu

再度。

MacBook:~ kinneko$ ssh pi@192.168.2.124 "cu -l /dev/ttyUSB0 -s 115200"

pi@192.168.2.124's password:

cu: Stale lock /var/lock/LCK..ttyUSB0 held by process 1366 created 2017-09-06 05:02:02


Debian GNU/Linux 7 beaglebone ttyO0

これは普通にできるな。

ただ、打ったのがエコーバックしてきちゃう。

~.(チルダ ピリオド)で終了できないな。

Raspi上での実行は終了含めてうまくいく。

pi@raspberrypi:~ $ cu -l /dev/ttyUSB0 -s 115200

Connected.

Debian GNU/Linux 7 beaglebone ttyO0

default username:password is [debian:temppwd]

Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian

The IP Address for usb0 is: 192.168.7.2

beaglebone login: Connection to 192.168.2.124 closed.


こんなことに時間使っている暇がないので、タイムアップ。

2017-07-21

smartctlを実行するとエラーが出るドライブをseatoolしてみる

Error 9358 occurred at disk power-on lifetime: 21915 hours (913 days + 3 hours)

When the command that caused the error occurred, the device was active or idle.

ドライブはこれ。

=== START OF INFORMATION SECTION ===

Model Family: Seagate Barracuda 7200.14 (AF)

Device Model: ST1000DM003-9YN162

Serial Number: S1D212JR

LU WWN Device Id: 5 000c50 04b59ca33

Firmware Version: CC82

User Capacity: 1,000,204,886,016 bytes [1.00 TB]

Sector Sizes: 512 bytes logical, 4096 bytes physical

Rotation Rate: 7200 rpm

Device is: In smartctl database [for details use: -P show]

ATA Version is: ATA8-ACS T13/1699-D revision 4

SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)

Local Time is: Fri Jul 21 10:27:34 2017 JST

SMART support is: Available - device has SMART capability.

SMART support is: Enabled

しかし、普通に書く分には問題なく動いている様子。全面ddは普通に通る。

root@ubuntu:~# dd if=/dev/zero of=/dev/sdb bs=100M status=progress

1000131788800 bytes (1.0 TB, 931 GiB) copied, 9616.44 s, 104 MB/s

dd: error writing '/dev/sdb': No space left on device

9539+0 records in

9538+0 records out

1000204886016 bytes (1.0 TB, 932 GiB) copied, 9618.34 s, 104 MB/s

もっとも、これでは使う気にはなれないんだけど。

1 Raw_Read_Error_Rate 0x000f 087 070 006 Pre-fail Always - 86951457

5 Reallocated_Sector_Ct 0x0033 083 083 036 Pre-fail Always - 22576

7 Seek_Error_Rate 0x000f 077 060 030 Pre-fail Always - 8695524939

Seagateって、Raw_Read_Error_Rateは買ったばかりでもこんな感じのようで、あんまり気にしないでいいのかも。ただ、Seek_Error_Rateは桁が異常な感じ。


seatoolを落としてくる。

root@ubuntu:~# wget http://www.seagate.com/files/www-content/support-content/downloads/seatools/_shared/downloads/seatools_cli.tar

root@ubuntu:~# tar xvf seatools_cli.tar

st

sthelp.txt

sthelpを見ると、2001年のツールのようだ。動くのかしらん。

root@ubuntu:~# ls -l st

-rwxr-xr-x 1 root root 180149 Sep 12 2001 st

root@ubuntu:~# ./st

-su: ./st: No such file or directory

動かないわ。

root@ubuntu:~# file st

st: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

あらら。

root@ubuntu:~# apt-get install libc6-i386


接続ドライブのリストを取得。

root@ubuntu:~# ./st -l

GetSGVersions - open error: No such file or directory

Drive information:

/dev/sg0 ATA ST3500418AS CC44 976773167 blocks

/dev/sg1 ATA ST1000DM003-9YN1 CC82 1953525167 blocks


ターゲットの情報を取得。

root@ubuntu:~# ./st -i /dev/sg1

/dev/sg1

Vendor = ATA

Product = ST1000DM003-9YN1

Version = CC82

Serial Number =

Copyright =

SCSI Firmware =

Servo RAM Release =

Servo ROM Release =

Servo RAM Date =

Servo ROM Date =

Blocksize = 512, Highblock = 1953525167, Capacity = 976763 MB

-this is a Seagate drive

-this drive does not support DST

-Mode Page Settings [current value (default)]:

-WCE bit = 1 (1)

-RCD bit = 0 (0)

-AWRE bit = 1 (1)

-ARRE bit = 0 (0)

-DExcpt bit = 0 (0)

-Number of cache segments = 0 (0)

-JIT bit 0 = 0 (0)

-JIT bit 1 = 0 (0)

-JIT bit 2 = 0 (0)

-JIT bit 3 = 0 (0)

なんも取れてないなぁ...


ショートテストはパスしちゃう。

root@ubuntu:~# ./st -t 100 /dev/sg1

Drive /dev/sg1 does not support DST - generic short test will be run

Starting 100 % Generic Short Test on drive /dev/sg1 (^C will abort test)

-Starting 30 second sequential reads from block 0 on drive /dev/sg1

-Starting 30 second sequential reads to end of disk on drive /dev/sg1

-Starting 30 second random reads on drive /dev/sg1

-Starting 30 second random seeks on drive /dev/sg1

Generic Short Test PASSED on drive /dev/sg1

ロングテストではエラー。

root@ubuntu:~# ./st -T 100 /dev/sg1

Drive /dev/sg1 does not support DST - generic long test will be run

Starting generic long (full sequential verify) test (1953525167 blocks) on drive /dev/sg1 (^C will abort test)

VERIFY failed on block 20602368 Sense data = 21/00/00

TEST FAILED at block -144986080 on drive /dev/sg1

というわけでゴミ箱行き。


SeagateもWDもRMAが国内発送先になてったので、便利な時代だと思いました。

memo: https://support.wdc.com/warranty/warrantystatus.aspx?lang=jp

2017-07-04

HLS-C系1.13のtelnetアップデーターを作る

再度初期化された。

$ arp -a
(snip)
? (192.168.2.1) at ac:de:48:XX:XX:XX on bridge0 ifscope permanent [bridge]
? (192.168.2.136) at 34:76:c5:XX:XX:XX on bridge0 ifscope [bridge]
? (192.168.2.255) at ff:ff:ff:ff:ff:ff on bridge0 ifscope [bridge]

$ telnet 192.168.2.136
Trying 192.168.2.136...
telnet: connect to address 192.168.2.136: Connection refused
telnet: Unable to connect to remote host

当然、前に作った穴もふさがっている。

自前アップデーターで再度穴をあける。

1.13に上がっているので、前にやったアップデータをまた作る。

http://d.hatena.ne.jp/kinneko/20161024/p1


最新アップデーターをダウンロード。

http://www.iodata.jp/lib/product/h/5443.htm

$ ls -lh hlsc_f113.zip
-rw-r--r--@ 1 kinneko  staff    52M  7  4 13:09 hlsc_f113.zip

累積アップデーターなのでデカいわ。

こういうアップデート方式やめなはれ。

$ unzip hlsc_f113.zip
Archive:  hlsc_f113.zip
   creating: hlsc_f113/
  inflating: hlsc_f113/README.TXT
 extracting: hlsc_f113/update_HLS-C_1.13.tgz
$ mv hlsc_f113/update_HLS-C_1.13.tgz ./
$ rm hlsc_f113.zip
$ rm -rf hlsc_f113
$ tar zxvfp update_HLS-C_1.13.tgz
x ./
x ./landisk-update.sh
x ./for_HLS-C_series
x ./update-files.tar.gz
x ./setting-files.tar.gz
x ./rmlist
x ./flash_hlsc.env
x ./flash_hlsc.uboot

判定用のバージョン情報はここ。

$ cat for_HLS-C_series
1.13
$ echo "1.1301" > for_HLS-C_series
$ cat for_HLS-C_series
1.1301

アップデートの実行スクリプトはこれ。

$ vi landisk-update.sh

ubootのアップデートの後あたりに差し込み。

cat <<EOF >> /etc/init.d/rc.local

/usr/local/sbin/telnetd -l /bin/sh

EDF

固める。

$ tar zcvfp ../update_telnet_11301.tgz ./*
a ./flash_hlsc.env
a ./flash_hlsc.uboot
a ./for_HLS-C_series
a ./landisk-update.sh
a ./rmlist
a ./setting-files.tar.gz
a ./update-files.tar.gz
a ./update_HLS-C_1.13.tgz

ブラウザで管理UIからファームウエアとして流し込み。

本体が再起動します。

アップデート完了まで時間がかかりますので、

しばらく時間を置いてから再度ログオン画面からアクセスをお願いします。

HLS-C 1.1301へ更新を行います。

問題なく通った模様。

LEDが点滅をはじめてから、結構時間がかかる。


点滅がやんだので、接続してみる。

$ telnet 192.168.2.136
Trying 192.168.2.136...
Connected to 192.168.2.136.
Escape character is '^]'.

Debian GNU/Linux 4.0
sh-3.1#

無事成功。

2017-07-03

Raspiが起動時に自動的にパーティションを拡大するのを潰す

昔は、raspi-configとかで明示的にパーティション拡張をしてやる必要があった。

最近は、おせっかいなことに、起動時に自動的にパーティション拡張してしまう。

複製のためにイメージを小さく保っておきたい場合は、とてもめんどくさいことになる。

デフラグして、ファイルシステムを縮めて、パーティションを縮める。

この間に数値の一貫性がないので、ブロックサイズなどを考慮した変換が必要になる。


めんどくさいのでダウンロードしたRASPBIAN JESSIE LITEイメージを起動する前に潰しておく。

が、簡単だけどめんどくさい。

2箇所潰さないといけない。


準備

RASPBIAN JESSIE LITEをMacからSDに焼く。

約1.2GBある。

$ ls -lah /Users/kinneko/Downloads/Raspi3/2017-04-10-raspbian-jessie-lite.img
-rw-r--r--  1 kinneko  staff   1.2G  4 10 10:58 /Users/kinneko/Downloads/Raspi3/2017-04-10-raspbian-jessie-lite.img
$ diskutil umountdisk /dev/disk3
Unmount of all volumes on disk3 was successful
$ sudo dd if=2017-04-10-raspbian-jessie-lite.img of=/dev/rdisk3 bs=100m
12+1 records in
12+1 records out
1297862656 bytes transferred in 95.709816 secs (13560392 bytes/sec)

ブートローダーでinitが妙な指定になっているのを殺す

こちらは簡単に対応できる。

VFATになっている/bootにあるcmdline.txtの内容を書き換える。

WindowsからでもMacからでも簡単。

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=84fa8189-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

のうちの、

init=/usr/lib/raspi-config/init_resize.sh

という部分だけを削除する。

書いていなければ、initは/sbin/initが自動選択される。

その実体は、systemdへのシンボリックリンクなので普通に起動する。


作業が終わったら取り出す。

$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

起動中に勝手にリサイズするのを防ぐ

もう1つあって、起動中に以下が動く。

/etc/init.d/resizefs_once

その実体を呼んでいるのはこいつ。

/etc/rc3.d/S01resizefs_once

これをext4のセカンドパーティションから削除しておく必要がある。

WindowsやMacから作業するのは困難だ。

別に起動用SDを用意したRaspiにUSBでマウントしてから作業するのがよさげ。

pi@raspberrypi:~ $ sudo mount /dev/sda2 /mnt/
pi@raspberrypi:~ $ ls -l /mnt/etc/init.d/resize2fs_once
-rwxr-xr-x 1 root root 560 Apr 10 09:27 /mnt/etc/init.d/resize2fs_once
pi@raspberrypi:~ $ sudo mv /mnt/etc/init.d/resize2fs_once /mnt/etc/init.d/_resize2fs_once

呼び出し元は削除してシステム終了しておく。

pi@raspberrypi:~ $ sudo ls -l /mnt/etc/rc3.d/S01resize2fs_once
lrwxrwxrwx 1 root root 24 Apr 10 09:27 /mnt/etc/rc3.d/S01resize2fs_once -> ../init.d/resize2fs_once
pi@raspberrypi:~ $ sudo rm /mnt/etc/rc3.d/S01resize2fs_once
pi@raspberrypi:~ $ sudo shutdown -h now

確認

あ、sshをオンにしとくの忘れた...

Macに再接続。

$ mkdir /Volumes/boot/ssh

再度起動確認。

pi@raspberrypi:~ $ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7932477440 bytes, 15493120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x84fa8189

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1       8192   92159   83968   41M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      92160 2534887 2442728  1.2G 83 Linux

自動で拡張されていないのが確認できた。