【これはUnipos Advent Calendar 2021の1日目の記事です】 PRを作ると自動でFirebase HostingのPreviewチャネルにデプロイが行われ、デプロイされたチャネルのURLがコメントされる。コミットが積まれるたびに新しくデプロイされ、コメントのURLも更新される…
earthly/earthlyに修正のPRを出す過程で知ったのでメモ github.com 例えば /Users/hoge/ccc と /Users/hoge/CCC というふたつのパスがあるとする。 クロスプラットフォームなCLIアプリケーションを作っていたりすると、上記のような2つのパスが「同じ場所を…
discourse.elm-lang.org つい先日、数か月ぶりにElmのupdate話がでてきた。 Elmは0.19からほとんどメジャーバージョンアップしていない。最後のリリースは約9か月前にもなる。 この事実だけを知ると「Elmはもう終わったのか」「Evan*1は開発のモチベーション…
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{}) {} これだけ見ると何のために定義されている…
うちのコンサルが「システムアーキテクチャを決めるためには、ビジネスアーキテクチャを先に固めることが必要」と言ったら、お客様が「事業構造の変化が激しすぎてビジネスアーキテクチャを固めることが難しい」と仰った。そうだよなぁ。システムの寿命より…
自分が開発している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…
最近思うがなんとなくフルスタックと一口に言っても、ソフトウェアエンジニアにおける"フルスタック"にはサーバーサイドとしてのフルスタックと、フロントエンドとしてのフルスタックがあるような気がしている。この言い方が妥当かどうかは分からない。 サー…
golangのdatabase/sqlには設計に関するドキュメントが用意されており、これが興味深い。 ドキュメント自体は非常に短い。以下のリンクでサクッと読める。 golang.org 中でも個人的に印象的なのは以下の説明で、ここからgolangにおけるdatabase/sqlの設計思想…
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…
stackoverflow.com こんな感じで使える。 package main import ( "fmt" "net/mail" ) func main() { addr, err := mail.ParseAddress("izumisy.test@example.com") if err != nil { panic(err) } fmt.Println(addr.Address) // izumisy.test@example.com } …
こういうやつ 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を併用する グロ…
ここで触れられてた話がおもしろいかったのでざっくり紹介 discourse.elm-lang.org 文字列比較はcase文のほうが早い(ことがある) これは遅い ensureNonBreakingSpace : Char -> Char ensureNonBreakingSpace char = if char == ' ' then nonBreakingSpace …
Elmにおけるビルダパターンというのは以下のようなインターフェイスを指す。 -- setXxxのような関数をパイプでつないでいく雰囲気のやつ Button.new |> setPadding 10 |> setBackground "blue" |> setLabel "next" |> view このインターフェイスの優れた点は…
自分のチームでは朝会と夕会を両方実施しているので、その話を書きます。 (アジャイルとかスクラムとかは分からないです、念のため) 自分のチームにおける朝会の課題 もともと自分のチームでは「朝会」のみをデイリーのmtgとして実施しており、そこで「今…
elm-firestoreのパス組み立て周りの実装を型安全な設計にしてみたのでその話。 github.com Firestoreにおけるパスの仕様 まず大前提としてFirestoreにはリソースの場所を示すパスという概念があり、ざっくりパスは以下のようなルールに基づいている。 ルート…