詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

2022年、毎週ブログを書いた

ハッピーホリデー! これははてなエンジニアアドベントカレンダー2022の 25 日目の記事です。昨日は id:yutailang0119WEB+DB PRESS Vol.132 特集2 「iOS 16最前線」に寄稿しました #wdpress でした。海賊スタイル、いい命名ですね。


さて掲題の通り、2022 年は毎週ブログを書くぞ、と年初にゆるく決意していたのだけど、これがだいたい達成できたようなのでふり返ってみる。だいたい、というのは本当にだいたいで、風邪をひいていた週、登壇した週、あと肉体的にめちゃくちゃ疲れていた週は普通に休んでしまっている。それ以外にサボりはなかったので自分の中では毎週です。

なんで毎週書くことにしたのかはもう覚えていないけれど、会社ではエンジニアのみんなに「オープンネスを大切にしよう。知識や経験を周囲に共有していこう」という話をしている割に、自分が実践できていない自覚があったので、ちゃんとしないとな、という気持ちはもともとあった。そんなところに 2022 の年始は調子よくブログを書いていたので、いけるところまで続けてみようと考えたのだと思う。誰に宣言したわけでもないのだけど、途中で気づいてくれた人もいて、励みになった。

自分自身はコンテンツ主義というか、記事を書くにあたって何か指し示せるモノがないと落ち着かないタイプである一方、若い頃に『ハッカーと画家』なんかを読んで自意識を育ててきたため、プログラマ向けのエッセイを書ける人に憧れているところがある。毎週ブログを書くことで手を動かす系のネタが切れて、コードなしのエッセイを書くようになるのじゃないか、という淡い期待もあった(結局、意地でもコードを書く自分を発見することにはなった……)。

ネタ選び

毎週書けることなんて自然には生まれないので、意識して送り出していく必要があった。以下のように毎週の予定表(というほど大層なものではないが)を作っておいて、週ごとのイメージをつけていく……つもりだったけど、結局その週になるまで空欄の、自転車操業の週が多かった。

一応、いくつかの小ネタは準備してあって、「自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた」のように取り掛かって数週間かかるネタをやっているときは、臆せず小ネタを投稿することにしていた。この場合は「Chrome仕事術」とか。そして小ネタのほうがブクマがついたりすることもある。

取り掛かるネタはプライベートなメモ会場にいろいろ書き留めてあって、困ったらこれを頼ることにしていたけど、やっぱ古いアイデアは干からびていて面白くなさそうで、やる気が出ないものが多い。多くは思いつきから手を動かしたことが記事になった。ちなみに最新のネタはこれです。

時間の捻出

とはいえ時間が一番のネック。現代人には時間がない。知ってる範囲では朝の時間で勉強したりコードを書いたりしてる人もいるようだが、自分の場合は朝起きてすぐパソコンを開くと一日じゅう目のパフォーマンスが落ちるので、この方法は取れない……。結局、夜の時間を使うことが多かった。

最近は酒も飲まず・かなり早寝をする生活で、ゲームも Baba Is You くらいしかしていなかったので無趣味と言ってよく、長めの睡眠時間を少しずつ削ることで時間を捻出していった感じ。断酒と睡眠でベースの体力がそれなりに確保できていたのも奏功した。9時間睡眠は友達。

書きはじめたころはだいたい水曜日を目安に投稿していたのだけど、この基準は容易に後退していき、金曜日まで、いや日曜日までに投稿できてればオッケー、最終的には日曜日の寝る前(時計では月曜日)までならよい、という基準にまで成り下がった。まあそのおかげで続けられたのでよいということにする。

グラフにしてみるとこうなった。月が進むにつれて日曜日 (7) が増えてってますね。

おわりに

という感じで今年を過ごしてきました。ふり返ってみると、コードを書く理由を自分に作ってあげることができたのはよかったかな。作って書けば何かしらフィードバックが得られるので、それで自尊心をメンテナンスできていた部分もあると思う。当然反応が全然ないときもあるが、毎週書くことにしてるので「次があるさ」で進んでいくことができるのもよかった。

毎週という頻度にしてしまうと、出すことにフォーカスしすぎて、取りかかることが小粒になりがちなのは欠点だった。踏まえて来年はどうするかというと、毎週書くのはもうやめたい一方、隔週や月イチだとテンポの維持は難しい気がする。もっと日記に寄せていくといいのかもしれない。


