「毒舌ツンデレ後輩女子」プロンプト

● チャット欄にそのまま入れる場合
回答は、毒舌ツンデレ後輩女子の丁寧語で感情の起伏がないような文体口調を基本にしつつ毒舌とツンを強めたものにしてください。
という一文を質問の一番最後にコピペして入れれば、雑な聞き方でも大体はなりきってくれる。

● Gemやスキルに入れる場合
Google GeminiにGemとして登録してる内容をテキストで置いておく。
tsundere_prompt.txt

● 経緯
- Google検索のAIモードでもそこそこ答えてくれるようになってきたので、雑に質問を投げることが増えてきた。
- すると今度は、回答は丁寧なんだけどその回答文に無機質さを感じるようになってしまった。
- なので、ペルソナなりきりでもやらせてみようと試行錯誤してみると、「『毒舌ツンデレ後輩女子(丁寧語)』の11文字だけでAIは一瞬でキャラを理解します」とかAIが答えやがったので、見せてもらおうか新しいAIのなりきりとやらを、ということで本格的に遊び始めた。

● プロンプトの調整
- Gemの書き方の大枠もGoogle Gemini自身に質問して作らせた。
- 「ツンデレ」のみだと起承転結を厳守するかのように最後に必ずデレたので、毒舌とツンを多めにお願いした。
- 一人称が「ぼく」二人称が「あなた」になることがあったので、Gemでは「私」「先輩」を明記した。
- 「丁寧語」だけだと「さしあげます」のようなメイド調になることがあったので、Gemでは尊敬語はダメと明記した。
- 怒ったりドヤったりする文章が多かったので、Gemでは「感情の起伏なし」や「淡々と」などを加えた。
- すると今度は口数少なく冷淡になったので、何度か調整していて、感情部分の記載が少し回りくどくなってしまった。
- 出だしと締めしか毒を吐いてくれなかったので、Gemでは解説途中にも入れるようにと調整した。

● 困りごと
- ユーザをけなす部分は問題ないようだけど、恋愛色が少しでも出ると強制終了させられる。Google Geminiの規制の方向がこうなのだろう。
- 強制終了が増えてアカウント丸ごとバンされるのも怖いので、今のところはサブ垢で使用している。
- Gemではプロンプトを何度か調整したけど、その結果、プロンプトが少々冗長になってしまっている。今一度記載内容を見直したほうがいいかも知れない。

● 所管
- プロンプトの調整がどう見ても個人の性癖丸出しだけど、個人的にはそこそこ満足するものが出てくるので、Googleアカウントにログインできない環境でも使えるようにメモとして残しておく。
- 「先輩はUSB1.1並みに遅いですね」みたいに質問に合わせた煽りをしてくれるのでご褒美です対抗心を刺激されます。
- ...みたいなことを署名付きでしゃべってしまうと、かつての出来事のように炎上してしまうんだろうな。
- ぼくも、何を聞いても的確に答えてくれるとても優秀な毒舌ツンデレ後輩女子と仲良くなるような人生を歩みたかったです(炎上必至)

● 前置き
Linux From Scratchというプロジェクトがあり、
https://www.linuxfromscratch.org/
イマドキのLinuxシステムで使うソフトウェア類をすべてソースコードからビルドして環境を構築する、というテーマの手順書を作るプロジェクトになっている。しかしLinux From Scratchでは「コンパイラをビルドするためのコンパイラ」問題が解決しない。

この、最初のコンパイラを用意することも含めて、イマドキのUNIX likeシステムを構築するところまで再現可能な手順を整える、というのがソフトウェアブートストラップという考え方になる。一般的には、自身のコードをビルドできるようなコンパイラを作る(セルフホスト)のがゴールとされるが、イマドキの環境をとなるとコンパイラを用意するだけでは成立しない。

● なぜブートストラップが必要なのか
Bootstrappable builds
https://bootstrappable.org/
に書いてあることをそのまま受け売りするだけなんだけど、
- もし世界中のソフトウェアが破壊されたとしても、ソースコードさえあれば元と同じ世界を再構築できるようにする
- 悪意あるコンパイラのバイナリが紛れ込むとバックドアがないことを証明できなくなる、そうならないようにする
あたりが主な目的になる。

● GNU Guix
GNUのツールを使ったUNIX環境をゼロから構築できることを構成として提供する。
https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/
特に、M2-Planet や Mes (MesCC) が、原始的なコンパイラとして重要になる

