Runner in the High

技術のことをかくこころみ

ソフトウェア開発におけるクリエイティビティの最小化、認知負荷

前提としてクリエイティブな仕事は再現性が低い。しかし逆に言えば再現性があってはいけないものがクリエイティブであり、再現性がないからこそクリエイティブであると言える。アートのように非再現的なものはクリエイティブであり、再現性が低く刹那的な成…

野良社内ツールと開発生産性、プラットフォーム・エンジニアリング

よくある野良の社内ツールは、開発生産性を向上させるための手段としてスポットで生まれることが多い。 たとえば、定期的に依頼されて手作業でキックしているバッチ処理を誰かがAPI化したり、それがCLIで実行できるようになったり、あるいは不特定多数の人々…

2023年を振り返る

今年もそろそろ終わってしまうので、若干気が早いが恒例のやつをここいらで一発。 Tailorに入社して1年経った 去年11月ごろに入社して、気づいたら1年が経過していた。スタートアップのスピード感を全身で感じる1年だった。 note.com 2023年はTailorプラット…

技術力のボトムライン、技術的負債

実際の現場に現れる負債とかクソコードとか呼ばれるものは、簡単にできるはずのものが何十にも不必要な複雑性でラップされた成果物(標準ライブラリ相当の実装を自前で全部書いていて、かつエッジケースでバグだらけ、とか)であることが多い。しかし一方で…

WearOSアプリでGoogle Calendarの情報を取得したい備忘メモ

先日、新しく発表されたPixel Watch 2を買った。 Google グーグル Pixel Watch 2 Champagne Gold アルミケース/Hazel アクティブ バンド(Wifi) GA05030-GBGoogle(グーグル)Amazon それに伴いWearOS用のカレンダーアプリを自作しようとしているのだが、これが…

pretter/eslintのルール設定パッケージをひとつにまとめる理由

最近、eslint/prettierの設定を共通パッケージ(eg. xxx-prettier-config/xxx-esling-config)に切り出すタイミングがあった。 これに関して、巷ではxxx-prettier-configとxxx-eslint-configというような形でツールごとに個別のパッケージを用意するのが一般的…

Next.jsアプリケーションのテスト方針覚書

現時点での自分の考えを雑なスナップショットとしてメモ 前提 ユニットテストに使うツールはjest(あるいはvitest)と@testing-library/reactを想定 テストに対応するモジュールを見つけやすいように __tests__ディレクトリは使わず、テスト対象と同じディレク…

React v18におけるCache API周りのコードを読む

React v18では以下のようにCache APIの関数をimportできるのだが、あまりに情報がないので2023年の現時点でのコードを少し読んでみる。 Reactのコミットヒストリを見る限りCache APIは2022年10月ごろにmainへマージされたらしい github.com Cache, CacheCont…

Reactの`use`とmoizeを組み合わせるといい感じ

最速攻略記事によると、Reactのuseはキャッシュと組み合わせる必要があらしい。 というわけでmoizeを使ってみたらいい感じだった。 "use client"; import { Suspense, use, useState } from "react"; import moize from "moize"; export default function Ho…

Discord誕生以前のストーリー

open.spotify.com Podcastで聴いて面白かったので、Wikipediaに書かれていない話だけ備忘録的にメモ。 インキュベータ時代 UCバークレーのルームメイトの親戚がインキュベータを始めるため、起業したい若者を探していた。その話に乗っかりシリコンバレーで起…

最近飲んだコーヒーとロースタリー

いろいろ買ってるので備忘録がてら書き残しておく。なお筆者はそんなにコーヒーガチ勢ではない。 成城石井 マイルドブレンド 成城石井 マイルドブレンド 豆 500g成城石井Amazon コスパの神。正直Amazonではなくたまに店頭でセールやっているときにたくさ…

プラットフォーム・エンジニアリングと過去の経験

Publickeyで公開されていたPlatform Engineering Meetup #1のまとめがとてもよかった。 www.publickey1.jp スライド中でも書かれているように、共通のプラットフォームを作るのがめちゃくちゃ難しいというのは同意。 自分が今年の1月ごろに書いた記事とも若…

転職活動でいろんな会社のマイクロサービスと組織を見聞きして思ったこと

転職活動でいろんな会社のエンジニアの人と話して思ったことをマイクロサービスの観点で備忘録がてらメモしておく。 よくあるマイクロサービスの分割軸として、業務機能、ユースケース(動詞)、リソース(名詞)あたりが一般的だが、これらどれもがドメイン…

2022年を振り返る

とうとう今年も終わりますね 生活 2021年の5月ごろにノリと勢いで土地を買って家を建て始めていたが、今年の2月にようやく完成。今年は入居して新居を楽しんだ。 家と言えば、そもそも家を建てていた2021-2022年の時点でウッドショックと半導体不足がフィー…

コードレビューとオーナーシップ、できる限りコードレビューをしない

前職でフロントエンドチームのスペシャリストとして開発プロセスを考えるポジションにいた。そのときに試してみて良かったなと思えたのはAutoApproveという仕組みで、これは任意のPRにAutoApproveというラベルが付くとGithub Actions経由でPRがGithub BotにA…

クラウドバンクを3年間続けた結果

