Hello HDU!

Author Avatar
Jimmy Zhang Sep 15, 2017
  • Read this article on other devices

前言

前几天,看到了 ice1000 同学的一篇博文两年,能带来什么,令我也感触颇多。我不禁格外(发自内心地)对他感到崇敬。两年,他带着他的热爱达到了同龄人难以想象的高度。这里我衷心祝愿他,更相信他在未来一定能取得惊人的成就。

但是反省自己,我却不禁感到难以启齿的羞愧……

有时我却感觉,我一直以来都是幸运的。

或许,我算是很早就接触电脑的人了吧。

三岁时,我便拥有了一台笔记本。当时我显然不懂什么硬件配置,只依稀记得那个电脑是东芝的。当时那台笔记本没有自带 modem,需要上网时还要插入一个 ExpressCard 的 Modem。不过当时我用这个电脑主要是学英语,所以接触互联网少之又少。令我印象最深的便是当时不懂桌面壁纸怎么换,但是自己乱点了一个属性出来把我高兴地手舞足蹈,更点燃了自己对探索计算机这个有趣玩意儿的热情。从那天以后的几个月里我每天都喜欢到百度上搜一些乱七八糟的壁纸——一天一换。

当我小学二年级左右时,那台电脑莫名其妙地坏掉啦(当然我也不懂是怎么坏的),于是我爸便在他的电脑里划了一个标准账户过来给我用。标准账户——在我当时看来就是那种连软件都没权限装的鸡肋账户,自然是把我用的磨皮擦痒。可惜,我为管理员权限的坚持不懈斗争却让系统成了无辜的牺牲品。在重装一遍系统并且暴打我一顿后,我爸意识到不能再让这个小兔崽子用他的宝贝电脑了,便从我外婆那里翻了一台 98 年的台式电脑给我…… 于是三年级时,我再一次拥有了自己的电脑。

至于那台电脑的配置嘛…… 奔腾III和至多 512MB 内存便是我所能记忆的内容了。当时我爸从电脑城淘了一张番茄花园 XP 的光盘甩给我,让我自己把电脑自带的 Windows 98 升级到 Windows XP。在我人生中第一次,我学会了安装系统。可能是狗改不了吃屎历史总是倾向于重演吧,就像我当年第一次发现换壁纸的方法时一样,我疯狂地热爱上了重装系统。这一装就装到了 Windows Vista。

虽说大家都公认 Windows Vista 是一款失败至极的操作系统,但它却是我迄今为止最喜欢的 Windows 版本,没有之一(我第二喜欢的就是 Windows 8,天哪我这口味是不是有点非主流……)。自然的是,杂牌显卡显然是没法带动高贵的 Aero 特效的。那时,我平生第一次有了心事…… 为什么我装的 Vista 跟网上的截图不一样?是不是我装错了?于是试了一次又一次。是不是我下载了假 Vista?于是又重新下了一次又一次装了一次又一次,可是不论是网上下载的 Vista 还是我爸从电脑城淘回来的龙卷风 Vista 都长得那么丑陋…… 经历了大量的失败后,得知真相的我万分沮丧,但却又第一次有了硬件了概念。

在我爸的一次生日宴会上,我爸的一位要好的朋友赠送他一张七彩虹 ATI Radeon HD 2400 PRO。我名正言顺地占领了那张显卡。可是,拆开机箱的我却被深深的震撼了…… 这台 98 年的老黄牛竟然连 PCI Express 插槽都!没!有!

我爸看我可怜,于是变为我重新组装了一台台式机。2008年的夏季被永远地留在了我最美好的记忆里。这台电脑至今仍在工作,而具体的配置对当年的我来说简直梦幻:

GIGABYTE GA-EP45-DS3L (rev 1.1)

Intel Core 2 Duo E7200

2 * 2GB KINGSTON DDR2 800MHz

ATI Radeon HD 2400 PRO

160GB HITACHI SATA 7200rpm * 2

1024 * 768 AOC Monitor

第一次亲身体验 Aero 特效让我惊喜地上蹿下跳,尖叫连连。我惊异于软件能带给人们的乐趣,并更加热爱与珍惜我眼前这一高级无比的“玩具”。

之前乱搞电脑的经历让我染上了喜欢乱装系统的恶习。

很快,安装 Windows 系统以及不能满足我了。我开始思考这世界上难道除了 Windows 就没有其它的系统了吗?于是,在 2008 年末,我结实了 Mac OS X 和 Ubuntu。

Ubuntu 这边倒没什么好说的,记得当时我第一次安装的版本是 Ubuntu 8.10。那时候 Ubuntu 还默认采用着 Gnome 2 桌面环境,默认壁纸一向是 Ubuntu 特有的狗屎黄。当时恰逢 QQ for Linux 发布不久(强烈谴责腾讯弃坑!!!),所以也没有怎么捣鼓 wine。

