maybe daily dev notes

私の開発日誌

開発

TIL: AWS SDK for JavaScript v3 で s3.GetObject する最新の方法

最近はもっぱらNode.jsのAWS SDKはv3を使っているのですが、一つ大きな不満がありました。 それは s3.GetObject がv2よりも使いづらかった点です。ユーザーはS3のファイルを読み込むために ReadableStream をなめていくコード (例) を自分で書く必要がありま…

TIL: ソフトウェア文脈における modal behavior とは

最近話題になっている AWS Fault Isolation Boundaries を読んでいると、こんな言葉が目に入った: Allowing individual workloads to make their own failover decisions makes the coordination less complex, but introduces modal behavior through the s…

AWS CDK Tips: スタックの分け方について

AWS CDKのスタック、まとめてますか?分けてますか?分けている方はどういう基準で分けていますか? この議論は人によって割と意見の分かれることも多く、最高の飲み会ネタになるでしょう。今日は私見も交えながら、CDKのスタック分割法についてまとめてみた…

Today I Learned の記事を書いていきたい

ブログ、元々日次で更新するぞ!という気概で始めたが、結局月1更新が関の山となっている。どうしたものかと思っていたところで、つい先程以下のブログを読んだ。 simonwillison.net 継続的にブログを書くことに成功しているエンジニア Simon Willson による…

AWS CDKのおもしろいバグを直した (Unhandled rejection編)

先日自分が修正してマージされたAWS CDKのバグが個人的には結構面白かったので、ざっくりとまとめます。 github.com どういうバグか CDKのhotswapデプロイ*1をするとき、hotswapできそうでできない変更が2つ以上あると、CDKがクラッシュするという現象が起き…

リモート会議で 「今声聞こえてますか」 の確認、いる?

問題提議 リモート会議などで良く耳にする、初めて発話する人の第一声 「今私の声聞こえてますか」、これが必要なのか考えてみた。 この一言は次のようなシチュエーションでしばしば聞かれる。 司会 「… それでは、次はXXさんどうぞ。」 XX 「はい、よろしくお願…

MariaDBコントリビューション録その6 (完) - どのOSSにコントリビュートするのか

前回のあらすじ MDEV-18873に取り組み中。これはクエリ内で指定されたperiodの名前が空文字列 (``) であるときに、MariaDBがクラッシュするというバグだ。 ALTER TABLE t ADD PERIOD IF NOT EXISTS FOR `` (s,e); 一旦自力で考察してPRを作成したが、レビュ…

ISUCON12予選通過しそうでした

ISUCON12予選に参加しました!結果、スコア自体は予選ボーダー通過していましたが追試で失格でした チームいすもなで参加 もなちゃんすまん… 通過した気満々で参加記事書いてましたが、供養のため投稿します。 なお過去にはISUCON9, 11に参加していずれも上…

会社をマイクロサービスアーキテクチャのシステムとして捉えたら

はじめに 会社組織をマイクロサービスアーキテクチャとして捉える見方があります。この記事ではその概要、またそうした場合に考察される「良い」チームのあり方についてまとめます。 マイクロサービスの要点 ここでいうマイクロサービスとは、技術分野における…

AWSでn秒ごとのループ処理、どうする?

はじめに サービスを開発していると、n秒ごとに何らかの処理を定期実行したい要件が見つかることがあります。 例えば、10秒ごとにあるAPIエンドポイントにアクセスして結果を保存したいなどです。この記事ではこのような機能の実装方法について考えます。 Ev…

Slack 6種のチャンネル仕分け!

Slackのチャンネルは6種類に大別できる。これを理解して設定を使い分けることで、Slackの通知地獄から開放される第一歩となろう。 なお有料版限定の機能を使う場合の話。 これが6種類だ! Slackのチャンネルは、見え方について以下3つの直交する設定が可能: …

趣味Webサービスをサーバーレスで作る ― 格安編

はじめに 最近AWSのサーバーレスサービスで作るWebサービスの雛形を公開してみた*1。小規模サービスならかなり安く (ほぼ無料になるケースも多そう) で運用できるので、割と良い選択になる場面も多いと考えている。今日はその布教記事。 github.com 全体構成…

MariaDBコントリビューション録その5 - MDEV-18873

前回のあらすじ MDEV-24582に取り組むうちに、GDBが仲間に加わった。コードを実行しながら変数の中身も見えるすごいやつである。強力な仲間たちとともに、今日もIssueに立ち向かう。 tmokmss.hatenablog.com とはいえ、とりあえず気持ちを変えてみる ここ最…

C# 開発を始める on Visual Studio Code on Mac

はじめに 自分は今までC#をWindows上のVisual Studioか、Unityでしか開発したことがない。この2つはいずれも開発環境が完全自動で整備されるので、非常に楽に開発を始めることができたものだ。しかし、今回はVisual Studio Code、しかもMacで開発したいので…

MariaDBコントリビューション録その4 - GDBをVSCodeから使う

