平常運転

アニソンが好き

過去記事とかは記事一覧で見れます

2021年

  • そこそこ Apple 製品を買った
  • 仕事はちょっと毛色が変わった
    • 所属チームが変わって担当プロダクトが変わった
    • フロントエンドを書いたり、ときどきスマートフォンアプリを書いたりしている
  • ポケモンマスターを目指して活動してる
    • 未プレイの旧作をやりつぶしたりしてる
    • 来年の LEGENDS 楽しみ
  • 来年コロナはどうなるでしょうね〜
    • ここにきて世の中また不穏なオーラが出てるけど穏当に着地してほしい

去年はこれ。去年はまだ文章を書いてたけど今年はついに個条書きになってしまった…
blog.astj.space

良いお年を!

Homebrew Formula の CI を GitHub Actions で行う

ビールの話ではなくてパッケージマネージャの話です。

主に macOS 向け*1のパッケージマネージャ Homebrew の Formula のテストをする話だったり、特に GitHub Actions で CI する仕組みを少し調べてみました、という話をします。

このエントリははてなエンジニア Advent Calendar 2021の19日目です。昨日は id:onk さんの ブログから技術記事を抽出・集約してワイワイする - id:onk のはてなブログでした。

qiita.com

ちなみに、本稿ではさも我が物のように Mackerel の Homebrew Tap を取り上げており、実際今年の夏までは Mackerel の開発チームにいたのでそんなに間違っていなかったのですが、夏以降は別のプロダクトの開発チームにいるので今は Mackerel の開発当事者ではなくなっているということは念のため付記しておきます。なのでこのエントリの中身は全て趣味です。勝手にネタにしてごめんね! > Mackerel チームのみんな

*1:Linux でも使えることは使えますが、ほとんどのケースでは macOS で使われているでしょう……

続きを読む

GitHub Discussions の更新を Slack に通知する (with GitHub Actions)

タイトルでほぼ全て。

f:id:astj:20211115184855p:plain
動いている様子

github.com

2021/11/15 現在の Slack の GitHub 連携では GitHub Discussions の更新を Slack に通知することが出来ない。そのうちできるようになるだろうとは思うものの、それまでの間のつなぎとして GitHub Actions による通知を作った。
Webhook ベースの物と比べると GitHub Actions の workflow 起動のオーバーヘッドがある分若干(十数秒程度?)通知が遅れてしまうことなどもあり少しイケてない節はあるが、そのうち公式のツールでできるようになるまでのつなぎとしては許容可能な品質だろうと思っている。
GitHub からの Webhook を変換して Slack に投げ直す HTTP エンドポイントを作る、とかだと格好いいけれど、つなぎとして使う前提であれば外部に何かプロビジョニングせずに GitHub と Slack の間で完結することにもいくらか価値があるのではないか、と思う。多分。

中身の実装は非常に素朴で、丁寧な手書きで JSON ペイロードを組み立てている。複数行入ることがある texttoJSONエスケープしていることがかわいらしいポイント。

          PAYLOAD: "{\"attachments\":[{\"mrkdwn_in\":[\"text\"],\"fallback\":\"New Comment on ${{ github.event.discussion.html_url}}\",\"author_name\":\"${{ github.event.comment.user.login }}\",\"author_link\":\"${{ github.event.comment.user.html_url }}\",\"author_icon\":\"${{ github.event.comment.user.avatar_url }}\",\"title\":\"Comment on #${{github.event.discussion.number}} ${{ github.event.discussion.title}}\",\"title_link\":\"${{ github.event.comment.html_url}}\",\"text\":${{ toJSON(github.event.comment.body) }},\"footer\":\"${{ github.event.repository.full_name}}\",\"ts\":${{ steps.timestamp_transform.outputs.comment_created_at}}}]}"

組織内のプライベートリポジトリの通知を Slack 通知するだけ、くらいのつもりで作ったのであまり人間の悪意は想定していない。何かあったらこっそり教えてください。

劇場版マクロスΔ絶対LIVE!!!!!! を見てきた

macross.jp

見てきたよ。

他にネタバレのない感想として書けるのは、マクロスΔが好きな人はうっかりネタバレ踏む前に全員見てくれ!!!!というくらい。

以下はネタバレでやるので見てない人は離脱して下さいね。

f:id:astj:20211009190942j:plain

続きを読む

Raspberry Pi 400 を買った

www.switch-science.com

キーボード一体型のラズパイが絶対かわいいじゃん……と思って買った。

  • かわいい
  • 使い道はない
    • ラズパイと聞くと IoT 的な?使い方のイメージがあるが、キーボード一体型なのでそうもいかない
  • キーボードっぽい見た目だけどバッテリーがない(=電源の Type-C を抜いたらおわり)というのが認知と一致しない
  • 本体の他に意外と必要な物が色々ある
    • micro SD (Nintendo Switch に刺さってた 128GB を転用して、代わりに Switch に 256GB のを新調した)
    • micro HDMI => HDMI のケーブル (Android 文化圏だとみんな持ってたりするんです?林檎の国では縁がなくて…)
  • マウスはあった方が楽だったけど持ち合わせがなかった

などなどの感想。かわいいのは間違いない。

以下はとりあえずセットアップのメモとして残しておくが本当に動いたヤッターでしかない。面白い使い方のアイデアは募集しています。

セットアップ

OS

microSD にイメージを焼くのは公式の Imager を使う。 Mac 版もあって安心。あんまりよくわかってないので Raspbian のオススメされたデフォルトのやつを入れた。

