缘起 明显感觉到一年两次的徒步活动,大家能凑到一起的机会越来越少了。五一的那一次还因为我身在地球另一边而错过了,所以这一次希望总能成行。 路线 [2024年11月23日] 杭州出发: 杭州市区 ~ 驱车1小时 ~ 鸬鸟山脚 到达营地: 徒步半小时到达露营地 山顶徒步: 去不远的山顶简单徒步,来去几个山脊,深秋风景宜人 [2024年11月24日] 回杭: 鸬鸟山 ~ 1小时 ~ 杭州市区 到达 从杭州出发,接上刚从宁波过来的老大哥,约1小时来到鸬鸟山下的农家乐,吃个中饭就出发去到山脚,开始攀爬,其实只有不到 1500 级的台阶,毕竟所谓亲子路线,所以本次攀登相对轻松。 到了临近山顶的一个观景台,我们觉得这里相对风小,于是决定在此扎营。 山顶与山脊 展开帐篷后,天色还早,我们开始去往山顶,并延着山脊往前走了一段,有芦苇,有蓝天,有远处的山峦,令人心旷神怡。 夜幕降临,气温骤降,忍着寒冷开始没苦硬吃,不是,开始享受又一顿野外露天的晚餐。 这样的相聚总将愈来愈少,且行且珍惜。 …
The Build of mythbytes.com
过去2周,尝试了AI 融入开发,也简单分享了Learn With Helen 的尝试。 为了对 NextJS 有一个更深入的了解,这次我尝试开发了 MythBytes.com,一个基于 NextJS 的静态网站,并使用 Netlify 来托管。 第0步:初衷 当下看到的这个博客站,使用的是 Jekyll, 它是 Github Pages 的官方支持的静态站点生成器,使用的是 Ruby 语言。多年以来我一直使用它来发布博客,而我的发布流程一般都是先从 Gitbub 上拉取代码,在本地编写 Markdown 文章,为了更好的图片加载速度,我通常会把图片上传到阿里云的 OSS 上再把公链嵌入到文章中,然后我需要本地运行 Jekyll 测试效果,最后把文章推送到 Github 上,触发我提前配置好的与 Netlify 的自动集成,Netlify 会自动完成构建、部署, 新的内容就可以在互联网上被看见。 但是这样的过程显然不太方便,因为我的目标只是“编写一篇博客”,而我却要做很多额外的工作。于是我想着要不就借此熟悉 AI+Dev 的机会,尝试打造一个符合我心中诉求的博客站: 用户只需要负责编写与发布,不需要关心任何部署与维护的工作 我不希望使用任何第三方的服务,包括数据库、对象存储、CDN 等等 我希望充分使用 Netlify 的能力,简化建站流程(构建、部署、CDN、HTTPS、自动化) 第1步:模式选择 在实现这个目标之前,我需要先调研一下CMS系统一般的构建模式,它们基本上会被分类为以下几类 总结起来,Keystatic 的模式似乎更接近我的需求,所以我决定使用它的思路来从0打造一个自己的博客站,并且我不打算使用Github Apps,而使用原生 Github 的 API来进行集成。 第2步:技术选型 考虑到这是一次个人站的练习,我需要一个足够简单、灵活、易用的技术栈,我选择了 NextJS 作为框架,也希望借此机会熟悉一下 Node.js 生态下的的全栈开发模式。 同时,我还希望使用 Netlify 来托管我的站点,并使用 Netlify 的 CI/CD 能力来完成构建与部署。 考虑到我希望在未来用这个站分享更多并不关于个人,而是关于由好奇心驱动的探索内容,比如神秘主义与前沿科技,所以我根据这两个主要特性让 ChatGPT 帮我筛选了合适的域名,在众多选项中我选择了 MythBytes.com, MythBytes 在英文中是神秘字节的意思,听起来很酷,也符合我的预期。 第3步:构建成果 经过几天的构建与打磨,我借机熟悉了 NextJS 的开发模式,也更进一步了解了 Netlify 的能力与限制,最终于 Cursor 一起完成了 MythBytes 的开发。 分享代码如下:Github:G-CMS 第4步:总结 又一次与 AI 一起开发,我有了更多的感触,那就是它的价值不仅在于它能够完成多少工作,而在于它能帮助你快速理解一个领域,并在此基础上进行创新。这种赋能是以往任何工具都无法比拟的。 我相信它不仅加速了新产品的开发,也将改变开发者的学习方式与思维模式。 …
The Build of learn-with-helen.com
过去2周,尝试了AI 融入开发,另在此记录一下这次尝试中开发 Learn-with-helen.com 的过程,以作纪念 第0步:技术选型 “我需要开发一个前后端分离的 Web 应用,请推荐我使用目前比较流行的技术栈。选择合适的框架和开发模式,为我生成一个完整的工程架构,并告诉我每个目录的意图。” 这是我在一周前开始这个项目时,向 Cursor 提出的第一个需求。然后经过了无数的问答和几乎没有敲入一行完整代码的情况下,我和 Cursor 一起一步一步完成了这个项目。 拥有 AI 的帮助,我一个人完成了 UI 设计、前端开发、后端开发、数据库设计、CI/CD 部署,以及域名配置、HTTPS 配置等以往可能需要一个小团队或者至少是能自诩为“全栈”的开发者才能完成的工作。这就是 AI 的力量。下面来简单流水式地记录一下整个过程。 一开始,我先是有了一个想法,我的原则就是尽量使用我不是特别熟悉的技术栈,这样我可以尝试 AI 辅助开发的能力边界,同时也能借机熟悉这些技术栈: 在与 Cursor 的沟通中,我们得出了以下的技术选型: 前端使用 React (Npm) 后端使用 Spring Boot (Gradle) 数据库选择 PostgreSQL 使用 Nginx 作为反向代理 使用 Docker 作为容器,用 Docker Compose 来管理容器 把代码放在 Github 上,使用 Actions 来管理 CI/CD 流程 使用 AWS 的 EC2 服务器来部署 挂载域名,并使用 Let’s Encrypt 来开启 HTTPS 访问 第1步:框架搭建 完成最小可运行版本,它只需要满足几个最需要的需求: 前端:一个可以显示登录页面的页面(使用 React, Npm) 后端:一个可以提供登录的 API(使用 Spring Boot, Gradle) 数据库:一个可以存储用户信息的数据库(使用 PostgreSQL) 这个过程中,与 Cursor 一起主要完成了以下几个工作: 在本地安装 PostgreSQL,在 Cursor 帮助下解决了权限问题,并设计了用户信息的数据库,创建了用户表 基于 Spring Boot,结合 Cursor 提供的最佳实践,开发了登录 API(使用了 JWT 传递 token,最简单的版本) 要求 Cursor 设计了登录页面的 UI(初版非常简陋) 在 Cursor 辅助下配置 Node.js...…
AI + Develop
目录 1. AI + 开发 几种模式 2. 使用 Cursor AI 辅助开发的效果 2.1 Jekyll 博客工程优化 2.2 X-Poster 小机器人 2.3 iOS Swift 开发 2.4 Web 全栈开发 (The Build of Learn-with-helen.com) 3. AI 融入工作流将会为未来工作模式带来的变化 0.写在前面 过去几年,AI 的发展速度超出我们想象。在几年前人工智能这个概念在我看来还只是一个可能永远太不成的科学幻想,而如今它已经实实在在地融入到我们生活和工作的方方面面。 从 ChatGPT 体现出来的理解能力,到 Midjourney 和 Stable Diffusion 在图像生成上的应用,再到 AutoGen 在多 Agent 协作上的进展,以及 AutoML 在自动化机器学习上的突破,都无不昭示着人工智能时代的到来。 这不禁让作为开发者的我希望亲自尝试一下 AI 对开发过程的影响,并畅想 AI 融入工作流将会为未来工作模式带来的变化,以及 AI 最终将会引领人类社会走向何方。 1.AI + 开发 几种模式 下面总结了几种AI 辅助工作的模式 生成模式(Generative Mode) AI 用于生成内容,如文本、代码、图像等 适用于需要创造性输出的场景 分析模式(Analytical Mode) AI 用于分析数据、识别模式、提供见解 常用于数据分析、预测、决策支持等领域 交互模式(Interactive Mode) AI 通过对话或交互方式提供帮助 适用于客服、虚拟助手等场景 增强模式(Augmented Mode) AI 用于增强人类能力,提供建议或辅助决策 适用于需要人机协作的场景 自动化模式(Automation Mode) AI 用于自动执行任务,减少人工干预 适用于重复性高、规则明确的任务 对大数人来说,对 AI 的体验是从与 ChatGPT 的对话开始的。ChatGPT 的出现,让我们第一次可以与一个虚拟的 AI 进行自然语言的交流,并获得相对准确的回答。把问到的答案应用到实际工作中去,这可能是 AI 辅助工作的第一种模式,它取代了搜索引擎,成为我们获取信息和知识的工具。AI 产品提供商继而通过 AI-Agent 的方式组起支持多模态的 AI...…
Mysterious Stonehenge in Calgary
起因 跟女儿聊天的时候,说起她的学校草坪后面有一个神秘的大石头组成的圆环,我的第一个想法就是 “哦,那肯定是学校搭起来给小朋友们玩耍用的设施”。但当我打开 Google Maps 一看发现似乎没有这么简单,于是我试着去搜索一番,看看这个石环有什么历史,结果发现了一串包含印第安原住民文化、萨满宗教及神秘主义的知识。 相同的疑问 看到这个圆环,我第一个想到的就是复活节岛的巨石阵(Stonehenge),于是我用它作为关键词试着找一找 Stonehenge in Calgary。 于是发现了在3年前,有人在 Reddit 上有过类似的提问,下面有人把这叫作 Prairie Circles,另一个人把它叫作 Medicine Wheels (药轮?), 后者得到了更多人的肯定。 于是我带着怀疑使用 Medicine Wheels 作为关键词进行了进一步搜索,看个相关图片后才基本确定咱这个就是一个 “药轮”。 Medicine Wheels 根据 Wikipedia 的描述: Physical medicine wheels made of stone have been constructed by a number of different Indigenous cultures in North America, notably many of the Plains nations. The structures are associated with Native American and Indigenous Canadian religious ceremonies. 药轮主要是由北美平原印地安先民建造起来的,主要用途与(萨满)宗教仪式有关,经常发现于美国北部与加拿大南部, 尤其在南达科他州、怀俄明州、蒙大拿州、阿尔伯塔省以及萨斯喀彻温省。根据皇家阿尔伯塔博物馆记载,“Medicine Wheel” 一词首先是用来 指叫怀俄明州的一个叫 Big Horn Medicine Wheel 的发现。名字里的 “Medicine” 也并非一定是与疗愈相关的意思,只是表明那是一个神圣、宗教性的具有精神意义的地方。 阿尔伯塔省就有一座叫 Majorville Cairn and Medicine Wheel site 的石阵,建造于5200年前!彼时,希腊克里特岛上才出现米诺斯文化,上下埃及刚刚统一,再过400年中国才进入到上古神话中的三皇五帝时代。 Medicine Wheels in Alberta 经过进一步搜索,我甚至找到了专门有人研究和总结了阿尔伯塔省发现的9种不同的药轮的类型, 部分如下: 宗教 通过对 “药轮” 概念的进一步检索,发现了即使在中文社群中,也是有人对其有所探究,并多是与探索神秘主义、萨满宗教及大地占星术有关 游戏 我甚至找到了北美印地安原始萨满宗教对于游戏的影响,魔兽世界中牛头人(Tauren)种族的设定背景就深度参考了北美印地安文化。有闲人在游戏中探索之时,发现了一个被隐藏在某处高地上的 Medicine Wheel,挺有意思。 结语 从身边一张令人好奇的空拍图开始,跟小朋友一起经历了一次有意思的考证之旅,没想到她每天在大草坪上瞎玩儿的地方居然可能拥有几千年的历史~ 令人感叹每一个人的生命是如此渺小而短暂,而每个渺小的生命的痕迹却能积累下来传递数千年。 …
Land In Calgary
2024年的5月5日,完成了10天的陪伴长登行程,坐在从温哥华飞回上海的飞机上,12个小时漫长的飞行实在不太令人舒适。在飞了4个小时后,决定打开笔记,梳理并记录一下这次难忘的行程 启程 经过了三年的努力准备,又经过了大半年的思想建设,去往枫叶国的行程终于在今年的4月26日发生了。刚出发的时候我们的内心多少还是忐忑的,即使老婆有过早年法国留学的经历,去年也有过短登的尝试,然而当真正要面对长期地在一个完全陌生的地方开始新生活,还是有些担心的。以至于在临行前,老婆跟我说“我觉得我没有当年只身去往法国的那种勇气了”,我告诉她“那是因为你现在拥有了更多,有我们的孩子和我们的家”,我们知道正是这些我们放心不下的,才是我们远行的意义。 说到意义,在4月26日临行前,我再次问了一次自己,究竟为了什么?孩子的空气、饮食和教育,我们的医疗与安定,家庭未来的发展…总之是让生活多一条可选的路。想明白了,就没有什么后悔的了。 于是我们跟家人道了别,收拾好三个大箱子、一个小箱子,每人还各背了一个随身包,全都塞进后备箱,驱车前往上海准备飞往温哥华。 温哥华 (Vancouver) 经过十多个小时的飞行,飞机降落在温哥华机场,坐上提前约好的7座接机车,入住了提前约好的 Airbnb。这个民宿坐落在温哥华的列治文 (Richmond),地理位置应该是挺不错的,一路上我们就被车窗外温哥华绿意盎然的春季景色给吸引了。 我们花了两天,带着孩子在绵绵细雨中的城市里穿行,去了博物馆,去了超市,去了 Granville Island 集市,好好体会了一把这座海边的生活成本巨高的城市。 卡尔加里 (Calgary) 两天后,我们动身前往此行最重要的目的地,也是娘俩要长期落脚的城市卡尔加里。如果用一个词来形容卡加行程给我带来的体验,那就是『人生拓展』。 驱车 这种拓展从租车开始,下了飞机我们便兵分两路了,老婆带着孩子和三大件行李前往提前约好的接机点等车,她们会在到达目的地之前途经一位同样来自杭州的朋友的家,这位朋友提前帮我们验收了我们网上租下的公寓并帮我们拿了钥匙,除了从她那儿取钥匙外也顺带帮她从国内捎了点东西,也给她还在读一年级的女儿带了个小玩偶以表谢意。 我则前往卡加机场的汽车租赁区域,准备提取我提前租好的汽车,后来证明这次租车的选择是大大的明智之举,它帮我们完成了整个行程中最重要一部分。 当然在刚拿到车的时候我还是充满忐忑,一来是我从来没有在国际上租过车,二来是我开了近两年的电车对于油车的踏板模式是否能马上熟悉心存疑虑,最重要的是我将行驶在一个我从来没来过的地方,使用着我从来没开车使用过的导航软件,遵循一套我不熟悉的交通规则与标志标线,去到了一个我从来没去过的目的地。带着『我该怎么开才不至于在路上即安全又不闹出笑话』的心情,紧张地上路了。 开了大约25分钟,我便从机场来到了公寓楼下,我贴身的短袖都因为紧张出汗而微湿了。但当我开完了这趟行程,我的内心里充满了成就感的,就像是当年拿到驾照第一次上路开完一程一样,这在某种程度上标志着我开启了人生的新一条赛道,并开始能够驾驭它。 刚才一路上第一次见到了卡城北美大草原的平展与开阔,让从小生长于丘陵地带的我着实感到身心震撼。 安顿 公寓几乎跟我们想象的一模一样,甚至有些超出我们的预期。因为早就知道这边的租房是不带家具的,所以我提前就在宜家定了床垫和床架以及一些杯子和工具,以应对第一晚的仓促。 我们进入公寓的时间已经是晚上的9点多,带着时差和困顿与刚才驱车的兴奋,我试着想把床架装一装,一个小时后发现晚上要装好不太可能了,于是作罢,大家第一晚就将就睡在床垫上吧,这很符合新移民的初次体验,我们觉得也是一种有趣和值得回忆的经历。 在卡城的第二天与第三天,我们便开启了疯狂采购与安装模式,我们一早便驱车出发,去了两次宜家、两次 Costco、一次大统华和一次 Telus,每次都把后备箱完全装满载回公寓,光把那些沉重的家具和生活用品搬上楼便花了不少力气,更不用说要安装差不多10来件大小家具以及再把厚重的包装纸板箱压扁分多次运到垃圾房。 可以说没日没夜,筋疲力尽,但当最后看着老婆孩子房间舒适的床、书桌椅,客厅的电视柜与电视机,一大一小的波昂椅子;看到冰箱、食物柜、洗衣柜、储物间里丰富充足的供给,心里还是充满了欣慰的,那颗『不知要如何在地球另一端开始生活』的心也终于放下大半了。 在这期间,我们也体会了一把加拿大气候的任性,我有想过春夏之交的卡城晚上可能气温还会比较低,但没想到的是我们刚到的第一天还晴空万里的城市,却在第二天开始下起了雪来!这反而是让头一晚睡下起来后就发现整个城市都白了的女儿兴奋不己,作为一个中国南方孩子,她没怎么看到过雪,只能从视频与想象中做过 Snow Angel。在接下来的几天,每当我看到她兴奋地要去玩雪时,我都会告诉她『等你在这边呆久了,你就会知道这里最不缺的就是雪了..到时候再回想起来估计会觉得自己有些 silly..』 她则并不已为然。 班夫 (Banff) 新家准备妥当了,于是我们就启程沿着加拿大一号公路出发班夫了,班夫洛基山国家公园是加拿大的国家名片,也是我们选择在卡加落脚的重要原因之一。 坎莫尔 (Canmore) 在去往班夫的途中,我们在半路上的 Canmore 小镇稍作了停留,随便吃了个午饭。 我兴致勃勃地拉着老婆孩子去了《The Last of US》美剧的拍摄取景点打卡,这让我又好好收集了一波跟朋友们聊天时的谈资,非常开心。 班夫小镇 (Banff Town) 离开 Canmore 我们就驱车来到了班夫小镇入住了这里提前预定的 Canoe & Suite 酒店,一路上洛基山景已经让我们非常震撼,我们入住的房间从阳台也能看到山景。 在班夫小镇,我们逛了几个小时,给朋友们买了点纪念品。然后,我们去到了那家我早已心心念念已久的 Grizzly House 餐厅享用了一顿难忘的晚餐,这是一家野味实足的餐厅,主打的就是 Fondue(瑞士奶酪火锅)以及真正的由合法猎人打来的野生动物肉。这次,我们在热石板上烤了:鳄鱼、鸵鸟、鹿肉、野牛、青蛙、袋鼠、黄鳍鱼,本来菜单上有响尾蛇的肉,没有了给换成了袋鼠。配上店家调制的特色酱汁,最后水果与热巧克力火锅结尾,真是一餐神奇的体验,我们三个都很开心。 露易丝湖 (Lake Louise) 去年7月娘儿俩短登的时候就去了一次,那时的露易丝湖、梦莲湖正值夏天解冻后最美的颜色。这次我们体会了一把卡城多边的天气,以及到了5.1了都还没有解冻的湖面的体验。 硫磺山顶 (Banff Gondola) 在回去卡加的途中,我们去体验了一趟 Banff 硫磺山顶的缆车之旅,由于还下着雪,购票前前台就跟我们确认了,山顶的景色由于天气受限,是不是仍然想要去看呢?来都来了,自然是要去的。 上去后,发现确实视野受限,但是及时在这样的雪雾中,依然给人以一种从未有过的震撼。 2011年,加拿大格罗斯莫恩国家公园的团队成员举办了一次创意比赛,他们将 18 对红色阿迪朗达克椅放在一些风景独佳的僻静之处,邀请游客去探寻这些椅子。第一个找到全部椅子的游客,则被奖励一对属于他们自己的红色椅子!如今,在加拿大 100 多处国家公园和国家历史遗迹中都放置了红色的阿迪朗达克椅子。加拿大公园局在一份声明中写道,“在这个国家最独特和最珍贵的地方与大自然联系。无论是在悠闲漫步后休息的地方,还是为您成功完成艰苦的徒步旅行而欢呼,我们的红色椅子都提供了一个放慢脚步、放松身心并真正发现加拿大公园提供的最好的地方。” 班夫镇周边也可以找到两处红椅子,分别是 Cave and Basin 历史遗址,另一个就是我们所在的这个硫磺山 (Sulphur Mountain) 山顶,有幸坐上一坐,打卡加拿大国家自然遗产。 回程 从班夫回来后,我们打算在最后一天慢悠悠地起床,老婆下厨给我们做了好吃的,使用当地的食材(加拿大阿尔波塔省招牌的 AAA 级牛肉,鲜甜大虾,新鲜有机的蔬菜瓜果)。当地的做法,健康安全还不失美味,让我满足的同时又让我对她们接下来的生活更有信心啦。 吃完后,我们又徒步去公寓楼下的街区逛了逛,发现走路10分钟内就有非常便利的各种商超、餐饮、教育与服务的机构商家,得益于这是个相当成熟的街区,我们发现即使在还没有买车的情况下依然还是能够相当便利。 至此,娘儿俩的新生活就正式开始从落脚开始迈向正轨了,未来半年的目标就是给孩子报名上学,老婆继续开始在线教学的工作,报名考出卡城的永久驾照并抓紧买个车。然后就是简简单单,安安静静地生活,去体验平和健康与简单的慢节奏生活,去等待着未来家庭更长远的发展。 感受 说到慢节奏的生活方式,在这十多天的行程中,我对加拿大社会的一个最直观的感觉是: 人均素质非常的高 各色人种充分包容 规则意识深入骨髓 物质丰富但不做作 我觉得拥有这样的结果的原因可能有几个: 首先是作为老牌发达国家,国民教育普及得比较好,加之吸收的新移民由于吸收门槛较高,因此带来了整体国民的素质较高。...…