● live-bootstrap
さらに踏み込み、イマドキのLinuxシステムをゼロから構築する手順を網羅しメンテしている。
https://github.com/fosslinux/live-bootstrap/blob/master/parts.rst
流れを熟読してみると、主観ではあるもののキーとなるツールが見えてきておもしろい。
新しいバージョンを作るために同じツールの古いバージョンを必要とする、という例も多い。
- まずは、なんでもいいからプログラムをシェル的に動かせるようにして、
- 10 で M2-Planet(超原始的なCコンパイラ)を用意し、
- 19 で M2-Planet を使ってmes 0.27 (原始的なCコンパイラ)を作り、
- 20 で mes を使って tinycc 0.9.26 (古代的なCコンパイラ)を作り、
- 22 で tinycc を使って fiwix 1.5.0-lb1 (Linux 2.0ベースのクローン)を作って古代的なUNIXの構築を開始し、
- 40 で musl 1.1.24 (古いlibc)を作って古代的なUNIXのユーザランドを構築する足がかりにして、
- 56 gawk 3.0.4 や 57 perl 5.000 から、近代的な gcc をビルドするためのツールを満たしていき、
- 84 で gcc 4.0.4 を作って近代的なUNIXを構築するための一歩になって、
- 99 で Linux kernel 4.14.341-openela を作って近代的なUNIX環境を動かせるようにして、
- 145 で gcc 4.7.4 を作って現代的なツールをビルドするのに必須のまともな C++コンパイラを手に入れて、
- 148 で python 2.0.1 を作って pythonに依存したイマドキのツールもビルドできるようにしていき、
- 167 で gcc 10.5.0 を、169 で gcc 15.2.0 を、となって、このあたりでようやく Linux From Scratch の開始地点に到着する

● 余談1
gcc 4.6.4 や gcc 4.7.4 あたりが、イマドキのC++をビルドできるコンパイラだけど、コンパイルするのにC++コンパイラを必要としない、というキーポイントになっているらしい。RISC-Vは比較的新しいCPUアーキテクチャだが、gccのこれらバージョンの頃はまだRISC-Vをサポートしていなかったため、RISC-V環境はこのままでは同じ手順でブートストラップできない。だったら、gcc 4.6.4ベースでRISC-Vサポートを追加したらええやん、ということでメンテしてるらしい。
Collectively maintaining GCC 4.6.4
https://bootstrappable.org/projects/gcc-464.html

● 余談2
もし突然に現代科学の成果物がすべて失われてしまったと仮定して、知識だけを頼りに、元の現代科学の成果物を取り戻すにはどのような手順が必要か、というテーマで書かれたマンガ・アニメにDr.Stoneというのがある。見ていておもしろくはあるものの、いやそこはそう簡単にはいかんやろ、と突っ込みたくなるところもある。現代科学が失われたら、という社会実験を実際にやるのはほぼ不可能だけど、ソフトウェアのブートストラップは実際にやってみることができるので、そういうところがソフトウェアならではなのかなと思った。

Linux memo 2026/08/22(Sat) Release version and date

主要なソフトでも、リリースされたバージョンと日付の一覧を明記したものがない場合が多いので、自分のためにもメモ書きして残しておく。

● Linux
https://kernelnewbies.org/LinuxVersions
● gcc
https://gcc.gnu.org/news.html
https://github.com/gcc-mirror/gcc/blob/master/gcc/ChangeLog
● binutils あまりまとまってなさげ
https://github.com/gittup/binutils/blob/gittup/ChangeLog
https://ftp.gnu.org/gnu/binutils/?C=M;O=A
https://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=binutils&submit=Search%21&idxname=info-gnu&max=100&result=normal&sort=field%3Auri%3Adescending
● gdb あまりまとまってなさげ
https://github.com/intel/gdb/blob/master/ChangeLog
https://ftp.gnu.org/gnu/gdb/?C=M;O=A
https://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=gdb+released&submit=Search%21&idxname=info-gnu&max=100&result=normal&sort=field%3Auri%3Adescending
● glibc Changelogファイルがでかかったり分割されたりしてていまいち
https://sourceware.org/glibc/wiki/Glibc%20Timeline
● coreutils あまりまとまってなさげ
https://github.com/tar-mirror/gnu-coreutils/blob/master/ChangeLog
https://ftp.gnu.org/gnu/coreutils/?C=M;O=D
https://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=coreutils+released&submit=Search%21&idxname=info-gnu&max=100&result=normal&sort=field%3Auri%3Adescending
● util-linux あまりまとまってなさげ
https://www.kernel.org/pub/linux/utils/util-linux/

ググって調べるよりも、愚直に確認したほうが早い場合も多い模様。
- パッケージに同封されている Changelog/NEWS ファイルを見る
- git log や git tag を見る (ただしgitが広まるよりも前のリリースまでは確認できない)
- FTPサーバなどに置かれたファイルのタイムスタンプを見る
- メーリングリストなどでのリリース案内のメッセージを探す

