#builderscon 2019で「自動作曲入門」というトークをします

8月29日の前夜祭から始まるbuilderscon tokyo 2019で「自動作曲入門」というトークをします。 以前、このブログで紹介したScalaで実装してみたものを発展させたものをベースにしながら「そもそも作曲という行為をソフトウェアエンジニアの視点で再解釈すると…

SVGから複数のfaviconを出力したり開発環境用に色を変えたりする

faviconやらapple-touch-iconやらいろいろ必要なアイコンが多い問題 開発環境と本番でfaviconを区別して事故を防ぎたい問題 ……などの話題がアイコン界隈にはあります。SVGを使ってどちらも解決してみよう! のコーナーです。 必要なアイコンを生成する icon-g…

BuildKitによるレイヤキャッシュのtargetは変数 (ENV, ARG) を展開してくれない

feature request: allow variables in the `RUN --mount=type=bind` values · Issue #815 · moby/buildkitRUN --mount=type=cache,target=${APP_DIR}/pkg/cache go get -v と書いても `${APP_DIR}` という名前のディレクトリが作られるだけです! びっくり! ✘…

HTTP関連のRFCで現れる `N#token` はカンマ区切りのリストを表す

1#header-token みたいなのは「少なくとも1個以上のheader-tokenがカンマ区切りのリストとして現れる」と読める。出典: A #rule extension to the ABNF rules of [RFC5234] is used to improve readability in the definitions of some header field values.…

aws-xray-sdk-nodeを使う時はexperimentalを入れよう、じゃないと最近のnpmパッケージとの組み合わせだと動かないぞ

タイトルがすべてです。AWS X-RayをNodeアプリケーションに組み込むaws-xray-sdk-nodeというパッケージがありますが、これを使う時はlatest (何もバージョン指定しないとこれ) ではなくexperimentalを入れると良いです。 yarn add -D aws-xray-sdk@experimen…

aws-xray-sdk-goを使う時はhttp.Client.Getとか使ってはダメで必ずcontext.Contextを渡さないといけない

Go

aws-xray-sdk-goというAWS X-Rayでトレースを記録する便利グッズがある。これはoutgoing HTTP requestも記録できるのだけれども、ある時を機会にトレースの記録に失敗するようになって試行錯誤したけど今日、IQ200になってすべてを理解した。 結論はタイトル…

#gcp Datastoreを使っているプロジェクトでCloud Firestoreを使うには

Firebaseのはなし。 Cloud Firestoreというものがベータ提供されている Datastoreの後継という位置付け DatastoreはGAEとかで良く見るあれ Cloud Firestoreは既にDatastoreを使っているプロジェクトだと勝手に使えないという罠がある 【GCP】Datastoreを作っ…

dockerの.envファイルむずかしい

docker-compose/dockerで使える.envファイルを、docker-compose/docker以外からも使えるようにしたい。 ちょっとしたスクリプトの実行時に source .env すれば環境変数が設定されるような体験がほしい。 が、実際には一工夫いる。 dockerの .env ファイルは …

@aereal/go-dsn: TypeScriptでgo-sql-driverのDSNを組み立てるNPMパッケージを作った

