Sunday, December 7, 2025

Vibe Coding 2025:两周亲身体验 AI 写程序(2)

Gemini界面

项目 3:Little Biochemist

(这个阶段已经不能叫“测试”了,算是真正以“成品"为目标的开发项目。)

在前两个小游戏的实验之后(文接这里:Page not found: Vibe Coding 2025:两周亲身体验 AI 写程序(1)),我终于可以尝试做一个 在工作上真正用得着的工具 :一个以生物化学反应主题的沙盒互动游戏。

灵感来自一个我一直觉得很有趣的网站: Little Alchemy 2,它的玩法很简单,就是把不同元素组合看看可以产生什么新东西。

虽然网上可能已经有类似的生化互动教材,但因为我打算拿来上课用,甚至可能分享给学生,所以内容的有克制化的要求。

Substrate、Enzyme、Product 的名称和反应逻辑要符合我自己的教学大纲,不能太简化丢掉重要概念,也不能复杂到超过课程范围。换句话说,这是一个专为课堂而生的教学小工具。

有了前面几个项目的经验,这次直接先把概念大纲起草好(第一次觉得和 AI agent 对话前竟然要打草稿)。虽然这个项目相对复杂得多,但 Gemini 依然是在 一分钟内就生成了第一版原型。

接下来就是漫长的来回修正:调整界面布局,修改一堆化学反应方程式,处理循环反应,修正分子图示 (尽量保持科学准确, 虽然还是达不到 100%)。

我粗略算过,这一轮几天下来大概改了 40 多个版本。过程中发生了问题:修改前后搞混、Gemini貌似失忆、输出内容鬼打墙。而且 Gemini在精准绘制 SVG 化学结构这块还是有限制。最后我只好放弃太复杂的分子图,让整个视觉风格保持简单实用就好。



满心欢喜把网页推上 GitHub,兴致勃勃地想在手机上体验一下触屏操作。

结果一打开手机

完全没办法使用!
虽然我已经要求 Gemini 做成 responsive web design,但我完全忽略了一个关键:inventory panel 在手机竖屏下根本放不下!导致整个 UI 爆炸式错位,手机根本不可能好好操作。

我只好硬着头皮回去 Little Alchemy 的界面抄功课,再问了好基友意见,顺便翻了一篇 UI/UX 设计文章 (
Desktop vs Mobile design: The only RULE you must know! | by UXGO | UX Planet),才意识到:竖屏与横屏的菜单布局思路不同,基本上也是我在上一个锄大D项目犯下的错误。

于是,我和 Gemini 再开一轮设计讨论,最后决定:整个界面重做。

(反正也不是我写代码。)

接着卡在一个怎么也无法解决的bug:在手机上用手指拖拉分子进沙盘和滑动菜单列表两个手势会互相冲突,完全没办法共存。

我不知道 Little Alchemy 是怎样做到那种几乎丝滑的操作体验。做到这种程度,我真的只能说:
在真正的工程师面前,AI 还是输了。

就在我在烦恼的时候,我突然想到那句万用真理:Keep it simple.

于是我直接指示 Gemini取消拖拉操作,改成触点生成分子。结果整个问题瞬间解决:菜单可以顺畅滚动,手势不再冲突,手机体验大幅改善。

虽然算是功能被小幅度“阉割”,但用户体验反而更好。


电脑版
手机版


最后最后,成品出炉后,我是真的满意。

功能上已经相当完整,界面也顺畅到足以拿上课使用。后续要做的事情其实就很单纯:
不断打补丁、加入更多生物化学反应,甚至加入挑战模式,让内容越来越丰富。

以教学用途来说,它已经完全达标。

链接:


解锁技能:
Mobile First Design概念✅


项目 4:第一次接触 Backend —— 分账计算工具

前面三个项目都是不需要数据库的 static webpage。下一步,我想挑战看看如何使用免费的数据库当作 backend 后台服务,这样未来的项目就能扩展出更多可能性。

目标很简单:做一个类似 SplitWise 的 分账计算小工具。网上当然已经有很多类似的免费服务,但我主要是想借这个小项目练习如何架设后台数据库。顺便也把 SplitWise 需要订阅的功能自己做出来,例如:免费版的每日 10 项输入限制和货币转换。

跟 Gemini 讨论过后,我决定用Firebase当作免费数据库。看了1支 YouTube 教学影片之后,我就开始动工。

有了前几个项目的经验,Frontend 前台设计这部分很快就搞定了。虽然还是有些瑕疵,但基本功能完整,在手机竖屏再进行微调成也不过 2-3次尝试就搞妥。接着把 Firebase SDK 接入 HTML,一测试:连线成功,成功登录!



数据库安全和维护

Firebase 的安全基本上依赖它内建的认证与权限设定。没有受过正规训练的我,只能反复确认自己有没有做出什么骚操作,让数据库暴露在攻击风险中。Gemini 虽然很强,它生成的代码可能也藏着潜在风险,所以这部分必须特别谨慎。

还有就是简单的删除资料指令原来不简单,为了确保不留下幽灵资料,必须特别指示Gemini的代码需要强制删除sub-collection的资料,不可以留下任何孤儿。

货币汇率API

跟 Gemini 聊了一下才知道,要做自动货币转换,必须依赖外部的汇率 API。

而这立刻带来一个新的现实问题:我要开 API 帐号。我随手查了一下平时常看的那些汇率网站结果全都是 付费申请API的。还好最后找到一个专门提供给小型开发者的免费汇率API,但限制也很现实:每个月只能用 2000 次汇率转换请求。我顺手再瞄一眼目前使用的 Firebase 免费方案的流量限制,我在想:如果未来真的想做一个大量使用后台服务的商业工具不管是 API、数据库、流量、认证系统……全部通通都要钱。



网上的所有服务几乎都要钱!顿悟:感恩Google大帝!

解锁技能:
Firebase 设置后台数据库✅
设置用户登录✅
设置API对接✅


项目 5:Kahoot Clone

储备了足够的知识后,我觉得是时候尝试集成一个线上测试系统了。没错,就是对标 Kahoot 的那种网页。因为是自己做自己用,可以绕开许多付费版才有的限制,比如人数上限之类的。

几天的断断续续地和 Gemini 讨论,不停地提问、建议、推翻再重来。过程中我也参考了自己常用的教学管理平台的功能,同时评估免费数据库的容量、流量限制,以及权限设定(避免有人拿到 SDK 就能洗掉后台数据库)。

越讨论越发现:在把复杂任务交给 AI 写代码之前,一个清晰的软件架构真的非常关键。不能随便就叫开始AI写代码,不然一直推翻再一直测试实在太没有效率。

和前两个项目不同,这次需要两个前台:学生端和教师 Dashboard。虽然我没特别要求设计风格,但 Gemini 产出的界面一眼看过去就是在致敬 Kahoot。我哥直接笑说:“这不就是 Kahoot Clone 吗?”于是名字就这样定了。

经过两天的密集测试和功能追加,中间还发生了一次乌龙:我的开发环境因为显示问题没把“确认栏”渲染出来,让我错误责怪 Gemini 功能写坏了,浪费了不少时间尝试修不存在的错误。不知道是不是错觉,被我“冤枉”之后的 Gemini 似乎明显变得有一点不友善和积极了,回复得比较直接干脆,而且还会更主动地纠正我。

整个开发流程其实非常快:一个周末的开发加测试,就把整个系统完整跑通了!

成品

解锁技能:
软件架构启蒙✅


结语:

这两个星期下来,虽然一行代码都没写,却觉得知识被灌得很充实。有了 Gemini 的协助,不同功能的小工具或小游戏几乎都能实现,限制的反而是自己的想象力。2025年的Vibe Coding已经足以让我们为工作或生活开发各式实用的小工具了。


Saturday, December 6, 2025

Vibe Coding 2025:两周亲身体验 AI 写程序(1)


自从 Google 开放让学生免费领取一年的 Gemini 3.0 Pro 订阅后,我就像突然打开了新世界大门一样,开始疯狂实验用 AI 来写各种网页小工具。最终目标很简单:做一些自己日常会用、需要高度客制化的工具,顺便取代那些明明功能很简单却要收费的 app。

其实我早就知道这几年 AI assisted programming 已经是许多真正的程序员的日常了,只是门外汉的我一直没有去尝试。所以虽然以前也试过让 ChatGPT 生简单的 HTML 或 SVG,小玩一下就因为结果不怎么理想而作罢。

但是最近看了一些Youtuber的实验后,我有了大胆的想法。

测试一:贪吃蛇小游戏

拥有 Gemini 3.0 Pro 的第一天,我就想学一些youtuber搞小游戏编程当做试验。结果脑袋一片空白,还是需要考虑10来秒,才随口就说:“做个Nokia的初代贪吃蛇吧”



输入“咒语”不到一分钟,Gemini 就开始狂喷 HTML/CSS/JS火星语。然后又不到一分钟,我的震撼感都还没消失,完整可玩的贪吃蛇已经出现了。

试玩之后只能说:跪了。

这不仅是个完整的贪吃蛇游戏,更让我惊讶的是 UI 风格很好看。在我根本没给非常仔细的指示下,它自己选的色调、布局、按键风格都很顺眼,甚至比我自己能想出来的更好。

既然成品如此完整,我可以考虑deployment的操作了,准备练习如何把成品发布上线了!

经过和 Gemini 的对话(原来这种就是简单的 static webpage),我尝试把成品丢上 Netlify 和 GitHub Pages。虽然他们界面一开始对我这个小白看起来有一点复杂,但靠 Google搜索和 Gemini对话,我还是顺利把贪吃蛇推上线了 。 

链接:

https://exponsnaketial.netlify.app

注:由于我哥给了一个建议:“不如改成蛇每吃一粒点就立刻长一倍”, 于是我也顺势给它取了一个中二的名字。

体验成功后,就开始想下一个项目。

解锁技能:

Vibe Coding

Netlify上手体验

Github上手体验


测试二:锄大 D(Big Two)卡牌游戏

现在可以提升难度,那就试试看做一个 锄大D。我对规则熟悉,也可以拿来测试 AI 的出牌逻辑强弱。顺便摆脱那些免费锄大D app被迫看广告的烦恼。

一样的流程:一句 “做个 Big Two 游戏”,不到一分钟就生成了第一版。基本玩法没错,我也不需要向 Gemini 详细解释规则,只是一些 house rule 细节不同而已。


但是这次面对的挑战是比贪吃蛇复杂,由于界面更复杂了,这次需要人脑介入处理界面与功能优化,例如:排序方式, 卡牌视觉设计,桌面出的牌显示, 对手剩余卡数等等。

第4版

对界面设计我完全没有概念,搞了几轮也不满意,只好先去参考市面上现成的卡牌游戏,再把指令丢会给 Gemini。经过几轮来回调整后,游戏的UI 和功能就比较一个完整游戏了 (虽然UI依然充满瑕疵)。

最终版


AI 玩家逻辑升级:然后我输惨了

接着我就问 Gemini:要如何让 AI 玩家更聪明?Gemini比较当前出牌逻辑,建议调整4条简单的出牌逻辑即可:

A. Hand Structure Analysis (The "Combo Protection" Rule)

- Current Behavior: Treats 3, 3, 4, 5, 6 as individual cards. Might play a single 3.

- Improved Behavior: Recognize 3, 3 is a Pair. Do not play a Single 3 unless necessary.

Before deciding a move, the AI should analyze its hand to group cards into optimal combinations.

B. Control Card Conservation

Strategy: If the card required to beat the table is a rank A or 2, and the AI has more than 5 cards left, it should consider Passing instead of playing.

Exception: Unless playing that high card allows the AI to play a 5-card hand next turn that it guarantees to win.

C. Opponent Awareness (Endgame Logic)

If opponent has 1 card: Do not play a Single. Play Pairs, Triples, or 5-card hands to lock them out. If forced to play a Single, play the highest Single available (to prevent the opponent from sneaking out with a low card).

D. Leading Strategy (Free Turn)

Lead 5-card hands first: If the AI has a Straight/Flush, play it immediately. These are harder to pass later.

Lead Pairs before Singles: It is harder to regain the lead with pairs.

Lead the "Trash": Lead the lowest card that isn't part of a good combo.

看了一下那些策略,我心想:“咦?这不就是我平时的玩法吗?” 原来我的基本逻辑可以这么简单地描述出来。虽然我猜应该还有更高级的玩法,比如分析已经在打出手的牌面之类的,但我自己也不深究,不知道怎么描述策略给它。于是我直接下令:“你就按你方式升级 AI。” 

(顺便看了一下它生成的程式架构,原来出牌逻辑整个被打包在一个 runComputerTurn() 里面。看到这一点我突然觉得未来如果要做一个AI 难度选择的功能,好像也并不难实现嘛。只要根据不同难度去切换不同的逻辑模块就行了)

结果升级后……我试玩几把后,现在问题来了:我输多赢少了啊!

算了,不玩了,上线,move on。

链接:

https://big2bygemini.netlify.app/

https://gourean.github.io/big2bygemini/

但是!但是!当我兴致勃勃地切到手机萤幕测试时

整个排版完全还是一塌糊涂!

我马上向 Gemini “投诉”。结果它淡定地跟我解释:你想要的叫做 Responsive Web Design(响应式网页设计)。听它解释后我才突然回想起:平时上网时,网站在电脑横屏和手机竖屏之间会自动适配版面,而我这个小白,在设计一开始根本完全没考虑到这一点。

于是我只好又让 Gemini 帮我把整套 UI 调整成 responsive。不过改着改着我心像算了,不需要再纠结UI, 以后有机会可以直接打掉重练。

也是在这个阶段,我才体验到 User Interface (UI)/User Experience (UX)  跟写代码是两码事。就算代码能跑、功能没问题但如果用起来糟糕,那再完整的程式也只是形式上的“能动”,却没有人会想要用它。

Gemini 的确可以在极短时间内把整个游戏的代码生出来,我也相信它生成的代码可能不是最优雅、最效率、最符合工程师标准的写法,但至少是 跑得动、目标达成。对于这种小型工具或游戏,代码结构不够完美也不算致命吧?

但是真正麻烦的是它不是人。只要目前AI 很难体会人类在视觉上对“几个像素的差距”有多敏感。对于我们来说,字大小、按钮位置、间距大小,都会影响整个体验。但这些直观的感受对目前的AI来讲很难真正理解,所以即使代码方面可以代劳,UI/UX还需要人力介入。就像这次的项目一样,真正花我最多时间的根本不是写程式,而是界面

解锁技能:

Responsive Web Design概念



Wednesday, April 18, 2018

妖艳猪笼两件事

1)见红了

