SVX日記
2005-03-06(Sun) 秋葉 for OLIMEX
さて、久々に秋葉である。久々……!? オイラが秋葉を「久々」と感じる期間はどれくらいなのだろう。ちょっと検証してみるコトにしよう。本サイト内をnamazuで「秋葉」を検索し「日付(新しい順)」で並び替えてみる……と、前回は2月1日である。この日記で以前からシツコク書いているように、オイラには「1ヶ月の法則」があるのだが、2月がちょっと短かったことを考慮すると、今回もやっぱり見事に1ヶ月なのであった……ヤクチューかっちゅーの。
で、トップバッターは……なんとなくスプラッターハウスが頭に浮かんだので、なんとゲーセンのHeyである。しかし、既に撤去された模様……仕方なく1941でも始めてみる。1回目はコツを忘れていてビスマルクで頓死。もう一度……一発でエンディングである。やっぱりそう簡単には腕は落ちないもんだねぇ。
が、この店はワイルド過ぎだ……。コンテナにドッサリと抵抗袋が詰まっている。スクっては探し、ホリだしては探し、カキまぜては探し……33Ω……270Ω……目的の抵抗値のモノが見つからないコトこの上ない。露天で寒いのに手を真っ黒にしながら探すうち……47Ω……2.7kΩ……たかだか50円のタメに探すのがバカらしくなってきた。ココは一般人も通るので、背中から「スゴい店ね」とかつぶやくのが聞こえるし……ヤメェッ!! 時給600円だって1分10円だから、5分以上探し回ったらソンというコトになる。ま、探し回るのもジャンク屋の楽しみのヒトツというコトを否定する気はないが。
それはそうと、ココは珍しく抵抗形コンデンサが揃っている店だ。SVXのエアコンにはこのパーツが使われているので、必要な人はココで購入するといい。数十本単位でしか買えないが、数十本で50円とか、駄菓子みたいな値段で売っているので大丈夫。
店の中を一巡して、3つで100円の基板実装用USB-Bコネクタを発見。大量に購入。上記USB-232C変換基板に使うモノだ。基板は16枚できてくる予定だから……えーい、12個ほど買ってしまえぃ!! ついでに消費しがちな抵抗を追加購入。
日米商事 | |||
---|---|---|---|
基板実装用USB-Bコネクタ | \35 | x12 | \420 |
抵抗器 470 | x102 | \53 | |
抵抗器 10k | x100 | \53 | |
計 | \526 |
次は秋月。今回は上記USB-232C変換基板に実装するFT232BM購入が主目的だ。日米商事で買えなかった1Mの抵抗と、ピンヘッダも同様に変換基板用である。それから、調光器をプログラム制御するためのCdS。あまり部品の仕様を詰めきっていないので併せてフォトカプラも買っておく。
秋月電子通商 | |||
---|---|---|---|
FT232BM | \600 | x2 | \1,200 |
抵抗器 1M 1/6W | \100 | ||
ピンヘッダ 2x40 オス | \100 | ||
ピンヘッダ 2x25 メス | x3 | \200 | |
アナログフォトカプラ MI_0202CL | \200 | x2 | \400 |
Cdsセル 9P5-1H | x3 | \100 | |
計 | \2,100 |
あきばお〜 | |||
---|---|---|---|
単3電池 | \18 | x10 | \180 |
単4電池 | x10 | \249 | |
計 | \429 |
変換基板に使う27Ωは秋月にも置いてなかったので、千石で購入。ハンダゴテもやっぱり変換基板へのFT232BMのハンダ付けに用いるためのモノ。QFP-32パッケージのFT232BMはピン間0.8mmとかなり辛口なので、道具もソコソコのモノが必要であろうという判断だ。
千石電商B1F | |||
---|---|---|---|
抵抗器 27 | x100 | \100 | |
千石電商1F | |||
ハンダゴテ CXR-30 22W | \1,910 |
調光器をプログラム制御するのはいいが、CdSが示す抵抗の範囲がどれくらいなのかワカんないので、コンデンサを適当に買い揃えるべく、再び日米通商へ。多めの容量の積層セラミックコンデンサを購入。安い。ココで容量が0.33uFで足りなかったときのタメに1uFが欲しくなったのだが、血迷って電解を買ってしまった。安かったらからいいが、交流で電解が使えるわきゃねーのに。ま、いーや。と、奇跡的に1.5kΩが見つかったので、それも購入。
日米商事 | |||
---|---|---|---|
積層セラミックコンデンサ 0.33uF 50V | x10 | \53 | |
電解コンデンサ 1uF 50V | x13 | \105 | |
抵抗器 1.5k | x100 | \53 | |
計 | \210 |
2008-03-06(Thu) もっと箱入りでアートっぽく
オシロが進まないので、先日、イイ感じに加工できたケースをさらに加工するのである。
少なくとも、ボタン1個とロータリーエンコーダは取り付ける必要がある。さて、どこに取り付けようか。ボタンは目覚まし音の停止にも使うだろうから、単純に上面の中心にするとして、ロータリーエンコーダは……右の側面ッ!! これに決まりだ。
2009-03-06(Fri) XPort落ち着きます
# tcpdump -i eth0 -xX -s 2000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 2000 bytes
23:05:07.212012 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaab 4000 4011 8efa 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 50da 0101 0600 .....D.C.4P.....
0x0020: aeaf 4701 0000 0000 0000 0000 0000 0000 ..G.............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
0x0110: 0301 0306 7401 010c 0743 3830 3532 3234 ....t....C805224
0x0120: 3d07 0100 204a 8052 24ff 0000 0000 0000 =....J.R$.......
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:05:10.211757 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaac 4000 4011 8ef9 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 50d7 0101 0600 .....D.C.4P.....
0x0020: aeaf 4701 0003 0000 0000 0000 0000 0000 ..G.............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
0x0110: 0301 0306 7401 010c 0743 3830 3532 3234 ....t....C805224
0x0120: 3d07 0100 204a 8052 24ff 0000 0000 0000 =....J.R$.......
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:05:13.211749 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaad 4000 4011 8ef8 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 50d4 0101 0600 .....D.C.4P.....
0x0020: aeaf 4701 0006 0000 0000 0000 0000 0000 ..G.............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
0x0110: 0301 0306 7401 010c 0743 3830 3532 3234 ....t....C805224
0x0120: 3d07 0100 204a 8052 24ff 0000 0000 0000 =....J.R$.......
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:05:16.211745 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaae 4000 4011 8ef7 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 50d1 0101 0600 .....D.C.4P.....
0x0020: aeaf 4701 0009 0000 0000 0000 0000 0000 ..G.............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
0x0110: 0301 0306 7401 010c 0743 3830 3532 3234 ....t....C805224
0x0120: 3d07 0100 204a 8052 24ff 0000 0000 0000 =....J.R$.......
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:05:19.206730 arp who-has 169.254.146.113 tell 0.0.0.0
0x0000: 0001 0800 0604 0001 0020 4a80 5224 0000 ..........J.R$..
0x0010: 0000 0000 0000 0000 a9fe 9271 0000 0000 ...........q....
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
23:05:20.416539 arp who-has 169.254.146.113 tell 0.0.0.0
0x0000: 0001 0800 0604 0001 0020 4a80 5224 0000 ..........J.R$..
0x0010: 0000 0000 0000 0000 a9fe 9271 0000 0000 ...........q....
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
# tcpdump -i eth0 -xX -s 2000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 2000 bytes
23:08:53.072843 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaab 4000 4011 8efa 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 50da 0101 0600 .....D.C.4P.....
0x0020: aeaf 4701 0000 0000 0000 0000 0000 0000 ..G.............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
0x0110: 0301 0306 7401 010c 0743 3830 3532 3234 ....t....C805224
0x0120: 3d07 0100 204a 8052 24ff 0000 0000 0000 =....J.R$.......
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:08:54.001479 IP 192.168.7.96.bootps > 192.168.7.101.bootpc: BOOTP/DHCP, Reply, length 300
0x0000: 4510 0148 0000 0000 8011 a97f c0a8 0760 E..H...........`
0x0010: c0a8 0765 0043 0044 0134 44a5 0201 0600 ...e.C.D.4D.....
0x0020: aeaf 4701 0000 0000 0000 0000 c0a8 0765 ..G............e
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0236 ........c.Sc5..6
0x0110: 04c0 a807 6033 0400 00a8 c001 04ff ffff ....`3..........
0x0120: 00ff 0000 0000 0000 0000 0000 0000 0000 ................
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
23:08:54.002037 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
0x0000: 4500 0148 aaac 4000 4011 8ef9 0000 0000 E..H..@.@.......
0x0010: ffff ffff 0044 0043 0134 96e0 0101 0600 .....D.C.4......
0x0020: 377d 14ee 0000 0000 0000 0000 0000 0000 7}..............
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0337 ........c.Sc5..7
0x0110: 0301 0306 0c07 4338 3035 3232 343d 0701 ......C805224=..
0x0120: 0020 4a80 5224 3604 c0a8 0760 3204 c0a8 ..J.R$6....`2...
0x0130: 0765 ff00 0000 0000 0000 0000 0000 0000 .e..............
0x0140: 0000 0000 0000 0000 ........
23:08:54.057974 IP 192.168.7.96.bootps > 192.168.7.101.bootpc: BOOTP/DHCP, Reply, length 300
0x0000: 4510 0148 0000 0000 8011 a97f c0a8 0760 E..H...........`
0x0010: c0a8 0765 0043 0044 0134 eaea 0201 0600 ...e.C.D.4......
0x0020: 377d 14ee 0000 0000 0000 0000 c0a8 0765 7}.............e
0x0030: 0000 0000 0000 0000 0020 4a80 5224 0000 ..........J.R$..
0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 6382 5363 3501 0536 ........c.Sc5..6
0x0110: 04c0 a807 6033 0400 00a8 c001 04ff ffff ....`3..........
0x0120: 00ff 0000 0000 0000 0000 0000 0000 0000 ................
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 ........
$ telnet 192.168.7.101 9999
Trying 192.168.7.101...
Connected to 192.168.7.101.
Escape character is '^]'.
MAC address 00204A805224
Software version 01.3 (030612) XPTE
Press Enter to go into Setup Mode
*** basic parameters
Hardware: Ethernet TPI
IP addr - 0.0.0.0/DHCP/BOOTP/AutoIP, no gateway set
DHCP device name : not set
*************** Security ***************
SNMP is enabled
SNMP Community Name: public
Telnet Setup is enabled
TFTP Download is enabled
Port 77FEh is enabled
Web Server is enabled
ECHO is disabled
Enhanced Password is disabled
*************** Channel 1 **************
Baudrate 9600, I/F Mode 4C, Flow 00
Port 10001
Remote IP Adr: --- none ---, Port 00000
Connect Mode : C0 Disconn Mode: 00
Flush Mode : 00
*************** Expert *****************
TCP Keepalive : 45s
ARP cache timeout: 600s
*************** E-mail *****************
Mail server: 0.0.0.0
Unit :
Domain :
Recipient 1:
Recipient 2:
*** Trigger 1
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message :
Priority: L
Min. notification interval: 1 s
Re-notification interval : 0 s
*** Trigger 2
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message :
Priority: L
Min. notification interval: 1 s
Re-notification interval : 0 s
*** Trigger 3
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message :
Priority: L
Min. notification interval: 1 s
Re-notification interval : 0 s
Change Setup:
0 Server configuration
1 Channel 1 configuration
3 E-mail settings
5 Expert settings
6 Security
7 Factory defaults
8 Exit without save
9 Save and exit Your choice ? 8
exiting without save !
Connection closed by foreign host.
$ ping 192.168.7.101
PING 192.168.7.101 (192.168.7.101) 56(84) bytes of data.
64 bytes from 192.168.7.101: icmp_seq=1 ttl=64 time=0.315 ms
64 bytes from 192.168.7.101: icmp_seq=2 ttl=64 time=0.296 ms
64 bytes from 192.168.7.101: icmp_seq=3 ttl=64 time=0.206 ms
64 bytes from 192.168.7.101: icmp_seq=4 ttl=64 time=0.370 ms
^C
--- 192.168.7.101 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3319ms
rtt min/avg/max/mdev = 0.206/0.296/0.370/0.062 ms
2024-03-06(Wed) SinatraのPOSTでrequest.body.rewindが動かない
先日、Sinatraに認証機能を付けたのだが、その際にbundle addをやり直してGem関係を最新にしたらPOSTの内容がreadできなくなってしまった。
NoMethodError at / undefined method `rewind' for #<Rack::Lint::Wrapper::InputWrapper:0xXXXX @input=#<StringIO:0xXXXX>>
なんて出る。何かやらかしたかと思ったが、特段イジっていない。該当のコードは「request.body.rewind」らしいのだが、だいぶ前なので、なんでそんなコードを書いたのか覚えていない。が、どうもSinatraのオフィシャルサイトのサンプルコードから持ってきていたようだ。
post "/api" do
request.body.rewind # in case someone already read it
data = JSON.parse request.body.read
"Hello #{data['name']}!"
end
それなのに動かないってどういうことよ。と思って追跡していくと、どうもRackのバージョンアップの影響らしい。Gemfileの記述を戻すと動く。「request.body」のメソッドを表示させてみると、実際に変わってしまっていて「rewind」メソッドがなくなってる。そら動かん。bundleの仕組みは、今回のようにバージョンアップの影響で動かなくなることを防ぐ意図もあるのだが、実際にこんなことあるんやな。
# 動くバージョン
request.body: #<Rack::Lint::InputWrapper:0xXXXX @input=#<StringIO:0xXXXX>>
request.body.methods: [:!, :!=, :!~, :<=>, :==, :===, :__id__,
:__send__, :assert, :class, :clone, :close, :define_singleton_method,
:display, :dup, :each, :enum_for, :eql?, :equal?, :extend, :freeze,
:frozen?, :gem, :gets, :hash, :inspect, :instance_eval,
:instance_exec, :instance_of?, :instance_variable_defined?,
:instance_variable_get, :instance_variable_set, :instance_variables,
:is_a?, :itself, :kind_of?, :method, :methods, :nil?, :object_id,
:private_methods, :protected_methods, :public_method, :public_methods,
:public_send, :read, :remove_instance_variable, :respond_to?, :rewind,
:send, :singleton_class, :singleton_method, :singleton_methods, :tap,
:then, :to_enum, :to_json, :to_s, :yield_self]
request.body.read: "key=value1&key=value2&commit=do+POST+test"
# 動かないバージョン
request.body: #<Rack::Lint::Wrapper::InputWrapper:0xXXXX @input=#<StringIO:0xXXXX>>
request.body.methods: [:!, :!=, :!~, :<=>, :==, :===, :__id__,
:__send__, ※, :class, :clone, :close, :define_singleton_method,
:display, :dup, :each, :enum_for, :eql?, :equal?, :extend, :freeze,
:frozen?, :gem, :gets, :hash, :inspect, :instance_eval,
:instance_exec, :instance_of?, :instance_variable_defined?,
:instance_variable_get, :instance_variable_set, :instance_variables,
:is_a?, :itself, :kind_of?, :method, :methods, :nil?, :object_id,
:private_methods, :protected_methods, :public_method, :public_methods,
:public_send, :read, :remove_instance_variable, :respond_to?, ※,
:send, :singleton_class, :singleton_method, :singleton_methods, :tap,
:then, :to_enum, :to_json, :to_s, :yield_self]
request.body.read: ""
$ gem search '^rack$' --all
rack (3.0.9.1, 3.0.9, 3.0.8, 3.0.7, 3.0.6.1, 3.0.6, 3.0.5, 3.0.4.2,
3.0.4.1, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.2.8.1, 2.2.8, 2.2.7,
2.2.6.4, 2.2.6.3, 2.2.6.2, 2.2.6.1, 2.2.6, 2.2.5, 2.2.4, 2.2.3.1,
2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.4.4, 2.1.4.3, 2.1.4.2, 2.1.4.1, 2.1.4,
2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.9.4, 2.0.9.3, 2.0.9.2, 2.0.9.1, 2.0.9,
2.0.8, 2.0.7, 2.0.6, 2.0.5, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 1.6.13,
1.6.12, 1.6.11, 1.6.10, 1.6.9, 1.6.8, 1.6.7, 1.6.6, 1.6.5, 1.6.4,
1.6.3, 1.6.2, 1.6.1, 1.6.0, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0,
1.4.7, 1.4.6, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0, 1.3.10, 1.3.9,
1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.8,
1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5,
1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.1, 1.0.0, 0.9.1, 0.9.0, 0.4.0,
0.3.0, 0.2.0, 0.1.0)
$ bundle add rack --version=2.2.8.1 --skip-install
$ bundle add puma sinatra net-ldap --skip-install
エラく時間を浪費させられたので憤慨する気持ちもないわけではないが、まぁ、近年のフレームワークのラクチンさは、恐ろしく多数の物件を積み上げた成果なわけで、たまにはこういうのもしゃーない。というわけで、他の人の時間の浪費が防がれることを祈って、ここに記録しておく。
というような作業の合間に引き続きドルアーガ。ついに1人を残して59階に到達。いくのか? いってしまうのか? あ゛ぁー……連続のミスで打倒ならず。まぁ、だいぶ精度は上がってきているけどなぁ。もう少しだなぁ。