Saya Lang: Loop Break Value
给 Saya 实现些新特性,让 loop { ... } 表达式可以通过 break my_value; 表达式返回一个值。
Versu: Agents and Utility AI
这是对交互式故事角色 AI 引擎 Versu 工作原理的简要介绍,主要是代理/角色(Agents)和基于效用的决策系统(Utility-Based Decision-Making)部分。
内容从小组讨论会的会议材料修改而来,材料被 LLM 润色过(修改了分段和措辞,为了“更快更方便阅读”),与以往的博客语气会不太一样。
Versu 没有公开过具体实现,我所有的分析均来自 Richard Evans 和 Emily Short 的论文以及 Emily Short 博客上的零散文章,可能有不少错误。
Hello, Saya Lang
extern fn puts(s: *u8) -> i64; pub fn main() -> i64 { puts(c"Hello, Saya!"); 0 }
我真正意义上的第一个编译型玩具语言,编译到 QBE IL。
语法和关键字与 Rust 差不太多,基于表达式。编译器内部结构参考了 Hare 语言的编译器 harec,一些数据结构设计参考了 rustc。
Saya 是圣诞节项目,想当做某种礼物送给自己,后来拖延成了跨年项目,再最后,要变成新年项目了……
总之,向您送出诚挚的圣诞祝福。
Using Djot instead of Markdown in MkDocs
本文 Markdown 含量为 0.59 ‰,消耗咖啡液和温水共 2000 ml,合计咖啡因约 310 mg。
Functional Pipeline Programming in Python
用 Python 写了个小工具,根据手机号段信息生成 hashcat 掩码。
仓库:github.com/13m0n4de/purrify
平平无奇?看看这个:
_ = sys.stdin > ( pipe | foreach(parse_csv_line) | where(X.__len__() > min_length) | where(X[type_idx] == "MOBILE") | where(in_cities, geo_indices=geo_indices, cities=cities) | foreach(lambda x: (x[prefix_idx], int(x[length_idx]))) | foreach(as_args(purrify)) | foreach_do(print) )
Markdown to PDF with Pandoc and Typst
仓库:github.com/13m0n4de/pandoc-typst-catppuccin
自从团队使用 Obsidian 协作组织文档库以来,需要将 Markdown 转换为 PDF 的情况越来越多。Obsidian 的默认导出不好用,自定义功能太少,被逼无奈使用 Better Export PDF 了一段时间,边距、大纲书签以及页眉页脚等自定义功能不错,但它总是没法跟随我的暗色主题,自定义 CSS 又太过麻烦。
于是,我们写了个新插件。可惜,我们还是继续凑合用着。
直到我们需要批量导出多个 Markdown。
Obsidian 没有给我编写自动化脚本的发挥空间(也许宏可以,但……太恶心了,而且没办法集成到 CI 里)。
能花 6 小时写自动化脚本(然后失败),就绝不花 6 分钟动手完成它。
Refactor My Quiz App
花了几天把 NekoQuiz 完全重构,从 Axum + Yew 到 Axum + Leptos,从 CSR 到 SSR with hydration。
其实在这次重构之前,就已经很少有使用它的机会了,这也许是最后一次大更新。(尽管我不愿意这么想,这样的想法会成为项目被“遗弃”的第一步)
不过至少,现在是个适合总结的时候。
Malware Analysis: PowerGhost
近期应急响应事件中遇到的病毒样本,处置不复杂,但搜罗了一圈发现网上没有特别详尽的病毒分析。
于是开了个新系列 Malware Analysis,我的第一篇病毒分析文章。
病毒分析和应急响应处置在笔记中同步了一份:
CVE Roulette #1: pngcheck
这是 CVE Roulette 系列的第一篇文章。抽到了 CVE-2020-27818,研究着研究着就顺手把 pngcheck 的历史漏洞都看了个遍 :)
Ricing My Arch Linux
花了点时间从 i3 迁移到 Hyprland,终于把凌乱的 Dotfiles 整理好了。
这次除了整理配置文件,还将整体配色方案从 Nord 切换到了 Catppuccin Macchiato,并且统一了包括网站在内的所有主题。
Dotfiles 仓库:github.com/13m0n4de/dotfiles
Coffee and Random Thoughts: Hackergame 2024 ☕
猜猜是谁一周没出门阴暗地打 Hackergame。
今年的题目依旧有难度有意思,题解想写细致一点,加上最近事情很多,估计进度会很慢。
HackerRank in Racket: Part 3
这里是使用 Racket 完成 HackerRank 函数式编程题目的第三章,包含函数关系和几何计算(22 - 26 题)。
HackerRank in Racket: Part 2
这里是使用 Racket 完成 HackerRank 函数式编程题目的第二章,包含数学函数和 Lambda 演算(11 - 21 题)。
HackerRank in Racket: Part 1
这里是使用 Racket 完成 HackerRank 函数式编程题目的第一章,包含基础函数和列表操作(0 - 10 题)。
Wireworld Simulator Using the Raylib: Part2
继续阅读Wireworld Simulator Using the Raylib: Part1
用 Raylib 写个 Wireworld 模拟器,试试自己能不能用 C 语言顺畅地做游戏。
这篇文章是制作过程的详细记录,记录编码、设计的思路和步骤,标题会非常细碎。当作一个 Step by Step 教程也许可以,每个阶段都附了完整代码可以对照。
Bad Apple!! on LemonCore
前段时间写了个操作系统,取名叫 LemonCore,惯例,播放一下 BadApple。
Search Engines in 2024: Will Spaces Still Matter?
小的时候,第一次学会上网搜索内容,人们告诉我:
「把你的中文词语用空格分开」
我记到现在,甚至有点“强迫”。
I Need a Done List, Not a Todo List
笔记本有个 Todo List,记录着许多待办事项。
然后它们就一直待办。
Exploring the Hare Programming Language: Part 1
继续阅读Including C File Over HTTPS
实现了一个有意思的效果,让 C 语言可以从互联网上 #include 头文件。
#define STB_SPRINTF_IMPLEMENTATION #include <https://raw.githubusercontent.com/nothings/stb/master/stb_sprintf.h> // <- look at this #include <stdio.h> int main() { char buffer[20]; // Using functions defined by stb_sprintf.h stbsp_sprintf(buffer, "Hello %s", "NAVI"); puts(buffer); return 0; }
你知道的,4202 年,Everything Over HTTPS(笑)。
- My TinyCC Patch: https://gist.github.com/13m0n4de/84912522cce6db31da069baf1add04f8
- My Chibicc Patch: https://gist.github.com/13m0n4de/f2b4b8e71ce6a93530cbe9e4e45cbe71