2020年ごろにこんな記事を書いていた。 izumisy.work しばらくの間ずっとほったらかして運用し続けていた。 2022年10月現在では結果的に累計で60万ちょっとくらいの利益が累計で出たらしい。 2022年10月ごろの状況 いまは少しづつ投資信託のほうに配分を移し…

ブラウザ自動化のツールとその周辺知識に関する備忘録

業務でE2Eテストの導入を進めており、ブラウザ自動化のためのツールに関して調べる必要があったので備忘録的に書き残しておく。 自分のブラウザ自動化周りの知識といえばはるか昔に大学生のころインターンでSeleniumを用いたテストの自動化をやったくらいで…

Firebase JS SDKのソースコード・リーディング(初期化処理周り)

最近諸事情あり業務でFirebase JS SDKのDatabase実装周りを読むことがあったので、備忘録的にブログ記事にしてみる。 初期化処理の雰囲気 Databaseまで含めると全体像があまりにでかすぎるので、とりあえず初期化処理周りだけを雰囲気でクラス図にしてみた。…

PlaywrightでGithub ActionのJob Summary用レポータを作るといい感じ

Github ActionにJob Summaryという機能があり、これを使うとActionの結果をmarkdownに対して出力できる。 github.blog 所属しているチームではPlaywrightをテストに使用しているのだが、毎回Actionの実行でエラーがおきたときにStepを開いて見に行く必要があ…

Firebase Database REST API Streamingの挙動メモ

複雑すぎるのでまとめる ベースとなるJSONの構造は以下。すべてFirebase Database Emulatorで試している。 posts配下へのフィールドの追加 { type: 'put', data: '{"path":"/book3","data":"awesome book"}', lastEventId: '', origin: 'http://localhost:90…

Elmをローカルインストールしているとelm-language-serverのDiagnosticsが動かなくなるバグを修正するPRを投げた

github.com 仕事で開発しているElmアプリケーションとElmLSの相性が悪いのかDiagnosticsが動かないことが多かった。動くときもあるが、動かない時の方が多いレベル。もう諦めてWebpackでのビルド結果を見ながら作業をしていたが、非常に生産が悪かったのでこ…

abema/go-mp4で複数ストリームが含まれるmdatから音声のサンプルのみを取り出す

去年書いた以下の記事はmp4/m4aといいつつ、実はファイルの中に動画のストリームが入っているケースを考慮できていない。 izumisy.work その記事を書いた時点では「どうやらストリームが複数ある場合にmdatは数サンプルごとのチャンクの詰め合わせで構成され…

vim-lspでelm-language-serverを使うとリファクタリング系のCodeActionが動かない件を修正するPRを投げた

github.com 仕事柄vim-lspでelm-language-serverを用いてElmを書くことが多いのだが、なぜかVimだとリファクタリング系のCodeActionが動かないことが多かった。中でも関数のexpose/unexposeが動かないのはまあまあストレスだったので、この機会に腰を据えて…

abema/go-mp4でASCの値を取得する

以下の記事ではASC(Audio Specific Config)をffprobeで取り出したが、これはmp4デマルチプレクサでも取り出すことができる。 izumisy.work 今回はabema/go-mp4を使ってやってみる。 mp4の仕様によればesdsというboxの中に入っているらしいので、それを取り出…

Jelly Pro 2でBluetoothの接続が安定しない

1年ほどUnihertzのJelly Pro 2を使っているのだがFitbit (Charge 4)との相性が悪いのかBluetoothの接続が全く安定せず、諦めてFitbitをただの時計として使ってきた。 さすがにちょっと嫌だなと思い改めていろいろ調べた結果、以下のRedditの投稿で少なくとも…

Github Action上でEarthlyからGithub Container Registryへimageをpushする

自分で管理しているDockerイメージのリポジトリでリリースフローを自動化してみたので備忘メモ。 github.com 実際のAction実装は以下のような感じ。 Earthlyもキャッシュをいい感じにしてくれるので2回目以降はかなり速い。 name: release on: push: branche…

とりあえずopenresty/openrestyを使ったイメージを作る

超最小構成でこんな感じ FROM openresty/openresty:1.19.9.1-alpine WORKDIR /app COPY nginx.conf nginx.conf EXPOSE 8080 CMD ["nginx", "-c", "/app/nginx.conf"] daemon off; http { server { listen 8080; location /hello { default_type text/plain; …

Github Actionでdockerイメージをビルドし任意のコマンドを実行する

docker/docker-push-action と addnab/docker-run-action というやつを組み合わせると最小構成でいい感じにできる。 name: Test on: push jobs: test: name: test runs-on: Ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v2 - uses: docker/…

OpenTelemetryでもGin+GAEのログをリクエスト単位でグルーピングする

前回のOpenCensusでは比較的すんなりとGAEのログをリクエスト単位でグルーピングさせることができたが、OpenTelemetryの場合には追加でGoogleCloudPlatformのGithub Orgが用意しているpropagatorを使わねばならない。 github.com 以下がとりあえず動く超最小…

GinのOpenCensusミドルウェアを作ってCloud Loggngのログがリクエスト単位にグルーピングされるようにする

OpenCensusはdeprecatedされているので本当はOpenTelemetryを使った方がいいのだけれど、やったのでメモがてらに残しておく。アプリケーションの実行環境はGAEでやった。 追記: OpenTelemetryでやる方法も書きました izumisy.work まずはログのグルーピング(…