www.raspberrypi.org

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.63-v7l+ #1457 SMP Tue Sep 28 11:26:14 BST 2021 armv7l GNU/Linux
pi@raspberrypi:~ $ cat /etc/debian_version
10.10

最初はディスプレイその1に繋いだらなかなか起動シーケンスが進まなかったんだけどディスプレイその2につなぎ替えたら進んだ気がする。これは単なる勘違い(初回起動時間は意外とかかるっぽい?のを理解してなかっただけ)かも。

SSH と画面

マウスがないととにかく気が狂いそうになるのと、 A の左に Caps Lock があると2秒に1回入力ミスをするので、なるべく早い目に SSH は有効にしておいて他のマシンから繋ぐと、慣れたターミナルエミュレータから接続できるしブラウザで調べ物しながら触れるので安心。

画面解像度の設定はウィザードで適当に弄ってたらめちゃくちゃになったので渋々マニュアルを見ながら /boot/config.txt を設定した。この辺を見つつやる:

www.raspberrypi.org

ちなみに SSH で外から入れるようにしておくと、最悪 HDMI の設定を変なのにして画面が映らなくなっても SSH で入ってなんとかできる、という観点でも安心感があってよかった。

VNC

マウスがない問題の対処と、モニタの出力切り換えが面倒ということで、 GUIVNCMac から接続して済ませることにする。折角のキーボードつきラズパイの価値を全く生かせていないのは一旦諦める。 macOS の画面共有アプリからはデフォルトのままでは接続できない。インターネットを見ると VNC Server を入れ換えて解決している人も見受けられるが、これまたインターネットを見たところ VNC Server の設定を変えたら繋げるようなのでそうしておく。参考文献を見つつ:

qiita.com

www.laddy.info

最終的にはこういう感じにしておく。マウスが使える人は GUI 上で設定を変えたらよいと思う……

pi@raspberrypi:~ $ cat /etc/vnc/config.d/common.custom
Authentication=VncAuth
Encryption=PreferOff

pi@raspberrypi:~ $ sudo vncpasswd -service
Setting "Password" VNC parameter for Service Mode server
Password:
Verify:
Successfully set "Password" VNC parameter in /root/.vnc/config.d/vncserver-x11
Please note users of third party VNC Viewer projects will be able to connect by
entering the first 8 characters of this password only.
pi@raspberrypi:~ $ sudo systemctl restart vncserver-x11-serviced
pi@raspberrypi:~ $ sudo systemctl status vncserver-x11-serviced

ここまでやると準備完了。 Mac 側で open vnc://(IP address) とかをやると画面共有で接続できる。ちなみに mDNS があるのでホスト名(典型的には raspberrypi.local)でも接続できるはずなんだけど、手元だと resolve できなくなってる事が多々あったので、ルーターで IP アドレスを固定してそれで繋ぐようにしてしまった。技術の敗北。

おまけ: mackerel-agent

mackerel-agent は手癖で入れておく。公式の apt リポジトリでは入らないけど、 GitHub の Releases にはラズパイで使える deb があるのでそれを apt で入れると完成。

pi@raspberrypi:~ $ curl -fsSLO https://github.com/mackerelio/mackerel-agent/releases/download/v0.72.2/mackerel-agent_0.72.2-1.systemd_armhf.deb
pi@raspberrypi:~ $ sudo apt install ./mackerel-agent_0.72.2-1.systemd_armhf.deb
pi@raspberrypi:~ $ sudo mackerel-agent init -apikey="xxx"
pi@raspberrypi:~ $ sudo systemctl start mackerel-agent

f:id:astj:20211005013322p:plain

HTMLFormElement.submit は validation を無視するし submit イベントを発火しない

日記です。タイトルでほぼすべてがオチてしまった。

const form = document.querySelector('form#ultra-form');
form.submit();

みたいな感じで、 <form>JavaScript から submit することができるんだけど、この HTMLFormElement.submit は HTML Living Standard ではこう定義されている:

Submits the form, bypassing interactive constraint validation and without firing a submit event.

https://html.spec.whatwg.org/multipage/forms.html#htmlformelement

つまり、例えば下のような HTML form の場合、 submit ボタンをクリックした場合は (1) username が入力されていないと validation が通らないので submit できない し、 (2) onsubmit が false を返せば submit は中止される のだけど、HTMLFormElement.submit はそれらをすべてバイパスして問答無用で実際に form を送信してしまう。

<form id="ultra-form" onsubmit="..." action="...">
  <input name="username" required />
  <input type="submit" />
</form>

若干直感に反する気もするけどそういう感じらしい。ので、 submit ボタンを押すのと同等のアクションとしてはこれを使ってはいけない。

じゃあこういう時に何を使うといいかというと HTMLFormElement.requestSubmit というのが数年前に提案されている。こいつは submit ボタンをクリックするのと同様のバリデーションが走るし、 onsubmit によってキャンセルされることもある、というより自然な仕草が実現される。

Requests to submit the form. Unlike submit(), this method includes interactive constraint validation and firing a submit event, either of which can cancel submission.

The submitter argument can be used to point to a specific submit button, whose formaction, formenctype, formmethod, formnovalidate, and formtarget attributes can impact submission. Additionally, the submitter will be included when constructing the entry list for submission; normally, buttons are excluded.

https://html.spec.whatwg.org/multipage/forms.html#htmlformelement

やったじゃん、と思うわけですが、

caniuse.com

Safari ではまだ使えません。 WebKit レベルでは実装されていて、最新の Safari Technology Preview では「開発」メニューから選べる実験的機能扱いになっている。

f:id:astj:20210716165550p:plain

こちらからは以上です。WebKit の話は id:cockscomb さんに教えてもらいました。