koudenpaのブログ

趣味のブログです。職業柄IT関連の記事が多いと思います。

乱数生成

この記事は株式会社はてなの社内スピーチ向けに書きました。

予測のつかないランダムな出来事が好きだ。子供のころはカードダスガシャポンが好きだったし、テーブルゲームでもコンピュータゲームでもランダムな結果にはやきもきしてきた。今でもしばしばソーシャルゲームのガチャには射幸心を煽られている。

出来事と言ってはいるが、ゲームなどでは人為的にランダム、乱数を作っている。

この記事は乱数生成についてのさわりと、それへの個人的な取り組みについてのものだ。

続きを読む

「葬送のフリーレン」が面白い!

サンデーうぇぶり でマンガを読んだ時に共有機能からつぶやくとそう入力されている。

ここしばらくは毎週一言感想を付けているようだ。

twitter.com

こんなに連載漫画が楽しみなのは久しぶりで「早々に読みたい」「ネタバレは嫌だ」といった気持ちからサンデーを定期購読するに至った。

そんなときに「#はてなブログで教えて キャンペーン」なるものが始まったので「ひとつ #わたしのおすすめマンガ2020 にエントリーしてみるか」と思った次第だ。

例で既に挙がってるけれど気にしない。被ったって良いのだ。

続きを読む

MackerelのアラートをAzure Logic AppsでTwitterにつぶやく

Twitterのボットを作っていて、裏にいるボットのWebアプリケーションが落ちていたらそれを掲示したいなぁ。と思った。

要するに死活監視なので、Mackerelのアラートをボット自身につぶやかせておけばいいんじゃないか? と思って試した次第。

Mackerelの通知チャンネルにはTwitterのつぶやきはないので、Webhookチャンネルを使うことになる。

AzureでWebhookを受け付けてツイートしたいとなったら、Functionsで実装するか、Logic Appsでフローを組むかといったところになると思う。

今回は流行り? のノーコードでLogic Appsにしてみた。Node-REDやLogic Appsなど、ブラウザ上で何となく操作するとやりたいことができるツールやサービスは大好きだ。

Webhookにアラートを通知する - Mackerel ヘルプ にあるサンプルのJSONフォーマットからリクエスト内容を構成する。

Logic AppsのHTTPトリガーはサンプルのペイロードを入力するとどんなデータ構造なのかを勝手に処理してくれる。

f:id:koudenpa:20201004173553p:plain
サンプルの JSON ペイロードをおもむろに貼り付ける

アラートを受けての通知内容を適当に設定して終わり。

f:id:koudenpa:20201004183941p:plain
認可はOAuthでやっておくことになる

後はMackerelのWebhookチャンネルの通知先URLにLogic AppのHTTP POSTのURLを指定してやればいい。

f:id:koudenpa:20201004235706p:plain
ロジックアプリを保存するとHTTPトリガーのURLが生える

こんな感じでボットが自分で自分の状態をツイートできるようになった。

分で構成できてとても体験が良かった。

その体験の良さを伝えるためにこの記事を書く方が何倍も時間がかかっている。それもまたよし。

過去にはこんな記事も書いていてLogic Apps好きだな! って感じ。

koudenpa.hatenablog.com

PCを買った

どんな気分で買ったのかの記録記事です。

決定打

現行マシンでは趣味の開発が快適ではなくなってきた。

特にメモリとストレージ。

8GBメモリと256GBストレージマシンなのだけれど、最近Azure IoT Edgeでコンテナを使い始めたら、それぞれの消費が激しすぎてメモリは圧迫されてスワップするし、ストレージはこれまでに増して足らなくなるしで散々だった。

最低限これを解消したい。

要求仕様

  • いわゆるハイスペックモバイルノー
    • 13.3~14インチの狭額縁クラス
    • 軽め
    • バッテリそこそこ持つ
      • イベントや勉強会で半日(6時間)が目安
  • キーボードが叩きやすい
    • テンキーが全部同じサイズ
    • エンターキーが端っこ
    • その他触感
  • メモリ32GB
  • CPU4コア
  • SSD1TB

買ったもの

jp.ext.hp.com

メモリはそもそもモバイルノートで32GB要求が無理筋だったので落とした。

他は完璧。

特にキーボードは家電量販店の店頭でいろいろ叩いてみたのだけれど、VAIOThinkpadかこれか、といった感じだった。他は変なところに電源キーがあったり、テンキーが変形だったりダメだった。VAIOThinkpadはこれまでも使っていたことがある銘柄なのでEliteになってみることにした。

起動してこの記事を書いてみた程度での触感

とてもよい。これからの趣味のPC生活が楽しみだ。

オチ

タッチパネルがついていて、オプションでスタイラスもあったのでつけてみた。

てがきはてなブログを結構楽しみにしていたのだけれど……

Raspberry Piでmackerel-agent-pluginを使う

ダイスボットを作りはじめた - koudenpaのブログで使っているAzure IoT EdgeはDockerコンテナとしてモジュールを動かしている。のでそのメトリクスを取っておきたい。

