How Does eza Know I'm in the Terminal
继续阅读验证您是人类才能进入 AI 生成网站
几年前的网站通过大量网络请求及复杂臃肿的 UI 毁了您的网上冲浪体验,而现在的网站甚至要在内容上折磨您。
近期给博客实现的有趣功能
近一个月的博客施工状况,一些好看有趣的新功能。
重定向旧博客网站
旧的博客托管在 Vercel 上,速度和便利性都不错,尤其对我这种一丁点钱都不愿付的用户来说。
A Bindgen Inside Bindings for a Bindgen Inside Bindings for a Bindgen
绑定生成器的绑定里的绑定生成器的绑定里的绑定生成器
卡拉彼丘 hpatchz 的 -c 选项
上次的分析中,我发现卡拉彼丘官方启动器使用自定义的 HDiffPatch 程序,拥有神秘的 -c 选项。它修改了哪些代码?到底有没有作用?会不会给解决方案带来灵感?我已经等不及了。
自动化部署 Org 博客
自动化脚本节省的时间可以用来编写自动化脚本。
卡拉彼丘官方启动器是一个小型黑洞
卡拉彼丘(Calabiyau)是一款令人失望的游戏——从各种方面来说。或许您有不同的意见,好在这次我不必跟您争论游戏性。
当您使用官方启动器更新游戏时,就算只下载了几十 MB 到几百 MB 的更新包,依然会在补丁时吃掉磁盘 20G+ 的空间。
它要么是补丁方案有问题;要么是补丁过程出了 Bug;不然只能是安装了某种小型黑洞,把在 2026 年本就岌岌可危的储存空间吞噬殆尽,最终毁灭一切(与 UE 配合得很好)。
将博客迁移到 Org-mode
当你不知道写什么时,就写你如何写作的。一定有哪一天,我也要分享“我为什么写作”了。
Saya Lang: Loop Break Value
给 Saya 实现些新特性,让 loop { ... } 表达式可以通过 break my_value; 表达式返回一个值。
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
平平无奇?看看这个:
87_ = sys.stdin > ( 88 pipe 89 | foreach(parse_csv_line) 90 | where(X.__len__() > min_length) 91 | where(X[type_idx] == "MOBILE") 92 | where(in_cities, geo_indices=geo_indices, cities=cities) 93 | foreach(lambda x: (x[prefix_idx], int(x[length_idx]))) 94 | foreach(as_args(purrify)) 95 | foreach_do(print) 96)
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