go-sql-driverのDSN (Data Source Name) をオブジェクトから生成するライブラリを書きました。 yarn add @aereal/go-dsn github.com 使い方をsynopsisから引用します: import { formatDSN } from "@aereal/go-dsn" formatDSN({ dbName: "test-db", passwd: "…

cdk-mackerel-container-agent: ECSのServiceにmackerel-container-agentを5行で追加

www.npmjs.com GitHubのリポジトリはこちら: GitHub - aereal/cdk-mackerel-container-agent: experimental: AWS-CDK library for mackerel-container-agent mackerel-container-agentを5行くらいで追加 先日、mackerel-container-agentがベータリリースされ…

GraphQL: gqlgenで指定されたFieldに応じてresolverの実装を変える

GraphQLのいいところとして、クライアントがリクエストごとに欲しいフィールドを明示するので、サーバ側はリクエスト毎にレスポンス返却を最適化しやすい、という点が挙げられると思います。gqlgenというGoのGraphQLライブラリがあり、これを使って実際に要…

2018年

もう7年目。主に仕事について。 大きな仕事と新しい仕事に取り組んだ一年だったと思う。this.aereal.org今年前半はHTTPS化という大きい仕事を担当した。やりがいはあったけれど正直に言えば重荷が降りたという気持ちが大きい。言葉を選ばずに言えば、2018年…

go-http-replay: VCRみたいに実際のHTTPレスポンスを保存してテストで再利用できるライブラリ

Go

を作りました。 github.com 外部HTTPリクエストをスタブするTest::WWW::StubというPerlのモジュールや、スタブするレスポンスをあらかじめ記録しておいた実際のレスポンスから再現するVCRというRubyのライブラリなどにインスパイアされました。 使い方はこう…

Ruby: 非ASCII文字列がパーセントエンコードされていないかもしれないURLもがんばってパースする

normalized_url = begin URI.parse(url) rescue URI::InvalidURIError URI.parse(url.gsub(/\p{^ASCII}/) {|s| URI.encode_www_form_component(s) }) end URL中の非ASCII文字列をパーセントエンコードしてない (例: http://example.com/?q=姉) と `URI::Inva…

TheSchwartzの失敗したjobとかerrorがいつどのように消えていくのか

この記事ははてなエンジニアAdvent Calendar 2018の16日目の記事です。 昨日はid:akiymによるOpenSSLはどこにいるでした。地味にOpenSSL系のモジュールはリポジトリのセットアップ時にハマりがちで、かつたまにバージョンアップでビルド引数の渡し方が変わっ…

Dockerの--link/Docker Composeのlinksはdeprecatedだった、気になる脱出先は? 年収は?

知らなかった……。 Warning: >The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between tw…

「EC2 Container Service (ECS) のBlue/Greenデプロイメント」のコードを読む

EC2 Container ServiceのBlue/Greenデプロイメント | Amazon Web Services ブログ GitHub - aws-samples/ecs-blue-green-deployment: Reference architecture for doing blue green deployments on ECS.これら眺めてみる。 方針としてはLBのtarget groupをつ…

SNSで同僚をフォローするのをやめた

SNSというかTwitterで同僚をフォローするのをやめて精神衛生が良くなった。 一緒に仕事をするうえでパーソナリティも知りたいなと思って基本的にフォローしていたのだけれど、最近それによって楽しいとか便利と思うことより、きついと感じる機会のほうが多く…

『みんなではじめるデザイン批評』から学んだコードレビューのやりかた

同僚が社内グループに『みんなではじめるデザイン批評』を読んだ感想を書いていて、それが良かったのとそういえばこんなことあったなと思い出したので読んだ感想がてら書きます。 みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケ…

『エンジニアのためのマネジメントキャリアパス』はなりたてのテックリードが読んで安心できる良い本

エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド作者: Camille Fournier,及川卓也(まえがき),武舎広幸,武舎るみ出版社/メーカー: オライリージャパン発売日: 2018/09/26メディア: 単行本(ソフトカバー)…

シグマのSAマウント終了告知が丁寧かつ真摯で素晴らしかった

SAマウントカメラ・レンズをご愛用の皆さまへ | レンズ | SIGMA|株式会社シグマレンズ交換式カメラを開発・製造しているシグマがカメラシステムを終了させる告知を出して、告知をすること判断自体とその告知内容がとても丁寧で心証が良かったです。 前提 カ…

MySQL: テーブルのデータサイズを見るときはinformation_schema.tables

こういうかんじ: mysql> select table_name, table_rows, avg_row_length, (data_length + index_length) / 1024 / 1024 as total_mb, data_length / 1024 / 1024 as data_mb, index_length / 1024 / 1024 as index_mb from information_schema.tables where…

builderscon tokyo 2018で『ブログサービスのHTTPS化を支えたAWSで作るピタゴラスイッチ』という話をした

builderscon tokyo 2018で話しました。2017に続いてスピーカーとしての登壇で光栄です。こういうイベントで何も話さないとどことなく居心地が悪くなる性分なので、スピーカー or die (不参加) となるところだったのでよかったです。 トークについて speakerd…

aws-cdk探訪: AppsとStacksの関係

最近、TypeScriptで癒されたさ重視でaws-cdkを見ています。aws-cdkはCloudFormation (以下CFn) をよりプログラマブルに扱う高級な・抽象的なライブラリと見てよく、概念もほぼ対応しているのですが、Appsという概念はaws-cdkに固有のもので特色たりえるもの…

aereal.orgをGoogle Cloud Platformに移した w/Cloud DNS, Cloud Storage, Deployment Manager

aereal.org長らくさくらのVPSでホスティングしていたのだけれども運用がめんどうになったのでこれを機にGCPへ移行した。登場人物は: Google Cloud Storage Google Cloud Load Balancing Google Cloud CDN Google Cloud Deployment Manager ……の4つ。 Google …

aws-cdkを見ている: policyの変換がすごい

aws-cdkを見ている。TypeScriptもしくはJavaでAWSの構成管理ができる。CloudFormationのプログラマブルなやつと考えるとよい。TypeScriptは癒しなので癒されました。今日は感動ポイントをご紹介。 policyの変換がすごい CFnのなかでもS3のbucket policyを書…

tslintで有効になっているruleをpreset由来も含めて一覧する

const { resolve } = require('path'); const { Linter, Configuration: { findConfiguration } } = require('tslint'); const tslintJsonPath = resolve(__dirname, '../tslint.json'); const { results: config } = findConfiguration(tslintJsonPath); co…

Macでプレゼンする前に見直したいたった1つの設定

System Preferences → Notifications → “When mirroring to TVs and projectors”にチェックを入れてプレゼン中に通知が出ないようにしましょう。(僕は念の為、通知センターからもチェックしています)ありがとうスティーブ。

BPMと音価を入れるとディレイタイムを計算してくれるやつをReactで作った

Reactでちょっとした計算機を作ろうと思い、せっかくなのでStorybookを試してみることにした。 できたもの GitHub - aereal/delay-time-calcBPMとフィードバックさせたい音の音価を入れるとディレイタイムがミリ秒で出力される。BPM 120で8分ディレイをかけ…

HTTP::Message#content($bytes)を呼んでもcontent-lengthは計算されない

HTTP::Request#content($bytes) もしくは HTTP::Request#add_content($bytes) を呼んでもcontent-lengthは自動で計算されず、0になる。 なのでそのままリクエストを送ると、ちゃんとcontent-lengthだけbodyを読む実装はボディが空だとみなすのでちゃんとcont…