种了2年的Nepenthes 'Ventrata' (花市猪笼草),才发现原来在充足的阳光之下的Ventrata可以长得这么红艳。它终于把身上的N ventricosa 原始基因发挥出来了!

Nepenthes Ventrara with red pigmentation

2)妖艳Miranda

刚入手的N. "Miranda" (米兰达猪笼草),其实只是普遍的园艺种。号称是目前最大的低地猪笼草品种,笼身可长达30 cm。想象一下未来花园的大米猪片地开笼,何其壮观啊~~哈哈

Nepenthes 'Miranda'


Tuesday, December 19, 2017

Wonderfood Museum Penang 食物狂想馆

民宿老板跟我讲:“槟城乔治市有超过40间博物馆,当然不是每一间都是值得参观的。”

而食物狂想馆是一间被老板提及和推荐的博物馆。成人的入门票价格是RM15.00 (大马公民)。

DSCF5084
大门


Untitled
进门前先免费给你一碗大cendol!

Untitled
在售票处有大烧鸡

Untitled
栩栩如生的太阳蛋(看这尺寸应该是恐龙蛋吧)

Untitled
买票入场咯!

Untitled
刚踏入博物馆就有道具可以玩。P/S:很重的道具

Untitled


Magic Teh Tarik
魔法teh tarik

