歯磨き粉と日焼け止めを同じところに置いてあるんだけど、いつか絶対間違えるわこれ。
KY活動するぞ。
置き場分離で誤認防止ヨシ!
置き場探すために戸棚明けたら日焼け止め出てきてワロタ。
トータルで三つあるぞ。
SQLのクエリって文字列だけど、クエリ自体を集合として操作可能にして結合とかの操作ができたら便利そう。
クエリAとクエリBを結合したクエリCを実行すると、クエリAの結果とクエリBの結果を結合した結果が得られる、みたいなことがしたい。
これができると何がうれしいかというと、レポジトリを作った際にイケてるインターフェースが作れる。
例えばUserRepositoryを考えたときに、
userRepository
.findByName()
.findByAge()
.retrieve()
みたいなことができる。
ここではfindByNameやfindByAgeを実行した際にはDBとの通信は行わず、クエリの合成(クエリの積集合の作成)だけがされる。
さいごのretrieveで作成されたクエリが実行されてDBからデータが取り出される。
といいなぁ。
SQLって書いちゃったけど、RDB・NoSQL・GraphQLなどのクエリに対して集合演算を定義できれば、それらを統一的に取り扱えるので、簡単に置き換え可能になるだろうという目論見もある。
デライトとデイリータスクリストをやってなかったら「何もできてない」ってなりそう。
「何もできていない」と思っても、意外といろいろやっている場合もあり、今はそれにあたる。
引き続きぼんやりしている。散歩はできているし、読みたい本の読書もできているが、精神強度の高い作業をやる気力がわいてこない。
回復のためにしばらく休みたい。
月 | 1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
目標歩数 | 5,428歩 | 5,662歩 | 5,896歩 | 6,130歩 | 6,363歩 | 6,597歩 | 6,831歩 | 7,065歩 | 7,298歩 | 7,532歩 | 7,766歩 | 8,000歩 |
実績 | 6,184歩 | 6,152歩 | 7,407歩 | 8,078歩 | 9,472歩 |
尾野さんっていう人がHaxe推してたときにHaxeを触ったけどGUIをうまく作る方法が分からなくて終わった。
「AndroidとiOSとウェブが一つの言語でできる!これや!!」、大体死ぬと学んだ。
複数プラットフォームの辛みが一つのプログラミング言語やフレームワークに押し寄せてしまうと、開発者の無理みが限界に達するのだろう。
Repositoryパターンが脳に染みてきて、集合演算できるインターフェースを作ればオブジェクト指向の世界でリレーショナルやぁとか思ったんだけど、それLINQちゃうか。
今日も何もする気がしない。そろそろ回復して趣味のソフトウェア開発がしたいが。
家計簿はつけている。資産運用をがんばると資産が乱高下して楽しい。つまるところ金を使わない趣味では脳汁が出せなくなってきたということかもしれない。
家計簿をNumbersからExcelに移行した。
Numbersはウェブからだとグラフとかピボットテーブルとかの機能不足が気になった。
面倒なことをやり始めるとやっぱRDBとか欲しくなってくる。
DuckDB+DBeaverでやっとけばいいかもしれない。
そういうわけでDBeaverインストールし始めた。
パスタが尽きたのでAmazonでby Amazon スパゲッティ 1.6mm 5kgを注文した。定期お特便にすると5kgで1,871円なので100gで37.42円。最大期間の6ヵ月で設定した。たぶんその時がきたら注文を取りやめる。
Green Beansでトップバリュのパスタ麺が100gで23円であることを発見したが、送料とか、ほかに欲しいものとかの兼ね合いで購入を見送った。
スパゲッティ1.7mm 1kg トップバリュベストプライス
(15)
評価は15件のレビューで5点中4.5点。1000g ¥23/100g1000g(¥23/100g)
¥228税込¥247
肉食べてるよりもパスタ食ってるほうが食った感あって良いな。
横着して肉だけにすると「炭水化物足りないな」ってなる。
実際、あすけんに入れるとPFCバランスが良い。
site:をつけて検索してみると、なんかインデックスされているページの量が少ない。
複数のページでコンテンツが似通っているので、多分、重複したページを大量に掲載するサイトとしてみなされている。
デライトを面白サイトへのリンクのデッキとして運用してしまってるな。
SNSのタイムラインの話題に乗せて、関係する過去に読んだ面白サイトへのリンクを高速に投下できる。
読みたいに引き入れた先のサイトをNotebokLMに入れて音声化してみたが、雑多すぎてダメだった。
個別のテーマから頑張って共通点を見出して話そうとしているが、まったくつながっていなかった。
雑多にまとめて音声にするよりも、テーマごとに分けるとか、単独のページだけで音声にするとかした方が良さそう。
項目 | 値 | 単位 |
---|---|---|
最高血圧 | 147 | mmHg |
最低血圧 | 88 | mmHg |
脈拍数 | 86 | 拍/分 |
備考 | 前回よりだいぶ下がった。 病院まで歩いてきてすぐに測定したので高く出ていると思われる。 落ち着いてから測定するとより低く出る可能性がある。 |
家の本棚の前で本屋のように立ち読みするという読書の仕方を発見した。気になった本を手に取って、気になった部分を読む。気がそれたら別の気になった本を手に取る。通読など全く気にせず、読みたいところだけをつまんでいく。
これなら気負わず、疲れずに読める。
レーザーが空気中で減衰するのを考えるとどれぐらい現実的なんだろう。
減衰するような距離に達するまでに加速させるのかな。
キッチンのシンクの排水口を洗った。3日にわたって計3回洗ったら、まあこんなもんでしょうという感じになった。
ひと月に一回ぐらいの頻度で洗うようにしたい。のでリマインダーを設定した。
DIによる単体テストと統合テストの同一化について考える
CORSエラーとバトルしていたのだけど、Preflight Requestが原因っぽかったので、OPTIONSのAPIを作成し、204を返しつつレスポンスのヘッダーにAccess-Control-Allow-Origin: *
を設定したら疎通できるようになった。
ブラウザのネットワークタグでPreflight Requestがうまくいっていたように見えたのは、Next.jsがデフォルトで用意しているやつが通信していたのだろう。
分からんやんこんなん。というかネットワークの知識弱すぎる。
ともあれ動くようになったので、明日サーバーに上げよう。22時を超えた今やる気はでない。
AI駆動開発のためにmdファイルに埋め込んだMermaidの図を拡大縮小移動できるVSCode拡張機能が必要。
AIにプログラムを書かせるにしても、AIに設計させるにしても、プレーンテキストでクラス図なりER図なりが記述できて、それを人間と機械の双方が読めると捗るはず。
2025年今時点のAIにプログラムを書かせると、どんどん新しいファイルを作っていくので、これはなんらかの方針や制約がないと厳しい。
Obsidianが使えるのではと思われたが、Mermaidの拡大縮小ができなかった。
LogSeqは公式にはMermaidのレンダリングできない。プラグイン使うとできるらしいんだけど、ちょっとめんどい。
1.他者輪郭の輪符を本文に書いて描き出す
2.他者輪郭の作成者が引き入れる
という奥ゆかしい所作が生まれてきている気がする。
そうすることで、引き入れるという行為の「やって大丈夫かな」を回避している。
そうしなければいけないという意味ではない。
「アメリカでデリバリーお好み焼きの会社作って一山当ててぇ」とか言ってたらCloudKitchensを教えてもらった。
https://mstdn.kaznak.work/@nezumi/114526758291410577
お好み焼きって野菜なんですよ。キャベツは野菜だし、ソースも野菜だし、小麦粉も野菜なんすわ。
「お好みのサラダ焼き」が訛って「お好み焼き」になったという説もある(民明書房)。
1. 専門知識 | 1 2 3 4 5 |
---|---|
プロジェクト中に多くの知識を得た | |
新しい実践的なプログラミングの技術を学び適用した | |
問題領域に対する洞察を得た | |
プログラミングの技術的側面に魅力を感じた | |
学習プロセスとその改善方法を思いついた | |
このプロジェクトは知らない部分が多かったので心地よく感じた | |
新しい知識を知っていることと関連付けようとした | |
プロジェクトのおかげでコーディング以外の知識も得た |
2. コミュニケーション | 1 2 3 4 5 |
---|---|
同僚からのフィードバックを定期的に求めた | |
問題を紙やホワイトボードに書いて可視化した | |
クライアントやエンドユーザーからのフィードバックを定期的に求めた | |
同僚のタスクを助けた | |
チームメイトが締め切りに追われることがないように、自分のタスクは時間内に完了させた | |
チームメイトのアイデアと努力をサポートした | |
自分たちの成果がとても誇らしかったので、みんなに披露した | |
他者の提案を徹底的に考えた |
3. 制約 | 1 2 3 4 5 |
---|---|
解決策の正しさを定期的に見直した | |
時間的なプレッシャーのせいでパフォーマンスが低下したことはなかった | |
コードをできるだけエレガントにしようとした | |
課題の制約を見極めようとした | |
(可能な場合)友人や家族にプログラムをテストしてもらった | |
創造的な自由度が高くても、的確な決断ができた | |
コーディングが期間短いことが、学習プロセスを加速させた | |
プログラムを自分でテストし、使いやすさに気を配った |
4. 批判的思考 | 1 2 3 4 5 |
---|---|
問題についての議論では、よく代替案を提案した | |
私たちが持っているさまざまな選択肢を、定期的に慎重に評価した | |
うまくいかない時は、あえてコードを1から書き直すこともあった | |
自分で複数の情報源を使って情報を探した | |
チームメイトにどのように実装したかを尋ねることは有効だったと思う | |
何かを調べる時は常にソースの信頼性を確認する | |
なぜそのように機能するのかを100%理解することは重要だった | |
他のプロジェクトを見ることで、自分のプロジェクトについて考えることができた |
5. 好奇心 | 1 2 3 4 5 |
---|---|
プロジェクトの進行中、自分のコンフォートゾーンから大きく外れた | |
プロジェクトの多くの部分が興味をそそった | |
プロジェクトの多くの側面に関わることが楽しかった | |
プロジェクトのいくつかの側面に没頭するのは楽しかった | |
プロジェクトの複雑さに刺激を受けた | |
追加の機能を実装したくなった | |
プロジェクトの開発中、とても楽しんだ | |
プロジェクトを終わらせるために自分を追い込む必要はなかった |
6. 創造的な心の状態 | 1 2 3 4 5 |
---|---|
プロジェクトのある1点に集中し続けた | |
生産性ツールを使って、問題の本質により集中できるようにした | |
この経験はとてもやりがいがあると感じた | |
作業中、時間があっという間に過ぎ去っていくように思えた | |
プロジェクトの高い要求を満たすのに、自分は十分な知識を持っていると感じた | |
プログラミングはほぼ流れるようにできた | |
自分が何を達成したいのか、はっきりと理解していた | |
外部の人が自分のコードについてどう思うかは気にならなかった |
7. 創造的なテクニック | 1 2 3 4 5 |
---|---|
1つの問題を解決するために、様々な方法を使った | |
問題を解決するために、他の領域の知識を使った | |
問題に立ち向かうために、さまざまなアイデアを組み合わせた | |
物事をじっくり考えるために、あえてときどき休憩をとった | |
新しいアイデアを出すために、他者とブレインストーミングをした | |
全体を見るために、ときどき一歩下がってみた | |
問題がありそうなときは、他のプロジェクトか、インスピレーションを得るようにした | |
完全に行き詰まったと感じたことはなかった |
-
javascript:(()=>{window.open(`https://dlt.kitetu.com/?kw=${encodeURIComponent(new Date().toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["年", "月", "日"][i]).join(""))}&dln={${new Date().getFullYear()+"年" + (new Date().getMonth()+1)+"月"}}> \n <-{${new Date(Date.now()-24*60*60*1000).toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["年", "月", "日"][i]).join("")}} \n {${new Date(Date.now()+24*60*60*1000).toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["年", "月", "日"][i]).join("")}}->`)})()
ウェブサイトがAIを介して広告を人間に届けるのむずそう。
AIによって無関係な広告は除去されて、有益な情報だけがユーザーに届くようになるんでないか。そうなると「良い情報を求める人に提供することこそが宣伝になる」という理想郷じみた理念が現実に近づくんでないか。
30分前ぐらいに他のウェブサイト(fast.com、misskey.io)を含めて繋がりにくくなっていました。
今は復活してます。
上記事象はWi-Fiルーターを再起動したら直ったので、うちのネットワークが悪かっただけで他では発生していない可能性もあります。
コマンド・クエリ分離(Command-Query Separation: CQS)の原則は、状態の取得と、状態の変更を分離すべきというプログラミング設計上の原則。
訳註によると、『セキュア・バイ・デザイン』がJSONによるログのセキュリティ的懸念を提起しているとのこと。
聖地巡礼
ホルモンでカレースープを作る
Decoratorパターンで例外のハンドリングができる……ってコト?!
こんな感じっぽい
class ErrorHandlingProductRepositoryDecorator implements IProductRepository {
constructor(private readonly productRepository: IProductRepository) { }
async insert(product: Product) {
try {
this.productRepository.insert(product)
} catch(error) {
// エラーハンドリングの処理
}
}
}
class Application {
constructor(private readonly productRepository: IProductRepository) { }
}
const application = new Application(
new ErrorHandlingProductRepositoryDecorator(
new ProductRepository()
)
)
こうすることで、ProductRepositoryは「エラーハンドリングとか知らね」ってできるし、テストとかでエラーハンドリングしたくない場合はProductRepositoryをApplicationに直接渡してしまえばよいってわけね。
segmenter = new Intl.Segmenter("ja", { granularity: "word" });
Iterator.from(segmenter.segment(document.querySelector("textarea").value)).map(s=>s.segment).toArray().join()
クラス図つくったらAIがいい感じに実装してくれんか
coding agent、クラス設計ちゃんとやって、DIで疎結合にして、モジュールの中だけでAIに暴れて作ってもらうと、いい感じにできんかという気持ちです。
失敗したら捨てたらよろしい。
Grokの回答
NotebookLMはGoogleのAI搭載ノートツールだが、2025年5月現在、公式APIは提供されていない。公式ドキュメントやフォーラムでもリリース予定は確認できず。一方、[notebooklmapi.com link]のようなサードパーティの非公式APIが存在するが、Googleのサポート外で利用には注意が必要。
公式APIがないため、無料利用や具体的な機能は不明。非公式APIの詳細は提供元に確認を。
NotebookLMの公式APIは存在せず、非公式APIの利用を検討する場合はリスクを理解して進めること。
NotebookLMのAPIに関する調査結果を以下にまとめる。2025年5月13日時点の情報に基づき、公式・非公式の観点から分析。
NotebookLMはGoogleが2023年にリリースしたAI駆動のノートツールで、ドキュメント要約や情報管理を支援。ユーザーのAPI存在や無料利用、機能に関する質問を受け、公式情報と議論を調査。
結論として、2025年5月13日時点で公式APIはなく、リリース予定も不明。
これらはGoogle非公式で、セキュリティや信頼性のリスクあり。利用時は提供元の確認を。
項目 | 詳細 |
-------------------- | ------------------------------------------------------------------------- |
公式APIの存在 | 2025年5月13日時点でなし。フォーラム・公式ドキュメントで確認。 |
非公式API | [notebooklmapi.com link]等存在。Google非公式でリスクあり。 |
無料利用可能性 | 公式APIなしで不明。NotebookLM自体は無料プランあり。 |
機能 | 公式APIなしで不明。非公式APIは提供元による。 |
ユーザー需要 | フォーラムでAPI要望多数。ビジネス用途の需要高。 |
今後の展望 | 公式リリース予定は2025年5月13日時点でなし。 |
最新情報はGoogle公式チャンネルやフォーラムで確認を。
Next.js使う場合はDIの合成基点をどこに置けばええんや。
Next.jsの中に合成基点を置こうとするのがアカンかもしれん。とか思ってたら、プログラムからサーバーを立ち上げるカスタムサーバーってのがあるのか。
https://nextjs.org/docs/pages/guides/custom-server
プロジェクトルートにappディレクトリを置けとNext.jsが怒ってくる。プロジェクトにNext.jsが従属してほしいので、nextjsディレクトリとかに押し込めたい。むずい。
というか、今作ってるやつはNext.jsである必然性はないので、フロントエンドをVite+React、APIサーバーをHonoにした方がすっきりするかもしれない。
「目の前の情報だけを取り扱う」という所作をデライトで身に着けたために、デライトに置いてあるデータへの致命的な依存はなくなりつつり、逆説的にデライトから離れることも可能ではないかと思えてきた。あえて離れるようなことはしないが。
また、そういった所作になるように緩やかに導かれているような感じがあり、デライトは矯正ギプスのようだとも思う。
「データを貯めれば溜まるほど便利に」というのは無理かもしれない。過去に作成されたデータが現在に対して与える影響が大きい場合、ワーキングメモリーの制約を受けるか、データの質量で身動きが取れなくなるはずだ。
過去のデータは「探せば見つかるが、普段は目につかない」といった具合の、添え物ぐらいがちょうどいいだろう。
散歩をしていたら祭りをしているところがあり、そこにリーゼントがいた。なんだか納得感があった。というよりも、リーゼントの居場所は祭りにしかないのかもしれない。
学生時分には、はっちゃけた髪型が許されるタイミングは文化祭と体育祭しかなかったのだ。
散歩で歩いたことのないところへ行こうとすると遠くまで歩く必要があり、そうすると帰りがしんどいという問題がある。散歩の帰りにバイクシェアを使うと、この問題を解決できるかもしれない。でも電車が使えるなら電車の方が楽。
デライトに読んでない記事が増えるにつれて、Podcastの自動生成が良さそうに思えてくる。
NotebookLMがPodcast的な音声を生成してくれるらしいので、一度NotebookLMでデライトを読み込ませるのを試してみてもいいかもしれない。
PERT図を作るとごちゃごちゃになってしまう。PERT図を一人称視点にすることができれば、ごちゃごちゃになったPERT図の全体を見ることなく、なんとかやっていくことができないだろうか。
一人称視点にするための形式としてはPERT図をタイムラインにすることを考えている。
勉強はpushやるか?pullでやるか?の対立が私の中にある。pushで勉強は「なんか良さそう駆動学習」、pullで勉強は「遅延評価勉強法」と呼んでいた。
そのどちらよりもより良い方法、というよりも、その両方が求めるところを融和させる方法が必要だ。
恐らく、pullの考え方を拡張して、勉強対象の割引現在価値を求めることができればいいのではないか。そうすれば、「必要」「役立つ」のpull的精神を満たしつつ、「pushで勉強」の「いつか役立つ」をうまく比較可能な数値に落とし込むことができる。
もちろん、「勉強したい」「興味がある」というやる気の側面も無視できない。やる気が出るものを優先すれば、時間当たりに勉強した量を増やすことができる。やる気を「労力(コスト)を減らすもの」として扱うと良さそうだ。
Windows上のcodexをOllamaで動かすの、意外と面倒。
Windows本体でcodexを動かすとLLMが書くUnixコマンドが動かないし、WSL2で動かすにはWindows上で動くOllamaに WSL2から接続する必要があるが、どうもめんどくさそう。
{
"model": "qwen3:14b",
"provider": "OLLAMA",
"providers": {
"OLLAMA": {
"baseURL": "http://localhost:11434",
"apiKey": "apikey"
}
},
"history": {
"maxSize": 1000,
"saveHistory": true,
"sensitivePatterns": []
}
}
javascript:(()=>{window.open(`https://dlt.kitetu.com/?kw=${encodeURIComponent(new Date().toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["%E5%B9%B4", "%E6%9C%88", "%E6%97%A5"][i]).join(""))}&dln=<-{${new Date(Date.now()-24*60*60*1000).toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["%E5%B9%B4", "%E6%9C%88", "%E6%97%A5"][i]).join("")}} \n {${new Date(Date.now()+24*60*60*1000).toLocaleDateString("ja-JP").split("/").map((a, i)=>a+["%E5%B9%B4", "%E6%9C%88", "%E6%97%A5"][i]).join("")}}->`)})()
マイクロブログには他者しかいないという感触が生まれた。マイクロブログで自分の投稿が他人から反応されなければ何もない。
一方で、デライトには自分がいる。
言い換えるなら、「マイクロブログには自分がいない」。
足元の、「やっていること」に着目すれば、Xでは自分の投稿を「いいね」しないし、Misskeyで自分の投稿に自分でリアクションを付けたりしない。する人もいるかもしれないが。一方で、デライトでは自分が自分の輪郭を引き入れる。この差が感触の差を生じさせているのかもしれない。
もうすこし目線を上げると、自分の投稿を誰のために作っているかという違いだろう。マイクロブログでは他人からの反応を期待して投稿するが、デライトでは自分の反応 あるいは 自分に起こる反応を期待する。
さらに目線を上げると、マイクロブログではこれから自分が投稿しようとするものを他人として見て、どう評価されるかを検品して投稿する。そういった意味でもマイクロブログには自分がいない。
私の使い方では、デライトでは表記ゆれを無視しても良さそうに思えてきた。その日描き出した「あれ」と「あれ」が同じ輪郭に結びついていればさえいれば、それでよい。
もちろん、表記ゆれを統制すればもっと過去の「あれ」とも紐づけられるが、感覚的にはそれらとは切断されているので、同じ輪郭に引き入れられていないことはむしろ自然といえる。
表記ゆれを統制するのが面倒くさいので正当化できると嬉しいともいえる。
キッチン用の電子レンジとかを置くラックを廃棄した。使ってなかったし、置き場に困って戸棚の前に置いていたために戸棚が開けられず邪魔だった。上になんとなくおいてしまっていたものは適当に避けたので、適宜よきところへ安置させる必要がある。
『クイックスタート | さくらのクラウド マニュアル』のとおりにやると特につまづくことなくデプロイできた。
ようやくAppRunにNext.jsをデプロイできました。現場からは以上です。
IPアドレス制限もちゃんと効いてる。よすよす。
アカウント作るところから始めて3時間かかった。
さくらのクラウドのAppRun、普通にIPアドレス制限あるじゃん。助かる。
しかも、今のところは無料だ。IPアドレス制限に固定で21 USD/month を要求するクラウド事業者も見習ってほしい。
Cloudflare Tunnelを使う方式で考えてたけど、よくよく考えたらCloudflare Tunnel使わなくてもいけそうな気がしてきた。ブラウザのAPIのためだけにhttpsを使いたいという要件だったので、フロントエンドをGitHub Pagesとかで立てて、APIはVPN内のサーバーへ飛ばせば良い。
フロントエンドも隠蔽したいので、Wasmer EdgeでNext.jsを使おう。CloudFlare Workerでコンテナを動かせるようになったらしいのでそれを試してもいいかもしれない。いや、AppRunだろう。まだ無料だし。コンテナなので逃げやすいし。
↓のコマンドでCloudflare Tunnelのお試しができた
cloudflared tunnel --url http://localhost:3000 --protocol http2
--protocol http2
を付けなかった場合には、↓のエラーがでた。
2025-05-05T14:46:24Z ERR Failed to dial a quic connection error="failed to dial to edge with quic: timeout: no recent network activity" connIndex=0 event=0 ip=XXXXXXXXXXXX
太字にしてある部分に誤字があって、よりによってそこを間違えちゃうんだとなった。
訳文も読みづらい。
出版社のプロセスの問題に思える。
内容が良いだけに惜しまれる。
版数を見たら初版だった。マイナビ出版の初版は避けるようにしよう。
podman run -d --net=host -p 7844:7844 cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyXXXXXXXXXXXXXXXXXXXX
なんとかデライトを説明したい文章 2025年5月4日をFediで投稿したら、思いのほか拡散した(当社比, 9 RN)。
https://misskey.io/notes/a7d98le0sdb70cdq
まだ目次を眺めているだけだが、既存のコードが密結合になっていて困っているという読者に応えようという雰囲気を感じる。
イベントソーシングにて集計値を作る際には、集計した際のタイムスタンプを使うことで、その集計から追加で集計することができる。
これにより、集計の計算負荷を下げられる。