あんパン

こしあん派

自分を必要以上に過小評価しないように、相対感を養うべき

soudai.hatenablog.com

この記事を読んで、新卒のころに同僚から掲題のようなことを言われたのを思い出した*1。そーだいさんの記事を読んだ自分の理解をおおまかにまとめると「自己の能力に自覚的になった上で、卑下するのはやめよう」という被評価者としてのスタンスの話だと思う。

同僚から言われた話も似ているけど、どう自己の能力に自覚的になるかという意味でやや違う。具体的には以下のような内容だった。

  • masawadaは相対感の勘が弱いので圧倒的に自己評価が低い
  • もっと周り(同期、同じグレード*2のエンジニア、チームのエンジニア)を見て自分がどういう位置にいるのか知るべき
  • 自己評価が不当に低かったり不当に高いということは自分の立ち位置が見えていないので不健全

元の記事では自己の能力に自覚的になれている前提があるように感じる。でも、当然みんながそうではないとも思う。自分に自信がなかったり、自己の能力に自覚的になれていないというケースは多いのではないか。このような状態だと、当然自己評価が不当に低くなる。

どうこの状態を脱出するかというと、同僚からの言葉にまとめられている通り周囲を見て自分の立ち位置を把握するに限る。集団の中での評価は、点数が付くような試験をしているわけでもなければ相対的なものになる。自分を周りと比較したときに相対的にどの立ち位置にいるのかを把握しておけば、過小評価することも過大評価することもなくなる。また、この課程で周りの立ち居振る舞いを観察することになるので、自分の伸びしろに気付くことができるかもしれない。

自信がない人のパターンとして、周囲と比べた結果逆に弱気になってしまうということがある。具体的には以下の記事に書いてあるような、複数の属性が架空の人格にバインドされてしまうパターン。

blog.sushi.money

これについては避けるべきと自覚的になれていれば必要以上に弱気になることもないかなと思う。メンターがいて定期的に1on1できる関係があるなら自分の立ち位置について会話してキャリブレーションすると良いかもしれない。

もし自分の評価について自信がなかったり悩んでいるのであれば、この考え方は頭の片隅に置いておくとよさそう。

*1:酒を飲みながらだったのでその同僚はもう忘れているかもしれないけど、言われたことは本当にその通りだなと思って以来その同僚をずっと尊敬している

*2:はてなではエンジニアに対する活躍の期待をグレードごとに分類して半期ごとに目標を立てている

Arch LinuxでRaspberry Pi Picoに繋いでLチカするまで

また自分用メモ。2週間くらい前にRaspberry Pi Picoを注文して放置してしまったのでそろそろ何かやりたい気持ちになった。


本体のBOOTSELボタンを押しながらUSBケーブルをPCに刺すとUSBマスストレージとして認識してくれる。

$ sudo dmesg
[93856.937775] usb 1-1: new full-speed USB device number 38 using xhci_hcd
[93857.079446] usb 1-1: New USB device found, idVendor=2e8a, idProduct=0003, bcdDevice= 1.00
[93857.079459] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[93857.079464] usb 1-1: Product: RP2 Boot
[93857.079468] usb 1-1: Manufacturer: Raspberry Pi
[93857.079471] usb 1-1: SerialNumber: ***
[93857.083343] usb-storage 1-1:1.0: USB Mass Storage device detected
[93857.083789] scsi host2: usb-storage 1-1:1.0
[93858.095376] scsi 2:0:0:0: Direct-Access     RPI      RP2              3    PQ: 0 ANSI: 2

これをマウントしてストレージに書き込める状態を作っておく。lsblkでデバイスを確認して適当な場所にマウントする。

$ lsblk -f | grep RP2
└─sdb1 vfat FAT16 RPI-RP2 ***
$ sudo mkdir -p /media/RPI-RP2
$ sudo mount /dev/sdb1 /media/RPI-RP2
$ lsblk -f | grep RP2
└─sdb1 vfat FAT16 RPI-RP2 *** 127.8M  0% /media/RPI-RP2
$ ls /media/RPI-RP2
INDEX.HTM*  INFO_UF2.TXT*

クロスコンパイルするために必要なツールを入れておく。

