エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

RaspberryPi + Cloud Text-to-Speech APIで毎朝ニュースを喋ってもらおう

個人的にですが、最近ニュース番組のバラエティ化が進んでいるような気がしている今日この頃です。 ただ最新情報を知りたいだけなのに、CMのCMやら、よく分からない企画を朝から流され、いい加減ウンザリ…

ということで、ラズパイで最新ニュースを拾って喋ってもらおう!と思って作ったのが今回のアプリです。

f:id:tansantktk:20201122122241p:plain

続きを読む

Node.jsでお手軽にHTMLをPDF化させてみる

PDFを生成するjsライブラリとして、以前からpdfmake(http://pdfmake.org/#/)を使っていたのですが、 チマチマソースをいじっては実PDFの出力結果を見て、また修正して…といった繰り返しが大変苦痛でした。

HTMLのようにブラウザの開発者ツールでお手軽微調整ができれば、かなり時短になるのになぁ… と思ってネットの海を彷徨っていたら、ドンピシャでそんなライブラリがあったので紹介していきます。

f:id:tansantktk:20201120211026p:plain

続きを読む

いつも見ているあのWebサイトはどんなフレームワークでできているんだろう

WappalyzerというChrome拡張を使うとそのWebサイトがどんなフレームワーク、サービスから成り立っているのか解析してくれます。

Wappalyzer - Chrome ウェブストア

今回は、興味本位で日頃お世話になっているWebサイトのフロントエンドフレームワークを解析させてみたいと思います。

f:id:tansantktk:20201119203102p:plain

続きを読む

フロントエンド(Node.js)でスタイル指定したExcelを出力する

Excelは好きですか?
僕は嫌いです。(UTF-8のCSVを開こうとしたら文字化けさせてきたり、0埋め数字を勝手に数値型に変えてくる辺りとか)
しかし、日本はExcel大国ですので基本的にどう足掻いてもExcelから逃れることはできません…。Excel出力機能の実装を強いられることもあるかと思います。

f:id:tansantktk:20201118205539p:plain

さて、つい先日Excelをフロントエンド側で出力させる要件があった為、 Node.js環境で使える便利なライブラリExcelJSを紹介したいと思います。

続きを読む

不要なRDSインスタンスはなるべく止めて節約する

こんばんは! AWSでWebアプリを運用していると毎月のRDSの費用も決して安くないことを思い知ります。 しかし、開発環境用に使っているRDSインスタンスなら、基本的に開発者が起きている時間帯だけ動けば良いので、夜間や休日に稼働させる必要はありませんよね。

というわけで不要な時間帯になったらRDSにはお休みして頂こうと思います。

f:id:tansantktk:20201116200116p:plain

続きを読む

Siriに喋りかけるだけで家電操作できる環境をつくる

以前の記事でWebアプリを赤外線リモコン化したのですが、使い続けているうちに不満も出てきました。 tm-progapp.hatenablog.com

Webアプリで家電を操作するには最低でもスマホを取り出して、アプリを開かなければいけません。 例えば、買い物をして両手が塞がった状態では、スマホを取り出してWebアプリを操作するのに手間がかかります。 f:id:tansantktk:20201115101721p:plain 日常のちょっとした動作なんですが面倒です。 なんとかしましょう。

続きを読む

Lambdaで安易に静的メンバーを扱ってドハマリした

業務では、C#でAWS Lambdaをでゴリゴリに使い倒すことが多いのですが、 先日、短期間に連続してLambdaを実行すると意図したレスポンスが得られないというバグが発生し、半日程溶かしてしまいました。 戒めとして、Lambdaでの静的メンバーの扱いについて調べた結果を残しておきたいと思います。

f:id:tansantktk:20201120002649p:plain

結論

  • Lambdaのウォームスタート時にはC#の静的メンバーはキャッシュされたものが利用される

短時間にLambdaを連続して実行すると、前回実行した際の静的メンバーの値が次のウォームスタート時にも保持されます。 この仕様を理解せずにコーディングしていた為にバグが起こっていた模様。

Lambda実行時には何が行われているのか

Lambdaを実行すると「コールドスタート」または「ウォームスタート」として処理が実行されます。

コールドスタート時の処理 ウォームスタート時の処理
①S3からコードをDL ①コードの実行
②コンテナの作成
③コードの初期化
④コードの実行

初回のLambda実行時は「コールドスタート」として処理が実行され、実行後5分間はLambdaインスタンスは保持されます。 インスタンスが保持されている期間内に再度実行すると、「ウォームスタート」として処理が実行されます。

ウォームスタート時はLambdaインスタンスのメモリにコードが読み込まれた状態なので、すぐにビジネスロジックの実行が出来ます。 つまり、短期間に連続実行する場合は2回目以降の実行時間が大幅に削減されるということですね。 実際開発でテスト等をしていると、C#でのLambdaのコールドスタートは、ウォームスタートの倍以上の実行時間がかかっているので嬉しい機能です。

では、静的メンバーはいつロードされるのか

「コールドスタート時にコンテナにロード」されます。 ウォームスタート時には初期化されません。

これを知らずに安易に静的メンバーを操作するようなソースコードを書いていた為にハマってしまった訳です。 Lambdaはビジネスロジックに集中できて大変便利ですが、内部の処理の理解もやはり必要ですね。

参考

Lambda Performance Optimization: 12 Tips & Advanced Tuning | Lumigo

Cold start / Warm start with AWS Lambda | OCTO Talks !

RaspberryPi+Node.js+Reactで赤外線リモコンをつくろう(2/2)

※この記事は前の記事の続きです。

tm-progapp.hatenablog.com

f:id:tansantktk:20201120001532p:plain

続きを読む

RaspberryPi+Node.js+Reactで赤外線リモコンをつくろう(1/2)

こんにちは!

仕事から帰ってくると部屋が寒い…エアコンが効くまでがツラい…そう思う時期になってきました。 せめて事前にエアコンを自宅外から操作できればいいのに…という思いから、今回は余っていたラズパイを引っ張り出して、赤外線リモコンアプリを作ってみました。

f:id:tansantktk:20201120001532p:plain

記事が長くなった為、2つに分割しています。

tm-progapp.hatenablog.com

続きを読む