虽说 Ubuntu 原生特效全开后拖动窗口会有一种抹布效果,但是被 Vista 的绚丽特效娇惯的我怎么能够适应 Ubuntu 这么朴素的界面!于是我当时就下了一个 Compiz 来改特效,比如什么切换桌面的3D效果啊之类的。总的来说,这段经历让我对 Linux 的权限管理系统以及 apt 包管理有了初步的了解。

玩到 9.04 后终于玩腻了,于是我就把 Ubuntu 所在的盘格了……格了……格……了…… 下一次与Ubuntu 重逢都已是 12.04了。

原因倒是挺简单:我疯狂地迷恋上了Hackintosh(黑苹果)。

众所周知,Mac OS X 是只能在 Mac 上运行的,普通 PC 是无法直接运行 Mac OS X 的。不过还好乔帮主在 2005 年一气之下把 PowerPC 甩了改跟 Intel 暖昧了起来,这自然就给采用 Intel 处理器的 PC 一次吃上苹果的机会。

不过,Mac 的固件是专门定制的,并没有采用 PC 间流行的 BIOS,而是基于一个全新并且在当时极其小众的标准—— EFI。同时,在 Mac OS X 启动时也会检验硬件平台是否是苹果家的,否则它会拒绝启动。为了将傲娇的 Mac OS X 好好调教一番,国外出现了大神云集的 Hackintosh 社区(又称 osx86),为 PC 开发了可用于引导并欺骗 Mac OS X 的一系列引导器和驱动,使得 PC 上安装 Mac OS X 成为了可能。

历史总是相似的,当得知我想安装 Mac OS X 后我爸就从电脑城那里淘回了一张 Jas OSx86 Tiger 10.4.8 的光盘(估计让 Jas 他们知道了这玩意儿在中国都可以刻盘拿去卖会把他们气死)。虽然在那时 10.5 Leopard 早已发布,但我爸说他在电脑城没有找到 10.5 的光盘 :haha: ,所以就只好先上 10.4.8 玩儿咯。

在那时安装黑苹果其实比现在要麻烦许多,因为原生的内核并不能直接在 PC 上顺利运行(人家会 panic 的~),所以需要另外安装第三方大神魔改过的内核啦。不过当时我也是什么都不懂,虽然光盘里有很多内核可选但我只是乱选,不能启动就重来。在那个时候,我爸担心我熬夜,每当到了该睡觉的点时他就会放下手头的工作帮我来搞黑苹果。又是,当我在半夜听到书房里传来的一声开机的蜂鸣声时,心中充盈的是满满的感动。经历了无数四国后(对,在那个时候还是四国,后面才变成五国的),最后捣鼓来捣鼓去终于启动了(还好技嘉主板对黑苹果兼容性好)……

Chameleon, FakeSMC, OpenHaltRestart, dsdt…这些字样成为了我最珍贵的回忆。

在成功驱动声卡和网卡后,我沉醉在了 Tiger 的美中。彼时,10.4.11早已发布,而我还在 10.4.8。直接更新是要挂掉的,原因就是前面所说内核不修改无法正常运行。所以在那时升级系统是极其麻烦的。不过最终我们还是解决了问题,成功地升上了 10.4.11。

然后我决定安装 10.5 Leopard。

去网上下载的第一个 Hackintosh 镜像是 Kalyway 10.5.2,安装过程相对顺利。在驱动了网卡和声卡之后便只剩下显卡了。由于 Leopard 引入了顶栏半透明,所以若没有开启显卡加速一眼就可以看出来。不过手上这款 HD 2400 PRO 死活驱动不了(各种花屏)。于是我爸英明地换了 8800GT,却又不知什么原因最后又换成了 盈通 ATI Radeon HD 3850。最后显卡成功驱动了。一路上经历了 iATKOS Leopard 10.5.4, iDeneb Leopard 10.5.5,最终到 iPC Leopard 10.5.6。我深深地爱上了黑苹果带来的浓浓的装逼成就感。最终不满足于使用修改版系统的我史上第一次成功启动了原版的 Leopard。这是我黑苹果历程中的第一个黄金期。

可是好景不长。

在 Snow Leopard 发布后,3850 的驱动并没有相应的 64 位版本(因为 3850 的驱动原理是强上 MacPro 2,1 的 3870 驱动,而 MacPro 2,1 搭载的 EFI 是 32 位的),因此我死活无法驱动这张显卡。最终,经历了一年的尝试后,我依依惜别了 Snow Leopard 并“滚回” Leopard(现在想想来我真傻,早知道就 -ia32 强上 32 位模式试试看了)。最后,我放弃了折腾黑苹果,格掉了黑苹果的硬盘并改邪归正。

可是,狗改不了吃屎,上初二那年终于软磨硬泡获得了一张 XFX AMD Radeon HD 6870 的“免驱“显卡。

