SVX日記
2021-02-02(Tue) 手軽にコンテナ間で情報共有、時計製作進行中
/root/docker # mkdir gdbm_writer
/root/docker # cd gdbm_writer
/root/docker/gdbm_writer # git clone https://gitlab.com/Furutanian/sinatra_skelton
/root/docker/gdbm_writer # ln -s sinatra_skelton/Dockerfile .
/root/docker/gdbm_writer # cp sinatra_skelton/docker-compose.yml .
/root/docker/gdbm_writer # vi docker-compose.yml
/root/docker/gdbm_writer # diff sinatra_skelton/docker-compose.yml docker-compose.yml
< sinatra_skelton-alpha
> sinatra_skelton-alpha-writer
/root/docker/gdbm_writer # mkdir pv; chown 1000:1000 pv
/root/docker/gdbm_writer # vi sinatra_skelton/gdbm_writer.rb
/root/docker/gdbm_writer # cat sinatra_skelton/gdbm_writer.rb
#!/usr/bin/env ruby
require 'gdbm'
db = GDBM.new('data/time.gdbm')
loop {
db['now'] = Time.now.to_s
sleep 1
}
/root/docker/gdbm_writer # chmod 755 sinatra_skelton/gdbm_writer.rb
/root/docker/gdbm_writer # vi sinatra_skelton/gdbm_reader.rb
/root/docker/gdbm_writer # cat sinatra_skelton/gdbm_reader.rb
#!/usr/bin/env ruby
require 'gdbm'
db = GDBM.new('data/time.gdbm', 0666, GDBM::NOLOCK | GDBM::READER)
loop {
p db['now']
sleep 1
}
/root/docker/gdbm_writer # chmod 755 sinatra_skelton/gdbm_reader.rb
/root/docker/gdbm_writer # docker-compose build
/root/docker/gdbm_writer # docker-compose up -d
/root/docker/gdbm_writer # cd ..
/root/docker # cp -a gdbm_writer gdbm_reader
/root/docker # cd gdbm_reader
/root/docker/gdbm_reader # vi docker-compose.yml
/root/docker/gdbm_reader # diff sinatra_skelton/docker-compose.yml docker-compose.yml
< sinatra_skelton-alpha
> sinatra_skelton-alpha-reader
< - 8080:8080
> - 8081:8080
/root/docker/gdbm_reader # docker-compose up -d
/root/docker/gdbm_reader # cd ..
/root/docker # docker exec -it sinatra_skelton-alpha-writer /bin/bash
[user@4dc50fc6e6a7 sinatra_skelton]$ ./gdbm_writer.rb
/root/docker # docker exec -it sinatra_skelton-alpha-reader /bin/bash
[user@c0a2ec346ec8 sinatra_skelton]$ ./gdbm_reader.rb
Traceback (most recent call last):
2: from gdbm_reader.rb:5:in `<main>'
1: from gdbm_reader.rb:5:in `new'
gdbm_reader.rb:5:in `initialize': No such file or directory - data/time.gdbm (Errno::ENOENT)
/root/docker # ln gdbm_writer/pv/time.gdbm gdbm_reader/pv
/root/docker # docker exec -it sinatra_skelton-alpha-reader /bin/bash
[user@c0a2ec346ec8 sinatra_skelton]$ ./gdbm_reader.rb
"2021-02-02 20:29:28 +0900"
"2021-02-02 20:29:28 +0900"
"2021-02-02 20:29:28 +0900"
:
それと面白いのは、ファイルを更新する側では、データベースファイルを開きっぱなしにして、その内容を毎秒のように更新しているのだが、ファイルを参照する側では、参照開始時点の内容に固定され(ているように見え)ること。相手がデータベースだと考えれば、好ましい挙動かもしれない。
[user@c0a2ec346ec8 sinatra_skelton]$ ./gdbm_writer.rb
Traceback (most recent call last):
2: from gdbm_writer.rb:5:in `<main>'
1: from gdbm_writer.rb:5:in `new'
gdbm_writer.rb:5:in `initialize': Resource temporarily unavailable - data/time.gdbm (Errno::EAGAIN)
それと、家の電波掛時計の調子が悪かったり、テレワークのために始業終業のチャイムが鳴ってほしかったり、筋トレのインターバルのためにサッと秒数を読み取りたかったり、ずーっと購入したまま放置してあった16セグのLEDを活用したかったり、久々にハンダゴテを握りたかったり、ということで、デジタル置時計を作ることにした。
先々週の金曜(1/22)に具体的な構想を始めてから、PICによる制御ソフトとハンダ付けを同時進行で進めているのだが、オレ史上で最大のハンダ付け点数である。ヤケクソ面倒くさい。普通はこのレベルならプリント基板を発注するわなぁ……。
早く製作しないと、せっかく買った16セグのLEDの部品が遺品になってしまう、と思ったのだが、いつ購入したものなのやら記録がない。と、このブログを検索すると、なんか違う16セグも購入してるやんけ……確かに部品棚に残ってるわ……。