以上、はてなエンジニアアドベントカレンダー2022 最終日、25 日の記事でした。くぅ~疲れましたw これにて完結です!

え?

おや!? はてなエンジニアアドベントカレンダーの様子が……!

おめでとう! アドベントカレンダーはもうちょっとだけ続くそうです。オーバーランの明日は id:cohalz さんです。よろしく!

2022年に作ったもの16(セルフレビューあり)

2015年にも同じ趣旨の記事を書いていた。このときはこんな感じで毎年20個くらいはなんか作るんだろうなとかイノセントに考えていたけど、そうは問屋が卸さず、大して生み出せてない年が続いてきたが、今年はそれなりに作ったんじゃない? と思えたので、振り返ってみる。オシャレにハッシュタグっぽく使った技術を書いてるぜ!

漢字ル #React

Wordleの漢字バージョン「漢字ル」を作った - 詩と創作・思索のひろば

ステータス: 使っていない

Wordle の四字熟語版。そもそも自分が遊ぶために作ったわけではなかったしな。公開当時はニュースサイトに取り上げられたりして盛り上がったが、いまはごく稀に遊んでくれてる人を見かけるくらい(積極的にエゴサもしていない)。

ウェブ薄氷 #CloudflareWorkers

早朝の薄氷をウェブで割る - 詩と創作・思索のひろば

ステータス: 使っていない。また使うかも

早朝の薄氷をウェブで割りたいよね~。これなんなんだろう。またリアルに水溜りの氷を見たら、使うかもしれない。

DevTools で esbuild する Chrome 拡張 #Chrome

DevTools上でesbuildするChrome拡張を書いた - 詩と創作・思索のひろば

ステータス: 使っている

もともとの動機のまま、Scrapbox の UserScript をバンドルするときに。けどなんか手順が多くて、もっと簡単になってほしい。あとそれ以外の用途に使うこともない。

sbx: Scrapbox のコマンドラインクライアント #Go

Scrapboxのコマンドラインクライアントを作った - 詩と創作・思索のひろば

ステータス: 使っていない

これなんのために作ったんだっけ!? 「JSON権の保障」言いたかっただけなんちゃう!?

ターミナルから TickTick のタスクを確認するツール #AppleScript

ターミナルからTickTickのタスクを確認する - 詩と創作・思索のひろば

ステータス: まれに使っている

もうターミナルに組み込んでしまっているので勝手に発動する。けど積極的には見てないな。タスク管理ツールって難しい。

letterknife: コマンドラインで使えるメール向けの jq のようなもの #Go

コマンドラインでメールの内容に基づいた処理をするツールを書いた: letterknife - 詩と創作・思索のひろば

ステータス: 便利に使っている

neomutt とともに便利に使っている! これがないと暮らせない。urlview も再発明したいんだけどなあ~。なんか食指が動かない。

oauth2util: OAuth2 の認可フローを簡略化 #Go

OAuth2 のよくあるフローを何回も書きたくない #Go - 詩と創作・思索のひろば

ステータス: また使うかも

作ったの忘れてたけど、また同じの実装しようとしたときに思い出しそう。「これはさすがに切り出してるでしょ」みたいな自分に対する信頼感は長年の付き合いで醸成できている。

Vnodroid: 話を聞いてくれる3Dアバター #VRM

3Dアバターに話を聞いてもらう - 詩と創作・思索のひろば

ステータス: 使っていない

アイデアはいいんだけどなー、どうしても「人が動かしてる感」が拭えない。人どころか自分だし。こういう自然さを追求する能力がない。

youtube-transcription-player: 字幕ナビゲーションつき YouTube プレイヤー #WebComponent

YouTube 動画を字幕によるナビゲーションつきで埋め込める Web Component を書いた - 詩と創作・思索のひろば

ステータス: 使っていない

YouTube で動画を撮っていない。またなにか作ったときに撮影したいな。

gcal-tui: Google カレンダーをターミナルから操作 #Go

Googleカレンダーをターミナルからキーボードで操作する - 詩と創作・思索のひろば

ステータス: 便利に使っている

便利便利! ひとまず十分にニーズを満たせている。たまに画面が崩れることがあるのが難点。まだ調べられていない。

Obfuscate texts: ページ内のテキストを読めなくする拡張 #Chrome

ページ内のテキストを読めなくするChrome拡張を作った - 詩と創作・思索のひろば

ステータス: 使っていない