前回のあらすじ MDEV-24582 は難敵だ。前回の成果は修正箇所を特定する方法を特定したのみ。今回はデバッガで処理を追いながら修正対象を見つけていく。 tmokmss.hatenablog.com GDBの導入 大規模なコードベースの挙動を理解するためには、実際に実行してデ…

MariaDBコントリビューション録その3

前回のあらすじ 3つ目のIssueは強敵だったが、新しく覚えた「perrorを手がかりに調べる」技でどうにか解決した。__builtin_expect も仲間に加わり、tmokmssの冒険はまだまだ続く。 tmokmss.hatenablog.com 今回のIssue [MDEV-24582] INSERT silently truncates…

MariaDBコントリビューション録その2 - builtin_expect による分岐予測

前回のあらすじ 初のMariaDBコントリビューションを達成し気をよくした俺。順調に2つ目のIssueもマージされ、浮かれ気分で次なる敵に挑むのであった。 tmokmss.hatenablog.com 今回のIssue [MDEV-28599] EXCHANGE PARTITION on view causes ER_CHECK_NO_SUCH…

DynamoDB、シングルテーブルにするか否か

はじめに DynamoDBを使っていると、とかくテーブルは1つにまとめるべきという声や、複数テーブルからシングルテーブル設計に移行したという事例を耳にすることがあります。 しかし、その理由を聞いてみると、性能のためだったり管理を簡単にするためだったり…

帰納的プログラミング

定義 プログラムに変更Xを加えるとき、類似の機能A,B,Cの実装を確認し、その共通部分から、変更Xに必要な実装を導くことがあります。 この一連の作業を、この記事では帰納的プログラミングと呼びます。 帰納(きのう、英: Induction、希: επαγωγή(エパゴー…

MariaDB にコントリビュートした話 - VSCode on EC2で開発環境の構築

数少ない読者へ愛を込めて 「MariaDB にコントリビュートした話」ってタイトルでブログ書いてください✋— N. Yanagisawa (@NayutaYanagisaw) May 19, 2022 MariaDBに初めてコントリビュートした時の作業記録をまとめる。Issue自体は一番簡単なものを渡しても…

CDK Construct ライブラリを開発する際のTips

最近 deploy-time-build というCDK Constructをリリースできたので、その過程で得られた知見を共有する。 github.com Tips プロジェクトの初期化はprojenで一発 プロジェクト生成ツールのprojenを使うことで、コマンド一発でリポジトリのベースを生成できる…

EtherscanのContract verificationをAPIで実行する

渦中のEthereumネタ。 はじめに Etherscanでコントラクトのアドレスを開くと、コードが表示されることがある。例 Contractのコード コントラクトのユーザーたちは、このコードを見ることで中の実装を把握でき、安心してコントラクトを利用することができる。…

AWS CDKでWebフロントエンドをデプロイする3つの方法

CDKでWebフロントエンドのSPAをデプロイするときの方法まとめ。下図のありがちなSPA構成を想定している。 このような場合、フロントエンドアプリからAPI GatewayのエンドポイントURLやCognitoのUser Pool IDなどの値を参照する必要があって、それらの値をど…

npm install は package-lock.json を変更しないことがほとんどだった

昨日までずっと npm install の挙動について勘違いしていたので、改めて整理する。 なお、引数付きの npm install <package_name> コマンドではなく、 npm install 単体で打つときの話。 npm install の仕様 npm 5.4.2 以後 (つまり、現代ではほとんどの環境がこちら) はじ</package_name>…

AWS Lambdaだけでアンケートフォームを作れる

Lambda function URL活用案件として、Lambdaだけを使ってアンケートフォームを作ってみた。 実際は回答の閲覧用にSlackも使ってるが、ほかは本当にLambdaだけ。アーキテクチャ コード 冗長な部分もあるので、要点だけ抜粋。フルのコードはこちらに載せた。 …

NodeJsFunctionのビルド時に依存関係を解決する3つの方法

タイトルの通り、AWS CDKのNodeJsFunctionを使う時に依存関係を解決する方法が数パターンあるので比較してみる。 例 今回は、以下のTypeScriptのLambdaをデプロイするケースを考える。 // よくあるAPI GatewayのLambda Authorizer import { APIGatewayReques…

Hardhat/Truffleを使わずにSolidityをコンパイルする

Hardhat/Truffle を使わずに、Solidityのスマートコントラクトをコンパイルしたい。そういった望みを持つこともあると思う。 そんなときに使える方法を紹介する。 solc-js solc-js という solc (Solidityのコンパイラ) をJavaScriptからプログラマブルに呼び…

Dockerfileが複数のBuild contextをサポートするようになった

はてな記事執筆機能の素振りがてら書いてみる。 序論 最近Dockerfileをビルドする際に複数のBuild contextを指定できるようになったらしい。 www.docker.com これを使うと、例えば共通モジュールが別ディレクトリに切り出されているような場合に、よりきれい…