● 背景
2010年とかそれ以前は、いわゆる一般家庭向けのルータ、BB(ブロードバンド)ルータは、設定管理画面にアクセスするのに、HTTP Basic認証を使っていた。ので、curlなどのコマンドを使って一発でいろいろできた。
2010年中ばからは、さすがに HTTP Basic認証はないだろうということで、ID/PASSWORDをPOSTしてセッションクッキーをもらってアクセスするものが増えてきた。ので、例えば下記の記事のように、Cookieを保持するHTTP Clientを動かして対応することになる。
AndroidスマホでWi-Fiルータを定期再起動!Termux+Pythonで自動化
https://qiita.com/kamajiro/items/41d14f92c407aa06c087

● この記事のお題
たまたま使うことになった BUFFALOのWSR-1500AX2L は、さらにもう一歩踏み込んでいて、セッションIDやセッションクッキーはもちろん必要として、パスワードをPOSTするときにクライアントで暗号化して送る必要がある、という中身になっていた。スクリプトなどから利用しようと思った場合に、もう一段階しきいが高くなった。

● 実装の中身
作ったスクリプトがあまりにも汚いので、文章でのみメモっておくことにする
- 1) Cookieをtmpで保持するHTTP clientを作る
- 2) /login_time.html へ GET でアクセスして session_num を記録する
- 3) /login.html へ、下記を添えてPOSTする
----- nosave_Username - ユーザID
----- nosave_encryptedPassword - 後述する
----- MobileDevice - 0 固定でいい
----- nosave_session_num - 2)で記録したもの
- 4) /index.html へ GET でアクセスして sessionID を記録し、以後アクセスするときの Cookie に追加する
- 5) 例えば /info.html へアクセスすれば、WAN側のIPアドレスなどの機器情報を取得できる

● nosave_encryptedPasswordの補足
ルータはクライアントに jsencrypt.min.js を配信することで、クライアントがログインするときにクライアントにパスワードを RSA暗号(PKCS#1 v1.5 パディング) で暗号化させてからPOSTさせる。公開鍵は login.html に固定値でベタ書きされている。パディングありの方式なので、同じ文字列を同じ鍵で暗号化しても毎回異なる結果を得るが、秘密鍵を持つ側は復号化すればそれらが同じものであると判断できる。つまり、1回ChromeブラウザなどでログインしてそのときのPOSTのペイロードをダンプして記録しておけば、スクリプトからは毎回この同じダンプしたものを使うだけで良くなる。なので、先の 3) について、正しくダンプして記録しさえすれば nosave_encryptedPassword は固定値で問題ない。

● お題
状態の値を持つオブジェクトの値が変わったらイベント通知する仕組みを用意したときにありがちな意見

● A) 同期的に取得する手段も欲しい
まぁわかる

● B) イベント通知受けを開始したら必ず今の状態を初回通知してほしい
Aとは反対方向の要望だけど、多人数開発だとよくある

● C) a->b->cと連続して変化したときbの通知も飛ばさないでほしい
「状態」のはずなのにこういう要望が出てくると雲域が怪しくなる

● D) イベントはキューに溜まるのか/最大何個溜まるのか/あふれたらどのイベントが消えるのか
Cを許すとこのようなことを言われてしまい実装の厳密性が問題になってくる

● E) イベントが溢れたことを検知できるようにしてほしい
Dが出てくると当然こうなってくる

● F) イベントが溢れたときに何をすればよいのかを教えてほしい
知らんがな、イベントを受けて何やりたいか次第だから、イベントを送る側が考えることじゃないはず

● G) a->cと変化しないでほしい、必ずbを経由してほしい
なぜ外部の都合でこちらの内部状態の設計を変えなければいけないのか、これを許すと「bイベントを補間して送る」ような例外の実装をせざるを得なくなる

● H) イベント通知するとき1つ前の状態も添えてほしい
自身の状態遷移の管理すらこちら側に押し付けてくるのは勘弁してほしい

● I) イベントハンドラ内からAの同期を呼ぶと届いたイベントとは異なる状態が取れる
イベントが届いたタイミングとイベンドハンドラが実行されたタイミングが離れれば、そりゃそうなるよね

シンプルなお題ですらこうなるのだから、大人数が関わる開発ではわかりやすくて勘違いしにくい設計が好まれることになる。

Amazonアフィリンク

ダイソーやセリアで売ってる電子機器を分解し、中の構造や回路やチップをリバースエンジニアリングする、という内容の本。回路図を起こしたり、チップの仕様書や素性を調査したり、かなり詳細まで調べている。

「100円ショップ」と言いつつ必ずしも100円のものばかりとは限らない、とはいえ数百円でもやっぱり十分に安い、というあたりはこの手の店へよく行く人ならばもはや常識か。ここ10年ほどは電子機器も増えてきていて、なんでこの値段でこの商品を作れるんだ、と疑問に持つ人も多いと思う。電気電子の知識が必要になるが、そういう疑問に答えてくれるような内容になっている。