然后我兴奋冲冲地再次投入了Lion 10.7.2的怀抱,结果还没投入怀抱就被 Chameleon 狠狠地坑了一笔:Chameleon 官方版本无法加载 GUI,而且 GraphicEnabler = Yes 也不起任何作用。最后只好关掉了 Chameleon 的 GUI 并改用 dsdt 驱动显卡。就这样,一直玩到了 Mountain Lion 10.8.4。

然后我就开始了初三生活,我的这台电脑也被暂时遗留在了原来的住处……

在初三寒假时我搬入了新居,顺带也将原电脑的配置进行了一些升级:

GIGABYTE Z87MX-D3H

Intel Core i5 4430

2 * 4GB KINGSTON 1666MHz
1TB WD BLUE 7200rpm

至于显卡嘛……我又不怎么运行 graphic-demanding 的程序所以就懒得升级啦。在升级后我又再次狗改不了吃屎投入了 10.9 Mavericks 的怀抱。在这个时间点,搭建黑苹果平台的难度已经远远低于之前,而且完美的程度也越来越高(原来都少有人去折腾电源管理之类的)。这次采用了 Clover 做为引导器,最后一路走到了现在,10.13 High Sierra。

相比之下,虽然我很早就开始接触电脑,但是真正开始编程的时间太晚太晚了。

虽然在五升六的暑假曾经在青少年宫水过一点 C语言初步 的课外班,但是也就只学了点基础语法,连结构体都没有学,更别谈指针了。然后就是六年级在嘉祥的时候曾经计算机老师在我们班选了几个人来培训信息竞赛,每天中午牺牲午休时间做一点小培训。但一个月后却莫名其妙地取消了,一个月间我也就只学会了 Pascal 的那点基本语法。

然后初中来到了成都外国语学校,初中信息竞赛在那时就是 tan90°(不过从我们下一届开始就有了啊……完美错过了啊……)。所以初中三年我的编程水平一直在下降(因为就没怎么写过东西,同时花了不少时间日黑苹果)。

成功直升到了成都外国语学校的高中后,军训时听说了竟然还有信息竞赛这玩意儿,就毫不犹豫地报了名。然而参加了竞赛集训后才发现,成外原先的那位竞赛教练跑路了……也就是说成外根本就没有专业的教练,只有一个姓张的水王。不过还好,水王喜欢请电子科大的在校大学生来给我们讲算法…… 然而学生显然没有老师那么负责,感觉讲的内容比较浅略而且还很难以理解,做题后讲题也讲得比较简略。经常听的我一脸懵逼,怀疑人生。但是,自己选择的路我还是选择跪着走下去,在比赛前我还是花了大量的时间整理笔记和进行题目练习,最终成功在 NOIP 2015 因为没看清 d1t2 的数据范围(上限少写一个9)而滚粗(在得知真相后,我哭的很伤心【捂脸】)。

不过,在学习信息竞赛的过程中也有幸认识了 fstqwq,HenryPig,ice1000,t123yh 等各大神犇。我一次又一次感受到了自己的渺小,并且学会了谦虚与谨慎。

被迫滚粗的我十分难过,滑落到了人生的最低谷。在学业和竞赛的双双翻车下,外加上家庭内部的一些事情让我无所适从。在人生中的第一次,我感觉我仿佛置身于浓雾之中,不知路在何方。一方面,我不甘心更不舍放弃我曾热爱并投入无数日夜的信息竞赛,另一方面我也深知竞赛和学业不可兼得。这种思想的存在让我最终走上了为学校搭建 OJ 的不归路。

当时还没有 UOJ,LibreOJ 这些既好看又好用的开源 OJ,GitHub 上最有名的开源 OJ 也就 HustOJ 了。不过 HustOJ 毕竟是面向 ICPC 而非 NOI 的,所以最后我们在 GitHub 里翻出了巴蜀中学的 Bashu Online Judge(后文简称 bsoj),并成功将其部署到了信息竞赛教室里的一台电脑上。

还记得我曾信誓旦旦地跟某好友讲,OJ 部署完后就不用管它了。而事实则是我深深地陷入了开发 OJ 这个大坑中。通过 bsoj 的源代码我学习到了 PHP 的基本语法以及 HTML, CSS, JavaScript 相关的基本知识。然后在此基础上我对 bsoj 进行了大肆魔改,并最终在此基础上创建了应一个开源项目 CWOJ (成外OJ, 现已改名 Codgic)。开源项目被托管在了 GitHub 上。成外信息竞赛的小伙伴们是 CWOJ 的第一批用户,我也衷心地感谢他们。我一点一点地为 CWOJ 添加功能,一年间 CWOJ 相继迎来了界面上的若干优化、PHP 7 支持、夜间模式、密码重置、全新代码编辑器、全新的权限管理系统以及最最重要的比赛功能。随着 CWOJ 逐渐不再依赖学校提供的资源(水王当初承诺给的服务器半年后才到我手上,而且还 TM 没公网 IP),2016年底用户投票后我们决定将其名称改为 Codgic, 也就是 Coding Magic 的简称。代码曾为我带来了太多的欢乐,更带来过太多的痛楚。在越过了这些念头后,我却依然为之痴狂,不仅仅因为其本身的魅力,更为其创造万物的神奇魔力。