$ sudo pacman -Sy arm-none-eabi-gcc arm-none-eabi-newlib

pico-sdkとpico-examplesをcloneしておいて、sdkのありかを環境変数 $PICO_SDK_PATH に設定しておく。

$ ghq get git@github.com:raspberrypi/pico-sdk.git
$ ghq get git@github.com:raspberrypi/pico-examples.git
$ ghq look raspberrypi/pico-sdk
$ git submodule update --init
$ pwd
/home/masawada/.ghq/github.com/raspberrypi/pico-sdk
$ export PICO_SDK_PATH=$(pwd)

pico-examplesbuild ディレクトリを作って cmake .. してから blink ディレクトリでmakeして実行ファイルを作る

$ ghq look raspberrypi/pico-examples
$ mkdir build
$ cd build
$ cmake ..
$ cd blink
$ make

cd blinkpico-examples/blink ではなく pico-examples/build/blink なので注意。あとはこれをマウントした場所にコピーすればOK

$ sudo cp blink.uf2 /media/RPI-RP2
$ sudo sync
$ sudo umount /media/RPI-RP2

syncした時点でRaspberry Pi Pico上のLEDが光り出す。

試しにsleepを短くして同じ手順で書き込むと、確かに点滅の間隔が短かくなることが確認できた。しかしヘッダファイルが見付からなくてaleで怒られてしまうのであとでなんとかしたい。

サンプル*1を開くと pico/stdlib.h: No such file or directory

調べてから https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf 見たらだいたい載ってた。

Raspberry Pi Zero WHのGPIO経由でシリアルコンソール起動

自分向けメモ。ピンの配列とかすぐに忘れそうなので。

適当なUSBシリアル変換ケーブルを購入しておく。自分が買ったのはこれ。FTDIとついているものを買いがち。

GND, TX, RXを接続する。TXはRaspberry Pi上のRXに刺すし、RXはRaspberry Pi上のTXに刺す。ピンアサインはGPIO Zeroっていうツールのpinoutコマンドを使うといいぞと公式のドキュメントに書いてある。

www.raspberrypi.com

$ sudo apt install python3-gpiozero

でインストールして

$ pinout

でかっこいい感じに表示してくれる。

さきほどのドキュメントでは

TX (GPIO14); RX (GPIO15) https://www.raspberrypi.com/documentation/computers/os.html#more

と書いてあるので、GPIO14にケーブルのRX, GPIO15にケーブルのTXを刺せばOK。baud rateはデフォルトでは115200なので*1

$ sudo screen /dev/ttyUSB0 115200

で接続できる。ユーザ名とパスワードを入力してログイン。screenを終了したいときはctrl-a + k。

CloudFront FunctionsでカスタムドメインへのHTTPリクエストを自分のdotfilesのリソースにリダイレクトする

タイトルだけだとどういうことか分かりづらいのだけど

$ bash -c "$(curl -fsSL https://dot.masawada.me/install)"

のように1コマンドでdotfilesをインストールしたい。この install ファイル自体もdotfilesに含めたものを利用したい、という話。自分の場合 install ファイルは以下に置いている。

github.com

https://github.com/masawada/dotfiles/blob/main/install のrawファイルは https://raw.githubusercontent.com/masawada/dotfiles/main/install で配信されるので dot.masawada.me/$PATHraw.githubusercontent.com/masawada/dotfiles/main/$PATH にリダイレクトできればいい。これをCloudFront Functionsで実現する。

いくつか方法を考えたところ、カスタムドメインが絡んでいる(証明書を設定できる必要がある)ので、実現方法は以下のいずれかになろうと思う。いずれもCertificate Managerで証明書を取る前提。

  • ALBのListenerでリダイレクトを仕込む
  • API Gateway経由のLambdaでリダイレクトを仕込む
  • CloudFront Functionsでリダイレクトを仕込む(この記事の方法)
    • 亜種としてLambda@Edgeもあるけどあまりに素朴なJavaScriptで済むのでわざわざ採用する理由がない

ALBはやりたいことに対してお金がかかりすぎる。API Gateway + Lambda案も考えたけど /install だけでなく /scripts/os_install みたいなエンドポイントでもリダイレクトしてほしいので、ちまちまマッピングするのはだるそうだなあと思い、CloudFront Functionsで済ませることにした。というか単純にCloudFront Functions使ったことなかったので純粋な興味というのが大きな理由ではある。

