2020 年 6 月の活動まとめ
イベント
06/04(水) プログラミング言語Go完全入門 質問会
メルカリ主催の Go 言語入門者向けのイベントで 5 分間の LT 枠で登壇しました。
こちらで公開されている「プログラミング言語 Go 完全入門」は本当によくできた教材だと思います。 自分の LT のタイトルもこれにあやかってつけさせていただきましたが、 結局入門者むけの Go におけるコード生成概論のような月並みな内容になりました。
自分が伝えたかったことは先月 Qiita で書いた go generate のベストプラクティス という記事にまとめましたので、あわせてご覧ください。
06/07(日) 第24回 Raspberry pi もくもく会@オンライン
Raspberry Pi のオンラインのもくもく会に初参加。 Discord を初めて使いました。 いろんな人が集まっていろんなプロジェクトに取り組んでいるのが面白かったと思います。
自分は次のような自己紹介をしました。
もくもくの成果については次の節で説明します。
開発
GitLab: Raspberry Pi ブートストラップ CI/CD
前述の「第24回 Raspberry pi もくもく会@オンライン」で取り組んだものです。 次の 3 つの GitLab のプロジェクトを作りました。
- https://gitlab.com/yaegashi/raspi-debootstrap
- https://gitlab.com/yaegashi/raspi-firmware
- https://gitlab.com/yaegashi/raspi-image
Raspberry Pi の組み込み Linux システム向け OS のブートストラップを、 GitLab.com の無料の GitLab CI Runner でやってみました。 SquashFS イメージファイルを作るところまではできましたが、 最後の SD カードイメージを作るにはループバックデバイスが必要なるので、 それが CI 環境でできるかどうかという問題があります。
しばらく放置状態になっているので、そろそろまた手を入れていきたいと思います。
GitHub: contest.go
contest.go は Go 言語で競技プログラミングの問題を解くためのライブラリと CLI ですが、 このたびついに contest-cli で AtCoder コンテストのテストケースのダウンロードができるようになりました。 この機能により、毎週取り組んでいる ABC 過去問の練習の効率が大きく向上しました。
AtCoder には問題取得の API がないので、仕方なくコンテストの web ページにアクセスして goquery で HTML ドキュメントのスクレイピングを行っています。
これがコンテスト本番でもできると最高なのですが、 本番中のコンテストにアクセスするにはユーザー認証が必要なので、次はその部分を作る必要があります。 それができたら、こんどは解答の提出ですね。
また Codeforces とか他のコンテストのテストケースにも対応していきたいと思っています。
GitHub: azbill
azbill はその名のとおり Azure クラウドサービスの使用量・請求額を取得するための CLI ツールです。 日々の利用実績を集計や分析に適した CSV や JSONL の形式で出力できます。まだ開発中でドキュメントがありません。
予約インスタンスの消費状況を含むフル情報を取得するために Azure REST API の Consumption Usage Details の 2019-10-01 バージョンを使用していますが、 現在の Azure SDK for Go ではこの API がまだサポートされていません。 そのため AutoRest ツールを用いて 最新の API 仕様書から Go のコードを生成しています。
このあたりのことも含めて紹介する記事を来月書きたいと思っています。
GitHub: cobra-cmder
前述の 2 つの Go プロジェクトで CLI 構築ライブラリ spf13/cobra を使ったときに、 グローバル変数や init() 使うのはやっぱりがまんならんと思って発作的に作ったルーチンを汎用ライブラリ化したものです。 類似のライブラリは他にもあるかもしれません。
構造体のインターフェースや埋め込みフィールド、メソッド値といった Go の言語仕様を駆使して、 アプリ全体をスッキリエレガントに記述できるような規約を考えるのは、 今思えば単なる現実逃避でしたが、やっぱり楽しかったです。
記事
Qiita: cobra-cmder で Go の CLI を簡単に作る
前述の cobra-cmder を紹介する記事です。 play.golang.org で動くレベルのコードやテストに、ひととおりの機能やアピールポイントを盛り込むのがちょっと大変でした。 またタイトルが目立たなすぎるので、もうちょっとキャッチーなフレーズを考えればよかったと思いました。
競技プログラミング
今月は、なんとほぼ 1 年ぶりに AtCoder と Codeforces のコンテスト本番に出場しました!
Codeforces #652 ではこういう経験もしました。 Codeforces のジャッジはぜんぶ 32 bit 環境という話を聞いたのですが本当でしょうか。
Codeforces #652 に出場したのだが Go のジャッジがなんと 32bit の処理系であることを知らず 2 回ほど死にかけた。どちらも pretest 1 でオーバーフローを教えてくれる親切なテストケースで命拾いした。 pic.twitter.com/cATl9Yx1fE
— YAEGASHI Takeshi (@hogegashi) June 23, 2020
突然出場した理由ですが、 contest.go を改善したことによりコンテスト参加の機運が高まったのが一因かと思います (その後本番でテストケースのダウンロードができないことを知りがっかりするのですが)。
使用言語が Go に変わり VSCode の活用でコーディングの効率はそこそこ上がりましたが、 コンテストの実力は以前と大して変化ない結果になりました。 AtCoder ではパフォーマンスが 1500 弱といったところなので、 とりあえずは青色を目指して継続していきたいと思います。
1 年前とくらべて驚いたのが、 AtCoder も Codeforces もコンテスト参加者が 2 倍くらいに増えていたことでしょうか。 毎週 1 万人ちかくが ABC に参加しているとは、すごい!
まとめ
今月はイベント登壇の機会があったし、競技プログラミングのコンテストにも出場できたし、 いろいろアウトプットがはかどった気分がしたのでよかったです。 あとは記事の執筆をどうにか増やしていきたい。
なお来月は 2 つのオンラインベントで喋る予定です。よろしくお願いします。
- 07/03(金) HashiTalks: Japan
- 07/25(土) July Tech Festa 2020