Skip to content
View chenjintang-shrimp's full-sized avatar
🤒
Sick
🤒
Sick
  • Fuzhou, Fujian, China
  • 19:37 (UTC +08:00)

Organizations

@SECTL @ProjectHazelita

Block or report chenjintang-shrimp

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
chenjintang-shrimp/README.md
[    0.000000] ShrimpOS 6.1.0-cjt (cjt@fuzhou) (clang 21.1.0, GNU ld 2.45) #1 SMP PREEMPT_DYNAMIC Tue Aug  5 06:54:25 UTC 2022
[    0.000000] Command line: init=/usr/bin/shrimp root=UUID=fujian-fuzhou quiet splash shell_on_fail
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000003fffffff] usable
[    0.000000] DMI: ShrimpD, BIOS ShrimpD 08/05/2022
[    0.101221] Loading initial ramdisk...
[    9.982443] systemd[1]: Reached target Main User Target.
[    9.983001] systemd[1]: Reached target cjt_shrimp.

<<< Welcome to ShrimpOS 6.1.0 (x86_64) - tty1 >>>

shrimp login: cjt
Password:

[cjt@shrimp ~]$ cat ~/README.md

[[ 陈晋瑭 // chenjintang-shrimp ]]

「火焰般的生命啊,随时可能熄灭。」

福州 · 16 岁高中生 · 前算法竞赛选手 · osu! 重度玩家 · 啥都知道但啥都不明白

GitHub X Blog

Followers Stars Contributions Profile Views

C/C++ · C# · Python · Rust · TypeScript · Typst · PowerShell


写代码这件事,最开始只是想让自己少干点重复的活。

后来发现要么自己去适应别人的工具,要么把工具改成自己顺手的形状。我大部分时间在做第二件事——把一个具体的小麻烦拆开,看到底是哪一层在碍事,然后往下钻一层,再钻一层,直到能自己决定它长什么样。

所以这里的仓库挺杂的:有人排座位排到崩溃,于是有了约束求解器;有还原软件老是吃掉系统改动,于是有了直接对磁盘下手的内核层工具;有台根本不存在的 16 位机器,于是我把它的 CPU、汇编器和 BASIC 解释器都写出来了。

早年那个「喜欢贡献但不太会创造」的我,现在看来说早了(x


[cjt@shrimp ~]$ ./contributions --last-year
GitHub contributions heatmap for the last year

这张图不走第三方图表服务,由 scripts/gen-heatmap.py 直接读 GitHub GraphQL 的 contribution calendar 画出来。


Streak stats Most used languages

[cjt@shrimp ~]$ ls -l /etc/profiles/per-user/bin
-rwxr-xr-x 1 cjt cjt ■■■  c / c++
-rwxr-xr-x 1 cjt cjt ■■■  c#
-rwxr-xr-x 1 cjt cjt ■■■  python
-rwxr-xr-x 1 cjt cjt ■■■  rust
-rwxr-xr-x 1 cjt cjt ■■■  typescript / javascript
-rwxr-xr-x 1 cjt cjt ■■■  assembly / basic (自产的)
-rw-r--r-- 1 cjt cjt ■■■  typst
-rwxr-xr-x 1 cjt cjt ■■■  bash / powershell

-rwxr-xr-x 1 cjt cjt 8.88 osu!
-rwxr-xr-x 1 cjt cjt 540  考试

日常环境是 Windows 11,加一台 Kubuntu,WSL 里再压着 Arch 和 Kali。哪个能跑就用哪个。

顺带一提,就算在 Linux 上我也是 pwsh 照用不误——不太接受反驳呢。


[cjt@shrimp ~]$ sudo lshw -short
H/W path    Device      Class       Description
===============================================
/1/0/0      yoga3pro    laptop      Lenovo Yoga 3 Pro (8GB / 256GB)
/1/1/0      se1         smartphone  Apple iPhone SE 1st gen (64GB)
/1/2/0      ip7         smartphone  Apple iPhone 7 (128GB)
/1/3/0      p30pro      smartphone  HUAWEI P30 Pro Sky-Blue (128GB)
/1/4/0      iwe         laptop      Lenovo 小新 14 Air IWE (i5 / 8GB / 256GB)
/1/5/0      ipad8       tablet      Apple iPad 8th gen (128GB)
/1/6/0      mbp16       laptop      MacBook Pro 16" 2019 (i9 / 32GB / 2TB / Touch Bar)
/1/7/0      p40prop     smartphone  HUAWEI P40 Pro+ 5G Black (512GB)
/1/8/0      are         laptop      Lenovo 小新 13 Pro ARE (R7 / 16GB / 512GB)
/1/9/0      mate60pro   smartphone  HUAWEI Mate 60 Pro 5G White (1TB)
/1/10/0     pura70prop  smartphone  HUAWEI Pura 70 Pro+ 5G White (1TB)
/1/11/0     fx607jvr    laptop      ASUS 天选 5 Pro FX607JVR Green (i9 / RTX 4060 / 32GB / 2TB)
/1/12/0     mi15ultra   smartphone  Xiaomi 15 Ultra 5G White (512GB)

老机器一台台留下来,是因为总有一台正好能跑通上一个跑不通的东西。


[cjt@shrimp ~]$ ls -l ~/work

主要在做的东西

🧊 IceMelt · C++

把冰点、PowerShadow 这类还原软件拆开。

WinDisk 是内核驱动,直接构造 SCSI 请求打到磁盘 miniport——绕开文件系统,也绕开还原软件挂在上面那层过滤驱动。KDU 负责关掉驱动签名强制,让没有签名的 WinDisk 能加载,而且只在装载真被 577 拒绝的时候才用得上(判据是装载返回码,不是任何查询接口的读数)。

两者配合,在 NTFS 层面摘掉还原软件留下的注册表痕迹、换掉 SYSTEM hive,然后把机器交回给你重启。不替换任何驱动文件。

有意思的部分不在「绕过」,而在每一步都得可验证:装载返回码、hive 结构校验与校验和、裸盘写入前后的读回比对,少一步你就不知道到底成没成。

🪑 PokeSeats 戳座 · C#

排座位在条件一多的时候,手工排就是纯折磨:近视的要往前调,动了一个又牵连好几个,最后效果还保证不了。

所以把它写成约束求解:硬性规则(隔几个人、跟谁不能坐、固定坐哪)当硬约束,身高梯度、各排均衡这类诉求按优先级逐层优化——每一层都证明了最优才往下走,最后拿到全局最优解。条件互相打架、真的解不出来时,会告诉你具体是哪几条规则在冲突。

求解默认走 OR-Tools 的 CP-SAT;目标是居中或两侧分布这类距离函数时交给 Z3,无解诊断也靠它的 UNSAT Core。几十人的教室基本是秒出。求解核心和 ImGui 桌面端之间用插件契约隔开,两边可以各自长。

🎮 g0v0 · C#

osu! 的私人服务器那一侧。

在 g0v0-server 里我主要碰的是谱面用户标签、谱面打分接口、多人房间接口、游戏模式列表 API,以及用户信息接口的返回结构;顺带把中文用户名和 Unicode mention 一路修通——正则里一个 \w 就能让一整个中文社区的人 @ 不到彼此。

还往 GooGuTeam/rosu-pp 里合了 Relax / Autopilot 的 pp 算法,让服务端算出来的成绩和玩家体感对得上。

🖥️ Open16A · C#

一套从零到能跑游戏的复古计算机:自研 16-bit 指令集、8 个通用寄存器、1 MiB 物理内存与分页映射、三种显示模式的视频设备、键盘与中断控制器,再加上汇编器、静态链接器、跑在 guest 里的 BASIC 解释器、LSP 语言服务器和 VS Code / Neovim 插件。

扩展卡是受信任的 .NET 插件,各自独立的 AssemblyLoadContext,用 1 KiB mailbox 快照做宿主与卡之间的协议——磁盘卡、嵌入汇编协处理器卡、回环卡都是这么挂上去的。

写它最大的收获不是模拟器本身,而是你一旦要同时扮演 CPU、链接器和编译器,就会明白那些平时被称作「约定」的东西到底在保护什么。


[cjt@shrimp ~]$ history | grep 游戏
2015  狂野飙车 8
2016  狂野飙车 8
2017  Minecraft(网易)
2018  Minecraft(网易)
2019  Minecraft(网易)
2020  Minecraft (Java)
2021  Minecraft (Java)
2022  Minecraft (Java)
2023  Phigros
2024  Phigros
2025  osu!

十年就换了四个游戏,然后停在了 osu!。


提交都散在哪些仓库

以下是按 GitHub 提交搜索口径数出来的(这个口径会漏掉用别的邮箱推的提交,实际只会更多):

仓库 提交 我在做什么
SECTL/SecRandom 139 PySide6 迁移、延迟加载、语言包拆分、uv + CI 收尾
chenjintang-shrimp/redfox-bot 102 跨 Discord / QQ 的 osu! bot
GooGuTeam/g0v0-server 93 谱面标签、打分、多人房间、API 与中文支持
SECTL/PokeSeats 87 约束求解管线与桌面端
FireflyOpenSourceLab/Open16A 80 自研 ISA、模拟器、工具链
chenjintang-shrimp/IceMelt 72 WinDisk 驱动 + KDU 加载链 + hive 改写
Tinadec/TinadecOffice 56 双层编排 runtime 与 invoke-stream
chenjintang-shrimp/SakuraIM-Core 42 多 IM 消息中继核心
SECTL/Points 31 存储引擎(二进制 / CRC / 原子写)、C++26 反射、CMake → xmake
hello8693/SecScoreDB 31 成绩库
LKM-AHZ/LKM-service 16 后端
SECTL/Luminalium2WPS 15 Linux 下绕开 RPC 接 WPS

表里这 12 个仓库一共 764 次提交;把全部公开仓库算上,是 1708 次,散在 30 来个仓库里。剩下那些早年练手的就不展开了。

还有两个小的但挺喜欢的:SecRandom.NewAlgorithm 重写了一套份额欠账均衡的抽取算法,VisionFair.bindings 把它移植成 C++ 引擎 + C ABI 动态库,再镜像出 Python / Rust / TypeScript 三套绑定,靠位级奇偶校验保证四条路径算出同一个数。


[cjt@shrimp ~]$ groups
GooGuTeam(admin)  SECTL  FireflyOpenSourceLab  Tinadec  LKM-AHZ  ProjectHazelita

在这些组织里多半是写代码的那个,偶尔也负责把别人的 PR 从「看着能过」改到「真的能过」。


[cjt@shrimp ~]$ cat /dev/shrimp/motto
火焰般的生命啊,随时可能熄灭。
那就趁还亮着的时候,多写点。

[cjt@shrimp ~]$ _

GitHub · X / Twitter · Blog

If you're reading this at 1,200 characters per minute, I know exactly how you feel.

Popular repositories Loading

  1. IceMelt IceMelt Public

    Bypass Deep Freeze / PowerShadow style restore software via WinDisk (raw SCSI) + KDU (DSE off)

    C++ 14 1

  2. cgui.lib cgui.lib Public

    这是一个跨平台的命令行图形化库,提供了一些简单的控件,可以放置在命令行窗口上。使用c++。

    C++ 7 1

  3. osu-sync osu-sync Public archive

    osu! 谱面同步工具

    C++ 5

  4. redfox-bot redfox-bot Public

    Python 3 1

  5. SecRandom.NewAlgorithm SecRandom.NewAlgorithm Public

    SecRandom 份额欠账均衡抽取算法(GPL-3.0-only):算法库、宿主插件与仿真工具

    C# 3 2

  6. SakuraIM-Core SakuraIM-Core Public

    A bot which tries to bridge many IMs together

    Python 1