Untitled
嚣张厨神


Untitled
大马民间美食。看起来比在餐馆找到的真货还美味,每一盘都放足料。

Untitled

Malaysian cuisine


Nyonya food
娘惹美食和糕点

Indian cuisine
Banana Leaf

Untitled
团圆饭?


Untitled
新春快乐
Untitled
Rojak

Untitled

Untitled
平日宴会上最热门抢手的沙嗲

Untitled
串烧之战

Untitled
巨丸
Untitled
ABC红豆冰

Untitled
Asam Laksa

Untitled
几可乱真,细节上非常详细

Untitled
水果的部分当然少不了果王榴莲

除了巨大食物模型,这里也有小模型展览

Chefs
大马多元特色料理的厨师

Untitled
古早食肆

Loh Sang
新年劳生。看看满桌四溢的鱼生,非常写实。

Untitled
脚车贩子

Untitled
夜市pasar malam

博物馆也准备特别有趣的场景让游客表演,非常感谢热心的工作人员主动帮忙拍照和介绍。

Untitled
突然失重

Untitled
翻台?!

Untitled
全色盲的食物世界

Untitled
腐烂的食物:时间不等人,最重要的是活在当下

Untitled

Untitled

Untitled
世上最贵的料理。全部料理都有引证来源和价格,不是吹水。很多是金箔食物料理

Untitled
粗心的侍应与愤怒的食客

Untitled
乍看是凌乱的餐桌,其实另有乾坤

食物狂想馆的确是个有趣又好玩的博物馆。除了栩栩如生的巨型食物模型供游客拍照打卡,食物馆还可以让游客一睹大马的多元饮食文化和历史。不只这样,食物馆也不忘教育。比如:食品的含糖量,鲨鱼保育,浪费食物等课题。非常用心,细节做得非常了不起,灯光照明也出色,馆主一定是有品味的艺术家。值得一游。

附上食物狂想馆的基本资讯:

面子书:https://www.facebook.com/Wonderfoodmuseum/
地址:49, Lebuh Pantai, George Town, 10200 George Town, Pulau Pinang
开放时间: 9AM–6PM




Vibe Coding 2025:两周亲身体验 AI 写程序(2)

Gemini界面 项目 3:Little Biochemist (这个阶段已经不能叫“测试”了,算是真正以“成品"为目标的开发项目。) 在前两个小游戏的实验之后(文接这里: Page not found: Vibe Coding 2025:两周亲身体验 AI 写程序(1...