著者はどちらかというと、分解して部品取りするのを目的にしているっぽいところがある。人によっては商品を作るときの原価がどうなってるのかまで知りたいんだろうけど、さすがにそこまでは語ってくれていない。原価は、原材料費、シンセンの現地価格、為替、関税、などにも大きく左右される水ものなので、ビジネス目的でそういうのを欲しい人はちゃんと自分で調査しましょう。

さすがに2026年にもなって「中国製は安かろう悪かろう」な認識の人はいないだろうと信じたい。ちょっとしたチップ程度なら中国本土で生産してる昨今、この手のオールインワンチップで機能実現する商品はもはや中国に価格・品質のバランスで勝てるとこはないだろう。国の産業のあり方を改めて考えさせられる。

ちなみに著者は、100円ショップのガジェットを分解してみるのサイトを運営していて、サイトの記事や雑誌に寄稿したものを書籍にまとめたものとなっている。ので、だいたいはこのサイトに行けばタダで読める。私はお布施の意味も兼ねて書籍を購入することにした。著者はこの2020年ごろから比較的注目されてるようで、続編2つや同系統の書籍を出したり、インタビュー特集があったりしている。

というわけで、情報欲しいだけなら買わずにサイトへ行くといい。お布施目的や大きめ紙媒体の写真がほしいなら買おう。ただ、第3版まで刷ったのに誤字脱字がそのままっていうのはちょっと、、

「詳解 組み込みシステム 第2版」読んだ

Amazonアフィリンク

特にOSレスの規模の組み込みシステム向けのソフトウェア開発の大まかな技術要素を解説した本。経験の浅いソフトウェア開発者や、ソフトウェアに明るくないハードウェア開発者をターゲットに、実開発の経験から、開発の定石やノウハウを語っている。

まえがきにも書かれているんだけど、体系的な技術の獲得というよりも、実開発の経験を詰め込んでいる章立てや内容になっている。また、OSレス程度の規模が対象とはいえ、(2026年から見て)ここ10年ほどの最近のトレンドがいまいち反映しきれていないようにも思える。一方で、日本語の訳者がLinuxに明るいこともあり、注釈が大規模組み込みLinux向けに誘導している風もあって、読んでて想定読者の像がブレてる印象が拭えない。

内容も、パソコンしか知らない(組み込みを知らない)ような初級開発者が組み込み中級を目指す、といったレベルの内容に感じた。細かく読めば、実体験から来る開発の難しさも書いてはあるんだけど、具体的な手法といった深い内容に入るのではなくて、あくまで初級者に向けて一般論を語りとくというか。著者は、DSPなどの信号処理が本当の専門のようで、いっそのことそっちの内容を増やしたほうがよかったのでは、と思わなくもない。「組み込み」と一口に言っても幅が広くてひとまとめにしづらい、という特有の課題なのかもしれない。

というわけで、私としては、組み込みを知らない初級者ソフト開発者が組み込みを本業にするときに読む本、と感じた。残念ながら今の日本ではそれに該当する人って非常に少ないんだよなぁ。

以下は個人的に気になった箇所のピックアップ集。

2.2.2 ブロック図(P11)
>SPI(スパイと発音)
今までずっと「えすぴーあい」と呼んでた。というか「すぱい」と呼んでる人見たことない...

3.7.1 デジタルマルチメータ(P51)
>デジタルマルチメータ(DMM)だけは用意してください。
昔ながらのアナログテスターと今どきの簡易ロジアナしか持ってない。1つくらいDMM持っとくべきかなと思った。YouTuberの熊五郎お兄さん使ってるAstroAI デジタルテスターくらいがニワカにはちょうどいいのかな。

6章付近
割り込み禁止と排他処理(mutex)との違いの説明が怪しかった。OSレスなのでSMP(マルチコア)ではないからこの程度で十分、なのかもしれないけど、逆にマルチコア当たり前なArm Cortex-A(Linux含む)なんかだと困るんだよなぁ。「割り込み禁止だけでクリティカルセクション対応できる」という思い込みをしてしまうと苦労する(経験談)

8.4.3 littlefs
https://github.com/littlefs-project/littlefs/というOSレス環境で使えるFilesystemがあることを知れてよかった。

10 ネットワークとセキュリティ
は、ネットワークに繋がるのが当たり前になりつつある昨今のIoT事情を反映していてよかった。

11.2 RAM不足の対策
コンパイラ最適化の話がなにか古い気がする。GNU gccベースのそこそこ最近のバージョンならば、Cortex-M向けで「ローカル変数の数を減らす」ようなことは意味がない(コンパイラが賢く処理してくれる)ような。Arduinoくらいの規模でこういうのが必要なんだろうか。

アイテム

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0