COVID-19 のワクチン接種3回目の副反応におびえているいっちーです。 摂取から5時間経ちましたが、まだ特に症状は表れていません。 翌朝が怖い。
さて、副反応への恐怖を少しでも紛らわせようと、 RFC9226 Bioctal: Hexadecimal 2.0 を実装してみた、というお話です。
shogo82148/go-bioctal RFC9226 Bioctal: Hexadecimal 2.0 4/1 に公開されていることから分かる通り、Joke RFC です。 実用性はありません・・・が、実装することは可能です。
今年のジョークRFC「16進数2.0」。16進数を表記するには0から9の数字にABCDEFを加えた物が一般的だが、01234567cjzwfsbvにする事で、数字かどうかで最上位bitがすぐ分かり、なんとなく形が似た文字から下3bitがすぐに連想できる為humanのbrain cyclesを抑えられるという内容https://t.co/BsmKFcqv4J
— Fadis (@fadis_) April 2, 2022 一般的な16進数の変換に使われる文字を、下位3bit が同じもの同士が縦に並ぶよう配置すると、以下のようになります。
0 1 2 3 4 5 6 7 8 9 A B C D E F 下の段はアルファベットが入るのに、8, 9 だけが数字で不自然ですね(?) というわけで、下段を英字だけにしたものが Bioctal です。
0 1 2 3 4 5 6 7 c j z w f s b v 一般的に人間が一度に覚えられる物事の数は 7±2 と言われています。 16個も文字とそれに対応するbit列を覚えるのは大変です。
謎の個人ブログの「同じPCトラブルが出た人の為に備忘録を残しておきます」の頼もしさは異常
PCトラブル以外で人生とかも言及しといて欲しい
— とあるコンサルタント (@consultnt_a) March 6, 2022 ちょっと明日マイナンバーカードの住所変更してくるから人生の備忘録として残しておくね・・・
— f96fd3a0-bdb9-4f10-b69f-8f765c1d341c IchinoseShogo (@shogo82148) March 6, 2022 と書き込んだのをすっかり忘れていたのでやっていきます。
住所書き換えの手順 いろいろあって千葉県柏市柏の葉キャンパスから新潟県新潟市に引っ越したので、人生の備忘録として残しておきます。
「いろいろ」の詳細はそのうち書くかもしれない。書かないかもしれない。 とりあえず悪い話ではないとだけ記しておきます。
持ち物リスト 引越し前の住所の転出証明書 マイナンバーカード 利用者証明用パスワード (4桁の数字) マイナンバーカード署名用パスワード (6文字から16文字までの英数字) 僕は今回身分証明書としてマイナンバーカードを利用したましたが、もちろん運転免許証や保険証・パスポート等でもOKです。 まあ、マイナンバーカードを発行していたらどうせマイナンバーカードの住所変更も必要なので、 このリストが一番楽だと思います。
NEXT21 へ行く 新潟市中央区役所 のサービス窓口は NEXT 21 というビルに入っているので、そこに向かいます。
Google Map で調べたら自宅からバス10分、徒歩20分だったので、 「バスの平均待ち時間を考えれば大差ないな」との結論にいたり、徒歩で向かいました。 駅からだと倍くらいかかかると思うので、駅からならバスを利用したほうが良いかもしれません。
転入届を提出する NEXT 21 の二階にサービス窓口があるので、そこに転入届を出します。 エスカレーターで二階に上がったらお姉さんが待ち受けていたので、転入届を出しに来たことを伝えると、 さっと記入用紙を出してくれました。 やっぱりこれからの時期転入・転出が多いので慣れているんでしょうね。
自分名前と引越し前の住所と引越し後の住所等々を記入し窓口に提出します。 引越し前の役所でもらった転出証明書も忘れずに。 このとき身分証明書も必要になりますが、今回はマイナンバーカードを証明書として提出しました。
マイナンバーカードの住所表記を書き換える マイナンバーカードを身分証明書として提出したので、 こちらから特に何も言わずともマイナンバーカードの住所表記書き換えをやってくれました。 ただし担当が違うらしく「同じフロアにあるパスポートセンターで待っていてください」と言われたので、 指示にしたがって移動します。
10分ほど待っていたら窓口に呼び出されてマイナンバーカードの住所表記が終わっていました。
新しいマイナンバーカードの電子証明書を発行してもらう ここで注意が必要なのは「マイナンバーカードに印字された住所のみ変更される」という点です。 マイナンバーカードの電子証明書にも住所情報が書き込まれているのですが、 その変更には別途手続きが必要です。 (こう説明を受けた覚えがあるけど、一度発行した電子証明書を書き換えることは技術的に不可能なので、実際には新規証明書の発行かな?)
職員さんから「パスワード覚えていたらこのまま手続きできますよ」と案内されたので、 案内にしたがってパスワードを入力します。
利用者証明用パスワード (4桁の数字) マイナンバーカード署名用パスワード (6文字から16文字までの英数字) (QWERTYキーボードではなくABCD配列だったので打ちにくかった)
Go言語の time.Time 型の比較は比較演算子が使えず、 Time.Before と Time.After を使う必要があります。 日本の Gopher あるあるだと思うんですが、これって覚えられないですよね・・・。 英語のネイティブスピーカーだと楽勝なんでしょうか。
よくわからなくって毎回ググっているので、対応表にまとめました。
対応表 大小関係 Go での記述 t == u ⇔ t.Equal(u) t > u ⇔ t.After(u) t < u ⇔ t.Before(u) t >= u ⇔ !t.Before(u) t <= u ⇔ !t.After(u) 以上
2023-10-24追記: Go 1.20 から Time.Compare が追加されました。 これを使うと以下のように書けます。
大小関係 Go での記述 t == u ⇔ t.Compare(u) == 0 t > u ⇔ t.Compare(u) > 0 t < u ⇔ t.
AWS App Runner に!VPC との接続機能がやってきました!!
📣『VPC 内の RDBMS 使いたいから App Runner じゃなく ECS/Fargate 使ってますわ〜』という皆さまお待たせしました!!
本日から既存の App Runner サービスを含め、直接 VPC 内リソースにアクセスできるようになります!🎉🎉🎉https://t.co/SGDTD1kPCb 1/4 pic.twitter.com/tbVt47ORSI
— Tori Hara (@toricls) February 9, 2022 Amazon RDSやAmazon ElastiCacheのような一部のサービスは VPCからの利用を前提としています。 VPCを利用することによりセキュリティーを担保しているのですが、 AWS App Runner のようなマネージドサービスと連携が難しいという欠点がありました。
しかし、今回の VPC connector サポートにより簡単に連携ができるようになりました。 というわけで、お試しで MySQL (on Amazon RDS) との連携を試してみました。
使う言語はもちろんPerl!
作るのはやっぱりアクセスカウンター!!
アクセスカウンターを用意する MySQL を使ったアクセスカウンターを知らないのでテキトーに作ります。 ファイルを直接操作するよりはずっと簡単ですね。 AWS App Runner に Perl をデプロイしてみた のときと同様、 ソースコードは shogo82148/perl-on-aws-app-runner に置いてあります。
こんな感じになりました。
# app.psgi use DBI; use 5.
Apple M1 が登場してはや一年。 昨年末にはその強化版の M1 Pro / M1 Max が発表され、 Mac Book Pro / Air のラインナップも全て M1 に置き換わってしまいました。 使用しているツールが未対応だったこともあり、弊社ではインテル版を使い続けていたのですが、 今ではツールの M1 対応も進んできたので、徐々にM1への移行を進めています。
僕の手元にもようやく M1 Mac Book が回ってきたので、 何周か遅れている気はしますが、インテルからM1への移行やってみたよ(2022年1月版)ということで記録を残しておきます。
Homebrew 公式ドキュメントのインストール手順 に従って以下のコマンドを実行すればOKです。 インテルもM1も特に変わりはありません。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ただしドキュメントの冒頭に記載がある通り、インテルとM1とではインストール先が異なります。
This script installs Homebrew to its preferred prefix (/usr/local for macOS Intel, /opt/homebrew for Apple Silicon and /home/linuxbrew/.linuxbrew for Linux) so that you don’t need sudo when you brew install.
どうやら /usr/local への書き込みに root 権限が必要になったので、 /opt/homebrew へ移動したようです(要出典)。 /usr/local/bin にはデフォルトでパスが通ってますが、/opt/homebrew/bin には通っていないので、明示的に追加する必要があります。
dependabot を使って 依存ライブラリの更新に追従しているのですが、 API のようなデプロイが必要なものは当然ながらデプロイしないと意味がありません。 今までは手元でデプロイしてきましたが、いい加減面倒になったので GitHub Actions を使った自動化をしてみました。
とりあえずお試しで shogo82148/holidays-jp にワークフローを設定してみました。 AWS SAM を使った API で、 データーベースや外部サービスとの連携のないシンプルなものです。 API 自体の使い方はこちらをどうぞ。
祝日 API を公開しました 単純にデプロイした場合の問題点 GitHub Actions の環境にはすでに AWS CLI, AWS SAM CLI, Go 等々ビルドに必要なものはすでにインストールされています。 あとは 「適切な権限を設定」 すればデプロイ自体は直ぐにできます。 ただまあ、この「適切な権限を設定」が一番の難所なので今まで二の足を踏んでいたわけです。
AWS SAM で作成した API は AWS Lambda によって実行されるのですが、 Lambda 関数に適切な権限を渡すために IAM Role を作成する必要があります。 つまり SAM アプリケーションのデプロイには「IAM を操作する権限」というかなり強力な権限を GitHub Actions に渡さなければなりません。
例えば GitHub Actions からデプロイ用 IAM ユーザーのアクセスキーが漏れたとしましょう。 IAM ユーザー自体の権限を最小限に絞っていたとしても、アクセスキーを入手した人は「IAM を操作する権限」を使って「AWS アカウントのすべての操作が可能な管理者ユーザー」を作ることができてしまいます。 いわゆる 権限昇格の脆弱性 です。 「管理者ユーザー」さえ作ってしまえば、EC2 のインスタンスを大量にたてて仮想通貨のマイニングをしたり、S3 から情報を抜き取ったりと、デプロイとは無関係のことも何でもできてしまいます。
この記事は、Perl Advent Calendar 2021 の穴埋め用の予備記事です。 当日まで担当者が決まらない日が何日もあってドキドキしましたが、いやー、なんとか埋まりましたね。 記事を投稿してくださった皆様ありがとうございました。
さて、今年は万が一枠が埋まらなかった場合に備えて下準備をしておきました。
Perl 5.34.0 の try-catch を触ってみる Perl 5.35.4 の defer を先取り Perl 5.35.5 の iterating over multiple values at a time を先取り Perl の文字列用ビット操作演算子を使ってみる この辺の記事たちですね。 カレンダーが埋まる見込みが立ったので放置していたのですが、実は調査だけしていたネタがひとつ残っています。 2022年のネタにしても良いんですが、どうせその頃には忘れているので今ここで供養してしまいましょう。
というわけで、今回触ってみたのは fc 関数 です。
特に断りのない限り 2021-12-24 現在の最新安定版 Perl 5.34.0 で動作確認をしています。
Case-Folding fc 関数 は Case-Folding を行う関数です。 そもそも Case-Folding って何?って話なんですが、日本語に対応する概念が存在しないので和訳が難しい・・・。 大雑把にいうと 「大文字・小文字の正規化」 をおこなう関数です。
例えばこのブログから “Case-Folding” という文字列を検索したくなったとしましょう。 表記ゆれがあるかもしれないので、大文字と小文字の違いは無視したい、 つまり “case-folding” や “CASE-FOLDING” も対象にしたいということはよくあると思います。
こんなときこそ fc 関数の出番です。 fc 関数を使うには feature プラグマで明示的に有効化が必要です。
以前 Bash と PowerShell の Polyglot を書いたことがあったんですが、 「そういえば、どこにもメモってないな〜」と思い出したので、記録として残しておきます。
背景・目的 GitHub Actions には run というステップがあります。 任意のシェルスクリプトをかける便利なステップなんですが、 マトリックスビルドでマルチプラットフォームなワークフローを書いていると罠があります。
例えば以下のワークフローは 「Hello GitHub Actions!」とログに表示するだけの簡単なものです。
on: push: pull_request: jobs: job: strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - name: Ubuntu, macOS, Windows で実行する # shell: bash # Ubuntu, macOS でのデフォルト # shell: pwsh # Windows でのデフォルト run: | echo "Hello GitHub Actions!" コメントに書いたとおり Ubuntu, macOS では bash、Windows では PowerShell Core と デフォルトのシェルが環境によって異なります。 bash にも PowerShell にも echo コマンドが存在するので、この例はなぜか動いてしまうのですが、 もっと複雑な処理ではこうも行きません。
この記事は、Perl Advent Calendar 2021 の24日目の記事です。 23日目は @hitode909 で「リポジトリ内のソースコードを機械的にリファクタリングし続けるスクリプトを作る」でした。
今日はちょっと前から使えるようになってたけど滅多にお世話になることのない、「文字列用ビット操作演算子」を触ってみたというお話です。
特に断りのない限り 2021-12-24 現在の最新安定版 Perl 5.34.0 で動作確認をしています。
旧来のビット演算子 Perl の多くの演算子には「数値用」と「文字列用」があります。 例えば比較演算子であれば ==, != は数値用、 eq, ne は文字列用といった具合です。
しかし、ビット操作用の演算子だけには、なぜかその区別がなかったのです。 以下は perlop Bitwise String Operators から引っ張ってきた例です。 | は論理和を求める演算子ですが、両辺の型に応じて結果が変わります。
use warnings; use strict; use feature qw/say/; say 150 | 105; # = 255 (0x96 | 0x69 = 0xFF) say '150' | 105; # = 255 say 150 | '105'; # = 255 say '150' | '105'; # = 文字列の '155' (ASCII) 結果:
Perl Advent Calendar 2021 の途中ですが、ここで臨時ニュースです。
AWSジャカルタリージョン(ap-southeast-3) が利用可能になったので、 それに併せて AWS::Lambda Perl support for AWS Lambda Custom Runtime も公開しました。
SHOGO/AWS-Lambda-0.0.34/Changes 以下のランタイムが利用可能です。
arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-34-runtime-al2-x86_64:1 arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-32-runtime-al2-x86_64:1 Paws はこちら。
arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-34-paws-al2-x86_64:1 arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-32-paws-al2-x86_64:1 Arm64 アーキテクチャについては未対応のようなので、AWS側の対応が終わり次第追って追加します。
以上、臨時ニュースでした。
引き続き Perl Advent Calendar 2021 をお楽しみください。 まだカレンダーに若干の空きがあります。ブログ記事の投稿も大歓迎です!
参考 Now Open – AWS Asia Pacific (Jakarta) Region AWS::Lambda