2023年はこんな年でした
- 今年はnoteを書いたぞ
- Facebookを見返してたら、「何故」と聞きづらい問題については2015年にも書いていた
- 相変わらず基本在宅で仕事をしている
- 相変わらずRubyとかJavaScriptとかを書いている
- モブプロやペアプロをする時間は減った
- 今年はAIが面白かったなあ
#ChatGPT と非常に興味深い対話を行ったので、みなさんぜひリンク先の文章をお読みください。ちょっと長いですが、最後まで順番にお読みいただくと驚きます。私は驚きました。
— 結城浩 / Hiroshi Yuki (@hyuki) March 17, 2023
◆ChatGPT と結城浩の対話(矛盾や反復を含んだ対話によってAIと人間の識別は行えるか)https://t.co/mrH7mbQDPx
生成AI製の実写版ポケモン面白すぎる🤣
— 🇺🇦🇯🇵🇪🇺Ago-ra@ウクライナ🗯 💙💛 (@agoraitconsulti) October 20, 2023
pic.twitter.com/lsuAC3muIv
- 来年は「ラーメン赤猫」や「姫様“拷問”の時間です」のアニメが決まっているので楽しみ
もっと前はこんな年でした
2022年はこんな年でした
- 今年初めての日記だ(2年連続)
- 相変わらず基本在宅で仕事をしている
- 相変わらずRubyとかJavaScriptとかを書いている。SQLについても今年いろいろ学んだ
- 毎年この時期、Twitterとかを見て振り返るんだけど、今となってはパンデミックの始まりのころの雰囲気がずいぶん昔のことのように感じる
- Base Breadのサブスクをはじめた
- 9月に洞爺湖万世閣レイクサイドテラスというところに行ってきた。とても良いところだった
とにかく今年言いたいこととしては、ジャンププラスの正反対の君と僕という漫画が面白いということだ
あとスラムダンクも面白かった。
神域リーグも面白かったなあ。
黛、、、すごい奴だった。
もっと前はこんな年でした
2021年はこんな年でした
- 今年初めての日記だ
- キャリア変更と同時に初めてiPhoneを買った。なんだけど何かしら手続きに問題が発生し一週間くらい回線が使えなかった
- 相変わらず基本ずっと在宅勤務をしている
- 一昨年からずっと、ほとんどの時間をモブかペアで仕事をした
- 会社員になった
- 今年もAbemaTVトーナメントが面白かった。特に女流棋士トーナメントは振り飛車がいっぱいでよかった
後適当に。最近コクヨのソフトリングノートがお気に入り。
【本日プレスリリース】ソフトリングノート(カラフル)の表紙色をリフレッシュ
— コクヨのぶんぐ (@kokuyo_st) 2021年8月31日
コクヨ独自のやわらかリングでおなじみのノート、6色のうち3色をリフレッシュします。今っぽいビタミンカラーになりました!
詳細は↓↓https://t.co/0lpwxFMHKO pic.twitter.com/VYAquSCpSq
今年面白かったものといえば、ローションカーリング
あと、鳩。
もっと前はこんな年でした
2020年はこんな年でした
- 当たり前だと思っていたことがある日突然当たり前ではなくなる、ということは今までも何度か経験したけれど、今年もそんな年だった
- 4月ごろから基本ずっと在宅勤務をしている
- 去年に続き一年間のほとんどをモブかペアで仕事をした
- 将棋界は藤井二冠の誕生という大きなニュースがあったんだけど、それ以外にも個人的にはAbemaTVトーナメントと叡王戦がめっちゃ面白かった。
- また多くのプロ棋士、女流棋士がYouTubeチャネルを開設された。嫁Pの初勝利は感動した
後適当に今年面白かったもの
「ここだ!ここすごく大事!テストに出ます!いやぁぁぁテスト!わかりませんなぁ」からの「なんかいい感じに必要な駒を全部持っているから詰ませることができそうですね!」めっちゃ笑った。10秒将棋で3五角って凄すぎるhttps://t.co/2kh0CgBTxa
— ISHIDA Akio (@iakio) 2020年8月30日
先日の叡王戦第5局での天彦先生の解説が絶好調でおもしろすぎたので、個人的にツボった名言をメモ📝
— aisha (@haru_wa_akebono) 2020年7月26日
みなさまぜひタイムシフト観て…解き放たれた貴族の解説しゅごい… pic.twitter.com/ZEU5jMNBlM
王座戦第三局Abema中継、山本四段の名言まとめてみた(※ママ書き起こしではなく一部要約)。プレミアムなら今からでも観られるよ🥺
— THE END OF 鳩 (@810_3chan) 2020年9月25日
第68期 王座戦 五番勝負 第三局 永瀬拓矢王座 対 久保利明九段 @ABEMA で無料配信中 https://t.co/SsmS3jYxGt #アベマ将棋 pic.twitter.com/sAKw33pTYR
อย่าปล่อยกะเทยไว้กับผ้าและกระดาษทิชชู่ ช่วงกักตัว #โควิด19เราต้องรอด #โควิด #โควิด_19 #COVID19 pic.twitter.com/MOpslcl5V6
— Siravariety (@siravariety) 2020年3月27日
— Cute dog forest🐶🐶 (@cutedog_f) 2020年8月14日
もっと前はこんな年でした
Amplify SNS Workshopをやってみた
GW期間中にAmplify SNS Workshopをやってみた。とても面白い内容だったが、ちょっとおかしな挙動をする部分もあった。
本ワークショップのゴール :: Amplify SNS Workshop
ここの図にある通り、AppSync / Cognito / Lambda / DynamoDB等々様々なAWSのサービスをAmplify CLIを使ってTwitterっぽいものを作るチュートリアル。最終的にはgithubにpushするとCIでE2Eテストが動いてその動画をAWSコンソールからダウンロードできる。すごい。 CognitoやLambdaは単体では使ったことがあるので、これ単体でもいろいろノウハウがあって動かすの大変なのに、うまくインテグレートされてるなあと感心した。
ボリュームとしては多くはない。ただデプロイするのに結構時間がかかるので、その間に別のこと始めちゃったりしてだらだらやっていたら3日くらいかかりました。
Timeline上のPostが重複する
Timelineを表示しながらPostすると、Postが重複してしまうという現象が発生した。
PostはLambdaによって
- PostTableにSaveされる
- 自分と自分のFollowerのTimelineに保存される
この2の処理が意図せず複数回呼び出されているようだ。ただし保存している内容は同じなので結果的には上書きされているだけなんだけど、クライアント側ではこれをsubscribeしてTimelineを表示しているため重複して表示してしまう。その後リロードするとTimelineを読み直すので重複は解消される。
CloudWatchでLambdaのログを見るとこのようになっていた。
2020-05-10T06:27:49.322Z d130970d-d15d-496c-9344-42c58f5c40ad INFO [ { followerId: 'iakio' }, { followerId: 'iakio' }, { followerId: 'iakio' }, { followerId: 'iakio' } ]
followerに自分自身が複数入っている。しかしDynamoDBのFollowRelationshipには何も入っていない。どうもLambdaの中で何かが起きているようだ。
const listFollowRelationshipsResult = await graphqlClient.query({ query: gql(listFollowRelationships), fetchPolicy: 'network-only', variables: queryInput, }); console.log(listFollowRelationshipsResult); const followers = listFollowRelationshipsResult.data.listFollowRelationships.items; console.log(followers); //post to timeline followers.push({ followerId: post.owner, }) const results = await Promise.all(followers.map((follower)=> createTimelineForAUser({follower: follower, post: post})));
Timeline機能: @function :: Amplify SNS Workshop
LabmdaやAppSyncについて詳しくないのだが、どうも
- graphqlClient.query()の戻り値の中のfollwersにpushで破壊的変更をしたら、次にgraphqlClient.queryした時の結果に影響する?
- しかもそれが次のLamdaの呼び出しにも影響している? graphqlClientがglobalスコープなんだけど、Lambdaでglobalスコープってどうなるんだっけ
という感じがしている。ちなみにpushをやめたら現象は発生しなくなった。
const followersAndI = followers.concat({ followerId: post.owner, }); const results = await Promise.all(followersAndI.map((follower)=> createTimelineForAUser({follower: follower, post: post})));
2019年はこんな年でした
今年いいねしたツイートはだいたい猫
this is the best tiktok i've ever seen in my entire LIFE pic.twitter.com/h7Q4TVO8qd
— ☆☽ 𝕞𝕒𝕜𝕜𝕠𝕔𝕙𝕚 ☾☆ (@_glittergoth) 2019年8月16日
ベビージムが子猫の遊び場と化している pic.twitter.com/AyVUFF1UFO
— すみパン@12匹のねこカレンダー発売中 (@aims2koz) 2019年8月6日
難易度高過ぎる pic.twitter.com/qqO0DQi3sf
— ☆シャル★ (@Syaru04231) 2019年8月2日
もっと前はこんな年でした
PostgreSQLに接続するときに使える小技の補足
この記事はマニア向けの補足記事です。
psql service=prod
みたいな接続先の指定方法があるという話を書きました。
ところでこれこれどう実装されているんでしょう。psqlのコードの中に、service=prod
みたいなコマンドライン引数を解釈するコードがあるんだろうかと思ったけど全然そんなのは見当たらないのです。
psqlのヘルプを見てみましょう。
Usage: psql [OPTION]... [DBNAME [USERNAME]]
もし、psqlに適当な引数を渡すと、それはDBNAME
として解釈されます。
$ psql hello psql: FATAL: database "hello" does not exist
同様に、service=prod
のような文字列をコマンドライン引数として渡した場合も、psql的にはDBNAME
として扱われます。そしてこれを解釈するのはlibpqです。libpqにはデータベースに接続するための関数がいくつかありますが、psqlでは8.3の頃はPQsetdbLogin()
を使っていました(今はPQconnectdbParams()
を使っていますが大体似たような話なので省略します)。
https://www.postgresql.jp/document/11/html/libpq-connect.html#LIBPQ-PQSETDBLOGIN
PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd);
dbName内に=記号が含まれる場合、または有効な接続URI接頭辞を持つ場合、PQconnectdbに渡された場合とまったく同じ扱いでconninfo文字列として扱われます。 その後残りのパラメータがPQconnectdbParamsの指定のように適用されます。
つまり、PQsetdbLogin()
の第五引数dbnameにservice=prod
みたいな文字列をわたすことができるということです。そして8.3.0のリリースノートにはこの変更について、psqlの変更としてではなくlibpqの変更として以下のように書いてあります。
E.147.3.16. libpq
Interpret the dbName parameter of PQsetdbLogin() as a conninfo string if it contains an equals sign (Andrew)
- This allows use of conninfo strings in client programs that still use PQsetdbLogin().
いかがでしたか?
今回は8.3.0からpsqlのコマンドのコマンドライン引数にconninfo文字列を渡すことができるようになった変更について調べてみました。そしてその変更はpsqlではなくlibpq側で行われたものだということがわかりました。
最後までお読みいただきありがとうございました!もし気に入っていただけたら5000兆円ください!(テンプレあまりよくわかってない)