Blog
Contents
Playwright を Lambdaで動かす
ちょっと苦労したのでポイントをまとめておく。
前提
- TypeScriptでPlaywrightを動かすコードを書きたい
- AWSが提供しているLambda用のAWSベースイメージはFedoraベース?(CentOSベース?)なのでPlaywrightの推奨ではない
- 自分でコンテナイメージを作成する
準備
独自でコンテナイメージを作る
基本的に以下のサイトのコンテナの項を参考に作成しました。
簡単タコス(時間はかかる)を作ろう
タコス作りにはまっている
タコス!日本だと店で食べるのが当たり前の料理!
しかし意外と簡単に作れてしかもうまい、ということを知ってしまった。特に小麦粉のトルティーヤ(タコスの皮ね)よりトウモロコシ粉を使ったトルティーヤの方が簡単でうまい!
Amplify UIでJWT Tokenを取得する
Tokenを取得する
以前のバージョンだと以下の方法で取得できていたが
import { useAuthenticator } from "@aws-amplify/ui-react";
const { user, signOut } = useAuthenticator((context) => [context.user]);
const token: string = user.getSignInUserSession()?.getAccessToken().getJwtToken() as string;
今(6.0.3)だと以下の方法で取得する必要があるっぽい?もっといい方法があるかもしれない。
import { fetchAuthSession } from "aws-amplify/auth";
async function currentSession() {
try {
const { accessToken, idToken } = (await fetchAuthSession()).tokens ?? {};
console.log(accessToken);
console.log(idToken);
} catch (err) {
console.log(err);
}
}
Githubのプライベートリポジトリにパーソナルアクセストークンでアクセスできるようにする
環境作り直すたびに調べなおしていたのでここにまとめておく
トークンの作成
Github.comにログインし、Settings→Developer Settings→Personal access tokens→Fine-grained tokensに移動する。
左手デバイス XPPen ACK05をVSCodeと組み合わせて使う
XPPen ACK05買ったよ
しばらく前から左手デバイスに興味があったが、Amazonに大量に並んでいる謎メーカーの小さなキーボードタイプのものはキー設定書き込みのためのソフトが謎のGoogle Driveからダウンロードする必要があるらしく、さすがに業務でも使おうと考えると無理があるなぁと思って尻込みしていた。あとBTで接続できるタイプも多いが謎メーカーのものは技適どうなんだと思ったり。
Goのバイナリが GLIBC not found で動かないとき
ローカルでビルドしたGoのモジュールをAWS Lambdaで動かしてみたところ、以下のようなエラーが発生して動かなかった。
/var/task/main: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by /var/task/main)
理由としてはビルドした環境のglibcと実行環境のglibcのバージョン違い(正確にはビルドした環境のほうが新しいglibcを使っている場合に発生する?)ようだ。
goのモジュールを一括アップデートする
go get -u all
プライベートリポジトリが含まれる場合は以下のように GOPRIVATE
環境変数を定義すれば良いらしい。
GOPRIVATE=github.com/example/hoge go get -u all
参考:
VSCodeでビルドタスクを作る(ショートカットキーでビルドする)
tasks.jsonを書こう
トップ階層に .vscode/tasks.json
を作り、そこにデフォルトのビルド動作を登録すると、ショートカットキー(Ctrl+Shift+B)でビルドコマンドをささっと実行できる(というか任意のコマンドは何でも登録できる)
2023-07-20コミュニケーションコストをAIに肩代わりさせたい
コミュニケーションコストをAIに肩代わりさせたい
所属している組織は、部署単位で数百人、関係部署や委託先入れると千人超えるような規模だったりする。
これだけ大きいので毎日色々なところで色々な会議が行われ、資料が作られ、しかもそこで決まったことが組織内の別のグループの予定に影響を及ぼす。
2023-07-19 ソフトスキルの可視化ができるか
ソフトスキルの可視化ができるか
※ただの日記なのでダラダラ書いて長いです。結論、今のところ自分が知る限りは可視化の方法はなさそう。
ここ数年、いわゆるソフトウェア開発のスキルではないスキル、いわゆるソフトスキルと呼ばれるものの重要性を感じている。
子供の夜泣きが始まった
子供の夜泣きが始まった
成長の証、ではあるもののなかなかきつい。大体夜中の1時から3時に1-2回は起きてわんわん泣く。妻は育休、自分はフルタイムで働いているので別部屋で寝ていて、妻が夜中の対応はしてくれるのだが、別部屋であっても子供の泣き声ってのは聞こえてしまうので目が覚める。
amplify init不要: Next.jsとAmplifyUIで既存のCognito使って認証だけしたい
やりたいこと
- Cognitoのユーザプールは別で作成済みで、amplifyを使ってのリソース作成や管理は「しない」
- Next.jsのアプリケーションは別で作成済み
という条件で、AmplifyUIのうち認証のとこだけ使いたい(要は Authenticator | Amplify UI for React だけ使う)ということです。
2023-07-11 プライムデーセールで買ったKindle本など
※リンクは全てAmazonアソシエイトリンクです
Kindle本
プライムデーに合わせて?Kindle本もセールをやっているのと、8冊購入で15%ポイント付与ということで調子乗って八冊買ってしまった。
赤ちゃん用品買ってよかったものリスト(生後7か月まで)
子育て実体験からおすすめ品の紹介
うちの子供は7カ月ちょっと。ここまで育つまでに「これは使ってよかった」と思えるものを紹介したい。あとこれ不要だった(かも)な、というものも合わせて紹介。
※父親目線です
2023-07-10 脱Googleを考えてみる
脱Googleを考えてみる
特にここ数年、Googleのサービス維持に希望を持つとまずそうなことが続いている。この前のドメイン管理サービス売却報道についてもそうだ。
ということで脱Googleを少し考えてみている。と言ってもスマホはスマホ誕生当初から生粋のAndroid勢なので、ここからiPhoneというのは中々厳しい…が仕方ないか。
ROG ALLY、良いとこ悪いとこ
ROG ALLY買ったよ
2023-07-07 Googleの印象が悪い
Googleの印象が悪い
サービスを簡単に廃止したり売ってしまう点がここ数年(もしかしたら10年)、あまりにも目立っている気がする。GAFAMと呼ばれるテックジャイアントの中でもひときわ目立つ。
2023-07-06 ユーチューバーになるなら
ユーチューバーになるなら
もし自分がユーチューバーになるなら何するかな~と妄想してみてる。
色々とガジェット揃えるのは好きだしガジェット系ユーチューバーはどうかな?と思ったけど、連日Amazonで使うかも分からないようなもの買って、レビューして動画撮るなんてやっぱ無理だなと思い直す。
2023-07-04 子供のハイハイが速くなった
子供のハイハイが速くなった
ほんの2週間ほど前にはその場で四つん這いになりながらクルクル回るだけだった子供が、ここ何日かで急激に成長してハイハイができるようになり、更にはハイハイの速度があがったので目が離せなくなっている。
2023-07-03 久しぶりの出社
久しぶりの出社
すこし体調を崩しており、2週間ほどずっと家にいた。まだ体調に不安な部分はあるけど、かと言ってずっと家にいるのも性分に合わないので今日は久しぶりに出社してみた。 結論、そこまで問題はなかったが単純に疲れた感じはする。出社はやはり週に2、3程度で十分と感じる。
2023-07-02 ドッキングステーション買った
DELL WD22TB4を買った
ROG ALLYを買ってウキウキしながら元々持っていたLenovoのTB3のUSBドッキングステーションを繋げたのだが、ドライバを入れても機能してくれなかった。古いドッキングステーションでファームウェアやドライバも更新が止まっているので、これを機に新しいドッキングステーションとしてDELL WD22TB4をDELLの公式サイトから購入した。
2023-07-01 子供の成長
子供の成長
昨年生まれた子供もそろそろハイハイができるようになってきた。嬉しい反面、自分で移動できるので色々なものを触って何でも口に入れようとするので目が離せない。 そろそろ家に柵が必要だなぁと思っている
2023-06-30 雑にブログを書く
雑にブログを書こう
もっと雑にブログを(本来の日記的な意味で)書いてもいいかなと思ったので、今日から書いていこう。
雑にブログを書くために
このブログはHugoを使って生成しており、Netlifyで自動的にビルドされるようになっている。ということでリポジトリにmdファイルだけコミットすれば自動的に更新してくれる。
30代男性、育休を取る (育休中・後編)
これは何か
育児・育児休職に関すこれから育休を取る人(主に男性)に向けた、自分の体験に基づいたメッセージです。聞こえますかウヴォーさん。
- 30代男性
- 非管理職
- 伝統的日本企業(企業規模大きめ)勤務
- 里帰り出産しない
- 実家が遠方で頼れない
という条件です。
30代男性、育休を取る (育休前夜編)
これは何か
育児・育児休職に関すこれから育休を取る人(主に男性)に向けた、自分の体験に基づいたメッセージです。聞こえますかウヴォーさん。
- 30代男性
- 非管理職
- 伝統的日本企業(企業規模大きめ)勤務
- 里帰り出産しない
- 実家が遠方で頼れない
という条件です。
ffmpegでTS-NA220WからRTSPでカメラ映像を取得する
TS-NA220Wという防犯カメラを使っているが…
TS-NA220W | ネットワークカメラ | IODATA アイ・オー・データ機器
本体の録画機能に不満な点(連続録画に失敗していつの間にか録画されていなくなったり)があり、嫌になったのでRTSPから直接動画を保存することにした。
pythonで数日前の日付を取得する
datetimeで簡単に前の日付を取得できる
日付の取得
import datetime
# daysで日付を指定する
date = datetime.datetime.now() - datetime.timedelta(days=3)
ディレクトリを消す
20211201
20211202
20211203
20211204
上記のような日付が名前となっているディレクトリがある場合でX日前のディレクトリを消すスクリプト
3台まで接続可能なiCleverマウスレビュー
3台まで接続可能なiCleverマウスレビュー
しばらく前にiCleverのマウスを買って使っていたので比較紹介。 もともと自宅では MX Anywhere 3を使っていて非常に気に入っていたのだが、職場にもう一台買うにはちょっと高いな~と思い、安い価格帯のマウスを調べていて良さそうな2台を購入したので比較紹介。 どちらも使いやすいのだが、結果としてはMD167を会社で利用することにした。
JavaScriptとReactのお勉強
参考にした本
初心者向けの本でお勉強。あと少しで終わりそう。
公式のReactチュートリアルもあるのだが、JavaScript自体の経験もないのでJavaScriptのお勉強も兼ねて買ってみた
ASUS detachable cm3 を買ったので感想など
ASUS detachable cm3
公式サイト
ASUS Chromebook Detachable CM3 CM3000 | Chromebook | ノートパソコン | ASUS日本
スペックは公式サイトに載ってるので感想だけ。
なお初のChromeBookなので、ChromeBookになれている人からすると当たり前なことも書いていると思われる。
電話番号が変わったときに連絡すべきところ
電話番号変更時に連絡すべきところ
変更前に手続き方法を調べておいたほうがいいもの
- LINE
- Googleアカウント
- ネット決済系サービス(Paypalなど)
連絡優先度
すぐに
- 家族/親族
- LINE(変更前に手続きを確認しておくべき)
- Googleアカウント
- 決済系(Paypalなど)
- 会社
- 銀行
- 証券
- クレカ
割と急ぎ
- 賃貸の不動産会社
- 保険
- ネットプロバイダ
- ガス
- 水道
- 電気
後からでも良さそう
上記を除く会員登録を伴うサイト
ストレージサービスの比較
主な機能比較
機能 | Dropbox | box | GoogleDrive | OneDrive | |
---|---|---|---|---|---|
有料プラン(最低限)/月 | \1200(2TB) | \1200(100GB) | \250(100GB) | \224(100GB) | |
同期可能端末数(無料プラン) | 2 | 不明 | 不明(無し?) | 不明(無し?) | |
容量制限(無料プラン) | 2GB | 10GB | 15GB | 5GB | |
過去データの保持期間(無料プラン) | 30日 | 日数不問の過去1バージョン | 日数不問のファイルごとの版管理 | 日数不問のファイルごとの版管理 |
Dropbox
個人用に使えるメモサービス・アプリを比較した
個人向けメモサービス・アプリを比較した結果
結論から言うとJoplinが素晴らしかった。
経緯
インターネット上に公開しても問題ないような内容はこのブログにたまに書いているが、極個人的なメモを書いてまとめておくために何かいい方法は無いかなと調べたのでメモしておく。 今回はあくまでも個人向けを検討しているので、例えば会社のチームで使うことを主目的に置いているようなサービスは比較対象に入れていない(フリープランがあれば一応検討程度)。
プランターの大玉トマト収穫終了
トマトの収穫終了
初収穫後しばらくして梅雨に入り、どうやらトマト自体が何かの病気にかかってしまったようで葉が次々と枯れる自体に。
幸いいくつか玉ができている状態だったので、梅雨中は表面が乾いたら水やり抑えて順次収穫。
oauth2関連のメモ
oauth2のRFC
The OAuth 2.0 Authorization Framework rfc6749
日本語訳:The OAuth 2.0 Authorization Framework
The OAuth 2.0 Authorization Framework: Bearer Token Usage rfc6750
日本語訳:The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)
アクセストークンレスポンスの例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}
ライブラリ
Go
golang.org/x/oauth2
Python
oauthlib
- Welcome to OAuthLib’s documentation! — OAuthLib 3.1.1 documentation
- oauthlib/oauthlib: A generic, spec-compliant, thorough implementation of the OAuth request-signing logic
Requests-OAuthlib
- Requests-OAuthlib: OAuth for Humans — Requests-OAuthlib 1.0.0 documentation
- requests/requests-oauthlib: OAuthlib support for Python-Requests!
参考書籍
この本はとてもいい。読みやすくわかりやすい。
家庭菜園のメモ
肥料
肥料の種類
有機肥料
動植物や魚由来の原料で作られる、遅効性、緩効性の肥料。元肥として使われることが多い。悪臭や虫の発生の可能性があるが、オーガニック栽培をしたいなら優先的に利用を考えたい。牛糞、鶏糞、油かす、骨粉、草木灰など。
プランターの大玉トマト初収穫
トマトの初収穫
昨年からプランターで野菜を育てていて、去年は初心者ということもありバジルなどの葉物ばかりだったが、今年は実がなるものに挑戦したくなり、トマトの苗をゴールデンウィーク前の土日に植え付けたのだった。
ふるさと納税の返礼品でリッツパーティーした
鹿児島県伊佐市のふるさと納税
毎年のふるさと納税では主にお肉を選んでいたのだが昨年はチーズのセットをみかけたので試しに選んでみた。 結果としては金額(寄付額15000円)に対して満足度が高いセットが届いてとても良かった。
DIYのメモ
DIY(日曜大工)に関するメモ
材料
SPF材
ホームセンターでよく売っている柔らかく加工しやすい木材で、 SPFはSpruce(エゾマツ), Pine(マツ), Fir(モミ)の頭文字をとったもの。
2x4 など規定サイズで売っているので使いやすい。
How to use withings-go
withings-go
Go library zono-dev/withings-go is for Withings API.
Currently it support resource the below.
- Offline Authorization
- Measure - Getmeas
- Measure v2 - Getactivity
- Sleep v2 - Get
- Sleep v2 - Getsummary
Getting started
1. Create your account and register your app
Before you can use withings-go, you need to create your Withings account and register your app; if you own a Withings product, you should already have a Withings account.
Access Register your app to register your app.
Callback URL must satisfy the following conditions described in Withings API FAQ.
pkg.go.devにパッケージを登録してgo docを表示する
pkg.go.devにパッケージを登録したい
Adding a package に方法が書いてあった。
Adding a package Data for the site is downloaded from proxy.golang.org. We monitor the Go Module Index regularly for new packages to add to pkg.go.dev. If you dont see a package on pkg.go.dev, you can add it by doing one of the following:
Visiting that page on pkg.go.dev, and clicking the Request button. For example: https://pkg.go.dev/example.com/my/module
Making a request to proxy.golang.org for the module version, to any endpoint specified by the Module proxy protocol. For example: https://proxy.golang.org/example.com/my/module/@v/v1.0.0.info
go getしたモジュールを削除する
go clean
goコマンドのオプションとしてcleanというものがある。
go 1.15.6のヘルプは以下の通り。
$ go help clean usage: go clean [clean flags] [build flags] [packages] Clean removes object files from package source directories. The go command builds most objects in a temporary directory, so go clean is mainly concerned with object files left by other tools or by manual invocations of go build. If a package argument is given or the -i or -r flag is set, clean removes the following files from each of the source directories corresponding to the import paths: _obj/ old object directory, left from Makefiles _test/ old test directory, left from Makefiles _testmain.go old gotest file, left from Makefiles test.out old test log, left from Makefiles build.out old test log, left from Makefiles *.[568ao] object files, left from Makefiles DIR(.exe) from go build DIR.test(.exe) from go test -c MAINFILE(.exe) from go build MAINFILE.go *.so from SWIG In the list, DIR represents the final path element of the directory, and MAINFILE is the base name of any Go source file in the directory that is not included when building the package. The -i flag causes clean to remove the corresponding installed archive or binary (what 'go install' would create). The -n flag causes clean to print the remove commands it would execute, but not run them. The -r flag causes clean to be applied recursively to all the dependencies of the packages named by the import paths. The -x flag causes clean to print remove commands as it executes them. The -cache flag causes clean to remove the entire go build cache. The -testcache flag causes clean to expire all test results in the go build cache. The -modcache flag causes clean to remove the entire module download cache, including unpacked source code of versioned dependencies. For more about build flags, see 'go help build'. For more about specifying packages, see 'go help packages'.
iでgo install で作られたものを削除する。
http.Requestとhttp.Responseをダンプする
net/http/httputilを使えばいい
httputilの存在をしらず、最初は自分でRequest、Responseをダンプする関数を書いていたのだが こんなの無いわけない(少なくとも誰かがライブラリ作ってるはず。。。)と思い探したらそもそも公式で用意されていた。
WSL2のメモ
WSL2に関するメモ
以下も参考に。
WSL2(Ubuntu)
通常のUbuntuとの違い
- 固定IP設定ができない(2020/12/31時点)
- systemdは通常では動いていない
WSL2のshutdown/reboot
WSL2側では対応できないので、Windows側で以下のコマンドを実行する。
Cheero Power Plus 5 を買った
モバイルバッテリーを久しぶりにアップグレード
2年ほど前?に買ったCheeroのPower Plus 3とPower Plus 3 miniを使っていたのだが、スマホを機種変しやっとtype-cの充電口になったのでモバイルバッテリーもtype-c充電可能なものに変更しようと思い Power Plus 5を購入した。
プロキシ設定が必要なネットワークでDocker buildのエラーが出る
WSL2+Docker Desktop for Windowsでdocker buildが通らない
会社にプロキシがある場合
docker build
で以下のようなエラーがでる場合がある。
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host.
このエラーを解決するのにえらく時間がかかった。結論から言うとDocker Desktop側とWSL2側それぞれでプロキシの設定をしてあげる必要がある。
WSL2, Docker Desktop for Windows, VSCodeでの開発環境を整える
WSL2が使えるようになった
いつのまにかWindows 10 1909にもバックポートされていたので、プライベートのPCや会社のPCに
- Windows 10 Home
- WSL2
- Docker Desktop for Windows
- VSCode Remote Containers
の組み合わせで開発環境を構築してみた。
WSL 2 Support is coming to Windows 10 Versions 1903 and 1909 | Windows Command Line
Anker PowerExpand 7-in-1を買った
Anker PowerExpand+ 7-in-1を買った
Amazon PrimeDayセールで安くなっていたのと、1000円クーポンを事前にもらっていたこともありAnker PowerExpand+ 7-in-1 を購入した。
楽してスパイスカレー編
包丁まな板を使いたくない
以前のレシピだとトマト、玉ねぎを切らなくてはならないのでめんどくさい。
ということでまな板、包丁を使わないようにするため、冷凍玉ねぎみじん切りとカットトマト缶を使う。 ただしカットトマト缶を使うと酸味が強くなることには注意。
RaspberryPi4b CPU温度測定
RaspberryPi4bを買った
8GBモデルが出たのをこの前知った。64bitカーネルのRaspbianも今ベータ段階みたいなので、(大して値段も変わらないので)メモリが多いモデルを買った方が後々いいかな?と思い8GBモデルを購入した。
Goのsortパッケージでtime.Timeの要素を基にソートする
時間でソートしたい
小ネタ。
sort.Sliceでソート
Go1.8以降でならsort.Sliceを使ったシンプルな方法でソートできる。
Go 1.8 Release Notes - The Go Programming Language
Len,Swap,Lessを使う
Go1.8より前、もしくは独自のソートを行いたい場合はsort.Sortのinterfaceを満たすためにLen,Swap,Lessを用意する。
お金に関わるメモ
注:自分のために書いているページです
このページは自分の整理のために書いている内容なので、間違ってたり読みづらかったりする部分があると思います。(間違ってたら教えてほしいです)
今後も更新していきます。
GitHub Actionsを使ってみた感想
GitHub Actionsを使ってみた
きっかけ
stp というLambda、DynamoDB、S3を使って小規模なCDNを構成できるものを作っているのだが、それのヘルパーとして stph も用意している。 stphは単純にブログに画像を載せるときにMarkdownコードと画像を表示してくれたり画像の削除をしてくれるローカルで動作するサーバなので、バイナリ単体で動作するようになっている(設定ファイルは必要)
ASUSのプレゼントキャンペーンでノートPC ExpertBook B9が当たったのでレビュー
ExpertBook B9が届いた!
Twitterでいろいろな企業がやっているリツイートして応募するタイプのプレゼント企画。個人的に好きなメーカーのASUSの企画で初めて当選! 現在のコロナの状況もありしばらく時間がかかったものの、先週末無事に当選品が届いた。
Goのnet/http互換WEBサーバやミドルウェアのメモ
WEBサーバやミドルウェア
とあるソースコードを見ていて知らないものがあるので、どういったものかメモしていく
go-chi/chi
webサーバでルーティング機能がある。デフォルトの net/http互換。
lightweight, idiomatic and composable router for building Go HTTP services
年収XXX万のリアルを教えようシリーズが流行って(?)いる
年収XXX万シリーズ
多すぎる
- 年収100万のリアルを教えよう
- 年収180万のリアル
- 年収200万のリアルを教えよう
- 年収200万円のリアル
- 年収350万円のリアル(過去形)
- 年収500万のリアル
- 年収700万のリアルを教えよう
- 年収700万子供部屋おじさんのリアルを教えよう
- 年収780万のリアル
- 年収850万円のリアル
- 年収1000万800万に下げたリアルを教えますですが
- 年収1000万のリアルを教えよう
- 35歳の私の場合の年収1000万のリアルな生活
- 年収1400万円のドケチのリアル
- 年収1600万円のリアル
- 年収2000万のリアルを教えよう
- 年収2000万円のリアル
- 年収2900万のリアル
- 年収4000万円のリアル
- 年収1億のリアルを教えよう
年収に関係なく共通して選ばれるユニクロすごいということは分かった(?)
雑感
一番はじめの記事はこれなんだけど、その後続々と同じような記事が続いていてちょっとおもしろかった。 それぞれの記事の内容が本当かどうかは定かじゃないけど。
IODATAのTS-NA220Wという防犯カメラを設置してみた
防犯カメラ TS-NA220Wを設置してみた
防犯のために、という理由もあるが一番の理由は単純に設置してみて映像を見てみたかったから。
TS-NA220Wのいいところ
- 動作検知機能は割とまとも
- 設定項目が豊富
- ONVIF対応
- Wi-Fi接続可能(有線LANもOK)
- 視野角広め
- IP65防水防塵
- SMB, FTP経由でNAS、FTPサーバに保存可能
- 画質が良い(1920x1080まで可能)
- シンプルなデザイン
- 実はAPIがある
- 特別な設定なしにリモートからアクセス可能
いくつか詳しく書いていく。
aws cli でLightsailのポートを開け閉めする
LightsailもIP制限ができるようになっていた
Lightsailでいつのまにかアクセス元のIPアドレス制限ができるようになっていた。前々からfirewall機能はあったので自分でサーバ側で頑張って設定する必要はなかったのだが、IP制限まではできなかった。
GW中はスパイスからカレーを作ってばかりいた
なんで作ろうと思ったか
時間あるし前から作りたかった。
レシピ
元レシピはこれ。これをもとに自分にあうようちょっとカスタマイズしました。
これ書いてくれた人ありがとう。
材料
牛脂(あれば)2つ なければサラダ油かオリーブオイルを大さじ2くらい
Hugo用にGo, Lambdaで画像を自動的にリサイズしてS3に保存するやつを作った
とりあえずソースコード
あと補助ツールも。
なぜ作ったか
Hugoで書いてるこのブログに画像を貼りたいことがたまにあるのだけれど、元となるmarkdownはgitで管理しているのでリポジトリに画像を入れたくないなぁと思ったことがきっかけ。あとは単純に自分の勉強を兼ねて作った。
スピーカーを作ってみた
スピーカー作ってみた
在宅勤務期間が長くなってきて仕事をしながら音楽でも聞くかと思ったんだけどスピーカーが作業部屋になく、Amazonをさまよっているうちにふと思い出したのは随分前になんとなく買っておいたスピーカーのパーツ。
英会話メモ
在宅勤務や新型コロナ関連の話が多かった
直近やったレッスンの最初の雑談では自宅で働いているか?とか新型コロナの対応とか、そういった話題が多かったかな。
在宅勤務: work from home
I believe working from home is quite useful to all employees to avoid the commuting problem such as the rush hour. 在宅勤務はラッシュアワーを回避する方法としてとても便利です。
1ヶ月ずっと在宅勤務だったので知見をまとめる
3月はずーっと在宅勤務でした
感染症予防ということで2月の下旬に在宅勤務が決定し、当初3月中頃までの予定だったものが伸びて伸びて今は4月の半ばまでは在宅勤務が確定している状況。
ということで3月はほぼ家に居たのだが、こんなに連続して在宅勤務をしたことがなかったので色々良い部分・辛い部分がわかってきた。 なお妻も在宅勤務なので、家族がいる場合を想像して読んでもらえると嬉しい。
英会話メモ
think outside the box!
発想の転換をしてみよう,これまでとは全く違った観点で考えよう、といった意味の言葉。箱の外で考えよう、が直訳なのだがなぜ箱なんだろうか。
英語メモ
- solicit,勧誘する、懇願する、熱心に説く
- address,(問題など)を扱う、に話しかける(固い表現)
- warranty,保証、保証書
- treat,扱う
- concentrate,集中する
- interactive,双方向性の
- familiarity,【名】親しさ;精通
- liaison,連絡係、連絡
- ensure,確実にする、保証する
- maintain,を維持する;と主張する
- spontaneity,自発性
- impromptu,即興の、準備なしの
- admire,~に感心する
- willingness,意欲、やる気
Lenovo G580のCPU/メモリ交換とSSD化
Lenovo G580のCPU/メモリ/HDDを交換してみた
Lenovo G580というちょっと古いノートPCがあり、スペックがWindows10を使うには辛いものだった。
- 購入:2013年?
- CPU: Celeron 1000M(1.8GHz/2コア/2T)
- メモリ: 4GB PC3-12800
- HDD: 5400rpm, 500GB
というか標準のWindows8.1でもきついのでは…と思うスペックで、標準で入っていると思しきソフトの効果も相まってかなり動作が重くなっていた。 少し調べてみるとこの機種はCPUが交換可能とのことで、チャレンジしてみることにした。 データは消えても問題ないということだったのでCPU交換だけでなく、HDDからSSDに、メモリは余っていたPC3のメモリを刺して増量する。
S3バケットに対してバケットポリシーでIP制限をかける2020年02月時点版
S3バケットに対してIP制限をかけたい
調べたらすぐ出てくるのだが、結構古い内容も多くなかなか正解にたどり着けなかった。 S3はAWS re:Inventなどでちょこちょこ機能追加されてコンソールで設定できる内容が多くなっており、その影響を受けてバケットポリシーを追加するだけではIP制限をかけることができなくなっている。
英会話メモ
TOEIC 800点をやっと超えた
TOEICの点数が高いからといって英語の能力が高いことには直結しないが、それでもある程度の目安にはなるので定期的に受験している。
TOEIC用の勉強は数年前にやったくらいで、公式問題集も買ってはみたものの結局開いてすらおらず、やってきたことは単語の勉強をやったりやめたり、オンライン英会話が多いが、実践(仕事、プライベート)する機会が多くなったことが何よりモチベーションにつながっている気がする。
Python boto3でCLB, ALB, NLBの情報を取り出す
Python/boto3でLBの情報を取得する
boto3でロードバランサの情報を取得を取得する。CLBとALB/NLBで利用するAPIが異なるので注意する。
動作環境情報
Ubuntu18.04 LTS Python 3.6.9 boto3 (1.11.8)
ソースコード
import boto3 from boto3.session import Session # セッションのセットアップ # aws cliの利用時に profileを設定していれば boto3が勝手に拾ってくれるようだ def setup(): session = Session( profile_name = "profile_hoge" ) return session # CLBの情報取得 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elb.html#ElasticLoadBalancing.Client.describe_load_balancers def get_clb_info(sess): elb = sess.client("elb") elb_info = elb.describe_load_balancers() for i in elb_info["LoadBalancers"]: lb_name = i["LoadBalancerName"] # ... その他色々情報が取れるが、LBによっては欠損している(辞書のKeyごと存在しない)情報もあるので # 辞書での情報取得時はKeyが事前にあるかどうかを確認した方がいい # NLB/ALBの情報取得 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html#ElasticLoadBalancingv2.Client.describe_load_balancers def get_elb_info(sess): elb = sess.client("elbv2") elb_info = elb.describe_load_balancers() for i in elb_info["LoadBalancers"]: lb_name = i["LoadBalancerName"] # ... その他色々情報が取れるが、LBによっては欠損している(辞書のKeyごと存在しない)情報もあるので # 辞書での情報取得時はKeyが事前にあるかどうかを確認した方がいい if __name__ == '__main__': sess = setup() get_clb_info(sess) get_elb_info(sess)
ドキュメントではそのような記述が見当たらなかった気がするのだが、 “elb” で取得できるのはCLBの情報で、“elbv2” で取得できるのはNLBやALBの情報のようだ。
英会話メモ My wife and me
My wife and I/me は正しいが I and my wifeは間違い
英会話中に指摘されて知ったのだが、英語には「三人称と ‘I’をandでつなぐといには必ず’I’があとに来る」というルールがあるらしい。 日本語ではどちらが先でも構わないが、英語の場合は他者の方を先に言う必要があるようだ(なぜだろう)
英会話メモ
オンライン英会話をまた始めた(半年ぶり4回目くらい)
年の半分くらいオンライン英会話をやって半分くらいは休んでいたりするのだが、会社で契約してくれているオンライン英会話が他の安いオンライン英会話よりも良い感じだったので同じところでまた始めた。(前回は秋くらいで一旦終了した)
re:Invent2019に行ってきた
re:Invent 2019 に行ってきた
2020/03/31追記:当初2ページで書くつもりだったのだが間が空いてしまったので1ページに画像を追加してお茶を濁すことにする
だいぶ間が空いたが今更ながらメモがてら行ってきた話を書きたい。 来年も行きたいな。
Google Cloud Vision APIでPDFにOCRをかけてみた
給与明細にOCRをかけて自分の給与を記録したい
会社から発行される給与明細はPDFファイル。しかもフォント埋め込みで埋め込まれてるフォントが有償?恐らく通常手に入らないRICOHのフォント。 データを抜き出せないかとGoogleDriveでPDFからGoogleDocumentsに変換してみたり、各種ツールでwordとかテキストに変換してみようとしたが一切うまくいかない。 そもそもコピペすらできない(コピペしようとしてもフォントが無いから?????になる)
TypeScriptに入門したいのでJavaScriptに入門してみる(文と式)
続: JavaScript入門
教材は
文と式
JavaScriptは文と式で成り立つ。
式は評価すると値を得ることができ、この値のことを評価値と呼ぶ。
文は処理の一部として式を含むことがある。
TypeScriptに入門したいのでJavaScriptに入門してみる(関数と宣言)
続: JavaScript入門
教材は
関数と宣言
関数は
function
キーワードを使う。function function_name(arg1, arg2) { // something to do... return return_value; } // 関数の呼び出し const result = function_name(arg1, arg2);
関数名のルールは変数名のルールと同じ
- 半角のアルファベット、
_
(アンダースコア)、$
(ダラー)、数字を組み合わせた名前にする- 変数名は数字から開始できない
- 予約語と被る名前は利用できない
- returnは必須ではない(値を返す必要がない関数はreturnを書く必要はない)
- returnの返り値を省略している場合、もしくはreturn 文のそのものを省略した場合は未定義の値である undefined を返す。
関数の引数
定義した関数の仮引数よりも呼び出し時の引数が少ない場合、余った仮引数には undefined という値が代入される。(エラーにならないんですね…)
TypeScriptに入門したいのでJavaScriptに入門してみる(暗黙的な型変換)
続: JavaScript入門
教材は
暗黙的な型変換
等価演算子などで暗黙的に型変換される例が載っているが、必要性は薄く基本的には
===
を使うようにすべき。暗黙的な変換は割とひどい仕様が載っている…
TypeScriptに入門したいのでJavaScriptに入門してみる(演算子)
続: JavaScript入門
教材は
演算子
+
での文字列結合const value = "hoge" + "moge"; console.log(value); // -> hogemoge
数値計算
JavaScriptでは数値は内部的には IEEE 754方式の浮動小数点数として表現される。よって整数と浮動小数点数の加減乗除も
+
,-
,*
,/
,%
で実行可能。TypeScriptに入門したいのでJavaScriptに入門してみる(nullリテラル~データ型とリテラルの最後まで)
続: JavaScript入門
[これ]({{ relref path=“2019-10-29-javascript-intro.md” }}) の続き。
教材は
nullリテラル
null
値を返すリテラルで、「値がない」ことを表す。 nullを参照した場合コンソール上では null と表示されるだけである。DIYで家のネットワークをcat6aにした場合の費用はどのくらい必要か
本ページには広告リンクが含まれます
新築時にcat6aケーブルを敷設する
持ち家のいいところの一つに、家の色々な部分を変更できるという点がある。 家を作るときに情報コンセント(モジュラージャック)を付けて、入居前に宅内LANを敷設してもらうことももちろん可能だ。 しかし家を建てるときに住宅メーカーにやってもらった場合、5箇所で10万~20万程度はかかってしまう。 更にcat6aなどは対応してくれない業者もあるので,それなら空配管だけ通しておいてもらって自分でやろう!と思った次第。
TypeScriptに入門したいのでJavaScriptに入門してみる(変数~文字列リテラルまで)
動機
WebUIをある程度作れるようになりたい(個人の趣味レベルだけど)と大昔から思っていたものの、当時はJavaScriptのFWだったりJavaScriptのトランスパイラだったりが沢山出てきていたような印象があり、遠巻きにWebのUIを作るのは怖い!と思っていた。
続:Terraformに入門してみた(Lambda)
続: Terraform入門
今回は terraformで lambdaを管理してみる。ただし terraform での Lambdaの管理は辛いというような意見が散見されるので、良い方法ではないと思われる。 まぁあくまでも入門ということで。
Ubuntu18のaptでインストールしたpip3ではtargetオプションを使ってもExceptionが発生する(Ubuntu18.04)
pip3でtargetオプションを使って特定ディレクトリにライブラリをインストールしたい
$ pip3 -V pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
このpip3はaptでインストールしたもので、バージョンが低くtargetオプションがそもそも存在しないようだ。
$ pip3 install requests -t workspace/ Collecting requests Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl Collecting chardet<3.1.0,>=3.0.2 (from requests) Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests) Using cached https://files.pythonhosted.org/packages/81/b7/cef47224900ca67078ed6e2db51342796007433ad38329558f56a15255f5/urllib3-1.25.5-py2.py3-none-any.whl Collecting certifi>=2017.4.17 (from requests) Using cached https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl Collecting idna<2.9,>=2.5 (from requests) Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl Installing collected packages: chardet, urllib3, certifi, idna, requests Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 360, in run prefix=options.prefix_path, File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 784, in install **kwargs File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix) File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated, File "/usr/lib/python3/dist-packages/pip/wheel.py", line 247, in move_wheel_files prefix=prefix, File "/usr/lib/python3/dist-packages/pip/locations.py", line 153, in distutils_scheme i.finalize_options() File "/usr/lib/python3.6/distutils/command/install.py", line 274, in finalize_options raise DistutilsOptionError("can't combine user with prefix, " distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base
解決策
根本的にはpython3の環境管理用の venv で、まるごとPythonの環境を取り替えてしまう方が良さそう。
続:Terraformに入門してみた(VPC/サブネット/ピアリング等)
続:Terraform入門
今回はVPCを2つ作って、サブネット、ルートテーブル、ピアリングまで実施する。
作るネットワーク
- VPC1, VPC2の2つがある。
- VPC1, VPC2ともに public用のサブネットを持つ。
- またインターネットゲートウェイもそれぞれ持つ。
- publicサブネット同士をルーティングする。
- publicからインターネットゲートウェイを抜けて外にアクセスできるようにする。
terraformのコード
グローバルIPを使ってしまっているが、サンプルということで…
Terraformに入門してみた
Terraform使い始めた
仕事でterraformを使い始めたのでメモしておく。 なお、AWSと一緒に使う場合を記載する。
公式サイト
対応してるIaaS等
https://www.terraform.io/docs/providers/index.html
意外とたくさん対応しているが、awsと組み合わせて使っている人が多いと思う。
Gitコマンドのメモ
gitに関するメモ
gitの使い方などをメモしていく。随時更新。
git logで変更されたファイルを確認する
git log --name-only
その他にも
--stat
,--numstat
,--name-status
などで確認できる。ブランチを作る
git checkout 元にしたいブランチ名 git branch -b 作成するブランチ名
今いるbranchをベースに作られる。
Hugoに関するメモ
HugoやMarkdownの書き方などをメモしていく。随時更新。
Gist用のshortcode
{{< gist zono-dev 377e5d76d335f73eb662ffc6dc02a09e >}}
こんな感じでアカウント名とgistのIDを書けば良いらしい。
HugoのTOC設定
HugoのTOC設定はテンプレートで
yum updateでurllib3のエラー
Amazon Linux2のyum updateでurllib3のエラー
Running transaction Updating : python-urllib3-1.24.3-1.amzn2.0.1.noarch 1/2 Error unpacking rpm package python-urllib3-1.24.3-1.amzn2.0.1.noarch error: unpacking of archive failed on file /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname: cpio: rename python-urllib3-1.10.2-3.amzn2.0.1.noarch was supposed to be removed but is not! Verifying : python-urllib3-1.10.2-3.amzn2.0.1.noarch 1/2 Verifying : python-urllib3-1.24.3-1.amzn2.0.1.noarch 2/2 Failed: python-urllib3.noarch 0:1.10.2-3.amzn2.0.1 python-urllib3.noarch 0:1.24.3-1.amzn2.0.1 Complete!
によるとurllib3がrpmのものとpipでインストールしたものでコンフリクトして起こってるらしいので、
AWSのgo用SDKでSQSに入ってくるメッセージを取得する
目的
インスタンスからgo用のAWS SDK でSQSに届くメッセージを取得したい。
公式APIリファレンスの場所
インストール
先にgo getしておきましょう。
go get github.com/aws/aws-sdk-go/...
使い方
- 対象のSQSのキューのARNだけをリソースとして指定したPolicyを作り、ロールにアタッチする
- EC2等にそのロールを付与する
ソースコード
package main import ( "flag" "fmt" "log" "os" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sqs" ) // // GetMessage will get messages in SQS queue. // func GetMessage() { params := &sqs.ReceiveMessageInput{ QueueUrl: aws.String(queueUrl), // Number of messages are got in one time. MaxNumberOfMessages: aws.Int64(10), // If there are no messages, keeping connection in 20 sec. WaitTimeSeconds: aws.Int64(20), } // Get messages by using aws sdk resp, err := svc.ReceiveMessage(params) log.Printf("messages count: %d", len(resp.Messages)) if len(resp.Messages) == 0 { fmt.Println("empty queue.") } else { // If message(s) are found, filtering them and delete them. for _, m := range resp.Messages { // // note: // svc.ReceiveMessage will return many same messages( their number of defined by MaxNumberOfMessages), // so deleting target all messages. ( I don't sure why ReceiveMessage do so... ) // fmt.Printf("Found target message:\n%s\n", m.GoString()) if err := DeleteMessage(m); err != nil { fmt.Println(err) } } } return } // DeleteMessage is deleting target message. func DeleteMessage(msg *sqs.Message) error { params := &sqs.DeleteMessageInput{ QueueUrl: aws.String(queueUrl), ReceiptHandle: aws.String(*msg.ReceiptHandle), } _, err := svc.DeleteMessage(params) if err != nil { fmt.Println(err) return err } return nil } func main() { targetRegion = "ap-northeast-1" queueUrl = "https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXXXXXXX/TestQue" sess, err := session.NewSession(&aws.Config{ Region: aws.String(targetRegion)}, ) if err != nil { log.Println(err) panic(1) } // to create session svc = sqs.New(sess) // to get messages GetMessage() }
ReciveMessageでなぜか同じメッセージが沢山入ってくる なんでだろう。ドキュメント読んでもそれらしきことは書いてないのだが、、、使い方間違ってるのかな。
親の見守り方法を考える
離れて住む老親の見守り方法を考える
親が一人で暮らすようになり、遠隔地ということもあって見守り製品を検討している。 見守り製品で重要なのは、プライバシー侵害をせず、監視されている気持ちにさせない、ということだと思う。(自分が見守られる側だとすると、カメラなどで監視されるのは嫌なので。。。)
AWSのgo用SDKでLambdaを呼び出す
目的
インスタンスからgo用のAWS SDK でLambdaを呼び出したい
注意)Lambdaをgoで書きたいとか、Lambda to Lambdaをgoで書きたいとかではない(でもやってることはほぼ同じ)
相続法の改正で助かる人も多そう
相続法が改正された
相続法の改正|凍結した口座から預金を引き出す法(仮払い制度)2019年度版
司法書士事務所の公式ページなので、内容は信頼性が高そうだし、わかりやすくて助かった。
法定相続分の3分の1、かつ150万円未満であれば想像できるらしい。相続人の戸籍謄本を準備するなど銀行によってそれぞれ条件があるようだが、相続の手続きが終わらないと引き出せないというのは残された人にとって困ることが多いため、今回の法改正は良いと思う。
vim setpaste で不意なインデントを防ぐ
setpaste で不意なインデントを防ぐ
vimのautoindentやsmartindentが効いているときにMinttyなどを経由してコピペする時に自動的に改行されまくってうざいなぁと思っていながらも、手動または Ctr-v で範囲選択して = で直したりしていた。 しかし実は以下のオプションで一旦インデントを解除できるようだ。
HugoとNetlifyでブログ開始
ブログのビルドとホスティング
以前 Sphinx を使ってブログを書いていたのだが、Sphinxはやはりドキュメンテーションツールであってブログ向きではないと思うことが多く、最近Goを触り始めたのもあり人気のあるHugoを利用することにした。
First Commit
Hello
This is test page.
Test code
package main import "fmt" func main() { fmt.Printf("Hello World.\n") }