ようへいの日々精進XP

よかろうもん

2022 年 08 月 04 日 (木)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

速めのペースでウォーキング。

レアジョブ

今朝は 8:30 からだった。

夕飯

体調が悪い妻が頑張って麻婆茄子を作ってくれた。やはり、妻が作る食事は美味しいし食べがいがあるなー。

寝落ち

してしまって、この日記は翌日の夜に書いている。夜ふかしが出来ない体になってきたなー。

2022 年 08 月 03 日 (水)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

今日も朝に山王公園をペース速めのウォーキング。

レアジョブ

今朝は 9 時からだった。明日は 8:30 からを予定している。

夕飯

サニーで買ってきたお惣菜をチンして食べた。たまにはこういうのも悪くない。

Slack API でグループメンションを送信する際の書き方

経緯

Slack API でグループメンションを送る方法 (書き方) が解らなくて調べた。

書き方

以下のように書く事でグループメンションが可能であることが解った。

<!subteam^ID>

例: <!subteam^Sxxxxxxxx>

ID は、https://api.slack.com/methods/usergroups.list にて確認出来る。

{
    "ok": true,
    "usergroups": [
        {
            "id": "Sxxxxxxx",
            "team_id": "Txxxxxxxx",
            "is_usergroup": true,
            "is_subteam": true,
            "name": "My Team",
            "description": "",
            "handle": "my-team",
            "is_external": false,
            "date_create": 1498785060,
            "date_update": 1652856997,
            "date_delete": 0,
            "auto_type": null,
            "auto_provision": false,
            "enterprise_subteam_id": "",
            "created_by": "Uxxxxxxxx",
            "updated_by": "Uxxxxxxxx",
            "deleted_by": null,
            "prefs": {
                "channels": [
                    "C1xxxxxx",
                    "C2xxxxxx",
                    "C3xxxxxx",
                    "C4xxxxxx"
                ],
                "groups": []
            },
            "user_count": 3,
            "channel_count": 0
        },
...

尚、idteam_id は別物なので注意する。 今回の例だと、Sxxxxxxxx を記載する。

資料

api.slack.com

2022 年 08 月 02 日 (火)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

朝、山王公園をペース速めのウォーキング。

レアジョブ

今朝は 9 時から。I think that xxx やら I hope that xxx のような自分の意見を述べるような文法が出てきて、これは使えそうということで頑張ってみた (いつもも頑張っているけど)

夕飯

ベーコンとトメイトのパスタ。妻が喜んで食べてくれたので良かった。

通院

妻を香椎の病院に連れて行った。少しずつ良い方向に向かっているようで良かった、良かった。

2022 年 08 月 01 日 (月)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

完全休養。

レアジョブ

今日はお休み。

夕飯

昨晩の残りをつまみつつ、弟弐号から送ってもらったお中元の小籠包とかを焼いて食べた。美味しゅうございました。

API Gateway + SQS + Lambda の組み合わせを Serverless Framework で

以下、serverless.yml の抜粋。serverless-apigateway-service-proxy を使うと良い。

functions:
  function_name:
    name: function-name
...
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - MySQS
              - Arn
          batchSize: 10

custom:
  apiGatewayServiceProxies:
    - sqs:
        path: /sqs
        method: post
        queueName: my-sqs
        cors:
          origin: '*'
          headers:
            - Content-Type
            - X-Amz-Date
            - Authorization
            - X-Api-Key
            - X-Amz-Security-Token
            - X-Amz-User-Agent

resources:
  Resources:
    MySQS:
      Type: 'AWS::SQS::Queue'
      Properties:
        QueueName: my-sqs

plugins:
  - serverless-apigateway-service-proxy

2022 年 07 月 31 日 (日)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

クロストレーナートレッドミルの間で、いつもの補強を 3 セット。

レアジョブ

今日はお休み。

夕飯

妻の体調不良が続いているが、頑張ってくれて野菜の煮浸しや鶏のソテー等を作ってくれた。ありがたい。久しぶりの妻の食事はやっぱり美味い。

Happy Hacking Keyboard Professional BT を Windows 10 でペアリングしようとして PIN が入力出来ない場合の対処手順

経緯

Happy Hacking Keyboard Professional BT (以後、HHKB BT) を Windows 10 でペアリングしようとして PIN が入力出来ない場合の対処手順が個人的にトリッキーだったのでメモしておく。

手順

この時点で、「え、PIN って何を入力すれば良いのか?」という状態に陥る。

ドキュメント によると...

  1. パソコン本体 (もしくは、USB 接続された外部キーボード) で「1」を入力
  2. 入力後に「接続」をマウスクリック
  3. 直後、間髪入れず (ここがトリッキー) に HHKB BT の「1」を押して「Enter」を入力

ドキュメントにも、「タイミングが非常に重要になります。接続が成功するまで繰り返してください。」と書かれているけど、今のところは失敗せずにペアリング出来ている。

接続完了。

参考

faq.pfu.jp

2022 年 07 月 30 日 (土)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

完全休養。

レアジョブ

16:30 から。「明日は休むけどごめんね。他の先生でレッスンしてみて。ちょっとジェラシーだけど」って言われて笑った。

夕飯

インスタグラムで紹介されていた「フライドおくら」を作ってみたけど、カリッとやみつきな感じにならなくてイマイチだった。ついでに手羽中の唐揚げも作ってみたけど、油切れが悪くてイマイチだった。

Active Support 便利だった

というブログを書いた。

inokara.hateblo.jp

Active Support が便利だった

経緯

ほんと、タイトルの通り。

以下のような、ネストされたハッシュのキーをシンボルに変換したくてインターネットを彷徨っていたら、Active Support の deep_transform_keys が便利に使えるよとのことだったので、見様見真似で使ってみたら意図した結果を得られたのでメモしておく。

 {"aa"=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}

本記事で扱う Ruby のバージョンは以下の通り。

ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-darwin21]

Active Support について

railsguides.jp

Active SupportはRuby on Railsコンポーネントであり、Ruby言語の拡張やユーティリティを提供します。

ドキュメントの冒頭に上記のように記載されている。Rails だけのものだと思っていたけど、そうじゃないんだなー。

デモ

Ruby 本体にも transform_keys というメソッドがあった

docs.ruby-lang.org

以下の通り、トップレベルのキーだけはシンボルに変換された。

irb(main):002:0> h = {"aa"=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}
irb(main):005:0> h.transform_keys(&:to_sym)
=> {:aa=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}

これでは要件を満たせない。

Active Support の deep_transform_keys メソッドでやってみる

Gemfile に追加。

# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

gem 'active_support'

フットプリントを最小限にするため、Active Support はデフォルトでは最小限の依存関係を読み込むとのことだけど、今回、以下のようにハッシュの拡張機能のみを読み込んでいる (つもり)。実際のところ、どのくらいメモリ使用量が変わるんだろうか。気になるところ。

irb(main):001:0> require 'active_support/core_ext/hash/keys'
=> true
irb(main):002:0> h = {"aa"=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}
=> {"aa"=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}
irb(main):003:0> h.deep_transform_keys(&:to_sym)
=> {:aa=>{:bb=>[{:cc=>"11", :dd=>"22"}, {:ee=>"33", :ff=>"44"}, {:gg=>"55", :hh=>"66"}], :ii=>"77"}}

おお、簡単!素晴らしい。

Active Support を使わないパターンを考えた

stackoverflow.com

上記の記事を参考にして、以下のようなコードを書いてみた。んー、良いんだか悪いだな。

require 'minitest/autorun'

def make_all_keys_symbol(hash)
  symbold_hash = {}
  hash.each do |k, v|
    if v.is_a?(Hash)
      symbold_hash[k.to_sym] = make_all_keys_symbol(v)
    elsif v.is_a?(Array)
      nested_array = []
      v.each do |e|
        nested_array << e.transform_keys(&:to_sym)
      end
      symbold_hash[k.to_sym] = nested_array
    else
      symbold_hash[k.to_sym] = v
    end
  end
  symbold_hash
end

class TestMakeAllKeysSymbol < Minitest::Test
  def setup
    @h = {"aa"=>{"bb"=>[{"cc"=>"11", "dd"=>"22"}, {"ee"=>"33", "ff"=>"44"}, {"gg"=>"55", "hh"=>"66"}], "ii"=>"77"}}
  end

  def test_make_all_keys_symbol
    assert_equal({:aa=>{:bb=>[{:cc=>"11", :dd=>"22"}, {:ee=>"33", :ff=>"44"}, {:gg=>"55", :hh=>"66"}], :ii=>"77"}}, make_all_keys_symbol(@h))
  end
end

いちおう、問題なく動く。

$ ruby test.rb
Run options: --seed 60294

# Running:

.

Finished in 0.000705s, 1418.4397 runs/s, 1418.4397 assertions/s.

1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

ということで

Active Support が便利だったメモでした。

おまけ

irbrequire 'active_support' した時と require 'active_support/core_ext/hash/keys' した時のメモリ使用量を ps コマンドで見てみた。

USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
kappa            72224   0.0  0.1 34924040  26564 s012  S+    3:01PM   0:00.36 irb
kappa            72224   0.0  0.1 34925192  31072 s012  S+    3:01PM   0:00.46 irb # require 'active_support'
kappa            75776   0.0  0.1 35071496  27224 s012  S+    3:02PM   0:00.37 irb # require 'active_support/core_ext/hash/keys'

確かに、若干ではあるが、ハッシュの拡張機能をのみを読み込んだ時の方がメモリ使用量 (RSS) が少ないように見える。

2022 年 07 月 29 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

通院。リハビリとクロストレーナーを 10 分。たった 10 分しか動かしていないのにヘトヘトになった。

レアジョブ

安定の 9:30 から。今月のレッスンは 20 回を超えていた。頑張ったというより、正蔵先生との毎日の雑談を楽しめたので良かった (笑

夕飯

弟弐号からもらった冷凍シュウマイやらをチンして頂きました。おごちそうさまでした。

ヘトヘト

夕飯終わったら電池が切れたように寝てしまっていた。そして、目が覚めたら日付が変わっていて、7/30 (土) の朝にこの日記を書きました。