@m_seki の

I like ruby tooから引っ越し

反復開発再エン

反復開発の再演

www.wantedly.com

 

去年から何度か依頼をいただいてる「反復開発」ネタです。今回は id:tricknotes 経由 エン・ジャパンに呼んでもらいました。再演といっても、ひと月前に打ち合わせの様子から「テーマ変えないとまずい」と感じて、スライドをほとんど書き直して臨んだ豪華版(全然再演じゃない!)です。

 

みんな集中して考えているのが伝わってきて、あー、これはいいチームだわ、と思いました。三時間近く集中するのはしんどいと思うけど、みんなすごい。

再演は金で買えるのでみんなも課金しよう!こんな場が作れてお買い得ですよ!

 

追記

 

恒例!スライドに名前を入れる券 2018-2019

The right to put your sticker on my MacBookAir, again.

だいたいフォント感を身につけたい

Mdnの絶対フォント感特集

大昔はMac系で、いまはデザイン系の雑誌(たぶん)のMdNの「絶対フォント感を身につける」特集、以前から気になっていました。最近、ポプテピピック特集の紙の本を買った時、kindle unlimitedで読めることに気づきました。お得!

検索してみたら、三冊もあったのねー。

 

これは楽しい。今は鉄道各社のフォントの紹介(使用フォント名も書いてある)を読んでます。あー、いろんなフォント欲しいなあ。

kindle unlimited、MdN読むだけでも元が取れたなー(端末代も考えると紙の方が安いけど)

 

なお最新号はポプテピピック特集。

 

 

 

 

DockerでdRubyしたって言っても、そんなにいい話じゃない

なんでDocker...

Dockerの中のirbdRubyしてほかのコンテナと通信するのと、いつもの複数プロセス、複数マシンでやってるdRubyプログラミングとあまりにも違わない。(複数ユーザーにしてユーザー権限でいろんなサービス動かすとそっくり
なんで今さらDocker...。

いい話にすり替える

さっきの実験ではゼロコンフィグ風だったけど、さらにゼロコンフィグ感高めたい。

Ringを思い出す

dRubyが標準添付になるどさくさに紛れて、rinda/ringというルックアップサービスを入れた。dRuby本を書くケース以外の利用例を見たことがないが、今日こそ使ってみたい。
Ringは主に二つのパートからなる。一つは、ネットワーク上のRindaのタプルスペースを公開する/探索する部分。もう一つは、タプルスペースをネームサーバーと見立て、そこにサービスとその場所(URI)を書く/自動的に消す部分である。たぶん。

RingはUDPを使ってブロードキャストを行うので、Ring用のタプルスペース(RingServer)は実質的に一つのマシンに一つだけ生成できる。PCが一台しかないと実験しにくいが、Dockerを使えばいい感じ!

タプルスペースを公開する

dRubyを動かして、タプルスペースを作って、RingServerを作れば公開完了。

$ docker run -it test/ruby
irb(main):001:0>   require 'rinda/tuplespace'
irb(main):002:0>   require 'rinda/ring'
irb(main):003:0>   DRb.start_service()
irb(main):004:0>   ts = Rinda::TupleSpace.new
irb(main):005:0>   Rinda::RingServer.new(ts)

じゃあもう一つ別のコンテナで検索する。

$ docker run -it test/ruby
irb(main):001:0> require 'rinda/ring'
irb(main):002:0> DRb.start_service
irb(main):003:0> finger = Rinda::RingFinger.finger
irb(main):004:0> ts = finger.primary
=> #<DRb::DRbObject:0x00005629551a1da8 @uri="druby://172.17.0.2:40721", @ref=47391105262580>

ひょー。見つかった。操作できるぞ。*1

irb(main):005:0> ts.write(['hello', 'world'])
irb(main):006:0> ts.read(['hello', nil])
=> ["hello", "world"]

最初のコンテナでもreadしてみる。

irb(main):006:0> ts.read([nil, nil])
=> ["hello", "world"]

おー。ふつうだ!

コンテナ同士がお互いのIPアドレスやポート番号を別の人間などが教えあうことなくつながったんだけど、面白さわかる? *2


サービスをネームサーバーに登録する

今回はなし。使い方は以下のページにあるが、CFP的にそっちには行かない予定。

http://www2a.biglobe.ne.jp/seki/ruby/d208.html

TODO

絵を描かないとなんの話かわかんないなー。
一度下書きをロストしたら、二度目はかなり投げやりな感じになってちょうどよかった。

なお、ロストしても投げやりにならないように、スライドスポンサー募集してます!

恒例!スライドに名前を入れる券 2018-2019
The right to put your sticker on my MacBookAir, again.

*1:ちなみにfinger.primaryは最初に見つかったやつをキャッシュして返すけど、lookup_ringを使えば都度検索できるぞ!

*2:UDPのポート番号は固定だからちょっと嘘がある