+ 添加文章 登录
Vibe coding 初体验

Vibe coding 初体验

今天第一次尝试了 Vibe coding,效果还不错。

我本以为它应该会出很多错误,然后我需要像古法编程那样手动命令 AI 修复各种奇形怪状的错误。但实际上 AI 的表现还不错。

我最开始用的是 deepseek-chat,也就是 deepseek-v4-flash,效果堪忧,甚至进了诡异的死循环。后来改用了 deepseek-v4-pro,几乎没有任何问题了。

不感慨是不可能的。倒不是我写不出这些代码,也不是它的效率有高到多么不可思议,而是它的知识面广度是人类达不到的。

比如我,对后端还算掌握一点,但对前端几乎一窍不通,更不要说 UI 设计。但 AI 什么都能做。

在一些指定的领域,人类的丰富经验还能坚持一段时间,但很快也会沦陷。

分享一些图。 af116ba8017298860fe846dfecd14c4e.jpg 8bec11831c6c1440d09fa58e9f1ba923.jpg 4421fa5148e971481204cf3a2e008df3.jpg 105450b2c867d5c8f0798f709c476f46.jpg ca696942581b7a85a1e879d131f3328a.jpg cca8ddc4769e81bfdf96a12553d5c431.jpg d5e1fe6827067d7c377af479ba45e68e.jpg d025338e5d8ee5c2509ede6737c99179.jpg f50663fdeca6f9a564934ad6d60a8f95.jpg

阅读全文 →

NOI Linux 虚拟机使用方法

NOI Linux 虚拟机使用方法

作者:ryp

山东提供的是 Windows + NOI Linux 虚拟机。使用 Linux 主要是为了测试编译、时间与内存限制。

传输文件

首先打开终端。按 Super 键(Windows 键)打开搜索框,搜索 terminal 并运行,打开的是一个深紫色背景窗口。

把文件复制到主文件夹,类比 Windows 中的用户目录。在终端中,可以用 ls 命令查看当前文件夹内有哪些文件,检查代码是否复制错了地方。

我在我的工作目录下输入 ls,会得到类似这样的信息:

蓝色的是目录、绿色的是可执行文件,白色的是普通文件。因为我的系统是日用的,所以和考场中有的文件夹不同。一般的,看到有 DocumentsDesktop,或者 文档桌面 等文件夹,就是主目录。

打开终端

  • 方法一 在文件夹上单击右键选择open in terminal
  • ctr+alt+t打开终端,或者图标打开终端,使用cd命令,例如cd \lxn\a

编译源代码

要编译 a.cpp ,可以输入命令:

g++ a.cpp -o a -Wall -Wextra -std=c++14 -O2 -g

其中,g++ 是必须的;a.cpp 是文件名,可以更改;-o a 是指定可执行文件名,Linux 下的可执行文件是不带后缀名的;-Wall -Wextra 是打开所有警告;-std=c++14 是指定标准;-O2 是打开优化,可以删掉;-g 是打开调试符号,不会使用调试器的可以忽略。

运行测试

编译后,可以用 ls 命令查看是否多出来了 a 文件,即指定的可执行文件名。随后,使用 ./a 命令可以运行这个程序。

以 A + B 为例。我这里的源代码名为 c.cpp,我希望它编译成 c。使用如下命令并运行、输入,得到期望输出:

如果运行编译命令后出现额外信息,是编译错误或者警告,具体和 Dev C++ 下栏中显示的错误相同。比如我将 cin >> a >> b 误写作 cin >> a >> c,会得到:

我们看看 RE 会怎么样。如下图:

我们故意 RE。

Segmentation fault,或者 段错误,是内存访问越界,或者 STL 容器的使用出错。删掉 cout << q[0] << '\n',看看除零:

会显示 Floating point exception,或 浮点错误 等。有的 STL 错误还会附带 STL 的错误信息,这点和 Windows 是大体一致的。

测试用时

测试程序用时,可以用 time 或者 /bin/time 命令,后者显示的更多,不会的可以只用前者。具体的,使用 time ./a 命令运行并测速,其他的和不测速时一样。由于用键盘输入的时间计入总时,所以最好使用文件输入。

我们以测速 ./c 为例。这里我用了文件输入输出。

这里我测试了两次,分别是同一份源代码,O2 与不开启 O2 的速度。测评时间是 user 行后面的。这里是 0.104s(O2)与 0.258s(无优化)。

测试内存

内存分为静态内存和动态的。静态的是直接开的全局数组、变量、还有代码本身的长度。动态的如 vector、栈等 STL 容器。