ちなみにこれまではCloudFrontのoriginをS3に設定して、S3側でリダイレクトを設定していた。S3にはリダイレクトを仕込む機能があり、これで無理矢理GitHubにリダイレクトすることができる。

docs.aws.amazon.com

CloudFront Functionsがある今はこんな無理矢理なことをしなくても実現できるのでそうする。具体的には以下のような感じでStackとCloudFront Functionsの定義を書く。

gist.github.com

CloudFront Functionsで渡ってくるeventの構造は以下のページに詳細が書いてある。のでこれを読みながらちまちま書いていけば完成する。

docs.aws.amazon.com

CloudFrontなのでoriginは必ず設定する必要があって、ここでは空のS3 bucketをoriginとしている。CloudFront Functionsで全てのリクエストが捻じ曲げられるのでS3に何かを置いても特に意味はない。

あと注意点としては、このStackを初期化する際に渡すCertificate Managerの証明書はus-east-1にある必要がある。CDKは(というかCloudFormationでは)素のままではクロスリージョンで参照を渡すことができないので、証明書もCDKで発行する場合はこのStackもus-east-1で構築する必要がある。

とはいえひととおりをCDKで素朴に組めて結構便利だと思う。

プロフィールページをAstro + GitHub Pagesで作り直した

以前から https://masawada.me で運用していたプロフィールページの配信構成を変更して、ついでにHTMLとCSSの組み立てをAstroに依存するようにした。といっても見た目は極力変えずそのままにしたし、凝ったことはしていない。

左が移行前、右が移行後

github.com

リソースが散逸している旧AWSアカウントから整理された新AWSアカウント群への移行を少しずつ進めていて、その一環。以前はGitHub Pagesに独自ドメインのHTTPS対応がなかったのでCloudFront + S3の構成をとっていた。いまはLet's Encryptで独自ドメインの証明書を勝手にとってくれるので、GitHub Pagesから配信したほうが良いという気持ちになった。

ペライチなのでHTMLもCSSも手打ちで1枚ペロッとあるだけで良くはあったのだけど、もともとejsとかscssとか使って頑張って組み立ててたところからすると後退する感があったのと、いろいろ組み合わせて作ってもしばらく放置すると何がしたかったのか分からなくなるので、何らかのツールを導入しようと考えていた。とりあえず最新にアップグレードすればなんとかなるみたいな状態にしたかった。でもNext.jsは重たすぎるしなあと思っていたところ モダンで早い静的サイトジェネレータ Astro の始め方 - A Memorandum を読んでAstroを知ったので、これを試してみた。しっくりこなくてもどうせ2,3時間で式年遷宮できる規模感なので、えいやっと移行した。

astro.build

AstroはKey Featuresとして Zero JS, by default を推していて、特に凝ったことをしない場合はビルド後のファイルにJSが一切含まれない。またJSXっぽい雰囲気でテンプレートを書ける .astro ファイルに一緒にstyleを書いておくとファイルごとにスコープ化されたりして、おもてなしがある。動きのないペライチのページを作るには丁度良いツールだと思う。

デプロイのドキュメントが充実していて、GitHub PagesにデプロイするGitHub Actionsも公式で用意されている*1

GitHub Pagesはブランチにpushしないとダメだと思っていたけど今年の夏にGitHub Actionsから直接デプロイする機能がbetaで足されて便利になっていた*2。Astro公式のGitHub Actionsもこれに近いことをやっていそう。

結果数時間で作り直しが終わり、ついでにFont Awesomeを最新にしたりWebで配信する画像をwebpするなどができた。PageSpeed Insightsでも満点を取れているので満足感がある。

PageSpeed Insights

ちょっと凝ったことするならNext.jsに行きたくなりそうだけど、そうでなければAstroは便利だと思う。


追記。そういえば .astro って拡張子でシンタックスハイライトされないの嫌だな〜と思ってたけどVimでは vim-astro ってやつを入れるといい感じになったのを書き忘れていた。vim-plugを使っているなら

Plug 'wuelnerdotexe/vim-astro'

でインストールできる。