またスクショを撮る機会があれば。広告だけが生き残った世界のスクショは面白いので見てみてください。

投稿短歌カレンダー #CloudflareWorkers

投稿短歌カレンダー - 詩と創作・思索のひろば

ステータス: 使っていない

カレンダーに登録はしてるけど今はもう見ていない。短歌を作っていないから……。また情緒が復活してきたら。

Slack Profile Card Generator: Slack からプロフィールカードを生成 #GoogleAppsScript

Google Apps ScriptでSlackのプロフィールカードを作る - 詩と創作・思索のひろば

ステータス: 使っていない

あー! これ要求する権限が大きすぎて使ってもらえないんだった。修正するアイデアはあるのでやっちゃいたいな。(やっちゃいたいだけでやらないやつ)

stablediffusion-server-on-colab: Stable Diffusion を Colab で Web アプリ化する #TypeScript

Stable Diffusion を Colab で Web アプリ化する - 詩と創作・思索のひろば

ステータス: 使っていない

これはもうデファクトのいいやつがあるしなあ。NovelAI に金払ってるし。

Scrapbox で行頭にアスタリスクを挿入したら見出しにする UserScript #TypeScript

Scrapboxで行頭にアスタリスクを挿入したら見出しにする - 詩と創作・思索のひろば

ステータス: 使っている

便利なやつ。そもそもなんかで UserScript が効いていなくて使えてないときもあるが……。

今年の進捗プログラスバー SVG #CloudflareWorkers

今年の進捗プログレスバーSVG - 詩と創作・思索のひろば

ステータス: 使っている

定例で KPI と時の進捗を見比べるために便利に使っている。


作ったことすら忘れてたものもあったのを掘り返せて、よかった……。思いついたものを実装してみただけ、のものもあれば、自分の日常を便利にして使い続けられているものもあり。そこそこバリエーションはあったかな。またやりましょう。

HuggingFace Transformers を AWS Lambda で動かすサンプル

前の記事 の最後に載せていたライブデモは AWS Lambda にデプロイしていた。公式の解説記事(Hosting Hugging Face models on AWS Lambda for serverless inference | AWS Compute Blog)だとモデルを EFS にキャッシュさせることになっているけれど、Docker イメージに詰め込んでしまったほうがシンプルで作りやすかったので、そうした。

Dockerfile は以下のような感じで、使用するモデルは transformers-cli download であらかじめダウンロードしておく。もちろん自前のモデルの場合は必要ない。

FROM public.ecr.aws/lambda/python:3.8

COPY requirements.txt ./
RUN pip install --disable-pip-version-check -r requirements.txt && pip cache purge

ENV TRANSFORMERS_CACHE /var/cache/transformers
RUN transformers-cli download rinna/japanese-gpt2-small

COPY app.py .

CMD ["app.lambda_handler"]

全体はこちら: GitHub - motemen/example-huggingface-transformer-on-serverless

TRANSFORMERS_CACHE を設定しておかないと、以下のようなエラーが出た。書いてて気づいたけど、ビルド時と実行時とで HOME が違うからだな。

There was a problem when trying to write in your cache folder (/home/XXXXXXXX/.cache/huggingface/hub). You should set the environment variable TRANSFORMERS_CACHE to a writable directory.
    mkdir(name, mode)/python3.8/os.py", line 223, in makedirs/file_download.py", line 1038, in hf_hub_downloadtrained

small モデルの場合はメモリは 2GB あればいける模様。API Gateway の制限の 30 秒以内には生成できる(ことが多い)。

% curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/generate-small -d '{"text":"こんにちは、"}' | jq .
{
  "results": [
    "こんにちは、たねるです♪ 先日テレビや雑誌で「アザフェイス」というタレントさんが大絶賛! タレントさんたちの間で流行",
    "こんにちは、さて、 前回は、前々回のブログの更新からだいぶ時間が経過してしまいましたが、 さて、今回は前々",
    "こんにちは、今日もお越しいただきまして誠にありがとうございました! 早速、私が... 続きを読む 【今日のオススメ"
  ]
}

あとたまに以下のようなエラーが出るのだけど再現性がなくてなんともできていない……。

Error in cpuinfo: failed to parse the list of possible processors in /sys/devices/system/cpu/possible
Error in cpuinfo: failed to parse the list of present processors in /sys/devices/system/cpu/present
Error in cpuinfo: failed to parse both lists of possible and present processors

はてなで一緒に働きませんか?