mackerel.io

MackerelでのDockerコンテナのメトリクス取得には mackerel-plugin-docker を使えばいい。これは mackerel-agent-plugins に同梱されている。

のだが、雰囲気Raspberry PiのCPUに対応したパッケージはリリースされていないようだった。

雰囲気、なのはその辺完全には理解していないため。

完全には理解していないとはいえ、それならいそれなりにできることはある。

mackerel-agent-pluginsはGoで書かれているので、ビルドすれば動くだろ。と思ってビルドしたら実際に動いた。

以下やったこと。

続きを読む

取れるもんは録っとけの精神でRaspberry Piの情報をMackerelに送る

qiita.com

↑を見て余裕でRaspberry Pi 3にmackerel-agentをインストールできた。

↓を見て余裕でその温度をMackerelに送ることができた。

qiita.com

Raspberry Pi の vcgencmd コマンドは温度以外にもいろいろ取得できるらしいので、ついでに送ることにした。役に立つことがあるかは分からない。

こんな感じでプラグインシェルスクリプトを書き換えたらとりあえず送れた。

シェルスクリプトは何も分からんので項目をコピペ!

#!/bin/bash

function to_double() {
        EQVALUE=$(echo "$1" | grep -o -e "=\([0-9]\+\.*[0-9]*\)")
        echo ${EQVALUE:1}
}

EPOCH=$(date '+%s')

RAW=$(vcgencmd get_throttled)
echo -e "vcgencmd.throttled\t$(to_double $RAW)\t${EPOCH}"

RAW=$(vcgencmd measure_temp)
echo -e "vcgencmd.measure_temp\t$(to_double $RAW)\t${EPOCH}"

RAW=$(vcgencmd measure_clock arm)
echo -e "vcgencmd.measure_clock.arm\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock core)
echo -e "vcgencmd.measure_clock.core\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock H264)
echo -e "vcgencmd.measure_clock.H264\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock isp)
echo -e "vcgencmd.measure_clock.isp\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock v3d)
echo -e "vcgencmd.measure_clock.v3d\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock uart)
echo -e "vcgencmd.measure_clock.uart\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock pwm)
echo -e "vcgencmd.measure_clock.pwm\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock emmc)
echo -e "vcgencmd.measure_clock.emmc\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock pixel)
echo -e "vcgencmd.measure_clock.pixel\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock vec)
echo -e "vcgencmd.measure_clock.vec\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock hdmi)
echo -e "vcgencmd.measure_clock.hdmi\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_clock dpi)
echo -e "vcgencmd.measure_clock.dpi\t$(to_double $RAW)\t${EPOCH}"

RAW=$(vcgencmd measure_volts core)
echo -e "vcgencmd.measure_volts.core\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_volts sdram_c)
echo -e "vcgencmd.measure_volts.sdram_c\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_volts sdram_i)
echo -e "vcgencmd.measure_volts.sdram_i\t$(to_double $RAW)\t${EPOCH}"
RAW=$(vcgencmd measure_volts sdram_p)
echo -e "vcgencmd.measure_volts.sdram_p\t$(to_double $RAW)\t${EPOCH}"

f:id:koudenpa:20200923220052p:plain
Armコアの周波数は結構変わっているようだ

リアルダイスボット完成度80%

ダイスボットを作りはじめた - koudenpaのブログ の続き。

「ダイスロールの様子が録画されていないようだが?」

「録画なんて飾りです」

とは言えない(結果の画像だけだと寂しい。出目が決まる瞬間を見たい)けれど『Twitterをインタフェースにして実際にサイコロを振った結果を返す』ことができるようになったのでまずまずといったところだろう。

こんな感じ(TwitterでなくSlackだが)で動く。

www.youtube.com

f:id:koudenpa:20200922213040p:plain
動画のロール結果、文句なしで出目6認識された

f:id:koudenpa:20200922211251p:plain
概ね元の想定通り処理が流れて帰ってくる形になった

途中で使っているStorage Queueのポーリング間隔が長く、そこでそれなりの遅延が発生している。キューでなくHTTPトリガーで関数を起動すると応答を少し早くできそう。

サイコロを転がす時間がかかるのもだけれど、Edgeでの画像認識に5秒位かかっている。今は640x480の画像を認識させているけれど、もう半分にしてしまってもいいかもしれない(どうせ物体1つだし)。

工夫のしどころは多い。

丁度4連休があって色々試しながら作れて楽しかった。

後はダイスロールの様子を録画できるようにしつつ、あまりにも間に合わせリファクタリングしながら使用している要素技術をもう少し調べたりしようと思う(他にも先の工夫のしどころなどもある)。

それがひと段落したら要素技術の方面から振り返りとまとめを記事にしたい。

オチ

f:id:koudenpa:20200922213453p:plain
現在の学習状況だと出目2と3はかなり認識が怪しい