我才不会告诉你其实 Codgic 最早是由 Coder + Mogician 想出来的呢,多亏了 NOIP 2016。

我曾深深引以为傲。

然而现在我不这么觉得了。

t123yh 指出,没有 composer 包管理, 完全没有遵循 OOP、代码风格混乱不堪的 CWOJ 是极其不适合长久维护的。我们曾经想依照旧代码将项目现代化,然而庞大的工作量打破了我们的这一幻想。勇敢地,我决定放弃维护老版 Codgic,并将其推倒完全重写。新的 Codgic 将会是前后端分离的,将会采用 TypeScript,API 部分将会是无状态的…… 在将来的某一天或许会与你见面 (也或许不会)

我自认为我在高三还是很努力的,虽然我还可以更努力一点。

高二时我曾经因为来自竞赛的打击迷茫过,甚至不止一次慎重考虑过 suicide,但令我自豪的是我走出来了。

终于,我学会了乐观的看待身边的事物,逐渐尝试着在真真假假中保持清醒,努力用向上的态度面对一次又一次的不如意。我学会了在平和之时心存猛虎,临危之际细嗅蔷薇;更学会了在困顿之时惊坐起,兴奋之际静刷题。面对问题诚然是个痛苦无比的过程,尤其是在前期已经回避了太多的基础上。但是很高兴,我最终学会了去面对他们,并用自己的思维和汗水去解决他们。总的来说,高三一年我收获了很多,也进步了很多。

Zootopia 和 Moana 两部电影撑起了我高三的精神支柱。Judy Hopps 为梦想而不顾自身劣势与外部歧视而不懈奋斗的身影深深地打动了我。从她眼里,我看到了曾经的自己,但是曾经的自己却没有她的那份乐观与拼搏。这令我深深地为自己感到羞愧。或许这也是 Zootopia 如此受到欢迎的原因吧,everyone has a little Judy inside. 至今, Try Everything 仍在我的个人歌单的顶端。我总是忘不了那几句曾让我在深夜里哭得像个傻子的歌词:

I messed up tonight
I lost another fight
Lost to myself but I'll just start again

I keep falling down
I keep on hitting the ground
I always get up now to see what's next

Birds don't just fly they fall down and get up
Nobody learns without getting it wrong

I won't give up no I won't give in
Till I reach the end then I'll start again
No I won't leave, I wanna try everything
I wanna try even though I could fail

每当身处困境是,我总喜欢哼哼这首歌,心中仿佛又充满了无尽的力量。

但这依然没能阻止我高考翻车。

尽管不甘的呐喊在我心中波涛汹涌,我还是平静地面对了这一事实——面对生活中的每一个问题正式高三给我带来的教诲。在认真地思考并对高三一年的得与失进行小结以后,我没有选择复读,反而更期待着早日投入那个令我魂牵梦萦的美梦中美美地睡上一觉。就为了延续高中的那一个 OI 梦,我选择了 HDU,而 ACM 则是唯一的一个原因。高考后不久,我就带上我的电脑,拥抱着一天天在省图书馆度过的日子。

肩上背着背包,指尖牵着行李,我来到了 HDU。这里不是天堂,但也还好,这里更不是地狱。脚尖亲吻校园大地的那一刻,我问自己,这是你想要的结果吗?显然不是。但是,我还行走着,向广袤的远方看去,道阻路且长。从第一次接触电脑到现在,十五年间,一切都变了,彻彻底底地变了。我不再是那个乱搞系统而孩童,更不再是那个醉心黑苹果的少年。他们都只是过去,只是我的一部分,仅存在于记忆和内心的那一部分。走进校园,纵使百感交集,嘴角却只留下一句轻轻的“你好”。

或许这就是成熟吧,成熟的人总是能清晰地认识到自己的处境和水平。我与一流的平台失之交臂,而在技术水平上更能被 00 后们联合吊打,我的梦想依然在遥远的远方。我需要付出加倍的汗水,笑面更多的困难才能达到那闪耀着金光的彼岸。

哦,梦想总是那么诱人,而现实却总是那么残酷。

愿当汪洋中的浪花,纵使生命永远定格在礁岩之上,也不放弃向前的期翼与勇气。

This blog is under a CC BY-NC-SA 4.0 Unported License.
Link to this article: https://blog.codgician.pw/2017/09/15/hello-hdu/