maybe daily dev notes

私の開発日誌

2022-01-01から1年間の記事一覧

Next.jsをLambda + API Gatewayでサーバーレス化する (standaloneモード)

これは AWS LambdaとServerless Advent Calendar 2022 の記事です。 Next.jsをホスティングする手段の一つとして、Standaloneモードで動かす方法があります。 コンテナ1個で動かせるため非常にお手軽な選択肢で、GCPのCloud RunやAWSのApp Runnerなどで動か…

AWS CDK Tips: コンストラクトで構造化しよう

AWS CDK TIpsシリーズの記事です。 CDKのコードが散らかってきた、スタックのコードがベタに数百行以上もあって読みづらい… そんな状況に直面したことはないですか?今回はCDKコードを構造化して、可読性・保守性を高めるコツを紹介します。 背景 前回の記事…

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 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 + MacOS

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

リアル脱出ゲーム 初参加 Lessons learned

はじめに 先日新宿近辺のリアル脱出ゲームに行ってきた。めちゃくちゃ面白かったし、また行きたい。次こそ良い成果を残せるように、今回得られた教訓をまとめる。 怪しげな雑居ビルの中で開催された 教訓 基本的にゲームマスターは人の盲点を突いてくる。盲…

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つにまとめるべきという声や、複数テーブルからシングルテーブル設計に移行したという事例を耳にすることがあります。 しかし、その理由を聞いてみると、性能のためだったり管理を簡単にするためだったり…

酒場: お山の大将

はい、ということで今回はお山の大将に行ってまいりました。以下レポートです。 tabelog.com 往路 平日の19時にお店到着。店はそれほど混んでいませんでしたが、カウンター席に案内されました。おそらくテーブル席は予約で埋まっていたのでしょう。今日も大…

ワタミ系列店チートシート

背景 以前町の飲み屋に入ったのだが、実はワタミ系列店だったということがあった。 特にワタミがきらいな訳ではないが、そこはかとないガッカリ感は否めない。今後はワタミの店はワタミの店だと覚悟してから入りたいので、この記事ではワタミ系列店の列挙を…

帰納的プログラミング

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

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

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

米を圧力鍋で炊くべき5つの理由

米は炊飯器より圧力鍋で炊くべきだと思う。理由は以下: 圧力鍋は速い 圧力鍋は普通の炊飯器よりも早く炊ける。これは高温高圧で一気に米を加熱するため。以下のグラフを見てほしい。 水のフェーズダイアグラム*1 水は気圧と温度が与えられれば、その時の状態…

AWS CDK コンストラクトライブラリ開発に関する5つのTips

AWS CDK TIpsシリーズの記事。 最近 deploy-time-build というCDK コンストラクトをリリースできたので、その過程で得られた知見を共有する。 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>…