アクティビティ (今までの走行 (歩行) 距離)
Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら。
ジョギング
読書
今日は本を読む時間を作れなかった。
レアジョブ
今日の指摘事項。
「ジョギングに行く」と言いたかったんだけど...
You said: I go _to_ jogging. Correct: I go jogging.
go to
だと、後に場所が来ることになるので、「私はジョギング (という場所) に行く」と恥ずかしげもなく言っていたことなる... 「ジョギングをしに行く」という場合には、I go jogging
となる。例えば、テニスをしに行くの場合には I go playing tennis
となる。
「彼は彼のクラスメイトと飲みに行きます」と言いたかったんだけど...
You said: He drinks his classmate. Better: He goes drinking with his classmates.
「私は毎週土曜日にゴミを出します」と言いたかったんだけど...
Q: How often do you take out the trash? You said: I take the trash every Sunday. Correct: I take *out the* trash every Sunday.
take out the trash
がなかなか出てこない...
とにかく、全般的に文法が駄目。
夕飯
タマネギ納豆は初体験でしたが、タマネギのシャキシャキ感とちょっとした甘さが #おいしゅうございました https://t.co/9UtsYvT2o5
— Yohei Kawahara(かっぱ) (@inokara) 2021年1月24日
豚ハラミはコスパ最高で美味でした。#おごちそうさまでした https://t.co/pdIpEn2ZsO
— Yohei Kawahara(かっぱ) (@inokara) 2021年1月24日
RabbitMQ
この土日は、RabbitMQ を触っていた。
当初、以下の記事のサンプルコードを参考に、キューに溜まったメッセージの出し入れの雰囲気を試した。
下図のように publisher (producer) がキューに Exchange を介してメッセージを放り込んで、consumer がメッセージを取り出すだけんだけど、ちょっと違和感があった。
ちょっとした違和感というのは、consumer を起動すると、キューの中のメッセージが一気に無くなってしまうということ。自分の乏しい認識だと、consumer はキューから 1 件ずつメッセージを取り出して、メッセージの受信が完了したら、キューの中のメッセージが削除される... だったんだけど。
ということで、試行錯誤していたら Bunny::Queue#subscribe の :manual_ack
というオプションを有効にすることで、自分の認識通りの挙動となることを確認した。:manual_ack
という名の如く、メッセージの受信処理が完了したことを RabbitMQ に教えてあげる為に ch.ack(delivery_info.delivery_tag)
こんな感じで ack を送って上げる必要がある。
# サンプルを参考にしたコード require "bunny" conn = Bunny.new 'amqp://rabbitmq-server' conn.start def processing(message) puts "### Handling processing for ..." puts message sleep 5 puts "### processing done" end puts "Processing Start..." begin ch = conn.create_channel # ch.prefetch(1) q = ch.queue("examplequeue1", :durable => true) q.subscribe(:block => true) do |delivery_info, properties, payload| processing(payload) end sleep 10 while true rescue Interrupt => _ conn.close end # :manual_ack を有効にしたコード require "bunny" conn = Bunny.new 'amqp://rabbitmq-server' conn.start ... 略 ... puts "Processing Start..." begin ch = conn.create_channel ch.prefetch(1) # キューから 1 件ずつメッセージを取り出す q = ch.queue("examplequeue1", :durable => true) q.subscribe(:manual_ack => true) do |delivery_info, properties, payload| processing(payload) ch.ack(delivery_info.delivery_tag) end sleep 10 while true rescue Interrupt => _ conn.close end
ということで、学びの多い週末でした。