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 是圣诞节项目,想当做某种礼物送给自己,后来拖延成了跨年项目,再最后,要变成新年项目了……
总之,向您送出诚挚的圣诞祝福。
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