本人是来自南信大22级大数据专业的大三学生,从初中起就爱好编程,这次也是人生中第一次参加黑客松,感受颇深。
去年是advx创办的第一届,我有一个学长在那一届去参赛了,还夺得了赛道冠军,当时我就决定今年一定要参加。今年五月份advx报名如期而至,我立马报了名,也顺利的入围获得了参赛席位。
赛前,我时常翻阅比赛的飞书官方频道,里面有许多的组队帖和idea帖。我被参赛选手们普遍的高技术力和高背景震惊了,所以我选择加入了一个中学生的团队,一方面我认为我的水平更适合他们,另一方面我认为中学生的新鲜脑子能提供更多有创意的想法。
23号,开幕式当天,按照活动要求应该是先到湖畔创研中心签到并领取选手物料(参赛胸牌什么的),然后再去学术交流中心逛展,但是因为我记错签到地点了,所以先去了学术交流中心逛展。期间逛了很多展位,因为没有戴胸牌,经常会被人问“你是选手吗”,我只能一次又一次的解释。逛的第一个展是Final Round,他们是一家做全球面试者一站式AI平台的,最吸引我的一点是他们团队内部无限量供应tokens。后面又去参观了paraflow、youware、ten framework等等,也都是一些ai agent驱动的一些工具。这次还来了一些web3的展位。
23号下午,我去完成了签到,和之前线上认识的两位学长成功面基。然后认识了未来三天的队友。其中两位是年轻可为的初高中生,还有一位是在kimi实习的产品经理,目前仍在北大读新传媒的研一。
24号,黑客松的第一天,上午我们讨论了产品功能和规划。下午在研究飞书多维表格,同时也时常发现产品功能定义不清,于是又和产品经理学长梳理了一遍产品。直到第一天的晚上20:58:15,我在git仓库上提交了第一份commit——“初始化项目”,这一份commit奠定了整个项目的技术栈基础,也就是typescript+react+pwa+tailwindcss。这一天没有参加任何workshop。花了接近1小时,到21:47:56,我提交了第二份commit,“配置好PWA“。这份commit主要完善了pwa的配置,也实现了pwa的自动检测和安装提示。又花了接近40分钟,到22:24:37,我上传了素材文件,并上传了一个检测透明视频是否在前端可用的文件。当时应该是在和产品学长研究素材的问题,他是我们队这次的主要设计,非常给力。到了第二天00:17:23,我上传了react-router的路由文件,就几十行代码。看了下日历,24号的22:30-23:30是一个福气脱口秀的蓝调活动,我和学长去听脱口秀了。脱口秀挺有意思的,一共有3位演员各讲了10分钟。其实我发现脱口秀就是围绕着一个点反复的去讲,都是一些很小的笑点,当时笑一笑也就过去了,现在也回想不起太多。只记得第一位的声音很软绵绵的,第二位则恰恰相反,语速挺快,但是说话又能很斯文的很自然的说出脏话,话题主要是开玩笑的吐槽各种人,比如杭州人最近喝到臭水之类的事,还有说在座的各位来参加黑客松的都是黑客,这个活动时不时违法的,又因为大家是未成年人,可以在成年之前干一票大的之类的,都是调侃。
听完脱口秀,就是25号了。我这有一张25号3点47分的照片,没错,头一天我就通宵了。其实这是我预谋已久的,我很早就想干一件连通三天宵的事了。0点到3点之间,主要在优化代码上,由于ai生成了大量的代码,很多都不符合我的设想,所以我一直在删改,包括我希望代码分配到更合理的文件中,以一种更好的组织形式存在,说白了就是防止形成史山。2点45到3点38进行了一次拆分文件。这主要是将zustand的store进行拆分,也将类型定义到了单独的文件中。到这时,已经搭了个架子,首页展示植物信息和植物背景的也都ok了。后面从4点一直到7点都没啥效率。主要工作是清理和优化代码,中途遇到了各种bug,在和bug斗智斗勇。到大概5点的时候,我突然觉得会场里太冷了,就出门到湖边坐了会,但是蚊子太多了又回去了。5点半到7点半我可能睡了2小时。
25号7点开始算是新的一天,7点半到9点半我在攻克视频背景无缝切换到方案。头一个小时我攻克了视频不自动播放,或者说播放自动卡住的问题。接着花了20分钟移除了自定义的缓存。又花了40分钟把视频循环播放调好了。9点25到10点5分,40分钟完成了页面切换3D效果,共计300多行代码。又花了10分钟修改了2处小样式。接下来30分钟,从10点16到10点53,我让ai生成了加密钱包的代码。接下来半小时把加密钱包页面也添加到3D切换容器里。这个时间里,我正在听Injective的workshop。接下来遇到了加密钱包的包依赖buffer的问题,通过pollyfill解决。
12点听完Injective的workshop,然后去吃了个晚饭。下午1点提交了一个很小的样式修改commit。又花了20分钟加了一个日期显示到页面上。接下来整整两个小时都没有提交,直到15点33分提交了一个连接minimax。这段时间里实现了植物的语音识别和情绪分析、回应。一共800多行代码。依稀记得当时和产品学长讨论了选什么字体,气泡框怎么画。到这时,前端的首页已经可以在假数据的模式下运行起来了。接下来一个小时到4点半,主要工作是对接后端的接口。又过了50分钟,新增19行,删除81行,这次是在修视频播放的一些bug,最后决定还是把唯一的图片资源转换成视频。又分别花了40分钟实现了智能同步数据和bgm。智能数据同步旨在保证前后端的数据一致,通过懒加载+定期增量同步保证。bgm播放的问题在于浏览器的严格安全策略导致无法自动播放bgm,必须当用户有过交互才行。可以说,直到5点12,和后端对好了,到6点47,完成了bgm和自动同步,项目的首页已经可用了。然后去吃了个晚饭,到晚上8点,开始写CI / CD。花了一个小时搞定了部署到服务器上的流程。9点到10点一个小时,修了一点点样式(我也忘了那一个小时干嘛去了)。然后花了15分钟完成了数字藏品页面的背景图片,10点到11点实现了数字藏品的水平滚动容器。又花了20分钟左右优化了下样式,包括捕获鼠标滚轮之类的。
26号,比赛的第三天,我又通宵了。凌晨0点到0点54分,将藏品栏的音频藏品的素材放了进去。接着给相框增加了投影效果。接下来整整一个半小时,解决阴影的投影异常未果。又花了半小时不知道干嘛了。接下来42分钟直到3点42分,做出了唱片详细页,难点在于让唱片从页面上跑到模态框页面点这个动画效果。接下来整整3个小时直到7点,修复了数码管样式,修复了同步的bug。我说实话这段时间的效率都很低。接下来两个小时直到9点,修复了同步问题,修复了安卓端的推送。9-10拆分了组件,修复了莫名其妙的前后端匹配bug。10-11,允许唱片播放,修复前后端匹配bug。11-12,通过F12和console.log调试,修复了前后端数据匹配bug。然后整个下午到晚上7点都在部署web3的智能合约。首先是上Hackquest看了看文档,然后找了赛道方提供的hardhat合约demo,照葫芦画瓢把合约写出来了。但是在部署到时候老是提示账户里没有gas费。去找各种水龙头领了水以后才发现,部署到时候把网络选错了。Chainlist上存在两条injective测试网,很不幸我选到了错误的那条上。7点到9点继续清理代码,同时删除了复杂的同步机制。9点到9点半完成了植物标本的部分,又花了半小时修复了bug。接下来花了1个小时到晚上11点半将飞书的仪表盘嵌入到了app中,这过程主要解决了一些样式问题。然后花了半小时完成了钱包的提示词导入创建。
27号,比赛的第四天,这天早上7点结束提交。所以又是通宵的一天,0点到0点11分将加密钱包的组件进行拆分到不同的文件中。又花了半小时修复了pin码输入问题,使得钱包在前端界面可以全部显示。然后花了二十多分钟修复了钱包地址错误的生成路径。这时是凌晨1点11分。然后花了半小时将NFT铸造到测试网上的功能写了出来。这时是1点45分。又花了40分钟简化了同步机制,这时是2点22分。又花了一个小时继续修复同步问题,修复花苞界面,这时是3点多。然后又花了半个多小时修了植物收藏的bug。花了半小时修复了web3的ipfs上传问题,花了十几分钟修复了最后一页的滚动问题。这时是接近凌晨5点。也许睡了会,到了7点差几分钟,被队长叫了起来问了几个问题,然后就去expo展位了。
在展位一上来就遇到了很多老师过来咨询,一遍又一遍地解释项目,很累但是很值得。也去参观了其他人的项目,90%都是用llm去开发一个功能,比如用llm去解决留学咨询,用llm去帮助学习。到中午,一切结束我就溜了。最后荣获飞书赛道的最佳创意奖。
这次活动的体验真是太疯狂了,72h几乎没睡觉,爆肝1w+行代码,最终拿出了可以运行的demo。这次比赛可以说是对我过去所有经历的肯定,我也看到了很多优秀的实践,让我未来的路看得更清晰一点。以前也从未用过小红书,也是因为这次advx的大力宣传,所以才发现小红书的重大潜力。希望以后也能在各个活动,在小红书上认识更多的人。