Today is: Saturday, April 25, 2026 Rick Cogley's current events landing page page, generated via «Lume ルメ» SSG using Vento templates, and hosted on Deno Deploy as static files.
Many thanks to Óscar Otero, creator of Lume, Lume CMS, and Vento, for his great work coding useful tools, and for his help answering questions. 🙏🏻
- Production Site: https://rick.cogley.jp
- CMS: https://cms.rick.cogley.jp
- Font: Alegreya via Google Fonts
- Icons: from Phosphor
- CSS base library: Tachyons
- [🗾 There is a white canvas shoe sitting in the shoe-rack grid at the entrance of almost every Japanese primary school — a wall of small cubbies, roughly 25 cm on a side, one slot per child. The kid arrives, takes off their street shoes, slides them into their named cubby, pulls on the canvas pair that was waiting there, and walks upstairs to class. At the end of the day they swap back, and the canvas pair goes right back into the same cubby. The canvas…
https://cogley.jp/articles/japanese-shoes](https://rick.status.lol/rick/69eb5f7c1534f)
- [🗾 日本の小学校の下足箱(入口の壁に並ぶ、児童ひとりに一枠ずつ割り当てられた約25cm四方のマス目)には、ほぼ必ず白いキャンバスの靴が並んでいる。生徒は朝登校すると、街で履いてきた靴を脱いで自分のマスに入れ、そこに入っていたキャンバスの靴に履き替え、教室に向かう。下校時には履き替えて、キャンバスの靴を同じマスに戻す。この靴は上履きと呼ばれ、素材そのものにはズックというカタカナの名前がついている。カタカナで書かれているということは、外来語であることを示している。 ℹ️
そのとおり、外来語だ。遠い海路を経て、オランダ語の doek(ドーク、意味は「布」)に由来している。17世紀、オランダ商人が出島経由で織物を持ち込み、その同じ単語は2世紀後、英語に渡ってダック(duck)キャンバスの語源にもなった。綿、キャンバス、ひとつのオランダ語。この糸が、アムステルダムの港から子どもの上履きまで、一本につながっている。そして日本の靴の物語は、まさにここから始まる。
私は横浜に住んでいる。数年前、日本で暮らし…
https://cogley.jp/articles/japanese-shoes](https://rick.status.lol/rick/69eb5f7c3bbb1)
- [🔧 AI crawlers — Gemini, GPT, Claude, Perplexity — are reading your site constantly, and they'd rather parse markdown than HTML. Markdown means cleaner context, fewer tokens, cheaper inference for them, which translates (via the economics of who pays for those tokens) into more efficient use of everyone's budget. If an agent is going to summarize your page anyway, giving it markdown directly means it spends its token budget on your…
- [🔧 AIクローラー(Gemini、GPT、Claude、Perplexityなど)は絶えずサイトを読みにきており、HTMLよりMarkdownのほうを好む。Markdownのほうが文脈がクリーンで、トークン数が少なく、推論コストも安い。エージェントがどうせあなたのページを要約するなら、DOMを歩くことに割くトークン予算を、実際のコンテンツに回したほうが合理的だ。
エージェントにMarkdownを届ける方法は二つある。コンテンツが すでにMarkdown の場合(CMS、Gitリポジトリ、データベースにある場合)、ヘッダでフォーマットを交渉するだけで済む。筆者の姉妹記事「SvelteKit + Cloudflare WorkersでAIエージェント向けMarkdownを配信する」が、そのケースを詳しく扱っている。
コンテンツが HTML の場合(サードパーティページのプロキシ、ドキュメントのミラー、リーダーモード・エンドポイント、LLMサマライザーへの…
- [💼 東京で小さなITサービス会社を運営している。現在ISO/IEC 27001(国際ISMS規格・日本ではJIS Q 27001として同内容で採択されており、日本政府資料では多くの場合JIS表記が使われる)の取得作業を進めていて、その途中でSECURITY ACTION(セキュリティアクション)という制度にたどり着いた。IPA(情報処理推進機構)が運営していて、料金はかからず、宣言作業そのものは半日で終わる。日本で中小企業を経営していて、セキュリティに少しでも関心があるなら、この制度の存在くらいは知っておいていい。
この記事は、この制度の存在を知らない中小企業経営者(特に、日本の制度に疎い外国人経営者)に向けて書いている。何かを売りたいわけではない。私が学んだことを共有しているだけだ。2026年4月のgBizID Prime必須化と、新設されるMETIのSCS(サプライチェーンセキュリティ)制度が組み合わさることで、この制度は半年前までの印象よりもずっと意味を持ち始…
| Item | Value |
|---|---|
| Total Files | 143 |
| Repo Size in MB | 25 |
| Lume Version | v3.0.11 |
| Deno Version | 2.7.13 |
| V8 Version | 14.7.173.20-rusty |
| Typescript Version | 5.9.2 |
| Timezone | Asia/Tokyo |
Footer:
<footer
style="background-image: url(/assets/footer_bg2.gif)"
class="tc-l bg-center cover bg-black text"
>
<div class="w-100 ph3 pv5 bg-black-70">
<span class="white-40"><small>© <span id="copyright-year"></span> , juo00oc@gmail.com<br>
更新日付 2026年4月25日 2:00:12 GMT+9<br>
本日は<span id="holiday"></span><br></small></span>
<a
rel="me"
class="link white-90 bg-transparent hover-green inline-flex items-center ma2 tc br2 pa2"
href="https://www.instagram.com/jo00oc/?hl=ja"
title="Instagram"
target="_blank"
><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor"><path d="M176,32H80A48,48,0,0,0,32,80v96a48,48,0,0,0,48,48h96a48,48,0,0,0,48-48V80A48,48,0,0,0,176,32ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z" opacity="0.2"/><path d="M176,24H80A56.06,56.06,0,0,0,24,80v96a56.06,56.06,0,0,0,56,56h96a56.06,56.06,0,0,0,56-56V80A56.06,56.06,0,0,0,176,24Zm40,152a40,40,0,0,1-40,40H80a40,40,0,0,1-40-40V80A40,40,0,0,1,80,40h96a40,40,0,0,1,40,40ZM128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm64-84a12,12,0,1,1-12-12A12,12,0,0,1,192,76Z"/></svg>
<span class="f6 ml3 pr2 display-300">Instagram</span>
</a>
<a
rel="me"
class="link white-90 bg-transparent hover-green inline-flex items-center ma2 tc br2 pa2"
href="https://github.com/juliecogley"
title="GitHub"
target="_blank"
><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor"><path d="M208,104v8a48,48,0,0,1-48,48H136a32,32,0,0,1,32,32v40H104V192a32,32,0,0,1,32-32H112a48,48,0,0,1-48-48v-8a49.28,49.28,0,0,1,8.51-27.3A51.92,51.92,0,0,1,76,32a52,52,0,0,1,43.83,24h32.34A52,52,0,0,1,196,32a51.92,51.92,0,0,1,3.49,44.7A49.28,49.28,0,0,1,208,104Z" opacity="0.2"/><path d="M208.3,75.68A59.74,59.74,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58,58,0,0,0,208.3,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.76,41.76,0,0,1,200,104Z"/></svg>
<span class="f6 ml3 pr2 display-300">GitHub</span>
</a>
</div>
</footer>
<script>
async function checkHoliday() {
try {
const response = await fetch('/jp_holidays.json');
const holidays = await response.json();
// Debugging: Log the fetched data
console.log('Fetched holidays:', holidays);
const today = new Date().toISOString().split('T')[0];
const todayjp = new Date().toLocaleString('ja-JP',{ year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' });
// const todaytest = "2025-02-11";
const holidayName = holidays[today];
const holidayElement = document.getElementById('holiday');
if (holidayName) {
holidayElement.textContent = `${todayjp} (${holidayName})`;
} else {
holidayElement.textContent = `${todayjp}`;
}
} catch (error) {
console.error('Error checking holiday:', error);
document.getElementById('holiday').textContent = 'Error checking holiday';
}
}
checkHoliday();
document.addEventListener('DOMContentLoaded', () => {
const currentYear = new Date().getFullYear();
document.getElementById('copyright-year').textContent = currentYear;
});
</script>
<script>
</script>