2025/05/03
日報+書き散らし。
今日はRustをちょっとやっていた。
Twitterから引用
for (c1, c2) in ca.by_ref().zip(cb.by_ref()) { c.push(c1); c.push(c2); }とかいうコードでlet mut ca = “a”.chars(); let mut cb = “".chars();とかすると"a"が消失して???ってなってたけどzipって評価した後返さないんだな。地味に面倒
AIに聞いたらuse itertools::Itertools;でfor c in ca.by_ref().interleave(cb.by_ref()) { hoge.push(c); }してねって言われた。
まぁもとの問題あるコード書いたのもAIなんだけど。
まぁそういうこと。zip使うのがRustっぽいですよ!!!って言われて実行してみたら失敗してその理由もしばらくつかめなかった。zipでやるなら、後から直接ca, cbをextendに入れずに、元々参照した解答みたいにresult.extend(word1.chars().skip(word2.len())); result.extend(word2.chars().skip(word1.len()));みたいな感じでやらないといけない。
こういうのってすべてScrapboxにまとめるべき(Obsidianでも可。検索性が高ければよい。)のような気がする。毎日日報を書いているブログを読んでいて、こういうの自分も書きたい!、と思ってやっていたのだけれど、このブログはただのレシピ帳であるべきかもしれない。
Scrapbox(Cosense)でいうと、NotionがAIと相性が悪いという話がでていて、それってAIが読みやすい形で提供できればそれでいいのでは?とおもっている。Web上でああいうのをうまく操作するにはコンテナみたいな形にせざるを得ないわけで、うまくExportできるなら何でも良い気がする。まぁNotionはうまくExportできないんだけど。数年前にやったときはHTMLとかPDFでExportしないとうまくできなかった。markdownとかだと情報が抜けてた気がする。その点、ScrapboxはかなりMarkdownに近いから、問題ないのでは、となっている。実際Scrapboxには先月辺りに1hop/2hopでAI用にExportする機能が追加されている(使いやすいとは思わないけれど)。
自分は意外とこういうことうだうだと考えがちで、数時間/日くらいはこういうのに溶かしている気がする。HDDの価格がここ数年上がってるのとか、割り当てられたOneDriveどうやって使おう、とN3P->N2, intel 3->(N3)->18Aで大き目の進化があって、どちらも2025後半に量産、28年くらいまで見ると、A16, 14Aが見えてくるとかいうのとか、家族にパスワード/Passkeysクレデンシャル マネージャー使わせたいけど、そうなると1password一択で、BitwardenはOSSなのは魅力的だけれどちょっとないかなぁみたいなのとか、この鯖有効活用できていないよなぁとか、どこにお金を使うべきかとか、ここ数日だけでもうだうだ考えていた。
ここ数日何を考えていたのかとても明確なのは、先日から一挙手一投足をDiscordに書き込むようにした成果。これは、どこでどれだけどのような行動に時間が割かれているのかよくわかって、とてもよい。行動する前に言語化するほうが効果的なんだけれど、毎回判断が行われる裏返しで疲れるし、モチベが維持できない。方法自体はかなり正解っぽいので、しばらくこれで自分の行動を観察しようと思っている。
ちなみに、料理の方は飽きない程度に鶏ごぼうをつくっているけれど、なかなかこれというレシピが決まらない。毎食作んないと一週間で一品は難しそう。
あと、この投稿書いて、blockquoteのStyleがないことに気づいたので、追加した。Geminiにお願いして出てきたのがほぼそのまま使えて、変更したのはfont-style: italic;の削除だけだった。
/* Nice blockquote style for the dark theme */
/* Gemini 2.5 Flash (experimental)に作ってもらった*/
blockquote {
margin: .7rem 0; /* Add some vertical margin */
padding: 1rem 1.5rem; /* Add padding inside the blockquote */
border-left: 4px solid #555; /* Add a subtle left border */
background-color: #28282a; /* Slightly lighter background than body for contrast */
color: #c0c0c0; /* Slightly lighter text color than body */
}
blockquote p {
margin-bottom: 0; /* Remove bottom margin for paragraphs within blockquotes */
}
blockquote footer {
margin-top: 0.8rem; /* Add space between quote and footer */
font-size: 0.9rem; /* Smaller font size for the footer/citation */
color: #808080; /* Muted color for the footer */
text-align: left; /* Align footer text to the left */
border-top: none; /* Remove the border from the general footer style */
}
あと、Inlineのcode要素への装飾が存在しなかったので、適当に書いておいた。
こう:
/* shikiを適用していないcode要素 */
p {
code {
word-break: break-all;
margin: 0 .2rem;
padding: .1rem .2rem;
border-radius: 3px;
background-color: #282c34;
font-style: normal !important;
font-family: var(--fonts-mono);
font-size: 0.9rem;
}
}
あと、randomなページに飛ぶページを作った。AIが優秀なので、ノーコードとか要らないです。
<!DOCTYPE html>
<html lang="{{ .Site.LanguageCode }}">
<head>
<meta charset="utf-8">
<title>Loading random post...</title>
<meta http-equiv="refresh" content="10;url={{ $.Site.BaseURL }}">
<!-- 投稿時はcontent="0;url={{ $.Site.BaseURL }}"としていて、これでもlocalでうごいていて気づかなかったけれど、サーバーにあげたら当然動かなかったので修正 -->
</head>
<body>
<p>Loading a random post...</p>
<script>
const indexJsonUrl = '{{ absURL "index.json" }}';
fetch(indexJsonUrl)
.then(response => {
if (!response.ok) {
// HTTPエラーが発生した場合
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
// index.jsonのデータは記事オブジェクトの配列になっていると仮定します
if (data && Array.isArray(data) && data.length > 0) {
// 記事リストからランダムなインデックスを選択
const randomIndex = Math.floor(Math.random() * data.length);
const randomPost = data[randomIndex];
// 選択した記事オブジェクトに permalink が存在するか確認
if (randomPost.permalink) {
// ランダムに選択した記事のパーマリンクにリダイレクト
// window.location.href()を使うと、一つ前に戻った時にこのページに戻って再度リダイレクトするとかいうエビルな動作になる。
// replaceならこのページの履歴が残らない
window.location.replace(randomPost.permalink);
} else {
console.error('Random post object is missing permalink:', randomPost);
// permalink が見つからない場合、トップページにリダイレクト
window.location.replace('{{ $.Site.BaseURL }}');
}
} else {
// AIによる丁寧なエラー処理
console.error('index.json is empty or not a valid array:', data);
window.location.replace('{{ $.Site.BaseURL }}');
}
})
.catch(error => {
// これは要る。
console.error('Error fetching or processing index.json:', error);
window.location.replace('{{ $.Site.BaseURL }}');
});
</script>
</body>
</html>
あと、paddingを追加するshortcodeを書いてもらった
{{ $padding := default "3em" (.Get 0) }}
<div style="padding-bottom: {{ $padding }};">
</div>
使うには、{{< padding >}}とか{{< padding 30rem >}}とか書けば良い。ちなみに、これを書くのには、{{</* padding */>}}とescapingしてる。(参考:https://liatas.com/posts/escaping-hugo-shortcodes/)