静态内存可以用 size 命令测试。

找到输出的 dec,也就是倒数第三个,6408903,就是静态内存占用,单位是字节。除以 1048576 得到以 MB 为单位的静态内存。

动态内存不好直接测试,但是可以通过限制总内存使用量来判断是否超过内存限制。具体命令是:ulimit -v X,其中 X 是内存限制,单位是 KB。或者,可以使用 ulimit -v $((X * 1024)),X 同样是内存限制,但单位是 MB。记不住可以计算器换算后用前者。

以下面程序为例。

笔算可知内存占用是大概是 380MB。我们把内存放到 256MB:

ulimit 命令前,执行是正常的。执行 ulimit 命令后,我们发现出现 RE。这是因为 MLE 了。

注意内存限制如果过小,会导致终端的正常任务无法执行。这时打开一个新终端即可。

阅读全文 →

WyOJ 与洛谷

我现在已经基本摸清了洛谷的前后端套路。我们可以直接在 WyOJ 交洛谷的题目了。

具体做法是:

  • 新增一个 /rp/{pid} 的路由,专门给远程题目(Remote Problem,非常好的缩写)使用

  • /rp/{pid} 是有缓存的。缓存过的题目(题面)直接渲染,没有缓存的放入队列中等待缓存,前端自动定时刷新。

  • /rp/{pid} 模拟传统的 /problem/{pid},可以提交题目,但是需要先绑定洛谷账号(uid 与 clientid)。

  • 我觉得远程提交列表还是和本地提交列表分开比较好。那就用一个 /rs/{rid},并放入队列中,等待定期爬取。

  • 除了爬取 /record/{rid},我们还可以直接爬 /record/list?uid={uid},主动观察用户完成了什么题目。

  • 博客现在已经爬了,但是没有做定期更新。之后干脆直接把动态也爬过来,和 WyOJ 未来可能做的动态系统一融合。

  • 这样一搞机房甚至可以直接白名单 WyOJ 了。机房的学弟学妹可不要怪我封了你们颓的路。

阅读全文 →

WyOJ 的下一步

我打算把 WyOJ 设计成可以给大家进行自习的系统。自习是很重要的,也占据了大部分 OIer 的大部分在役时光。所以如何利用好自习时间是很重要的。

另外,我们也需要给教练提供一个可用于训练的平台。

具体地,我打算做一个类似 Duel 但超越 Duel 的东西。传统的 Duel 是随机题目,并且双人。我们可以做多人,并且根据 AI 以及推荐算法来精准推荐一些适合这些选手的题目。我们可以根据每个人擅长的题目,推荐每个人的舒适区各一道或者更少,以此让每个人不至于无题可做的同时,可以做一些自己不一定很擅长的题目。

另外,我们可以根据每次 Duel 的结果,来更新每一个人的面孔。Duel 是比普通做题记录更珍贵的资源,因为在 Duel 中我们可以知道每个人做每道题的时间、尝试次数等等参数。

我们怎么实现呢?

首先要实现一个远端评测系统。也即,利用 HK 的云服务器将提交请求转发到洛谷,并跟踪结果。另外我们可以利用 HK 的服务器爬取题解并在本地用自己的显卡来进行分析。

没有更多难写的东西。

等到大周以及清明尽量实现一下。我觉得没有那么难。

具体实现:

相似题目推荐

相似题目推荐是基本中的基本。因为这个玩意需要一定算力,因此把他做成异步的,后面用一个 FastAPI,用 frp 之类的反代到一个子域名。

需要实现什么功能呢?

  • 给定用户,根据他通过的题目,进行匹配,得到相似题目,并按照难度召回

  • 给定关键词,根据关键词匹配出相似题目,并按难度筛选或者召回

然后就是前端。前端可以做在首页,这样比较帅气。按一个按钮就自动搜索相似题目。

远端题库

如前。可以用 HK 的服务器甚至是集群,用个 Redis 或者之类的简单队列维护一下,细节比较多,尤其是和 UOJ 那堆写的没法说好的评测系统结合的时候应该会不怎么舒服。最简单的方式是,提交到数据库,然后本地再跑一个消费者推送到远端的 Redis。

Duel

这个没那么难写,但是应该没法融合到原来的比赛架构里头,这玩意儿简直是屎山。最好是新开一个类似比赛的页面。

-- upd 20260407

清明摆了,没有怎么写。

另外我还需要一定的时间来更深地研究一下深度学习还有推荐系统那套架构。现在写,只能做出点儿小学生 demo 来。聊胜于无。

阅读全文 →