メモ
転職活動でいろんな会社のエンジニアの人と話して思ったことをマイクロサービスの観点で備忘録がてらメモしておく。 よくあるマイクロサービスの分割軸として、業務機能、ユースケース(動詞)、リソース(名詞)あたりが一般的だが、これらどれもがドメイン…
業務でE2Eテストの導入を進めており、ブラウザ自動化のためのツールに関して調べる必要があったので備忘録的に書き残しておく。 自分のブラウザ自動化周りの知識といえばはるか昔に大学生のころインターンでSeleniumを用いたテストの自動化をやったくらいで…
最近諸事情あり業務でFirebase JS SDKのDatabase実装周りを読むことがあったので、備忘録的にブログ記事にしてみる。 初期化処理の雰囲気 Databaseまで含めると全体像があまりにでかすぎるので、とりあえず初期化処理周りだけを雰囲気でクラス図にしてみた。…
Github ActionにJob Summaryという機能があり、これを使うとActionの結果をmarkdownに対して出力できる。 github.blog 所属しているチームではPlaywrightをテストに使用しているのだが、毎回Actionの実行でエラーがおきたときにStepを開いて見に行く必要があ…
github.com 仕事で開発しているElmアプリケーションとElmLSの相性が悪いのかDiagnosticsが動かないことが多かった。動くときもあるが、動かない時の方が多いレベル。もう諦めてWebpackでのビルド結果を見ながら作業をしていたが、非常に生産が悪かったのでこ…
自分で管理している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; …
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/…
前回のOpenCensusでは比較的すんなりとGAEのログをリクエスト単位でグルーピングさせることができたが、OpenTelemetryの場合には追加でGoogleCloudPlatformのGithub Orgが用意しているpropagatorを使わねばならない。 github.com 以下がとりあえず動く超最小…
OpenCensusはdeprecatedされているので本当はOpenTelemetryを使った方がいいのだけれど、やったのでメモがてらに残しておく。アプリケーションの実行環境はGAEでやった。 追記: OpenTelemetryでやる方法も書きました izumisy.work まずはログのグルーピング(…
earthly/earthlyに修正のPRを出す過程で知ったのでメモ github.com 例えば /Users/hoge/ccc と /Users/hoge/CCC というふたつのパスがあるとする。 クロスプラットフォームなCLIアプリケーションを作っていたりすると、上記のような2つのパスが「同じ場所を…
go-cleanarchitectureにdocker-composeを導入した過程で学んだprofiles, volumes, networksの話。 https://github.com/IzumiSy/go-cleanarchitecture/blob/master/docker-compose.ymlgithub.com profiles ざっくり言うと、サービスをグループ化して部分的に…
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{}) {} これだけ見ると何のために定義されている…
自分が開発しているgo-cleanarchitectureの中でドメインイベントのPublisher実装としてredigoを使ったPubSubアダプタの実装を用意したが、思ったよりもredigoを使ったRedisのPubSub周りに関連する実装があまりネットに転がっていなかった。 domainsパッケー…
自分はvim-fugitiveとvim-flogを使っている Plug 'tpope/vim-fugitive' Plug 'rbong/vim-flog' fugitiveだけでもgit logは見れるが --decorate や --graph などのコマンドを使っても色がつかないのでコミットログを見ることに関しては若干微妙。 ログを見る…
engineering.mercari.com メルカリShopsの開発組織に関する記事が興味深かった。ソフトウェアエンジニアがフロントエンド/バックエンド関係なく開発をするというのは、たしかに開発組織の理想形だと思う。 2020年にオークランドで開催されたDeveloperWeek 2…
最近思うがなんとなくフルスタックと一口に言っても、ソフトウェアエンジニアにおける"フルスタック"にはサーバーサイドとしてのフルスタックと、フロントエンドとしてのフルスタックがあるような気がしている。この言い方が妥当かどうかは分からない。 サー…
izumisy.work 上記の記事をstackoverflowで質問したら回答がついた。 stackoverflow.com 結論から言うと自分はmakeの使い方を間違えていて、makeの第3引数にあたるcapacityを省略してスライスを作成するとそこには空データが埋まってしまうとのこと。 なので…
goコンパイラの最適化によって、可変長配列であってもリテラル値でlength指定されていればコンパイルする時点で確保するデータサイズが決定し結果的にランタイム時にアロケーションを発生させなくなるのではないかという仮説。 テストコード package app imp…
package main import ( "io" "io/ioutil" "strings" "os" ) func main() { a := strings.NewReader("123456789") r := io.LimitReader(a, 5) t := io.TeeReader(r, ioutil.Discard) io.ReadAll(t) io.Copy(os.Stdout, a) // 6789 }
ioutil パッケージに Discard という /dev/null 的な io.Writer が用意されている。 最近これを使うタイミングがあったのでメモ。以下のようなコードがあるとする。 package main import ( "fmt" "io" "io/ioutil" "strings" ) func main() { a := strings.N…
こういうやつ type Closer struct{ Value string } func (c *Closer) Close(id string) { fmt.Printf("Closed(%s): %p\n", id, c) } func newCloser(c *Closer) { n := &Closer{Value: "aaa"} fmt.Printf("New: %p\n", n) c = n } func main() { c := &Close…
これを買った TP-Link Bluetooth USBアダプタ ブルートゥース子機 PC用/ナノサイズ / Ver4.0 / 3年保証 UB400TP-LINKAmazon デバイス情報を見てみるとどうやら Cambridge Silicon Radio とかいうやつらしい。 at 15:26:52 ❯ lsusb Bus 005 Device 001: ID 1d…
後学のために自分の考えていることをまとめてみる。 考えられるパターン これまでの経験から以下4つのパターンがある。 ローカルStateでprop-drillingする ローカルStateかつイベント経由でデータ交換をする グローバルStoreとローカルStateを併用する グロ…