プログラミング
よくある野良の社内ツールは、開発生産性を向上させるための手段としてスポットで生まれることが多い。 たとえば、定期的に依頼されて手作業でキックしているバッチ処理を誰かがAPI化したり、それがCLIで実行できるようになったり、あるいは不特定多数の人々…
最近、eslint/prettierの設定を共通パッケージ(eg. xxx-prettier-config/xxx-esling-config)に切り出すタイミングがあった。 これに関して、巷ではxxx-prettier-configとxxx-eslint-configというような形でツールごとに個別のパッケージを用意するのが一般的…
現時点での自分の考えを雑なスナップショットとしてメモ 前提 ユニットテストに使うツールはjest(あるいはvitest)と@testing-library/reactを想定 テストに対応するモジュールを見つけやすいように __tests__ディレクトリは使わず、テスト対象と同じディレク…
React v18では以下のようにCache APIの関数をimportできるのだが、あまりに情報がないので2023年の現時点でのコードを少し読んでみる。 Reactのコミットヒストリを見る限りCache APIは2022年10月ごろにmainへマージされたらしい github.com Cache, CacheCont…
最速攻略記事によると、Reactのuseはキャッシュと組み合わせる必要があらしい。 というわけでmoizeを使ってみたらいい感じだった。 "use client"; import { Suspense, use, useState } from "react"; import moize from "moize"; export default function Ho…
転職活動でいろんな会社のエンジニアの人と話して思ったことをマイクロサービスの観点で備忘録がてらメモしておく。 よくあるマイクロサービスの分割軸として、業務機能、ユースケース(動詞)、リソース(名詞)あたりが一般的だが、これらどれもがドメイン…
前職でフロントエンドチームのスペシャリストとして開発プロセスを考えるポジションにいた。そのときに試してみて良かったなと思えたのはAutoApproveという仕組みで、これは任意のPRにAutoApproveというラベルが付くとGithub Actions経由でPRがGithub BotにA…
業務でE2Eテストの導入を進めており、ブラウザ自動化のためのツールに関して調べる必要があったので備忘録的に書き残しておく。 自分のブラウザ自動化周りの知識といえばはるか昔に大学生のころインターンでSeleniumを用いたテストの自動化をやったくらいで…
最近諸事情あり業務でFirebase JS SDKのDatabase実装周りを読むことがあったので、備忘録的にブログ記事にしてみる。 初期化処理の雰囲気 Databaseまで含めると全体像があまりにでかすぎるので、とりあえず初期化処理周りだけを雰囲気でクラス図にしてみた。…
Github ActionにJob Summaryという機能があり、これを使うとActionの結果をmarkdownに対して出力できる。 github.blog 所属しているチームではPlaywrightをテストに使用しているのだが、毎回Actionの実行でエラーがおきたときにStepを開いて見に行く必要があ…
複雑すぎるのでまとめる ベースとなるJSONの構造は以下。すべてFirebase Database Emulatorで試している。 posts配下へのフィールドの追加 { type: 'put', data: '{"path":"/book3","data":"awesome book"}', lastEventId: '', origin: 'http://localhost:90…
github.com 仕事で開発しているElmアプリケーションとElmLSの相性が悪いのかDiagnosticsが動かないことが多かった。動くときもあるが、動かない時の方が多いレベル。もう諦めてWebpackでのビルド結果を見ながら作業をしていたが、非常に生産が悪かったのでこ…
去年書いた以下の記事はmp4/m4aといいつつ、実はファイルの中に動画のストリームが入っているケースを考慮できていない。 izumisy.work その記事を書いた時点では「どうやらストリームが複数ある場合にmdatは数サンプルごとのチャンクの詰め合わせで構成され…
github.com 仕事柄vim-lspでelm-language-serverを用いてElmを書くことが多いのだが、なぜかVimだとリファクタリング系のCodeActionが動かないことが多かった。中でも関数のexpose/unexposeが動かないのはまあまあストレスだったので、この機会に腰を据えて…
以下の記事ではASC(Audio Specific Config)をffprobeで取り出したが、これはmp4デマルチプレクサでも取り出すことができる。 izumisy.work 今回はabema/go-mp4を使ってやってみる。 mp4の仕様によればesdsというboxの中に入っているらしいので、それを取り出…
自分で管理しているDockerイメージのリポジトリでリリースフローを自動化してみたので備忘メモ。 github.com 実際のAction実装は以下のような感じ。 Earthlyもキャッシュをいい感じにしてくれるので2回目以降はかなり速い。 name: release on: push: branche…
超最小構成でこんな感じ 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; …
izumisy.work 前回はあまりキャッシュについて触れることができなかったので、今回はEarthlyが持つキャッシュ機構だけにフォーカスして書く。 Earthlyにおけるキャッシュ Earthlyは環境に依存しない実行環境を提供するため、キャッシュにおいてもローカルフ…
【これはUnipos Advent Calendar 2021の2日目の記事です】 つい最近、EarthlyというDockerコンテナベースのビルドツールで、自分の開発しているGoのアプリケーションのMakefile/Dockerfile/docker-compose.yamlを置き換えたのでそれを記事にしてみる。 Earth…
【これはUnipos Advent Calendar 2021の1日目の記事です】 PRを作ると自動でFirebase HostingのPreviewチャネルにデプロイが行われ、デプロイされたチャネルのURLがコメントされる。コミットが積まれるたびに新しくデプロイされ、コメントのURLも更新される…
go-cleanarchitectureにdocker-composeを導入した過程で学んだprofiles, volumes, networksの話。 https://github.com/IzumiSy/go-cleanarchitecture/blob/master/docker-compose.ymlgithub.com profiles ざっくり言うと、サービスをグループ化して部分的に…
github.com CloudBuildではこんな感じで使える。 steps: # キャッシュの保存 - name: izumisy/gcs-caching:latest args: ["store", "./caching-directory", "gs://your-own-build-cache", "./cachekey-file"] # キャッシュの取り出し - name: izumisy/gcs-ca…
FPSでググると動画の話ばっかり出てくるが、デコーダを扱うには音声でも秒間フレームサイズが知りたくなることがある。 「秒間」というくらいなので、まずはm4a(mp4)における再生時間データを計算する方法が必要。以下の式がそれにあたる。DurationもTimesca…
という実装のコード片をGithubのissueコメントから拾ったので自分で完成版を作ってみた。 内部的にNewRangeReaderを何度も呼び出しているのでストレージに対するReadの量は増える可能性があるのでそれだけ注意したい。 もしもシーク位置が比較的局所的な仕様…
内容的には自分が過去記事で紹介した「データ指向アプリケーションデザイン」の内容を、もう少しとっつきやすくかみ砕いたような雰囲気。大学での講義を収録したっぽいものなので、ある程度初めての人でも分かりやすいかもしれない。 lms.gacco.org この講座…
github.com fdk-aacとそのgoバインディングのgo-fdkaacを使ってやってみたので、試行錯誤過程のメモ。 ffmpegみたいなツールを用いた変換方法はネット上にゴロゴロしているのに、スタンドアロンなライブラリを使ってデコードをするとなると情報がめちゃくち…
izumisy.work 上記の記事のビルドをやっている前提 # libavformatは必須らしい $ sudo apt install libavformat-dev # fdk-aac配下でサンプルがあるブランチに切り替え $ cd fdk-aac $ git checkout decoder-example # m4a-dec.cをビルド # (https://github.…
github.com リポジトリにはREADMEどころか何も書かれていないのでメモしておく # ビルドに必要なパッケージをインストール $ sudo apt install autoconf libtool # リポジトリをクローン $ git clone git@github.com:mstorsjo/fdk-aac.git # ビルド $ cd fdk…
名称が分からないが、実際の例で言うとcloudspannerecosystem/yoにあるこういうやつ。 // YOLog provides the log func used by generated queries. var YOLog = func(context.Context, string, ...interface{}) {} これだけ見ると何のために定義されている…
うちのコンサルが「システムアーキテクチャを決めるためには、ビジネスアーキテクチャを先に固めることが必要」と言ったら、お客様が「事業構造の変化が激しすぎてビジネスアーキテクチャを固めることが難しい」と仰った。そうだよなぁ。システムの寿命より…