普通视图
2025 CMS 杭州车展小记
前言
2025杭州国际新能源智能汽车博览会暨移动出行展(简称“2025 CMS 杭州车展”)于2025年5月31日至6月4日在杭州国际博览中心举办。
展会以“数智启新元”为主题,启用6大主题展馆,超8万平米的展示空间汇集了全球80余家知名汽车品牌,涵盖新能源、豪华、合资、自主品牌等全品类矩阵,千余款车型集中亮相,为观众呈现了一场汽车科技与文化的盛宴。
端午前后被 CMS 车展推广轰炸,顺手就领了免费门票,想着可能会去凑个热闹,一念之间果真成行了。宣传噱头网红车模我又不认识,当然是想了解最新汽车生态,嗯。
入场
从地铁出站口开始,就铺满了车展的宣传物料。整体布置给人感觉很大气,所以它敢自称是浙江省规模最大的车展。
车模
现场很多老哥长枪短炮,模特会比较配合他们看镜头摆姿势。而我这种拿手机的小哈喽很难有好角度,所以我咔咔了6个G,但能看的并没多少。
车模会换装流转于多个展台,所以无法按照车企来分类。以下排名不分先后。
静态展示
动态展示
特邀车模
当天的特邀车模是周叁叁。一般车模只需要在宣讲时段短暂展示,而她要连轴转,途经所有车企展台助阵。摆姿势的幅度,笑容的张力都要大得多。不得不说也是辛苦钱。
表演
展车
造型最吸睛的是这台仰望U9。
这个车头很霸气。
最酷的还得是摩托车。
我驻留最久的是福特展台。参展的是我以前买车的 4S 店,不过销售全换过了不认识我,一个劲推销我去店里试驾。我爆出老车主的历史,才打发走。
新款蒙迪欧对我来说有很多缺点:
- 老款的栅状中网有点微笑唇,新款的蜂窝难看
- 门把手换成了我讨厌的隐藏式
- 增加了我讨厌的鲨鱼鳍
- 运动款没了最灵魂的尾翼
- 中控屏垂直,视角极不舒适
迄今为止我买过福克斯和蒙迪欧,所以对野马有滤镜,遇见了难免多看几眼。不过平民跑车也是跑车,我只能行注目礼。
可能是为了肌肉车的形象,维持了粗犷机械的中控设计。我欣赏不来。
周边
工作人员也养眼。
分币没花,但是拿到的签到礼、奖品不少。
体验了赛车游戏,方向盘很难操控。
后记
看了一天的科技美女令我甚感无趣,所以晚上专程和真正的岁月不败共进小龙虾大餐。
CSV数据导入到WPS
实践证明第二个方法可成功整理成WPS文档。
方法一:直接复制粘贴(适合少量数据)
复制CSV数据
全选我提供的CSV格式文本(从书名,作者...开始到末尾),按 Ctrl+C 复制。
粘贴到WPS表格
打开WPS表格,点击左上角第一个单元格(A1),按 Ctrl+V 粘贴。
数据会自动分列显示。
调整格式
选中第一行(标题行),点击菜单栏的「开始」→「加粗」设为表头。
根据需要调整列宽(双击列标右侧边界自动适应内容)。
方法二:导入CSV文件(适合大量数据)
保存CSV文件
将提供的CSV文本复制到记事本,保存为 .csv 文件(如 books.csv)。
在WPS中导入
打开WPS表格,点击左上角「文件」→「打开」。
选择保存的 books.csv 文件,WPS会自动识别为分隔文本。
设置导入选项
在弹出的「文本导入向导」中:
步骤1:勾选「分隔符号」→ 下一步。
步骤2:勾选「逗号」作为分隔符(取消其他符号)→ 下一步。
步骤3:直接点击「完成」即可。
注意事项
乱码问题
如果出现乱码,在导入时选择「编码」为 UTF-8 或 GB2312。
分列错误
若某列内容错误合并(如书名和作者混在一起),手动选中该列,点击「数据」→「分列」重新拆分。
补充缺失信息
部分内部资料无出版社/作者,可手动标记(如标黄单元格)后续补充。
研学公司经营范围-扣子
研学公司经营范围说明
常见经营范围分类
核心业务类
研学旅行服务:这是研学公司的核心业务之一。包括为不同年龄层次的学生、企业内部团体、社会团体等设计并执行研学旅行方案,涵盖行程规划、导游服务、住宿安排、交通接送、餐饮安排等方面。公司会依据客户的需求和预算,量身定制个性化的研学旅行方案,例如针对学校学生的春秋游研学、企业的团队建设研学等。比如,为学生设计一条历史文化研学线路,安排参观博物馆、历史古迹,配备专业导游进行讲解,同时负责学生的交通、住宿和餐饮等。
研学课程开发与教育培训:专注于开发各类研学课程,如红色文化、传统文化、自然科学、科技创新等主题课程。课程设计会结合学生的年龄特点、学习目标和当地的资源特色,确保课程具有教育性、趣味性和实践性。同时,开展相关的教育培训活动,包括学科辅导、素质拓展培训、研学旅行指导师培训等。例如,开发一套以当地自然生态为主题的研学课程,让学生通过实地观察、实验操作等方式学习自然科学知识,并为学校教师或研学导游提供相关的培训服务。
研学营地建设与管理:负责研学营地的规划、建设和运营管理。营地的选址通常会考虑环境优美、交通便利、安全可靠等因素,并配备完善的基础设施和教学设备。营地可以提供住宿、餐饮、教学、娱乐等一站式服务,为研学活动的开展提供良好的场所。比如,建设一个集农业体验、科技探索、户外拓展于一体的综合性研学营地,为学生提供丰富多彩的研学体验。
配套服务类
旅游接待与票务代理:提供旅游信息咨询、票务代理、旅游产品销售等服务。为客户提供关于旅游目的地、交通、住宿、餐饮等方面的详细信息,帮助客户预订机票、火车票、酒店等,销售与研学旅行相关的旅游产品,如旅游纪念品、文化用品等。例如,为学生团队预订往返机票和酒店,同时销售具有当地特色的文化纪念品。
会议及展览展示服务:组织和承办与研学相关的会议、展览和展示活动,促进研学旅行行业的交流与合作。可以邀请专家学者、行业精英、教育机构代表等参加会议,分享经验、探讨行业发展趋势;举办研学成果展览,展示学生的作品和学习成果。比如,举办一场研学旅行研讨会,邀请教育部门领导、学校校长、研学机构负责人等共同探讨研学旅行的发展方向和实践经验。
文化艺术交流活动组织:策划和组织各类文化艺术交流活动,如文艺表演、文化讲座、艺术工作坊等。通过这些活动,丰富学生的文化生活,培养学生的艺术素养和审美能力,促进不同地区、不同文化之间的交流与融合。例如,组织学生参加一场传统文化艺术表演,让学生近距离感受传统文化的魅力。
其他相关服务类
研究咨询服务:提供教育、文化、旅游等领域的研究、咨询、评估等服务。对研学行业的发展趋势、市场需求、政策法规等进行深入研究,为客户提供专业的咨询建议;对研学项目的效果进行评估,为改进和优化项目提供依据。比如,为教育部门提供一份关于当地研学旅行市场现状和发展趋势的研究报告,为学校提供研学课程设计的评估和改进建议。
技术开发与服务:开展与研学相关的技术开发,如教育软件开发、研学旅行信息化平台建设等。利用现代信息技术,提高研学旅行的管理效率和服务质量,为学生提供更加便捷、高效的学习体验。例如,开发一款研学旅行管理软件,实现课程预订、学生管理、行程安排、评价反馈等功能的信息化管理。
市场营销与品牌推广:负责公司的市场营销和品牌推广工作,提高公司的知名度和美誉度。制定市场营销策略,通过广告宣传、社交媒体推广、参加展会等方式,吸引客户关注;打造公司的品牌形象,树立良好的品牌口碑。比如,通过在社交媒体上发布精彩的研学活动照片和视频,吸引更多的学生和家长关注公司的研学项目。
经营范围示例参考
示例一
一般项目:教育咨询服务(不含涉许可审批的教育培训活动);自费出国留学中介服务;文化艺术辅导;会议及展览服务;教育教学检测和评价活动;社会经济咨询服务;企业信用管理咨询服务;翻译服务;包装服务;健康咨询服务(不含诊疗服务);企业管理;市场营销策划;广告设计、代理;信息咨询服务(不含许可类信息咨询服务);市场调查;信息技术咨询服务;咨询策划服务;企业形象策划;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;创业投资(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)。
示例二
国内旅游业务;入境旅游业务;保险代理业务;文艺表演;互联网信息服务;广播电视节目制作;组织文化艺术交流活动(不含演出);旅游信息咨询;票务代理;经济贸易咨询;企业策划;企业管理咨询;教育咨询;会议服务;承办展览展示活动;技术服务;计算机技术培训(不得面向全国招生);翻译服务;礼仪服务;酒店管理;物业管理;销售体育用品、文具用品、服装鞋帽;体育运动项目经营(高危险性体育项目除外);组织体育赛事;航空机票销售代理;自费出国留学中介服务。(企业依法自主选择经营项目,开展经营活动;国内旅游业务;入境旅游业务;保险代理业务;文艺表演;互联网信息服务;广播电视节目制作以及依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类项目的经营活动。)
示例三
旅游信息咨询(不含旅游);旅游产品的研发、销售;票务代理;会议服务;文化艺术交流活动组织与策划;酒店管理(不含餐饮服务及住宿)。(依法须经审批的项目,经相关部门审批后方可开展经营活动)
注意事项
合法合规经营:在填写经营范围时,必须遵守国家法律法规和相关政策的规定。涉及到需要审批的项目,如旅游业务、教育培训等,必须先获得相关部门的批准,取得相应的许可证后才能开展经营活动。
结合自身实际情况:根据公司的实际业务需求和发展规划,合理选择和确定经营范围。不要盲目追求经营范围的广泛,而要注重核心业务的发展和专业能力的提升。
及时变更经营范围:如果公司的业务发生了变化,需要及时到工商行政管理部门办理经营范围变更手续,确保公司的经营活动合法合规。
研学公司经营范围-ChatGPT
研学公司(研学旅行公司)的经营范围需要根据公司的实际业务内容来撰写,既要涵盖主要业务,也要避免过于宽泛或与公司性质不符。下面是一个通用、规范的研学公司经营范围模板,你可以根据实际情况进行删减或扩展:
✅【研学公司经营范围范本】
经营范围:
组织策划文化交流活动;组织研学旅行、青少年素质教育活动;教育信息咨询服务(不含中介服务和学历教育培训);会议及展览服务;旅游信息咨询;户外拓展活动策划;文化艺术活动组织与策划;景区管理服务;文创产品设计与销售;农文旅融合项目开发;营地教育服务;自驾游及主题游活动组织;广告设计、制作与发布;企业管理咨询;市场营销策划;计算机软件技术开发与应用。
(依法须经批准的项目,经相关部门批准后方可开展经营活动)
📌几点注意事项:
不要涉及许可类教育培训:比如“中小学文化课培训”或“学科辅导”是受限行业,若没有资质不能写。
旅游类资质:如果涉及代订机票、住宿、组团出游等业务,要办理旅行社相关许可,并在经营范围中增加“国内旅游业务、入境旅游业务”等字样。
根据公司业务侧重调整:
偏向文化旅游,可突出“研学旅行、旅游资源整合、文旅项目开发”;
偏向教育培训,可增加“素质教育、营地教育、教育咨询”等;
偏向项目运营,可增加“品牌管理、项目策划、IP孵化”等。
如果你告诉我你们公司的具体业务方向,我可以帮你定制更精确的经营范围。需要吗?
Iphone批量删除信息
信息设置里设置保留时间,选择30天即能自动删除之前信息,第一次设置有提示,icloud现在有短信备份功能,可以备份上去再删除。
知名AI模型-扣子
与DeepSeek同类的AI模型介绍
一、ChatGPT
开发者:OpenAI
核心技术:采用GPT(Generative Pre - trained Transformer)架构,通过RLHF(人类反馈强化学习)提升对话质量。最新版本为GPT - 4。
特点与优势:
语言能力强:具备强大的自然语言理解和生成能力,支持代码编写、文本创作、多模态理解等。在写文章、生成代码、翻译、撰写营销文案等方面表现优秀。
多轮对话出色:可进行上下文连续对话,逻辑性强,利于专业问答和知识整理。付费版ChatGPT Plus有丰富插件,可联网搜索、数据分析等。
应用广泛:是行业标杆,拥有最成熟的API生态、广泛的应用集成和庞大的用户基础,主要应用于AI助手、编程辅助、企业客服等。
劣势:
成本较高:闭源,模型内部细节不透明,API调用成本相对较高,例如GPT - 4o API价格约为每百万Token 2.5 - 15美元。
信息时效性问题:知识截止于2021年,无法提供最新实时信息,且可能生成不准确或有偏差的信息,需人工审核校对。
中文表现稍弱:相对中文专门优化的模型,在中文语境处理上有差距。
二、Claude 3
开发者:Anthropic
核心技术:主打安全性与可控性,采用“宪法AI”(Constitutional AI)技术,通过预设原则优化模型行为。
特点与优势:
安全性高:生成内容的安全性表现优异,在保证高效推理的同时,减少了有害内容的生成。
长文本处理能力强:拥有大规模的200K - token上下文窗口,能够总结/分析长文本(如PDF、研究论文),在长文本处理、复杂推理和对话连贯性方面表现出色,写作风格被认为更自然、更符合商业写作规范。
推理能力较好:在某些推理基准中超越GPT - 4,在法律/文档分析方面有高级推理能力,适用于企业办公、法律分析、教育等场景。
劣势:
可用性有限:并非在所有地区都可访问,且没有免费层,仅提供付费API访问。
小众吸引力:不太适合普通或创意任务,在复杂任务的处理能力上稍显不足,应用范围相对较窄。
三、Google Gemini系列
开发者:Google DeepMind
核心技术:采用多模态架构,支持文本、图像、音频、视频等多种输入方式,结合Google搜索及云计算能力。
特点与优势:
多模态能力强:原生多模态设计,能够无缝处理文本、图像、音频、视频和代码,在多模态任务(如图像描述、视频分析)中表现突出,适用于搜索增强、智能助手、多媒体处理等应用。
生态整合好:深度整合Google生态系统(搜索、Workspace等),提供不同性能和成本档次的模型,如Flash、Pro、Ultra等版本。
研究资源丰富:有强大的研究背景和计算资源支持。
劣势:
闭源问题:闭源,模型内部细节不透明,部分区域或功能可能受限。
生态成熟度不足:相对于GPT生态,其开发者社区和第三方工具集成仍在追赶。在纯文本任务上的表现略逊于GPT系列。
四、Llama 3
开发者:Meta
核心技术:属于Llama(大型语言模型Meta AI)系列,是开源的大语言模型。
特点与优势:
开源优势:是最具影响力的开源模型系列之一,许可协议相对宽松,便于商业化应用,拥有庞大活跃的开发者社区和丰富的微调资源,适合中小企业定制化AI解决方案、学术研究。
性能提升:推理速度提升200%,在开源社区中性能接近GPT - 4,支持多语言优化,在同等参数规模下表现突出。
劣势:
通用能力稍弱:通用能力(尤其是早期版本)相较顶级闭源模型可能稍弱。
技术要求高:需要自行部署和维护,对技术能力有要求,官方支持和API服务不如闭源厂商。
五、通义千问
开发者:阿里巴巴
核心技术:基于Transformer架构,通过创新的训练方法(如动态NTK感知插值、LogN - Scaling、窗口注意力机制)扩展上下文长度,有7B、14B、72B及MoE(混合专家)架构等多个版本。
特点与优势:
中文处理能力强:具备强大的中文处理能力,并支持多语言,适用于智能客服、文本创作、企业AI助理等多种自然语言处理任务。
多模态融合:整合图文生成(通义万相)、音视频理解(通义星尘),支持PDF、Excel等多格式文件分析。
企业级服务完善:阿里云生态整合,无缝对接电商、物流、金融等行业解决方案(如天猫精灵智能客服)。支持私有化部署,满足金融、政务等敏感场景需求。
开源影响力大:Qwen系列模型下载量突破1.8亿,衍生模型数达9万,超越Meta的Llama系列。
劣势:指令字数上限为1000字,限制了指令输入;在处理某些复杂任务时,可能不如部分竞品灵活。
六、文心一言
开发者:百度
核心技术:全新一代知识增强大语言模型,从数万亿数据和数千亿知识中融合学习,具备知识增强、检索增强和对话增强的技术优势。
特点与优势:
中文优势明显:基于文心大模型,对中文处理进行了专门优化,符合国人表达习惯。
搜索能力强:结合百度搜索,可提供最新互联网信息。
企业生态好:与百度智能云深度整合,适用于企业客服自动化等场景,符合国内AI监管要求,企业使用更放心。
劣势:部分语句表达存在局限性,不够通顺自然;对医疗、法律等特定领域写作支持不够完善;未提供多种写作风格选择,难以满足个性化需求。
七、豆包
开发者:字节跳动
核心技术:融合了自然语言处理、计算机视觉和语音识别等技术。
特点与优势:
功能全面:提供聊天机器人、写作助手以及英语学习助手等功能,可以回答各种问题并进行对话;支持网页、客户端、APP、插件等形式。基于豆包大模型,字节跳动打造了多个AI应用和创作工具,并接入抖音、番茄小说、飞书、巨量引擎等50余个业务,用以提升效率和优化产品体验。
多模态能力:不仅在文本处理上表现出色,还具备强大的多模态交互能力,支持多风格、多比例的一致性多镜头生成,可应用在电商营销、动画教育、城市文旅、微剧本等领域。
高效推理与低成本:通过字节跳动内部50 + 业务场景实践验证,每日千亿级tokens大使用量,使得豆包在推理效率和成本控制上具有明显优势。
劣势:创意多样性不足,相比部分模型,在语言生成的创意和多样性方面可能稍弱;在一些极专业领域的知识深度上,可能需要进一步提升。
八、讯飞星火
开发者:科大讯飞
核心技术:语音识别与合成能力行业标杆。
特点与优势:
语音交互领先:语音识别和生成技术先进,语音交互能力强大,适用于智能客服、车载语音助手等需要语音交互的场景。
中文处理较好:对中文的处理和理解进行了优化,适合中文语境。
逻辑推理不错:在逻辑推理和数学问题处理上有一定优势,教育场景应用广泛。
劣势:在创意写作等文本创作方面的表现相对较弱;写代码能力有待进一步提高。
九、智谱清言GLM - 4
开发者:清华大学
核心技术:基于GLM系列发展到GLM - 4版本,国内首个支持视频通话的千亿参数模型。
特点与优势:
交互创新:提升人机交互自然性,知识问答和创意写作能力均衡。
学术背景强:由清华团队研发,在知识抽取、融合等方面有优势,知识的系统性和准确性较高,在一些专业领域,如法律、金融等,能够基于其知识图谱,提供专业的咨询和建议,帮助用户解决复杂的问题。
劣势:响应速度相对较慢,在智能度和准确率方面相对部分模型有一定差距。
十、Kimi智能助手
开发者:月之暗面
核心技术:支持20万汉字输入,采用以KVCache为中心的创新架构,分离预填充与解码集群,充分利用GPU资源。
特点与优势:
长文本处理能力强:适合数据分析与专业文档解读,支持20万汉字输入,后续计划向法律、科研领域延伸。
推理能力较好:2024年10月推出的Kimi探索版具备自主搜索能力,一次搜索可精读500个页面,结合思维链(CoT)技术实现复杂问题拆解与多步推理。
劣势:数学推理较弱,准确性低于其他竞品,例如解答数学题时常出现细节错误,还需要解决长文本处理的算力成本问题。
如何做好户外领队-DeepSeek
做好一个户外领队需要综合能力、责任心和丰富的经验,既要确保团队安全,又要提升队员的体验。以下是关键要点:
1. 专业能力是基础
- 扎实的户外技能:熟悉导航(地图、指南针、GPS)、急救、野外生存、天气判断、装备使用等。
- 路线规划能力:提前踩点或充分研究路线,了解难度、风险点、撤退路线和应急方案。
- 环境知识:掌握当地地形、动植物、气候特点,避免自然灾害(如雷暴、山洪)。
2. 安全永远是第一原则
风险评估与管理:
- 提前评估路线风险(如海拔、天气、队员体能),制定应急预案。
- 活动中随时观察环境变化(如水流速度、云层变化)。
- 装备检查:确保队员携带必要装备(如头灯、急救包、保暖层),并检查其可靠性。
- 纪律严明:设定明确规则(如不脱队、不冒险涉水),必要时果断终止活动。
3. 团队管理与沟通
- 了解队员:提前确认队员的体能、经验及健康状况,合理分组。
- 清晰指令:用简洁语言传达计划、注意事项和信号系统(如哨音、手势)。
- 凝聚力建设:通过互动游戏、分工协作(如搭帐篷、生火)增强团队感。
- 情绪管理:关注队员状态,及时鼓励或调整节奏,避免抱怨蔓延。
4. 应急预案与危机处理
- 急救能力:持有专业急救证书(如WFR、AHA),能处理扭伤、失温、中暑等。
- 紧急联络:确保通讯工具可靠(卫星电话、对讲机),知晓救援电话和最近医疗机构。
- 冷静决策:遇险时快速判断(如是否下撤、等待救援),避免慌乱。
5. 环保与尊重自然
LNT原则(无痕山林):
- 带走所有垃圾,避免使用一次性物品。
- 不破坏植被,不投喂野生动物。
- 文化尊重:若涉及少数民族地区,遵守当地习俗。
6. 提升体验的细节
- 知识分享:讲解动植物、地理知识或户外技巧,增加趣味性。
- 灵活调整:根据队员状态微调路线或休息时间,避免机械执行计划。
- 记录与反馈:活动后总结问题,收集队员意见,持续优化。
7. 个人素质
- 责任心:对每个队员的安全负责,不逞强或冒险。
- 耐心与包容:面对新手或突发状况保持冷静。
- 持续学习:参加培训(如登山协会课程)、积累不同环境下的带队经验。
一句话总结
“合格的领队是安全员+教练+导游的结合体,既要兜住底线,又要创造价值。”
通过专业准备、严格安全和人性化管理,才能让队员信任并享受户外之旅。
freshrss 源头管理502错误解决
之前解决过,但是想不起具体解决办法,想到的几个尝试均错误
问题解决,尝试方法:
1.设置文件权限;
2.重启服务器;
3.调整PHP版本,安装fileinfo,很有可能是这个原因;
discuz后台无法登录解决办法
关闭VPN
《导游大理》书不错
哪里买的不知道了。
28 岁的自白:去找寻自己
前言
现在是 2025 年 6 月 6 日,我 28 岁了。
坐在日本东京錦糸町酒店 18 楼的窗前,抬眼便能看到東京晴空塔的落日,新婚旅行的闲适与年龄增长一岁的复杂感受交织在一起,很奇妙。
东京爱情故事
“那一天那一刻在那里,如果我不曾与你相遇,我们将会永远是陌生人” —— 《東京ラブストーリー》
《东京爱情故事》可以说构筑了我对日剧、都市生活乃至爱情观的最初印象,因此前两天学姐问我生日当天想在东京哪里过时,我几乎毫不犹豫地说了东京塔,想走近他们热烈的昭和时代都市爱情中。
刚看东爱时还很小,对爱情与生活都只是懵懂,却依然被莉香纯粹、浓烈而不加掩饰的爱所感动,内心也暗自向往着这样可遇不可求的爱情。
而在这过去的两年里,我从《周报 #43 - In the Mood for Love》恋爱,到《周报 #80 - 关于求婚、爱情与婚姻》求婚,再到《周报 #87 - 我们主持了自己的宝可梦婚礼,还为它办了一个展》婚礼,似乎生活中的一切美好都这样悄然降临在我的身旁,幸福之余也常常有些后怕 —— 如果两年前的那个周五我没有去北京,如果我之前没有去香港,抑或是如果我们完全不曾相遇,我们的人生会是怎样呢?
有太多“如果”或是别的可能性,但有时候爱情就是这样倏地发生了,并不是什么命中注定或是缘许三生,而是恰好在某个瞬间,心跳与灵魂的旋律恰好落在同一节拍上,于是,时间定格。
似乎逐渐也更加理解到了东爱中所表达的,都市中最为人津津乐道的浪漫,其实就是巧合的浪漫,我们在某个节点相遇,牵起对方的手,便已经是最大的幸运。
去找寻自己
学姐在婚礼誓词中提到,不希望丈夫这个身份或是枷锁束缚着我,希望我能更多去找寻自我。
而步入婚姻后的生活,由于难以避免地更多从“我”变为“我们”,虽然也说不上有什么很具体的目标改变或是状态变化,但还是隐隐地多了一份无形的责任与压力。
我们的生活是纯粹而美好的,我们也幸运地能够彼此理解和支持对方想做的事,但人要有所求就也需要有所失,月亮与六便士的抉择也时而在脑中浮现,可能也不至于到烦恼,但思考中依然会多出一些更为沉重的维度,常常需要自己去消化。
而另一方面,和自己没有时差的那个人同行,构筑着一种亲密关系,生活具体而扎实,却也会交织着另一种“孤独”,因为知道对面的那个人会接纳自己的每一面,会尽力去共情和感受,有时反而会更害怕将这些负能量传递给对方,这样有时却又会拉开彼此的距离,成为关系中的刺,这似乎是一个无时不刻都存在却又无解的婚姻命题。
爱很美好,但婚姻复杂,我希望我们的眼中里常驻着彼此,却也不愿一个人的身影将另一个人的视线挡住,而少了自我消解或是倾听自我回响的空间。
结语
每年生日都还是留下了一些文字记录,有时也会回头看看这几年成长与思考的轨迹:
似乎文字也让我从混乱偶然的生活中发现了一种必然与永恒,有些许妥协,但幸而未曾停止追寻,也从《23 岁的自白:去追寻意义》中执着于人生意义逐渐回归到了自我本身,也找到了与自己携手共度余生的那个人,细细数来,生活已然给予了我太多馈赠。
祝 28 岁的自己,快乐。
周报 #96 - 基于 Roo Code/Cursor 的 iOS 开发工作流
前言
本篇是对 2025-05-13
到 2025-05-18
这周生活的记录与思考。
记录一下学习 iOS/SwiftUI 开发的一些资源和基于 Roo Code 与 Cursor 的 iOS 开发环境搭建和工作流。
iOS/SwiftUI 开发
学习资源
最近工作中有涉及一些 iOS 相关的开发,虽然之前做「TheWan App」的时候也是用的 SwiftUI,但因为是很个人的项目,基本上就是完成了功能,并没有追求什么最佳实践。所以这次就趁着五一重新补充了一下基础知识。
- Apple - SwiftUI,官方文档。
- Apple - SwiftUI Tutorials,Apple 官方也有一个交互式的 SwiftUI 教程,关于布局、动画相关的相关概念会更加形象。
- SwiftUI 新手入門課程,ChaoCode 的入门教程应该算是最简洁易懂的教程了,难度不高但是讲解得很清晰,看完后基本上就能做一些小项目了。
- CS193p - Developing Apps for iOS,Standford 的一门很经典的 iOS 开发课程,2023 年的课程也转向了 SwiftUI,质量很高,看完后能更多理解 MVVM 设计模式和一些更底层的概念。
- 肘子的 Swift 记事本,有很多精品的文章,关于 Swift Data 的最佳实践我都是参考的他的博文。
- 13 的 iOS Developer+,平时有看他的 Newsletter,他也正在连载 SwiftUI 的教程,在考虑学习深入一点之后订阅学习。
搜索一些具体的概念、实践时可以直接 Google 搜索,能查到一些 Medium 或其他平台上的文章,参差不齐,不过目前还是比 LLMs 生成的答案靠谱多了,唯一需要注意的就是甄别一下时效性,很多老版本的实践可能并不适用。
开发环境搭建
支持 Apple Intelligence 的 macOS 会有一个内置的 Predictive code completion,会下载一个 2.5G 左右的本地模型,在没网的时候可以使用。
但比起这个本地模型,GitHub Copilot 为 Xcode 提供的官方插件更强大,使用起来除了补全,也有一个 Chat 栏,可以很方便地指定 Xcode 中正在打开的一些文件进行提问,也支持 Claude 3.7 Sonnet Thinking 等最新模型,不过目前还没提供和 VS Code 中类似的 Agents 功能。
但习惯了 Cursor 的 Agents 模式后,仅仅通过 Xcode 中的 Chat 辅助开发已经有些不够用了,好在 Cursor/VS Code 也通过一些插件对 SwiftUI 提供了一些支持 ——
首先是安装一些命令行工具:
可以通过 brew 一键安装或在上述 GitHub Repo 中分别安装
brew install xcode-build-server xcbeautify swiftformat
Cursor/VS Code 中需要安装两个插件:
上述依赖都安装完成后
- 使用 Cursor 打开项目,需要与
xx.xcodeproj
同级目录 - 按
Cmd + Shift + P
调出命令面板,输入/检索Sweetpad: Generate Build Server Config
,选择当前项目 - 稍等片刻,会在当前项目根目录下生成一个
buildServer.json
文件
点开 🍬 图标的侧边栏插件,在项目对应的 schema 上点击 build,选中模拟型或是已连接的实机,会自动编译并运行,就可以实现完全不打开 Xcode 也能进行开发了。
现在再点开所有的代码文件,也不会再出现 imports 错误等一片红的报错,所以再使用 Cursor/Roo Code Agent 进行开发时,也会更准确。
基于 Roo Code + Cursor 的开发工作流
在 iOS 开发过程中,或许是因为上下文长度和模型语料的原因,我发现通过 Roo Code 插件配合 gemini-2.5-pro-preview-05-06
模型在一些更大的功能模块拆分、重构等场景下效果显著好于前者(当然,按量计费 token 消耗也夸张很多)。
所以我目前的工作流是通过采用 roocode-workspace 这个项目先让模型理解项目结构并生成 Memory Bank 文件供后续使用;在一些大功能的开发上尽可能多地提供官方文档、博客和自己的 prompts 让 Roo Code 进行开发,同时自己修复一些逻辑性的 bug。
最后如果有一些比较复杂的报错或 lint error,可以拆分成小的任务单元使用 Cursor + Claude 3.7 Sonnet Thinking 进行修复,虽然是两倍速率消耗,但生成代码的可用性还是更强一些。
目前有几个大的需求都是通过这个工作流辅助开发的,效果还比较满意。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
文章
- iOS Silent Notification Problem - How they mess up your app's lifecycle and Amplitude session events,iOS 静默通知的实践。
视频
电影
- 我仍在此,久违的在影院看的电影,不得不说因为和巴西友好交流的政治原因使得这部政治性指向明显的(左翼、暴力)的片子能在国内院线上映也是一件很微妙的事...
剧集
- 最后生还者 第二季,非游戏党,看完第一季印象比较深,追一下。
- 爱,死亡和机器人 第四季,感觉质量退化/想象力枯竭的程度超过黑镜了...感觉太多刻意的隐喻会有些故弄玄虚。
音乐
周报 #95 - All AI 与 No AI
前言
本篇是对 2025-05-05
到 2025-05-12
这周生活的记录与思考。
这周看到一些有意思的关于 AI Coding 的思考或是讨论,也结合着自己 AI 使用的经历来聊一聊想法。
All AI 与 No AI
AI 与自我
最初是看到了一篇言辞颇为激烈的文章「AI 正在让人变得前所未有地自以为是」,其中有这样几段话 ——
虽然我同样对一些过度鼓吹 AI 从而达成自己个人营销目的的个别“网红”也有些反感,但并不觉得“程序员”一词需要刻意构筑一道门槛来将一些非科班或是技术爱好者拒之门外。
我大学时也是与代码毫不相关的文科类专业,当时即使真的只是用 python 写出一个冒泡排序也会让我感受到奇妙,第一次接外包单子给一个公司用 php 做官网时的感受至今依然记得,那是我第一次作为程序员完成的作品,或许现在看来确实并不一定如一个实习生所能做到的,但依然不妨碍我从中获取的成就感。
甚至也很羡慕现在的人,有了 Cursor 这些 AI 工具加持,可以做出许多复杂度远远高于自己当前知识储备的应用,并不一定是逐行都理解,但想法到实现的路径早已被大大缩短,模块化设计、模型、需求调整这些也会在 AI 写码的过程中融入开发者自身的思维。
编程并不是塞尔达的大师之剑那样一个需要费尽千辛拔出来的荣耀的象征,而更多是普罗米修斯传递的火种,并不稀有,但对世界的运作改变深远。
但还是希望像「AI 编程」 vs. 「热奶宝」文中所说的那样,希望对编程毫无热情而只把 AI 编程作为流量密码的人少来污染这个行业了。
NO AI
看到并且也深切感受到了对于过度依赖 AI 造成的焦虑或是恐慌,我现在同时用两个 Cursor 账号、一个 Windsurf,一个 v0.dev,这些 IDE 或是工具的 Agent 模式已经成为了我想要实现一个新功能时的本能反应,也已经太久太久没有依赖搜索引擎和官方文档本身(除了 SwiftUI,没办法,LLMs 语料太少了)。
确实会有一种很矛盾的感觉,一方面对自己所能开发的领域、边界有了更多信心,可以开发前端、iOS 甚至是各种之前并不了解的技术栈;而另一方面,对于自己离开 AI 后独立写代码的信心在显著下降,连带着自己独立思考的能力。
倒不至于说对 AI 生成的代码有多少羞耻感,只是确实比起自己敲的代码,少了些许“真实感”,不过我想随着 LLMs 更快速的发展以及自己的工作流中更好地与其融合,这种感受也能慢慢地有所缓解。
而看到 No AI 的实践,我甚至想相反地去实践 All AI,在一些 side project 或者个人项目中完全用 AI 去实现,用 AI 修复 AI 产生的 bug,而自己在其中去探索工作流的优化,看看实践了一阵子后究竟是 No AI 还是 All AI 所带来的成就感更高,或许也很有趣。
AI 与思考能力
但我对于非编程类的 AI 实践却有些趋于保守,很少用 AI 类的搜索引擎,也并不怎么用 NotebookLM 或是 Gemini Deep Research 这样的工具来帮助消化学习。
诚然 AI 降低了很多知识获取与学习的门槛,但我依然不敢信任它在我未曾涉猎的领域中给出的似乎条分缕析的回答或是长篇大论的 Research,如果有一天我对 AI 生成的东西感到陌生或是完全无法判断真伪,可能会更担心是不是自己已经丧失思考能力了吧。
程序员算是 AI 浪潮的比较直接的受益者,LLMs 很大程度改变了我的工作模式和行为习惯,我也偶尔会偷懒让 AI 帮我总结或是用沉浸式翻译读英文资料,但我依然不会也难以想象用 AI 帮我写周报/博文,或许它终有一天能做得不错,却少了灵魂和一些微妙的“人”感。
有趣的事与物
软件
在 Twitter 上看到 CaiCai 推荐了一个订阅管理软件「Subo」,试用了一下就为了它的多币种功能付费了,整理了自己的各种订阅/服务器,好用 & 很有设计感!
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- Human Interface Guidelines
- Echobell: Instant Webhook & Email Alerts via Calls & Notifications | Privacy-Focused
- GitHub - cooderl/wewe-rss
文章
- 开源与我:在一周年之际,现在回过头来真羡慕学生时代就能接触/参与开源的人。
- AI Horseless Carriages
视频
- 抽象可以,但抽象不行
- 海拔 5070 米,我们来到了世界上最高的村!
- 2025 年还有人在用网页吗?【年度网站推荐】
- 魔杖!终于让我给做出来了!
- I Tried Vibe Coding - Here Are My Thoughts
- Apple’s Widget Backdoor
剧集
- 最后生还者 第二季,非游戏党,看完第一季印象比较深,追一下。
周报 #94 - 生活的界限与真实感
前言
本篇是对 2025-04-28
到 2025-05-04
这周生活的记录与思考。
这周是五一,久违的长假,放下了疲惫与焦虑,“摆烂”地享受了几天,看剧、运动、招待朋友,发现似乎更能找回一些生活的节奏;也补了 Rust 和 SwiftUI 的课程,重构了之前的项目;还有很多有意思的事。
生活的界限与真实感
界限
我时常觉得自己有一根弦一直绷着,并不是很具象的来自工作或是生活的什么压力,而是一种源自内心的焦虑,例如有一个完整的周末,我似乎很难真正放松下来打一天游戏(即使我真的很想把《宝可梦朱/紫》通关),给自己安排了许多“正”事,却又会因为学习或是目标达成不尽人意而进入自责的循环。
这个五一假期却有了一些例外。假期前我依然给自己安排了许多学习、工作,但因为沉迷看一部新韩剧《苦尽柑来遇见你》和玩《双人成行》而“虚度”了好几个下午,但整个人却似乎融化在了这种舒适的日常中,搁置了那些不良的情绪,只是享受其中。
似乎很久没有这样的时候了,即使只是“在假日休息”这样天经地义又简单的事。
在看《人生切割术》的时候我也常常在想,我现在的生活有时还常常不如剧中那样通过一部电梯来彻底地割离工作与生活,甚至有些羡慕。不由得也开始反思自己是否真的需要填满这些时间,匆匆忙忙地奔波在一项项任务中,模糊了生活的界限。
而对于远程办公已经近两年的我来说,这种界限并不是一个具体的上下班的时间节点所切分的时间片段,而是一种心态上的定义或是掌控感,让自己不再被这些具体的一项项事务裹挟着进入日复一日的循环。
真实感
最近工作内容是并不熟悉的技术栈,常常因为代码写不出来/焦虑而熬夜,甚至也有一天因为夜里开会而吵醒了学姐,持续了两周后有些消耗,但似乎处在一个无解的状态里,确实是需要投入这些时间去学习/完成这些工作,却又由于这些被占据的时间与随之而来的情绪而压垮了仅剩的一些生活的空间。
刚好周五同事 Ares 和 Innei 来家里作客,中午我在家里做了牛排简餐,傍晚一起去天目里拍照,交流着相机、镜头,驻足于配色好看的摊位、与对面同样拿着相机在四处拍的陌生人拿着相机对狙,纯粹的快乐。
晚上又和学姐去看了一部电影「I'm Still Here」,在一家可以一边吃东西一边观影的影院,很惬意,整个周末也似乎因为着短短的几个小时而延长了,变得充实而真切。
或许有时候出去走走,去触碰一下窗外的雨滴,感受一下空气的流动和温度,就能为生活注入一些真实感。
苦尽柑来遇见你
这个假期花了几天时间追完了这部新出的韩剧,原本只是每天吃饭的时候看下,两集之后就有些上头,看完后有些意犹未尽和怅然,似乎陪伴着他们走过了一生,他们之间的爱情自不必多言,其中更打动我的还有三代人之间的情感传递与循环,似乎常常也会落入同样的命运选择中,却又由于根植在生命中的来自上一代的传承而有一些微妙的不同。
之前就一直很喜欢《请回答 1988》和《老友记》这类更偏群像的讲述人生某个阶段琐碎日常与情感的剧集,或许 P5R 这类游戏也是,我期待从中找到一些陪伴感,他们也常常会在生活的许多偶尔的阶段里给予我前行或是回望的勇气。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
播客
- 【podcast】S1E8.5 - 寫部落格是一件很酷的事情 !,基于 Anthony Fu 博客开源项目改版自己个人网站的事居然成为了这一期播客的话题,有一种奇妙的感觉哈哈。
收藏
- GitHub - TakWolf/fusion-pixel-font: 开源的泛中日韩像素字体,黑体无衬线风格,支持 8、10 和 12 像素
- GitHub - gonzalezreal/swift-markdown-ui: A SwiftUI markdown renderer for iOS and macOS
- GitHub - Lakr233/Litext
- GitHub - runjuu/InputSourcePro
文章
- How the Raycast API and extensions work,raycast 的体验真的甩同类 Alfred 已经太远了,解读技术实现的文章也很清晰。
- 我的三天心动原则,我之前看评测很心动大疆的一个无人机,激情下单,但发现到手后忙一些事三天都没空拆开快递,想到以前真正想要的东西都会一天刷三十遍快递去驿站自己取的,于是就退货了。
视频
剧集
周报 #93 - 婚礼纪录片与失落的电影院
前言
本篇是对 2025-04-22
到 2025-04-27
这周生活的记录与思考。
这周「婚礼纪录片」出来了,收到了一些祝福,很开心,也有一些新的思考;去线下看了一场电影,想到了一些关于影院的记忆;入手了 NuPhy Kick75 键盘,体验很不错,找到了一些玩任天堂复古掌机的感觉;还有很多有意思的事。
婚礼纪录片
我在之前的一篇周报中说到 ——
我今年也想以「人生清单」的视角去生活,去寻找生活中不曾注意过的风景,去做一些自己曾经觉得遥不可及的事。
婚礼、展览、在舞台上自己主持,这些对于我这个性格测试中 i 值达到 80%+ 的人来说似乎都有着很大的挑战,但现阶段的我也已经不再怯于去尝试人生中的这些“不可能”了。
也很幸运请了很棒的摄像/导演,记录下了全程。当时看他提供的一些婚礼样片的时候就感觉很不错,像是一个纪录片在静静讲述着故事,经过了长达两个月的等待,终于看到了成片(P1 是一个短片,P2 是全程记录)。
关于婚礼本身,其实已经过去了两个多月,又有了一些新的感受。前两天学姐给我转发了这样一段话 ——
婚育是一场巨大的
“人生意义危机转移计划”
用结婚和生育养育这些
耗费巨大精力的事情,占据人的所有精力。
以至于人没有力气,再烦恼人生的意义。
去消解人一旦闲下来就会思考
“人活着究竟有什么意义”
这类虚无的难题的困境。
我回想了一下,确实。在最初准备婚礼的时候,因为一共只有三个月的时间要处理完大家通常用一年甚至更久的时候来筹备的仪式,所有环节都很极限,忙碌到我们常常有时候反问自己 —— “我们为什么要结婚来着”。
似乎当生活的齿轮一旦开始转动,来自社会、家人以及根植在我们性格深处的文化传统都在加速推动着我们向前,焦虑着一些很具体的事务,比如早上十点和婚庆的策划会,比如婚纱、西服选什么款式,而不再去思考或是质疑那些虚无缥缈的“意义”,这很可怕。
但终究我们不是那种甘心妥协的人,即使依然有世俗的框架与很多琐碎的事务,我们依然尽力在其中融入更多我们的想法,去传达一些我们对婚姻与爱情的理解,去赋予这场仪式更多独特的意义。
想起 23 岁时我对自己说的话(见「23 岁的自白:去追寻意义」)——
我仍然不觉得自己触碰到了一直在找寻的意义,如今的一切成败是非也仅仅是妥协所形成的答案,也许永远找不到了,但这个过程却给了前进的勇气,也许思考本身就是建构意义的过程,让我不再期待某个瞬间能够顿悟,只是希望继续向前,体验和追寻着自己的人生。
很庆幸自己依然还在践行着当初的这些话,也更幸运找到了一起并肩作战的那个人,和我一起追寻这些“无意义”的意义。
失落的电影院
周中的一个晚上学姐邀请我去看电影,一部意大利的黑白电影《还有明天》,难得有看到院线上映这种还算小众的片子,到了发现包场了,配合着意大利的配乐,倒还真有置身老电影的感觉。
除了片子本身,这个影院也带给了我一些感触。
我们去的是杭州的一家叫作“比高电影城”的影院,从我小时候就一直在了。因为离得很近,所以之前也常常和家人一起去,这张照片就是 10 年前我和妹妹去看的时候留下的。
这么多年过去了,杭州发生了很多变化,甚至周遭的商圈也都换了好几轮了,这家影院没有扩张却也没有倒闭,还是最初的样子,不算破败却有些冷清。
电影其实并不算是人生活的什么刚需,但影院和书店一样,常常是我们这一代人少时生活与回忆的载体,而如今我们已经渐渐成长为大人,它们却也依然像是个年迈的长者一样,失落却又温和地注视着这些人生起伏。
很喜欢朱塞佩·托纳多雷导演的一部电影《天堂电影院》,也是十几年前看的了,描绘了意大利的一个小镇上的一家电影院,临近结尾有一个多年后因为需要改建而炸掉原来的影院的场景,当时看得热泪盈眶,现在回想似乎也有了更多感同身受。
个人生活剪影
捏捏与饭饭
刚才两个小猫默契跑到我书桌旁边的床上撒娇玩闹,也太可爱了 ❤️
有趣的事与物
设备
心心念的 NuPhy Kick75 到啦!!比想象得厚重一点,颜色很清新舒服,有回到小时候玩任天堂掌机的氛围,感觉打字都成了享受。
上篇还说到断舍离,但是 Retro 风格 + 致敬任天堂元素,这谁忍得住啊!
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
文章
- 「AI 编程」 vs. 「热奶宝」,想到之前有人做了一个「Not Generated By AI」Badge/声明,或许未来也不是玩笑了。
- 我的朋友谢扬,他的 Fellou,以及这个时代的创业者,写得真好,才知道谢扬也就跟我也差不多大...
视频
电影
- 还有明天,电影本身是很有趣的叙事节奏,前面日常的镜头把压抑窒息描绘得很真实,高潮部分咖啡厅炸的那一刻也有被燃到。片子本身讲女性处境、意识觉醒和地位独立,“选票比情书更重要”,“没关系,还有明天”,最后的结局并没有专注在个体的“逃离”而是群体/体制的更迭,错愕之余也有些深省。
剧集
周报 #92 - 数码产品 Porn 与断舍离
前言
本篇是对 2025-04-15
到 2025-04-21
这周生活的记录与思考。
这周的主基调是处理工作、调整作息与学习;去了安吉 DNA 数字游民公社找朋友,或许考虑过去住几天;感觉最近由于 AI 有关的各种新概念、模型、框架有些过于繁杂,稍有些 burnout,于是重新在 Things 里制订了一些学习计划;久违地追了一些新剧;还有很多有意思的事。
数码产品 Porn 与断舍离
我之前是一个很极端的数码产品和软件工具爱好者,或许也是因为从小到大虽然生活无虞,但我们家的习惯是并不会有很具体的叫“零花钱”的概念,日常没办法存下什么钱,也不会因考得好或是什么而得到奖励,所以小时候即使是想要一个并不昂贵的玩具也需要省很久。
当时很羡慕我表哥的一台 Nintendo Game Boy Advance SP,很经典的那款翻盖带背光的游戏机,可以插卡带玩口袋妖怪(现在的宝可梦),每个游戏都通关了好多遍;当然,随着年龄增长与喜好的变化,后来想要的东西也越来越多,正值智能手机兴起,也想要一台当时刚刚推出的诺基亚 5230;包括高中之后同学的 iPhone 4 和 NDS 游戏机也都让我心动。
但这些都一直没能如愿真正拥有,甚至似乎成为了一种执念。
直到大学后实习、创业和工作,经济独立了,似乎开始有些报复性地看各种数码评测,也陆续拥有了新款高配 MacBook Pro、Mac Studio、iPad、iPhone、Sony 相机、Switch、Steam Deck 和各式键盘,会把所有的包装盒堆在我的书架和衣柜上的空间里,看到就有一种很强的满足感。
有时候觉得或许自己并不是真正想要这些东西,开箱所带来的新鲜感与兴奋感往往转瞬即逝,随即则需要买更多东西来维持,像是陷入了一种数码产品 Porn,是对曾经没办法拥有的自己的一种补偿,只会带来严重的娱乐/生产力过剩。
前段时间在筹备结婚和搬家,开始“变卖”家产,卖掉了大部分使用频次不高的设备,腾挪出了桌面空间,也减轻了许多心智负担,发现自己的心态已经经历了许多转变,当自己想买一个新设备、产品时,似乎又能够回归最原始的理性思考逻辑了 ——
我的需求是什么?它能否满足我?
最近用了四年的主力机 iPhone 13 坏了,几乎离不开充电线,也经常开不了机。
原本一直想着能够苟到今年秋季 Apple 新品的发布去买个海外版,虽然对新的设计和功能也没多少兴趣,至少能用上 ESIM 和 Apple Intelligence。但总归是得解决或是过渡一下,于是去闲鱼上淘了一个 iPhone SE3,折腾了一番迁移后发现够用但屏幕有点小,也稍有些卡顿,作为主力机还是有点勉强。
于是又给 19 年买的的 OnePlus 7 Pro 重新开了机,虽然和 iOS 生态差异很大,却也刚好契合我逐步想只把手机当作基础通讯工具的习惯,而且惊奇地发现其实也很够用。想起来当时买它也并不是因为缺一个手机,而是被它的真全面屏、屏下指纹和升降摄像头的设计所惊艳到,作为备用机服役了一年多就闲置了。
重装了一下发现之前刷的氧 OS 2022 年底就不再更新了,停留在了 Android 12,但完全没觉得缺什么功能,反而感觉很流畅,似乎其实六年前的旗舰就已经完全足够满足我现在的需求了,还能抢先用上 Folo 安卓版 🤩。
之前在讲 Chromebook(也已经卖了)的时候提到过:
我其实有很多高性能设备,日常在用的 M2 Max 的 MacBook Pro,由于性能和续航达到了一个很不错的平衡,导致我即使出门在外也随时都能打开来进入工作状态,甚至爬山和散步都会背着,有时候其实并不能很放松地出门或是陪伴身边的人。
其实设备性能已经过剩到并不会制约自己的效率,反而是需要刻意的约束来让我的目光更多转向周遭。
我发现“刚刚好够用”甚至比现在各种虚高性能的产品更为让我心动,于是逐渐开始追寻断舍离与“复古”,这或许也是一种目光投射、心理甚至是生活中心的转变 ——
我不再是那个需要用一堆数码产品包围自己来填补内心空虚的小男孩了,我的生活中有了爱人、猫和更多有意思的人和事,我已经拥有了童年时梦寐以求的 GBA SP 游戏机了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
视频
剧集
周报 #91 - 一席、消失的时代与自由意志
前言
本篇是对 2025-04-07
到 2025-04-15
这周生活的记录与思考。
这周末去参加了杭州的一席活动,对其中的几个讲者和主题印象很深,记录下一些感触,思考了消失的时代与自由意志;终于搬完家了,有了很满意的办公与生活区域;还有很多有意思的事。
一席演讲
一席是一个本土化的线下演讲活动,Slogan 是「人文·科技·白日梦」,以亲历者的视角讲述分享自己的故事/调研,之前在北京就有去过一场,去年也有参加他们在南京的线下游学活动(见「周报 #60 - 虫子旁、教育理念与 EpubKit」,这次恰好在杭州有一场,学姐早早订了票,周末去听了。
整场活动一共六个多小时,中间有短暂的 40 分钟休息,其实感觉自己除了写代码以外已经很久没能沉下心那么久只做一件事了,看书、看剧似乎也都没办法进入这种沉浸状态,所以也算是一种很新奇的体验了。
就像我常常还是喜欢去电影院看电影,并不仅仅是由于电影院更高级的画面与音效,而是在电影院似乎只需要做看电影这一件事,不会想着再回几条消息或是同时做个什么其他事,这种感觉和自己在家用大屏或是投影看是完全不一样的体验。
消失的时代
不知是巧合还是刻意为之,似乎这次活动的诸多讲者都有隐隐在表达一种对逝去时代的记录或是怀念,北京的胡同、东京的街道乃至曾经那个虚渺的还可以憧憬理想的社会,似乎都在离我们远去了,无力,唯有记录与讲述。
我在北京生活过短暂的两三年,所以当建筑师鲁雯泋与《东四十条》导演詹涵淇在讲述对胡同中的“野生设计”与鼓楼的黄金时代时,竟也生出了些许共鸣。
建筑师深入北京的大小胡同,记录下他们在狭小逼仄的空间中诞生的生活智慧,艺术并不一定立于高墙之下,也可以是低矮胡同中的一砖一瓦或是偶然却也精妙的“设计”,甚至这些未经规训的表达多了一层自由与纯粹。
胡同也不仅仅是一个物理空间,有时也承载了一个时代的缩影,很喜欢《东四十条》导演讲述的鼓楼的“卡住的一代”。很喜欢她所说的“卡住”的这个概念,去年我频繁在思考的“Adulting”(见「周报 #76 - 关于 Adulting 的思考」)也有类似的含义。
二十几岁的年纪,最容易陷入迷茫,既无法回退版本到无忧的校园时代,也不甘于成为一个“无聊”的大人,于是卡在时间与时代的裂缝里,进退维谷。
曾经的鼓楼胡同成为了这些年轻人们的乌托邦,一天天,不论生活多痛苦艰难,他们永远可以回到这个可以暂搁现实的避风港,就像她提到有一天见到过两个穿着击剑服的人在马路上击剑,魔幻而浪漫,世俗桎梏被无限稀释,在这里,他们不必绞尽脑汁思索人生意义,他们就是意义本身。
但这个裂缝就像软件中旧版本的漏洞一样,已经被“修复”了,胡同被拆除,曾经的这些人要么屈服于这个时代的“主流”价值观,要么继续在钢筋水泥的森林中寻找着乌托邦的影子,不论如何,再也回不去了。
自由意志
从日本赶来的一位讲者松本哉同样提到了这一点,他毕业时赶上了上世纪九十年代日本泡沫经济崩溃,与这个时代一起度过了失落的三十年。
但他似乎并没有那么悲观,选择了在高円寺这个地方开了一家二手商店、居酒屋与民宿,制造了各种“迷之空间”,承载着他与周遭的人对时代的反叛与自由意志。
听完了他的演讲才有点恍然为什么任天堂和女神异闻录(P5)会诞生在这片土壤,他们的生活本就充满了这种浪漫。
他讲到自己刚毕业时找不到工作,于是就这样一直开着这些不靠谱的店铺到现在,在五十多岁的年纪依然“只能”随意几点开店关店,和朋友们彻夜喝酒,和全球来玩的背包客们相识、发生故事。
他说 ——
要是那时候找到了工作,大概人生也就这样了,那该有多无聊,好险,差点误入歧途了。
他并没有想要做到什么远大的目标,而只是想要守护自己和周遭的自由,大家都能做自己喜欢的事,而不必屈服于金钱至上的社会,而是见缝插针地、自说自话地去建立自己的革命后的世界。
可就连这样的偏安一隅也难逃被“现代化”洪流吞噬的命运,但松本哉更为游戏人生,会举办一些神奇的活动,比如“房租太贵了”或是“反高円寺再开发”游行,和前来维持秩序的警察们一起举杯,通过这样一种看似无厘头的方式去守护自己和周遭的自由意志。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
我把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- GitHub - enescingoz/roocode-workspace - a project template designed to simplify development workflows using Roo Code.
- GitHub - fuma-nama/fumadocs: The beautiful docs framework with Next.js.
文章
- Rescuing ENS names from compromised wallets.,救一救我被盗了一年多的钱包里的 ENS/NFTs 🥲。
- 来美国的两年后,也即将要去适应一个新的地方,用 A/B test 的方式来应对节奏/机制很有启发。
视频
剧集
周报 #90 - OVH 服务器、Coolify 与对 AI Coding 的思考
前言
本篇是对 2025-03-31
到 2025-04-06
这周生活的记录与思考。
搬回杭州已经接近一年了,租的房子也差不多到期了,于是火速看了两天房子,最终在不远处选了另一套,虽然又要经历一次痛苦的搬家,但新家的空间布局还挺满意的,也当作一种生活状态的调整了。
除了物理意义上的搬家外,我的所有服务/数据也经历了一次从 AWS 到 OVH 的迁移,也是一波三折,好在最后也都无缝完成了,刚好也梳理一下。
最近高强度地用 Cursor 和 Windsurf 进行 Vibe Coding,确实有能感觉到对以往开发模式的颠覆;还有很多有意思的事。
OVH 与 Coolify
OVH Mystery Box
我之前一直算是个 Serverless 平台的爱好者,热衷于在 Vercel、Netlify、Cloudflare Pages、Zeabur、fly.io、Railway 等平台部署和管理自己的大部分服务,大多数情况下也够用,但随着 Zeabur 的涨价以及各个平台政策的变更,成本不断上涨到十几美元甚至几十美元一个月,感觉已经失去了优势。
再加上之前参加一个黑客松获奖送了几千美元的 AWS Credits,所以有很长一段时间我都把服务部署在 AWS 香港机房的一台 EC2 实例上,也稳稳地跑了四五个月了,不过随着 Credits 即将到期,再加上自己也想一劳永逸保障服务的稳定性,于是打算找一些独服长期续费。
主要考虑的就是 Webp Cloud 团队在「Hetzner CAX 系列 ARM64 服务器性能简评以及 WebP Cloud Services 在其上的实践」一文中强推的 Hetzner 的 ARM64 服务器和另一家极致性价比的 OVH 了。
原本已经打算用 Hetzner 了,但刚好看到 OVH 推出了一个 Mystery Box 盲盒活动,22.99 欧元/月,基础款配置为
- Intel Xeon E5-1650v3
- 64G 内存
- 2 * 480G SSD SATA Soft RAID
- 1Gbit/s 带宽
原本就是一个还挺划算的配置,但有意思的在于它可能会随机开出更高 CPU、内存和硬盘的机器,但价格不变,一下子就理解了买 Pop Mart 的朋友们的感受,这谁忍得住啊。
共计买了四台,前两台都是基础款,第三台开出一个 CPU 与内存中奖的加拿大 bhs 机房的机器
- Intel Xeon E5-1650v4
- 128G 内存
当时已经感觉很满意了,于是折腾了一晚上迁移服务,包括全量数据库的数据,搞定后才收到邮件说第四台机器也安装好了,于是去测了一下配置,惊喜地发现真的开到隐藏款了
- AMD EPYC 7351P
- 128G 内存
- 2 * 1T NVMe
- 法国 GRA 机房 1Gbit/s 上行 + 10Gbit/s 下行带宽
前一天还在和朋友说我肯定没这个运气了,不蹲了。
一时看着刚迁移好的服务有些哭笑不得,不过也是幸福的烦恼了,于是又作为一个熟练的服务搬运工开始折腾,花了半个晚上迁移完了所有服务,这个价格&配置应该也很足够当传家宝了,真的再也不搬了。
机房在法国,线路一般,因此大部分对外的服务我都套上了 Cloudflare Proxy,算是能有一些优化,作为个人使用来说也比较足够了,或许后面考虑一些对国内访问要求更高的服务会再套一层线路更好的 nginx 反代吧。
Coolify 管理
顺便也趁机优化/梳理了一下服务管理的方案。
之前用过 Zeabur 的托管,不过感觉面板上还是有不少 bug,并且通过 k3s 进行部署和调度的方式略有些黑盒,没办法很方便地通过 ServerCat 等工具看到每个容器的一些状态,再加上数据备份、挂载等操作还是有很大的局限。
我也有一些服务是托管在朋友搭的 Coolify 面板上的,用得很习惯,尤其是能够将数据库定时备份到 S3 上的功能很强大,所以这次还是选择了 Coolify,直接在面板中配置上服务器的 ssh 就一键管理了。
Vibe Coding
最近很流行一个词叫 Vibe Coding,是对 AI 辅助编程的一种调侃式的说法,不过正经地聊聊,作为一个在 21 年 GitHub Copilot Technical Preview 的时候就高强度使用,后来也陆续使用 ChatGPT、Claude 这类 AI Chat 平台生成代码,并从去年 7 月开始年付 Cursor 并高强度使用至今的 AI Coding 重度爱好者,我确实有感觉到 AI Coding 对我们开发模式的极大颠覆。
虽然没有准确统计过,但感觉我工作与个人开发中目测大概至少有 70% 以上的代码是通过 AI 辅助生成的了,大部分时间用的是 Cursor 的 Agent 模式。
很多人对于 AI 生成的代码抱有偏见,觉得会生成一堆难以维护的“一次性”代码,但我依然觉得即使是 AI 有着更高自主权的 Agent 模式,生成代码的质量也依然要靠开发者自己来把控,当给 AI 的提示词足够准确的时候,它会成为很好的帮手,甚至能写出比自己更优的代码。
我前段时间曾做过一个尝试,把一个个人项目进行了一波涉及到几十个文件的后端 API 重构,如果我自己去写或许要 2-3 小时的工作量与大量的耐心,但把需求和对应的参考文档告诉 Cursor 后,它一次生成的代码就可以使用,但漏了一个组件,再经过两次追问已经完全实现了我的需求,总共花费的时间不到 20 分钟(甚至大部分时间都花在 Claude 3.7 Sonnet 的 Thinking 等待中),这次实践也让我对 AI 所能做的能力边界有了更深的理解。
我始终觉得 AI Coding 最大价值并不是帮助我们成为更顶尖的程序员,任何一个领域想要深耕都需要花很长的时间去沉淀和实践,10000 小时定律依然适用,甚至更有价值了,AI 写出的“不可控”的代码更需要开发者的自身知识储备与判断力。
但 AI 能够让我们更快/更好地实践自己的想法、做出一个小产品或是参与到一些开源贡献中了,我作为一个后端开发,并不需要 10000 小时才能写一个简单的前端页面,而是可以快速做出一个“全栈”的项目,甚至可能比自己设计得要更好。
甚至我还很习惯于阅读 AI 生成的代码来学习那些组件和语法,自己找到一些可以优化的地方去调整修改。AI 更像是一个耐心的 mentor,会帮助我们学习不熟悉的技术栈,解答遇到的问题,并将其内化为自己的技术积累。
尤其是在 Claude 3.7 Sonnet (Thinking) 推出后,惊讶于其代码能力的跃迁之余,我在 AI 为我省下的 Coding 时间里打开了之前还未看完的 cs193p SwiftUI 开发课程与 Rust 教材,开始从头学习,愈发觉得或许再几个月、半年过去,模型本身的能力已经不再是瓶颈,而开发者本身的技术储备、系统设计能力、对架构的理解和业务的抽象能力才是那个短板。
另外由于习惯提示词都是英文,感觉这几个月代码能力没提升多少,英文表达能力倒是进步了 🤣。
博客改版
既上次改版之后,又发现 Anthony Fu 新增了一个 Media 页面,火速把我的也集成上了,现在会展示我看的书籍、电影、剧集、动漫和游戏了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
文章
- 我们高估了智力的重要性,我曾经最“卷”的一段时间会给自己排许多看似不可能完成的任务和苛刻的 DDL,甚至都是一些很重要的失败会付出不少代价的项目,用这种方式强迫着自己去快速学习,现在想想敢于这么做其实更多就是信任自我效能,而这种信心也是可以滚动积累的。
- 6000 字+6 个案例:写给普通人的 MCP 入门指南,依然没找到什么特别刚需的 MCP 场景,figma 生成网页的感觉还比较有意思。
视频
周报 #89 - 博客改版与 TheWan App 发布
前言
本篇是对 2025-03-25
到 2025-03-30
这周生活的记录与思考。
这周最大的变化就是根据 Antfu 的开源博客主题改版了我的博客,也加上了一些模块,折腾得很开心;开发了两年几度放弃的一个 iOS App TheWan 也终于发布了,依然很基础,UI 设计和细节也并不满意,但总算迈出了第一步;还有很多有意思的事。
博客改版
我是一个博客折腾爱好者,前前后后写过十几篇关于如何搭建 Hugo 博客及一些周边服务的文章(详见「周报 #68 - 关于写博客这件事与我生活的色彩」),也有不少朋友是通过这些教程才了解到我的博客的。
网站主题是我之前很喜欢的那种古早台湾风,但早在四五年前就已经不再维护(期间我有提过几个 pr 新增了一些模块,但终究还是受 Hugo 框架的制约),随着博客内容的增加以及想要呈现和分享的形态越来越丰富,逐渐没办法很好地满足我的定制化需求。
但因为早期我的博客 slug 是 /zh/yy/mm/dd/:slug
这样的路由形式,以及 Remark42 是根据完整的 url 匹配的,所以如果要迁移到新主题/框架要做很多额外的处理和重定向,所以一直搁置着没有折腾。
但最近因为偶尔会把一些博文转到朋友圈,有不少朋友反馈说打开很慢甚至完全加载不出来,除了因为部署在海外,博客本身的一些素材/性能问题也逐渐显现出来了,但也很难排查和解决,于是又动了迁移的心思,看了看其他的一些框架,大同小异,也都不算满意,但自己也不想太折腾用 Astro 之类的重新写一个。
恰好翻到了 Antfu 的博客 antfu.me,是他自己定制的框架主题,性能自然不用多说,风格简洁美观且功能丰富,还有我一直想要的摄影展示模块,是我理想中的博客了,于是在跟他确认授权之后,着手开始了迁移。
博客分区
我之前的网站定位在一个博客而不是主页,所以其实只有文章展示,也趁着这次机会重新划分了一下分区,目前有以下几个模块:
Homepage
Homepage 是我的个人主页,主要展示简单的个人介绍、履历和各个平台的联系方式。
Blog
Blog 是我的博文板块,分为了两个类别,Blog 与 Notes。
Blog 主要会是周报及一些更完整的技术文章/教程等,并提供 RSS 输出,可以在 {Folo} 等 RSS 阅读器中订阅;而后者 Notes 模块则可能是一些零散的不足以成文但却有一定价值的笔记,也可以供查看但并不会包含在 RSS 中以免造成一些干扰。
Projects, Talks 与 Podcasts
Projects 展示了自己工作、开源以及一些折腾的 Side Projects,其实把这些年零散做的一些大小项目汇集到一起还挺有成就感的。
不过这部分我去掉了 Antfu 的 TOC 目录,每看一次他的项目页面就多一次震撼,我项目什么时候能多到需要目录导航呀。
Talks 是我的一些课程/演讲。这两年还比较热衷于作为分享者参加一些线上/线下的分享、课程和 Workshop 等,大多数其实都是和 OpenBuild 合作的,梳理了一下一些录屏、课件等,发现不知不觉已经沉淀了不少。
还跟学姐开玩笑说可能我今年分享怎么写 Solidity 的时长已经超过我真正写 Solidity 的时间了,常常会有一些隐隐的惭愧、焦虑和冒名顶替综合征。
尤其在 AI Coding 发展到已经相对成熟的当下,应用开发已经不再是门槛了,但真正服务的架构、性能等却更依赖开发者自身的判断,所以今年想更多沉淀一些基础知识了。
Podcasts 部分目前还很单薄,其实只有我几年前在技术播客节参加的一期,当时思路和分享深度也很有限,但却也还是享受播客这种形式的,今年会多参与甚至自己尝试做一些。
Photos
Photos 也是主题里我很喜欢的一个板块,之前就一直很想在个人网站上有一个类似 Unplash 这样的个人摄影展示模块,也算是能够激励自己出门多拍一些,尝试过用 Ghost 搭建一些子站之类的,总觉得不是很方便,现在能够直接集成到博客里了。
Let's Chat 与 Sponsors
Let's Chat 是一个聊天/咨询板块,我之前其实偶尔也会邮件或是各个平台收到一些咨询,一般就是解决一些博客搭建的问题或简单聊一些关于技术学习、成长相关的困惑,最近也趁着博客改版,放了一个单独的咨询页面,也算是轻咨询的一次个人尝试。
以及所有的 Sponsors 会展示在这个页面以示感谢。
Friends
把之前添加的友链页面也迁移过来了,也欢迎大家交换。
博客组件
其实大部分的页面都是基于 Antfu 的已经很完善的框架来微调内容的,除了一些个人的页面外,我主要做了两个调整。
第一个就是 OG 图的生成没有用之前的 svg 替换文字的方式,而是用了他更推荐的 satori 开源项目来动态生成,样式和灵活性更高一些。
另外就是把我之前的 Remark42 评论系统与 GoatCounter 访问统计系统集成进来了并且保持了原有的数据。
并且发现了 Netlify 非常好用的重定向功能,只需要在目录下添加一个 _redirects
文件就可以自动化解决了我兼容之前的一些旧链接的问题,不需要在 DNS 层面做其他配置,例如以下的格式:
/zh https://www.pseudoyu.com/posts 301!
/zh/about https://www.pseudoyu.com/about 301!
/zh/links https://www.pseudoyu.com/friends 301!
/en https://www.pseudoyu.com/posts 301
/en/* https://www.pseudoyu.com/zh/:splat 301
所以服务部署也放到了 Netlify,依然是每次 commit 代码都会自动部署。
关于 TheWan iOS App
2022 年下半年,我看了 Reorx 的一篇关于 n8n 的文章 —— 「使用自动化工作流聚合信息摄入和输出」,被他所说的「赛博空间」这一概念所吸引,搭建了我的一个 Telegram 频道 —— 「Yu's Life」,自动化同步我文章收藏、豆瓣记录、B 站投币、YouTube/Spotify 点赞等各个平台的记录,聚合了我在网络空间的数字痕迹。
当时一位颇为有缘的学弟找到我说想一起做一个这样的应用,每个人都可以建立自己的专属聚合频道但却不用去折腾 n8n、rsshub、telegram bot 这类繁琐的技术细节,我很感兴趣,一拍即合。
一开始信心很足,花了一个多月做了一个网站和配套的 api 与同步服务,还写了详细的文档,想着春节就能上线,但节后我的个人生活发生了很大的变化,我换了工作、搬家回了杭州,暂搁置了一阵子,再捡起时却已经缺乏了那一股劲。
随后的两年里这个产品既没有消亡却也未能如期上线,一次次跳票。甚至为了说服自己继续开发下去,我把它当成了一个技术 Playgroud —— 用 Rust 写了 api 服务,Go 写了同步服务,产品本身也从一个网页端迭代成了用 SwiftUI 写的原生 iOS App。
期间也有很多有意思的事。产品背后同步用的是 {RSSHub},未曾想到自己现在也成为了项目的 maintainer,前段时间遇到一个小宇宙同步问题直接去上游一条龙修完了;以及期间也诞生了 {Folo},功能有些重合的点,一度让我对产品丧失了一大半的动力。
不过总觉得更多由于自己的原因跳票至今有些对不住一起的伙伴,所以在今年年初杭州和内蒙两场婚礼之间久违的空隙时间里完成了一个基础版本的开发,再经过和 Apple 审核近两周的 Battle 之下,终于上架了 App Store。
上午跟一位最早期就加入了 waitlist 并且日常有不少沟通的读者朋友讲了这个消息,他说:
不知不觉,这两年我娃都快一岁,你也结婚了,真快呀。
自己很早之前就在博客里说过,想拥有一个自己的产品,后来真正开始做了才慢慢发现,即使是一个仅 1.1M 的小 App,从想法萌芽到最后打包上架都很不容易,但总之先迈出了第一步,回头看看,轻舟已过万重山。
欢迎感兴趣的朋友在 App Store 搜索「TheWan」或点击下载链接体验。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
文章
- 学会闭嘴 | So!azy,感觉我以前就会有太努力想成为一个别人眼中的 nice person 而错过了和他人真正交心的机会,这几年才慢慢开始学会多思考和适时地说一点。
- 在 ChatWise 中使用 MCP 工具,Chatwise 真的是现在最好最快的 MCP AI 客户端了。
- How to Write Blog Posts that Developers Read,技术写作的一些技巧。
- 人生体验与记忆股息,体验也往往就是人生意义本身了。
视频
周报 #88 - 方大同、《回留》与人生清单
前言
本篇是对 2025-03-18
到 2025-03-24
这周生活的记录与思考。
3 月初得知方大同离世,这几周陪学姐参与了两次纪念音乐会活动,有一些感触,遂记录下来。
关于方大同
我不算一个热爱音乐的人,也不常对歌手有什么特别的感受,唯一要说可能就是近些年五月天在我人生站在各个分水岭时给予了许多陪伴,也是我唯一现场去过的演唱会。
方大同的歌我听了不少,但在我的心中可能一直是遥远的华语歌坛的一位前辈,不算听着他的歌长大,很难称自己为什么忠实的粉丝。
更多的交集是在刚和学姐在一起时,了解到她很喜欢方大同,从高中开始就喜欢,前些年还在香港现场去听了他的演唱会,所以我也跟着听了不少,在之前讲恋爱的某些文章中也用过《特别的人》这首歌作为 BGM。而在后来我们打算挑战一下自己,报了外面机构的流行音乐培训课程的时候,我第一首也是选了《特别的人》(虽然老师说他的转音很难,并不适合初学者),也算是磕磕绊绊地学下来了。
直到前些天从微博热搜得知噩耗,那时刚在上海参加一个线下活动,学姐当场就哭了。我也有些惊愕,好一会儿才缓过来,对于我来说就像是一个虽然算不上熟悉但似乎从没有哪一刻想过会离开的人突然消失了,化作了一颗星星。
回家之后想起来之前收藏了但一直没看的一期节目「可能是方大同新专辑的唯一专访!丨真假方大同终于同框 丨 HOPICO」,四十多分钟的一场专访,突然让我对他有了非常具象与鲜活的了解,连带着他的歌和专辑里想要传达的情感和能量,再听《回留》这首歌,配合着他录专辑时带着些沙哑的声音,似乎像是一场早有准备的道别,眼泪就止不住流了下来。
印象很深的是他在访谈中提到录制时用上海亲戚家的一个老旧的有些受潮的钢琴弹出了带着些沙沙的音色,但似乎正是这种音色更确切地传达出了他所想要表达的。我时常觉得不论是音乐还是文字,除了歌词旋律或是文笔本身外,更多是一种能量的传递,或许就在某个瞬间能够温暖甚至是拯救一位处在低谷的遥远的陌生人,这是作者和受众之间的一种共创,共同构筑了作品的灵魂。
而方大同的歌,似乎都是有灵魂的。
方大同纪念音乐会
方大同离世的消息已经过去有一阵子了,但杭州的歌友会和一些个人在组织筹办一些纪念音乐会,学姐也报名做了志愿者,去担任主持人和现场的一些秩序维持工作,我也一起去参与了,也拍了些照。
活动是在杭州大厦的一个下沉广场,那天很冷,却有许多人蹲坐在台阶上静静听着或是跟着一起唱,中途我回头看时有些震撼与感动,似乎真的能感受到大同在歌中想要传达到的那种能量很具体地化为了一个个点,而点又连成了线,连接起了这些陌生的个体。
最后静静听了一首《回留》,共同道别。
Adulting 与 人生清单
随着我们在杭州生活越来越久,再加上都是远程办公,所以其实也常常想要通过一些方式让自己和这个城市连接起来。而最近因为参与了这些线下活动,学姐结识了一些新的有趣的朋友,有想振兴 R&B 的理想主义者,有在韩国学流行乐的大二学生,也有努力在这个城市生活,从事着和音乐并不相关的工作却在周末一起和大家玩的爱好者。
活动结束后,他们有邀请学姐一起去商场吃炸鸡。对于已经开始养生的我们来说,似乎这已经不是典型的我们出门会想到的选项了,却也想去感受一下氛围。
现场很有意思,大家年龄、职业和人生经历各异,却坐在一起。各自去买一些爱吃的东西摊在炸鸡店桌上一起分享,为了在蜜雪冰城买到 1 块钱的冰激凌而雀跃,似乎回到了学生时代。
去年的我频繁地思考 Adulting,觉得自己并没有足够的资格与能力成为一个大人,而短短的几个月过去,自己似乎又成熟到能够做到曾经自己很难想象的事了,比如甚至结婚了。
站在现在的时点来看,似乎有了更深的理解。我们其实很难定义什么是成长,也更难定义自己,我们不必成为小时候幻想的那样成熟稳重的大人,也无需因为离年少的那个自己越来越远而感到伤感。
我喜欢的博主「小鹿 Lawrence」每年的视频有一个主线系列,去年的叫「迷路假期」,在人生的间隙中给自己放个假,去旅行,去享受;而今年的系列叫「人生清单」,去做一些曾只存在于自己脑海中的事,去体验,去感受,例如第一期就去安徽寻觅在大城市中消失了许久的年味。
我今年也想以「人生清单」的视角去生活,去寻找生活中不曾注意过的风景,去做一些自己曾经觉得遥不可及的事。
或许人生本就该如此。
有趣的事与物
MCP
RSSHub + MCP Server + Chatwise = 🪄✨
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
文章
- AI Blindspots,AI coding 的一些推荐实践
视频
音乐
周报 #87 - 我们主持了自己的宝可梦婚礼,还为它办了一个展
前言
本篇是对 2025-02-03
到 2025-03-18
这几周生活的记录与思考。
好久不见。
这几周或许是近些年人生体验和情绪最为充盈的一段时间,从去年年底开始筹办杭州的婚礼和展览,直至上周末完成了内蒙的回门宴,似乎连歇下来花上几个小时写下来的时间都没有。但想要说的话很多,终于得空更新周报了。
关于婚礼
或许到了差不多的年纪,这两年我陆续参加了四场同龄朋友/同学的婚礼,也当了两次伴郎,算是近距离地了解到了各种形态的婚礼和仪式。
而自去年 12 月初求婚之后,我和学姐关于婚礼的想法也讨论过很多次。
最初的我们似乎始终没办法理解和认可婚礼的意义,总觉得更多像是一种形式主义的表演,亲朋自全国各地赶来,但现场或许也会忙碌到没法好好讲上几句话,热闹喧嚣之后,或许也很难留下些什么。
所以一开始我们是想了另一种方式,想戴着头纱去全国各地探访一些许久未见的朋友。他/她们或许早已处在人生和爱情的各个阶段,想采访他们对于婚姻和爱情的感受,把这场“旅行”剪成一个纪录片,最后举办一个小小的答谢宴,播放这个视频。
其实已经开始实践了,第一站去了上海,见了几位朋友,也拍了些素材,但回来后总是有些挫败,似乎有些太理想主义了些,餐桌上久别重逢的气氛很好,言谈的厚度却常常不足,很难在短短的几句话里捕捉到他们对爱情最真实的感受。再加上利用周末四处奔波对精力的消耗,仅仅第一周就对这整个想法的信心没了大半。
后来又有了另一个想法。学姐这些年来画了许多画,我也陆陆续续用相机留下了一些影像,不如我们策划一个个人展览,将两个人的目光投射与自我表达串联成两条线。
对于这个更像是乍现的想法,我们也没什么信心,找了一些专业的策展人似乎并不太乐于接这些过于个人化的展览,问了些朋友也因为自身工作时间之类的很难协调,最终他们也都建议找婚庆一起帮着策划和执行。既然又需要找婚庆,也会有一场宴席,不如就还是办一场婚礼吧,于是乎兜兜转转又回到了原点。
虽然如此,我们依然在其中保留了自己的一些坚持。婚礼采用了宝可梦/皮卡丘主题;所有的传统环节只保留了一个父母觉得重要的敬茶,其他的譬如接亲、婚车等等全都取消了;没有请司仪而是自己主持,所有的流程甚至到每一个环节的背景音乐也都由我们自己选定。
在火速敲定了婚庆、酒店、摄影摄像、婚纱礼服与跟妆之后,我们就将更多的心思与精力放到了婚礼与展览本身的设计上。运气很好地找到了一个西餐厅,跟老板聊过我们的想法之后她很支持我们,还建议我们从 2.14 情人节作为开幕,更能展现与爱情相关的主题,也为我们婚礼当天预热了。
但起初其实我们对于展览本身最终想要呈现的样子并不那么清晰,几次跟婚庆过策划也没有太多进展,总觉得仅仅展示了我们的一些爱情故事,却离一个更社会化意义的展览相距甚远。直到距展览已经不到一周的一个夜晚,我重新整理方案时发现还是没办法接受妥协,相似的挫败感也逐渐产生了。
学姐也有些看出了我的闷闷不乐,明明很爱早睡的她却拿着素描本跟我从头梳理起了展览的整个设计,直到深夜,终于慢慢有些雏形了。后来又跟婚庆策划谈了几次方案,终于也是赶在情人节前夜布展完成。
后来的几天里又为这个展览做了一个线上网站 —— 「yuloveboyi.com」,让没法来到现场的朋友们也能通过这个网站了解到我们想要表达的东西。
婚礼比想象得要热闹很多,许多亲朋挚友从各地赶来,见到了一些共事许久却素昧谋面的同事,甚至 Anthony Fu、面包等开源大佬们也来了展览和婚礼现场。
在所有不知名的角落
生活各自发生着
人们随机的聚集在一起
然后再散落到各地
庆祝喜事发生
于是 灯亮起
一位朋友在现场我和学姐互道誓词的时候有感而发写下了这段话发给了我。
我很喜欢的电影「土拨鼠之日」和「生活多美好(It's a Wonderful Life)」都有相似的场景,也像我们展览主题所想要表达的,两个尘世中的普通人各自生活着,被社会洪流浪潮推着迷茫地前进着,但也有自己光圈和画笔下的世界,倏地偶尔有一些交错,又偶尔有些分离。
我们在生活日常甚至是整个人生中积累起的小事和善意最终聚合成一个点,就像土拨鼠之日最后的 party 一样,菲尔和所有人都在生命的循环里相遇,或给予过善意,或产生过交集,最终,我们站在了生活的中央,所有人都为我们而来,一起庆祝,热泪盈眶。
婚礼后我们听到的最多的评价是“这个婚礼和我之前参加过的都不一样,很感动”,我们开心之余也有些疑惑。其实我们依然是一个传统的婚礼,精简环节或是自己主持也已经不算是什么新鲜事了,那最终在大家眼中不一样的点究竟是什么呢?
我们思考了许久,想到的答案是 —— “爱”在这个社会本身已经是一个稀缺品了,这里的爱不仅仅说的是男欢女爱,而是更广义的对生活的热爱、对美好的向往、对他人的善意。
不仅如此,表达“爱”则更加珍贵,或许我们只是将自己生活一角展示出来了,却也足够触动人心。也隐隐地觉得,或许我们坚持要去办这样的一个展览,也是想通过这样的方式去传递爱本身。
婚礼结束已经几周了,带来的能量仍有余温。想到之前总是在纠结与质疑做这件事的意义,现在想想或许也只是借口,让美好的事情发生本就是生命最重要的意义。
我们婚礼和展览请了一位摄像全程记录,视频已上线「清单人生 | 我们主持了自己的宝可梦婚礼,还为它办了一个展」,P1 是一个短片,P2 是全程记录,欢迎大家一起走进我的回忆。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- SumBuddy - 一个自由的浏览器 AI 阅读助手
- The /llms.txt file
- Pixelated MacOS Icons
- Strapi 5 Docs
- Svelte 5 Docs
- GitHub - CopilotKit/CopilotKit
- Next-gen Web Extension Framework – WXT
文章
- 天台山国清寺周末小记,终于蹲到学姐更新文章了!
- 我如何使用 Apple Notes 做笔记,试用了一阵子,最后由于 markdown 支持的原因换到 Obsidian 了,但保留了完全一样的 PARA 目录和思路。
- 一件关于帮助的小事,很真诚动人的分享,也传递/激发了做一些 random kindness 的欲望。
- A Decade Later, A Decade Lost,touched.
- Post 43: Intentionally Making Close Friends,所有的情感/关系都需要用心“经营”。
- MCP 终极指南,初步体验了一下 Cursor 的 MCP 但没有作什么生产级的用途,有点好奇后续的应用场景。
- 迷雾 - 静かな森,喜欢看 Innei 的手记,提醒我周末也该更新周报了。
- React Libraries for 2025,看看前端最近在用什么 👀
- 我的第一款 Chrome 插件以及 AI 时代的思考,LLMs 时代写代码功能完美实现了但对原理“一知半解”的情况确实越来越多了。
- Cursor for Large Projects,最近工作里已经有很多任务 Cursor 在做了,学习优化一下使用方法。
视频
- 【4K】Maroon 5 - Sugar
- 带 Kat 回我的农村老家过年,我含泪笑了……
- 2025 年了,还有人谈恋爱吗?【2025bilibili 混剪大赛】
- 第一次约会的女生,无名指居然带了戒指?
- 伍尔夫【达洛维夫人】选择情感无能的人生还是追求白月光
- 金融行业程序员转项目产品岗,半年不写代码,最重要的收获是什么?优势和劣势 | 技术背景 | 沟通 | 乔布斯关于流程和产品的洞见
- 从职场争斗到负债逆袭!离开字节后,我找到了人生的终极答案
- 除了更多裁员,AI 还能带来什么?【AI 中局思考 01】
- 可能是方大同新专辑的唯一专访!丨真假方大同终于同框丨 HOPICO
- 在安徽,扛巨型⻥灯是种什么体验!
- 我的人生目标,就是和你维持现状!|北海道旅拍
播客
书籍
电影
- 如父如子,喜欢是枝裕和的节奏和画面,但这部的内心转换和表现力比较一般,对于父子关系的阐释也只是浅尝辄止。
- 好东西,话题性和拍摄手法都很惊艳了,也很切女权这类社会议题,“正直勇敢有阅读量”也莫名有些燃了。
- 爱情神话,很喜欢,《好东西》的同一个导演,相似的叙事风格,但更加日常和内敛,反而更能感觉到内核,因为刚办完展也更加有一些感触,关于生活和个人表达。
- 孤注一掷,剧情有点过家家,但紧张感和压迫感渲染得还不错,再加上对于我这个行业以及经常在泰国待着的体验来说有种别样的真实感 🤣
动漫
- 英雄联盟:双城之战 第二季,品质依然很在线。
- 葬送的芙莉莲,连载的时候每周追,剩下最后两集居然这几天才补完,设定很棒,节奏也很舒适,很让人心静的一部番。
- 瑞克和莫蒂 第六季,补标。
剧集
- 人生切割术 第二季,在看。
- 不够善良的我们,前两集的视角切换和巧合还有些新颖,但剧情走向逐渐离谱,有点强行结局的感觉,很一般。
- 沈醉回忆录,作为了解军统历史还不错,但是自传中难免的自我粉饰以及很多政治需要的自白看久了有点累。
- 最后生还者 第一季,节奏很好,前几集的独立故事线很精彩,看了剧会想去了解游戏的程度了。
- 我的阿勒泰,不拍第八集的话觉得还是可以给到四星的,最后硬要制造的冲突有些没必要。
音乐
周报 #86 - 用影像打败时间
前言
本篇是对 2025-01-27
到 2025-02-02
这周生活的记录与思考。
用影像打败时间
「用影像打败时间」 —— 这是我很喜欢的 Up 主「小鹿 Lawrence」工作室的 Slogan。
他的视频就像是会说话一样,能够呈现他当时所想要表达的心情,也能够一下子把我拉回我当时看到这些画面时的心境。而对于我来说呢,文字似乎是更惬意省力的一种方式,用周报和一些心情日志留下了这些年的想法和变化,可以抵抗遗忘,可是影像依然有它独特的魅力,一种能够将时间凝固的能力。
我有几年挺爱街拍的,不管去哪出差都带着相机,似乎想把眼里的风景都记录下来,有时候反而过于追逐画面,而忽略了当下的心情;而又经过了一个阶段,自己似乎更爱画面的主题性了,在按下快门之前总是思考很多 —— “这个画面想要表现什么或是讲述一个怎样的故事”,有时候追求意义太过,反而留下太少;而近两年,却又因为忙于生活中更具象的体验,而很少拿出相机了,在最近整理一些素材时,发现有很多记忆的缺失。
最近买了一台新相机,富士 X100VI,这个价位之下却只是 APSC,也不可更换镜头,性价比和实用性上远远不及我七年前买的 Sony A7M3,但它复古好看的外观和轻便的体积却让我更有拿去它出门的欲望,爱不释手,这样的心情之下反倒留下了许多有意义的画面。
前段时间领证在小红书上找了一个胶片跟拍,他带着我们在杭州运河畔的小河公园中拍了一些照片,质感很不错,我们在重新翻阅这些抓拍的画面时也常常能回想起当时的场景和心情,于是萌生了给父母和妹妹也拍这样一套写真的想法。
父母相恋近三十年,彼此陪伴经历过许多风雨,但自我记事以来从未听他们吵过架,到了现在还依然甜蜜,或许我骨子里依然保留的对美好爱情以及婚姻的向往也多来自他们。
但爸妈都算是不太爱拍照的人,其实我们家庭也从来没有类似相册这样的存在,即使是在我买了相机开始玩摄影后的几年,也很少有家人的照片。在我们的劝说之下终于一家人在一个午后出动了,走走停停,嬉笑打闹,晚上回家后在电视上投屏幻灯片播放所有的照片,全家人一起选片,偶尔也会被抓拍到的几个搞怪的表情逗笑。
不久之后又回了趟老家看望爷爷奶奶,他们已经近八十岁了,过了青春活力的时候,更不愿意拍照了,但还是拍到了几张。很有趣的是在给奶奶拍照的时候顺带采访了一下当时为什么要跟爷爷结婚,奶奶长长地叹了一声“唉...” 🤣,尽在不言中。
还有个番外篇就是刚好一位孩子刚满百日的高中同学邀请我们出来玩,还在约拍新鲜劲里的我们决定拓展一下婴儿摄影业务,带了两台相机去给他们拍了一些家庭里的日常,也很有趣。
父母亲人会老去,孩子会长大,时间会带走许多东西,我们无法阻止时间向前流动,但影像提供了一种与之对抗的方式,有时候无关技巧甚至是拍出来的成果,仅仅是按下快门的那一刻,一切都有了意义。
新年
All I want for new year is you.
这也是一套找摄影师约拍的照片,选了一个老街区拍的很日常的街景,或许没有其他人的婚纱照那样雪山、草原、大海那样的壮阔,却是我们彼此最珍惜的在杭州的日常的,对我们更有意义。
也祝大家新年快乐。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
视频
- vlog #87|忙里偷闲的下班学习记录|被买房、工作搅乱的生活节奏 - 中篇|烦躁的日子里,靠哲学导论续命|在读《也许你该找个人聊聊》|无氧运动上头中
- 被房贷“困”住半辈子的妈妈
- 美国旅行必体验!真枪实弹射击
剧集
- 我的阿勒泰,新的吃饭的时候看的剧。
周报 #85 - 京华烟云 Moment in Peking
前言
本篇是对 2025-01-20
到 2025-01-26
这周生活的记录与思考。
一直很喜欢 Moment 这个词,林语堂的「京华烟云」的英文译名就是 Moment in Peking,似乎把在一个城市生活过的痕迹和点滴具象化了,所以也借用一下这一名称。
Moment in Peking
去年年中的时候和学姐一起暂离了北京,在杭州生活至今。
曾经我们也会觉得北京的生活平常到有些乏味,城市很大,在其中的我们很小,每天忙碌行走在其中,常常忘记去感受,刚好有机会离开时甚至也没有多少犹豫,反而更多充满着对新生活的期待。
而恰好这一周要办一些事,因而决定一起回北京“度假”,故地重游,曾经觉得冷冰冰的城市却也因为一年多的点点滴滴而带上了很多美好,放慢了脚步去体验反而能感受到珍贵。
回想一下那一年在北京的 Daily Routine,似乎也很有意思。
每天早上七点多起来,切一些前一天晚上从超市下单的水果,做个煎蛋或是烤吐司后,匆匆忙忙赶着人流走上十几分钟送学姐去上班,有时还会约健身房的教练上课。
上午我通常会回家写代码,直到十一点多去公司门口接她下班;中午有时会点外卖,来了兴致也会自己简单做个炒饭什么的,会看《请回答 1988》、《机智的监狱生活》这几个剧下饭,然后午休一会儿;下午再把学姐送到公司上班,通常就会在学姐公司旁边的星巴克里一个有阳光洒进来的位置里办公,直到五六点再去公司门口接她。
晚上有时候会去旁边的商城闲逛一下或是去不远处的日坛公园散散步,回家路过菜场买点菜做点家常简餐,继续看中午的剧,看着两只小猫嬉戏打闹,各自看会书写点东西,结束一整天。
到了周末有时候会去画室画画,我大多坐在家长区拿着电脑办公或是开会,偶尔看看她,有时也会瞥到学姐偷瞄我是不是在看她,装作若无其事的样子。
大部分时间也只是在家看看剧,却又因为提前约好的健身教练而挣扎着收拾出门;偶尔也会看一些展览或是音乐会 dating,有时也会惊喜地遇到像是朝阳啤酒节或是「小鹿 Lawrence」在 Apple 三里屯举办分享会这样的有趣活动;彼此也会去见对方的一些朋友,吃饭聊天,或是邀请他们来家里作客。
学姐说我这最近几个月里似乎因为工作压力或是生活琐事叹气的次数变得更多了,却也要扮个鬼脸强装没事,偶尔也有提到似乎在北京的那段时光更开心一些,不用思考那么多事,只需要简单生活。
但又想想,当时的自己其实也有很多迷茫的时刻,只是回头来看却已经是很幸福了。时间有自己的尺度,一切的开心或是烦恼也都是相对的,现在的我们似乎有时候也会陷入当前生活的困境中,但或许未来的某一天回头看,也会说
“在杭州的那段时间真快乐呀,有那么多时间,有家人猫猫,有相爱的人,能一起做那么多事。”
在北京还有很多课没上完,这次回去陪学姐去画室画画的时候,自己也尝试着画了下在杭州的工作区,这也是我每天待得最久的地方了,感觉通过画笔留下这些也很有意思。
这是我第二次尝试油画,第一次也是在同一个画室,画了自己现在全平台在用的头像。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
视频
剧集
- 我的阿勒泰,新的吃饭的时候看的剧。
游戏
- 双人成行 It Takes Two,玩了好几关了,感觉难度和游戏性很设计得很折中,我这种手残回合制玩家也能有不错的体验。
周报 #84 - 想起他们 Echos of Reverie
前言
本篇是对 2025-01-13
到 2025-01-20
这周生活的记录与思考。
这一周发了一些婚礼的邀请函,回去见了初中老师,还回了趟老家看了爷爷奶奶,很久违地高密度地想起或者说是回忆起自己这二十几年的生活,感慨之余也开始接受过去的许多人事物已经慢慢远去。
生活早已远去
最近在发婚礼的邀请函,是一种很神奇的体验,似乎需要在人生进度条百分之二三十的时候,去细数一下过去走过的一些痕迹,以及身边还剩下些什么。
我算是一个客观主观上都“颠沛流离”的人,在江苏老家生长到八九岁,小时候应该是有不少在乡间一起玩闹的小伙伴的,但离开的时候总归是太小,十余年后有一次回老家爸妈指着一队人跟我说“这是当时跟你一个班的 xxx,你们之前玩得很好”时我已经连样貌都完全记不清了。
八九岁时转学到了杭州,带着些乡音有些蹩脚的普通话、内向到有些木讷的性格以及不安全感让我有些难以融入这个新的环境,再加上遇到了并不那么好的老师,但好在幼时的自己心思也单纯简单,总是逆来顺受,倒也算是“幸运”地度过了那段时光;进入了初高中之后遇到了很好的老师,也交到了朋友,似乎对于杭州也慢慢有了更多的归属感,然而在只身去了武汉上大学之后,多数杭州的朋友变为寒暑假限定甚至是几年也难见上一面。
再到后面似乎走得更远了,在武汉度过了人生重要的几年时光,遇到了至今还常常会夜谈的舍友/好兄弟;再是香港、北京以及远程办公之后不再拘于地域认识的更多的朋友们,认识的人总是越来越多的,留下的却越来越少,太多一面之缘。
自己在每一个地方待的时间都也算不上太长,很多昔日故友也都在距离和各自人生际遇的改变中慢慢远去。我似乎之前总是自诩为一个念旧的人,过去的东西总是不愿意丢即使已经不断在侵占自己的生活空间,但似乎在现在这个节点重新回头看,这或许只是对过去自己的一种怀念,时间不断向前,生活也早已远去。
想起他们
前段时间在循环毛不易的一首《想起他们》,是我很爱的博主「小鹿 Lawrence」做的 mv,开篇的第一句就是:
你们和曾经最好的朋友,最近还有聊天么?
一年多前,我和曾经的一位挚友不再联系了,因为一些矛盾。
成为朋友大约已经十四五年了,超过了我目前人生的一半长度,彼此算是见证着成长和人生起伏的人。这一年多里有时候也会在想,如果过去的十几年里没有他的存在,我会是什么样?也会感到有些遗憾,何以至此。
前段时间去见我们共友/初中老师,聊了许多,曾经的很多事,我们矛盾的始末、各自的感受和现在的生活。了解到似乎他的生活并没有很大的变化,倒是我自己在短短的一年里似乎已经习惯于脱离过去的那个自己了,人总是会在生活与生命的不同阶段寻找不同的自我的,就像歌词里说的
“现在长进了么 我不觉得
能困住我的事情 还有好多呢
那 变得更弱了么 我也不觉得
毕竟那些经过 得算些什么”
聊完后有一种释然,算不上了却心结,但似乎更像是一场道别,跟过去的那些事,连同那段时间中的自己。
“有人在我身边 往来穿梭
留下一部分他们
带走一部分我”
老师最后问了一句,你们会想着再和好么?
我想了想,或许也只会等两个人都到了新的阶段,在未来的某个节点,重新认识吧。曾经同行,感谢和抱歉或许也都不会再说出口,而是化为一部分的自己,带着过去的欢喜和遗憾前行。现在的我似乎更成熟了,有了更认真去经营的生活,面对新的朋友新的经历也默默地告诉自己切忌“交浅言深”。
人只有慢慢长大,这个世界才会向你展现全部的真相。过去这些经历也都藏在我与这个世界往来的分寸中,化为某个黄昏突然的想起,或是化为未来的一句“好久不见”。
周报 #83 - 年初收纳(房间、设备、服务、软件)
前言
本篇是对 2025-01-06
到 2025-01-12
这周生活的记录与思考。
这一周整理了自己的房间、抽屉、NAS、线上服务、网络环境等,实现了物理与虚拟空间的断舍离、收纳和优化。
房间整理
我大体是一个懒于整理房间或是收纳的人,但由于通常也就是在电脑前工作、学习或是放松,基本上没用到家中的什么空间,所以倒也算不上乱。
但由于最近工作和各种事项日渐忙碌,以及和学姐对于各自独立空间的需求,我开始把自己大部分的生活空间放回到我自己的租屋,也就趁此机会彻底整理了一下,花了大概六七个小时,最终收拾完的时候能够感受到由生活空间的整洁带来的秩序感。
网络管理
我租的房子是一个几十平米的 Studio(大开间)户型,不太需要组网之类的,由一台高达主题款的 Asus RT-AX86U 路由器提供所有的网络,也没有怎么刻意折腾网线布局,靠近路由器的地方有一台 DIY 的 NAS 和一台懒猫微服是直接通过网线连接的,剩下所有设备都用的 Wifi 连接,基本上在房间内感受不到网速有什么瓶颈。
宽带是电信的千兆光纤,并且向运营商要了 ipv4 公网 ip,在 NAS 上安装了 ddns-go 服务,动态地更新公网 ip 的解析,并且通过路由器层面的端口转发暴露一些必要的网络服务供自己不在家的时候使用;后面觉得公网 ip 直接暴露的方式还是有些不太安全,于是又通过 Tailscale 搭建了一个私有网络并在之前活动便宜囤的一台上海的服务器上自建了一个 Derper,实现所有设备直接的网络联通,目前使用下来感觉是更好的方案(之前也用过 Surge Ponte,不过可能用的时候还比较早期并不算稳定,所以换了方案)。
Asus 的路由器可玩性很高,刷了梅林固件,安装了 Clash 应用,自己写了规则接管和分流了家里的所有设备的网络流量,所以家里的其他设备也都无须再折腾网络代理了。
存储管理
我之前其实一直没怎么注意过个人存储的,主要就是靠一个 1T 的三星 T5 SSD 移动硬盘来存一些重要文件,后来又开始用 OneDrive 来云备份,但最近在有了 NAS 和懒猫微服后,又重新整理过自己的整个存储方案。
首先因为 Macbook 是 1T 的,本地会保存大部分重要文件,然后因为通过土耳其区的 Apple Store 购买了 2T 的 iCloud 空间,所以 iCloud 云端也有一个备份;然后会把所有的视频和照片同步到 openmediavault 的 NAS 上(8T RAID 5),懒猫微服上也会有一份(8T RAID 0),这样基本上对所有文件都有些保障(也使用了 rsync 来自动同步更改,不过感觉对于大文件不算稳定,大部分时间还是手动)。
数码设备管理
家里的 Apple TV,直接连着坚果 O1S 投影仪,这款是短焦的,所以直接贴墙使用就能够投出不错的画面,也不用担心遮挡这些,家用还是挺足够的,也默认连着一个 Homepod mini,平时用来当动态墙纸放歌也不错,构成了我的影音区;租的房间里自带了一台电视,连了我的 Nintendo Switch,旁边还有一台 Steam Deck,也可以通过 type-c 线直接连到电视上玩,也算是有了一个独立的游戏区(虽然很少玩了)。
前段时间进行了一波电子设备的断舍离,把 Mac Studio、Chromebook 和不算常用的屏幕、键盘、充电宝等都出了闲鱼,日常办公就只剩一台 14 寸的 MacBook Pro 了,在家里会直连去年买的几硕的 FlipGo 便携显示器,这样就相当于有了一个 14 寸的主屏和两个副屏,出行也直接线一拔,不用像之间一样考虑两台设备的配置、软件统一,开发环境等,反而能更专注一些。
宠物设备管理
捏捏很多时候会在我的房间,家里的宠物基本上都是小佩(PetKit)家的,全自动猫砂盆、喂食器和饮水机,真的是让养猫体验 MAX,一个 App 管理所有的;还有一个米家的摄像头观察家里整体的一些情况,其他智能家居暂时都没怎么启用了,不过还是想着折腾一下用 Home Assistant + Home Bridge 把所有的都聚合到 iPhone 的 Home 应用里来一键管理,最近弄一下。
相机整理
相机现在有三台,2018 年买的 Sony A7M3,前年买的 Sony ZV1 Mark II,和一台刚买的富士 X100VI,也做了很好的分工,A7M3 连着罗德 Wireles Go 麦克风,配合着一个百诺的脚架,常驻着放在办公区背后,减少拍摄视频的筹备流程,基本上能做到随时开录,而有些对着电脑的音频录制、教程则是直接用 Shure MV7 连着电脑来录,希望今年能够更多一点产出;出门的话则是直接带着 ZV1 拍视频,没有其他什么配件,就用自带的机身麦克风外加了一个官方的手柄,基本上随开随录,旅行和日常记录很足够;出门街拍就完全用 X100VI 了。
服务整理
网络代理
目前最影响日常生活工作体验的就是网络代理了,线路方面自己用 CN2GIA DC6 的一台美国机房搭了一个 trojan 节点,再加上朋友的一台新加坡的 ss 节点,基本上满足了日常需求;然后也有两个机场作为 fallback 和代理一些流媒体,比如 HBO Max,解决一些区域限制问题。
而由于 Mac 和 iPhone 上惯用的是 Surge,而路由器只能用 Clash 规则,常常不方便统一管理,于是用 Surgio 这一规则管理工具通过 GitHub Repo 维护和同步远程规则,更便于管理,自己也日常不断微调分流规则和一些配置项,更适应自己的各类需求。
自托管服务
我的大部分静态网站类服务都在 Cloudflare、Vercel 和 Zeabur 上,而容器类服务则是分布在各种 VPS、独立服务器、NAS 和各种 serverless 平台上,最近整理的时候也作了一大波迁移。
Zeabur 貌似最近计费方式有了一些变化,感觉费用明显上涨,在没新增服务的情况下这个月超了 Developer Plan 5 美元额度不少,所以把一些消耗资源或是流量请求很大的都迁移走了,只保留了一些低消耗但对稳定性要求比较高的服务,例如博客访问统计系统这些。fly.io 因为还有免费额度,上面只跑了我博客的 Remark42 统计服务,也迁移到了最便宜的 IAD 区域,挂载了 3GB 的 Volume,基本上能控制在免费额度之下,持续观察中。
由于之前有个比赛奖品之一是一年期的 AWS 一万多美元的 Credits,所以在机器上使用 Coolify 进行管理,把大部分的自用服务/开发环境放在了一台 8c32g 香港机房的机器上,可以直接使用现成的 Docker Compose 文件进行部署,也可以使用 Webhook 联动 GitHub 触发,基本上满足了我的需求,可玩性和定制化程度都要比 Zeabur 使用 k3s 的方案要高不少,数据库类的应用还很方便直接使用 S3 进行备份,等 AWS Credits 到期后可能也会迁移到 OVH 或者 Hetzner 独服上。
软件应用
我是一个对软件工具很挑剔的人,不过从今年开始也开始主要降低手机上各类 App 的使用,电脑上也尽量简化了工作量和干扰,开始更多体验和支持一些独立开发者的项目,其他的软件工具等最近在 「GitHub - pseudoyu/yu-tools」会再更新一下,这里主要讲一下 AI 工作的使用。
目前最高频使用也是依赖的是 Cursor Pro(年付了),日常使用它的补全、CMD+K 以及 Composer(Agent)模式进行工作和各类项目,都依赖的 Claude 3.5 Sonnet 模型,已经能协助我完成大部分的工作。另一个年付的是 STRRL 开发的 Haye AI 项目,日常绑定了一个 CMD+E 快捷键来优化我的一些英文写作,也很偶尔地用它的对话框功能。
GitHub 一直给我续着 Copilot,我使用 ChatWise 项目来绑定使用 Claude 3.5 Sonnet 模型来进行一些小的编程类问题的 Chat,也绑定了我在 NekoAPI 和 burn.hair 上的 API Key 来使用 GPT-4o,ChatWise 还绑定了 Tavily 的 API Key 来启用 Web Search 功能,可以代替 Perplexity 来使用;另外就是在 Kagi Search 的三个月试用中,作为一个搜索引擎其实倒是没有什么体验上的感知,不过还是有明显地减少我对 AI 生成内容的依赖,其实整体得到的信息质量是有提升的,但是 Kagi Summary 等功能几乎不太用。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- GitHub - egoist/sitefetch: Fetch an entire site and save it as a text file (to be used with AI models).
- tldraw computer
- GitHub - phidatahq/phidata: Build multi-modal Agents with memory, knowledge, tools and reasoning.
- Tailscale · Best VPN Service for Secure Networks
书籍
文章
视频
- 2025 年了,手机能拍电影吗?
- vlog #86|新年大扫除之后的晚间学习记录|还在开发时间管理 APP|读《荒原狼》《消失的多巴胺》|在学「哲学导论」,超级有意思✌️|尝试练习无氧的第一周
- 【谜之声&鲨鲨】今年年初,我们去冰岛办了场婚礼
- 回家 3 天:无根的我在离开的飞机上泪流满面...
- 我领奖时,为啥不笑?|2024 年终总结
- 来了来了!我那些超好用的剪辑技巧
- 背包大分享!2025 出门必备相机
剧集
- 去有风的地方,每天吃饭的时候看的,感觉还挺喜欢这种没太多 drama,只是比较平静地展示生活日常的日常向的剧了,也有点想去云南看看
游戏
- 双人成行 It Takes Two,玩了好几关了,感觉难度和游戏性很设计得很折中,我这种手残回合制玩家也能有不错的体验。
周报 #82 - Brand New Year 与写日记
前言
本篇是对 2024-12-29
到 2025-01-05
这周生活的记录与思考。
2025 的第一周似乎也因为更换了年份而被赋予了特殊意义。更多计划一些习惯养成,用纸笔做日程管理,也开始在本子上写日记,记录一些零碎的生活思考;给父母进行了一场约拍,留下了在杭州的点滴记忆;跟学姐一起在 Switch 上玩「马里奥赛车八」和「双人成行」,很放松;还有很多有意思的事。
Brand New Year
今年也按照惯例写了年终总结,说是惯例,生日的总结确实是从 2022 年开始就坚持了下来,去年年末却因为状态确实不太好而搁置了,不知不觉一年也就这样过去了。而今年虽也匆忙,但总还是想着自律一些,想给未来的自己留下些什么。
写完后其实有些丧丧的,分了几个小主题来陈述一些思考,最终还稍稍上了点价值,然而实际情绪要低落得多。我应该已经算是努力了吧,工作、技术提升、side project 都有在推进,有更多陪家人,婚礼也在事无巨细地筹备。
我有努力平衡好这一切,但似乎还是很难都做好,甚至对短视频深恶痛绝的自己在几个夜晚毫无目的地随着 B 站的算法推荐刷到睡去,早早关闭朋友圈的自己有时候也会无意识地刷推,终究还是向虚拟世界索取了一些东西。
元旦的第一天就并不算很顺,车子刮了一次,还莫名其妙地因为在等待前车堵着的时候被后面暴躁的司机莫名地骂了,自诩情绪稳定的自己在一整天的积压之下也还波及到了学姐,真是糟糕的自己。
晚上甚至有几个瞬间悲观地想要破罐破摔,新的一年大概也就像这样了吧,晚上学姐发了几十张她相册里的照片,说「这都是 2024 年的你」,温暖而感动。
其实 2024 年也尝试和完成了很多有意思的事:
- 坚持了很久的私教健身
- 体验了油画和油画棒,画了自己现在的这个头像和一些生活碎片
- 去巴厘岛旅行,在库塔体验了冲浪
- 家庭旅行,带爸妈、妹妹去内蒙玩/见学姐父母
- 在北京鼓起勇气约了偶像 Randy 见面,后续还一起做好多好玩的事
- 在 Adventure X、ETH Shenzhen、OSPP 等很多活动中担任导师,还在清迈 Invsible Garden 中第一次尝试为期一个月的英文讲课,还认识了一些有趣的其他 mentor
- 在爸爸的汽车修理厂里墙绘
- 重新捡起了滑板的爱好
- 学会了驾照,去杭州周边的一些地方以及南京自驾游
- 2024 年 9 月开始坚持(并不那么严格的)素食,也坚持了一个多季度了
- 和学姐去清迈、曼谷,第一次体验了瑜伽、打坐,还去看了日出
- 一起回到了香港,见到了对彼此都重要的一些朋友老师
- 五音不全的自己也和学姐一起报名了声乐课,学习了方大同的「特别的人」、张信哲/刘嘉玲的「有一点动心」,正在学李健的「假如爱有天意」
- 买了新富士相机,给父母、妹妹在小河公园约拍
- 求婚、领证并筹备婚礼
原来细数这一年也做了很多有意思的事,很多事都是第一次尝试、是一年前的自己完全想象不到会去做的,以及,几乎每一件事,都有学姐在身旁。
在已经到来的 brand new year 中,希望自己也能继续前进。
日记
我是一个非常电子化的人,之前折腾了很久的 Notion、Logseq、Obsidian、Apple Notes 还有 Things 等等软件,也尝试在 Notion 上每天写日记,但是总感觉非常难坚持下来,或是写的内容回头来看总是形式大于内容。
最近在看了「A notebook to save you from infinite scrolling.」这个 YouTube 视频后开始重新思考这个问题,刚好又在「加谬手记」中读到了他对自己写记录制定的规则:
规律记录,而且不准多话。持之以恒,专心致志,不为任何外在眼光或满足自身虚荣而书写,并要专注于身(行为)心(思考)之修养并在两者间取得平衡。
我也有尝试过在 Telegram Channel 中更新每日一些细碎想法并每周组织成周报,坚持了一周多发现一旦心理上设定为「write in public」后,写下的东西就多了一些矫饰,会多一些美化而很难展示当下的两面性,在回顾时又需要花额外的经历从这些文字中剥离出更真实底层的念头。
学姐倒是一个常写日记的人,在她之前的一篇博文「失去的表达欲」中也表达过类似的想法:
也因为自己感受到的世界因日增的思考体悟而不断移步易景,所以表达欲渐渐丧失,总觉得自己能讲述的太浅薄,有些结论太武断。此外,日记倒是常写,但如果写博客,就难免会有想象中的读者。如同日常在家中横躺竖卧,偶尔也可能邋里邋遢,但客人到访难免收拾一番,展示美好景象。一旦开始公开表达,就难免会矫饰,我不喜自己可能会透露出的虚荣或自负。(就在此刻,我的自负在于标榜自己是个不爱标榜自己和不自负的人。)(就在上一刻,我的自负在于自己虽然自负,但标榜自己并不以自负为荣。)
虽开始写作就难免需要克服这些障碍,但日记这种形式还是能够少一些镣铐,无需顾虑太多。于是新年多了两项 daily routines,一本是日记,记录一些日常的人事物和思考;另一本则是日程表,作为 Life Tracker 来记录一些习惯养成、重要事项/节点与日常的一些待办或是 random thoughts。
日程本子很有意思,有画格子记录自己的一些习惯养成,就像福格行为模型中叙述的一样,只是多了一点点仪式感或许就能够让自己整个状态都变得不一样;而日记从最开始写得长长的冗杂的想法,到现在已经可以几句话讲出最重要的一些思考,更真实随意,也少了一些“写下来”的心智负担。
于我来说,日程本和日记更侧重于记录与回溯,日常的工作与笔记还是会在电脑上用 Obsidian 与 Things 完成,而每周末的周报则像是在上述的这些记录之上再进行的一些整理和呈现。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
文章
视频
- 1 个招牌能买 1 套房?霓虹灯为什么消失了
- 《 哈 利 波 特 与 中 国 麻 瓜 》
- 2024 年终观察(上):大增长后的叙事空洞
- 去江浙沪垫底的旅游城市旅行,发现了躺平胜地?
- 我被困在了 2024 年 12 月 31 日。
剧集
- 鱿鱼游戏 第二季,第一季倒也是就是下饭看了下,感觉第二季更加立不住了,反叛、反转都有些太意料之中了,人设也不是很立体
2024 年末回顾 - 不完美的日子
前言
今天是 2024 年的最后一天了,但大概是由于每年生日刚好是在年中,会依例写一篇总结,再加上虽然常常不准时但累积着还是写了三十篇周报,所以其实在此刻回顾这一整年倒是并没有那么遥远了。
短短半年,似乎一切又有了很大的变化,2024 年末回顾也如约而至。
关于 2024
其实一直没有勇气回头翻看 2020 年自己写过的这一篇总结「23 岁的自白:去追寻意义」,那时的自己少年意气,对生活与未来无所畏惧,写下的文字也像是对过去努力的自己的一个颁奖礼。
而今年呢,马马虎虎吧,立下的很多 flag 没有实现。
年初体检查出了一些问题,当时说这一年一定要优化参数,等明年再体检时能少个几项,然而运动和饮食都并不算理想,现在甚至也只能暗暗祈祷不要再多出一些问题;工作和技术上当然是有进步的,但也依然和自己期待得相距甚远,甚至静不下心的时候还变得更多了;爱好方面,拍了很多素材,却没能剪出哪怕是一个自己满意的视频;摄影也搁置了,甚至出门拿起相机的次数都并不多。
有时候看着 polebug 的视频,很羡慕还可以这样坚持做自己喜欢的事,而我似乎心有余而力不足的事越来越多,虚度了许多时光,但每一天还是慌慌张张地被生活裹挟着前进。
前几天又重温了「土拨鼠之日」,菲尔被困在普通的一天的循环中,同样的人事物经历了无数次,绝望而麻木,直到开始尝试改变、尝试去爱,最终让这一天变得特别。
我们没有重新改变这一天的能力,每天也都是不完美的,但或许可以把每一天当作土拨鼠之日,换一种角度和心态去重新赋予这一天意义。
关于成长
年中的自己挣扎于成长的人生命题,在「27 岁的自白:成长是一件很扫兴的事」中思考自己是否真的有足够的勇气成为一个合格的大人,半年过去了,依然不确定自己找到或是靠近了答案。
但似乎已经开始慢慢适应和接受了自己就是一个普通的人,也不再是那个能够任性不顾一切恣意生长的自己了。
这个世界本就不是以我们为中心的,也并不是所有的事情都能够按照自己期待的样子发展,但或许还能依然坚持着不被这个社会打磨成一个圆滑世故的人,依然能够拾起对生活的热情、对他人的善意和面对未来的勇气。依然会平凡而认真地生活着,依然能够让 10 年后的自己为现在的我感到骄傲。
关于家人
自己一直算是一个独立的人,过去的二十几年里也算颇为自洽,习惯了不依赖家人,也能为自己的选择与决定负责。
因此也并不算是一个恋家的人,从大学开始独自在外游荡了快十年想家的次数也屈指可数,但从今年年初开始重新回到了杭州生活,与父母和妹妹距离更近相处更多了,似乎才开始理解家和家人对我的意义。也更真切地发现自己原来已经是家人遇到问题或是重要决策时会第一时间想到或是依靠的人了,在不知不觉间,自己已经能承担起更多责任了。
父母日渐老去,该是我接过生活的接力棒了。
关于爱情
年终的另一个重大的变动是和学姐领证结婚了。
其实直到现在还常常没有什么实感,有时候在填写资料时看到配偶一栏还是有些恍惚,有朋友好奇地问我说“结婚后有什么变化么”,我认真地想了想,发现其实相处模式也没怎么变,甚至各自独立找寻自我的时间还更多了,因为未来还有无数个在一起的日子,不急在一时。
“来日方长”有时候也是一个普通而浪漫的词,因为坚定地选择与被选择着,时间似乎也也变得缓慢而漫长了,任何细碎的日常都变得很美好,比如窗口洒进的几缕阳光,比如一束好看的花,或者悄然的一个吻。
人和人各不相同,所以相逢才有了意义,我们各自人生走过了许多风景,而如今,我们也成为了对方眼中的风景,很幸运。
后记
新的一年其实并没有打算再立什么很宏大的目标了。
能更多关注自己和家人的身体,相伴度过漫长岁月;工作和生活能有更好的平衡,多追求一些热爱的东西;买了新的相机,每天多留下一些生活的片段和眼中的美好;把囤着的视频剪出几个来,也持续记录更多,用影像打败时间;认真生活。
日子都是不完美的,生活的本质亦是如此,不够美好但也并不残酷,但即使自己并不能真正触碰到月亮,也依然要抬头仰望,伸手去摘、去够。
祝 2025 年的自己,快乐。
周报 #81 - Engaged -> Married 与时间的尺度
前言
本篇是对 2024-12-09
到 2024-12-28
这两周生活的记录与思考。
最近忙着结婚周报又拖了。
Engaged -> Married
Got married today and can’t wait to share my life with you forever.
最近听到身边说得最多的一句话就是 —— “你们好快呀”。
确实,从 12 月初求婚,到密集地跟婚庆的各个环节沟通,再到平安夜领证,似乎一切都发生在短短的一个月里。最开始其实有不少彷徨和迷茫,甚至压力大到生了接近半个月的病,但随着开始用 Things 和 Obsidian 开始做规划和会议纪要/策划,当作一个项目来管理,似乎慢慢清晰了很多,虽然依旧仓促,但逐渐也能够享受其中。
婚礼在明年年初,从月初就开始了 100 天极限备婚,幸运的是父母并不干涉我们的各种计划,使得有些想法得以按照我们的想法去实现,比如宝可梦主题、砍掉了婚礼大部分环节、不请司仪自己主持、婚宴现场无烟、不拍婚纱照而是改为日常些的约拍以及还在策划的一件有意思的事,在完成父母家长心愿的同时,也保留了自己的一份期待。
领证当天找了一个胶片摄影师在附近的公园里约拍了一些,风格还挺喜欢的,图片太多就单独发下一篇写真作为纪念了。
时间的尺度
上周末由于要置办一些物件,和学姐一起回了香港。虽然这两年有因为参加活动等各种缘由回过几次香港,但这次才深切地感受到距离当时来香港上学已经和学姐初见已经过去了四年之久。
是啊,已经四年了。
刚好前两天好朋友/大学舍友给我发了一些 2015 年刚到学校军训时间的照片,说在回想自己这十年是怎么浑浑噩噩地过来的,当时初离开家到一个陌生的城市,满是青涩稚嫩,到上课、毕业、工作,直到现在。
这十年于我而言倒是没什么好后悔,我一直觉得人生是连续的,当初的得失也都内化与构成下一个阶段的自己,缺少任何一段经历或许都会截然不同。
就像「时空恋旅人」电影里的那样,越到人生后面的阶段,有了更多没法舍弃的东西,即使真正拥有了能够回到过去的能力或许都不会去改变什么了。
只是当时间的尺度这样摆在面前时,依然会有些难过。
有时候和学姐闲聊的时候会很无意识地说“我当时初中体育中考 1000 米跑了 3 分 19 秒,后面再也没有超过这个成绩了”、“我大学在学校工作室创业可以同时做好多事,现在精力也不如之前旺盛了”等等,学姐有时会打趣道开始回忆当年勇就快要步入中年了。
慢慢其实也在经历完整的人生。熬过外婆病痛离世的至暗时刻后甚至又遇到了跟我一起长大的表哥的意外身故,半年内失去了太多;一天天看到父母明显老去的面容,自己的身体和状态也开始出现了大大小小的问题;遇到心爱的人,养了两只猫、恋爱、求婚与结婚。
人是无法去对抗时间的,想到这一点就总是有些伤感,但忆及过往时也只是会羡慕一下过去明媚的那个少年,然后继续在当下认真生活,有点像是在用现在的努力去救赎未来的自己。
有趣的事与物
开源
全职开源第二年,快乐了许多。
入坑富士
用 Sony A7M3 已经七年了,虽然很够用但总觉得每次出去拍照的心智负担很重,也常常积累很多素材迟迟不修图,因此这两年去了很多地方却没留下多少照片,甚至还是在买了 Sony ZV1 Vlog 相机之后才多留下了一些影像。
早早过了追求和折腾参数的年纪,只是想多拍一些,于是这次去香港终于入坑了富士,买了一台 富士 X100VI,很小巧的相机,色彩和内置的胶片模拟可以基本上摆脱修图了,希望未来的一年里能多拍一些。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
收藏
- GitHub - Byaidu/PDFMathTranslate
- GitHub - leerob/next-saas-starter
- Twi.am
- GitHub - coollabsio/coolify
- GitHub - SocialSisterYi/bilibili-API-collect
- GitHub - Calcium-Ion/new-api
- FUJI X WEEKLY
- Film Recipes for Fujifilm Cameras
- GitHub - hoarder-app/hoarder
文章
- 2024 年数字工具箱
- 浅度剖析 B 站的新 -352 风控策略
- 透過 Zeabur Template 打造 Remark42 評論系統:完整部署與設定指南
- 现代 DeFi: Uniswap V3
- 懒猫微服使用体验
- 2024 · 前路未尽,初心犹在
- 2024:世有道则见无道则隐
- 2024: 在夜海中观望浪潮
播客
视频
- 我们仍未放弃缝补你,世界|《你想活出怎样的人生》
- 做自媒体,花 100 万装修别人的房子,值得么?小宁子工作室 Room Tour
- vlog #84|程序员下班后的学习记录|冬天宅家学习超快乐|React 上手中|读完《吸引力法则》啦撒花 🎉|保持学习与思考|什么才是成功的人生|TED
- AI prompt engineering: A deep dive
- 一张车票,就能重返 18 岁!你愿意吗?
- 混剪|“我长大后,一定成为不了心目中的大人。”
- vlog #85|做 24 年度复盘的晚间学习记录|一起给 25 年的自己写一封信 🎉|开坑「哲学导论」和《荒原狼》|仍然在为时间管理 APP 努力|保持输入与输出
- 热度破记录!什么相机 120 万人想买?富士 X100VI 上手
周报 #80 - 关于求婚、爱情与婚姻
前言
本篇是对 2024-11-29
到 2024-12-08
这周生活的记录与思考。
过去的这一周多做了件大事,求婚了,思考了很多婚姻与爱情;但由于筹备结婚相关事宜,累到身体和精力都有些不足,甚至久违地生了一周多的病;还有很多有意思的事。
关于求婚、婚姻与爱情
从泰国回来的我似乎给生活的方方面面按下了加速键,从一个普通的晚餐时突然决定要结婚、挑选两人心仪的对戒、回内蒙见学姐父母亲人、谈酒店和婚庆,到找摄影师约拍和偷偷求婚,有欣喜和快乐的部分,也有随之而来的焦虑、疲惫和自我怀疑。
关于求婚
其实在此之前的我们都并不觉得婚姻是什么必要的东西,也从未觉得这一人为的社会约束和爱情有什么必然的联系,甚至隐隐有些害怕这些强加的流程和“仪式感”反而会消耗本就珍贵的爱情浓度,觉得一直这样相爱也不错,至少于我们两个个体而言。
但似乎真的存在一个 moment 时刻,觉得想要和这个人未来能一直一起生活,得到所有人祝福地一直在一起,于是“我们结婚吧”这一念头乍得浮现。我不知道是不是所有的恋人伴侣都会经历这一刻,很神奇,像是一种感性先于理性的冲动,自然而然地发生了。
而关于求婚本身,看了非常多的视频,有「小鹿 Lawrence」在「我 求 婚 啦 !!」的天花板级浪漫, 有「KatAndSid」在「七年长跑,我求婚了,在鲸鱼的见证下」的专属意义,也有「树洞里的理查德」在「我在秒速五厘米的电车前,向十年前喜欢的同学求婚了」里的娓娓道来。一遍一遍地刷,似乎却还总是会被他们的爱情一次次感动到。
而我对此似乎始终有着一些私心或是执念,我也想要一个很酷很厉害的求婚和婚礼,和大家都不一样,像 Sid 在视频中所说的:
我们的浪漫会变成一种主义,去盛行于世,久久不息。
但随着这一想法萌生(其实大半年前就有想到过),我逐渐发现自己很难完美地完成它,甚至让我有些逃避。日常记录得太少太散,没办法剪成一个完整的叙述的视频;似乎因为签证和工作各种原因,也没办法在短短的时间里去到什么极致的美丽的地方;甚至自诩仪式感的自己却把结婚这一提案(Proposal)先于了求婚(Proposal)本身,不知道怎样才能保留一个惊喜感;不想要在众目睽睽之下却又想要我们专属的记录,有自己的「人生照片」或是影像。
最后,在记录我们杭州生活的约拍中和摄影师提前约定好场景和暗号,拿着作为拍摄道具的本子和手捧花突然袭击,虽然念求婚誓词时像是个神父,虽然因为念了两页导致围观的人越来越多,虽然连戒指也没有而并不完整,但当最后那一刻到来时,似乎一切都刚刚好。
关于爱情与婚姻
很多人会问起,并且自己也开始重新思考,是哪一刻自己决定和这个人携手共度余生的呢?
想了很久,似乎是两个时刻。一个是我们在讨论未来出国计划时我突然意识到我和我们计划的未来里似乎对方理所应当地存在了;还有一个是在一次闹矛盾又和好的时候学姐说了一句 —— “我们现在又是好朋友了”。
最喜欢的美剧「老友记」中 Chandler 和 Monica 的婚礼上,Monica 说的那一句:
My prince, my soul mate, my friend.
这大概是我理想的爱情应有的样子 —— 一切浪漫或是对浪漫的想象都能在另外一个人身上找到,灵魂有共鸣,彼此是最好的朋友。
即使依然存在着许多不确定性和迷茫,但牵着对方手的那一刻,一切都很简单。
而我,似乎也找到了。
有趣的事与物
阅读摘记
最近在读的「創作者的日常生活」这本书作者的博客,记录了各种人有趣的 daily routines,他讲话可太 mean 太有意思了。
讲到马克思写资本论的时候的日常时说「我从没听过任何人这么缺钱,还会去写钱的事」;
讲到酗酒的土鲁斯罗特列克自己说「我估计自己在四十岁的时候就会燃烧殆尽」的时补了一句括号「事实上他只活了三十六岁」;
讲到亨利格林自叙明明可以依靠家族遗产过活却每天还是去上班,觉得上班对自己的想象力和保持清醒很有用时补了一句「格林之所以依赖白天的工作,无疑也是因为他真正的职务几乎是零的缘故」。
可能由于作者主要是以写博客闻名的,语言风格明明都是平铺直叙,却莫名地很吸引我。
油画课
又到了每周去国美蹭油画棒课时间!画了一张捏捏,自己还挺喜欢的。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
- 創作者的日常生活,记录了各种人有趣的 daily routines,文字是博客风格,有点 mean 真的很有意思,读完后对各个只在课本里存在过的艺术家们有了更具象化人格化的认识(有些人真的很好玩),从创作和工作流程上也得到了不少参照。
- 福格行为模型,我自己其实是不算这类书的爱好者的,总觉得当自己预先 hack 了行为背后的逻辑就没办法相信它能奏效。但福格的这本带给了我很多惊喜,在培养/改变一些习惯时会从 MAP(动机、能力和提示)思考,也开始拆分和培养小习惯。很有意思的是昨天跟着一个教程把手机里的干扰源删了并配置成文字启动器的模式恰恰符合了模型中增加坏习惯/干扰源的开启阻力这一点,真的很有效。
- 小城与不确定性的墙,和《世界尽头与冷酷仙境》一样的设定,小城、影子、双线叙事,但或许这次读的时间更为心静与平和,更能读懂一点。与其说是小说,更像是自我探寻与对话,围绕村上自己,也关于我们读者。
收藏
文章
视频
- vlog #82|程序员下班后的日常学习记录|11 月复盘|在学 React+Electron|在读《吸引力法则》|TED 与日常英语学习|24 年的最后一个月加油
- 【毛不易】你和最好的朋友,最近还有联系吗?《想起他们》MV
- 他,勇于揭露日本不光彩的一面…|对话,是枝裕和!
剧集
- 企鹅人,作为衍生剧集原先没抱有太高的期待,但是确实精彩,尤其是前几集对人物心理的呈现和变化,结尾稍有点突兀,以至于我这周还在看有没有更新,发现只有 8 集。
求婚誓言 | 爱的本质是被看见
10 月我们在清迈艺术家村的一家店里一人买了一个手工做的本子,很喜欢,回来后我说我会把我人生最重要的一些事记在上面,很多年后再回头看一定很有意思。
未曾想到,第一页就写下了这篇求婚誓言。
前段时间在清迈有了久违的几周独处时间,我想了很多很多,以至于回来后你都惊讶明明不久前还在思考“Adulting”的我怎么突然就成为了一个大人了。期间也萌生了求婚的想法,还去清迈的集市里看了看戒指(作为 replacement ring,后续再去选自己喜欢的)。
原本是想着在曼谷夜市的摩天轮上,在高空浪漫的摩天轮里讲出彼此的承诺,把爱定格在天空最高点,听起来很不错,但似乎这并不适合我,或者说这并不符合我对我们之间爱的想象。我并不希望在这一刻、在我们步入下一个阶段之后,爱的稀释或是浪漫的消散就变得理所应当了,我不要这样。
其实对于求婚或是婚礼这件事,我始终存在着一个私心或是执念,如果真要有这一仪式的存在,不想流于形式,而是希望它是属于我们独有的浪漫,但也越来越觉得自己并不能完美地完成它,以至于开始害怕它(甚至写下这篇誓言的当下是 2024 年 12 月 2 日 23:00,距求婚不足 24 小时)。
在筹备求婚的时候,我也重新开始思考我们之间的爱是什么。
The essence of love is to be seen.
爱是本质是被看见。
我们有着完全不一样的童年和成长轨迹,性格截然不同,过去二三十年里也仅有几个小小的交点。但就是这样的你和这样的我,在各自的生命间隙里看见和拥抱了对方。
刚在一起的第一周我曾在「周报 #43 - In the Mood for Love」里这么说过:
每个人都是独立的个体,我很难成为也并不愿意把另一个人作为自己的星星/精神依靠,但也许,我们可以一起仰望同一片星空,在被熙攘的人群和蔓延的街灯虚晃了双眼时,静静牵住对方的手。
我们从相识到现在不过四年多,在一起只度过了五百二十三天,不长不短,但我觉得我找到了能跟我一起仰望同一片星空的人,我找到了你。
刚好是你,也幸好是你。
说回求婚,我做了很多功课,看了很多感人、热烈的现场,最终还是决定在这场记录我们杭州生活的约拍的中途保留一点小小惊喜、藏住一份小小心思,只是我们这样静静地待在一起,看着对方的眼睛,听我磕磕绊绊地讲着这些话。
今天是 12 月 3 日,一个平平无奇的周二,但就像一起看的很喜欢的电影《土拨鼠之日》中所表达的,是我们定义了这是怎样的一天,也是我们赋予了这一天独特的意义,同样,也是我们会在未来共度无数个普通的、浪漫的、幸福的日子。
最后还是想借用喜欢的诗人鲁米的那句诗作为誓言:
(从今以后),我所问出的问题都关于你,我所踏出的每步都指向你,处处皆是你,声音所至,目光所及。
你愿意嫁给我么?
周报 #79 - 清迈旅居、曼谷之行与 Follow
前言
本篇是对 2024-11-04
到 2024-11-28
这几周生活的记录与思考。
10 月底又独自回到了清迈开启了两周的旅居生活;后又去曼谷参加了 Devcon 和我们厂举办的 Side Events/Party,三周似乎都在奔波,心境却好了许多;回杭后又回到了珍贵的日常,并且在筹备重要且有趣的事,生活似乎也有了轴心;还有很多有意思的事。
清迈旅居
10 月初在清迈待了两周,不过主要是和学姐一起,更多是旅行的心态,见到了许多风景顺便作为 mentor 在 Invisible Garden 上了几节课;中途回杭两周集中处理了工作和各种事(比如拔了三颗智齿,做了牙周刮治等),又重返清迈去参加 Invisible Garden 活动。
珍贵的独处时刻
果然自己一个人的时候几乎就没什么出门的兴致了,大部分时间都在住所里写代码、办公、开会、写博客,偶尔出门吃个饭或去 7-11 买些生活用品。第一周还略有些许久不出门产生的带些惯性的消沉,第二周开始就好很多了,能够更专注于手上的事,也有了更多时间空间思考。
可能并不那么明显,自己的状态其实很依赖静静坐下来写字做事的时间,但随着工作生活都日渐复杂,这样的时间也越来越少,所以甚至是有时在状态达到一个负荷的时候会熬夜写周报,更像是梳理自己生活的一种解压的渠道,是我有且仅有的心流时刻。
这一周多也思考了很多,关于未来要去哪个国家或是城市、关于感情、关于自己的性格中缺陷的部分以及想成为什么样的自己。似乎都是很大且并没有明确答案的事,但似乎开始了条分缕析的探索后一切也都更加明朗了起来,做了一些决定。
又见 Vitalik
月初借着 OpenBuild 的机会跟 vitalik 一起吃饭、近距离闲聊(好幸运一个月内见到了两次!),听到了他创办 Bitcoin Magazine、Dropout、在柏林 Bitcoin Kiez 和自由主义者们一起生活、萌生 Ethereum 想法等很多有意思的事,了解到了他作为“v 神”这一符号背后更真实的一面;还聊了一些关于开源的想法。
很有趣的是问他在高密度参加完曼谷 Devcon 各种活动之后会做什么,他说想找个没人找得到他的地方自己待一阵子。
人总还是需要独处来恢复能量的,v“神”也不例外。
曼谷之行
完成了清迈 Invisible Garden 的活动之后,又前往曼谷参加 Devcon 和我厂举办的一些 Side Events/Party,见到了好些同事,因为都是远程办公,我这一年多像是集邮一样大部分同事都面基过了,会更能感受到一些亲切感。
跟着我司同事 Songkeys 很 E 地做了两天 DevRel,比做 Dev 累多了,不停拉人讲话交流。但也遇到不少有趣的人,比如跟从澳洲来的 Firefighter 介绍 Follow 和 Open Information;和肯尼亚来的 DJ/Radio Maker 讨论应不应该学 rust;还有很多有意思的事。
活动结束后和 Songkeys 没聊过瘾还一起在酒店继续下一场,从童年、生活、情感聊到前端、开源、职业发展,硬是通宵聊到早上八点多(作为我司著名不睡觉星人熬夜能力确实不相上下)。
关于 Follow
这次带着一个小小任务,去清迈山海坞摆摊了我们的 Follow 应用,因为也还比较临时,没来得及准备什么物料,于是向隔壁的小伙伴借了一个他正在办公用的便携显示器,直接展示了出来,效果意外地不错,有挺多路过的人来问的,还发了一些邀请码出去,也遇到了很多已经是 Follow 的老用户过来夸一下说我们团队做得很不错的。
看到 Innei 发的关于 Follow 的推文,自己其实还是有几句话想说。
Follow 从一开始的爆火和快速增长,到慢慢有了一些来自用户觉得不够好的声音,其实也是走过了一个互联网产品从 0 到 1 的必经之路。
从内测开始使用 Follow 已经三四个月了,参与开发也已经快两个月(虽然主要做的其实是 RSSHub 这一端和相关的一些功能模块),不论是作为 RSS 老用户还是开发者的角度来说,真的能感觉到 Follow 已经很棒了,尤其是作为一个从想法萌生到现在也不过半年的一个产品。
作为小团队的产品没办法一下子处理完所有 Bug 和一些功能需求,为了保障用户体验也只能借助邀请码逐步扩大用户规模,期间有大大小小的问题,但一直在努力迭代和改进了,开发群里也常常深夜还有很多讨论,希望大家能够给予更多耐心。
最近也在少数派首页 App+1 栏目发布了一篇系统性介绍 Follow 的文章 —— 「App+1 | Follow:信息获取的另一种形态」,也算是自己参与开发、作为重度用户使用并且写评测文章、横跨了 Follow 产品的各个环节的有趣体验了。
以及 Follow 移动端适配 & PWA 版本最近上线了!可以用手机浏览器打开 https://app.follow.is 添加到主屏幕使用,没有原生 App 那么丝滑但已经很好用了!可以试试~
个人生活剪影
油画棒课
回来的第一周陪学姐去上国美夜校的油画棒课,觉得总是坐家长区有点无聊,决定上手了,一份学费两个人学。
找了两张在泰国的照片对着瞎画,新奇的体验,以下是两张对比图,还被老师夸了。
家里也有一面一起画画填充的展示墙了!
其他
RSSHub 开发实践
写了一篇关于 RSSHub 中集成 Telegram 频道 RSS 订阅实现与部署方案的文章,感兴趣的可以看看:
还上了自留地频道!!!有一种上电视的感觉。
懒猫微服
收到了懒猫团队送的懒猫微服,体积、外观和质感是真的好,研究了下开发者文档,打包上架了 RSSHub 应用,整体体验还不错,尤其是内置外网穿透这一点,少了很多折腾。
因为家里已经有了一个 NAS 通过 Cloudflare Argo Tunnel 暴露了一些服务出去,大部分公共服务我也是通过 dedicated server 部署在 Zeabur 上,所以目前其实没有找到特别好的能够融入我工作流的强依赖的应用场景,用得比较多的反而是开发者模式连上懒猫微服再 ssh 到 NAS 上操作,省得用 DDNS 了...
还在继续探索,会再搬几个应用过来,后续深度体验后或许会在博客里详细测评一下~
招聘
我厂(RSS3)在招海外(非亚洲时区) DevOps Engineer,欢迎感兴趣/符合要求的朋友投递~
https://rss3.notion.site/RSS3-is-looking-for-a-DevOps-Engineer-d35ef17da5b341a49bc4484b4533f29a
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
- 沈醉回忆录,学姐对各种奇怪的历史很感兴趣,最近看到她在看军统特务沈醉的回忆录,我也一起看了几章,讲得意外地有趣。
- 我的父親袁殊,提起特务很难不联想到之前玩的「隐形守护者」游戏中的肖途和「伪装者」剧,他们的原型人物都是袁殊,于是也想找他的传记来看一下。搜到两本,为了尽可能贴合史实一点找的他儿子写的在台湾出版的那本(或许不一定完全中立客观但至少应该相对敢说一点),想更深入了解他的一生。
- 精力管理,想要更好管理精力看的,但是略有点鸡汤了,花了半天看完累到没精力做其他事了,不过有些关于价值观和思考自己行为出发点的角度还是有些启发的。
- 創作者的日常生活,好有趣!!!列举了各类创作者、艺术家的 Daily Routine,想单独写一篇来记录一些好玩的。
文章
- 10,950 天
- RSSHub 开发实践 #01:Telegram 频道 RSS 订阅实现与部署方案
- How I successfully doubled my SaaS price to $10/month and lowered the churn rate to 3%
- App+1 | Follow:信息获取的另一种形态
- State of RSS3 Q3 2024 | Messari
视频
- 全新 Mac mini,值吗?
- 旅张力拉满!横跨 1300 公里的,美国西部公路之旅
- 钓鱼开心程度 100%,老婆出门后钓鱼 10000%!!
- 一人一机一镜,就能拍出电影感!|SEL2870GM
- “这一场爱情电影,不是电影。”
- 车筐禁止载人!北欧除外……
剧集
- 企鹅人,太精彩了。
动漫
- 英雄联盟:双城之战 第二季,终于出第二季了!
RSSHub 开发实践 #01:Telegram 频道 RSS 订阅实现与部署方案
前言
最近在参与 Follow 以及 RSSHub 这两个开源项目的一些开发维护工作,因为牵扯到与很多订阅源的“斗智斗勇”,有一些很有意思的开发实践,于是开了这个新坑系列记录下来。
本篇是这几周使用 Telegram 官方 API 与 MTProxy 来实现对 TG 频道更新的开发实践与完整配置部署教程。
Follow & RSSHub
Follow 中提供了一种便捷的订阅信息源的方式,例如用户可以输入对应的 Telegram 频道名称(如 pseudoyulife
)来订阅某个频道的更新,这样就无须跳转到各个频道里去逐个查看,这一部分特性依赖的是背后 RSSHub 的实现。
RSS (Really Simple Syndication) 是一个古早的信息聚合标准,它通过统一的数据格式,让用户能够便捷地订阅和获取网站更新。然而,随着社交媒体和移动互联网的兴起,原生支持 RSS 的网站正在减少。
而 RSSHub 秉持着"万物皆可 RSS"的理念,通过开源社区的力量将包括 Telegram、YouTube、播客在内的众多现代内容平台转换为标准的 RSS 格式,让用户能够重新掌控自己的信息获取方式,远离算法推荐的干扰。
RSSHub 中现在包含了上千个平台,针对不同平台和类别也都有着包括但不限于网页爬虫、官方接口、逆向 API 调用等多种处理方式,能够涵盖绝大多数我们日常使用到的信息源,也非常适合作为对平台的一些加密算法和反爬机制学习的实践,例如下文所要介绍的 Telegram 频道 RSS 订阅的实现。
RSSHub Telegram 集成与部署
Telegram 网页预览
Telegram 提供了频道的网页预览功能,例如可以通过 t.me/s/pseudoyulife 这一链接直接查看我频道的更新,因此 RSSHub 很早之前就实现了通过抓取网页上的内容并转换为 RSS 格式的方式集成了对 Telegram 频道更新的订阅。
然而后来许多用户反馈说部分频道抓不到,去测试了一下,发现 Telegram 用一种黑盒的机制来限制了部分频道的网页预览功能,例如我一直在订阅的「Reorx’s Forge」以及「Newlearnerの自留地」等频道,当使用 /s
来访问页面时会被强制重定向,提示需要打开客户端来查看内容,因此对于这类频道我们没办法直接抓取到内容并转化为 RSS。
Telegram APIs
为了解决这一问题, 我又去查了 Telegram 的官方文档,发现他们将 API 分为以下几种:
其中 Telegram API 中的有一个 channels.getMessages 方法可以返回某个频道的消息,可以满足我们的需求,具体的实现逻辑在 RSSHub 代码仓库 —— lib/routes/telegram/channel.ts 和 lib/routes/telegram/tglib 这两部分,有兴趣的朋友可以看一下代码。
创建 Telegram App
使用 Telegram API 需要访问 telegram core,通过手机号登录。
点击 API development tools 模块,创建一个 Telegram Application(详见「Creating your Telegram Application」)。
在 App configuration 模块,我们能够获取到 api_id
、api_hash
两个参数,记录下值,后续会用到。
获取 Telegram Session
使用 Telegram API 新建一个 client 的流程比较严格,需要通过 SMS 验证手机号登录,在代码中交互获取使用并不现实,因此我们需要预先创建 client 并且获取其 session,后续直接通过 session 来使用 api。
拉取脚本「pseudoyu/telegram-api-scripts」后,先运行 npm i
或 pnpm i
安装依赖,然后运行 npm run start
或 node index.js
,按照提示输入 api_id
和 api_hash
和手机号(需要和申请 Telegram App 时的手机号一致),通过短信或 Telegram App 获取验证码后即可在命令行输出获取 session。
需要注意的是,由于我们后续需要在 RSSHub 服务中使用这个 session,尽量在 RSSHub 服务部署的同一服务器上运行脚本获取 session,这样能避免 Telegram 对于 IP、设备的一些限制。
注:如果 RSSHub 是使用的 Serverless 平台或其他方式,则也可以通过额外配置 MTProxy 的方式来保持 IP 一致,后文会详细说明。
(可选) 使用 MTProxy 保持 IP 一致
之前在 Follow 的 RSSHub 实例上添加了 Telegram API 相关逻辑和配置后,过一会儿就会报一个 AuthKeyDuplicatedError
错误,查看了一下很多开发者也遇到过 —— 「AuthKeyDuplicatedError Eror problem #1488」,猜测是由于我们的 RSSHub 实例是 k8s 集群部署的,会从不同的机器调用 Telegram API,因而受到了一些限制。
于是又开始找针对这一情况的解决方案,发现 Telegram 提供了一种叫 MTProxy 的专属代理协议,可以通过部署一个 MTProxy Server 来代理所有的 API 请求,这样能够确保不同机器发送的请求都来自同一个 IP。
找到了「Dofamin/MTProxy-Docker」这个项目,拉取仓库后,新建一个 .env
文件,添加 MTPROTO_REPO_URL
这一环境变量(默认的官方代码已经不怎么维护,这个版本添加了一些补丁):
MTPROTO_REPO_URL=https://github.com/GetPageSpeed/MTProxy
SECRET
默认值为 ec4dd80983dbf12d6b354cf7bcfe9a48
,也可以选择自定义的值;IP
不填写则会自动通过 curl ifconfig.co
获取本机 IP;其他环境变量可以查看仓库的 README.md
文件自行修改。
配置完成后,运行 docker compose up -d
启动,代理服务则运行在 <IP>:8443
上。
注:如果 RSSHub 是通过 Docker、Docker Compose 等方式单实例进行部署,且能够保障在同一台部署机器上运行脚本获取 Session,则可以跳过这个代理步骤。
RSSHub 部署
经过了上述的服务部署,我们获取了以下信息:
- Telegram API 的
api_id
和api_hash
- Telegram 的
session
字符串 - MTProxy 的
SECRET
、IP
、PORT
这时可以开始部署/更新我们的 RSSHub 实例了,具体可以根据文档选择不同的方式,例如 Docker、Docker Compose、Serverless 等。
推荐通过 Docker Compose 的方式来部署,比较便于维护,需要在 docker-compose.yml
的 RSSHub 服务中添加如下变量:
environment:
- TELEGRAM_API_ID=<Telegram API ID>
- TELEGRAM_API_HASH=<Telegram API Hash>
- TELEGRAM_SESSION=<Telegram Session>
- TELEGRAM_PROXY_HOST=<MTProxy IP,如 123.123.123.123>
- TELEGRAM_PROXY_PORT=8443
- TELEGRAM_PROXY_SECRET=<MTProxy SECRET>
我是通过自己维护的模板部署在 Zeabur 平台上的,可视化部署,比较易用,只需要在部署完成后在 RSSHub 服务的 Variables
模块中添加以下变量并重启服务即可生效:
TELEGRAM_API_ID=<Telegram API ID>
TELEGRAM_API_HASH=<Telegram API Hash>
TELEGRAM_SESSION=<Telegram Session>
TELEGRAM_PROXY_HOST=<MTProxy IP,如 123.123.123.123>
TELEGRAM_PROXY_PORT=8443
TELEGRAM_PROXY_SECRET=<MTProxy SECRET>
测试
经过上述步骤后,我们拥有了自己添加了 Telegram 相关配置的 RSSHub 实例,访问主页显示如上页面即部署成功,可以通过 <RSSHub URL>/telegram/channel/<Channel Name>
来订阅 Telegram 频道。
例如可以通过我的公开实例 https://rsshub.pseudoyu.com/telegram/channel/NewlearnerChannel 来订阅「Newlearnerの自留地」频道。
总结
本篇记录了通过 Telegram API 在 RSSHub 中实现对部分受限制频道的更新订阅的开发实践与部署方案,受限于平台,方案可能会在未来某个时刻失效,我们也会持续研究更稳定的解决方案,使用中有任何问题可以留言或在 RSSHub 仓库中提 Issue 反馈/交流。
Follow —— 信息获取的另一种形态
前言
我在三个月前作为第一批用户体验到了 Follow 这一产品,很兴奋,使用了一周后就写了一篇文章「周报 #67 - 使用 follow 重塑我的信息输入系统」分享了对 Follow 的一些想法。
而现在三个月过去了,Follow 本身迎来了许多更新,正式开启了 beta 测试;其在我日常信息输入和输出系统中也已经不仅仅是一个 RSS 阅读器 alternative,而是彻底改变了我的信息获取形态。
因此想再写一篇文章更系统性地分享一下我对 Follow 的看法,以及我是如何使用它的。
RSS -> Follow:One more thing
RSS 协议:互联网的活化石
在讲 Follow 之前,我想先介绍一下与之密切相关的 RSS 协议。
RSS (Really Simple Syndication) 是一种能够将网站内容转换为标准数据格式的协议,最早版本诞生于 1999 年,几乎可以算得上是互联网活化石了。
简而言之,它制定了一个包含了 title
、link
、description
、author
与 pubDate
等核心字段的协议标准,采纳并实现了这一标准的网站则可以输出统一的格式以供一些阅读器或代码进行解析,例如可以通过 https://sspai.com/feed 这一链接来获取网站的最新更新;而支持 RSS 的阅读器就像是一本自带目录的刊物,里面收录着来自不同网站和作者的内容,方便我们进行阅读。
但随着移动互联网的发展、社交媒体和音视频等媒体形式的兴起以及网站出于对平台用户流量的保护,支持 RSS 协议的网站越来越少,这一概念也有些式微,慢慢淡出了普通用户的视野,成为了一些爱好者和极客的玩具。
直到 RSSHub 这一项目的出现。
RSSHub:万物皆可 RSS
RSSHub 是由「DIYgod」发起的一个开源项目,其初衷是“万物皆可 RSS”,通过社区贡献,将 Bilibili 视频、网易云音乐、小宇宙播客、即刻用户动态等图片、音视频、社交媒体网站甚至是 App 中的信息转为标准的 RSS 格式。
借助 RSSHub,我们可以把自己习惯性会打开的社交媒体或是关注的各种平台账号都转换为「订阅」这一简单的行为,即可自动获取更新,减少了算法推荐与信息的干扰,提取信息的效率也会更高。
然而,RSSHub 终究还是更中间层一点的工具,即使有了标准的 RSS 数据,大部分阅读器依然只能处理文本显示,对于音视频图片的处理基本上只停留在当作一个 url 这一程度,依然需要点击源链接跳转到对应的网页查看,使用起来常常有些割裂。
直到 Follow 的出现。
RSSHub -> Follow:新一代信息浏览器
其实就软件的本质而言,Follow 并没有改变或是拓展 RSS 协议本身,而是通过对 RSS 信息内容媒介呈现方式的改变、浏览体验的优化及与 RSSHub 的深度集成,更面向用户层去解决信息获取与浏览的问题。
确实有一种看久了 pure html 突然飞跃到加了现代化 css 效果的感觉。其实技术层面做到这一步算不上有太高的壁垒,不论是视频 iFrame、音频播放器或是图片预览都有比较成熟的组件可以使用,但 follow 几乎是唯一一个依然在针对这一协议做且做好这一步的产品。
有时候,做好一点就足够了。
信息获取的另一种形态
软件/应用层面的 Follow 给我带来了很好的体验,但不止于此,其更深的影响是对我获取信息的流程与方式潜移默化的改变。
信息困境
不知道从什么时候起,其实能很明显感受到自己对网络世界信息的依赖。可能有别于游戏瘾或是经常被诟病的短视频算法鸦片,我的这种依赖并不是机械性地刷刷刷,而是一种对于信息获取的渴求,甚至内化为了一种生活方式。
而我每天从起床开始就会被来自各个平台的信息流所裹挟,依赖于网络世界其实最难免的是与社交媒体与算法的抗争,一方面是要避免自己被过载的贩卖焦虑的信息或是熟人社交圈的“Peer Pressure”所困扰,另一方面也需要警惕算法所构造的信息茧房。
实话说这一点挺难做到,即使自己多少算是具备一些克制和过滤信息的能力并有意识在这样做,但依然难以避免被其所扰乱思绪或是引导。
我最后采取了一种简单的方式 —— 关闭微信朋友圈入口与大部分软件通知提醒,并且把用于信息获取的平台(如 B 站、即刻等)的关注数量控制在 100 以内,如果新增则筛选优化之前的关注,减少无关内容的干扰。
行之有效,但由于依然需要使用多个平台/App,每当我打开 B 站常常还是会被一些有趣的内容吸引,而 Twitter 这样的平台又多少带了一些社交属性,自己又没有屏蔽或是关键词过滤的习惯,依然难以避免信息噪声。
Self-custodial Feeds
Follow 的出现让我看到了另一种新的形态 —— “Self-custodial Feeds”,即可以自己掌控的信息源。
首先就是厘清我对于 Feeds(信息源)维度的定义与标准。对于我来说,我的信息源由以下组成:
- 我会几乎每篇都全文阅读的独立博客
- 每期必看的一些 B 站、YouTube 博主
- 感兴趣的播客频道
- 会更多分享思考与新事物的个人社交媒体频道与账号
- 想要日常积累的绘画或是设计素材
- 与工作和爱好密切相关的软件/开源项目/编程语言/框架更新
- 某些只提供 newsletter 的博主/网站
- ...
我会尽量避免关注那些像是「v2ex 最热主题」这些热搜类的信息源,并不是对这些资讯不感兴趣,而是刻意减轻自己的信息消化的压力;并且慢慢发现其实也不会错过什么,真正自己会感兴趣的话题也已经在我关注的人的社交媒体分享或博文中了。
也可以说这是自己打造的另一座“信息茧房”,但随着对这些信息源的不断迭代与剔除,最终会慢慢建立一个贴合自己信息获取频率与消化能力的“数字花园”。
这些信息源形态各异,但却又刚好符合了 Follow 中的「视图(View)」这一概念。Follow 中除了按照标签和域名分组外,还可以在 Feed 层面设置视图,我上述的这些信息源就可以分别归到文章、社交媒体、图片、视频、音频和通知这几类视图中。
比如图片就会有画廊和瀑布流的呈现、社交媒体视图就更像是一条条动态博文,视频可以直接点击播放,而音频/播客则可以全局播放,甚至带进度条或是时间线跳转等功能,这也解决了我需要在 Apple Podcast、Spotify 和小宇宙等多个播客应用之间反复横跳的问题。
而对于那些只提供 newsletter 的博主/网站,Follow 提供了内置 Inbox 收件箱功能,可以使用对应的邮箱地址来收取 newsletter 并自动将邮件内容转为 Feed 内容,又减少了需要从成堆的邮件里找文章的繁琐,也保障了统一的阅读体验。
打破 RSS 孤岛
RSS 与 RSSHub 的结合确实让信息获取与阅读变得更加简单,但脱离了平台的那些“关注”、“阅读量” 、“点赞”等特性却也容易让这一个个 RSS 信息源成为孤岛。
Follow 将每一个 RSS 订阅源作为一个单元,记录下了这个订阅源的关注与阅读数据,当另外的人通过名称或是链接在搜索时,能看到有哪些人「Follow」了这一信息源(如这个页面 https://app.follow.is/share/feeds/41215011978385440),便于检索的同时,也天然形成了对其内容质量与价值的一种背书。
「Follow/Subscribe」这一行为在社交媒体平台已经几乎成为了标配,但这一概念用于重新建立这些 RSS 孤岛之间的联系却显得尤为巧妙,甚至更进一步,使其变得更为紧密与开放。
而在某个 Feed 的文章页面中,我们还可以看到有哪些人阅读过这篇文章,点进那一个个头像又能够看到 Ta 们所订阅的其他 Feeds。
同时,Follow 也提供了打赏(Tip)与助力(Boost)的功能让读者可以通过自己的方式支持创作者,创作者只需要通过一个所有权认证即可收取奖励,形成一种正向的循环。
创作者与读者之间仿佛多了一条细微的橙色细线,感知并不明显,不会形成什么社交压力或是被窥探的不适,但却温暖而坚韧地存在着。
分享信息源
有时我们也会想看看他人尤其是同温层的人在关注些什么以丰富自己的信息源,但常常每个人关注点可能分布在不同的网站,而 Follow 提供了用户 Profile 页面可以直接关注,并且也支持直接关注用户的订阅列表,可以很方便地看到 Ta 们关注了哪些信息源以及后续新增加了哪些。
对于有些想要创建自己的「数字花园」的用户来说,也可以创建付费 Lists,感兴趣的用户则可以通过支付一定费用来订阅,形成一种新的信息分享与获取的形态,即不仅仅信息源本身有价值,筛选过滤出高质量的信息源也同样值得付费。
Action 特性
Follow 还提供了一些自动化规则,例如可以将非中文内容自动翻译并使用 AI 进行摘要总结,对正文沉浸式翻译等,根据这些规则提升我们的信息处理效率。
我用的最多的一个 Action 是对个人博客的内容进行摘要、向我推送通知并开启阅读模式(可以自动去抓取一些不提供全文输出的 RSS 源),这样我能够不错过我所关注博主的更新。
总结
Follow 的出现并不只是优化了阅读体验,而是让我对信息源整理这一起点有了更深的思考,慢慢建构起了自己信息获取的新形态,如果将自己关注的订阅源视作一颗颗种子的话,那 Follow 则是这些种子发芽成长的沃土,呵护着自己的「数字花园」。
另外 Follow 目前刚开启公测,可以直接访问 https://follow.is/ 体验。公测账户有一些限制,需要邀请码才能解锁完整版功能,可以评论留言,我会发放一些邀请码。
周报 #78 - NAS、Chromebook 与 Zeabur 折腾小记
前言
本篇是对 2024-10-29
到 2024-11-03
这周生活的记录与思考。
最近不知怎的又久违地开始折腾开发环境和设备了。
在 Ares 的技术支持下终于拥有了心心念的 NAS;把闲置已久的 Chromebook 重新装了一下并刷了 Arch Linux,甚至还把 MBP 刷了一个 Asahi Linux(不过作为主力机还是不行,先卸载了,打算回家把家里的台式机刷了);Zeabur 支持了 Dedicated Server 之后我也把 RSSHub 等比较消耗资源的服务迁移到了 Hetzner 的 CAX-31 Arm 主机上;还有很多有意思的事。
NAS
其实好久之前就对 NAS 很感兴趣,但其实自己看番剧和剧集都是直接在流媒体平台上或者 Infuse 连网盘,对于家庭存储的需求并不那么高,所以一直没下定决心入手。
再加上自己有个 Mac Studio,平时也都是长期开机的,配合上公网 ip 和 Cloudflare Argo Tunnel,其实也已经满足了绝大多数的家用服务需求了。不过由于系统架构的限制等,我在配置 HomeAssistant 的时候网络配置总是有一些奇怪的问题。
有一次跟 Ares 聊的时候,他提到有个自己组好的 NAS 可以出给我(他自己已经迭代了),很是心动,于是找了一个周末来我家里配置完成了,有了技术支持自己少走了无数弯路,一切都完美 work 了。
四盘位(8T 存储外加 8T 的备份),任意热插拔掉两个盘位依然可以正常运作,把之前网盘里的一些照片和影像资料迁移了过来;用的是 openmediavault 这一界面有些古老但是完全够用的系统;使用 Portainer 管理了一些 Docker 服务,16G 内存也基本够用。
Chromebook 与 Arch Linux
两年多前在重温 Teahour 的这期「#95 - 用 Chromebook 做开发是什么样的体验?」时对瘦客户端开发模式很是着迷,自己还写了一篇「基于 frp 内网穿透的瘦客户端开发工作流」来实践,顺便也种草了 Chromebook 这一国内并不流行的设备,入了一台 2019 款的 Google Pixbook Go(产品线很快就被 Google 砍掉了,所以倒是有点纪念意义的最后一代)。
但其实因为后来远程办公以及依赖了很多 macOS 专属的软件,这台设备的利用率一直很低,最近在清迈看另一个 mentor 把自己的 Chromebook 刷了 Pop!_OS,很酷,于是想着回来折腾一下。
本来也是想彻底刷成其他 Linux 发行版的,升级了一下发现 ChromeOS 的 UI 和各类交互很舒服,折腾了一下把内置的 Debian 系统换成了 Arch 也很足够我对于 Linux 的需求,不那么“正统”但够用,折腾了一天,达到了很惊喜的体验,用了几个跨平台的方案保障体验几乎是一致的了。
- 1Password。前段时间才从 Elpass 换成 1P,浏览器插件、多平台和强大的自动填充让我后悔没早点换了;再加上能够用 ssh agent 功能来进行 git 签名等,再也不用维护多套 gpg keys 了。
- x-cmd。朋友前司的产品,最开始只是想支持体验一下,发现确实满足我的需求,只需要很少的几个命令和配置就能实现一个多设备完全一样的开发环境,也使用 x-cmd 管理了我的 Go, Node.js 等开发环境,很省心。
- fydeRhythm。我现在完全投入双拼,在搜索的时候发现了这一开源项目,作为一个 Chrome 插件安装到 ChromeOS 系统中,也能够在终端和各类应用中原生使用,几乎免配置;Linux 上我使用 fcitx-rime 配置,不过折腾了好久才搞定。
- Cursor。有打包好的 AUR 包可以很方便在 ChromeOS 上一键安装,加上导入配置的功能,改了几个快捷键后完美还原体验。
- Chrome。考虑为了一致体验从 Arc 切换回 Chrome 了,像是 Telegram、Slack、Discord、Follow 这些工作中用到的直接都使用网页版了。
- Onedrive。因为没有了 iCloud,刚好利用上我的 Microsoft 365 带的 1T Onedrive 存储,用于文件传输和同步。
- Google Play Store。Chromebook 很大的一个优势就是可以直接使用 Android 应用,还提供了一些优化,像是 Clash、HBO Max 这些应用都可以作为应用直接打开了。
我其实有很多高性能设备,例如日常在用的 M2 Max 的 MacBook Pro,由于性能和续航达到了一个很不错的平衡,导致我即使出门在外也随时都能打开来进入工作状态,甚至爬山和散步都会背着,有时候其实并不能很放松地出门或是陪伴身边的人,但我又有“电脑分离焦虑症”,不在手边的时候总是担心有什么紧急事务要处理而焦躁不安。
这台 Chromebook 算是一个完美的方案,同时有满血版的 Chrome、Arch 和 Android 系统,性能不强、轻便好看,所有依赖浏览器的工作都完全能胜任,真的要调试工作项目的代码稍微有点卡但也能用,在缓解我焦虑的同时,每次有需求后也多了一步掂量一下,是不是真的紧急到我即使需要更费力地调试也要当下完成,绝大多数情况下我也都会选择等到家了换上主力设备了再处理。
这一点很有意思,其实设备性能已经过剩到并不会制约自己的效率,反而是需要刻意的约束来让我的目光更多转向周遭。
Zeabur 服务器
我算是 Serverless 平台的重度玩家和 Zeabur 的早期用户了,现在自己的很多服务依然部署在 Cloudflare Pages/Workers、fly.io 和 Zeabur 平台上;同时之前也是各种 vps 的折腾爱好者,有好几台搬瓦工的传家宝,再加上前两年有点上头,又新添置了几台,导致利用率很低。
最近正好 Zeabur 支持了 Dedicated Server,利用 k3s 外加一些 monitor 服务能够在平台上直接使用自己的服务器进行部署,而关联 GitHub Repo、镜像 build、拉取等高消耗任务则是通过 Zeabur 来进行(目前都是免费的,不知道后面会不会按量计费),不占用服务器本身的资源。
于是把我的 RSSHub 和 Node 节点等一系列服务直接迁移过来了,终于把月账单又控制在 Developer Plan 的 5 刀以内了。
Zeabur 的模板也比较强大,我现在在维护 RSSHub 的 Zeabur 模板,可以无须域名等额外配置,一键部署自己的实例;顺便还把之前自己用的 n8n、Remark42、GoatCounter 等服务都做了模板,欢迎大家直接部署使用。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
- 素食者,因为诺奖才了解到的作者,周末得闲才开始读,不长,只有三个篇章。看第一章的时候我正在吃饭(幸好是素食),作者把很多模糊的负面的感受描述得非常具体,以至于我有点反胃,很久都没缓过来,很难得有这样的感受了;后面的剧情走向略有点抽象,但确实加起来四种不同视角却相互关联的方式很奇妙。
- 献给阿尔吉侬的花束,最开始的错字报告到后来智商跃升后对这个世界和身边人态度的变化的不解,到后来对自己作为一个“人”过去和现在的探索,再到最后的一切回到原点和结束。他用了几个月的时间快速经历和理解作为“人”的一生,很多人几十年甚至终其一生也没办法回头去接纳过去和真实的自己,无关智慧,只是重新拥有了思考这一能力的他就像是失明的人重新见到光一样珍惜。
- 红与黑,从一个视频看到的讲解,关于于连的自尊和因此表现出来的傲慢的描述印象很深,有一种底层市民向上的野心,但由此产生的矛盾、自尊受挫后的疯狂和极端的转换描写得很具体。
- 小城与不确定性的墙,读了前几章,感觉跟「世界尽头和冷酷仙境」的设定好相似。
文章
视频
剧集
- 企鹅人,太精彩了。
周报 #77 - 一间只属于自己的房间(对亲密关系的思考)
前言
本篇是对 2024-10-21
到 2024-10-28
这周生活的记录与思考。
前两天读到了「第三夏尔 | Third Shire」写的一篇「从亲密关系中学到的」,也想写一篇来总结一下自己和学姐这一年多来的一些感受和变化,很多事远远没有像原作者一样找到“最优解”,但也心知亲密关系的一些问题因为有了爱作为挡箭牌而容易拖延甚至搁置,直到矛盾爆发,因此也想记录一下作为自省和对自己的提醒。
只属于自己的房间
我想独立和自我空间是亲密关系中最常见也最难解决的课题了,在我和学姐这样的模式下尤其。两个人其实缘起于互相欣赏,我羡慕她的精力与心境,在香港、北京这样的工作节奏下依然能够保持对生活的热情,画画、攀岩、看书、写作,让我看到了原来还有另一种人生;而她或许也欣赏我的独立和对技术的专注。
但进入到亲密关系后,两个人不免地会变得更依赖对方,不论是情感还是时空上。
之前杭州北京异地的时候,我大概每个月会去北京两三周,留下一周的各自独处的空间和期待下一次见面的心情;而现在一起到了杭州后,在小区隔壁楼各租了一个房间,谈起了异楼恋。但由于两个人都不需要固定通勤,常常连续几天高密度地相处在一起,独立也成为了一个伪命题。
起初我并不很能理解,即使同处一个空间但是做自己的事为什么还会有“不独立”的感受,后来渐渐发现了,学姐更为敏感也更依赖于一个独处的环境才能专注地看书写字甚至只是发呆,而我其实对于环境的感知并不高,打开电脑我就能够进入另一个世界,也并不容易被干扰到。
当我们两个人在一个空间时,我随时可以去看她、问她在做什么,或仅仅是路过的时候抱一下,学姐依然会有一种“侵占感”,本身是享受两个人的亲密,却多了一层隐隐的不安全感。
其实我们也做过一些调整,比如约法三章,一三五各自相处,剩下的时间一起,但依然并不解决问题,因为真正离开后即使一楼之隔也会想念,找各种理由再待在一起,因此常常这样循环。
最近尝试的是早上白天时间里各自专注做自己的事,到了饭点或是下班时间可以约会出去吃或自己做点简餐,似乎完整时空里分割的三个小时会让相见和相处多了一些仪式感,也常常戏言道这个男朋友只有三小时赏味期,时间到了就该放到冰箱里重新保鲜了。
伍尔芙在「一间自己的房间」中写到:
一个女人要想写作 必须拥有两样东西 钱和一间只属于自己的房间
我想这句话的重点可能不在于“房间”这一实体,而是“只属于自己”,即使是亲密关系中的另一个个体,也依然需要排除在外。
真实的自己与缺点
亲密关系中的另一大难题其实是“真实的自己”与对彼此缺点的包容。在与亲近的人相处时人似乎总是会更不加掩饰一些,而在长久相处中也难免会有一些矛盾。
我是个对生活质量要求很低的人,可以连续一两天懒得吃饭和睡觉、几个月不买衣服;对周遭空间也很不敏感,家里我可以只在电脑和床这几平米的空间里活动,一个掉在地上的瓶子我可能一两周后才发现;夜晚也常常是困到开着灯和电脑不知怎么睡着的。而学姐是很认真在生活的人,空间的整洁、物品的摆放、生活的仪式感,都是她很在意的点;对于环境也更敏感些,夜晚的一丁点光亮和声音都会让她难以入眠。
日常的相处中就常常会因为这些习惯上的差异而累积一些小情绪,事情都不大但是很难解决,可能会需要更长久的时间去理解和磨合。
比起这些生活习惯上的琐事,目前更严重的是在漫长的日常中对于对方的尊重。
有时候我手上在忙一些事,跟学姐说了 15 分钟后可以出门,但实际上可能早就过了半小时甚至更久。或许本身其实早 10 分钟晚 10 分钟出门并不会对实际的行程产生太多影响,但其实这种行为是对她时间的一种不尊重,如果预估的时候就说了半小时,学姐就可以坐下来更完整地读几页书或是处理点工作,而不是消耗在毫无意义的等待中。
几次之后我才意识到,在远程办公时间自由以及自己同时在做/想做的事越来越多后,其实自己对于时间的预估和掌控越来越差,但常常又执拗地不愿意承认,有的时候真的忙到无法兼顾依然强行多线程。
发生了好几次之后才更认真地对待这一趋势,也和学姐聊了自己在其中的感受和情绪,其实是可以通过沟通和调整来缓解的,但似乎即使是在亲密关系中,坦言真实的自己和不足依然是一件需要勇气的事。
个人生活剪影
上周末飞了一天又回到清迈了,很累,前几天都在宅着休息,没力气学习和处理太重的工作,就干脆继续折腾 Chromebook 了。
最终还是刷了 Arch,太喜欢了,翻好多 AUR 包贡献者的博客翻了好久,完美配置完了,follow、cursor 这些比较新的软件都有好心人打包和维护,Wiki 也很详细。
接下来这几周就继续游民生活啦,这次就会一直待到曼谷 devcon 之后了,到时候我们厂也会有主办的活动,欢迎来玩~
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
- 在 Cursor/VSCode 中配置 iOS 开发环境
- Write Code Every Day
- 别了 Debian!Arch YES!| ChromeOS 下的 Archlinux
- 兰州莎莎
- 赚有限的钱
- Contributing a New Worker | RSS3 Docs
视频
剧集
- 企鹅人,我在上飞机前临时在 HBO 上下载的,The Penguin,以为是企鹅纪录片,没想到是哥谭的企鹅,很精彩,连刷了 5 集。
周报 #76 - 关于 Adulting 的思考
前言
本篇是对 2024-09-19
到 2024-09-28
这周生活的记录与思考。
Adulting
最近在一个喜欢的博主的频道看到这样一段描述:
因为大学毕业后直接读了博士,博士毕业后就继续研究者的工作,说是说工作,但是和念书时也没啥太大区别,所以总感觉现在的自己和学生也没什么区别,哪怕教过许多的大学生,但我也不认为自己和他们有什么区别,只是比他们早学几年而已。不过区别肯定是在某些时刻发生了。在生活中也偶尔会冒出诧异的感觉,譬如在看剧时、或者在消费时,发现自己的收入已经比家长高很多了,虽然匮乏的记忆仍旧历历在目,但那些好像是发生在另一个人身上的事。再譬如看一些文艺作品,讲那些大姐姐和大哥哥,那些我想以之为生活目标的人,一看发现他们年纪比我还小。再譬如每天起来洗漱时,真真切切地感觉到自己的年岁在增长。
智识是增长了、但是我的情感能力却完全停留在学生时代。虽然读过许多激动人心的文学作品,但仍旧对讲青春期的故事着迷,到现在还在追相关的新番并为之感动。我怀疑自己还在青春期中,似乎就只是在象牙塔里空长了年岁。这十年我在干什么呢,我不理解。身边的人如何进入自己的生活,生活的洪流又是怎么吞噬一个个人的,我不理解。但是更令我难受的是,当我看到现在的中学生时,我也不理解。
我觉得人的经验中是有很多问题需要被解决的,我不知道别人是怎么解决这些问题的,但我不解决它们我就没法进入下一个阶段。当我搁置它们的时候,我就并没有在成长,物理时间、精神时间和情感时间完全错开了。我现在也很困惑自己是否也能和别人一样成为看起来很正常的大人,又或者是否有能力保卫住我现在这样能让自己胡思乱想的生活。每次想到这里我就感到难过。我没有勇气进入新的生活,就像一个因为执念而仍旧留存于世的幽灵一样。
心里的某一块似乎一下子被击中了,想到了最近刚听说的一个词「Adulting」,印象里是博主学会了车窗被路上飞来的小石子砸坏是可以走保险之类的这样一个冷知识,称之为 「Adulting 技巧」,很喜欢这个形容 —— “正在学会成为一个大人”。
随着自己年岁渐长,即使没有刻意去比较,其实比起学生和孩童时期变化已然很大了。
工作已经三年多,生活独立,买东西时似乎已经可以相对地“随心所欲”;走南闯北,踏过的土地也远远比父母去过的地方要多得多;遇到什么人生的重大决定,似乎也不再那么慌张了。
前几个月考了驾照,现在常常开车出门;前段时间在整理自己一团糟的财务信息,办了一些卡、买了一些定存等等。在做这些时,跟学姐说了句,“我现在好像个大人呀,会开车出门还有很多银行卡。”
学姐回话说,“只有小孩子才会比谁的卡多,大人也不会因为自己像大人了而高兴。”
或许跟我一直以来的经历有关,初高中之后爸妈就不怎么管我,大学后更是按照自己的想法在生活。好处是似乎看上去处事不惊,性格多少成熟稳重些,“坏处” 是并不受父母长辈的标准约束,也早早关了朋友圈屏蔽了 peer pressure 的影响,导致似乎自己的生活和同龄人所在经历的似乎是有些脱轨的。
这两年参加了三场高中同学的婚礼,其中两对孩子应该就在这两个月就要出生了,应该不会有人还在为考出驾照而高兴好几周,或是因为一束「送错的花」而沮丧好几天。
大多数时候我还是乐得如此的,似乎努力保留一点“学生气”也让我面对这世界的时候多一些乐观和勇气,离世界的那些污浊的死气沉沉的真相远一些。
但真的能一直这样么?
和学姐刚在一起的时候,有一次她去公司的一个活动,下班后一脸疲态,跟我倾诉说,同样一件事需要用好几种截然不同的方式向不同的领导汇报和其中察言观色的部分很消耗心力,很累。
我突然发现我没办法给出有效的安慰,并不是不懂其中的门道和“人情世故”,也明白生活在不断吞噬每一个人,只是这些事第一次如此真实地出现在我最亲近的人身上时,而我却也无能为力。
我在周报中也曾大言不惭道要追寻月亮,不能因为要去捡六便士而成为自己所不喜欢的样子,但其实世界原本就是这样运作的,即使我能侥幸逃脱这些桎梏,也没有能力荫庇身边重要的人。
学姐说了一句,“你能有选择不成为这样的人是很幸运的,总好过让这世上再多一个无聊的大人”,有些惭愧和心虚,似乎本该学会长大的自己执拗地搁置了这些,真的是对的么?
我真的有能力守住这样能够继续任性继续胡思乱想的生活么?
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
- How the Raycast API and extensions work
- How I write HTTP services in Go after 13 years
- B-trees and database indexes
- No One Builds in Public
- Using Traefik with Cloudflare Tunnels
- 寫作上的一些庸人自擾和思考
视频
周报 #75 - 回答 Dayu 关于独立博客的 9 个问题
前言
本篇是对 2024-10-14
到 2024-10-20
这周生活的记录与思考。
这周从清迈回到了杭州,但是由于项目发版而忙碌了整整一周,几经波折,有些心力交瘁,于是也搁置了没记录些什么,看到 Dayu 的这篇「博客作者呀,我想采访你这 9 个问题!」,有很多想说的,直到今天晚上才想着写博文回答一下,像是笔友的一次隔空交谈。
回答 Dayu 的 9 个问题
01. 简单介绍下自己或者你的博客
我的博客名称是「Pseudoyu」,和我自己的昵称同名,是以自己名字中有的 Yu 为源自己创造的词。在我的「关于」页有更详细的介绍:
取用了一个前缀「pseudo」,pseudonym 有「笔名、假名」的含义,编程里常用到的 pseudocode 是「伪码」的含义,而很喜欢的日漫 物语系列 - 伪物语 中也不乏对「真物」与「伪物」的探究,那为什么不能有一个 pseudo 的 yu(我)呢?
其实一开始真的是想做一个严肃的技术博主,顺便记录下自己的折腾工具和效率的一些心得,慢慢地,因为搭建博客和周边服务的一系列教程吸引了一批读者,最后,似乎还是以「周报博主」这一身份为大家所熟知,机缘巧合,但却也不错,能够隔着互联网给大家传递一些温度。
即使现在已经有了不少读者朋友,但要说博客对于我自己的意义,还是更像想法和情绪的私人空间吧,状态不好时文字也是丧丧的,甚至是很久不更新;在经历人生的一些重要阶段时,过去的文字又常常给我温暖和勇气。
02. 什么契机让你开始写博客
我高中学的是文科(现在可能已经不分科了?),也曾混迹文学社、有过作家梦,比起其他方式更习惯使用文字来表达自己,曾经也写过个人公众号或是投稿一些平台,在对技术有了更多了解后使用 Wordpress 自建了自己的第一个博客,后续觉得曾经写的又很幼稚,使用 Hugo 重建了博客并买了这个域名,直到现在。
这个博客的话,其实是自己读研的时候把自己的笔记都使用博文发布出来,便于自己回顾和分享,后续也有写一些技术教程和工具效率软件的使用心得,但总体来说断断续续的,直到两年多前决定重新用文字记录生活,开始写周报,不知不觉也已经七十多期了。
要说契机的话,我想到了最近在清迈买到的一本笔记本上写的一段话:
When you read, you are reading the writer's words
But when you write, you are reading your soul
03. 你是如何完成创作的
写作对于我来说确实是一件下笔不难,但决定坐下来写却需要勇气的一件事。
技术类的文章则是来了灵感或是动力,就算是深夜也会爬起来写完,常常写到清晨;而大部分周报除了极少数的旅行总集篇外,经常是会给自己下一个 deadline,然后在最后几个小时用很短的时间写完,大多都是没有提前构思积累,而是坐下在电脑前一气呵成写完的,只要有想说的话,遣词造句倒不会成为阻碍。
我整体写作算是比较粗糙的,写完后简单通读几遍就直接发布了,发布的前两天会反复看,修改一些小细节,然后就继续下一个轮回了。
工具方面的话,我就是使用 VS Code 写 markdown,截图使用 CleanShot X,图片使用我自己的一套方案「从零开始搭建你的免费图床系统(Cloudflare R2 + WebP Cloud + PicGo)」上传到 Cloudflare R2 并使用 WebP Cloud 优化;封面图是用 figma 编辑一个自定义模板;写完后上传至仓库并自动发布。
04. 运营博客的过程中是否有失去过动力?如果有,是为什么恢复的?如果没有,请问您又是如何保持创作的激情
我的博客间歇性会有断更,不过通常不是因为失去对运营博客的动力,而是失去了对生活或是与自己对话的热情和能力,所幸我有很多篇周报、年终总结和生日总结,我常常会在这样的时候一遍遍去读之前自己写的这些文字,发现其实过去觉得重要的不重要的、开心的难过的,放在两年多周报的维度上,似乎都随着时间过去了,而在其中的我,也一步步变得更有勇气。
与其说是保持创作的激情,不如说是过去的自己的文字常常在救赎现在的我,而现在的我也常常会想,或许现在无心的一句话,又会成为未来自己的一束光;我也常常会去读博客的评论,有很多很用心的话语,同样让我有了继续创作的动力。
当然,也有时候会怀疑自己写的内容的价值,也还是引用我博客之前写的一段话来解答:
就这样平凡的我常常也会犹疑,自己的生活“流水账”是否有这样的价值呈现在所有人的面前,直到最近恰好在 B 站上看到这样一个视频 —— 「什么是好看的色彩?拍视频五年,我调色成了什么样」,是讲调色相关的,里面的一句话却深深打动了我:
当我第一次把镜头对向自己的时候,我才发现拍得可以那么惬意,没有压力。这时我才发现,我以前羡慕的不是那个画面,而是背后浪漫热烈的生活,这是我爱折腾的意义,我想让你看到我眼里的世界,而我屏幕里最好看的颜色,就是我生活的底色。
这是对我现在写周报时的心境最恰如其分的形容。
05. 如何搭建博客,以及运营博客每年需要投入的资金
(搭建博客算是我的专长了 🤣,感觉自己一半时间在写博客,一半时间在研究怎么搭博客
可以参考这篇吧 —— 2024 年了,我的博客有了什么变化。
博客本身域名 10.44 美元一年,WebP Cloud 的 Lite Plan 3 美元一个月,其他服务都是在免费或是几乎可以忽略不计的 Serverless 平台上,没什么成本。
06. 推荐 1 篇你博客中的文章,并推荐一个你喜欢读的博客,聊聊原因
近一年我最喜欢的一篇文章是 —— 「27 岁的自白:成长是一件很扫兴的事」,虽然是自己写的文字,一次次重读心绪却也难平,算是这些年不论是阅历还是写作能力提升后,第一次觉得真的有把自己想说的话好好地用文字描摹出一个具体的形状。
很喜欢读的一个博客是「椒盐豆豉」,读她的文字有时像是在体验另一种生活,有时又似乎不知不觉代入思考,说不上来,并不是文字的陷阱,而是真正灵魂有趣的人所散发出来的魔力。
07. 推荐 1 个近期喜欢的事物?(例如书籍、电影、音乐、工具、软件。)
最近的话在折腾 Google 已经停产了的一台 Pixelbook Go Chromebook,很轻很有意思的一台设备,我在做的是让这台设备能够满足我的大部分工作需求却又不要满足得太好。
我其实有很多高性能设备,例如日常在用的 M2 Max 的 MacBook Pro,由于性能和续航达到了一个很不错的平衡,导致我即使出门在外也随时都能打开来进入工作状态,甚至爬山和散步都会背着,有时候其实并不能很放松地出门或是陪伴身边的人,但我又有“电脑分离焦虑症”,不在手边的时候总是担心有什么紧急事务要处理而焦躁不安。
这台 Chromebook 算是一个完美的方案,同时有满血版的 Chrome、Debian 和 Android 系统,性能不强、轻便好看,所有依赖浏览器的工作都完全能胜任,真的要调试工作项目的代码稍微有点卡但也能用,在缓解我焦虑的同时,每次有需求后也多了一步掂量一下,是不是真的紧急到我即使需要更费力地调试也要当下完成,绝大多数情况下我也都会选择等到家了换上主力设备了再处理。
这一点很有意思,其实设备性能已经过剩到并不会制约自己的效率,反而是需要刻意的约束来让我的目光更多转向周遭。
08. 想做还没有做的事,或想尝试还没有尝试的主题
想拍生活 Vlog 以及一些工具效率的视频,其实并不愁内容和表达,只是缺乏开始的动力。
09. 写到这里,闭上你的眼睛,深呼吸几分钟,或是出去溜达一圈,然后回来写任何你想写的东西
每次拖更周报自己的心理压力好大,还是接着这篇重新找找写作状态,谢谢 Dayu,希望自己还是更多能够准时更新吧。
关于 RSS 与信息获取
最近在写 RSSHub 的代码,有一些有意思的感受。
前两天因为要解决 B 站抓取的问题看了 DIYgod 发给我的一个研究 B 站风控机制的 Issue ,看到 B 站的复杂的风控加密算法和开发者的应对策略,有一种两边斗法的感觉,根据里面的一些逻辑改了代码,生效了一阵子,今天看到又失败了 😶🌫️;今天发现 Follow 里抓不到我的 Mastodon 实例的数据了,前几天还可以,本地调试了一下发现是抓取的时候有一个 401 Request not signed 错误,分析 Header 里面内容调试了好半天,最后发现可能是我那个实例的 admin 新增了对非登录用户的一些权限限制;还有很多平台也是。
感觉在做网页数据源 RSS 化的时候总是会做很多“无用功”,一下午甚至几天的成果很有可能因为平台策略的微小改变而付诸东流,和平台反爬风控的斗争貌似也永无止境。
往大了说是 Open Information,小一点说只是想我自己能够有一些自主选择想看到的信息的权利,似乎在中心化主流的现在都需要付出很多额外的努力。
工作生活剪影
这周工作项目里要发一个大版本,几经波折,一整周都被熬夜后的恍惚和刚拔完两颗智齿的不适感缠绕。
今天凌晨刚发完版的一瞬间有种字面意义上的「豁然开朗」 ,很像一周前早起去在清迈素贴山上等候和看到日出时的心情。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
周报 #74 - 清迈异闻录
前言
本篇是对 2024-09-29
到 2024-10-13
这周生活的记录与思考。
这两周去了清迈参加 invisible Garden 的活动,去当 Solidity 课程的讲师;学姐也请了一些假,凑上了一次为时半月的旅途。这些年在清迈呆过了大概加起来也有一个多月,心情却总是有所不同。
这次整个期间一直没更新周报,但在自己的 Telegram Channel 中还是保留了比较完整的记录,所以这篇也算是总集篇了,这篇偏记事,感受和思考可能后续会再谈一下,包括旅行中的相处。发生和体验了很多有意思的事。
清迈生活
00. 初来乍到
9.29 傍晚刚到清迈,经接机的热情司机大叔提醒去逛了周日夜市(清迈最大的夜市了,来了好几次总是错过),这次没计划倒是不期而遇了,很热闹。
夜市买了一套喜欢的 local 服装和拖鞋,开启 10 月 Thai-style 旅居生活。
甚至偶遇一个周报粉丝,送了他一个 Follow 码 🤣。
01. Invisible Garden
在 Invisible Garden 当 mentor 上了三节课(两次主讲,一次辅助另一个 mentor Daniel 答疑),接下来的一周应该还会密集上三四节。
上一次英文授课还是去年,muChiangMai 活动,但这次时间更久,内容也更深入,虽然多少还是有点磕绊,在第三节课的时候感觉已经比较游刃有余了,见到了很多有趣的开发者,也跟 Daniel 交流合作得很惬意,算是这次最大的收获了。
在清迈 Invisible Garden 上完第一节课后和另一个 mentor Daniel 在交流后续课程安排的时候被学姐画下来了 增加了有趣的记忆点 🥰。
还很运气地在一次讲课后下楼刚好遇到了 V 神,在学姐的鼓励下去找他聊了一会儿,还给他买了一杯咖啡,比想象得更有亲和力,还鼓励我 keep programming,感觉现在再写合约都有加持了 🔥
Talking to Vitalik Buterin at Chiang Mai really made my day!!! 🥹 bought him a cup of latte, shared ideas about ethereum and introduced our RSS3 project to him 😊
02. Iyengar Yoga
去了 5 次瑜伽课,几乎都是早上 7 点打车去古城,Iyengar Yoga 对于我这种柔韧性很差的人真的折磨,感觉是该回炉重造了,其实一开始只是想陪着学姐去,但是似乎也坚持下来了,老师说进步很明显,甚至能倒立了,这周应该还会完成一个 4-5 节课的 Session。
有趣的是老师为了让我放松在跟我闲聊:
“You have a very healthy body but apparently lack of exercise, how old are you? 22?”
“27 and I’m a programmer”
“Oh that make sense, you actually need yoga!!!”
其实随着年龄渐长自己已经不得不正视身体和精力已经有些跟不上自己的想法了,早起去瑜伽或是锻炼几个小时,下午回来后常常感觉到疲劳,学习能力和专注力也不如之前了。
有尝试过进行一些调整,如又重新恢复的 8+16 断食和坚持了差不多一个月素食(不算非常严格,跟朋友聚餐也会破戒但大体坚持下来了),再加上现在的瑜伽和偶尔去的各项运动,有点像是人力抵抗自然,痛苦但有用。
03. Meditation
去了两个寺庙练习打坐冥想,算是瑜伽的一种结合,不过很可惜没有足够的时间体验一个更长期完整的禅修(主要还是得断网 10 天+,以及目前的心境也不算适合),看到有一些线上课程有教如何冥想,打算先慢慢练习开始。
但隐隐觉得未来有这样机会的时候会是一些人生比较重要的节点吧。
(没有拍我打坐的照片,发现就目前的打扮和发型来说,学姐穿我的衣服拍的背影已经不容易分辨出来是谁了 🤣
04. A Chiang Mai Couple
经典的一人做一两个菜的聚餐环节。
去学姐 7 年前在清迈旅行时认识的朋友家里作客 2 次,很有意思的一对 couple,大概 30 出头,15 年在清迈 gap year 做义工的时候觉得很喜欢,就留下来了,做民宿生意,一晃已经近十年了,起起伏伏,又经历过了疫情后的几乎从零开始,现在渐渐步入正轨。
男生热情而有责任感,承担了大部分的民宿生意琐碎的部分,为了生计当过中文老师、美术私教,还去考了潜水证和打了几年泰拳比赛;女生一开始自己一个人收拾民宿,洗床单刷马桶,到现在学会了泰语,还开了公司管理着很多泰国的清洁阿姨,坚毅而有力量。
看着他们挂满的自己画的画,一整面墙的木工用品,羡慕之余开始想,可能这才是真正的生活。
05. People in Chiang Mai
另外一个很有意思的是对清迈人(或者说泰国人)的感受。
泰国是一个很重服务业的国家,之前几次的印象就是酒店 housekeeping 的阿姨总是很友善,出租车司机也都热情到位,但这次跟上条提到的在清迈开民宿的老板娘聊了后发现一些很有意思的文化现象(主要指的是服务业人员,但也能够概括一部分整体特征)
- 很少把自己的真实感受会直接地告诉你,当面永远是偏向于热情和善,对所有事情也都应承,但背地里其实会骂你,只有经过了很长很长时间,才会信任你。
- 本质上很慢、也很“懒”,对于工作的态度很佛,当他们工作不开心了可能随时就辞职了,把积蓄花完再找一份工作。
带了这样观察的视角又在清迈生活了一周后,在用 Bolt 打车时遇到过两个事。周末的早上打车去瑜伽,有一位司机说正在送上一位乘客,大概两三分钟后到,等了十几分钟后我只是在平台的软件发了一句问他”where are you? I’m late“,他直接取消了订单;还有另外一次是我吃完饭提前打车,但是结账时候耽误了一点,我就跟司机说了一下情况让他稍等一会儿,结果他连续发了好几段话骂我,然后取消了订单 🤡。
可能他们并不想在工作上给自己任何压力,急单能不接就不接,反正又不是接不到了;工作中有让自己不开心了就也按照自己的心情来;对面有一家送煤气的据说是常年挂着招工的招牌,因为员工总是做一阵子,想不做第二天直接不来了。
当然不良的感受是极少数,大部分时间还是能感受到他们的善意,遇到了一个泰国司机,听到我们在讲中文后在 YouTube 上找了杰伦的歌单放给我们听。
这些大概是只有在本地生活一阵子才慢慢感受到的。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
文章
视频
- 28岁离职,决定拿首付80万,在大理开一个理想小院
- 在梅里雪山前和5年前的自己聊聊 | 带着5年前的自己去山顶整点薯条 | 跨越时空的对话
- “痛苦”的暴富和健康稳定的财富积累,你会怎么选?| 香港Web3异闻 | 贫瘠的力量 | 和朋友的随机聊天 | 于贞《遗书》
- 世界上两个造物的每一次相遇都是一场相互撕咬|《分成两半的子爵》
- 带全球限量1000台的相机,去4个国家,能拍成啥样?
- 一口气!跨越40年的日剧音乐巡礼!
音乐
- Last Days of September by Giant Ember
周报 #73 - 《社交网络》、Ego 与中秋的现充生活
前言
本篇是对 2024-09-09
到 2024-09-17
这周生活的记录与思考。
《社交网络》与 Ego
我和学姐从职业、爱好到性格都有非常多的不同,但并不是会相融的类型,因此常常也会去尝试或试图理解对方的 passion 所在,即使会常常发现更多的差异。
这周和学姐突然聊到为什么喜欢写代码,有时候这些动机和热情很难用只言片语来解释,突然想到几部影响我很深的电影/剧集,《The Social Network(社交网络)》、《Silicon Valley(硅谷)》等等,想到我订阅的 HBO MAX 已经好几个月没有打开了,于是趁着中秋假期一起看了《社交网络》。
大概是大学的时候我看了这部电影,后面的几年里又重温了几次,每次都能燃起我心中对代码与创造的热情,大概是由于把一个小小的想法实现为一个产品的奇妙历程总是让我着迷。
学姐提到 Mark 的自我中心、“渣”与背叛,或许天才或是成功的创业者或多或少有着自己的一些特质,但并不是必要成为一个“坏人”,好的秉性与好的技术/产品并不是那么水火不容,世俗意义上他成功了,但或许也失去了很多原本珍贵的东西。
在和学姐的闲聊讨论过程中我也发现了自己在其中 Ego 的部分,似乎「Code is law」的观念常常也会带来一些副作用,有足够的天赋或是写足够好的代码就会容易让人去忽视其中的自大、不尊重与不真诚的部分。
有时候这些观念也在侵蚀着我的日常生活,似乎 Coding 是极少的“仿佛”不需要合作就可以独立完成的事,也让我变得并不那么习惯于去合作,比如刚结束的 ETH Shenzhen 黑客松中我选择了自己一人队伍,很累,但似乎这于我而言是更为省力的一种模式,我似乎并不那么容易去信任他人,再深层一点我似乎并不觉得临时找几个队友能够做到什么我无法做到/学会的事,更严重一点也容易忽略他人的付出和贡献,尤其是非技术的部分,但有时候这还是挺糟糕的事。
正好公司内部很快就会举办一场为期一周的内部黑客松,我也会试着从中有意识地调整和观察自己在团队合作中的行为,也很期待一起做有意思的项目。
小小预告:和 Follow 有关。
中秋的现充生活
原本中秋想好好窝在家里写三天代码,但可能是由于前段时间总是睡前工作,精神和身体都有些许疲累,有点熬不动了,就趁着这几天好好休息调整了下。游了两天泳、去车库画了两天墙绘、第一次滑板上路、中秋回去家庭聚餐,现在的我现充得可怕。
似乎生活慢慢归于日常,多了很多似乎“无所事事”的时光,却也意外地珍贵。
想到今天在给墙绘画一块砖的时候,学姐说可以先近着描一些细节再走远了看一下整体,能够更好地把握画面。也看到墙绘从一开始到现在的对比图,看着墙面一点点增加细节(虽然我基本上是只是画了砖块),似乎也看到了生活的本质。
关于 RSS 的想法
上周我发起了一个选取邀请码的活动,原本只是因为邀请码稀缺而增加一些难度,但收到了很多评论,甚至总字数也远远超过了正文,能看到好多对于 RSS、阅读、信息处理的一些想法和探讨,发现 Remark42 可以订阅某篇文章的评论,我直接导入 RSS 链接 在 Follow 里看更新了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- GitHub - antfu/changelogithub: Generate changelog for GitHub
- Yaak – The most intuitive desktop API client
- GitHub - pseudoyu/Web3Insights: A comprehensive metric system for evaluating Web3 Ecosystems, Communities and Repos.
- GitHub - Dokploy/dokploy: Open Source Alternative to Vercel, Netlify and Heroku.
- GitHub - SpriteOvO/tgbot-mastodon-sync: A Telegram bot synchronizes Telegram messages to Mastodon.
- GitHub - ente-io/ente: Fully open source, End to End Encrypted alternative to Google Photos and Apple Photos
书籍
文章
视频
周报 #72 - 滑板体验、Rust Conf 与 Follow 公测(含邀请码)
前言
本篇是对 2024-09-03
到 2024-09-08
这周生活的记录与思考。
去上海参加了 Rust Conf 2024,度过了两天,收获了很多周边,现场在同事的指导下重构我的用 Rust 写的 Api Server;Follow 进一步扩大了公测规模,要到了 10 个邀请码,会在本篇的评论区发放;还有很多有意思的事。
Lake 游戏
虽然团队的项目已经在上一周顺利上线了,似乎依然有不少需要忙的任务,工作时间偏晚,再加上早上要晨跑,工作状态和睡眠之间的界限比较模糊,有时候躺着很久都睡不着。持续了接近几天后,整个人有些提不起精神,于是决定晚上在 Lake 游戏中送送信放松一下。
好久之前就在 Randy 的一条推文了解到它,作为「Life is Strange 系列」这类游戏的爱好者,对于这种更生活化、平静却又引发思考的游戏一直很感兴趣。
如我在「周报 #70 - 消失的附近,Burnout 与 Boreout」中所说的那样,早早离开家乡的我现在也几乎没什么还在联系的童年玩伴了,小镇风景和我记忆里的村落当然也是天差地别,却依然被能够在各个小屋、邻居家亲切打招呼,倾听他们故事的感觉心生向往,或许这样的生活方式比起繁华的都市更加让人变得具体而知足。
不要问我一个程序员下班的时候还要扮演一个程序员下班/休假,我之前下班还玩「Shenzhen I/O」模拟程序员上班 🤡...
滑板体验课
我从小时候开始玩了十几年轮滑,几年前也曾学过一小阵子滑板,不过不算很系统,一直很想精进一下,后面也可以习惯滑板上路。
因为只是一小时的体验课,教练更多从滑行、放板、收板和转体的一些入门动作开始,纠正了挺多之前自己玩时候的不规范动作,慢慢也习惯了在板上的感觉。后面有两次因为想尝试下陡坡而狠狠摔了两跤,疼但却反而更有了一些运动后的压力释放感,也更感知到这一运动的魅力。
不过系统性的课程还挺贵的,可能考虑先自己再玩一阵子,10 月去清迈旅居的时候去找当地的教练学。
摔太惨就不放图了。
RSSHub 部署迁移
前几天因为不小心同步 OneDrive 和 iCloud 的时候用了自己 VPS 搭的代理,主力机器流量被刷完了,导致自建的 RSSHub 也停了。因为作为公益公开实例挂在 RSSHub 官网上,想着还是维护一下,于是转移到了另一台闲置的 2C2G 的机子上,发现机器瞬间被打爆了,看了下平均每分钟 100+ 次请求...
研究了一下发现 Zeabur 的模板没法通过 WebSocket 来访问 browserless/chrome
服务,现在用的镜像也并不内置 Puppeteer
,很多网站没办法抓取,以至于很多路由失效,于是改了一下,发布了一个 Zeabur 模板,现在支持一键部署带 Puppeteer
的 RSSHub 实例了 —— 「RSSHub (With Puppeteer)」,欢迎一键部署。
然后自己部署了一份,也算是为 RSS 事业做贡献了。
Rust Conf
这次没怎么拍照,偷了同事的周边图。
似乎每年都有那么一两个月会更“现充”地参与各种线下活动,和远程办公的同事/朋友们相聚。在参加完 ETHShenzhen 不久后,我又约了一些同事朋友来上海一起参加 Rust Conf,度过了有趣的两天一夜。
搜刮了一圈周边,去看了几个感兴趣的 Talk,和新老朋友浅聊一会儿,最后还是聚众在会场的一角 Review 和修改我写的 Rust 烂代码,学到了。
早上刚到就京东下单了一本「Rust 程序设计」,刚送到在酒店大厅开始学了...
个人生活剪影
偶遇的有趣设计
上周去湖州莫干山尝试了一下林间木屋,本身体验普普通通,但在返程时见到的一个有趣的大眼树却印象深刻,感觉在车窗的滤镜下有很日系。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
文章
视频
音乐
- Stillness by A-Sun
Follow 公测特别活动
在之前的一篇「周报 #67 - 使用 follow 重塑我的信息输入系统」讲了我使用 Follow 这一应用的体验,依然十分惊艳。
一个多月过去了,依然是我每天都高频打开的软件,软件也迭代了不少新功能和亿点细节,慢慢也开始扩大公测规模了。
我向 DIYgod 要了 10 个邀请码来作为博客/频道读者的福利。
参与方式
在本篇文章下评论你关于阅读、信息流、RSS 使用或关于周报的相关想法,我会在北京时间 9.9 日 22:00 挑选 10 位发放邀请码,我会在评论区和 「Yu's Life」 Telegram 频道公布名单,选中的用户可以联系 pseudoyuconnect.hku.hk 或任意我的社交平台私信。
活动后也可继续留言,如果我后续能拿到更多名额(或者我努力签到赚 Token),也会继续在评论区发放,欢迎参与。
周报 #71 - Indie App 体验计划
前言
本篇是对 2024-08-26
到 2024-09-02
这周生活的记录与思考。
这周我们团队做的去中心化索引正式主网上线,异常忙碌,输入输出和学习相较之前都少了不少;收到了 PaddingLeft 的贴纸;体验了 Xylect,想到一个好玩的计划;还有很多有意思的事。
RSS3 Node
这周我们团队忙碌了大半年的去中心化索引项目终于顺利上线 —— 「A New Era of Decentralized & Verifiable Data for AI & Open Web」。
理念和设计方面可以看白皮书 —— 「Whitepaper —— The de facto RSS3 Constitution.」。
有兴趣的朋友可以了解下。
更换贴纸
Randy 的程序员周边品牌店上线了,见证了从他提到这个想法、到看厂家、再到正式上线售卖,执行力是真的强。
抢先体验成为了第一个下单的用户,刚好更换一批自己的贴纸。
在整理和更换贴纸的时候也发现慢慢成为了自己的记忆点。比如去 GopherChina 2023 拿了 JetBrains 官方的贴纸;去了 Rust Conf 2023 收获了很多小螃蟹;和同事去香港参加 Google AI 的会议拿到了 Google Cloud 贴纸,还在网吧枕着他们的周边抱枕度过了一晚。
突然有些理解手账的有意思之处,似乎能够通过这些痕迹来回顾自己去了哪些地方,又解锁了哪些新体验。
Indie App 体验计划
最近看到了一篇 laike9m 写的「推广独立开发产品,我做了哪些尝试」,讲了他推广 Xylect 这一划词 AI 搜索/翻译工具的历程。
自己其实也是早期 PopClip 的用户,后来也高强度使用 Bob、Haye.ai 等基于划词形态的产品,有些好奇,在官网看到有一条:
👨👩 Content creator? Contact me for collaboration and get free licenses
于是试着陈列了自己的 Twitter、TG Channel、博客、「GitHub - yu-tools」项目,发了邮件咨询了一下,很快得到了回复和 License 并加上了 TG 沟通,在使用过程中也提了不少用户侧的建议(有些已经在当前版本上线了),很新奇的体验。
文中有这样一句话:
开源项目永远是用户欠开发者,因为用户享用的是开发者的无偿劳动。而对独立开发(或者说所有的商业行为)而言,这种立场就完全逆转了。
自己一直很关注和向往独立开发,也试着自己开发过一些小产品,对于工具、效率类的开源项目和产品也常常第一时间去体验,时常有机会直接跟其开发者沟通,深知其困境。
而在和 WebP Cloud 和 Xylect 开发者沟通的过程中,也发现我作为工具类产品的深度用户,时常也能从用户的角度提出一些小的建议,并通过文章(如「从零开始搭建你的免费图床系统(Cloudflare R2 + WebP Cloud + PicGo)」)呈现自己的真实使用体验和教程,常常也有开发者在我的博客评论下留言自荐项目。
于是萌生了一个想法,想着自己的周报和工具站「tools.pseudoyu.com」新增一个 Indie App 体验计划的模块,去体验自己觉得很棒的产品,会尽可能结合开发者和用户两个视角来给出自己的真实体验和使用方式,感觉会很有意思。
我并不是一个体量很大的 Infulencer,只是通过文字传达自己生活、思考和体验的内容创作者,并不一定能为产品带来多少用户或是付费转化,但我依然觉得好的产品值得被看见,哪怕只是增加了一点点。
我会从自己日常使用的产品开始,标准想引用之前看到的这句话:
Create the things you wish existed.
当然也欢迎通过 pseudoyuconnect.hku.hk 自荐~
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
播客
书籍
- 福格行为模型,想纠正一下自己的一些行为习惯。
文章
视频
- 七年长跑,我求婚了,在鲸鱼的见证下
- 我想给你全世界最浪漫的婚礼,但我好像做不到了...
- 背景虚化就一定能出片吗?也许你还需要这些技巧!|索尼 85gm2 测评
- 聊聊理想的工作 | 投行经历 | 安利黑神话悟空 | 创业 | 技术热情/偏执 | 理想的工作 |【落 talk(英)】ep.02
- 你所相信的一切已经存在|书单《牧羊少年奇幻之旅》
- 天上最后的光《黑神话:弥勒》隐藏结局未济卦释义“无火处无经”
音乐
- 野孩子 by Miriam Yeung
周报 #70 - 消失的附近,Burnout 与 Boreout
前言
本篇是对 2024-08-19
到 2024-08-25
这周生活的记录与思考。
消失的附近
大概由于童年有七八年都是在老家长大,刚搬来杭州时候我所在的社区也有一群年龄相仿的玩伴,我大抵还算是一个“野孩子”。
在老家时候就不用说了,爬树、抓知了、下河摸鱼,折几枝柳树藤蔓自己做弓箭或是削弹弓,天地广阔,似乎总能有自己的乐趣。即使是到了杭州后,小时候每次吃完晚饭最期待的都是出去街道喊一声,会有人一起玩轮滑、滑板,会走街串巷地闲逛,也会去“富有”的朋友家里看他玩口袋妖怪(现在的「宝可梦」)。
而不知是自己年龄渐长还是整个城市变了,似乎现在鲜有“邻居”和“社区”的概念,总是一家一户一生活,甚至对家附近有哪些店、发生了哪些事也一无所知。
少年意气风发时候的自己自然是不甚在意,有很多同学、朋友,每次约出门也都是在繁华闹市街区,生活的“附近”太小,装不下自己的多彩生活。
然而,离开校园后的这几年的感受会更明显一些,即使生活确实显而易见地比之前丰富得多了,内心的孤独感却日渐增加。许多朋友渐行渐远,大家都有了新的工作、生活甚至是家庭,有时常常连开心或是难过的情绪都一时不知该向谁说。
还想起有一次在北京和渐仔相约打羽毛球,也一起吃了个晚饭,我们在合生汇看到了一个街机游戏厅,一起打了一个多小时的「三国志」,现在的我们已经可以不太在意花了多少游戏币,能不能打到通关,似乎只是想从中找回少年时的快乐。
可是却再也找不到了。
今年开始更频繁地去良渚和朋友一起办公,即使逾半小时的车程有些折腾,杭州夏日扑面而来的热浪也令人却步,在这每周难得的体验中似乎能够重新获得一些生活的能量和图中所说的对“附近”的感知能力。
Burnout 与 Boreout
前几周的某个周末,同事突然来问我最近状态怎么样,是不是发生什么事了。我起初有些诧异,其实自己感觉一切还算正常,详细聊了下后,才发现是自己的感知和实际的感知之间存在一些偏差,刚好也看到了这篇文章 —— 「Is it burnout or boreout?」,于是仔细回顾了一下这几个月的状态。
Burnout
总是有一些朋友会问我说是不是同时做的事太多了,但其实我自知并没有,甚至内心深处还是会焦虑自己做得依然不够多不够好。大概是“冒名顶替综合征”的影响,我总是觉得自己并不如同事朋友们那般有天赋与创造力,我似乎总是需要额外做一些事来填补内心的这种“不配得感”。
因此自大学来我一直以来都有“多线程”的倾向,在刚毕业职业发展的前期其实这种倾向给我带来了不少好处,我似乎成为了那个别人口中的“卷王”,总是在职责范围内做更多,学更多,也因此取得了许多不错的成果。
然而现在从实习开始算起的话,工作已经三年有余了,随着自己的能力刚刚好能满足工作的需求却有时候似乎难以有一些创新的时候,自己陷入了一种痛苦的“Burning Out”状态,一种职业的倦怠感,似乎有着一些工作量,但其实远远没有达到自己的承受范围或是极限,但有时候会让焦虑和自我怀疑包裹着自己的工作时间:
这个实现方案正确么?
我是不是应该在这个基础上做更多的优化,但似乎还没什么好的思路?
似乎同事都能够 handle 好自己的部分,我是不是应该更主动一点找到自己的定位?
...
这种 Burnout 的状态很狡猾,并不会让自己倦于工作本身,而是隐藏在工作量之下,所以自己甚至不太容易感知到,倦怠本身是一种情绪,让我缺少足够的能量去应付,同时会侵蚀自己的目标感和控制感,造成拖延和一些任务的错漏,然后加重自我怀疑。
Boreout
工作的前两年其实一切都是新的,工作任务和技术学习所带来的正反馈和刺激感很强,而现在工作任务只要付诸时间基本上能够独立或和同事的协作下完成,但由于工作内容相对稳定了,一项项 checklist 打钩所带来的满足感远远比不上学习一门新语言或是新框架,自己似乎又陷入了一种“Boreout”,对自己所做的工作内容以及自己所能为这份工作贡献的价值产生了怀疑。
以同事聊到工作状态之后这两周正视了这一问题,感觉产生了一些效果,恰好也对应文章中给出的几种解决方案。
Align
当时选择参加现在的公司和项目时,更多是由于其氛围和价值观,一年多过去了,其实原本的理由犹在,外力并不是造成自己状态改变的理由,应该更多向内探索。
Brainstorm
自己其实算不上什么独狼的性格,只是确实常常有些难以做到去麻烦别人,再加上有些 i 的性格,在群组讨论中似乎更多还是听从者的角色,参与感的缺失有时候也是自我怀疑的来源,像是和同事聊聊自己的问题,或是线下一起办公、参加活动,似乎能够更多汲取热情和能量。
Experiment
尝试在工作方式上做一些小的改变而不是因循原有线性的模式,并不每次都把“创新”作为唯一目标(往往会因无法达到而产生挫败感),有时候仅仅是一些方式的改变,在技术调研时的多几分探索,似乎就已经足够产生一些改变了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
书籍
- 福格行为模型,想纠正一下自己的一些行为习惯。
文章
- Cursor 技巧(第二弹)
- How we built Townie – an app that generates fullstack apps
- Copying is the way design works
- Is it burnout or boreout?
- Postgres as a search engine
视频
周报 #69 - AI Coding 体验与学习的源动力
前言
本篇是对 2024-08-12
到 2024-08-18
这周生活的记录与思考。
从 VS Code 转向 Cursor 写代码,聊聊 AI 加持下的编程体验;和学姐在一起 400 天;某天和学姐有了关于过去经历和兴趣爱好的一次深夜长谈,引发了我对自己的学习源动力思考;还有很多有意思的事。
AI 加持下的编程体验
这两周高强度使用了 Cursor,一个基于 VS Code 的 AI IDE,效果很惊叹。
我其实算是 GitHub Copilot 的非常非常早期的内测用户,直到现在也还在用;而在 ChatGPT、Perplexity、Devv.ai 和 Claude 出现后也都是高强度的付费用户,思维上已经很习惯使用 AI 来帮我写代码了,但是更多还是补全部分逻辑和调试 Bug,没办法做到项目级的辅助。
而在 Cursor 把整个项目作为上下文、提问时可以 @ 其他文件或代码、并且使用 Claude 3.5 Sonnet 模型之后,体验感和可用性已经和我想象的形态越来越近了。
实践上,在试用 Pro 的 15 天中,解决了我工作中的 Go 的一些 Bug 修复和新增 Tests;改进了 Electron 应用的一个更新提示界面和功能;从零开始帮助我写了一个 rust 的后端 CRUD api 包括完整的 Dockerfile 和 GitHub Action 部分;帮助我完成了一个 Remix 项目的数据可视化部分以及很多个界面的调整,精确到各个页面之间的交互和布局;以及顺便还帮我学了一些 SwiftUI。
我大概已经有 50% 以上的代码是在 AI 辅助下甚至直接 AI 生成的了,而我更多的时间都是「CMD + K」(Cursor 的代码生成快捷键)的对话框中跟 AI 沟通需求,在梳理 prompts(大部分就是按照对话自然语言来表述),对话或是等待代码生成的时候反而有了更多时间去思考代码架构、逻辑、更合适的第三方库等。
其实让 AI 了解我的需求的时候,自己也在反复思考其合理性,反而能产出功能和代码质量都更优的代码,至于语法和代码风格方面,我常常直接去研读和学习 AI 的实现,比起从零开始去读一个开源项目要好上手得多。
而我需要做的,就是设计和创造。
正如 Randy 在 「代码艺术家」不会被 AI 取代 一文中所引用的:
I realize the reason I like building is not just because I’m a builder.
我意识到我一直喜欢创造点东西的原因不只是因为我就是个创造者.
It’s because software products are how I express my creativity.
而是因为写软件产品是我表达我的创意的一种方式
It’s like a poem to a poet, a song to a songwriter, a painting to a painter…
就像诗人的诗,歌手的歌,画家的画
Software is my art form, my medium of expression.
软件是属于我的一种艺术形式,是我表达(创造力)的媒介。
ETHShenzhen Hackathon
上文提到的项目是我周末在深圳参加的活动,其实算是自己正经作为选手参加的第一个 Hackathon 活动,通宵两晚写完了 Demo,在现场写了基础的演讲大纲和几张简略的 PPT,最后完成了 Demo 演讲,比想象的还是要累不少,周日才睡上一个好觉。
学习的源动力
有一天晚上从给我妹妹选滑板开启了话题,和学姐夜谈到了过去的一些经历,以及自己的各种兴趣爱好。
我的奇奇怪怪的技能树和兴趣爱好其实不算少。学生时期大大小小的运动至少都接触过,大部分也还算上手;小时候也用那种扭扭的滑板四处刷街;轮滑自小学开始到大学参加轮滑社坚持了接近十年;跟着我表哥一起去游泳馆玩,自然地学会了游泳;大学后玩了摄影、学了剪辑,在全校飞无人机,也成立了工作室从各种灯光布景都研究了下;做过审计的实习、甚至因为创业开公司而自己把注册公司、财务报税、开发票、企业清缴汇算申报以及注销流程在没有中介和财务的帮助下自己操作了近两年;工作中也是对各种编程语言框架都很好奇,算是经常尝鲜。
我似乎一直有这样野路子学习的倾向,以及在学到了恰好足够满足我当时的需要时就戛然而止,并没有更多的欲望去深耕其中。例如,我算是喜欢摄影,甚至在做摄影和视频相关工作室创业的时候也有过把它作为自己事业的念头,但那么多年其实我似乎并没有真正地从构图、光影、色彩、修图这些去系统学过,视频拍摄剪辑也没有从戏剧理论、导演思维这一块打基础,只是在需要用的某个技巧或是功能的时候再去快速学习,够用但也仅仅是够用。
我认真剖析了自己的内心,发现了很有意思的现象,还会追溯到童年甚至更小的时候。
我很小的时候转学来到杭州,其实花了很多时间来让自己讲话不带乡音、以及花了好几年成绩才慢慢达到中上,也经历过一些带着歧视或是不公,内心积累了不少自卑的部分。而随着初中遇到了很好的老师,生活和学业才慢慢走上正轨。
这时候其实多了另一种评价,“你做到 xxx 一定很努力吧”。
我并不是否认“努力”的重要性,只是常常被那么说,总觉得有些挫败,似乎连我自己都觉得,我就是不如别人,只是很努力,所以比别人取得了更多的收获,陷入 Impostor syndrome (冒名顶替综合征) 的自我恶性循环。
于是我慢慢开始不那么“努力”,似乎在向他人和自己证明,我能“轻易”做到这些事,渐渐地,也享受其中。
带给我快乐的常常并不是学到的知识或运用它实现什么,而是“学习一个新东西”和“我能够很快学会它”这样的心理正反馈。这带给了我一些好处,如长期这样乱点技能树积攒的信心让我面对新事物或许多看似遥远的目标时不会那么畏惧 ——
“过去的我做到那么多了,现在的我一定也能”。
但也让我有时候并没办法沉下心做好一件事,或者把某项真正喜欢的事做到最好,有广度而缺深度,感觉也是一种 trade off,慢慢也开始有一些改变。
个人生活剪影
400 天纪念日
和学姐 400 天了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- GitHub - lokalise/i18n-ally: 🌍 All in one i18n extension for VS Code
- electric-capital/crypto-ecosystems
- omarespejel/starknet-star-tracker
播客
文章
视频
周报 #68 - 关于写博客这件事与我生活的色彩
前言
本篇是对 2024-08-05
到 2024-08-11
这周生活的记录与思考。
从 TG Channel 里回顾了一下这周,发现一整周都围绕着搭博客和写博客这两件事,有了一些思考与分享欲,大部分内容都发过,算是一个整理了。
写博客的 ROI
前几天在推特上看到了关于写博客的一些讨论,又看到 Innei 的这篇「从讨厌写作到乐于分享:我与写博客的心路历程」,很有意思,于是趁机仔细回顾了一下整个写博客的历程与收获。
最后得出一个个人的结论是,我也觉得写博客是一件成本不低、周期长但 ROI 非常高的事。
如果按照广义的发自本心的写作来说,从高中左右就开始写散文、公众号、博客等等,持续了接近 10 年了,真正直接从为自己写的文字赚到的收入大概只有少数派发的六七篇上了首页的文章共计 3000 元左右稿费和一位读者坚持了一年多了依然还在每个月给我 GitHub Sponsor 的 5 刀赞助。
一开始就有心理预期,脱离了公司的薪酬外,不管是做产品还是写文字,哪怕让用户/读者为你付一美元都是一件并不容易做到的事,但就像 Randy 在 Notepal 的一篇文章里说的,「有人愿意购买」的意义远比数目的大小更大。
写博客也带来了非常多潜在的意义和回报。我去年来现在的公司面试时,一位当时的面试官现在的同事就有说,全组在面试前都有看过我的周报,对我的性格、技术力和学习能力等已经有了一些初步的了解了;在社交媒体上,也通过文字让我和许多我非常崇拜的人有了更多更深度的交流甚至是合作;在许多线下活动做了简单自我介绍后,也常常能听到一句“哦,我看过你周报,很喜欢”。
这些都是并不以此为目的但在长期的坚持中收获的惊喜。
而不论是写博客还是其他形式的创作,似乎都有着相似的路径。起初新鲜而动力十足;逐渐在漫长的周期中消磨信心,看到别的好的文章/作品感受到的不是美好而是压力 —— “为什么我写不出来”;慢慢沉淀回归自我,恣意、快乐,享受其中。
我生活的色彩
想起来在刚写周报的时候由于读了村上的一本小说而写的「周报 #09 - 没有色彩的 Yu 和他的巡礼之年」,里面我这样写道:
多崎作所在的小群体中其他四人以及后续结交的挚友的名字都巧合地包含了颜色词:“赤”、“青”、“黑”、“白”、“灰”,让他感觉自己就像是一个没有个性的存在,连带着没有色彩的人生。
其实关于自己名字的埋怨常常有,『请回答 1988』里德善也有向父母埋怨自己的名字毫无特色,不如姐姐宝拉。我也曾有过这样的想法,似乎自己的名字简短而没有特色,再加上也是几个大姓之一,常常在一个学校遇到不少同名的人,与之相伴的就是自己常常也需要额外努力才能留下更多记忆点。
虽然后续也和自己和解了,但似乎还总是感觉自己的生活与有趣已经无缘了。总是羡慕别人的有趣个性和经历,也常常在即使自己做得不错时也只是觉得在履行自己平凡人生的职责或是这些都并不属于自己。
就这样平凡的我常常也会犹疑,自己的生活“流水账”是否有这样的价值呈现在所有人的面前,直到最近恰好在 B 站上看到这样一个视频 —— 「什么是好看的色彩?拍视频五年,我调色成了什么样」,是讲调色相关的,里面的一句话却深深打动了我:
当我第一次把镜头对向自己的时候,我才发现拍得可以那么惬意,没有压力。这时我才发现,我以前羡慕的不是那个画面,而是背后浪漫热烈的生活,这是我爱折腾的意义,我想让你看到我眼里的世界,而我屏幕里最好看的颜色,就是我生活的底色。
这是对我现在写周报时的心境最恰如其分的形容。
博客搭建系列
博客搭建系列终于更新完了!前后加起来也有 10 篇之多,自己也算是入围博客装修赛道的了。
从一开始 Vercel 部署都不太会用,到现在市面上的 Serverless 几乎都玩过一圈了,很有意思的体验,一切都按照想法运作的体验真的很美妙,搭博客和写博客确实各有乐趣。
2024 版
比起两年前其实发布流程与外观几乎没什么变化,但组件和内容却已经很不一样了。
- 2024 年了,我的博客有了什么变化
- 从零开始搭建你的免费博客评论系统(Remark42 + fly.io)
- 使用 GoatCounter 与 Zeabur 搭建网站数据统计系统
- 从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo)
- 使用 WebP 与 Cloudflare WAF 为你的图床添加隐私和版权保护
2022 版
除了平台有些变化,很多不再提供 Free Plan 外,流程基本都依然适用的。
- 2022 年了,聊聊我为什么还在写博客
- 免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)
- Hugo + GitHub Action,搭建你的博客自动发布系统
- 从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)
- 轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)
不知道下一次更新这个系列的时候,自己会在做些什么,又在想些什么呢。
多语言支持
其实我的博客一直是有双语的功能选项的(导航栏可以全站切换/文章中也可以直接点击对应语言切换),只是一直很偷懒所以只是把中文文档复制过去,今天早上通过 Claude 的 Projects 功能把现存所有文章都翻译了。
新建了一个 Blog Translation 的 Project,输入一个全局 Instruction,之后就把 Hugo 的 markdown 源文件丢进去就可以了。
模型使用的是 Claude 3.5 Sonnet,为了节省上下文,我每篇文章开了一个新的对话,发现一百三十多篇文章都翻译完了居然还没触发 Claude Pro 的 usage limit(在 9:40 am 的时候提醒了一下 10 am 前只剩 10 条,之后再也没有出现过),有点良心。
因为我今天的目的主要是完成所有文章的转换和粗校,后续内容上的还是会人工去校对一下,所以用的 Prompt 比较简单,不过返回格式的可用性和翻译质量都超乎想象。
You will receive a Chinese blog post in Markdown format (.md) using the Hugo template. Translate the content into English, adhering to the following guidelines:
- Use a literary tone for posts in the "Idea" category; otherwise, employ a professional tone.
- Maintain consistent terminology, especially for structural elements like "preface" and "conclusion".
- Preserve all Markdown formatting and metadata, including Hugo properties, links, audio, images, and other elements.
- Translate only the blog content itself.
- Return the result in Markdown format for easy copying.
- Do not add any introductory statements, explanations, or additional content to the blog.
- Provide only the raw translated Markdown content in your response.
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
书籍
- 献给阿尔吉侬的花束,很久之前读过,重温一下。
播客
文章
- 从讨厌写作到乐于分享:我与写博客的心路历程
- 使用 GoatCounter 与 Zeabur 搭建网站数据统计系统
- 还在为了不同分辨率的设备手动生成小图?WebP Cloud Services 上线 Adaptive Resize 功能
- 周记#4 | 语言学习心得
- 「代码艺术家」不会被 AI 取代
视频
- 我在秒速五厘米的电车前,向十年前喜欢的同学求婚了
- 什么是好看的色彩?拍视频五年,我调色成了什么样
- 你的下一个宝可梦,何必是宝可梦?—《真女神转生 5 复仇》【就知道玩游戏】
- vlog #68|程序员下班后的学习记录|写写代码充充电的日常|《献给阿尔吉侬的花束》大虐|在读《巴菲特致股东的信》|日常英语学习|TED|在家失眠中😪
电影
- 生活多美好,久违的看到流泪的片子。跟《土拨鼠之日》一样,看完会重拾一些对生活的热情与周遭 relationship 的思考;也不需要多么精致的画面或是置景,演员的眼神似乎都是亮的,透着灵性,这大概也是老电影的魅力。
使用 GoatCounter 与 Zeabur 搭建网站数据统计系统
前言
在「2024 年了,我的博客有了什么变化」一文中,我介绍了自己使用 Serverless 平台和一些开源项目搭建的博客系统,也开启了这个系列教程来记录搭建和部署全过程。
本篇是关于统计系统的解决方案。
统计系统方案
相比起博客本体和评论系统,我在很长的一段时间其实都没有在意过统计系统(主要当时也没人看),更加没考虑太多 SEO 或是什么其他推广方向上的事,但后来逐渐发现,其实统计下来的数据并不只是一张好看的可以用来发推的图表,其对于博客的选题、内容都有着很大的参考价值。
其实主流成熟的方案都能够满足基本的需求,即使是免费的 Google Analytics 也完全够用,但在博客发展过程中,我依然因各种原因有过几次迭代,最终使用了 GoatCounter 这一方案。
splitbee
我最初使用的是一个免费的工具 splitbee,它提供了免费的基础统计额度,有着还不错的界面,并且还支持一些复杂的用户追踪,A/B test 等,但印象里好像只能保留半年的数据,并且每月超过 5000 pv 后就需要升级了,所以后来放弃了。
Cloudflare + Google Search Console
放弃 splitbee 之后,很长一段时间我没有集成额外的统计应用,而是用的 Cloudflare 自带的站点统计,但是发现它其实统计的只是网络总流量,有包括爬虫在内的非常多的无效数据,并且没有精确到路径等细节。
后来了解到了 SEO 这一概念后,又添加了 Google Search Console 这一统计维度,这也是目前觉得对我写博文最有意义的数据,主要呈现的是用户在搜索引擎中触达我博客站点的关键词以及通过搜索点击进入我博客的页面路径。
可以看到,一篇「Warp,iTerm2 还是 Alacritty?我的终端折腾小记」为我带来了许多访客,而关于博客搭建、智能合约开发也是大部分从搜索引擎来的自然用户对我博客的第一印象。
Umami + Supabase + Netlify
但是上述两者依然只能看到网站整体的数据,想精确到某篇文章在一段时间的表现或者文章发布后的实时访问数据,依然需要一个统计系统,我在看了 Reorx 的一篇「搭建 umami 收集个人网站统计数据 | Reorx’s Forge」选择使用了 umami 这一开源、易自部署的统计系统,界面简洁,功能易用,很方便集成到自己的博客系统中。
使用了一年半,一直倒没出现什么问题,,只不过可能因为自己用得比较早,在一次大版本更新的时候数据库 Migration 脚本出现了不兼容的字段更新,其实有点不理解这样量级的开源项目为什么会出现这样的问题,也看到 issue 中有很多其他用户有同样的诉求,但最终并没有给出一个比较好的解决方案。
但其实最大的问题是一个统计系统依赖了两个平台,部署和维护上都还是有些太重了。当数据库或是 Netlify 任一出现问题或需要迁移时,会带来许多额外的成本。于是前段时间在更新博客评论系统的时候,想着干脆就一起更换为更轻量的 GoatCounter。
GoatCounter + Zeabur
这个小众的统计系统是我在看 Reorx 的博客代码更新的时候偶然发现的,一下子被这种 Retro Internet 的风格所吸引,几乎没有任何多余的按钮,功能却很完备,而且使用的是 go 单二进制文件 + sqlite 数据库单文件的架构,轻量而易于部署,于是打算迁移。
其实我自己的 GoatCounter 是部署在 fly.io 上的,但我在上一篇 Remark42 的文章中已经非常详细地介绍了 fly 的操作说明,不想有太多重复,刚好最近又在重度使用 Zeabur 这一 Serverless 平台,于是本文将以 Zeabur 为例,方式同样适用于其他类似平台。
我也在下文的 Zeabur 部署方案之后提供了 fly.io 和在 VPS 上使用 docker-compose 部署的配置文件,供大家参考。
GoatCounter 部署说明
GoatCounter 本身代码开源 —— 「GitHub - arp242/goatcounter」,文档清晰易读,可以根据自己的实际需求进行配置。GoatCounter + Zeabur 的方案仅牵扯到单个服务,数据库使用的是 sqlite 挂载于 volume 中,所以部署起来非常简单。
使用 Zeabur 部署
Zeabur 对于容器应用的部署是需要 Developer Plan 的,5 美元/月,但是像这样的镜像服务整体用量和费用都较低,每月的额度足够部署非常多服务,可以酌情选择。整体部署流程比起 fly.io 简单很多,所有操作都可以使用 Web 界面完成,不需要额外安装命令行工具等。
注册 zeabur
访问 Zeabur 官网,并点击右上角,使用 GitHub 账号授权登录。
创建新项目
进入主界面后,点击右上角 创建项目
按钮。
我选择了香港的 AWS 机房,不同机房的访问速度、性能和价格会有一些差异,可以根据自己的需求进行选择。
配置镜像部署
在下一步中选择 Docker 容器镜像进行部署。
由于我们使用的是自己构建的镜像,官方也没有上线 GoatCounter 模板,因此我们点击选择自定义。
这一步可以自己在界面上填写各种配置项,但可能由于我习惯了 fly.io 的文件配置模式,我选择左下角的 编辑 TOML 文件
,大家也可以直接复制我的配置文件并直接修改。
name = "yu-goatcounter"
[source]
image = "pseudoyu/goatcounter"
[[ports]]
id = "web"
port = 8080
type = "HTTP"
[[volumes]]
id = "goatcounter-data"
dir = "/data"
[env]
PORT = { default = "8080" , expose = true }
GOATCOUNTER_DB = { default = "sqlite3://data/goatcounter.sqlite3" , expose = true }
配置好后点击右下角部署按钮即可。
部署完成
点击部署后,等待片刻,会有一个生成的项目默认名称,可以在左上角的设置中去修改为可读性较强的名称,如 yu-goatcounter
。
配置自定义域名
服务部署完成后,我们需要进行域名绑定才能通过公网访问网站,Zeabur 提供了免费的二级域名 xx.zeabur.app
,也可以绑定自己的域名。
其中生成域名可直接使用,无须进行其他配置,如 goatcounter.zeabur.app
;而如果使用的是自定义域名,则需要在自己域名管理后台添加 CNAME 记录,指向格式为 xxx.cname.zeabur-dns.com
的机房地址。
例如我的域名托管在 Cloudflare 上,添加的 CNAME 记录如上图所示,有去问过官方,说如果选 AWS HK 机房的话可以不使用 Cloudflare 的代理,速度理论上会更快,可以根据自己的需要酌情配置。
此外,如果你选择的是华为云机房,则需要域名备案并且额外新增一条 TXT 记录,可以根据提示进行操作。
显示绿色则为配置成功,至此我们的 GoatCounter 服务就部署完成了。
数据备份
我们在配置时候有这么一段
[[volumes]]
id = "goatcounter-data"
dir = "/data"
功能是将容器内的 /data
目录(即我们的 sqlite 数据库存在的位置)挂载到一个 id 为 goatcounter-data
的存储卷,如果不挂载存储卷的话,容器重启或重新部署数据将会丢失。
关于存储卷这一点 Zeabur 的界面上没有很直观的显示和管理操作,以至于我总是怀疑自己的配置是否生效。
研究了半天发现可以先在设置中暂停服务,然后在上面的备份模块新增一个备份,点击下载后可以在本地看到我们备份文件,目录层级如下:
data/
└── goatcounter-data
└── goatcounter.sqlite3
这样则能表示我们的数据成功持久化了,希望 Zeabur 能在界面上有更直观的显示。
使用 fly.io 部署
纯免费的方案依然可以参照我提到的这篇「从零开始搭建你的免费博客评论系统(Remark42 + fly.io)」,仅在 fly.toml
配置部分不同,我也提供的我所使用的配置文件 —— 「fly.toml」供大家参考。
使用 Docker 与 docker-compose 部署
有意思的是,因为 goatcounter 的作者很有坚持,觉得这样单文件的应用容器化反而会增加更多维护成本,所以不提供官方镜像,不过自己在 vps 或者 serverless 平台部署有个镜像还是方便一些,所以我使用 Github Actions 做了一个构建镜像和上传 Docker Hub 的 CI,有需要的可以使用,对应的 Dockerfile 和 Docker Compose 文件也可以参照这个 Commit,或者直接使用 pseudoyu/goatcounter
和 docker-compose.yml
文件即可。
version: '3'
services:
goatcounter:
image: pseudoyu/goatcounter
ports:
- 8080:8080
environment:
- PORT=8080
- GOATCOUNTER_DB=sqlite3://data/goatcounter.sqlite3
volumes:
- ./data:/data
restart: unless-stopped
GoatCounter 配置说明
上文我们完成了 GoatCounter 服务的部署,现在就可以通过我们生成/自定义的域名访问到我们的统计系统服务了,如我是通过 https://goatcounter.pseudoyu.com
进行访问的。
第一次登录需要创建一个用户,填写邮箱、密码点击 Create
即可。
登录成功后,当前还没有数据,会提示一个脚本,后续在我们博客使用的配置中会用到。
博客配置 GoatCounter
跟着上文我们完成了 GoatCounter 服务的部署和基础配置,现在则需要在我们的博文中加入统计组件,以我使用的 Hugo 博客为例。
<script data-goatcounter="https://goatcounter.pseudoyu.com/count"
async src="//goatcounter.pseudoyu.com/count.js"></script>
将上述代码加到我 hugo 主题的 head
中即可,如我的 Hugo 主题在 layouts/partials/head.html
这一文件,不同主题或是不同 SSG 框架位置有所不同但大同小异。
有一点要注意的是, goatcounter 会忽略来自 localhost
的请求以避免在本地预览时造成太多脏数据,因此在本地调试时是看不到数据的,需要部署网页才能看到访问数据。
收集了数据后的效果大致如上图所示,还可以在 GoatCounter 界面中设置一些配置项、新增网页、查看详细数据等,包括还可以显示每个页面的访问计数等,可以自己根据文档进行探索。
总结
至此我们的博客统计系统就搭建完成了!本文是我的博客搭建部署系列教程之一,博客主题体部分都已经完成了,剩下只是一些例如博客内搜索等细节体验优化,希望能对大家有所参考。
周报 #67 - 使用 follow 重塑我的信息输入系统
前言
本篇是对 2024-07-31
到 2024-08-04
这周生活的记录与思考。
这一周最开心的是体验到了 follow,久违的一款让我有兴奋感的应用,对比了 Readwise,并决定退掉订阅;做了一套自部署的 Web Archive 方案,eat your own dog food 的感觉真好;继续和学姐一起做墙绘;还有很多有意思的事。
使用 follow 重塑我的信息输入系统
我的信息输入系统
很久之前自己其实是一个信息重度依赖者,遇到好的博客/资讯网站,迅速加到 RSS 订阅源中,看着分类/标签井然有序的列表傻乐;遇到好的 newsletter,也马上用邮箱订阅;每天早上第一件事就是把当时还在用的 Reeder 4 未读清空,再将 newsletter 中的邮件一条条浏览。
起初其实还行,似乎自己关心的一些资讯和文章都能第一时间读到,有一种满足感,但逐渐就有些过载了,每天早上花在上面的时间越来越多,即使并不感兴趣的文章也会花费一些时间去消化,与其说是获取信息,倒不如说是一种信息渴求和对信息焦虑的代偿,效果自然是有的,信息都在大脑中留下了痕迹,但消化效率并不高。
在阅读了「使用自动化工作流聚合信息摄入和输出」和「对 Newsletter 说不」这两篇文章后,我做出了很大的调整。
信息源方面,我退订了所有公众号和 newsletter,并将 RSS 订阅源缩减到 50 个左右,剩下的大部分输入都来自于 Twitter、他人的 Telegram 频道等,在把输入控制在一定量级的同时一定程度上避免信息茧房。
并且由于使用 n8n + telegram channel 构建了一个输入、输出源的自动同步系统,会把我所有筛选过的信息源自动同步到我的 Telegram 频道「Yu's Life」中,方便自己查看和回顾,顺便也作为一个个人分享渠道了,而因为有了公开的压力,也反向推动我更认真地筛选信息源。
但这个方案依然存在两个问题:
- 依然没能解决我信息源分散的问题,我需要频繁在 Twitter 和各个 TG Channel 之间切换,很容易分心并且依然可能会错过一些消息
- 我常常把频道作为我某种程度上的收藏夹,有时候很多信息很个人化,随着频道的关注者越来越多,我也会有一些心理压力,担心成为他人的信息噪音
而 follow 的出现恰好填补上了我方案的这一环。
follow
介绍
Next generation information browser
这是 follow 的 slogon,发布之前我也仅仅是把它作为一个 RSS 阅读器的 Alternative,虽然我也很熟悉 RSSHub 且自己部署了实例重度使用,但依然很难想象基于这一古早的协议还能有多大的发挥空间,直到发布和几天高强度使用后,才逐渐理解这一理念。
在 RSS 早已式微的当下,除了独立博客这一处境差不多的古早形式几乎都还保留着完整的 RSS 支持外,大部分新闻、资讯和各种小众网站都已经不再提供了,RSSHub 则是完美的且几乎是唯一的解决方案了,可以将包括但不限于 Twitter、TG Channel、Bilibili 和网易云歌单的一些网页信息源转换为标准 RSS 格式,可以像订阅文章一样获取这些信息源的更新。
然而,RSSHub 终究还是更中间层一点的工具,即使有了标准的 RSS 数据,大部分阅读器依然只能处理文本显示,对于音视频图片的处理基本上只停留在当作一个 url 这一程度,因此我更多也是应用在自己的 n8n 同步工具流中作为通知,只保留其 title 与链接,依然是点击源链接跳转会对应的网页查看,使用起来常常有些割裂。
follow 最大的特点自然还是传承于 RSSHub 的「万物皆可 RSS」理念,在应用层对视频、图片、博客音频、文章、社交媒体等多种形式的内容都提供了呈现方式,确实有一种看久了 pure html 突然飞跃到加了现代化 css 效果的感觉。其实技术层面做到这一步算不上有太高的壁垒,不论是视频 iFrame、音频播放器或是图片预览都有比较成熟的组件可以使用,但 follow 几乎是唯一一个依然在针对这一协议做且做好这一步的产品。有时候,做好一点就足够了。
体验
作为一个信息浏览器/阅读器,最直观且核心的就是界面和交互了,DIYGod + 拾一两位的组合早早把我的期待值拉满,但即使是内测的第一版,其完成度和体验也依然让我感到惊艳,在此之前最现代化的应该要数 Reeder 4 了,而 follow 即使是 Electron 而不是纯原生,也依然保持了极其精致的设计和交互。
我之前用过 NetNewsWire、Reeder 4、Miniflux 和 Readwise Reader 等多款阅读器,但由于阅读体验常常还不如原网页,我大多还是会选择跳转链接查看,而 follow 的页面和交互则本身就让我享受其中,还有一个很有意思的最近阅读记录显示,可以看到自己这篇文章有哪些访客,还可以点进主页去看他们的订阅源,兼具了社交属性和信息源的积累,我就通过这种方式发现了很多之前没关注到的个人博客。
另外,由于 follow 和 RSSHub 深度集成,可以实现输入 twitter handle,B 站 uid 以及 youtube channel name 之类的来直接订阅社交媒体,而不用自己去文档找 RSSHub 网站的对应路由,也不需要自己去搭建实例,非常友好。
而针对视频和图片的直接显示也是一大亮点,还看到有一个使用者将一些设计师的 Twitter 作为自己的设计灵感源和审美积累,也是很有意义的应用场景。
而音频/播客则可以在 follow 中全局播放,例如前几张截图的左下角,我就是同步在播放「代码之外」的一期节目,这也解决了我需要在 Apple Podcast、Spotify 和小宇宙等多个播客应用之间反复横跳的问题。
另外也可以比较方便地分享自己的订阅:https://web.follow.is/profile/pseudoyu
其实还有不少设计,如 Action 模块、Power 打赏等,但本文并不是一篇软件测评而是个人体验向,所以就不过多展开了,等后续开放了大家可以自己去体验一下,保留一些惊喜感。下面想谈谈和我目前所在使用的 Readwise Reader 的对比,以及我为什么打算转换到 follow。
Readwise Reader -> follow
我大概是去年 9 月订阅了 Readwise Full 会员,虽然为发展中国家提供了 50% 的 discount,但依然需要接近 50 刀一年的费用,它大而全,但我使用的核心功能其实只有三点:
- rss 阅读器
- 稍后读、 保存文章与划线标注
- Daily Digest
其中第一点是最高频的,作为一个很方便的阅读器来管理自己的文章等订阅,也有移动端 app 可以随时看,但在使用中发现有时候显示样式和图片加载比较一般,而分类、快捷键又有点太繁复,且主要支持的还是文章,显而易见可以被 follow 完全替代(蹲一个移动端)。
划线标注之前用得比较多,会使用插件在一些文章做一些笔记,并保存到 Readwise 中,再通过 n8n 将我的文章同步到 Telegram Channel 中,但其实有些过于依赖平台了,在我真正想要消化那些划线笔记整理成一些成型的想法或是文章时则需要回到 Readwise 中去查看,即使同步到 Logseq 或是 Heptabase 中整理依然不算方便,尤其是现在转向 Apple Notes 作为自己的主力且唯一笔记工具后,发现有一些想法直接摘录/记录下来才是效率最高也更容易产生价值的,因此划词这一点渐渐淡出了我的笔记流。
众所周知,稍后读通常都会演变为稍后再也不读,所以我现在的策略是几乎不用稍后读,尽量当下就读完,只有极少数比较长的会暂存一下,也尽量在当天清空 list。我现在则是在 follow 中以未读为默认显示模式,时常会浏览一下,遇到感兴趣且通读了的文章会使用 star 功能,保存在收藏夹中,读完有所收获的时候则会通过一个自己做的浏览器插件 + Cloudflare Worker api + n8n 将文章链接及源 html 文件保存到 D1 数据库,实现 Web Archive 并自动同步到我的 Telegram Channel 中。
而第三点 Daily Digest 则是会帮助我回顾一些自己的笔记或是文章,这一点有用但并不高频,还没细研究 follow Action module 能不能针对多篇文章做一些操作。
由于我的核心需求都可以转移到 follow 中,于是果断退订了 Readwise。其实能明显地感受到这几天我的信息摄入量和质量也显著提高了,一个好的软件其实并不仅仅是辅助工具,是会对思维与习惯产生更深远的影响。
个人生活剪影
Electron Bug
刚发现 follow 客户端更新有个问题,点击「Click to restart」窗口 hide 了而不是 quit,熟悉的 bug,之前写 EpubKit 我写过一模一样的 🤣 报给了拾一,属于 electron 病情交流了。
macOS 桌面装修
第一次尝试 macOS 系统的桌面小组件,还挺新鲜的,不过我基本都是 Raycast 快捷键切换应用,几乎看不到桌面...
车库墙绘
本周总体进度:20%,已经初具雏形了。
本周我的进度:画了五六块砖 🤣
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
收藏
- pseudoyu | Follow
- DIYgod | Follow
- n8n 中文教程 | 简单易懂的现代魔法
- Dengtab - Stay focused and reduce social media distractions while cultivating small habits.
- SixD - SwiftUI & Interaction Design
- ccbikai/BroadcastChannel
播客
文章
- 断食记
- WebP Cloud Services 在去 Cloudflare 化上的一点摸索
- P5r: Life Changed
- 忙碌中的思索:生活、工作与娱乐 - 静かな森
- 我理解的云原生
- Stripe 如何安全收款并避免盗刷与测卡
视频
- 休学+拒绝百万年薪,不是有所成就才算活着
- Learn with me - HTMX and HonoJS
- 【何同学】你再也回不到 19 岁的夏天了...
- 450 天成为 Python 核心开发者
- 10 年后,900 万了
电影
- 走走停停,很喜欢最后高速堵车那段的镜头语言,人生不过走走停停。
周报 #66 - 10x 工程师、技术热情与个人工具箱
前言
本篇是对 2024-07-22
到 2024-07-30
这周生活的记录与思考。
经过了异常丰富的 Adventure X 一周活动,算是回归了沉下心写代码的日常。忙于一些工作需求;使用 Cloudflare Worker 继续开发 EpubKit 的 api 部分功能;使用 Go 重构了一年多前就启动但是一直没成型的 side project 后端部分,并开始尝试用 rust 写一个 api server;为自己一个个人工具箱项目「GitHub - yu-tools」写了一个 Astro 网页项目「tools.pseudoyu.com」;写了 Remark42 部署的教程博客,并经过了一位在搭建博客系统的读者的可行性验证;全家去千岛湖一个水上乐园玩,感觉自己太现充了;尝试水彩画,并启动了车库墙绘项目;还有很多有意思的事。
10x 工程师
Randy 最近上线了一个「Ask Hackers」项目,是一个基于 Hacker News Comments 的搜索工具,感觉从想法萌生到上线推广大概也就一两天,想到了一个叫「10x 工程师」的概念,能够快速将自己的一个想法开发实现,很羡慕。
自己其实前前后后也做了不少工作和个人项目,惭愧地说技术栈接触了不少,都能写一点但也都不深,快速实现和迭代一个产品的能力还是很差,似乎从想法到 Demo/产品之间依然差了一环,也跟 Randy 聊过这个话题,他觉得还是工程经验的问题,他看到某个网站或者 App 的某个效果,基本上能大致猜到实现的方式并复现,而我可能还是得靠去看源码或者咨询 AI 才能勉强做到。
技术热情
除此之外,我发现热情和动力也左右着我的行为,可能是由于依然没有找到自己的产品 Idea 和方向,总是感觉自己之前做 side projects 的时候仅仅是在“实现”或是技术练习,吸引我的并不是产品成型本身而是在实现过程中的了解学习和技术能力的提升,对于个人来说无可厚非,但对于一个产品来说似乎是缺少了灵魂,就像第一次见 Randy 时我好奇地问他为什么不再更新 Cusdis 了,有不少 Star,也有包括我在内的很多自部署用户,印象里他说除了经济因素外,更多是由于自己没有动力去做了,没办法为一个自己都不会去用/为之付费的产品付出更多的热情。
其实自己的症结也在于此,似乎依然没有找到会让自己半夜兴奋到睡不着的想法,反倒是在一起开发 EpubKit 时,由于自己也是电子书的多年用户,从自己作为用户的角度出发,能够对产品的迭代有更多想法和热情,也会更有成就感。
自己一定要是产品的第一个用户。
个人工具箱项目
自己一直是一个各种软硬件的重度折腾爱好者,几乎每一个自己很小众的需求都会花大量的时间挑选出最合适的工具,哪怕检索的时间远远超过了使用工具本身,依然乐在其中。从大学到现在,身边也有无数人会问我类似“有什么推荐的相机/键盘/麦克风/xxx 么”、“我想在手机上做 xxx 有什么推荐的软件么”这类的问题,于是两年多前萌生了自己做一个个人工具箱列表的想法 —— 「GitHub - yu-tools」。
最开始只是一个简单的 GitHub 项目和一个 README.md
文件,后来慢慢添加了一些分类,并为每个条目增加了一条简短的描述,两年里阶段性更新了几次,没想到竟成为了我 star 最多的一个 repo 了。
之前有看到过自己很喜欢的开发者「devaslife/Takuya Matsuyama」做的一个工具箱网站 —— 「A curated list of the tech I use」,为每一个工具拍照并附上使用体验,觉得很有价值,于是也花了一晚上参照他的模板使用 Astro 做了一个网站 —— 「tools.pseudoyu.com」,只是会更多地偏向软件和服务,而随着条目增加,也想添加类似「Ask Hackers」的对话搜索功能。
软硬件的拍摄、截图和介绍是个大工程,持续更新中,有需要的朋友可以关注一下。
个人生活剪影
水彩
某次饭后家人一起尝试在扇子上画水彩,也是全新的体验,挑选了 Rust 小螃蟹,在学姐的亿点指导下完成了这幅作品,很开心!!!
车库墙绘
既上次使用 DALL-E 生成了想要在车间墙绘的图之后,这种终于得空开工,进度 30%,但是由于周一晚刚好组会,是学姐和我妹妹画的,带了相机也没来得及用相机记录下完整过程,有些遗憾,下次会多拍一些流程和细节,期待最终效果。
捏捏
最近或许是察觉了我的忙碌,两只小猫都变得更加黏人,每次写代码时捏捏也都静静趴在桌上,时不时伸个懒腰或者发个嗲,松弛而治愈。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
收藏
- Hono - Ultrafast web framework for the Edges
- Ask Hackers
- OpenMoji
- Vercel AI SDK
- Open Source Alternatives To Proprietary Software
书籍
- Shape Up,可汗学院创始人写的关于 GPT 与教育未来的思考与实践,对日常使用 LLMs 有挺多启发的,除了成为搜索引擎一样的工具向外还有很多想象空间。
文章
视频
剧集
- 去有风的地方,吃饭的时候看。
从零开始搭建你的免费博客评论系统(Remark42 + fly.io)
前言
在「2024 年了,我的博客有了什么变化」一文中,我介绍了自己使用 Serverless 平台和一些开源项目搭建的博客系统,也开启了这个系列教程来记录搭建和部署全过程。
本篇是关于评论系统的解决方案。
评论系统迭代
我常常觉得评论不仅仅是读者与作者之间的沟通互动,其内容本身也是文章的一部分,甚至常常有些评论的思考与观点讨论会比文章本身更有价值,所以对于评论系统一直很重视,并不愿意信任一些第三方托管的服务,不希望有什么审查,也想风格尽可能简约,并与自己的博客风格相符。
在博客发展过程中,评论系统方案也经历过几次迭代,关于评论系统的类型和选择,我很喜欢的开发者 reorx 在「更换博客评论系统」中有详细的介绍了,我不作更多引申了,本文更重个人体验与详细的搭建过程。
Disqus
我最早使用的博客评论系统是万恶的 Disqus,一个笨重且会收集用户隐私的知名评论系统,因为加载比较慢,且免费版本经常会附带一些广告,实在难以忍受,再加上当时其实也基本上没什么评论,并没有什么迁移负担,用了没多久就直接弃用了。
Utterances
于是换成了另一个基于 GitHub issues 的评论系统 utterances,它会为每篇文章生成一个 issue,用户通过授权 GitHub 登录来对 issue 发表评论。这种方式的好处是只需要授权一个 utterances-bot 来进行管理,无需自己部署服务,维护数据库等。但是用了一段时间后,觉得有几点不足:
- 基于 GitHub API 进行评论管理,如之后接口变动或对这类利用 issue 进行评论的方式进行限制,会不太稳定
- 读者必须要授权 GitHub 登录,非技术人员或使用移动端阅读的读者使用起来很不方便
- 会污染 GitHub 仓库的 Issues 记录,也不方便后续迁移到其他系统
Cusdis + Supabase + Vercel
Cusdis 是 Randy 做的一个注重数据隐私的开源的评论系统,十分轻量,经过 gzipped 后大约只有 5kb,从名字来看也知道是难以忍受 Disqus,自己做了一个替代版,因此它也是支持 Disqus 历史数据导入的,很贴心。
从 2021 年中就开始使用了,到现在整整三年了,除了最开始的时候因为 Heroku、Railway 相继收费而折腾了一下部署平台外,一直都稳稳地运行着,不过我在使用中也有遇到一些问题:
- 大概是由于微信内置浏览器做了一些魔改,在博客从微信聊天/对话打开是看不到评论组件的
- 尽管可以输入邮箱,但并不支持订阅评论回复
- 需要管理员手动审核评论,但评论提醒的 TG Bot 时常失效而错过评论
不过整体来说时至今日依然是十分值得推荐的方案,轻量,方便自部署,风格也简约好看,搭建教程参看「轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)」。
鉴于 Railway 从去年 8 月起已经取消了 Free Plan,如果依然想完全免费使用,可以使用 Vercel/Netlify/Zeabur 免费部署主项目,并在 Supabase 上部署一个免费的 PostgreSQL 数据库实例,把链接作为环境变量传入 Cusdis 服务中即可,其他流程大同小异。
另外因为其核心功能已经许久没有什么更新,比起其他较为成熟的评论系统也显得有些简陋,不过由于我也秉持着够用即可的原则,一直没动迁移/更新的念头,只有在其中一阵子在学前端时还参与了一些 Cusdis V2 版本的开发,不过也没做多久。
由于四月时 Vercel 部署升级的时候一直失败,导致接近几周的时间没收到评论,再加上确实有了一些功能需求,所以下定决心进行迁移,探究起了新的方案。
Remark42 + fly.io
调研了一圈后选择了 reorx 在「更换博客评论系统」一文中最后选定的 Remark42。
单纯就配置选项来说比起 Cusdis 还是丰富了不少,目前配置了常用的几种社交账号登录(GitHub、Twitter、Telegram、邮箱)、可以匿名评论、支持邮件订阅回复提醒并且也设置了 TG bot 提醒,并且部署在 fly.io,go 单二进制 + 数据库单文件,很舒服的解决方案,更详细的 Remark42 的介绍和优势可以参看上面那篇文章。
虽然 Remark42 提供了一些迁移方案,但本身并不支持我使用的 Cusdis,但好在它是用 Golang 写的,我自己添加了迁移逻辑,将这些年沉淀下来的 438 条评论数据都无缝迁移过来了。
Remark42 + fly.io 部署说明
Remark42 + fly.io 的方案仅牵扯到单个服务,数据库使用的是 boltdb 挂载于 volume 中,但所有操作都在 fly.io 的 Free Plan 中。
下面将从零开始介绍如何搭建这个免费评论系统。
Remark42 本身代码开源 —— 「GitHub - umputun/remark42」,并提供了官方维护的镜像,文档清晰易读,可以根据自己的实际需求进行配置。
安装 flyctl
命令行工具
fly.io 与我之前使用的 Railway、Zeabur 等很大的一个不同点是它大部分操作基于命令行与配置文件,而不是在网页端管理后台进行操作,所以首先需要根据文档安装 flyctl
命令行工具。
以 macOS 为例,我使用 brew
进行安装:
brew install flyctl
授权登录
打开终端工具,使用以下命令进行授权登录:
flyctl auth login
在 Web 端进行账户登录或新建账号,完成后点击 Continue as xxx
即完成 flyctl
命令行的授权登录。
创建应用目录
由于我通常会手动进行进行配置管理,而不是用它官方的模板,所以我会新建一个类似 remark42-on-fly
的目录,并将所有的配置文件、环境变量等放在这个路径下。
并使用 VS Code 进行编辑(也可以使用 vim 或者其他编辑器/IDE)。
配置文件
fly.io 主要是使用 .toml
格式的配置文件进行服务管理,以下是我部署的服务对应的配置文件:
app = 'yu-remark42-01'
primary_region = 'hkg'
[build]
image = 'umputun/remark42:latest'
[[mounts]]
source = 'remark42_data_01'
destination = '/srv/var'
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = false
auto_start_machines = true
min_machines_running = 1
processes = ['app']
[env]
REMARK_URL = 'https://yu-remark42-01.fly.dev/'
SECRET = 'remark42-secret'
SITE= 'remark42-demo'
ADMIN_SHARED_ID= ''
[[vm]]
cpu_kind = 'shared'
cpus = 1
memory_mb = 256
这是详细的配置说明:
app
:应用名称,这里我使用了yu-remark42-01
,可以根据自己的实际情况进行修改primary_region
:部署区域,可以从这个列表中选择自己想部署的区域,我选择了香港[Build]
,这个部分主要是服务镜像相关的配置image
:服务镜像,使用了官方提供的umputun/remark42:latest
,如有需要可以指定 tag 版本
[[mounts]]
,这个部分主要是挂载数据卷的配置,由于 Remark42 使用 boltdb 数据库,需要持久化存储source
:数据卷名称,这里我使用了remark42_data_01
destination
:挂载目录,这里我挂载到了/srv/var
,这个目录是 Remark42 默认的数据存储目录
[http_service]
,这个部分主要是服务相关的配置internal_port
:服务内部端口,使用 8080force_https
:强制使用 HTTPSauto_stop_machines
:设置为false
auto_start_machines
:设置为true
,即自动启动min_machines_running
:最小运行机器数,设置为 1processes
:服务进程,设置为app
[env]
,配置环境变量REMARK_URL
:Remark42 服务的 URL,这里我使用了https://yu-remark42-demo.fly.dev/
,这是 fly.io 自动生成的,后续如果有了自定义域名则需要更改SITE
:站点名称,这里我使用了remark42-demo
SECRET
:自定义的 JWT Token,这里我使用了remark42-secret
ADMIN_SHARED_ID
:管理员 ID,这里我使用了空字符串,即没有管理员,后续可以补充
[[vm]]
,这个部分主要是机器相关的配置cpu_kind
:CPU 类型,设置为shared
cpus
:CPU 数量,设置为 1memory_mb
:内存,设置为 256MB
创建服务
完成并检查配置后,运行以下命令进行服务创建:
flyctl launch
环境变量配置
目前只是部署了服务,并没有设置环境变量,因此服务启动会有问题,接下来我们设置环境变量,放在prod.env
文件中:
AUTH_GITHUB_CID=<your_github_cid>
AUTH_GITHUB_CSEC=<your_github_csec>
AUTH_TWITTER_CID=<your_twitter_cid>
AUTH_TWITTER_CSEC=<your_twitter_csec>
AUTH_ANON=true
AUTH_TELEGRAM=true
TELEGRAM_TOKEN=<your_telegram_token>
NOTIFY_ADMINS=telegram
NOTIFY_TELEGRAM_CHAN=<your_telegram_group>
NOTIFY_USERS=email
AUTH_EMAIL_ENABLE=true
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_TLS=true
SMTP_USERNAME=xxx@gmail.com
SMTP_PASSWORD=<your_password>
AUTH_EMAIL_FROM=xxx@gmail.com
NOTIFY_EMAIL_FROM=xxx@gmail.com
环境变量的部分相对比较复杂,具体参数参看文档。
登录/授权配置
我配置了匿名评论、GitHub、Twitter 与 Telegram 几种方式,可以根据自己的情况配置其他登录方式。
- 匿名登录
AUTH_ANON
:是否允许匿名评论,我选择了允许,即用户可以不登录评论
- GitHub 登录
AUTH_GITHUB_CID
与AUTH_GITHUB_CSEC
:GitHub OAuth App 的 Client ID 与 Client Secret
- Twitter 登录
AUTH_TWITTER_CID
与AUTH_TWITTER_CSEC
:Twitter OAuth App 的 Client ID 与 Client Secret
- Telegram 登录
AUTH_TELEGRAM
:是否允许 Telegram 登录TELEGRAM_TOKEN
:Telegram Bot Token,通过botfather
创建
- 邮箱登录
AUTH_EMAIL_ENABLE
:是否允许邮箱登录AUTH_EMAIL_FROM
:邮箱登录的发送邮箱
通知配置
- Telegram 通知管理员,参看文档这部分进行 Telegram Bot 的创建和配置
NOTIFY_ADMINS
:通知管理员的方式,选择 telegramNOTIFY_TELEGRAM_CHAN
:如启用 telegram 通知管理员,需要配置对应 Channel id,只需要填写t.me/xxx
后面的 id 部分即可,如pseudoyuchat
- Email 通知用户,参看文档这部分进行邮箱 SMTP 等配置
NOTIFY_USERS
:通知用户的方式,我选择了了 email, 即邮件通知,则需要配置下文的 SMTPNOTIFY_EMAIL_FROM
:邮箱通知的发送地址
邮件 SMTP 配置
上文的邮箱登录与邮箱通知都需要配置 SMTP 服务器,这部分也可以根据自己的邮箱服务商参照文档进行配置。
SMTP_HOST
:SMTP 服务器地址SMTP_PORT
:SMTP 服务器端口SMTP_TLS
:是否启用 TLSSMTP_USERNAME
:SMTP 用户名SMTP_PASSWORD
:SMTP 密码
导入环境变量到服务
根据以上说明完成环境变量配置后,在配置文件和环境变量文件所在目录运行以下命令导入环境变量:
fly secrets import < prod.env
执行完成后到 fly.io 控制台查看服务状态即可,如为 Deployed
状态即表示部署成功。
配置自定义域名(可选)
如果你不想使用 fly.io 提供的默认域名,可以配置自定义域名。
进入 fly.io 控制台,选择刚部署的 yu-remark42-01
服务,点击左侧的 Certificates
选项,然后点击右上角 Add a Certificate
,按照提示添加自定义域名即可。
点击 Create Certificate
后,会有一个页面显示你所需要添加的 DNS 记录,按照提示添加即可。
例如我的域名托管在 Cloudflare,我按照提示添加了两条 DNS 记录,返回页面后点击 Check again
或等待一段时间后刷新查看,都显示绿色即为配置成功。
此时,我们可以在 fly.toml
中修改 REMARK_URL
为自定义域名,然后执行以下命令重新部署服务即可,之后对配置文件进行任何改动都可以使用该命令进行更新:
fly deploy
博客配置 Remark42
上文我们完成的 Remark42 服务的部署,现在则需要在我们的博文中加入 Remark42 评论组件,以我使用的 Hugo 博客为例。
定义 Hugo 主题 Comments 组件
我在 Hugo 博客的 layouts/partials
目录下新建了一个 comments.html
文件,用于定义 Remark42 评论组件:
<div class="comments">
<div class="title">
<span>Comments</span>
<span class="counter"><span class="remark42__counter" data-url="{{ .Permalink }}"></span></span>
</div>
<div id="remark42">
</div>
</div>
<script>
var remark_config = {
host: 'https://comments.pseudoyu.com',
site_id: 'pseudoyu.com',
components: ['embed', 'counter'],
max_shown_comments: 20,
simple_view: true,
theme: 'light',
}
</script>
<script>
(function () {
// init or reset remark42
const remark42 = window.REMARK42
if (remark42) {
remark42.destroy()
remark42.createInstance(remark_config)
} else {
for (const component of remark_config.components) {
var d = document, s = d.createElement('script');
s.src = `${remark_config.host}/web/${component}.mjs`;
s.type = 'module';
s.defer = true;
// prevent the <script> from loading mutiple times by InstantClick
s.setAttribute('data-no-instant', '')
d.head.appendChild(s);
}
}
})();
</script>
remark_config
中的 host
与 site_id
需要根据自己的实际配置进行修改,其他部分配置可以保持不变,或根据文档进行调整。
配置好 commnets
组件后,在 layouts/posts/single.html
中文章底部引入:
{{ partial "comments.html" . }}
大体位置如图所示,如使用的是其他主题或博客系统,则需要找到自己文章对应的模板文件进行修改。
本地预览/部署网站
此时可以在本地预览或部署网站以查看评论系统是否正常显示,至此我们的服务部署完成。
获取 User ID 并配置 Admin
登录授权完成后并测试评论后,可在 Remark42 中点击头像打开管理页面,双击后 CMD/Ctrl+C
可以获取以 github_
或其他平台开头的 User ID,可以将其配置到 ADMIN_SHARED_ID
中(更改 fly.toml
配置文件并运行 fly deploy
重新部署,即可成为管理员,管理员有权限对其他用户的评论进行删除等管理操作。
其他
我把之前 Cusdis 中的评论数据按照一定条件导出 json 格式的数据,并通过 go 程序进行格式转换与迁移,因此保留了之前所有的评论。
因为 Cusdis 本身不提供导出功能且迁移的需求太过小众,我并没有直接向上游贡献代码,也没有写成完善的脚本,有类似需求的朋友可以参考这个 PR 进行处理 —— 「feat: add cusdis to remark42 migrator support by pseudoyu · Pull Request #1 · pseudoyu/remark42」。
总结
以上就是我的博客评论系统的搭建过程,评论系统的搭建与配置相对繁复,且本文的配置方式或许会随时时间而过时,遇到问题可多参照官方文档。
这是我的博客搭建部署系列教程之一,如对数据统计系统、博客内搜索等搭建感兴趣,请持续关注,希望能对大家有所参考。
周报 #65 - Adventure X 体验、Apple Notes 笔记实践与 EpubKit
前言
本篇是对 2024-07-10
到 2024-07-21
这周生活的记录与思考。
这一周多很丰富,工作有些忙碌,参加 Adventure X 的活动,很好玩;尝试了 Remix 框架,筹备一个 Workshop;和 Randy 见面,一起计划了 EpubKit 的 Redesign 和后续开发安排,算是给我们无法参赛的“中年嬉皮士”举办了自己的黑客松;从 Obsidian 转向 Apple Notes,实践 P.A.R.A;打算给车库的墙进行喷绘;去 Apple Store 体验了 Apple Vision Pro;还有很多有意思的事。
Adventure X
这是一个面向 26 岁及以下的年轻开发者的一个黑客松活动,早早有听到宣发,刚好超龄而遗憾没法报名参加,不过受邀作为 OpenBuild 赞助的「互联网 3.0 开发工具」赛道的评委及 Workshop 的讲师来到现场,也算是全程观望了。
活动大概有接近两百个开发者参赛,确实能看到他们的活力和激情(可能限制 26 岁也是有道理的);以及有不少在 Twitter 和疯狂星期四上熟识的朋友们都来到了现场,跟其中不少新老朋友聊了一些有意思的事。
Workshop
这次主要的任务是作为 Mentor 和 Workshop 的讲师,主题为「使用 Solidity 与 Remix 构建全栈 AdventureX Badge ÐApp」。
其实前前后后在不少场合讲了不少次课和 Workshop,一开始其实只是给 ian 的 OpenBuild 社区帮忙,自己也是乐于写教程和分享的,但随着这样的机会越来越多,自己也有了一些变化,并不会每次都用一样的课件重复着类似的内容,而是都当作一个自己学习的新机会,也让自己在有限的时间内完成一些好玩的东西,再把它教授出去,也是费曼学习法的一种实践。
这次 Workshop 则是想要学习 Remix 前端框架,写了一个简单的活动徽章领取的 ÐApp,体验地址是 —— 「adventure-x.pseudoyu.com」,PPT 课件是 —— 「AdventureX_Workshop_20240716.pdf」。
虽然大概一个月前就知道这个 Workshop,但毫无意外地拖到了前两天,花了一晚上学习了 Randy 的「Remix 入门实战」小册子,写完了 UI 部分,然后又花了一晚上写 Solidity 合约部分,并且完成了前端和合约的交互逻辑,并且用 Zeabur 部署上线了,拖延症真的要命。
但是 Remix 确实好用,实现 0 useEffect, 0 useState 写完应用成就,后面看看能不能在各种场景上都彻底替代 Next.js。
现场来的人比想象得多,比起原定的 45 分钟也拖堂了一倍,接近 10 点才结束,不过是很有意思的体验,Workshop 效果也不错。
“中年嬉皮士”黑客松
这次 Randy 也作为嘉宾评委从广东过来了,都觉得黑客松氛围都到这了,我们只是观光有些太无趣了,所以干脆一起做起了 EpubKit 的 Redesign。
讨论了整个 EpubKit 现有的操作逻辑和 UI 风格变动,很开心,晚上一起开发了几个小时,也是找找作为“中年嬉皮士”的参与感了;也讨论了后续关于产品的很多想法和分工,很期待。
也欢迎大家下载体验 EpubKit,制作自己的电子书。
作为不爱拍照的人,刚好被工作人员拍到了和 Randy 一起在看项目展览时候的合影,也很有纪念意义了。
基于 Apple Notes 的 P.A.R.A 实践
上个月从用了两年的 Logseq 转成了 Obsidian,实践了大概一个月,比起 Logseq 的时候多了好些记录的习惯,虽然已经不用再关心文件夹层级这些,但依然需要克服,「脑子里记录下想法」 -> 「等在电脑前新建文件并取标题」 -> 「整理想法并打 Tag」 -> 「写下内容」这一链路所带来的心智负担。
Randy 跟我讲了他使用 Apple Notes 记录所有想法和笔记的方式,并通过 P.A.R.A 的层级进行分类,发现当不需要有整理的负担,而是随时打开手机/电脑记录下想法,也不用考虑什么格式或是 markdown 语法,会更有记录的欲望,而能记下来、take action 才是笔记的核心要义。
在 Mac 上可以使用右下角的 Quick Notes 快速记录,iOS 上则是通过快捷指令将一些闪现想法快速保存到 Drafts 目录中,后续有更多想法的时候再挪动到各个目录中,很简单却有效的实践,也不需要再指定各种 tag 和分类,需要的时候直接全文搜索就可以了。
其他
墙绘
上次学了油画画了头像后觉得很有意思,最近打算再挑战一下好玩的,和学姐一起给我爸的汽修车间的一整面水泥墙用丙烯颜料墙绘(我打打下手)。
把我爸的想法和我们在 Ins 上找的参考图发给 DALL-E 后生成的效果很不错,希望 8 月能有成品效果 🤩。
Apple Vision Pro
这周四去 Apple 西湖体验了 Vision Pro,其实之前非常早就关注了,也看了大量测评,一度有些心动,但是其实有过 Quest2 的吃灰经历,一直还在观望。
刚好国行也上架了,预约了一次半小时的体验,从配镜片、讲解配件到体验各种功能和应用,体验的感觉比想象得好,20 分钟左右的时间倒也没有感受到什么眩晕感或是重量带来的压力。
实际体验下来,交互比想象得流畅自然和准确;但画面还是有比较明显的噪点,分辨率并不足以有沉浸式的体验,但已经是比较惊艳的了;应用支持还是太少了,所以更多也就是尝鲜,没有什么应用场景,打字体验很差,还是得外接键盘;总体来说,这一代不太值得买,或许等待之后不论价格还是系统应用层完善了再考虑了。
ChatGPT Plus -> Claude Pro
上个月由于用得比较高频,重新订阅了 ChatGPT Plus,同时用着免费额度下的 Claude 3.5 Sonnet,发现在代码上 Claude 的上下文理解能力和生成结果的可用性都明显强于 GPT4,于是在这周到期的时候决定改为 Claude Pro 的订阅,在价格相同的前提下再体验一个月试试。
Guii 体验
Guii 是这次 Adventure X 黑客松看到的最有意思的项目了,能够直接通过自然语言对话的方式跟前端页面交互,并直接会更改源码实现有趣的效果。
我通过选中元素简单对话的方式做了一个很简易的数字货币小网站,还有些 bug 但是可玩性很高。
把 OpenBuild Sponsor 赛道的奖项颁给她们了,实至名归,希望能早点上线 🔥。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
收藏
书籍
- Brave New Words,可汗学院创始人写的关于 GPT 与教育未来的思考与实践,对日常使用 LLMs 有挺多启发的,除了成为搜索引擎一样的工具向外还有很多想象空间。
- 履单,从萝卜快跑引起的议论想到的这本书,探讨科技加速引起的社会分化,不过更多是从劳动者视角,下午看了一会儿,叙事方式也很舒服。
文章
- 一个尘世中的普通人
- 展开讲讲独立创作者的工作节奏
- Local-First:不同以往的开发者体验
- Sal Khan is pioneering innovation in education…again | Bill Gates
视频
音乐
- 春风十里 by 鹿先森乐队
周报 #64 - 生活在此处(《斯通纳》与《Normal People》)
前言
本篇是对 2024-07-01
到 2024-07-09
这周生活的记录与思考。
这一周坚持了几天早起读书学习,效率很高,不过要养成规律依然需要时间调整,也还在探究如何更快地进入/切换工作状态;在同步看几本书,《阿特拉斯耸耸肩》、《Normal People》与《What My Bones Know》,和学姐聊到她正在看的斯通纳,有了一些关于人生各个维度的思考;还有很多有意思的事。
Normal People 与斯通纳
《Normal People》是一部好久之前的英剧了,大概是 20 年还是 21 年的时候看的,印象很深,最近突然想起就看了下原著,虽说内容大多关于爱情与学校的琐事,我却能够在男主身上看到许多自己,根植于内心深处的怯懦与不安,对于生活迷茫却又不甘平凡的执念,以及最终又承认生活本就如此的释然;《斯通纳》则是前段时间抽奖的书籍盲盒中我挑选的其中一本,之前已经看了两遍,剧情已经记不太清,却有一种回想起来常看常新的感觉,用平淡的笔触勾勒生活原本的样子。
这两本书连在一起,让我重新思考了一些关于自我与人生的价值命题。
生活在此处
昨晚和学姐久违地找了周遭一家日料店出门约会,我们各自从家出发,对方的打扮都很搞笑,她上身穿着华丽的连衣裙,却踏着一双拖鞋;我也没好到哪去,上身衬衫,下身运动短裤加拖鞋。坐在吧台等餐聊天时,有一种一半仪式感一半生活的混搭感,却又不显得怪异,就像个生活搭子。
我们常常说“生活在别处”,意为别处的生活似乎总是吸引着我们,但其实回望看看,此处的生活其实也别具魅力。
我们聊到现在的生活,感觉似乎并没有什么太值得埋怨的,她在不算喜欢也不算讨厌的工作中能做得很好,我在自己的领域中自得其乐;在杭州的生活节奏好过北京的纷扰,时常能漫步或是回家吃上一顿家常。但我们似乎都有所期待,她想去画画,我也想离开这个舒适圈去另一个国度开启新的生活篇章,只是这种期待被还不错的生活现状所掩盖,反倒有些难以抽身了,毕竟没有现实需求驱动的决定总是会更难一些的,似乎自己总要背负着打破生活平静的责任。
虚无的意义
读书和刚毕业那一两年常有很多学弟学妹来问我关于转码、人生选择的一些建议,乃至现在也有一些从技术教程或是课程了解到我的朋友来问我关于 Web3 学习和行业的一些问题,我一直都很谨慎而认真地对待他们,因为常常想到当年我如果能早些得到一些建议,或许就能够少走一些弯路,但有警惕自己的语气与姿态,不愿因幸存者偏差而变得“好为人师”。
于是常常条分缕析地根据他们每个人的情况列出一些利弊和我自己的想法,连续七八条消息过去,还生怕有些什么遗漏,可十之八九,最终他们都会以这么几句来追问,仿佛我说的那些都无关紧要,也并不是他们想要的答案,颇有些图穷匕见的荒谬感:
“计算机是不是很赚钱啊,我怎么样才能转码成功啊?”
“Web3 工资是不是很高啊?”
之前很喜欢一句话,来自很久之前某个很欣赏但却早已停更的文字博主每篇文章结尾,大意是:
「我把我知道的道理全都告诉你,为的是让你过不好这一生」。
有时我常常在想,是不是正是因为我过于追求虚无的意义,徒有一些原则,反而让自己不那么开心了,人总是知道的愈多愈加难以前行,人生不过三万天,或许甘于外物,甘于生活本身,人生会“松弛”许多。
于是也有过很长一段时间的沉默,不再向自我和这个世界提问,享受当下,收获的却是更多虚无。
其他
工作状态
最近工作在做一个有点麻烦的需求,大概有一周了,其实技术上倒也没什么特别的难点,无非就是从链上读取配置,并且调度各个服务重启(但是不能从 k8s 或者其他部署层面,而是需要程序内部自己处理),因而链路有很多细节要考虑,需要很专注和细致。
而这周又实践了一段时间的 5 点起床沉浸式写博客、阅读、学习 Rust 等,到 9 点多开始逐渐调整到工作状态,一直到晚上。因为早起的效率还挺高的,反而发现从学习状态切换到完全的专注工作状态其实很难/很慢,也就是之前代码之外一周年直播里面 Randy 提到的“单线程”和“上下文切换”,没有办法同时深度思考和做两件事。
又想到上周跟同事 Ares 去良渚咖啡厅里办公,虽然工作过程中只是闲谈几句,跟正在做的工作内容也不强相关,但似乎一下子就会拉入了良好的工作的氛围中,而自己在家有时候就并不那么容易做到这样,这大概也是远程办公的一种弊端吧。
生活日常
最近家门口地垫是这个(当代年轻人精神状况 🤣
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
收藏
书籍
- Normal People,很喜欢这个英剧,这两天看其他书的时候突然想到了这本,打算补一下原著。
- What My Bones Know,去年看了一小半,这两天想到关于家庭和心理疗愈的问题,每天看一章左右。
- 阿特拉斯耸耸肩,读者送的,读了前两张章了。
文章
播客
电影
- 泳者之心,感觉对于片名「Young Woman and the Sea」中文翻译「泳者之心」有些过于平淡,看完后可能觉得「老娘与海」比较适合 🤣 体育精神、女性、励志,主题上算不上有多新颖,但对于女主的成长和她身边的支撑刻画得恰到好处,女主的妈妈和教练艾比也让人印象深刻。学姐之前曾报名横渡香港维港,现在也在备战横渡杭州钱塘江,难度与英吉利海峡自然不可比,但看完后似乎更能理解了这其中的执念与魅力。
视频
使用 WebP Cloud 与 Cloudflare WAF 为你的图床添加隐私和版权保护
前言
在「从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo)」一文中,我用 Cloudflare R2 搭建了一个免费的图床系统,并通过 WebP Cloud 进行图片优化。
在使用 WebP Cloud 的过程中,我发现它还提供了自定义 Proxy User Agent、水印等功能,于是萌生了一个想法,是不是可以通过 WebP Cloud 对我的图床源站链接进行保护,使 WebP Cloud 的代理链接成为访问我所有图片的唯一入口,并统一添加我的专属版权水印。
本文是对这一实践的记录,也算是图床搭建番外篇了。
需求分析
我目前的图床方案是将图片都托管在 Cloudflare R2 上,并且通过 WebP Cloud 这一强大的图片代理工具进行访问优化,但其实使用代理链接 image.pseudoyu.com
与源站链接 images.pseudoyu.com
都可以访问我的图片,只是前者被优化过,后者则是我保存的原图。
隐私保护
事实上我们通过手机、数码相机等设备拍摄的照片都会携带 EXIF(EXchangeable Image File Format) 信息,通常会包含拍摄设备、时间和地点等敏感信息,我们可以通过一些技术方式手动去除这些元数据,但操作十分繁琐且容易遗漏。
我查阅了一下 WebP Cloud 的文档,发现它果然提供自动擦除 EXIF 信息的功能,无须额外配置操作,但其实访客依然可以可以通过 Cloudflare R2 暴露出的源站信息访问到原图,为了避免这一点,我需要限制用户只能通过 WebP Cloud 代理链接进行请求,访问 Cloudflare R2 源站链接时获取不到任何有用信息。
版权保护
之前在推上看到 Randy 自己拍的 desk setup 图被盗用的经历。
而自己也玩一些摄影,虽没什么特别的商业价值,但终究是自己的作品,理应保护版权,因此我想在图片上统一添加自己的版权水印,以防止被他人盗用。
实现方案
需求清晰了,其实主要分为两部分:
- 让用户只能通过 WebP Cloud 代理链接访问到我的图片,禁止直接访问原图链接
- 在 WebP Cloud 代理层面为所有的图片统一自动添加自己的版权水印,无须手动操作
以下是我的实现方案与详细步骤。
WebP 自定义 User Agent + Cloudflare WAF
和 WebP Cloud 的开发者 Nova Kwok 聊了一下,发现 WebP Cloud 提供了自定义「Proxy User Agent」的功能,并推荐在 Cloudflare WAF 中配置对应规则以保护图片安全,文档中有详细说明 -- 「Security | WebP Cloud Services Docs」。
WebP Cloud 配置
当我们访问互联网上的网页或图片链接时,请求通常会包含一个 User Agent 字段,一般包含浏览器版本等信息,网站可针对不同的 User Agent 进行一些特定逻辑处理。
WebP Cloud 默认会使用 WebP Cloud Services/1.0
作为值,也就是不论用户访问图片时使用的是什么终端设备和浏览器,请求到 Cloudflare R2 时都会被统一为 WebP Cloud 定义的 User Agent 值,而这个值又是用户可以自定义的。
因此,我们登录 WebP Cloud 的控制台,将「Proxy User Agent」字段设置为一个自定义值,如 pseudoyu.com/1.0
。
Cloudflare WAF 配置
WAF(Web Application Firewall) 是 Cloudflare 提供的一个防火墙服务,可以自定义规则来限制特定请求以保护网站安全,登录 Cloudflare 后在左侧边栏点击「网站」,点击进入需要保护的域名,选择侧边栏「安全性」 - 「WAF」即可免费使用(注:不是最外层的账户级 WAF),免费账户可设定五个自定义规则。
点击「创建规则」,进入设置页面。
点击「表达式预览」右侧的「编辑表达式」,填入以下规则:
(http.user_agent ne "pseudoyu.com/1.0") and (http.host eq "images.pseudoyu.com")
首先,需要把其中 pseudoyu.com/1.0
这部分填入上文在 WebP Cloud 中你自定义的 User Agent 值;另外,为了防止我在同一域名下的其他自部署服务的图片无法正常显示,我添加了 (http.host eq "images.pseudoyu.com")
条件,即只对图床的访问链接生效,这部分需要替换为自己的图床域名 host。
并且在「选择操作」下拉选择「阻止」,这样会匹配我们的规则并阻止特定网络请求,编辑完成后点击「部署/保存」即可。
我使用的是目前 WebP Cloud 官方文档提供的推荐规则,后续或许会针对新的功能有所调整,可以直接参考文档。
完成配置后,当我们再次访问以 images.pseudoyu.com
开头的源站链接时会被 WAF 拦截,例如:
images.pseudoyu.com/images/new_mbp_setup.jpg
而经 WebP Cloud 代理过的链接则可以正常访问,例如:
image.pseudoyu.com/images/new_mbp_setup.jpg
完美实现了我们的需求。
使用 WebP Cloud 为图片添加版权水印
经过了上文的操作,我们已经确保用户只能经过 WebP Cloud 代理链接访问到我们的图片了,接下来就是为图片添加版权水印。
同样是查阅了 WebP Cloud 的文档,发现它在「Visual Effects」模块中提供了「Watermark」功能,可以为图片添加自定义的水印,使用 Fabric.js
库实现,提供了可视化编辑的一些选项,还写了一篇有意思的博客 -- 「使用 Fabric.js 实现实时水印预览」。
进入 WebP 控制台,选择左侧「Visual Effects」,并点击右上角「Create Watermark」,就可以进行一些自定义水印样式配置了。
这是我的配置,即在图片的底部中间添加一个浅灰色的 @pseudoyu
字样。
需要注意的是,WebP Cloud 会为用户缓存图片数据,因此若想要之前上传的图片也应用水印或更新了新的水印则需要在代理配置中点选「Purge All Cache」来清理缓存。
编辑完水印后,进入代理的详细配置页面,下拉到「Watermark Setting」模块,选取刚创建的水印,点击右上角「Save」即可。
效果就不单独展示了,本文所有配图都通过这种方式添加了水印。
总结
使用 WebP Cloud 才第三天,最开始一直以为只是一个类 CDN 图片加速访问工具,经过折腾后发现了很多有意思的地方,并且为个人免费用户提供的 Free Quota 足够到大家拥有更好的图片体验,也就是他们所坚持的「做正确的事」。
团队更多是做一些技术沉淀和实践,写了许多博客 -- 「WebP Cloud Services Blog」,闲时读读也能感受到他们的热情,最近因为「周报 #63 - 不愉快的订花经历、商家和消费者与日渐 AI 化的人」这一篇中的经历而在思考「劣币驱逐良币」这一问题,我觉得坚持做正确的事不向商业做过多妥协的团队理应被更多人看到,理应过得更好,我人微言轻,仅以这些教程来让更多的人了解到他们。
当云服务器崩溃时,我是如何救援重要数据的
前言
周五的时候我在搬瓦工平台购买的 2C2G 服务器突然内核报错,连不上 ssh 也 无法重启。经过了迂回的各种抢救方案,终于救回了一千多张图床的的图片,心有余悸,记录一下救援过程,顺便折腾了一套新的图床方案。
服务器救援
这台服务器大约已经稳定运行了一年半,运行了我许多重要服务,还有我博客图床的一千多张无备份的图片通过 Docker Volume 持久化在主机上。
服务器宕机
其实我至今仍不知道出了什么问题,早上刚好需要更新服务器上的我运行的 RSSHub 实例的镜像版本,于是想着干脆把所有服务都更新到最新吧,于是一通 docker pull
和 docker-compose
重启操作,前面的都没什么问题,直到最后一个服务突然启动容器失败,报了一个类似 not enough space
的错误,我心想着可能是下载的镜像太多了导致磁盘满了,于是又一通 docker image prune --all
、docker volume prune
和 docker system prune
操作,释放出了接近 10G 的空间,重试,依然不行。
作为一个有且仅有一点服务器运维经验的开发来说,我第一反应想到的就是重启,未曾想,这才是一天噩梦的开始。
没想到重启后我的 Uptime Kuma 提醒我所有服务都下线了,也无法再通过 ssh 连上机子了。
于是赶紧登录到搬瓦工的线上控制台,发现内核报错,无法启动,强制重启也依然不生效,于是先提交了一个工单,并且赶紧求援我的 DevOps 朋友们。
拯救数据
STRRL 说应该 rootfs
出现了问题,不过鉴于这种小云厂商并没有提供什么高级启动等额外的功能,只能等官方技术支持处理了,但想到我有一年半毫无备份的图床数据在上面,依然很慌,于是开始想办法抢救数据。
研究了一下搬瓦工的控制台,发现它提供一个大约每周一次的备份,并且可以一键将备份转为快照,最近的一次在 6.22 日,还好。我首先想到的是直接通过快照恢复机器,如果是我今天的操作导致了什么配置问题,那理应一周前的快照是能正常启动的,于是满怀信心地等待了十几分钟的快照恢复,结果报了同样的错误。依然不死心,把 6.15 的备份也恢复了一下,还是不行。
这下意识到了事情的严重性,甚至做好了数据全部丢失的最坏打算,但在等待工单回复时开始检索类似情况,最后发现搬瓦工机器的快照镜像是可以下载的,并找到了一篇「搬瓦工备份快照镜像文件 .tar.gz 下载解压后打开 .disk 文件查看数据教程」。
于是先下载了快照镜像,得到了一个 .disk
文件,这个文件应该是一个专属格式,看教程可以通过 Virtual Box 的命令行工具 vboxmanage convertfromraw
来进行格式转换,但官网下载后发现并不支持 M 芯片的 Mac,于是又在之前的老 19 款 Intel Mac 上安装并且执行转换,得到了一个 .vmdk
文件。
转换完成后将这个 .vmdk
作为一个磁盘挂载到 Virtual Box CentOS 虚拟机上,发现依然报同样的错误。
于是另辟蹊径,发现 7-Zip 软件支持常见虚拟机格式的解压,但客户端只有 Windows 版本。
虽然按理说可以在 macOS 上使用命令行版本 p7zip 来执行,但我解压时会报错,所以又堵住了一条路,想了个曲线救国的方式,通过虚拟机下载了一个 Win11,下载了 7-Zip 软件直接解压成功了。
问题又来了,得到的是 1.img
、2.img
这样格式的 Linux 磁盘镜像文件,macOS 上无法加载,又问了我司运维朋友,折腾了一下 fuse 但是还是无法加载。
期间倒也是有好消息,在全网搜罗的时候发现了一个数据恢复软件 UFS Explorer,尝试了一下可以正常加载,只是超过 768k 的文件则需要付费,当然没打算,只是看到文件确实是可以识读之后心里就安心了许多,至少数据还在,剩下都是技术问题了。
期间搬瓦工的工单也回复了,让我重启或重装试试。。。🤣
放弃了工单沟通,继续抢救我 img
中的数据,万能的 STRRL 告诉我 OrbStack 可以启动一个 Linux Machine,然后可以把这个 img
作为一个 Linux 磁盘挂载上去。
sudo losetup -fP 1.img
mkdir /mnt/bwg
sudo mount /dev/loop0 /mnt/bwg
通过以上命令成功把我的 img
磁盘镜像挂载到了 OrbStack 的 Ununtu 机器上。
当我看到我的图片出现在命令行输出结果时,感动得都快流泪了 😭。
tar -czvf cheverto_chevereto_images.tar.gz cheverto_chevereto_images/
rsync -acvP ./cheverto_chevereto_images.tar.gz pseudoyu@[yu-mac-studio]:~/Downloads/
紧接着赶紧打个 tar
包,然后通过 rsync
传到了我本地的 Mac 上,本机解压后,终于看到了我所有的图片。
迁移图床系统至 r2
但由于这一次的遭遇,不再信任服务器单机部署的图床稳定性了,花了半天折腾了一套新的免费图床系统 —— 「从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo)」。
至于现有的数据传到 r2
,我则是使用了 rclone
来进行上传,彻底完成迁移,大功告成!
总结
也开始重新考虑了服务部署、数据安全等问题,准备还是将一些重要的数据上云而不再依赖单机,也继续把一些服务迁移到 fly.io、Zeabur 等 serverless 平台。
周报 #63 - 不愉快的订花经历、商家和消费者与日渐 AI 化的人
前言
本篇是对 2024-06-24
到 2024-06-30
这周生活的记录与思考。
一次不愉快的订花和维权体验,思考了商家与消费者的关系,以及 AI 越来越拟人化的现在,人却似乎变得 AI 化了的现象;周五的时候服务器突然 Kernel Panic,无法重启,经过了迂回的各种抢救方案,终于救回了一千多张图床的的图片,心有余悸,顺便折腾了一套新的图床方案;想到上一次写博客搭建教程已经是两年多前,不论是内容还是组件都经过了许多变化,于是重新开启系列。
一次不愉快的订花经历
周末发生了一件非常不愉快的事(甚至现在依然还因商家拒绝上门取货而处理中)。
6 月 30 日是我和学姐在一起一周年的日子,我早上在饿了么外卖平台订购了一束花,原本是一件挺开心的事,结果送到学姐那的时候,花上还附了一张卡片,上面写着“to 小语宝贝”和一些私人的祝福,但我并没有要求附赠卡片。
想来是放错了卡片,所幸收货时我也在现场,不至于引起什么误会或是矛盾,当时有些扫兴但也还不至多生气,于是联系了商家退货。
我跟商家描述了情况,表示理解可能是花艺师放错了,但因为送花本来就是情绪价值大于花本身的一件事,我并不想要这样一束似乎原意是“送给别人”的花了,然而商家的态度很恶劣。
“放错了你把卡片丢掉就好了”
“我又没做错为什么要退”
“那你联系客服维权好了”
我自诩是一个情绪稳定的人,也多少对身边的人和这个世界善意相待,不会为难因恶劣天气延误的快递员、送到的外卖洒了也从未要求小哥的赔偿或是退款,但依然被商家的态度气到了。
我可以理解花艺师的疏忽,也并不对花本身有什么不满,只是感到可悲,商家做的是“花艺”的生意,理应明白送花的人送的不仅仅是花,更多的是一份心意的传递或是情绪的表达,而她的态度让我感到这份心情并没有被尊重。
似乎对于这位卖花的店家来说,花只是花,是流水线上生产出的人工造物,送花人的忐忑、收花人的羞怯或是惊喜似乎都无关紧要。
当然,我理解这作为商业当然有成本和营收的考量,可这依然刺痛了我仍留存的几分理想主义,没有这些心情加持的花艺,再美丽也不过是一堆很快就会腐朽的有机物罢了。
商家与消费者
于是我联系了客服,一番沟通后才知道为什么商家那么有恃无恐。原来在饿了么平台上,花是属于无法退货的商品,我理解本意或许是由于鲜花是人工制作的易腐商品,退货后也无法二次销售。
我联想到前一阵子关于消费者利用拼多多平台“仅退款”机制伤害商家的争议,这次经历又何尝不是商家在利用平台规则来伤害消费者呢?
人的 AI 化现象
这事还没结束,和饿了么客服的对话更是让我有些无语。
我:(再一次详细描述了情况以及商家的态度问题),我想要申请退货,但商家拒绝了
客服:请问花是没问题的对么?
我:...你要这么说可能也没错,但我不想要了。
客服:我们鲜花按照平台政策是不能退款的呢~
我:但附赠了给别人的卡片,这不是我想要的花。
客服:那我联系商家给您重新发一张卡片可以么?
我:...
我现在还对这段对话有些哭笑不得,都说 ChatGPT 出来之后 AI 越来越像人了,AGI 或许也不远了,但我倒是觉得在此之前,人是越来越 AI 化了,似乎对于他们来说把对面当作一个有情绪有脑子的人看待都已经是一件很难的事了。
有时候我常常会思考现在的人是怎么了,以制作鲜花为业的人不好好对待花,也无法设想如果自己收到爱人送的一束写着别人名字的花的不良情绪;以解决用户问题为业的平台客服不好好听用户讲话,只知道模板化地回复。
想起在北京时长期会订的一位花艺师,因为是定制花束,比起平台上的贵上许多,但会问问我的故事和想要表达的情感,会记得我们把花放在花瓶的习惯,也能将我各种对花的小想法一一实现。当时只是对花艺师小姐姐的用心印象深刻,现在才发现,好好讲话,用心做好自己的工作,原来在当今社会已经是一件需要奢求的事了。
那是一家并不大的店,从配货、选花、做花到配送只有店主一个人,而我这次订的这家在杭州算是个网红店,常居各种平台榜首,销量 9000+,劣币驱逐良币,真是悲哀。
有趣的事与物
博主
落拓学长回来了!!!四五年前一直看他的视频,甚至人生走向都是沿着他当时说有些遗憾自己未选择的区块链方向,一直以他为目标。
后来他转行 fintech,去了 Jane Street,这几年也不断在选择新的挑战,慢慢停更了。回来后聊了学习成长、焦虑与冒名顶替综合征,这些也都是这几年慢慢步入工作的我开始思索的东西,依然有被激励到!
这就继续学 Rust 去了。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Normal People,很喜欢这个英剧,这两天看其他书的时候突然想到了这本,打算补一下原著。
- What My Bones Know,去年看了一小半,这两天想到关于家庭和心理疗愈的问题,每天看一章左右。
- 阿特拉斯耸耸肩,读者送的,读了前两张章了。
文章
视频
从零开始搭建你的免费图床系统(Cloudflare R2 + WebP Cloud)
前言
在「2024 年了,我的博客有了什么变化」一文中,我介绍了自己使用 Serverless 平台和一些开源项目搭建的博客系统,也开启了这个系列教程来记录搭建和部署全过程。
本篇是关于图床系统的解决方案。
[2024-07-02 更新]
新写了一篇教程实现了图床添加隐私和版权保护,算是番外篇。
图床方案迭代
其实在博客搭建之初因为内容并不多,也比较少有插图,所以大部分的图片都是直接放在我的 Hugo 博客仓库的 static
目录下,也没觉得有什么不便,直到有一段时间需要多平台发布,复制了博客的 markdown 源文件后,因为所有图片都是博客的相对路径,导致图片全部无法显示,需要把图片一张张重新上传,十分繁琐。
那时才开始了解到图床(Image hosting)这个概念,把图片上传到一个专用的存储服务并通过公开链接使用,不但可以统一进行管理,还能有效减少博客仓库文件的体积,提高网站的加载速度。
GitHub + jsDelivr CDN + PicGo
一开始我是新建了一个 GitHub 仓库「GitHub - image-hosting」,通过 PicGo 直接上传到仓库,并在 PicGo 返回时的图片路径改为 jsDelivr CDN 加速后的链接,其实倒也还算方便,还多了一份版本管理。
不过好景不长, jsDelivr 遭到了 DNS 污染,被大陆封锁,以至于我的博客图片在很长一段时间完全无法加载,也让我对这种纯依赖 CDN 的方式有了一些顾虑,再加上 GitHub 托管图片是基于代码仓库,上传图片依赖的是代码提交,容易污染 commit 记录,且终究算是一种滥用,万一账号/仓库访问有问题也容易丢失所有图片,于是开始寻找其他方案。
阿里云 OSS + PicGo
第二个想到的就是云服务商提供的对象存储了,像是 Amazon S3、阿里云 OSS 等都是云厂商提供的对象存储服务,在提供可访问的公开链接的基础上还多了权限控制、数据备份、拓展性等优势,在相对低成本的前提下提供了针对文件数据存储和管理的较优解决方案。
由于是想针对中国大陆用户进行访问优化,最终我选择了阿里云 OSS,配置不算复杂,同样是通过 PicGo 进行上传并转换为阿里云 OSS 的链接,在访问速度上有了明显的提升。
不过由于多是按量计费,持续增长的成本对于非盈利的个人博客来说也是需要考虑的。23 年初有一阵子博客流量较大,月账单持续上涨,再加上阿里云 OSS 如果需要自定义访问域名则需要进行备案,我域名本身通过 Cloudflare 进行托管,并不考虑备案,所以在用了几个月后,还是考虑更换图床方案。
Chevereto + PicGo
经过了一番调研,在我线路不错的搬瓦工服务器(CN2GIA DC6 机房)上使用 Docker 镜像部署了 Chevereto 的免费自部署版本,并将图片以 Docker Volume 的形式挂载在主机上。
Chevereto 的界面实话说风格有些老旧,还是古早的 php 服务,免费版也很久就不再维护升级,但胜在功能完备,同样可以使用 PicGo 对接 Chevereto 的 API 进行图片上传等操作,稳定性也不错,于是就这样用了一年半。
但自己对于自部署服务的稳定性和数据的珍贵性还是有些大意,前几天服务器突然挂了,内核报错直接无法重启,服务挂了倒还好说,但是我这一年半多的图片数据也无法导出,工单联系技术支持,一天只回复了我两次,一次让我重启,一次建议我聘请一个网络管理员排查。
只能自力更生,翻遍了网上各种方案,折腾了一天终于算是解决了,但这一次的教训让我对有重要数据的服务备份和自部署稳定程度都有了全新的认识,再加上想要重新部署的时候发现免费版镜像等已经下线,只剩一个按年付费的 License 版本,于是放弃了原方案。
Cloudflare R2 + WebP Cloud + PicGo
于是重新转向了云服务厂商的对象存储,发现了赛博菩萨 Cloudflare 提供的 R2 对象存储这一服务,免费计划中有每月 10 GB 的存储容量,对于个人使用来说完全够用,大厂的服务与数据安全也有保障。
为了优化用户的访问,又使用了一个「WebP Cloud」服务对 R2 的图片进行代理,在代理层面进一步减小图片体积,虽然对于国内用户来说速度肯定还是比不上阿里云 OSS 这种线路,但是在不用备案、稳定且免费的综合条件下,这是我能想到的最好的方案了。
在电脑端同样是通过 PicGo 客户端几乎一键上传并生成博客直接可用的 markdown 图片链接,配置完成后使用起来很顺滑。
图床搭建说明
Cloudflare R2 + WebP Cloud + PicGo 的方案尽管牵扯到了多个组件和平台,但所有操作都在 Free Plan 中,也是我最终选定的方案,下面将从零开始介绍如何搭建这个免费图床系统。
Cloudflare R2
R2 是 Cloudflare 推出的免费对象存储服务,需要免费注册一个 Cloudflare 账号才能使用,注册登录后,点击左侧边栏的 R2 访问服务,但需要注意的是开通 R2 服务需要绑定信用卡(国内外主流信用卡皆可),但并不会扣费,主要是为了验证用户身份使用。
创建图床 Bucket
开通 R2 服务后,点击右上角「创建存储桶」按钮进行创建。
进入创建配置界面后,需要填写存储桶(Bucket)名称,建议有一些辨识度,后续在配置上传时会用到。
位置则选择「自动」,但可以额外多配置一个位置提示,由于我后续还将使用「WebP Cloud」服务的美西机房进行图片代理优化,所以在此处选择的是「北美洲西部(WNAM)」,根据需求选其他区域也可以,但 Cloudflare 并不保证一定会分配到所指定的区域。
点击「创建存储桶」按钮即完成创建,此时我们已经可以向我们的「yu-r2-test」存储桶上传文件了,可以选择在网页直接上传文件或文件夹。
也可以使用 S3 API 进行上传,我们后续使用 PicGo 客户端进行上传就依赖这种方式,但需要进行一些额外配置,点击导航栏「设置」选项进行配置。
首先我们需要打开「R2.dev 子域」,这是为了后续访问图片时需要的公网地址,点击「允许访问」,并按照提示输入「allow」即可开启。
完成后会显示一个以 r2.dev
结尾的公网网址,即我们后续访问图片的网址。
自定义图床域名(可选)
但是分配的网址比较长,不易于记忆,我们可以通过「自定义域」来绑定我们的专属域名,点击「连接域」按钮。
输入自己想绑定的域名,如 yu-r2-test.pseudoyu.com
,点击继续。
连接域,并等待 DNS 解析生效即可。
完成后 bucket 状态处「公共 URL 访问」显示“已允许”,且「域」显示为我们刚自定义的域名即配置成功。
配置 Bucket 访问 API
当我们完成上述配置后,可以回到存储桶「对象」界面,上传一张示例图片,点开详情则会显示该图片的访问地址,此时我们就拥有了一个可访问的图床服务了。
但每次都要打开 Cloudflare 页面手动上传图片的方式显然不够便捷。R2 提供了 S3 兼容的 API,可以方便地使用一些客户端/命令行工具进行上传、删除等操作。
回到 R2 主页面,点击右上角「管理 R2 API 令牌」,进入后点击「创建 API 令牌」。
输入令牌名称,「权限」选择“对象读和写”并将此 API 指定之前所创建的 Bucket,这样最小化权限也保障数据安全,其余选项保持默认即可。
完成创建后会显示所有密钥,我们使用 PicGo 需要的是下面三个信息,不过因为只会显示一次,建议在密码管理软件或其他地方妥善保管好这些参数信息。
至此,我们需要在 Cloudflare R2 上配置的部分就完成了,接下来我们需要配置 PicGo 客户端。
PicGo
PicGo 是一个用于快速上传并获取图片 URL 的工具软件,有着较为丰富的插件生态,支持多种图床服务,其 GitHub 仓库为「GitHub - Molunerfinn/PicGo」,可以下载对应平台客户端使用。
配置 R2 图床
PicGo 本体并不包括 S3 图床,但可以通过「GitHub - wayjam/picgo-plugin-s3」插件来支持。
在「插件设置」中选择安装,「图床设置」中就新增了 Amazon S3 选项。点击进入配置选项。
这里有几项配置需要尤其注意。
- 应用密钥 ID,填写 R2 API 中的 Access Key ID(访问密钥 ID)
- 应用密钥,填写 R2 API 中的 Secret Access Key(机密访问密钥)
- 桶名,填写 R2 中创建的 Bucket 名称,如我上文的
yu-r2-test
- 文件路径,上传到 R2 中的文件路径,我选择使用
{fileName}.{extName}
来保留原文件的文件名和扩展名。 - 自定义节点,填写 R2 API 中的「为 S3 客户端使用管辖权地特定的终结点」,即
xxx.r2.cloudflarestorage.com
格式的 S3 Endpoint - 自定义域名,填写上文生成的
xxx.r2.dev
格式的域名或自定义域名,如我配置的yu-r2-test.pseudoyu.com
其他配置保持默认即可,确认参数无误后点击「确定」与「设置为默认图床」即可。
图片上传
完成上述配置后,我们就可以在「上传区」直接拖入文件进行图片上传了,如上传后显示无误则为配置成功,生成的链接会自动在系统剪贴板中,直接在需要的地方粘贴即可。
并且可以在链接格式处选择对应格式,如 URL 或是博客可用的 Markdown 格式链接等。这里我还做了一个小的配置,在左侧「PicGo 设置」 - 「自定义链接格式」中修改为 
,并在上传区的链接格式处选择了「Custom」,这样我上传后就会根据文件名生成以文件名为 Alt 文本的 Markdown 图片链接。
WebP Cloud 图片优化
至此我们已经完成了整个图床的搭建、配置和上传,但通常我们本地截图或是相机拍摄的图片体积较大,对于访客来说加载时间会较长,并不直接适合互联网发布。
我在很长的一段时间都用了非常笨的方法,即「TinyPNG」这一在线网站的 api 配合一个开源的 macOS 客户端应用,将图片拖入其中进行压缩后再通过 PicGo 上传到图床,通常能够在图片质量损失较小的前提下减少图片 50% 以上的体积,繁琐却有效。
这次更换图床方案后也开始寻找更智能的图片优化服务,想到了「WebP Cloud」。
其实了解到这一服务是去年的一个晚上和 STRRL 正在杭州一个商城的电玩城里看人打音游,他给我看了 Nova Kwok 的一篇博客上了 hacker news 榜首的消息,一起围观了半天,不过当时大概只知道是优化图片的服务,并没有详细了解。
于是又去打开了官网「webp.se」看了一下更为详细的介绍。
简单来说这是一个类 CDN 的图片代理 SaaS 服务,可以在几乎不改变画质的情况下大幅缩小图片体积,加快整体站点加载速度。发展到现在除了图片体积减少外,还提供了缓存、添加水印、图片滤镜等更多实用的功能,并提供了自定义 Header 等配置选项。
看了一圈,觉得能很好满足我的博客图片优化需求,开始折腾配置。
配置 WebP Cloud
首先通过 GitHub 授权登录 WebP Cloud 平台。
页面非常直观,主要显示了当前 Plan 下的 Free Quota 和额外 Quota 的数据,以及一些用量统计。
点击「Create Proxy」按钮可以添加配置。
- 为了优化国内访问,我「Proxy Region」选择的是美西「Hillsboro, OR」区域
- 「Proxy Name」填写一个自定义名称即可
- 「Proxy Origin URL」,比较重要,需要填写上文我们配置好的 R2 自定义域名,如我填写的是
yu-r2-test.pseudoyu.com
,如果没配置自定义域名则填写 R2 提供的xxx.r2.dev
格式的域名
图中 Basic info 部分「Visitor」下显示的以 xxx.webp.li
格式即为我们的代理地址。
例如我们之前通过 PicGo 上传到 R2 的文件 yu-r2-test.pseudoyu.com/new_mbp_setup.jpg 则可以用 dc84642.webp.li/new_mbp_setup.jpg 这一链接进行访问。
如果不喜欢默认的代理地址,则可以右下角 Chat 或是邮箱联系开发者进行自定义域名修改,之后或许也会有更自动化的配置流程。
[2024-07-06 更新]
支持了自定义配置域名,详细教程可参考「Custom Domain | WebP Cloud Services Docs」。
更改 PicGo 配置
需要注意的是,由于我们最终需要放在博客中的图片是经过 WebP Cloud 代理过的链接,所以需要回到 PicGo 的「图床设置」中,将「自定义域名」改为我们刚配置的 WebP Cloud 代理地址,即格式为 xxx.webp.li
的代理链接或其他自定义域名。
WebP Cloud 用量
免费用户每天有 2000 Free Quota,即能够代理 2000 次图片访问请求,并提供 100M 的图片缓存,对于一般用户来说完全够用,如有一些流量较大的特定时期也可以购买额外 Quota,价格很便宜。
如超过了 Quota,访问则会被 301 转发到源站图片地址,不经 WebP Cloud 服务压缩,但依然可用;超过 100M 的缓存则会按照 LRU 算法清理,所以依然能够保障一些高频请求的图片能够有较好的访问体验。
我博客的日访问量大概在 300-500 visits 左右,再加上一些 RSS 订阅和爬虫的流量,根据 WebP Cloud 统计测算来看,平日的请求大概在 4000-5000 次,发博文当天会有 10000+。
所以目前先选择了 Lite 计划,配合一些额外用量来 Cover 高峰流量,打算再观察一阵子看看。
总结
以上就是我的图床系统搭建方案,本文的所有图片也都使用 PicGo 上传、Cloudflare R2 存储并经 WebP Cloud 代理优化。
这是我的博客搭建部署系列教程之一,如对评论系统、数据统计系统等搭建感兴趣,请持续关注,希望能对大家有所参考。
2024 年了,我的博客有了什么变化
前言
在两年前的这一篇「2022 年了,聊聊我为什么还在写博客」,我聊到了我写博客的缘起、初衷和搭建方案。
两年多过去了,初衷仍在,写作也依然坚持下来了,虽没有完成自己所计划的周更,但多少也积淀了些文字。
经历了很多事,似乎渐渐转向了一个「周报博主」,写的内容和风格已经大不同。技术和工具效率主题更少了,分享生活和思考更多了;少了些通宵两天更新四篇技术教程的冲劲,却多了些通过笔触表达情感后的自洽;收到很多关于博客搭建和技术教程的感谢依然会很开心,却也更珍惜和素昧谋面的大家交心的感动。
周报博主
可能是有一次开会闲聊 xLog 未来的发展,有位同事突然 cue 我说,你作为一个「周报博主」有什么想法,我一愣,这个称呼倒是第一次听到,翻了翻主页,确实。
之前一直自诩是技术博主、工具效率博主,最后留下内容最多,给大家印象最深的似乎还是周报,也不错。
开始写周报似乎是「Homura」组织了一个周报监督小组,当时不论是在推特还是独立博客群体中都还是个小透明,也希望有更多人进行抱团和交流,当时会每周把自己的周报丢到群里,会有互相被卷到,也有对于他人生活状态的关心,很开心。
后来大家都经历了许多生活的工作的变动,群里最后的消息停留在了 23 年 1 月,但那依然是我很快乐的一段时光,也是我后来能继续写周报的动力,因为我知道,即使分享的只是生活的琐碎和一些不成熟的小想法,依然有人在认真读你的文字。
之前有一次收到 Randy 的催更,他说其实没必要把它定义为周报,不然常常会有压力和束缚,不过我反倒依赖这种输出倒逼输入的模式,这样有了周报作为一个结果导向,才会更有动力把这周过好。
虽然我常常重新定义周就是了。
独立博客
比起编排精美的书刊杂志,我更享受于访问他人的博客网站,站名名称、主题配色、配乐排版都更真实具体地呈现了一个人格化的存在,而在阅读博文时,我也常常会视为一次穿越时空的对话,会想象写下这些文字碎片的作者当时是怎样的心情,有时甚至也会带些顽皮地脑补他是一个怎样的人,此刻在做些什么。
独立博客其实是一个说大不大说小不小的圈子,两年过去,我反倒觉得开始搭博客、写博客的人渐渐变得多了,也有了更多有意思的高质量内容。
相比起其他不论是粉丝积累还是互动都更为方便的成熟内容平台来说,不仅仅是平台和写作形式上的独立(我其实也愿意称在 mastodon 或是 misskey 上认真分享内容的人为独立博客作者),而是思想的独立,即好的文章不止授人知识,还引人思考。
还跟 Randy 聊到想为独立博客做一些事,以刊物的形式收录这一段时间内读到的好的文章并为之作序推荐,其实已经筹备好了第一期,但由于两个人错峰的忙碌和更专注地做 EpubKit 产品,迟迟未能发布,这也是希望能够在未来某个节点能够持续做下去的事。
博客系统
这是两年前写过的几篇关于博客搭建的文章:
- 2022 年了,聊聊我为什么还在写博客
- 免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)
- Hugo + GitHub Action,搭建你的博客自动发布系统
- 从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)
- 轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)
主要是围绕着我使用 Hugo 这一静态网页生成器(SSG)搭建个人博客及一些周边服务的一些记录,也看到很多人通过各种联系方式加到我说根据这一系列教程成功拥有了自己的博客,很开心能够为博客这一已经有些式微的创作方式做出一些小小的贡献。
当时写的时候对自己的整套方案很满意,然而时隔两年回头看了下。
- 博客本体:Hugo 本体没变,部署方案: GitHub Pages + Cloudflare CDN -> Cloudflare Pages
- 评论系统:Cusdis -> Remark42,部署平台:Railway -> Vercel + Supabase -> fly.io
- 统计系统:Umami -> goatcounter,部署平台:Vercel + Heroku -> Railway -> Netlify + Supabase -> fly.io
- 图床系统:GitHub + jsDelivr -> 阿里云 OSS -> VPS 上自部署的 Chevereto + PicGo -> Cloudflare R2 + WebP Cloud + PicGo
- 内容搜索:无 -> Pagefind 静态搜索
更换的原因很多,有些是由于 Heroku 和 Railway 渐渐取消了免费计划,有些是由于开源项目更新少了缺少功能,也有些单纯是自己想折腾一下更轻量些。
想起来当时写这套系列教程的时候主要就是觉得网上能够搜到的方案和教程零散且常常落后,于是想给想搭建博客的读者一站式搭建起来的可行方案,发布后收到了许多人的反馈,有些内容也早该更新,却一直拖到现在才开始重新写,很惭愧。
下文会对当前的方案作一些介绍,后续更新后的系列文章完成后也会追加链接。
博客本体
我使用 Hugo 这个静态网站生成器来搭建我的个人博客,使用并改造了一个比较 retro 的主题「hugo-theme-den」。
大体的流程可以参看「Hugo + GitHub Action,搭建你的博客自动发布系统」这篇文章和「GitHub - yu-blog」这个仓库。
加了一些每天自动更新 About 页面的 GitHub Actions 自动化操作,并且由于 GitHub Pages 托管的网站从国内访问速度几乎不可用了,迁移到了 Cloudflare Pages,免费且体验感好了很多,其他几乎没什么改动了。
其实倒也不是没想过换框架,之前看到「Owen」和「PJ Wu」使用的 Zola 就有些眼馋,甚至也有想过像「槿呈 Goidea」或是「Innei」一样自己写一个。
不过冷静下来一想,自己现在网站积累了不少文章,要是想要保留原有路径免不了一番折腾,再加上确实很喜欢现在的主题,有什么想法干脆就直接去定制和改动主题了,还是少花一些心力在折腾平台,多写些博文比较重要,不然多少有点买椟还珠之嫌,遂作罢。
评论系统
在博客诞生之初直到今年四五月我一直使用的都是 Cusdis,整整用了三年。
时至今日依然是十分值得推荐的方案,轻量,方便自部署,风格也简约好看,搭建教程参看「轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)」。
不过鉴于 Railway 从去年 8 月起已经取消了 Free Plan,如果依然想完全免费使用,可以使用 Vercel/Netlify/Zeabur 免费部署主项目,并在 Supabase 上部署一个免费的 PostgreSQL 数据库实例,把链接作为环境变量传入 Cusdis 服务中即可,其他流程大同小异。
最近有一次由于更换数据库 URI 时 Vercel 部署一直报错,再加上确实需要一些新的功能,于是下定决心从 Cusdis 迁移,调研了一圈后选择了 reorx 在「更换博客评论系统」一文中最后选定的 Remark42。
单纯就配置选项来说比起 cusdis 还是丰富了不少,目前配置了常用的几种社交账号登录(GitHub、Twitter、Telegram、邮箱)、可以匿名评论、支持邮件订阅回复提醒并且也设置了 TG bot 提醒,并且部署在 fly.io,go 单二进制 + 数据库单文件,很舒服的解决方案,完成博文后会在这里更新教程链接。
[2024-07-22 更新]
评论系统搭建详见这篇。
数据统计系统
我之前自部署了一个 Umami(参看教程「从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)」不过后来由于 Heroku 取消了免费 Plan,我最后折腾一圈,选择了 Netlify 部署服务 + Supabase 部署 PostgreSQL 数据库实例部署的方式,其余流程依然适用。
不过一方面因为我部署得比较早,有一个大版本无法升级,以至于一直停留在自己 fork 的一个旧版本上,另一方面确实也渐渐觉得这种服务和数据库需要分离的方式免不了因为平台规则变动而频繁迁移,有些太重了,所以最后改为了 goatcounter,同样是 go 单二进制 + sqlite 数据库单文件部署在 fly.io,又是很舒服的部署方案,等更新博文后同样会在这里更新教程链接。
另外就是依然使用 Google Console 来统计分析我的访客信息与搜索权重。
这个结果很有参考性,我发现一篇关于终端对比的文章「Warp,iTerm2 还是 Alacritty?我的终端折腾小记」让我持续不断地有通过搜索引擎来的访客,另外的就是关于个人博客和搭建的系列文章了。
[2024-08-06 更新]
网站数据统计系统搭建详见这篇。
图床系统
两年前我其实还没怎么关注图床的问题,图片都是直接丢在 GitHub 仓库里,并且使用 jsDelivr 作为 CDN 加速(后来国内访问也几乎不可用了),不过随着文章数量增多,常常有身边的朋友告诉我说我的博客图片加载不出来,想着还是要兼顾一下阅读体验,于是调研了一圈方案。
先选择了阿里云 OSS 存图,电脑使用 PicGo 上传,方案挺好的,前几个月也没什么问题,直到 23 年初有几篇文章流量比较大,看着月账单上涨的势头,顿感贫穷。
于是在线路还不错的搬瓦工服务器上自建了 Chevereto 图床,同样配合 PicGo 的插件进行上传,稳稳地用了一年半。但自己对于自部署服务的稳定性和数据的珍贵性还是有些大意,前几天服务器突然挂了,内核报错直接无法重启,服务挂了倒还好说,但是我这一年半多的数据没有备份,也无法导出。
工单联系技术支持,一天只回复了我两次,一次让我重启,一次建议我聘请一个网络管理员排查。只能自力更生,翻遍了网上各种方案,折腾了一天终于算是解决了,但这一次的教训让我对与有重要数据的服务部分和自部署稳定程度都有了全新的认识,于是不敢再用原方案。
最后采用了 Cloudflare R2 对象存储来存放图片,每个月 10G 的免费额度很足够,大厂的服务与数据安全也有保障。为了优化用户的访问,又使用了一个「WebP Cloud」服务对 R2 的图片进行代理,在代理层面进一步减小图片体积,虽然对于国内用户来说速度肯定还是比不上阿里云 OSS 这种线路,但是在不用备案、稳定且免费的综合条件下,这是我能想到的最好的方案了。
在电脑端通过 PicGo 客户端几乎一键上传并生成博客直接可用的 markdown 图片链接,配置完成后使用起来很顺滑。
图床搭建教程见这篇:
[2024-07-02 更新]
新写了一篇教程实现了图床添加隐私和版权保护,算是番外篇。
内容搜索
之前我的博客是没有内容搜索功能的,本来文章也不多,再加上静态博客没有后端,实现起来感觉也不容易,于是一直没支持。但随着后来有时候要查阅自己之前的文章只能用 VS Code 在一堆 markdown 文件中搜索的体验后,觉得还是很有必要的。
调研了一圈使用了 Pagefind 这一项目,基于静态文件的搜索库,无须引入或是托管其他后端服务,我只需要在每次发布博客的 CI 中构建全博客的索引文件,就能够很方便地支持搜索,中文搜索效果相对弱一些,不过也是够用的程度,基本上对主流的博客框架都支持。
这部分可以参照「如何透過 Pagefind 在 Zola 產生的靜態網站裡加入搜尋功能」这篇文章。
总结
2024 年了,我大抵还是个爱好写作的人,从早些年的书评影评、技术教程到现在的生活周记,似乎所见所思只有落笔写下才会转为触手可及的真实。而随着上百篇文章的沉淀,个人博客站点也成为了我在这世界的另一个载体,源于我却又独立于我,有时是随手可拾起的记忆碎片,有时又是自己精神的避难所。
也希望你们能够继续在我的博客中发现一些有趣的东西,或是知识,或是启发,抑或是一点点小小的共鸣,或许在某个时刻,你们也会想拥有自己的博客站点,让自己的所思所想在这个世界上留下一些痕迹,生根、发芽,也希望这套系列教程能够提供一些帮助。
周报 #62 - 香港之行、5am club 计划与 Rust 学习
前言
本篇是对 2024-06-17
到 2024-06-23
这周生活的记录与思考。
去香港参加 Google AI+Web3 活动,面基了组里的很多小伙伴;体验了因订不到房而露宿网吧;打算根据 5am Club 理念调整生活节奏;第二次入门 Rust;还有很多有意思的事。
香港之行
这周最有意思的事是去香港参加了 Google 的 Web+AI 的活动,我们项目在其中有一些 talk 和圆桌论坛,刚好也有机会参观了 Google 的香港办公室(以及拿了一些周边)。远程办公之后,其实比较少能有机会和同事们面对面,而这次活动我们组除了一位在美国的同事没法赶到外,其他人都相聚香港,还一起聚餐、打德州以及后面续了一场深圳漫步。
很有意思的是由于我和杭州一同来的同事 ares 没有提前订好房,直到零点之后在铜锣湾时代广场四处找酒店,最后选择了去露宿网吧,刚好拿着从 Google 那边领的抱枕,倒也是挺好睡的。
突然想到之前在香港读书赶课程大作业的 due,当最后卡着 ddl 提交后,和小组成员一起买了一堆零食和啤酒在维港闲聊、看日出的经历;也想起之前和朋友去泰国,跟着 Pokémon GO 的地图四处解锁景点;以及去青岛旅行时让出租车司机随便开,带着我绕一圈有趣的地方,这些都是很有趣的人生体验。
我虽然是个 j 人,在大部分时候会制定严密的计划,但也非常享受这份生活的随机性,或许多年之后并不会记得这场 Google 的 talk 有什么有趣的发言,但一定不会忘记这一晚在网吧过夜的记忆画面。
5am club 计划
Robin Sharma 有一本书叫《5am Club》,提出了一个早上五点起床,进行自我提升学习、锻炼以达到最佳状态的概念,虽然对于经常熬夜到三四点甚至更晚的我可能 5am 睡更容易达到,不过依然对这种新的生活方式有些憧憬。
大学有过很长一段时间的极端自律,每天一两点睡、六七点起,似乎有着用不完的精力和时间,在香港读研期间也由于跨专业的焦虑和课业压力,每天六点多起床去图书馆占座,接近 11 点才回到租屋,循环往复却也乐在其中。
但大概是由于工作之后白天的许多时间天然被占据,似乎这样的习惯很快被打破了,为了有更完整的自己的时间,更晚睡,却也更晚起。有阶段性会保持不错的状态,但也容易陷入一些不好的循环,晚上学习状态不好 -> 焦虑 -> 报复性熬夜 -> 第二天起床更晚 -> 白天效率低下 -> 晚上学习状态更不好。
于是想从这周开始进行一下尝试与挑战,倒不一定是严格的五点,只是相对更早,把熬夜的学习时间平移到早上,一直到 11 点左右调整到开始上班的状态。
而由于被隔壁 「polebug」 的 study vlog 卷到,也有了一些尝试新领域的学习动力,所以也给自己定了更加有趣的目标,早上最开始学习的是一些跟工作并不直接相关但一直想体验的东西,比如 SwiftUI、Rust 以及使用 langchain 进行一些 AI 应用的开发实践等等,这次也打算直接 learn by getting hands dirty,直接上手一些 side project 或是给开源项目贡献 pr。
Rust 学习
承上文,打算第二次入门 Rust,上次入门还是在 22 年,其实还挺认真地学了一阵子,跟着写了一些 demo 项目,还做了学习笔记「pseudoyu/learn-rust」,不过确实工作里没有应用场景,已经忘得差不多了。
组里有个 Rust 狂热爱好者 kally,香港和深圳之行一路在推荐,甚至在我上飞机前还让我下了 YouTube 上的入门视频,确实挺好睡的。
不过正经地打算重新学习一下,也上手写一些自己的项目,目前的想法是把之前一个通过 RSSHub 来订阅多个平台信息源同步的 go 项目通过 rust 重写一下,以及看看有没有什么好玩的开源项目可以参与。
目前在看 kally 推荐的一些 YouTube Channel 的基础视频,以及很久之前买的极客时间的「Rust 编程第一课」,Rust,启动!
Telegram Channel 1000 subscribers
频道 1000 subscribers 达成!感觉越来越少在推或者其他平台上表达,更喜欢在频道里碎碎念了。
其实分享欲这个东西一直存在,有时候是与自己对话,有时候是和身边的人秉烛夜谈,又有更多的时候想分享给更多人得到一些反馈,只是关闭朋友圈的我似乎已经不太习惯将这些分享到我的周围,所以有很长一段时间 twitter 成为了这个出口,而这一年,博客的读者和频道的关注者才慢慢成为分享的对象,感觉其实现在的节奏下似乎好好听人说话、思考并回应似乎成为了一件弥足珍贵的事,我也时常告诫不要忘记这一点。
也谢谢你们好好听我讲话。
其他
mac
新拿到的 Google Cloud 贴纸贴上了我的 MBP,集邮了!
周中发现 mac 出现了灵异事件,当 slack/zoom 等软件打开麦克风时光标就不受控制,以 2-3 秒一次的频率点左上角菜单栏,像是被远程控制了一样,且其他时候一切正常,去了 Apple 和技术支持小哥一起排查了好一会儿定位到了是新安装的 Bartender 的替代品 iBar 导致的,据评论区说 Barbee 也有这个问题,大家可以参考一下 🫡。
小哥说我复现、排查思路和操作的熟练度可以来这里上班了 🤣,Apple 的用户真的是自适应的。
再加上之前刚有一个电脑被家里另一只小猫饭饭咬坏了屏幕,决定斥巨资给我的 MBP14 补买一个 Apple Care,刚好 7.3 过一年的保,Apple 小哥跟我说一年内补买可以在这个基础上再续三年,感觉很划算,等于多了一年!
招聘
顺便发一个我司的招聘:Work With RSS3/Job Description
目前在招 DevOps Engineer/AI Engineer/Blockchain Engineer,远程办公,工作氛围很好,有疑问可以随时问我,期待未来做同事。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 索拉里斯星,与三体的设定类似,索拉里斯星围绕着双星旋转,但是不同于三体的降临或是拯救,索拉里斯星其实或许根本并不关心地球和上面渺小的人类,只是人类单向的自我中心罢了,甚至想用自己更为“高尚”的思想与价值观去改变它,探索也不过只是伪善。。
- Normal People,很喜欢这个英剧,这两天看其他书的时候突然想到了这本,打算补一下原著。
- What My Bones Know,去年看了一小半,这两天想到关于家庭和心理疗愈的问题,就睡前又翻了几页。
- 阿特拉斯耸耸肩,读者送的,开始读了。
收藏
文章
视频
周报 #61 - 好朋友的婚礼与对婚姻的思考
前言
本篇是对 2024-06-07
到 2024-06-16
这周生活的记录与思考。
好朋友的婚礼
端午回北京参加了一场婚礼,是高中的挚友渐仔。
高中是在文科班,仅有八个男生,其中还有一位在高二时突然思想觉醒要振兴中华文坛而休学写书去了,所以陪伴着度过高三生活的只有七位了。或许是因为人很少,反倒有了些抱团取暖的相惜,毕业后直到疫情爆发都基本保持着一年两三聚的频率。
其中又有包括我在内的三位更为同频而保持着尤其亲近的联系,有小群日常闲谈、会趁着出差在北京、上海或是杭州赶着约上一顿饭,也都去各自的家中做客,互尝过厨艺,见过对彼此重要的人。
去年三人小组的另一位率先结了婚,当时的我因一头蓝色长发而有些“不过关”,没当成伴郎,其实一直还有些小遗憾。渐仔婚礼日子定下来之后就早早邀请了我当伴郎,且是唯一一个,伴郎的英文是 best man,很诱人的 title,惊喜而珍惜。
其实除去那些职责性的婚礼现场要做的事外,我觉得邀请重要的人来见证自己人生的一个重要节点本就是一件浪漫的事。
提前几天去试了一下午西装,发现气质完全 hold 不住,最后还是在常买的男装网店东拼西凑了一套休闲西服,算是穿上了这辈子最正式的一套装扮,头发没舍得剪短却也修整了下,也梳成了大人模样。
是草坪婚礼的形式,在电影里看过很多次,现实中却是第一次参加,很有仪式感却也不失温馨,早早参与到婚礼筹备过程中的我才更加能感受到这完美的仪式背后的细节与心意。
新娘那一侧的伴娘是个 E 人,E 得耀眼夺目,而我临上场了还在低头默背呈递婚戒时的左右手顺序,I 得格格不入,也算是一种有趣的反差,还有点期待看到后面的现场成片的。
婚礼与婚姻
其实早在五月中,就陪同他们去跟婚庆策划公司谈过细节,看着冗长而细致的流程表、物品单和布置图,有些惊叹于一场婚礼的复杂和昂贵程度。当时谈报价时看到两扇花门和座位上一些点缀的花束加起来逾五万,以至于我和学姐到了婚礼现场看到花门都不自觉想到这些数字。
婚礼似乎总是被冠以“一生一次”的标签,所以似乎为了这一瞬的完美哪怕付出再多心血或是花费再多金钱都值得。但我常常也在想,当一件原本感性而浪漫的事变成了 Excel 表格中下拉不完的条目和背后精确的数字,当新郎新娘的一举一动都要被完美规定时,这场婚礼究竟是为了谁而办的?
或许因为我和学姐是重体验多过形式的人,比起一场婚宴的奢华,我们或许觉得共同策划和拍摄一个关于婚姻与爱情的纪录片、一次带着头纱和祝福见双方重要却多年未见的好友的“巡回”之旅,或是在喜欢的国家城市教堂拍下一些属于两个人更真实而珍贵的承诺会更有记忆。
但站在新郎身边见证婚礼上的誓言和感动的那一刻,觉得或许怎样都好,只要是对的人。
其他
博客评论
当发现从最开始用 RSS 阅读器的时代就躺在我订阅列表里的屈屈大佬也看我的周报并且还评论了时,有种追星成功 & 次元壁破了的感觉 😭
读者的陪伴
我生日的时候发起了一项抽奖,抽了六位留言的读者,中奖者三位选了 EpubKit 会员,两位选择了实体书,还有一位选择了微信读书。
有趣的是其中一位中奖的朋友还反向给我寄了一套大部头,去年他在我的那篇「推石头的人」的生日总结文章评论说不如让西西弗斯也耸耸肩,今天看到他给我寄来的《阿特拉斯耸耸肩》让我感受到一种奇妙而又温暖的陪伴与链接 🥰。
更换笔记系统
今天整理了一下午笔记,发现 Logseq 某种程度上改变了我的思维习惯,虽然以 Daily Notes 的方式确实是减轻了记录的心智负担,但也让自己并不那么连续思考了,思路都转换成了一个个 bullet points,却又常常连不成一篇完整的博文,学过的很多东西慢慢也就淡忘了。
于是下定决心转到了 Obsidian,没装什么插件,想到有什么要记录的就以 「20240615 + 关键词」这种模式开头的文件 + 每篇文稿前注明 tag 这种更原始的单文本模式来记录,反倒是能够更加体系地整理一些东西。
更换 macOS 主题
发现一个纯暗黑的 icon + 壁纸全套主题,效果很沉浸(除了 Finder 改不了图标很扎眼),实践效果如图。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
收藏
文章
视频
27 岁的自白:成长是一件很扫兴的事
前言
现在是 2024 年 6 月 6 日,我 27 岁了。
周报的想法就是在前年的生日这天萌生的,在去年的总结里也说过这是个一直想坚持下去的栏目和仪式感,如约而至。
第一年写了 40 篇周报,而去年只有 20 篇了,减少的不仅仅是数量,还有自己的思考、情绪与表达欲。我常常说周报是自己生活和表达欲的载体,当自己生活一团糟的时候是没办法好好写些什么的,但似乎这一年这样“状态不好”的时候未免太多了些,或者换句话说,我对这样的自己太过纵容了些,这很可怕。
原以为长大后的一年一年不会再像刚毕业时那样有那么多的变动,甚至做好了准备接受生活终究会归于平淡,但站在此刻回顾这一整年,依然发生了许多事。
月亮与六便士
学姐曾有一段时间赶在工作日的午后挤出时间去画室画画,连续几天遇到两位学员专注而又放松地闲谈着、画着,略感羡慕,问她们能够在工作日的下午尽情画画的秘诀是什么,一位耸了耸肩说“忍受贫穷就好了呀”。
似乎人是没有办法在抬头看着月亮的时候同时捡拾硬币的。
但或许因为我在成长过程中有几分幸运地常常被周遭的人保护着,所以一直是个理想化的人,一直追求的似乎并不是工作的 title 或是收入,而更像是一个能够让我继续做喜欢的事的环境和氛围,是一群可以真诚相待共同成长的同路人。
也很厌弃所谓的职场文化,在上一份工作中就会因不合理的甲方需求与擅于推委责任的项目经理而在全员大会里并不“圆滑”地直接表达不满。许多已是“过来人”的前辈和朋友跟我聊完后常常会提醒我有一些提防之心或是放下这些并不切实际的执念,劝我早些抓住那些更加具象化的看得见的利益,我明白,也知道这有用,但无法说服自己做到。
很幸运,我追求的一切在 RSS3,在我现在的组里随处可见。
去年生日后不久,在这里转正答辩成功,正如在之前的一篇「周报 #58 - 远程工作这一年」中所述,工作本身有忙碌有闲暇,起起伏伏,不知不觉已经度过了一年了,也期待一起走得更远。
小王子与他的玫瑰花
同样是去年生日后不久,我恋爱了(参看「周报 #43 - In the Mood for Love」),距今也已经一年了,就像小王子与玫瑰花一样,彼此倾注了时间,也让对方变得更为重要。
前几天公司里刚好有一个内部分享会,我没选自己更擅长的工具使用或是写作经验之类的话题,而是分享了一个更私人的话题 —— 姐弟恋,才发现,似乎与她有关的一切,才是我分享欲的来源。
这一年里,我们一起去过了很多地方,见过巴厘岛的海浪,骑过内蒙沙漠的骆驼,在北京的啤酒节蹦过迪,在南京的汤山泡过山泉水,在阿那亚的沙滩前赤脚跑着笑着,也在杭州的小河边缓缓漫步;一起学过很多东西,凛冽的冬日六七点起床去上私教课、第一次学拳击、第一次画油画、第一次冲浪...
这一年所经历的正像是很喜欢的鲁米的一首诗中所描述的那样:
我所问出的问题都关于你,
我所踏出的每步都指向你。
处处皆是你,
声音所至,目光所及。
成长是一件很扫兴的事
似乎从世俗的角度来说,一切都进展得还算顺利,工作、恋爱和生活这几项人类被赋予的大的命题似乎都在按部就班甚至过于顺利地进行着,我们作为社会、家庭的的一员似乎也都在履行自己的责任,人越长大,似乎对待这个世界越来越温和,却对自己越来越忽视。
“I'm in Kernel Panic.”
这是我的微信签名,挂了很久很久了,是对自己的警醒,而如今恐慌的缘由依然存在,生活依然存在着许多事与愿违,不论是向内观还是向外求也依然与理想中的自己相距甚远,但似乎我已经与这个世界和解了,或者说是妥协了,让步给了生活中更朴实而具体的东西,比如亲情,比如社交。
在和学姐去内蒙接连几天见各类亲戚把酒言欢、觥筹交错时,我们都开始怀念几年前的自己,那时的我们都能够有那么多的时间看想看的书、学想学的东西,成为想成为的人,而不是作为一个社会和家庭的符号被桎梏在这里。如今,其实我们索求的东西没有变,学姐依然想去一个远离人群的地方画画,我依然想宅在家里学习新的技术或是开发喜欢的产品,但我们都学会了怎么去扮演一个“好”的社会人,却忘记了如何扮演“自己”。
意识到这种变化的时候其实有一点难过,并不是难过自己变了,而是难过这才是成长,是家人朋友口中的”你成熟多了“,而成长,本来就是一件很扫兴的事。
其他
但依然很感谢在过去的这一年里即使我不再周更还依然关心和关注我的人,甚至今天一早醒来还收到了一位陌生新读者的祝福,字不多,却温暖而感动。
成长确实是一件很扫兴的事,但我依然愿意用周报留下曾经这些非黑即白的、从不妥协的日子,也感谢这些时光中陪伴着我的你们。
祝 27 岁的自己,快乐。
特别活动
用博客来记录生活两年了,留下了许多记忆,也幸运地结识了你们,会在本篇博客的留言中选取 6 位朋友,送上我准备的小礼物,祝愿你们也能够一直快乐。
抽签会持续到 UTC +8 时间 6 月 10 日晚上 23:59 分,结果会在 Telegram Channel 「Yu's Life」 中公布,也会在中选的留言评论中回复,到时候会联系你们,再次感谢大家的陪伴。
周报 #60 - 虫子旁、教育理念与 EpubKit
前言
本篇是对 2024-05-16
到 2024-06-02
这两周生活的记录与思考。
南京游学
在北京曾看过几次一席的演讲,对他们的风格调性还算喜欢,偶然看到要在南京举办一次亲子游学营,其中有一项安排是参观学姐非常喜欢的一位设计师/作家朱赢椿老师的工作室,于是借了个孩子(我妹)一起报名参加了,因为这两周其实也还没走出四处奔波的疲累,所以原本也没抱有太高的期待,却意外度过了有意思的两天一夜。
虫子旁
大概是由于我有近十年的时间在乡村度过,最开始不是很能理解为什么会有这样一个活动让一群小朋友看虫子,甚至每天工作 debug 的自己也对虫子算不上有太多好感 🤣,但在跟着老师观察各种虫子写的“字”、画的“画”以及吟唱的“乐曲”时,才突然意识到似乎自己已经很久没有好好看过虫子了。
还记得小时候会拿着网兜去捉知了、收集它们褪下的壳珍藏,会在草地里抓蛐蛐来互相争斗,新奇地看着蚂蚁排成队搬运着什么,看到花纹独特的七星瓢虫也会蹲下来观察半天,到了城市后夜晚依然有蝉鸣,在我耳中却只剩噪声和夏日的烦闷。
在《虫子旁》这本书里,老师与随园的虫子为伴,以它们的微观视角看着这个世界,想象着它们的生活琐事,甚至有一个环节是拍了一只小蚂蚁被困在水池中微电影,让队伍中的小朋友们发散想象力画画来拯救它。
或许是我们眼中所需要容纳的东西太多太多,其实它们真实而多彩地生活在我们身旁,却从未被我的目光注视过,随之消失的还有我的童心和对生活的好奇。
而学姐的这份童心却似乎以某种方式存在着,会画几队直升机救援队去拯救蚂蚁,也会在老师给她珍藏的《虫子旁》书上签名时提出要画一只毛毛虫,在得偿所愿时还因为追星成功而哭了。
突然想起大半年前的一个午后在学姐家的书架前徘徊想找一本书打发时间时她有推荐过这本和另一本画了各种形态老虎的书,而我随意翻了下就选了另外的、忘了是《加谬手记》还是《未来简史》之类的更为厚重经典的书,时至今日似乎我才慢慢有些体会到这样了解虫子的时刻于她过去人生的重要性。
教育理念
还有一个很有意思的体验是这次游学营最后有一个少年一席演讲环节,每位小朋友需要准备一个主题演讲来分享这两天的所见所思,而我和学姐作为家长席会协助 Brainstorming 和一些指导。
讨论的时间其实只有十几分钟,却非常明显地呈现出了学姐和我教育理念的差异。学姐更多以引导式提问的方式让妹妹一点点发掘几次行程中印象深刻的点和自己想法的变化,而我更倾向于给出更清晰的框架来帮助她整理思路以保障最好的演讲效果。
深切地体会到了人长大后的观念和思维方式常常会是对于自己成长经历中所缺失部分的代偿。
我偶尔会觉得如果童年的许多时刻得到更多的关注和引导会少走一些弯路,对待像是成绩、表演这样会放在聚光灯下评判的事也会更在意结果本身,下意识就会希望她能够在这些方面获取更多的自信和成就感;而学姐或许因为父母是老师,总是会为她规划更多,似乎学生时代的很多事仅需要按部就班完成,也因而少了许多独立和自我探索的机会,因此她会更注重激发妹妹自己的想法和创造力,不论怎样的结果都看作她成长的珍贵体验。
EpubKit
最近几周在参与 Randy 的产品 EpubKit 的研发工作,在接到他邀请的时候还有些又惊又喜,自己本身是个后端,React 写得半吊子,也还没接触过 Electron,但也很珍惜能够和他亲密合作的机会,产品本身也非常吸引我,于是读了几遍文档,了解了下 IPC 机制后就开始上手写了。
从最开始的新增更新按钮这样的小功能到后面在用户群中收集需求在 GitHub Projects 一项项完成,整个过程非常有趣,也带来了很大的成就感。
而这几周担任开源之夏以及一些训练营项目的导师刚好需要课程资料,于是把之前博客写的区块链/Solidity 相关教程转成了 epub 格式电子书,体验丝滑,也联想到“Eating your own dog food”这一理念,自己参与开发的工具应用恰好满足自己需求的感觉真美好。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 海边的卡夫卡,和《世界尽头与冷酷仙境》相似的双线平行叙事,故事零散地围绕着俄狄浦斯的诅咒、随处可见的隐喻以及少年卡夫卡和老年中田的平淡的旅程故事,各自路途遇到的人、猫却令人印象深刻,都带着不同程度的善和互相救赎,更喜欢中田线。
- 虫子旁,去完游学营后开始好奇,里面讲的虫子似乎也都更亲切了些。
收藏
文章
视频
- vlog #56|女程序员下班后的学习记录|调研 Based Rollup|Taiko 文档|日常英语学习|在看《不能承受的生命之轻》|保持思考与记录
- 《代码之外》一周年直播
- vlog #57 | 女程序员下班后的学习记录|Rust 学习中|调研 Substrate|日常英语学习|专注自我|读完《不能承受的生命之轻》
- “每天不一定是完美的日子。”
剧集
- 庆余年 第二季,学生时代看过小说且第一季留下的印象很好,还挺期待的,但实际看完实在是有些失望,人设、剧情和节奏都变化很大,还到处穿插着烂梗,实在是对不起这历经五年的“打磨”。
- 天才:游戏的法则,虽然不怎么看综艺但是很喜欢智斗的环节,经推荐周末看了一下,太精彩了。
音乐
周报 #59 - 沙漠之行、家庭与家人
前言
本篇是对 2024-05-01
到 2024-05-15
这两周生活的记录与思考。
五一的小长假和家人一起去了内蒙,出发了才反应过来似乎这是第一次全家一起出远门旅行,在这之前似乎最远也就是驱车前往上海迪士尼,还是挺不一样的体验。于是本篇想聊一下家庭与家人,以及一次难忘的沙漠之行。
家庭与家人
其实我一直不算是一个恋家的人,小时候在老家长大到七八岁才转学来杭州,大概是由于缺失了一些童年相处的时刻,起初和父母似乎都有一些疏离。
小时候的我成绩中下、木讷不善言辞,也常常混迹于游戏厅,可能够不上问题少年,但也和乖巧懂事搭不上边。父母算是我见过的最为敦厚和睦的人,不论是个体还是小家庭,从小到大从未见他们有过什么争吵,也极少对我有什么指责。
十二三岁的时候似乎突然长大了,开始专心学业,也不再让父母操心,生活学业中的各种决策,从要补哪门科目这样的小事到放弃保送或是高考志愿填报这样对人生轨迹有影响的事都自己一个人决定,也早早地意识到人要为自己所做的一切决定承担后果,父母给予了应有的尊重和自由度,在当时的我看来却少了一些参与感和陪伴,甚至有些羡慕身边被父母“过度关心”的同学们。
高考后想脱离江浙沪这一片熟悉的区域,走出去看看,于是去了武汉,之后的人生也似乎多了几分颠沛流离,有过很多次自己搬家或是匆匆前往另一个城市,但我几乎不会想家。
当然,我和父母的关系很好,有时候出差路过途径杭州已经是深夜,也会在客厅聊上几个小时,讲讲我这些天的见闻与心绪;我和妹妹也很亲近,见到我就不断唠叨着她在学校发生的有趣的事,学业进步了也会第一时间打电话给我炫耀;父母对我也很照顾,会几次驱车几千公里把我从北京接回杭州,也会在我宅在家的时候给我送来饭菜。
可能是由于太久的时间我习惯于所依靠的只有自己,我们相处很像是朋友,因而也很难从亲情中汲取能量。但经过了这些年的成长,渐渐理解到了他们给予了我更珍贵的东西,也开始更感激当初他们的“放手”,让我在面对人生海海时多了不少的勇气与信心。
沙漠之行
不过也慢慢在探索家庭相处的模式,反倒是疫情初期在家以及这几个月住在杭州时才多了好些可以成为“family bonding”的感受,去年暑假一起去了上海迪士尼给我妹妹庆生,也在周末的晚上偶尔举家去吃海底捞,这些似乎稀松平常的事在我家过去的二十几年里确实很少发生。
父母早年来到了杭州,也在这里安家立业,努力工作给予了我们不错的物质条件和家庭环境,却忽略了他们自己的生活,所以从小到大我们几乎没有一起出过远门,我和我妹也都属于自得其乐的性格,对此也没什么埋怨,不过总还是少了些家庭记忆,也几乎没留下什么合照。
而最近又因故要前往内蒙,心向往大草原和沙漠已久,于是全家一起去了内蒙古鄂尔多斯。
从小在江浙长大,后来的轨迹也几乎没偏离东南沿海太多,所以这甚至是我第一次看到沙漠,也很容易联想到刚看完的《沙丘》电影。
重要的不是景本身,而是共同陪伴着走过这些景的人和共同沉淀下来的记忆。
其他
最近由于工作忙碌与自己的一些人生命题而持续有些精神紧绷,一天下午忙完工作一偏头才看到捏捏一直在旁边陪着,很认真地注视着我,有感觉到被治愈,随着陪伴的时间越来越长,似乎是我更依赖她的存在了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
收藏
文章
- 杭漂一年
- 我的读书习惯演化史
- 重新启程
- Ollama 架构解析 | Inoki in the World
- 五一随笔 | 槿呈 Goidea
- 不上班的第一年
- Your customers hate MVPs. Make a SLC instead.
视频
- Create a Desktop App With JavaScript & Electron
- 【杜比视界】是建模还是实拍?它真的能骗过人眼!
- 青年的两次跨越:【非黑即白】和【不过如此】
- 千万不要带老婆去北欧【挪威五大至暗时刻】
- vlog #54 | 女程序员下班后的学习日常|雨天宅家充电|啃 EigenLayer 白皮书|四月复盘|持续英语学习|《福格行为模型》完结撒花
- 理念如此业余的 Vision Pro 真的是出自苹果的产品?【Gamker】
- 给勇敢辞职的朋友煽风点火
- “结婚 31 年,我妈想跟我爸离婚”
- vlog #55|女程序员下班后的学习记录|享受独处|WorldCoin 白皮书|持续英语学习|Taiko 学习中|看完《谁动了我的奶酪》
- Introducing GPT-4o
- 英语白痴闯挪威,北欧会惩罚每一个 P 人
剧集
- 我的家里空无一物,断舍离。
周报 #58 - 远程工作这一年
前言
本篇是对 2024-04-10
到 2024-04-30
这几周生活的记录与思考。
从巴厘岛回来已经是 4 月中旬,迎来了生活的另一大变动,再一次从北京“搬”回杭州和重新租房,生活的节奏也随之有了些微妙的变化,恰恰是上次搬回杭州一年之后,于是想在本篇谈谈远程工作这一年。
远程工作这一年
去年三月经历了一次工作变动,从通勤坐班转为远程工作,也从生活了近两年的北京搬回了杭州。
当时的我急于逃离忙碌却无意义的工作,离开北京只是换一种心情,于我而言,杭州虽是家乡,却也不过是暂留之地,从高中开始就离开了这座城市,后续反倒只有疫情初起那半年才安安心心待在家里,那次回来前匆匆和几位朋友同事见了面道别,父母开车来北京运回了我、捏捏和所有家当,到杭州仅看了一两间房就定了下来,第二天就搬家入住。
当时的自己也没想到短短一年会发生那么多事,琐事就不多讲了,更多聊聊感受吧。
其实在上一份工作的后期,由于疫情和工作模式的各种因素,已经有一些时间可以不去公司了,但是由于开不完的会议和同事的工作时间,仅算是免去通勤之苦。而刚入职在杭州安顿好后,才真正体会到了远程工作的自由度,那时的我一整个月游荡于武汉、上海、深圳、香港、成都、西安等等多个城市,参加了很多活动,时常为了有完整的工作时间而工作到深夜。
仅一两个月后,出行自由的新鲜感就已经褪去大半,开始走向了另一个极端,宅在家里不出门,这时的我花了许多时间学习感兴趣的技术、写博客、看书、陪捏捏玩,乐在其中。可渐渐也发现,虽然我是个 I 人更多依赖与自我对话汲取能量,但长时间的封闭所带来的孤独感与惯性却让积攒起来的能量快速耗尽,尽管时间变多了,工作之外的时间却反倒更难好好利用了,焦虑随之而来。
尔后,随着踏入恋爱,生活的重心渐渐偏移,也不再把自己关在家里,常常往返于北京,工作之外多了更多生活实感,会接送学姐上下班,天气好时会在公园闲逛,回家一起做饭,吃饭时看一些感兴趣的剧或是纪录片。我的工作与生活似乎因为远程办公而实现了某种平衡,似乎美好得令人艳羡。
但这同样存在问题,正如许多人将工作的情绪代入恋爱或婚姻中所引发的矛盾,远程办公却更容易将生活的状态惯性代入工作。然而,生活总是起起伏伏,工作作为一项团队协作的社会化活动却需要更多稳定的状态与产出。我前些日子就常常陷入这样的困境中,生活短时间内有了许多变动,或许需要更多时间去调节与思考,工作也伴随着项目上线而逐渐忙碌,我试图同时做好两边,却在恶性循环中产生了自我怀疑。
时至今日其实我还是没能找到一个完美的解决方案或是平衡点,但逐渐开始面对和承认自己的精力有限,工作中做不好的事会愿意去寻求帮助,下班后或是周末也会给自己远离电脑单纯放松的时刻;周四有时候会去参加良渚的疯狂星期四见到不同的人,平日里也和学姐约好有一些互不打扰的独处时光,各自去阅读、学习或做自己喜欢的事。
也渐渐发现需要给自己和生活设置边界感,没有了上下班的打卡或是通勤也需要有起床的时间,把时间划分为一个个区间来安排任务,也需要给一天的工作一个仪式感的信号,例如回家吃一顿饭或是出门逛个超市。
我依然在探索远程办公给我带来的生活方式的改变,也仍然在适应于这种新的生活节奏,但这一年让我更多专注于自己的内心,生活和家不再是曾经那样工作完暂歇的冷冰冰的避难所,而是自我的延伸,也是一次次接近自我的尝试。
第二次搬家
时隔一年,又一次“搬家”回杭州,这次是由于学姐的工作调动,后续也会常驻在杭州,这次搬家似乎与之前很不同,更有了像是把一个家平移到另一个地方,迎接新的生活的仪式感,会断舍离很多不再需要的物品,会想尽办法在某个角落塞进曾经承载过记忆的酒杯或是小玩意。
我其实并不那么在意城市本身,对城市也没有太多归属感,甚至这次搬家于我而言不过也依然在熟悉的地方,流程也与去年差不多,却对这次搬家和后续的生活充满了更多期待,或许慢慢也理解了小王子中的这句话:
"It is the time you have wasted for your rose that makes your rose so important."
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 读库 2400,开始订阅读库,第 0 期的访谈录还挺有意思的。
收藏
- GitHub - xyhp915/logseq-fenced-code-plus
- GitHub - supabase/index_advisor
- EpubKit
- 两个月 $12000 ARR 实践之路 – 硬地骇客
- Haye AI - In-context AI assistant for macOS
- Electron
- electron-vite | Next Generation Electron Build Tooling
文章
- 一个县城高中生,被困在小红书的平行世界里-虎嗅网
- 如何基于 Telegram Channel 快速创建链上内容分享社区?
- 我们生活在差异里 | Frost's Blog
- 虚假的自托管爱好者
- 拒看新闻的生活艺术
- 何一致美国法官信件全文:一个更真实的赵长鹏是怎样的?
- 给自己人生二次毕业的思考
- Useful Personal Rules
- 在 Electron 中使用 SQLite 的最好方式
- Inter-Process Communication
- I'm giving up — on open source
视频
- 【硬件科普】NAS 究竟是什么东西?你需要一台 NAS 吗?
- 小白成神之路,网络知识看这一期足矣!软路由 桥接 端口转发 旁路由 单臂路由 IPv4 IPv6 DDNS
- vlog #51 | 日常学习与治愈碎片 📷 |持续学习英语|op stack 学习中|阅读《福格行为模型》|珠海的春天与大海
- Node.js: The Documentary | An origin story
- 如何选择你的“人生镜头”?| SEL1625G
- 北海道独自旅行 VLOG❄️|属于冬天的白色浪漫,发现不一样的札幌~
- 「黑貓」這會是最合適 Mac 的便攜屏嗎?JSAUX FlipGo 便攜雙屏評測體驗
- 一个人游北海道|漫步小樽&函馆的小众之旅~❄️
- VLOG #52|程序员下班后的日常学习记录|工作累了就去林子看看书吧|持续英语学习|OP Stack 学习中|《福格行为模型》|在林子里露营的慢生活
- Backend Developer Roadmap - Everything you need to know in 2023
- 专治嘴硬!挑战世界上最恐怖的鬼屋!
- vlog #53|程序员下班后的日常学习记录|工作再忙,也要好好充电呀|学习各种 DEBUG 工具|快看完《福格行为模型》啦,这书贼棒|英语持续学习中
播客
电影
- 沙丘,诗意而富有哲理的设定,原始宗教+科技文明+封建帝制的世界观很惊艳,主角的梦境和情感、预言和狂热的迷信交织推动着剧情发展,有一种娓娓道来的宏大叙事感。
- 沙丘 2,接连看了一二部,总期待这一部能够更多呈现世界观设定与剧情的内核,但看到的更多是酣畅的对决、对主角的考验以及战争,感觉更侧重在个人的变化成长,却少了些叙事,打算去补一下原著了。
剧集
周报 #57 - 生活在别处(巴厘岛之行)
前言
本篇是对 2024-04-01
到 2024-04-10
这周生活的记录与思考。
下笔的当下其实已经是五月底了,不知不觉又拖了两个月之久,其实并不只是周报的更新,最近发生的事情之多似乎让我的整个生活都有些难以抽离,但其实在连我自己都未发觉的时候,周报这一记录生活的载体已经是自己的一部分了,失去记录的这部分时间,常常也会觉得失去了自我,于是还是打算找回来。
不同于往常的总集篇,我这次会按照时间顺序来记录,虽然由于时间跨度过长难免失了细节,但回忆的过程总还是能抓住些,这是第一篇,努力追进度中。
生活在别处
三月的后半月忙于早起练车和连续科二科三的考试,疲惫却有终有收获,在 4.3 拿到了我的驾照。前些篇章也讲过我对学车并无好感甚至有些抵触,但真正完成了这件事后依然感受到莫名的成就感,后续在杭州的出行也确实受益其中。
紧接着就是清明节,也是计划许久的巴厘岛之行。
米兰昆德拉有一本书叫《生活在别处》,书名很贴切地描述了我当时的心情。其实自己不算热爱旅行,对于蓝天白云海岛沙滩也没有什么特别的执念或是向往,只是在生活的各种压力接踵而至之时,似乎别处的生活能给自己带来一丝喘息,既是逃离,也是追寻。
度假与旅行
北京飞巴厘岛要在菲律宾中转,总航程接近 10 个小时,在 kindle 上看完了《红与黑》后睡了大半程,醒来时已近黄昏,看向窗外,夕阳与云层相叠,心情似乎也随之明朗了许多。
疲累之下抵达酒店已经是凌晨了,起初因为烦闷的空气和随处可见的蚊虫并没有带来多好的第一印象,但一切情绪都在第二天早上出门看到如画一样的海滩时都烟消云散。前两天的行程多在沙滩和泳池,典型的度假模式,却在第二天穿着巴厘岛本地 T 恤踩着凉拖时,才真正开始自己的旅行。
和学姐有闲谈过度假和旅行的差异,像之前我们去秦皇岛阿那亚过纪念日时,更多在意的是两人处于一个环境中,重要的是放松的心境,无关地点本身,后续去北京或是南京汤山泡汤泉也是如此;而旅行不同,所选择的地方、食物、文化包括见到的人都是重要的一部分,我更享受的是融入和感受,一餐并不可口的饭菜、路边难闻的摩托车尾气或是和街边摆摊小贩的讨价还价都会是记忆的一部分。
说来神奇,一路见过了壮观的瀑布、遍布漫山的猴子、神圣的寺庙仪式和许多许多,印象最深的却是快要离开时在库塔的一家小店里松弛地躺在地上的店家,我们在挑选手链时他依然躺着,直到结账时才象征性地讨了下价,又继续躺着了。
似乎从大学某个时刻开始,我一直忙碌于各种事,学业、社团、工作,似乎那时开始就没有真正的放空时刻,当然,发呆、懒惰或是不务正业刷剧常有,我指的是能够 think nothing 的时刻。
即使是明知不会用到,每次出行也都会背上电脑,也如网上传的各种梗那样在朋友婚礼现场、游乐园、餐厅、路边垃圾桶上开过会、写过代码,似乎这是我认可甚至有些享受其中的生活方式,而在库塔,我似乎看到了隔着几千公里外的异国另外一种生活方式,这种生活并不属于我,也非我心之所向,却能够感受到这种“什么都不做”的轻松与自在。
旅行剪影
其余便是些常规的旅行记录,巴厘岛风景确实不错,但美食实在是一般,基本上在酒店吃的自助餐;在 Nusa Dua 休整了两天后去了库塔,初次体验了冲浪,虽然只是浅海滩,在海浪里栽了好多次,也喝了很多海水,但在一个多小时的练习后已经能够冲上几个小浪了;在 klook 上雇了当地导游,带我们去了瀑布、圣泉寺,还在猴林里被猴子打了眼镜。除了冲浪外算是中规中矩的一次游玩,拍了些视频,或许 vlog 第二弹有些素材了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- A Philosophy of Software Design,软件设计哲学。
收藏
文章
- While Everyone Is Distracted by Social Media, Successful People Double Down on an Underrated Skill
- How Heptabase’s Founder Use Heptabase for Learning, Research, Planning, and Writing
- Bringing Python to Workers using Pyodide and WebAssembly
- 2024 第一季度书影音总结
- 理想的生活
视频
周报 #56 - 面基 Randy 与考科目二
前言
本篇是对 2024-03-25
到 2024-03-31
这周生活的记录与思考。
这周最开心的事就是见到了 Randy,追星成功,聊得很开心;因为不想影响工作而连续四五天 5 点多起床出发去驾校练实车,痛苦但一次过了科目二,不亏;继续健身运动,整体身体状况还不错;筹备节后搬家回杭州的事宜,感觉可以更多参加疯狂星期四了;还有很多有意思的事。
面基 Randy
之前好像有看到过一篇文章说,如果你喜欢一篇文章、一个开源产品或是什么,不要吝于言辞去表达自己的感谢和想法,也许仅仅是一句话就会对作者产生莫大的鼓励,所以其实我还挺喜欢和珍惜能够与屏幕对面的人面对面沟通的机会的。
而在许久之前看到 Randy 在推上发了一条要来北京,可以找他约咖啡的推文,上次他去良渚玉鸟集疯狂星期四的时候我刚好不在杭州,一直很遗憾,但真的有了和偶像面对面的时候,却又有些犹疑,既有初次见面的紧张感,又担心没什么话可以聊而浪费了他的时间。
我初次了解到 Randy 大概是 21 年,是在 Frost 写的「自建、免费、开源的评论系统解决方案」一文结尾提到了这一句:
最后也推荐一下作者的博客,内容质量高,非常启发思考。
当时初入技术领域,不认识什么开发者,对开源也没什么具体的概念,只是好奇这样一个小众精品的评论系统背后是一个怎样的人,于是点进去了。
不知不觉就看完了所有的文章,可以说他符合了当时的我对即将成为的程序员这一群体的所有期待。
他有技术理想和创造力,能够通过技术实现自己想做的事却又不拘于技术;对于生活有自己的见解和追求,代码之外有更多自己的兴趣爱好;乐于分享自己的思考,文字有真诚而具有感染力;不囿于世俗标准和所谓光环,本科退学、大厂裸辞。
而彼时的我还未从香港毕业,即将开始求职面试,对即将到来的技术生涯期待却又迷茫,既担心自己是否能够在这条未知的路走下去,又担心自己会不会在繁重的工作下失去创造力和技术热情。可以说他让我看到了未来自己想成为的样子与可能性,也让我真正开始思考开源、分享和创造的真谛。
而之后的我用了他的 Cusdis 评论系统,在他招募 v2 团队的时候也参与了一些微小的开发,第一次有了私聊沟通,得到了一些 code review 和代码指导;跟着他的视频通过 Logseq 搭建了自己的个人项目/知识管理系统;在他发布 notepal、epubkit 的时候都抢先体验和报一些小 bug;直到这次鼓起勇气去约见面。
见面之前想挑选一个礼物作为对他这一路以来对我的启发和帮助的感谢,最后选了哈利·波特分院帽的一款乐高和毛姆的一本「阅读是一座随身携带的避难所」小书。
对于刚踏入代码这一“魔法”世界的我来说,前方有着无数的未知和选择,而他就像分院帽一样,让我听从内心的声音,坚定地选择了自己的路。
见面后开心地聊了三个多小时。听到说他也常看我的周报,惊讶而欣喜;了解了他微软离职后的生活状态与所思所想,咨询了我对于工作规划、发展方向的一些困惑,碰撞了一些关于独立博客、前端学习、自媒体的一些想法,兴奋地计划了一些有意思的事,还有很多很多。
三年前刚点开 Randy 博客主页的我一定不会想到有一天能和他在北京的一家咖啡厅里面对面畅谈,追星成功的喜悦之余,也感慨自己一路走来的起伏与变化,一切似乎都值得了。
考科目二
大四的时候曾在大学附近的一个驾校学过一段时间车,也考完了科目二,但是后续因为毕业、去香港读书和疫情等种种原因,一直拖到过期了。而当时烈日下练车的不好体验让我对学车这件事一直没什么热情,甚至还有些抵触。直到今年才下定决心开始。
年前考完了科目一后又拖到了 3 月中旬才开始练车。报名了周四上午的科目二考试,经过了四次 VR 模拟练车后,这周连着三天五点多起床坐班车去驾校实车练习,早起的痛苦和飘忽不定的点位让焦虑在周三达到了峰值,抱着随缘的心态参加了一早的考试,但是满分一次通过了,开心!!!毕业已经有两年多了,感觉很久没体会过的“考试”所带来的压力与成就感在考驾照上倒是找回来了。
不过由于上午学车,下午赶工作,第二天还得早起的魔鬼安排,在输入输出上本周有些难以顾及,希望下周的科三能顺利通过吧!
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
收藏
文章
视频
剧集
- 三体 第一季,我不算是三体的原著党,之前看腾讯出的国内版本观感上也没什么怨言,但依然对奈飞版本有挺高的期待,刚出来就花了几天刷完了,整体来说画面、剧情和节奏都还可以,但也没看到什么亮点,算是合格的会让人期待第二季的改编吧。
音乐
- Merry Christmas Mr. Lawrence by Ryuichi Sakamoto
周报 #55 - 油画体验、博客系统升级与对 self-hosting 的思考
前言
本篇是对 2024-03-17
到 2024-03-24
这周生活的记录与思考。
这周重拾了很多工作学习的热情,把 TODO 里列了很久的博客评论系统和数据统计系统迁移做完了,有种整理规置了书桌的舒心感;周末第一次体验了油画,给自己画了一个新头像,成就感满满;恢复了健身;继续学车并报考了科目二;还有很多有意思的事。
油画体验与新头像
我和学姐性格和喜好迥异,她有许多我不曾涉足的兴趣爱好,而我着迷的似乎往往也是她未知的领域,于是我们前段时间有立一些 flag 说带对方体验自己的爱好/技能,我定的是双拼和编程这两项,目前双拼已经卓有成效;她则是在这周带我去上了一节油画课。
我对画画其实确实是零基础,也从不觉得自己和这些艺术搭边的爱好有什么关联,只是好奇于究竟是怎样的吸引力能促使她常常在素描或是油画画室坐上大半个下午打磨着一些小细节,期待之余还有些紧张。
按理说初学者不太会从人像这样的复杂主题开始,只是想要换一个新头像,画室的老师也很 nice 地愿意辅导,选了一张以“头”为主的照片就开始了,画轮廓、调色、上色、根据光线和位置加细节,一切比想象得更加有趣,几种简单的颜色组合能够幻化出很多的层次,创造本身也如同魔术一样令人心驰神往。
一个下午的成果如图,笔触生涩,却是我用自己的画笔创造出来的作品,也有着与众不同的意义,换了全平台的头像。
博客系统升级
Cusdis -> Remark42
之前写过一篇「轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)」,有讲过我博客使用的是自部署的 Randy 开源的 Cusdis 评论系统,从 2021 年中就开始使用了,到现在整整三年了,除了最开始的时候因为 Heroku、Railway 相继收费而折腾了一下部署平台外,一直都稳稳地运行着。
不过我在使用中也有遇到一些问题:
- 大概是由于微信内置浏览器做了一些魔改,在博客从微信聊天/对话打开是看不到评论组件的
- 尽管可以输入邮箱,但并不支持订阅评论回复
- 需要管理员手动审核评论,但评论提醒的 TG Bot 时常失效而错过评论
另外因为其核心功能已经许久没有什么更新,比起其他较为成熟的评论系统也显得有些简陋,不过由于我也秉持着够用即可的原则,一直没动迁移/更新的念头,只有在其中一阵子在学前端时还参与了一些 Cusdis V2 版本的开发,不过也没做多久开发小群就不再活跃了。
而最近几个月因为博客几乎没怎么更新,也没收到评论 TG Bot 的提醒,一直以为是没人评论,直到最近数据库托管的 Supabase 平台需要更换一下 Connection String,我才发现原来陆陆续续有几十条评论,有的是关心和鼓励,也有的是咨询一些技术问题,但看到的时候也已经是一两个月后了,还挺不好意思的。
再加上更换数据库 URI 时 Vercel 部署一直报错,于是下定决心从 Cusdis 迁移,调研了一圈后选择了和 reorx 在「更换博客评论系统」一文中最后选定的 Remark42。
单纯就配置选项来说比起 cusdis 还是丰富了不少,目前配置了常用的几种社交账号登录(GitHub、Twitter、Telegram、邮箱)、可以匿名评论、支持邮件订阅回复提醒并且也设置了 TG bot 提醒,并且部署在 fly.io,go 单二进制 + 数据库单文件,很舒服的解决方案。
而因为之前积攒了很多评论数据,因为 Cusdis 使用的是 pg 而 Remark42 使用的是 boltdb 单文件数据库,后者不支持远程连接,没法直接 sql 语句写入,只能先联表查询导出需要字段的 json 文件,再手动执行 Migrator 脚本(而因为官方只支持 wordpress、disqus 和 commento 这三个,于是还得手动实现转换逻辑),幸好是熟悉的 go 写的,花了一晚上终于肝完了 pr!!!
迁移完才发现这些年一共积攒了 438 条评论,自己都惊到了,都回来了!!!
Umami -> GoatCounter
本着既然连评论系统都换了的心态,干脆把一直也是个心结的数据统计系统也更新了。
Umami 其实一直用得倒没出现什么问题,直到我更换时尽职地跑了整整一年半,只不过可能因为自己用得比较早,在一次大版本更新的时候数据库 Migration 脚本出现了不兼容的字段更新,其实有点不理解这样量级的开源项目为什么会出现这样的问题,也看到 issue 中有很多其他用户有同样的诉求,但最终并没有给出一个比较好的解决方案。
但是又由于自己已经运行了大半年,舍不得之前的数据,于是一直拖着,直到现在还停留在自己 fork 的一个旧版本,虽然倒也没有对新版本有那么多功能上的诉求,只是有点半强迫症地感觉不舒服,但也就拖着。
于是趁着这次博客大施工,就顺便换为了 goatcounter,同样是 go 单二进制 + sqlite 数据库单文件部署在 fly.io,又是很舒服的配置。
有意思的是,因为 goatcounter 的作者很有坚持,觉得这样单文件的应用容器化反而会增加更多维护成本,所以不提供官方镜像,不过自己在 vps 或者 serverless 平台部署有个镜像还是方便一些,所以用 Github Actions 做了一个 CI 每天拉取最新代码、构建镜像和上传 Docker Hub,有需要的可以使用,对应的 Dockerfile 和 Docker Compose 文件也可以参照这个 PR。
docker pull pseudoyu/goatcounter
这半年的周报输出频率堪忧,除了一篇关于信息管理系统的长文外也没有什么满意的输出,所以决定之前的访问数据就不作迁移了(复杂度应该也高很多),感谢每一位点进我博客网站的赛博朋友们,截图以作留念。
最近感觉折腾这些软硬件/服务配置的心情回归了,也有了很多博客想法,新的数据就当作一个新的开始了 🫡
更换的一个最大动力还是 goatcounter 的界面跟我的古早博客主题一样完美卡在我的审美点上,感觉我能一直盯着这个界面看 🤩 无法抗拒这种 Retro Internet 设计。
关于 self-hosting 的一些思考
其实我对于 vps 和 serverless 平台经历过许多次的折腾和反复,算不上心得,但确实是深度体验后的经验之谈了。
曾经的我算是 serverless 的拥趸,当时几乎是能在 Vercel/Railway 等 PaaS 平台部署的绝不自己搭建,能在几乎没有运维成本的前提下还能获得媲美大平台的稳定性,也确实践行了把自己的各项服务都 serverless 化了,确实经历过很长一段时间的省心省力。
然而随着经历过 HeroKu 和 Railway 相继中途改变收费模式,以及 n8n 在 Railway 上跑出单月十几刀的账单时,才也逐渐发现一些弊端,serverless 确实是减少了对于自己运维服务器的要求,但相对应地也要受制于这些平台的规则。
收费模式其实只是一部分缘由,比起自己租赁一台配置不错的服务器,成本倒是还好,只是似乎又将自己的服务和数据绑定在一个中心化平台了,会有一种任人宰割的不安全感;而当想要迁移到另一个平台时,往往平台不会给出较为方便的解决方案,自己去折腾的操作复杂度比起服务器之间 docker-compose 文件外加挂载 volume 直接复制要高不少。
因此也把自己的很多服务都放在服务器上,稳定地跑了 430+ 天。
而前几天和 reorx 聊到服务部署方案时,他提到了现在会优先考虑 sqlite 或其他同类文件数据库的 self-host 方案,能够减少许多维护和迁移的成本和复杂度。
后来我想了想,其实不管是在 vps 还是 serverless 平台,本质上都是 self-hosting 的选择,其实更多需要的是思考部署的服务依赖本身,如我之前 Cusdis、Umami 很多不稳定性来源其实是在服务端在 Vercel、Netlify 这样的 PaaS,而数据却托管在 Supabase 这样的 DaaS,一个自用的服务同时依赖两个平台,任何一方出了问题都会导致服务不可用,vps 所做的其实也不过是把这样的风险变为单点自己维护而已。
于是又久违地开始折腾,把 Remakr42 与 GoatCounter 都部署在了 fly.io 上,因为单二进制+文件数据库,性能消耗完全在 free plan 的范围内;而把 RSSHub、n8n、图床等相对依赖更重且需要对外提供服务的应用还是继续更集中地放在 vps 上;而把一些性能或存储消耗较高的服务则是跑在 Home Server 上并且通过内网穿透方案来暴露。
其他
把 Mac 从各个来源安装的软件都统一了一下,原则就是能 brew cask 安装的都重新安装,之前命令行需要自行搜索没什么感觉,现在有了 GUI 查看后发现确实软件源比想象得丰富很多,这种方式便于管理/迁移且相对能保障软件的来源安全性 🫡
从 RapidAPI 切换到一个新的 API 调试工具 Bruno,预购了它的 Golden Edition,目前使用起来体验很不错。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
收藏
文章
视频
剧集
- 三体 第一季,在看。
周报 #54 - 漂流计划、钱包被盗与 Home Server
前言
本篇是对 2024-03-01
到 2024-03-16
这两周生活的记录与思考。
如上篇周报所述,我开启了一段漂流计划,最后以「杭州 -> 上海 -> 湖州 -> 南京 -> 北京」这样近两周的旅程告一段落,几乎都处在江浙,没什么特殊的风景,更多还是关于人和事;由于主钱包被盗且没找出原因,重装了两台主力电脑,也刚好重新整理开发环境配置;把家里的 Mac Studio 作为 7/24 的 Home Server,跑了 Home Assistant 等常驻应用控制智能家居,折腾却也有趣;工作上组里忙了许久的 Alpha 主网上线,久违的兴奋感;还有很多有意思的事。
漂流计划
年后开启的漂流计划第一站是上海,这些年前前后后去过大概也有几十次了,有过一两个月实习的长居也有偶尔的短暂停留,通常都是有事要办或是有人要见,真正“生活”可能还是少有的机会,没选什么繁华的区域,也没安排什么特别出行的计划,只是选了个离朋友还算接近的地点定了一周的民宿,就又回归了正常工作学习的节奏。
偶尔下楼到周遭的商圈觅食,到了周末也和许久未见的大学舍友约饭,剩余时间依旧宅在酒店里工作,顺便还刷完了 mark 已久的「西部世界」,很巧的是刚好有个同事住在离我一两公里的地方,于是也有了一次小小的三人团建。
接下来去了趟湖州,在朋友 Xiao 家里住了一周。和他的相逢是源自一年前的某天他在各地巡游溜达的时候发了一条在杭州的朋友可以约见面的推文,彼时的我刚回杭,对未来的生活充满着许多的未知和期待,鼓起勇气约了一次晚饭和西湖边漫步,虽然是第一次见面并且也没什么交集,却真诚而信任。
后来他搬到了湖州,我 8 月曾约了一次相见却因为种种缘由而没能成行,有些遗憾,于是趁着这次漂流赴约。在莫干山走野路上山,在安吉云上草原的悬崖上漫步,也去了两个数字游民公社参观,对他们的社区氛围很是心动。感觉今年的我似乎找到了一种久违的生活上的松弛感,会更愿意去见一些人和体验一些事,生活也不仅仅是工作和学习,人和与人有关的一切都对我产生了更多的吸引力,也由于和许多“网友”有了更深的链接,自己线上和线下的关系也变得逐渐模糊。
得益于公司每周三的「Work Together 1 Hour」,一位同事推荐了汤山的温泉和莫干山的森林书屋,于是和学姐相约在南京会和,度过了惬意的一周,也开始探索一些周末行的去处,生活变得更加具体。
钱包被盗与设备重装
最近把自己的笔记本和家里的台式都重装了一下系统,起因是自己的主钱包不幸被盗了。看链上记录大概是年初一的中午,钱包里所有资产(包括一些参与开源项目的空投)都被转为 ETH 和 BNB 后转走了,钱包里还有自己的 ens 和一些 NFT(不过黑客看不上所以还留着就是了),整体的金钱损失不大,但因为找不出是哪里泄漏的私钥,不得不将所有设备环境都重装一遍,可以说是个大工程。
因为都是 macOS 系统,所以系统设置和软件方面倒是轻车熟路,主体还是参照我的个人工具箱项目「GitHub - yu-tools」,但在这个基础上做了不少的减法,更多只保留了刚需的一些,发现把 Rewind 卸载后我的 MacBook Pro 续航恢复了很多,出门几乎可以不用带充电器了。
另外也正好趁机整理了自己的软件安装来源、开发环境管理和命令行配置等,正好尝试了朋友公司开发的「x-cmd」项目。
配合 ohmyzsh 把自己的命令行配置简化到了短短的十几行,后面都可以通过 x env
等命令来管理各种环境和命令行工具,很易用。
最后使用 x env
来管理了自己的 Go、Node、Python 开发环境,免去了各种需要自己安装 nvm、设置环境变量等步骤,也体验到了企业级客户支持(指遇到问题直接 tg 轰炸朋友来解决 🤣),后面也会成为自己的装机标配,还在持续深度体验中。
另外就是把 ssh key、GPG 签名等在两台设备之间统一管理了,配合 Elpass 进行密码管理和服务器自动登录,获得了通勤和宅家无缝切换的体验。
Home Server & Home Assistant
大概是年纪慢慢上来了,终究逃不过路由器、充电头、NAS 这三大魔咒。路由器用了去年从 STRRL 哥哥那淘来的 Asus AC86U,刷了新版梅林固件,很够用,就没再折腾软路由什么的了;充电头/充电器则是在体验了闪极全透明充电宝、100W 氮化镓充电头和硬糖工厂小电拼(现在有点不敢用了)后也退烧了。
终于还是把魔爪伸向了 NAS,在跟我们组可靠的运维 & NAS 深度 DIY 玩家 Ares 聊了好一阵子,决定先把家里的 Mac Studio 作为一个 Home Server。
首先做的是把家里的智能设备都连上 Home Assistant,但是由于是 Apple M1 芯片,没有现成的官方解决方案,在折腾了好一番后,最终参照「Run Home Assistant on macOS With a Debian 12 Virtual Machine」这一篇文章使用 UTM 安装了一个 Arm 架构的 Debian 的虚拟机,在里面跑了满血版 Home Assistant,并且用 frp 把接口映射到了公网,最后使用 iOS app 以及网页版本直接进行操作,目前的方案可能因为虚拟机网络模式问题,目前没办法通过 HomeKit Bridge 添加到 Apple 的家庭 App 中,不过能够把所有的小米、Yeelight 和小佩宠物设备链接起来,目前阶段也已经够用了。
另外作为一个 Home Server,保持了 7/24 小时常驻,在噪音和耗电上都几乎无感,开启了 smb 文件共享、ssh 远程登录和远程 vnc 桌面控制,并且通过内网穿透保障我在外面也能够访问到家里的设备。
为了保障安全性和稳定性,我同时采用了三种不同的内网穿透方案。
- frp
- Surge Ponte
- Cloudflare Argo Tunnel
第一种方案我已经使用了近两年,在「基于 frp 内网穿透的瘦客户端开发工作流」一文中有很详细的介绍,要求有个公网服务器,但配置简单且稳定,目前我只是保留了 ssh 与 Home Assistant 的端口。
第二种方案则是通过 Surge 软件在 macOS/iOS 设备之间便捷地实现内网穿透,可以在「Surge Ponte Guide」看到其详细介绍,需要有支持 UDP 的代理线路,除此之外几乎开箱即用,我用其来访问家里 Mac Studio 的文件和本地的一些服务,也可以在外部直接访问配置家里内网路由器等,更多是自用。
而第三种方案则是最近看到「使用 Cloudflare Argo Tunnel(cloudflared) 来加速和保护你的网站」文章时才新加的,之前都是通过 cloudflared 命令行工具手动配置的,多少还是有些麻烦于是没实践,最近 Cloudflare 把它集成到了 Zero Trust 中,几乎可以在界面完成各种操作配置,我用来在家里服务器运行一些需要对外暴露的公网服务,例如前几天使用 ollama 跑了一个 codellama:70b,然后再通过 ChatKit 直接访问,体验很不错,就是生成得太慢了,所以也就尝尝鲜。
刚好最近我们厂的Alpha 主网上线了,打算等后面公益节点的时候用 Home Server 自己跑一个,现在跑不起 🤣。
VR 学车
因为即将要有一些自驾的需求,又重新报名了驾校开始学习,这次的驾校有 VR 练车设施,没有自己想象得那么抗拒了。
其他
其他似乎没有太多有意思的事,处在忙碌和想做的事做不完而焦虑的反复中,不过一切也都在慢慢变好。
GitHub 给了 Copilot 的开源免费 License,可以继续白嫖代码补全和 Copilot Chat,配合上 Claude 3 Sonnet 和在「burn.hair」中白嫖的 GPT4 Token,已经能够满足我所有的代码和各类需求。
哦对,还约到了我的偶像程序员「Randy」月底在北京见面!!!
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- The Monk and the Philosopher,关于宗教和哲学的一些思考,聊到所以刚开始看一点。
- 红与黑,从一个视频看到的讲解,关于于连的自尊和因此表现出来的傲慢的描述印象很深,正在看。
收藏
- Million Lint is in public beta | Million.js
- Discover Daily by Perplexity
- Ehco Relay
- RSS3 Alpha Mainnet
- Velja — Sindre Sorhus
文章
- 幸福的积分 – 虹线
- 我为什么喜欢 road trip | 椒盐豆豉
- Software Has Eaten The Media
- 无风险年化 360%?小白也能懂的 Crypto 套利 - TARESKY
- How NAT traversal works
- 一个六岁开源项目的崩溃与新生 - DIYgod
- 用 Notion Calendar 打造高效 daily quest 系统 | 椒盐豆豉
- Run Home Assistant on macOS with a Debian 12 Virtual Machine – Siytek
- 使用 Cloudflare Argo Tunnel(cloudflared) 来加速和保护你的网站 | Nova Kwok's Awesome Blog
视频
电影
- 怪物,确实符合是枝裕和想要去描述的主题,但是可能加上了太多隐喻的部分,反倒是没能很传达到,也感受到剧情和情绪节奏的割裂。
- 周处除三害,台湾拍犯罪倒是确实是别有风味,主题和画面也确实很敢,不过更多还是视觉的爽片吧,对人物人格的呈现和变化展现得有些仓促。
- 西部世界,还是更喜欢第一二季的乐园 part,包括威廉的变化,后两季可能也是由于想要展现太过宏大的意识觉醒和自我选择,反倒是有些过家家。
剧集
- 舞伎家的料理人,在看。
音乐
- Photograph by Ed Sheeran
- 温和表面 by 趙登凱
- Different Lives by Fly By Midnight
- After the Love Has Gone by Earth, Wind & Fire
- IN THIS WORLD - feat. 坂本龍一 Vocal : 満島ひかり by Mondo Grosso
周报 #53 - 空白的三个月、生活漂流与春节
前言
本篇是对 2023-12-04
到 2024-02-29
这数月生活的记录与思考。
过去的几个月发生了很多事,各个维度的都是,让本意图记录日常生活和个人想法的周报变得有些难以起笔,似乎都不是一期两期能概述的,同时心情也做不到轻描淡写地仅是记录一些流水账而绝口不提感受。
于是,给自己放了个长长的假,长到中途屡次打开文档思绪都有些空白,长到开始怀疑自己是否还有这样的能力去做一个“周报”博主。
我总是说,我的文字源于我的生活,当生活一团糟的时候,我是没办法传达自己的感受的;却也常常惰于去梳理和面对生活所带来的起伏,在一个个周末的夜晚这样说服自己,1 月吧、年前一定、年后吧、不然元宵也不错,直到闰年的 2 月 29 日这样其实跟我毫无关联却有着莫名仪式感的日子,终于下定决心重启。
其实自己从来不缺分享欲,只是缺一个重新开始的勇气。
“空白”的三个月
犹豫了很久,还是决定按照时间和心绪的变化开始回溯,讲讲这过去的三个月。
在「周报 #52 - 自谦型人格与感情的另一个视角」这篇中我有提到说,我和学姐是很不一样的人,当然,文中更多描述的是这样的差异所带来的良性的一面,殊不知,思考和行为习惯上的不同带来了不少好奇心与互相欣赏的同时,也需要有这样的觉悟去承受个性与价值观的差异所带来的代价。
而我,或许早已意识到了,但放任自己沉浸在更具体的幸福生活中,有些嫌隙已经悄然滋生了。具体的事情在当下或是情绪平复之后总是能辩出个对错,但无可避免地有一些感情在其中流逝。我常常觉得自己是个幸运的人,不论是在感情还是其他的关系其实我总是能够得到许多的包容,一边开玩笑说着“我不配”的同时其实也习以为常。直到矛盾爆发时,才意识到并没有什么幸运,沉默和包容其实更多也是我所收到的爱所带来的层层护甲,也终究会有破裂的时刻。
于是经历了关系的结束、坦诚而尖锐的对话、物理/心理上的隔绝和重新相处/相爱,似乎短短的几个月,已经走过了一段很长的路,有泥泞,也有分叉,所幸的是依然有着对彼此的信任与爱,也依然决定携手共度前路。
生活漂流
比起之前大半年常常说的”调整生活状态“,这几个月更确切地其实在重新选择生活的方向与重心。退了杭州的固定住所,开始真正的“半游民”生活。在杭州时,常去良渚附近寻觅民宿住上几天,参加玉鸟集的一些活动;而年后的现在,也开启了一项漂流计划,沿着之前坐过无数次的杭州到北京的高铁路线,一站一站地感受不同城市的气息。
其实这个想法是起源于一次杭州到北京的高铁上,刚好望向窗外,路过了安徽的蚌埠,看到了这样的景致,惊艳。才意识到这个地名途径了几十次,也在一些网络梗上见过许多,却从未想过自己的生活会与之有什么交集,或许这辈子也不一定会驻足。
其实不仅是地方,人也是,有些朋友住得其实不远,一两个小时的行程,总是在聊天时说“有机会来找你玩”,却也止于言语。这种想法其实是由于人总是会笃信太多的来日方长,在某个时刻来临时才后悔。
去年平安夜,我有一位同事 Maggie 离世了,就交流频率来说肯定还是称不上挚友的,只是缘起一次工作闲聊中给我算了八字,也开启了很多个人的话题。聊到感情时有给我讲她之前在金融行业遇到的渣男;有很开心地跟我讲说明年要去浸会当讲师了,问我当时在香港上学的时候学校是怎么教 web3 的;会认真看完 polebug 跟我的访谈,说她以前也是英语专业的;有讲她之前在新浪财经做调查写深度财经报道时的卧底经历和新闻理想;还有很多很多。
当时得知消息时其实一直处在加谬在异乡人中所描述的那种麻木感,直到后来看到说她在 12.20 发了一条朋友圈说“我的 oura 提醒我,我竟然发烧了”,想到之前问她礼物的时候跟我提到过,去翻了记录,所有的情绪才一并涌上来,一下子对离去有了实感,是一个真实的常常带着欢笑的友人的离去。
经历了这段时间后,似乎生活的重量有了一些变化。
去同在北京相隔不过三四站地铁的高中哥们渐仔家做客,周末相约打了几次羽毛球,邀请他来家里吃饭;与毕业后就四散奔波、甚至想着或许都再难见到的几个大学舍友在各个城市相约见面,聊了这些年的种种;过年时和高中的朋友聚餐,年后也开始沿着「杭州 -> 上海 -> 湖州 -> 南京 -> ...」的路线一路漂流,见一见沿途的人和景。
春节
今年的过年尤其热闹,一半时间跟随学姐去了她的家乡内蒙,一半时间带着她来了杭州见了我的家人朋友,路途奔波、紧张却也奇妙。虽然说不出具体源于什么,但经过这一周后,似乎能够感受到我们之间的某种纽带变的更加紧密,相处也似乎多了一些松弛。
我一直觉得一个人是由 ta 的人格、思想与成长经历环境共同构成的,没办法陪对方一起经历过去,但去见对方珍惜的人或仅仅是走过的路,也都像是了解一个人的探索之旅,会带来更多信任与勇气,亦是爱的重要组成。
过年期间也刚好是情人节,学姐给我刻了一个名字的印章。
学习状态调整
有过一段时间的工作忙碌和生活状态低迷,再履行自己的学习计划的时候总觉得有些力不从心和注意力涣散,总是有些不在状态。再加上刚好看到了关于多邻国的一些采访,想着注册了一个,捡起我已经几年没碰过的第二外语德语(英语专业都需要选择另一门语言作为第二外语进行学习),所幸一些基础知识和底子还在,倒也是发现了很多乐趣。
经过了一阵子,也慢慢地更能沉下心来花几个小时去学一些新的东西了,也算是语言学习的一种“修身养性”吧,排行榜功能也很洞悉人性,我在午休的时候看到有人超了我的名次都会花点时间去刷回来。
其他
其实还发生了很多事,但是周期拉得太长一时不知道从何说起。
这几个月的工作很开心,从去年接近年底的时候我们组的核心项目完全开源和去中心化了,发展的路径也随着白皮书和各项规划逐渐清晰,常常开两三个小时的会讨论一些细节却也乐在其中,开源也带来了代码质量和规范的要求,有了很多成长。
剪了一个生活 vlog —— 「生活漫游指南 #01 | 圆明园写生 | 朝阳啤酒节 | 内蒙之行 | 阿那亚纪念日」,久违地找到了创作视频的乐趣,也是对生活另一种方式的留存和记录。
生活随着周报重新开始,感谢在此期间依然不断在我的博客中留言鼓励和关心我的朋友们,共勉。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- The Monk and the Philosopher,关于宗教和哲学的一些思考,聊到所以刚开始看一点。
- 红与黑,从一个视频看到的讲解,关于于连的自尊和因此表现出来的傲慢的描述印象很深,正在看。
播客
文章
- 来自酿酒专业的建议
- 外刊|姐弟恋:姐姐到底图弟弟啥
- Day 155
- 新一代前端发展的困境与破局 - Tw93
- 2023 年终总结: 和自己对话 | Randy's Blog
- 如何给 Hugo 博客添加热力图
- 9 years of Apple text editor solo dev
- 企业开源该选什么软件许可证?
- 技术解读以太坊铭文 ETHS:本质是金融炒作而非产品革新
- overview of generative AI animation techniques
- What We Got Right, What We Got Wrong
- A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding
- 如何优雅编译一个 Markdown 文档
- 简单易懂的 Telegram to xLog Shorts 机器人部署方案
- 哄哄模拟器的完整复盘,火了,但一度让我很发愁
- 2023 Letter
- Understanding Containerization by Recreating Docker
- Why SQL Hang for Exactly 940s? TCP and Async Rust!
- Twitter 对开源项目发起 DDoS 攻击
- 二十四岁,充满变化的一年
- 金融行业里的程序员到底在干什么 #57
- Implementing a High-Performance Arweave Bundle Parser
- 不是谁都能在跳海当一名打酒师丨晚点周末
- Warning of Account Suspension by Cloudflare
- Apple Vision Pro review: magic, until it’s not - The Verge
- Goodbye Dystopia
- Ordinal 铭文协议的原理与技术细节讨论
- Vision Pro 使用体验
- The Scary Thing About Automating Deploys
- Introducing Sora: OpenAI’s Groundbreaking Tool Transforms Text Into Instant Video Magic | by Alphatu
- 和帕鲁生活在一起的两周
- 我和书的结缘
- Nintendo sues Switch emulator Yuzu for ‘facilitating piracy at a colossal scale’ - The Verge
视频
- 〖FEDAY〗我的大前端世界观 - 黄玄 Hux
- study vlog #39 | 保持学习、思考与对生活的期待|React 学习中🤯|TEDTalks|看书《回忆、梦、思考》
- 一个公司到底谁说了算? | OpenAI 背后权力的游戏
- 民政局:恭喜二位成为合法夫妻!
- study vlog #40 | 感谢 GPT 教我写前端🍻|我是如何保持专注的|那些我做完的事情,都有什么共性|对于工作与退休的看法|TEDxTalks
- study vlog #41 | 事情或许没有想象的那么难,完成比完美更重要|远程工作是否会焦虑|TEDxTalks|阅读
- 2023: 在远程办公中重塑自我的一年|因为没发生什么大事,所以很短的|明年也继续加油咯|2023
- 结婚了,就不孤独了吗?
- 《红与黑》一种敏感的自尊和表演的傲慢让你感到内心矛盾
- Smart Contract Audits, Security, and DeFi FULL Course | Learn smart contract auditing
- 啊啊啊采访到新海诚了!
- ✉️ 给 24 年的自己写一封信|INFJ|不忘初心,方能始终
- 【年终忏悔录】要是我今年不太好,会不会让你开心一点!
- 生活漫游指南 #01 | 圆明园写生 | 朝阳啤酒节 | 内蒙之行 | 阿那亚纪念日
- 为了读评论,我涨到了 100W 粉丝
- 离家出走的女孩与卖诗的少女:他们说我是小姐,他们说我在要饭
- vlog #43|数字游民程序员的第一次旅居|青岛下篇
- 一口气了解美联储 | 全球权力最大的金融机构
- 10 部新动画! 物语系列 OFF&MONSTER Season 动画制作决定 PV【新房昭之/SHAFT/西尾维新】
- 【战场原黑仪】星空下的荡漾情话
- Heptabase Fundamentals 101: Sense-making with whiteboards
- Heptabase Fundamentals 102: Organizing topics with nested whiteboards and tab groups
- study vlog #44 | 程序员下班后的日常学习记录 | 新年伊始,多多充电|日常英语学习、运动、思考
- 8w 块的相机能拍成啥样? |哈苏 907X & CFV 100C 首发测评
- Pokemon Meets ARK... on the Steam Deck?! PALWORLD Performance Test
- 一个中年光棍过年回家的恐惧
- 奇迹还是抄袭?《幻兽帕鲁》爆火的背后。【游戏之外】
- 2023 年御三家都干了啥?年度吐槽。
- study vlog #45 | 稳定的内核是我持续学习的秘诀|程序员下班后的学习日常|TED|体验外教课|学习智能合约中|在老家等我妈投喂真快乐😄
- 器材贵的,便是好么?
- 研究生导师是老板,但学生又不受劳动法保护 | 1 月份网络热门话题鉴定
- 情人节 9.0|去 ta 的爱情
- 我拍到了世界上最大的鸟拉屎 |新西兰
- 台灣團隊闖入矽谷最強加速器!Heptabase 是如何做出世界級筆記軟體的?ft. 詹雨安 |EP054|強者我朋友|志祺七七 Podcast
- 和女朋友一起向已婚 UP 主学习如何谈恋爱!
- study vlog #46|学习是这枯燥生活的调味剂|春节零碎片段记录|TEDTalks|读《百年孤独》
- How to learn German? Resources, methods, and study plan
- 【Vision Pro 评测】深度体验 10 天后,我发现我误会了苹果
- 遇到 ta 的概率是六十亿分之一!| 日本 4k 旅拍
- study vlog #47 | 程序员下班后的日常学习|沉迷量子通信入门中|英语学习日常|小学日记本大公开
电影
- 人生果实,很早之前就收藏的记录片,讲的是一个曾是建筑师的老爷爷老奶奶的暮年故事,印象很深的是在拍摄期间老爷爷离世了,生前吃饭只爱用木勺而不是金属的,之后老奶奶一个人的生活中也总会在遗像前摆上一份饭,并放着木勺,很平实而温暖的叙述。
- 想见你,唯一要说的可能就是圆了剧版结局的遗憾了,剩下的不管是逻辑还是节奏都差远了。
- 涉过愤怒的海,就剧情来说有点垮,感觉有些刻意制造的冲突和有些做作的“疯狂”,但压抑、恐惧,病态的占有欲和无能的愤怒在电影结束许久都还萦绕着我,上一次有类似这样的感受还是《阳光普照》。
- 至暗时刻,适时的转场、紧凑的音乐和最喜欢的打字机的画面,一下子就能代入到那个绝望的时刻,也第一次对丘吉尔有了除了历史上的寥寥几笔以外的印象,再结合之前看过的《敦刻尔克》,能感受到历史中的真实与厚重感。
- 首尔之春,太多刻意呈现的英雄主义配合着平平的节奏感,有些失望,不过结局倒是有些意外,真实而大胆。
- 年会不能停!,本来想年前去电影院看,结果一直耽误着到了片源都出来了,标准喜剧,不过题材倒是挺新的,随着自己也工作了,竟然也能从搞笑中找到一些真实感。
- 过往人生,最近看的最喜欢的一部电影了,可以说几乎没什么剧情,但是画面、对话、心理描述都很美,联想到之前很喜欢的一部剧《Normal People》,尽管戏份不多,Arthur 真的是一个真实而温暖的人,很有吸引力的角色。
- 戏梦巴黎,补标。大概是大一的时候看的,叛逆、热情、纵欲、自由到极致,让当时(还算)年少的我形成了“浪漫”的最初定义。卢浮宫奔跑的那一幕让我现在还印象深刻。
剧集
- 繁花,对于胡歌的剧还是一直挺有期待的,他的气质也很符合宝总,除了结尾的部分略显草率外,是今年看的国产剧中印象比较深刻的了,布景和摄影也真的美!
- 街头绝味,小众的街头美食,总感觉东南亚的美食摊贩对自己的事业有着一种使命感和归属感,食物也有了灵魂。
- 古相思曲,因为是了解过的影视剪辑 up 导演的剧,间断着看了一下,不过可能期待过高,看了后觉得平平。
- 舞伎家的料理人,在看。
- 新闻女王,对新闻一直还挺感兴趣的看在热播就看了一下,节奏还挺眼前一亮的,但是最后几集主要角色的黑化和洗白都有缺少些驱动力,像是草草收尾。
- 做工的人,之前看过的《静寂工人》,一直对台湾的做工文化很着迷,被 B 站一个关于小杰的剪辑吸引(虽然其实主要讲的是他父辈们的事),几个小小的片段就能够感受到他的清澈、真诚与善良。看很多剧情的时候不由得为主角们着急。“怎么又被骗了”、“怎么那么傻”,包括到了结尾也气恼于“怎么好人没好报”,但这就是在面临苦难时自己本能的选择,是他们所认真生活的模样,即使天天想着赚钱,但在情义、善意面前依然会做出令人钦佩的选择。
- 重启人生, 很小清新的重生剧,虽然剧情从一开始就能猜得差不多,但日常的叙事和穿插的梗很密集,虽然算不上群像,但主要角色的描绘也很丰满。
- 西部世界, 一直很期待能有像是西部世界这样的接近“思考”的游戏,大概能想象到的是内置 gpt 的 minecraft 吧
动漫
- 孤独摇滚,可能刷到开始看的,确实很可爱但是一点也不孤独,明明只是被爱包围的 i 人罢了。
- 间谍过家家 第二季, 阿尼亚真是太可爱了!
- 咒术回战,感觉设定和剧情走向有点像《电锯人》,整体节奏还挺不错的!
音乐
- Jorge Regula by The Moldy Peaches
- Get Us Back Again by dazeychain
- Moments. by 8Bite
- ハッピーエンド by back number
- Eyes Closed by Ed Sheeran
周报 #52 - 自谦型人格与感情的另一个视角
前言
本篇是对 2023-11-30
到 2023-12-03
这一周生活的记录与思考。
周日的晚上在整理各种文件,打开文档时才发现前面好多期都是在工作日的夹缝中写的,恰好周五夜里回了杭州,独处的时间更多,想着“久违”地不要拖延周报到周中而太过仓促。
路途和周末把很多时间花在了看书和补番上,「葬送的芙莉莲」很上头,没忍住一下子刷了 13 集,意犹未尽,甚至还重新憧憬了剑与魔法的世界,想着补一下「火焰纹章 Engage」,然而 Switch 充电的时候去看了《神经症与人的成长》,结果一看就是一整天,直到周末结束也没打开 Switch;因为生病两周没怎么运动于是重新开始跑步,重新看了杭州的夜景,也想起了七八月那段时光,恍若隔世;还有很多有意思的事。
“自谦型”人格
自己常常能感觉到过去的一些经历给自己的性格所带来的别扭的部分,但是改变也无从下手。这周把「神经症与人的成长」看完了,其实自己算是比较少看这类书的,《自卑与超越》、《被讨厌的勇气》之前有看过,都属于看了确实找到了很多共鸣点却还是无能为力的。这本有一次被推荐到就加入了书单,周末想起来看,却被吸引住了,花了一天就看完了,在「自谦型」的很多描述中找到了自己。
我觉得最有价值的倒不是什么解决方案,心理疗愈本也不是一件仅靠几本书的理论就能见效的事,珍贵的是它对我自己很难去描述的行为与思维模式的形容贴切到让人惊叹。
自己最有感触的是这一段描写了,自诩不算一个太过优柔寡断的人,但常常在遇到一些爱(广义,并不局限于感情)与生活本身的一些节奏相冲突的时候似乎总是搞砸,像是一个一直正常运转的程序总会在特定条件下触发的必现的 bug,其实原因并不难找 —— 仅仅是我两者都想要,并没办法放弃任何一方。
我之前一直以为是完美主义作祟,让我期待着有一个两全的办法,后来逐渐发现其实并不完全是,而是两者矛盾本身让我产生了一种强烈的失序感,而我害怕这种失序感。在这样的时刻我并不会跟任一方去坦言我遇到的问题寻求帮助,而是更多自以为是地死磕着一个最优解,一个能够达到两者平衡的解决方案。然而事实其实往往难以两全,反而陷入因力所不能及而导致的自我批评与诋毁,然后引起更强烈的失序感。
似乎这样的描述有些抽象,恰好不久前就有一个例子。8 月底刚好收到了 muChiangmai mentor 计划的邀请,有一个机会去清迈待一阵子,条件就是完成一个 Solidity 的英文 Workshop,是一个挺有挑战却也有些期待的行程。
那时也正在和学姐计划第一次的旅行,于是想到说不然可以国庆一起去清迈,于是就提了一句。学姐对此很期待,早早开始看起了机票和攻略,买了好看的裙子,每隔一两天就有问我行程有没有确定,可以订什么时候的票,而那时的我一边忙于月底 ddl 所积攒的一些工作,一边又在考虑着 workshop 的主题,一直没给出很具体的安排。
直到有一天,学姐说了一句,“不知道是不是我的错觉,感觉你不是很想跟我一起去清迈”。我这才意识到,其实我并不是真的忙到连一眼机票时间都看不了,而是因为我对于“我应该确保和学姐的第一次旅行是完美的安排”和“我应该在清迈完成一次让我自己满意的英文 Workshop”这两个目标需要在短短的一周里同时达成感受到了强烈的矛盾感与焦虑感,无法决断,却又没有足够的信心在许多的未知中能够做好,然后开始对这样失序的自己感到沮丧,于是更加难以体察到学姐的情绪与感受。
而这样的时刻我并没有想到与学姐去沟通这个问题,而是与自己死磕,直至一切崩溃。其实在后来的沟通中,学姐表示她其实只是想在另一个国家留下两个人的足迹和记忆,并没有对于清迈或是旅行本身有过多的追求和执念,而我在自己的想象中给自己增加了太多的无形压力。
当然,这是生活而不是故事,后知后觉的醒悟并不一定会带来一个皆大欢喜的结果,如「周报 #48 - 内蒙之行、清迈游民、重启的周报与生活」所见,我们的旅行并没有成行,我独自去了清迈,甚至直到现在我们对于「一起旅行」这件事还很难当作是一个轻松的话题。
前几天我们聊到之前的一些想法的时候学姐给我发了她在那一天的日记片段,有这样一段话:
他需要秩序感,小的失序(偶尔淋雨、随性的日常)他可以接受,But 大的层面失序(旅程、关系)他会 overwhelm。
我应多给他时间,push 没用,他自己需想通,我在此时该干嘛干嘛。
—— 20230903
当我处在失序的时候,很庆幸的是她完全理解我在面对与克服的命题是什么,而非仅是情绪的互相宣泄,许久之后看到这一段话,依然有些感动。
感情的另一个视角
或许因为这是我的周报,大多的时候都是从我的视角去叙述一些事,前几天我们在聊天时我也第一次看到了当时学姐的一些日记片段,回头看很有意思。
今天他的微信很勤,给足我安全感,他总应该是喜欢我的.吧
和他相处很愉快,这一周竟像夏日梦一场,让整个 6 月都显得有些不真实了。
—— 20230618
这是我的那篇「In the Mood for Love」中所提到的去上海与北京的那一周,而彼时的我情愫暗生,却别扭而不知所措。
尽管上海之行仅有短短两天,变化却悄然在发生,情愫在心中肆意生长、蔓延。我们在外滩走走停停,猜着对面高楼或是游船上的字;明明有伞却在骤雨中淋着、笑着,像是长不大的两个人。
从虹桥各自离开的时候其实都明白再也没办法维持着原本那样的心照不宣,然而我却还是害怕了、退缩了、逃避了。
“害怕自己萌生的情感,既怕糟糕的自己没办法承载这样复杂的关系,又怕自己贪恋一时欢喜的口是心非。”
这大概就是我此前状态最真实的写照。
许久之后对照起来看很有意思,她坦率而真诚,我胆怯而挣扎,这样的两颗心在一点点靠近。直至:
OMG!我俩在一起了,爱情来得太快就像龙卷风。顺其自然吧,他在的时候就开心相处。
就相处和了解而言,我们真的是完全不一样的人。
我来自东南沿海,她长于西北沙漠;她做事干脆、有时带点暴脾气,而我不紧不慢、确实也能把她磨得没脾气;师出同门,职业方向却截然不同;她喜欢攀岩、拳击、冲浪等各种运动,而我恨不得两个月在电脑前自生自灭;她 10 点就要睡觉,我凌晨 3 点还无困意;饮食习惯天差地别,我们在一个并不大的自助餐厅里拿回来的食物都找不到同类型的;她需要家里井然有序而精致,而我的秩序感可能是来自把 app 按照颜色归档在文件夹中和 VS Code 换了一个喜欢的主题色;我爱看电影和动漫,而她觉得人生苦短,更想从阅读中寻求一方净土。...
有时候我们也会讶异怎么这样的两个人走在了一起,又有时候会觉得理应如此,正如一次送花时的卡片上我所摘录的聂鲁达的一首诗:
everything carries me to you,
as if everything that exists,
aromas, light, metals,
were little boats
that sail
toward those isles of yours that wait for me.
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 神经症与人的成长,homura 推荐的,读完了,见上文。
- What My Bones Know,讲自我疗愈的,或许看完「神经症与人的成长」再看会有不一样的体会。
文章
- Rust std fs slower than Python!? No, it's hardware!
- The Inside Story of Microsoft’s Partnership with OpenAI | The New Yorker
- 支付金融地理志 | 全球视角下的 Crypto 采用:动荡经济体的金融自由探索 - ivyheretochill
- 静态博客半年记 | 椒盐豆豉
- 更友好的并发库 conc 介绍 | 李文周的博客
- 四层负载均衡漫谈 | 卡瓦邦噶!
视频
- ZEALER 前员工从传播学角度聊聊王自如
- EVM: From Solidity to byte code, memory and storage
- DeFi Smart Contract Audit End-to-End | Thunder Loan - Security & Auditing Full Course Excerpt
动漫
周报 #51 - 追星小鹿 Lawrence 与生病
前言
本篇是对 2023-11-22
到 2023-11-29
这一周生活的记录与思考。
这周因为学姐和我都患了甲流而几乎都在家休养,生病对生活工作造成了挺大的影响;录完了上次说的播客,闲聊了一个多小时;周末烧了两天,但周日还是挣扎着出门去线下追星小鹿 Lawrence;退烧后以防万一还是去医院做了检查,没什么大碍,但也只能等待治愈;还有很多有意思的事。
小鹿 Lawrence
在许久之前自己就在精简自己的输入源和在各类媒体上的时间,关注数减少到了 100 以内,但是 B 站依然是我每天会打开的 App,而「小鹿 Lawrence」则是最主要的原因。
大概是三四年前关注的他,那时候鹿哥常常旅行追寻自我,留下了很多在日本的记忆,或是因为有一些相似的景,抑或是因为他孤独却又强烈地热爱这个世界的心境,一直觉得他的镜头与叙述有一种是枝裕和的美感,后面在某期 QA 的时候听到他最喜欢的导演也是是枝裕和,果然。
后来,他遇到了米老师。
他们的每一期视频都会第一时间看,看着他镜头中逐渐多了米老师的身影,有讲与他和他的猫的故事,有和十年前的自己对话,有年终总结的仪式感,直到,最近的求婚。我很难形容他们之间是一种什么样的美好,他们都有着自己的生活与追求,在自己的轨迹上前进着,却又互相吸引,彼此救赎,把对方从孤独中拉出来。
彼时的我也在追寻自己的轨迹 —— 「23 岁的自白:去追寻意义」,迷茫,不知所措,却又执拗地追求生活的意义本身。后来也经历了为自己想做的事去留学、亲人离世的痛苦、生活变动的迷茫等等,在难过到无以复加的时候就会开着鹿哥的视频反复地看,发现似乎总是能在他的叙述中找到共情的地方,并给予自己力量;后来也开始养猫,通过文字记录下这些生活点滴,用年终总结对自己说一些话,重新鼓起生活的勇气后用镜头记录下一些生活片段。后来也常常能收到一些读者从我的文字中找到共鸣或汲取力量的留言反馈,突然发现这似乎也是一种传火,将我获得的鼓舞传递给更多人。
这次刚好抢到了「Todat At Apple」鹿哥的分享会,讲了很多有关他的创作与生活本身的故事,对他提到的各个梗和视频细节都很熟悉,这才发现似乎这也成为了我生活的一部分了。
其中他提到说下一个视频也是笑中带泪的,并且用到了奥本海默里类似的消音手法,没想到是求婚!!!祝福!!!
本周生活剪影
今年确实感觉身体状况有所下滑了,四月有一次比较严重的急性肠胃炎,五月第一次阳了(不过两天就好了),这周又患了甲流发了几天烧,到现在还有不小的余波。也确实是难受,秋冬还是得多注意保暖了,计划也落下得越来越多,头疼。
然后也因为在家闷太久了,没做什么额外的事,也没太多心力做饭,希望一切早些回到正轨吧。这周末也会先回杭州呆一阵子,能见到一些同事,也可以去久违的良渚「疯狂星期四」了。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Up At the Villa,一本很小的书,算是没什么剧情的“悬疑小说”,对话与心理描写偏多,却还是挺吸引人一口气看完的。讲述的一种“desperate love”。年轻小提琴演奏者因 Mary 施舍的“爱”而重燃对生活的期望却又很快破灭而自杀;Edgar 只爱他记忆和想象中的纯洁无暇的 Mary;Rowley 是个富有的浪子,却爱得最纯粹、热烈而不计后果;Mary 则很矛盾,清晰地知道自己的心意,会因财富地位而迷茫,却又坚持着要将最完整的自己发生过的事坦白后再去接受 Edgar 的爱。爱背后有着挺多的功利、自以为是与自我满足,也许屏蔽掉这些后才能更加感受到纯粹的爱本身。
- 神经症与人的成长,homura 推荐的,每天晚上读一些。
文章
视频
动漫
- 间谍过家家 第二季,阿尼亚赛高!
周报 #50 - 天坛漫步、重拾阅读和费曼学习法
前言
本篇是对 2023-11-13
到 2023-11-21
这一周生活的记录与思考。
这周工作也有挺多讨论和开发的部分,还算是在正常节奏;平日里工作、学习外加额外的阅读也占据了大部分的时间,但也有着不错的充实感;因为想后面晚上更多还是看一些书,所以赶着把在看的几部剧和动漫追完了;周末去天坛公园散步了,晚上还解锁了好吃的菌菇火锅;给 OpenBuild 上了两节共计 4 小时的 Solidity Bootcamp,准备的过程也还挺有意思的;下周还有会参与一个播客录制,会参与到 2023 播客节,很期待;还有很多有意思的事。
天坛漫步
北京的秋天很短暂,但大概是一年里唯一还算不错的时节了,微凉但不需要叠上一层层厚衣服,正适合散步。
出发前学姐突然说了句让我别带相机了,补充道“每次带着相机就没有那么自在地闲逛了”。愣了一下,确实是这样,似乎养成了记录的习惯后,在一些开心或是觉得有趣的瞬间会更多想着拍下来或是写下来,有时候反而会忽略了享受当下的美好。就像是去阿那亚的时候,在海边散步时,因为天色渐暗,想着能够快些出片,于是到了每一个景都会拍上许久,最后也如愿出了一些片,但是确实少了“漫步”的心境,相机的 55 焦段却无形增加了距离感。
这次去没带什么目的,只是散步,跟着公园里的游人打太极,比赛谁能把松果丢到一个由草堆组成的圆圈里,也会看着几只羽毛鲜艳似孔雀的小鸡在林子里乱窜/求偶。明明觉得自己其实是一个并不那么亲近自然风光的人,摄影上也更爱有些主题的街拍,但与人为伴闲逛惬意的时光却也带来了不少惊喜,让最近的一些紧绷和焦虑得到了很多缓解,时光也变得尤为缓慢。
后面还吃到了一家回味很久的云南菌菇锅「汤巴适」,强烈推荐!
重拾阅读
前段时间的晚饭和饭后更多都是在追/重温一些剧,《请回答 1988》、《琅琊榜》和《机智的监狱生活》,轻松愉快却也让时间溜走得很快,于是努力集中追完后打算不再开启新的剧,而是重拾阅读。
去年读了很多书,通勤地铁上与 Kindle 为伴,环境恶劣但是却也乐在其中,一周有时能读 1-2 本,而这半年不再需要通勤,却少了一些读书的心境,也主要是在看一些工具书。这几天的晚上重新开始阅读,发现又能够享受其中了,要完成年初的阅读计划应该是不行了,但能找回阅读的享受也是更大的收获。
先看完的是《Building A Second Brain》和《PARA Method》,后者是前者的一个补充,都是关于个人知识管理的,前者更多是理念和方法论,后者则是更具体的实践方法,因为偏向于工具和实践,读起来也并不费力,不过对目前使用 Logseq + Readwise + Heptabase 的系统有一些补充。
群里同事提到了《未来简史》,想起来几年前看过这本以及《人类简史》,自己就兴趣而言比起文学作品来说其实并不那么喜欢这类宏大叙事的题材,不过他写的这个系列算是难得一直很吸引人去读的,有点想重温,不过刚好看到书架上有《今日简史》,想着先看完,读了前几个篇章。
费曼学习法
最近又参与到了一门「[OpenBuild Bootcamp] Solidity 入门到精通」的授课中,负责其中两节,因为都是下班和周末的时间,用的也是之前在清迈 Workshop 培训材料的中文版。
自己似乎还是挺热衷于参与教育和分享这一类的事中的,也是费曼学习法的实践,其核心在:
当你准备学习一门新知识时,必须站在传授者的立场,假设要向别人讲解这门知识。
所以尤其在自己也还是学习阶段的时候,我会更珍惜能够去分享和授课的机会,去年五月给 Chainlink 做过一次技术分享,写了几篇博客,今年去清迈当了一次 Mentor,又参与了一次 Workshop,对于核心概念比起之前有了更扎实的掌握。
而谈到 Solidity 自己学习的路径,Patrick Collins 在 YouTube 上的三个 Solidity 教程我都看完了,每一个都是几十个小时。
第一个是 Brownie (Python) 版本的,是 2021 年 6 月刚从香港回深圳隔离时候看的,当时很多概念都不懂,也没什么实战经验,只是感觉 Python 写测试语法比较简单所以舍弃了毕设用过的 Truffle,大概一个月的时间粗略过了一下,应付了一下几个合约开发岗位的面试,后面因为去做了联盟链也没怎么用了。
第二个是 Hardhat (Javascript) 版本的,是 2022 年 5 月在家隔离的时候看的,当时已经对合约有了不少了解,也写过不少实战,所以更像是一种巩固,大概只花了半个月左右,还输出了几篇博客文章,还被 Patrick 本人关注到和联系了,有了很多后续的一些机会。
而最近刚看完的 Foundry (Solidity)版本的其实已经实战过不少项目,大部分概念已经熟悉了,然而却花了接近两三个月,很多还是跳着看的,感觉随着技术博客写少了后学习知识专注程度和状态还是有挺明显的下滑的,还是得重新捡起来 😢
有趣的事与物
播客节
这周有机会录制一个播客,同时这个节目会参与到「2023 科技播客节」,同期的有「枫言枫语」、「代码之外」、「津津乐道」、「内核恐慌」等等自己很喜欢的播客,去年就有听这个活动的各种主题,没想到今年也能有参与的机会,很奇妙。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,其实文中提到的方法已经在别的博客了解并且实践了,更多只是想了解一下作者的思维模式和实践方法,发现还是更偏理论一些。
- The PARA Method,比起《Building a Second Brain》,这本更精简易读,很偏重实践方法,关于在多平台共用系统以及信息在 PARA 之间的流动原则对我目前的系统有挺大的参考的
- 今日简史,三部曲的最后一本
- Uniswap V2 Book | RareSkills,一直想更详细了解 Uniswap
- ZK Book | RareSkills,了解一下 ZK
文章
- 稳定性,难的不是技术,而是
- Effective Neovim setup for web development towards 2024
- Exit games for EVM validiums: the return of Plasma
- The Architecture of a Web 3.0 application
- A comprehensive guide to the ERC721 standard and related security issues
- 大图书馆 #9 《流计算系统图解》书评
视频
- Learn Solidity, Blockchain Development, & Smart Contracts | Powered By AI - Full Course (12 - 15)
- study vlog #38|享受晚间阅读所带来的平静与思考|女程序员的学习日常|TEDxTalks:内向性格的力量/关于睡眠|未来简史|英语学习
- How to Make Learning as Addictive as Social Media | Luis Von Ahn | TED
- Ilya: the AI scientist shaping the world
动漫
- 冥王 PLUTO,在奈飞上刷到的关于机器人和人类题材的一部动漫,一直对这个类型很感兴趣,平时的午休+周末看完了,关于仇恨与爱,仇恨方面比较宏大,贯穿着”仇恨是没有结果的“和英雄主义的主角团,让我更印象深刻的反倒是最开始的执法机器人和他的妻子、盖吉特与海伦娜之间的爱,仅仅是选择记住对于他们来说就已经是最艰难而伟大的选择了。
- 间谍过家家 第二季,阿尼亚赛高!
剧集
- 机智的监狱生活,《请回答 1988》同个导演的作品,也是饭后休闲选择的剧,搞笑之余也很有风格,虽然也是大男主的剧本,但是呈现是我很喜欢的群像,里面的很多配角即使出场不多,也会留下很深的印象,还很喜欢的一点就是整部剧并没有刻意美化人性,像是出狱后马上重新吸毒的毒虫,同样也没有追求一种尽善尽美,比如首次复出赛并没能获胜的男主。更多可以说是展现了人的多样和成长。
音乐
周报 #49 - 烧焦的键盘、庞贝神话展、健康调整与神奇的梦
前言
本篇是对 2023-11-08
到 2023-11-12
这几周生活的记录与思考。
这周回到了正常节奏,工作方面主要任务是在方案探讨和设计,没有太多代码的部分;另一个 AI 相关的项目写了一些智能合约与调用链相关的后端 api 代码,其实虽然也写了不少合约,但是完整串整个流程的非 demo 项目机会还是不那么多的;运动方面上了两节私教课,状态还算不错;生活方面做了几餐饭,学姐弄了一个在线文档记录下了食谱和菜单,能感觉似乎厨艺有在进步;整理了一下之前拍的视频素材,打算努力剪出一版来,算是视频版的 review 了;重新布置了在北京的办公环境,舒服了很多;去逛街买了一些换季的衣服;还有很多有意思的事。
烧焦的键盘
这周最有意思(?)的事应该就是一天晚上自己在加班工作的时候突然感觉到一阵什么东西烧焦了的味道,我跟学姐大喊了一声“好像有什么东西烧焦了”,接着写;过了一会儿感觉糊味好像离自己很近,又大喊“可能是我电脑或者键盘烧了”,然后接着写;又过了一会儿,键盘断触了,我拿起来闻了闻,一阵很浓厚的焦味,原来真的是键盘烧了。
当下还不觉得有什么,后来想想我的反应还是挺搞笑的,可能刚好在调试一个 bug,处在一个专注状态里,所以对于周遭的反应都像是一种程式化的输出了,大概我就是那种地震了第一反应是 git commit
+ git push
的人吧。
这个键盘用了也快一年了,是稚晖君设计的「【自制】我做了一把 模 块 化 机 械 键 盘 !【软核】」中的翰文 75,外观和手感都还挺不错的,跟客服联系了一下,说估计是排线烧了,还要联系售后检修,说这是他遇到的第一例。
我的代码功力大概是成了,都把键盘写烧了。
学姐:“要不要给你买个保险?程序员真是高危行业。” 🤣
庞贝神话
学姐的公司有一些艺术展览的福利,可以带家属,想着周末不能总是宅家,于是挑选约了周六去了国家典籍馆参加一个「庞贝神话——意大利那不勒斯国家考古博物馆藏古希腊古罗马珍品文物展」,
包含“梦回盛世”“古希腊罗马时期的爱情神话”“快意人生:古罗马人对美好生活的热爱”“古代艺术中的美的概念”“神话再现”几个部分。
因为包含了导览讲解,一路听着奇幻的古希腊神话,又看着那个时代人们普通却又不朴素的日常,有一种很神奇的协调感。我想比起国内只有皇室才能有资格享有的古墓群,这种突然消失的城市似乎更能展现出一个城市本来的面貌,更加有真实感。
在我们的想象中,似乎 2000 年前是很遥远的世代,但其实就庞贝城所展现出来的状态来说,他们对与生活的追求甚至远超过现在的我们,美食、在餐具上的绘画、各类关于所信仰神的画作和雕塑,以及很有意思的,小小的庞贝城有二十多家妓院,还有很多展现性爱的壁画,他们对于性和欲望的开放程度甚至要远高过当下。
火山爆发让时光永久地停留在这一刻,而不用体验衰老和缓慢死亡,或许也恰恰符合了他们的生活态度,他们的日常生活也无不体现着“及时行乐”与“对美的极致追求”,他们对于爱情本身的憧憬与歌颂也无不体现在他们的艺术作品中,我想除了宗教外,他们同时笃信着美好生活与爱本身。
神奇的梦
周日夜里还发生了一件很神奇的事。
因为想着夜里把周报写完,但刚健身和逛街完折腾了一整天又很困倦,想着把电脑放在床头,睡到三点左右起来写(最后也没起来)。深夜自己做了一个梦,大概是因为什么原因自己的 Macbook 不小心摔折成了两瓣,当时梦里的最后一瞬间应该是在后悔没有买 Apple Care,惊醒后手猛地一抓,刚好抓住了正要从枕头滑落到地上的笔记本。
大概是已经和电脑心意相通了,它察觉到了危险托梦给我来救它吧,很神奇的梦,再加上这周 Openai 的 GPTs 和一系列新特性的发布以及刚看了 PLUTO 这一讲人类与机器人的动漫,一时竟分不清我对此未来是期待还是畏惧了。
健康调整
健身
大约一个月前,开始了一周两次的健身房私教课。其实自己这么多年来对于身体是不那么关心的,也得益于还不错的体质,连小病小痛都很少有。高中大学时会在寝室做一些基础的仰卧起坐、俯卧撑之类的,也大概能保持不错的体能与体型。只是随着年纪渐长以及作息随着工作和生活的一些额外因素而越来越不可控,也逐渐开始想着能增加运动的频次和量。
综合考虑后,报了健身房私教课,一般一周两节,周三/周四的早 7-8 点以及周日的下午 2-3 点,基本上能覆盖到全身想锻炼的一些点,现在已经上了 7 节课,这是第一节课前测量的身体状况,应该再上一两节后会再测一下,看看有没有什么进步。
健身还真的是一件挺有趣的活动,前两次很新奇,每项都会想着能多做一点突破自己的极限,上了几节课后就会偶有倦怠和状态不好的时候,时常会在一些有些勉强的动作时瞥一下墙上的钟表,想着也太漫长了,而现在在已经能明显看到一些成效时,又稍微有些习惯甚至期待锻炼后的那种感觉。
饮食
随着健身和生活节奏的趋于稳定,我也开始更多自己做饭,虽然每天会多花点时间,但感觉还是挺有意思的体验,生活也似乎变得更具体了。
有趣的事与物
逛街与情侣装
北京其实已经入冬了,这几天气温骤降,不过也还没准备什么厚实的衣服,周末健身完想着换季了,该去买一些了。
于是到了家附近的商场,和学姐逛了几个小时,买完后才突然意识到这似乎是我们真正意义上的第一次逛街买衣服,还挺神奇的,似乎已经相处了很久,但依然能发现很多没做过的新鲜的事,和关系亲密与否无关,可能更多还是相处模式上,两个人都没有很刻意要去打卡什么“一定要做的 x 件事”,一切自然而然地就发生了。
然后去支持了 Cali 的佐玩商城,买了一套「404 Not Found」的情侣衫,期待到货效果。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,正在阅读。
- Elon Mask,正在阅读。
文章
视频
- 赚大了!0 基础也能学会用无人机拍大片【航拍教程】
- 人生第一次 我跟一位杀人犯坐下谈心
- study vlog #37|女程序员下班后的学习日常|本期🐱含量超标|读未来简史 |TEDxTalks 共读:自控的秘诀/人格的难题/科技是救世主还是杀手
动漫
- 冥王 PLUTO,一个挺有意思的题材,关于机器人和人类的共生关系的,看了第一集觉得还不错。
剧集
- 机智的监狱生活,和《请回答 1988》同个导演,也是吃饭的时候休闲看的,觉得是不同的风格,但也还挺有意思的。
周报 #48 - 内蒙之行、清迈游民、重启的周报与生活
前言
本篇是对 2023-09-17
到 2023-11-07
这几周生活的记录与思考。
距离上一次提笔过了好久,接近一个半月了。前一两周发生的事很密集,有很多想记录的事,却总是没能抽出几小时的时间来完成周报。想着国庆总能有时间了,但去了趟内蒙,回来后又去了阿那亚度过了和学姐的 100 天纪念日;旅程很开心却也消耗心力,还未从行程中缓过来就赶着早班飞机前往了清迈参加活动,见到了许多网络上熟悉却素未谋面的朋友,也做了自己的第一次英文 workshop;再就是回到杭州见故友,参加朋友的婚礼,和高中同学聚会;期间夹杂着家里老人的身体出了一些意外,父母常常要往返于老家而逐渐无暇照顾捏捏,于是又托运带回了北京,幸好路途一切顺利,又能够朝夕相处了;同时,部分工作状态和重心依然有些不太满意,也花了将近一个月的时间逐步调整才回到正轨;还有很多很多的事。
这才深切地意识到培养一个习惯需要很久,但打破真的常常就在转瞬间。生活和爱逐渐变得具体了但表达欲却变得飘忽不定,所幸从这周起也会有比较稳定的生活状态和模式,一切又都重新回到正轨,于是以周报为界,重新捡起这空白的一个多月生活。
朝阳啤酒节
九月的很多时间都在北京,周末在常规 dating 之余,也会想着参加一些好玩的活动,在餐厅点餐时听到服务员在讨论朝阳公园在举办一个啤酒节,小红书上查了一下活动介绍,决定前往,还准备了自己做的三明治。
现场很 High,打碟的 DJ 装束很西北大汉,快乐感染到了现场的每一个人,纷纷在草坪上开始蹦野迪,有热情的外国小姐姐来跟我们打招呼,还见证了一个小哥搭讪和要到联系方式的全过程,前排吃瓜。
喝了两杯精酿倒不至于醉,但带着些微醺返程时却还是稍稍打开了话匣,聊了很多彼此生活中有意思的事,看到月亮会一起趴在桥上看上十几分钟,比赛谁能说出更多的相关的成语或是诗词,稀松平常,却享受着久违的松弛感和朴素的快乐。
内蒙之行
倒不是什么刻意的安排,机缘巧合之下国庆的旅程定在了内蒙古鄂尔多斯,一方面想着去看看大沙漠(南方人没见过),另一方面,也是学姐的家乡,想着能待几天,看看她长大的地方,上篇提到了因故剪去了蓝色长发,这也是其中一“故”。
中午出发,北京过去三个多小时的高铁行程还算舒适,路途上却多少有些紧张和不知所措,这次刚好也都用新买的 Sony ZV1 Mark II 拍了很多视频,应该会有很多有意思的素材,但是都在 SD 卡里,还没来得及整理(先恢复周报频率再考虑 vlog 的事吧)。确实内蒙的气候与风貌和江浙挺不同的,干燥且风大,但是天阔云高,有一种很干净的美。
学姐的父母来接我们,一路上闲聊着,因为还不太听得懂达拉特旗的方言,有些词他们也不知道怎么用普通话来解释,且我们四个都是英语专业的(学姐的父母是英语老师,我和学姐虽后来都不务正业但也是英专出身),于是就出现了用英语解释方言的奇妙景象,留下了很有趣的记忆点。
因为知道我来自南方,想依着我的口味,当晚去了一个渔村吃了黄河鲤鱼;后续几天见一些亲朋,免不了几顿酒但也确实能感受到溢出言语的热情好客;赶早市,吃到了很多牛羊肉和当地特色的小吃,确实满足了我对大西北的想象。
几天后就返京了,开心但是也确实有些疲累,可能宅太久的自己一次见到那么多人做那么多事还是有些消耗心力,但是记录下了很多有意思的事和珍贵的记忆瞬间,也许可以浅浅期待一下 vlog。
直到最后也没去成大沙漠,我为什么去内蒙来着。
阿那亚之行 & 100 天
回到北京后歇了一天,因为 10.7 刚好在一起 100 天,6 号驱车自驾去了秦皇岛的阿那亚,一个挺有意思的海边社区/度假村,我想比起大理、清迈这样的数字游民社区,这里人为打造的小资氛围更重,复式小楼,门口大大的草坪与在上嬉戏打闹的家人,偶尔有人骑着自行车穿过,也有跑步的外国人,很电影感。
酒店的阳台能直接看到海滩,走几步就是网红的「阿那亚礼堂」和「孤独的图书馆」,不过我和学姐都没去凑这个热闹,图书馆可能是挺孤独的,但围绕着排队打卡拍照的游客们,却还是有一种莫名的违和感,不过现今似乎“出片”就是它最大的价值。更吸引我们的反而是海滩中的一排秋千,前后摇晃着看着海浪拍打着岸边,很惬意。
恋爱至今,有一种又远又近的感觉,好像在一起的当下就在几天前,又好像在一起很久很久了,不过 100 天还是有一些仪式感,学姐偷偷提前买了气球,用拍立得合影纪念了。恋爱真的是一件挺奇妙的事,似乎微小的日常也会变得尤其珍贵。
清迈游民
很早之前就确认了要去 muChiangmai,一个 Web3 数字游民共居的活动当 mentor,活动相关可以看我的网上邻居 ivy 的这篇 「Coder 徙居古城墙:muChiangmai 回忆 - ivyheretochill」,很细致讲了体验了一个多月的各类感受,而我只待了短短一周,且很多时间都在酒店处理工作,所以更多分享的是生活本身,这次尝试了在 Telegram 频道 「Yu's Life」 持续更新了小作文,免得忘记,特此合订一下。
来到清迈 - 20231008
时隔三年多又来到了清迈,上次还是疫情期间送倪去澳洲,需要在第三国中转 14 天。而这次主要是为了参加一个开发者活动,再加上还有不少工作任务,所以也并没有什么游玩的安排,就简单收了行李,只背了一个大包出发了。
选了午夜的航班,到达后已经是早上,免签后很方便,就一本护照直接过关,没有什么额外的流程。出了机场用 Bolt 打了一辆出租车到了酒店,入住、洗漱,取出电脑开始工作,因为也不是很饿,到了临近晚上把手头上的任务收了尾才想着出去逛逛。住在塔佩门附近,还算热闹,随机选了一家不算太远的店去吃了这次的第一餐,很惊喜。
其实比起假期里大片时间刻意安排的旅行,自己更喜欢来清迈这种不会给人带来太多异乡感的地方,不需要像是度假那样去转换角色或是调整心境,白天依然像之前一样宅家工作,晚上偶尔有兴致了找找街边小店探索美食,在换一个环境能给生活增加一些亮色的同时也减少对生活的入侵感。
藏在生活角落里的善意 - 20231009
今天也没什么额外的安排,在酒店宅着工作了,中午的时候想着还是出门逛逛,于是选择了一家叫「Sailomjoy Restaurant」的本地小馆,凭着对泰国菜的印象点了炒空心菜和河粉,很美味,感觉自己在盲选美食上一直还是有点运气在的。
中午的餐馆人流挺大,选了一个角落的位置独自坐着吃,有一个很纯正英音的小哥端着盘子过来指着我桌上摆着的酱料说了句 "May I?",加完后还笑着跟我说了句 "Thank you! Enjoy!",心情一下子就 up 了。
之前刚入住香港窄小阴暗的租屋时也很压抑,每天在图书馆里很晚回家,房间灯坏了也没顾上修,跟房东阿姨提了下,晚上回家后发现修好了,桌面上留下了一个苹果和纸条,上面写着 "Light fix",似乎一下子在这个租屋的时光连带着整个生活都随着修好的灯一同明媚了起来。
也还记得年初在北京看一次音乐会,在跨过人流找自己座位时有一个挺帅的小哥对着他的同伴说了句 "I love his hair! It's cool"。似乎外国人也更加不吝惜自己的语言去表达对他人和这个世界的善意。
感觉自己似乎一直挺喜欢和感激这样藏在生活角落里的小确幸的,在制定个人计划时也加了一条 "random kindness",希望自己也或多或少能够给他人带来一些改变。
记忆随意链接 - 20231010
今天又是大半天没出门,四点多的时候实在有点饿,再加上晚上有组会,所以提前了点出门觅食。突然有点想吃西式,就也选了离酒店几百米的一家意大利餐厅「Pulcinella da Stefano」。
进去后随意选了一个靠边的位置,坐下后拿起菜单一瞥,一股莫名的熟悉感袭来。突然想起来三年前来塔佩门玩的时候好像也吃了这家,还找到了记忆中当时觉得很新奇的“米兰炖牛膝”,果然,甚至坐的刚好是今天同样的位置,很神奇。
总以为自己这几年辗转了很多地方,也变化了很多,但常常有一些随意将自己和过去的记忆链接的瞬间,有的可能是很不起眼的物件或是很微小的感受,却让自己有一种时间缓慢流淌的感觉。
但是人真的不能在很饿的时候点餐,一定会点多,明天还是努力中午出门吧。
小作文与合订本 - 20231011
国庆前由于忙一些工作任务而搁置了周报,然后经过了假期,再经过了来清迈等等一系列安排,再次提笔想写的时候已经丧失了当时记录的心情,但又由于一直不更新而带来了很大的心理压力,总像是一件事搁在心里,又不想敷衍草草了事。
其实分享的心情是有时效性的,就像是刚起床做了一个很有趣的梦一样,转瞬即逝。突然看到了 @strrlthedev 的「Gap Year Wrapped - Timeline」,突然想到其实可以每天/一段时间记录一些东西,写点小作文,然后周末做一个合订本周报外加一些整体的思考,既能够减少周报记录所带来的大块时间压力,又能够抓住了一些有趣的想法,频道里就当超前点播了哈哈。
顺便补一下昨天的记录,是出门&正常吃饭尝试失败的一天,还是在酒店工作,还是只吃了一餐,不过也还是很好吃,叫「Kat's Kitchen」,泰餐。
Coworking - 20231012
虽然说这次主要目的是 muChiangmai,但是下午才是第一次去 PunSpace 会场,活动组织者和 OpenBuild 的小伙伴热情地来接我和给我讲一些活动事项,原来这是那种很大的一个大家一起工作的公共空间,网络和环境都不错,很浓的技术氛围,早知道前几天也过来一起玩了,感觉工作效率还挺高的,还见到了 ivyFanshao 和 CaptainZ 等网上邻居!快乐!
远程办公也半年多了,虽说时间安排很自由,但有时候自己呆久了会陷入一种低气压的状态,无关情绪,只是似乎对这个世界的感知少了,就像是午睡突然醒来发现外面的天已经黑了的孤独感。所以有时候也会去主动寻求一些改变,像是在杭州的时候坐一个小时的地铁每周四去良渚村和大家一起办公,像是这样换一个环境感受生活的流动。
晚上去吃了第一晚去过的一家店「Airniversary」,之前吃的是泰式,今天尝试了完全不同的菜式,牛排沾泰式甜辣酱以及超大的椰子(神奇的吃法),意外地好吃。
一个小 bug 修一天 🤡 - 20231013
今天早上 5 点多噩梦醒了,想着干脆起来工作,刚好在美国的同事看我在线让我一起解决个 bug,因为对这个仓库不太熟悉,连上配环境和各种调试,期间开了季度会和做一些其他工作,拖着到现在才算真正解决,一个破 bug 修一天 🤣
中午抽空去吃了个芒果糯米饭,好吃!
漫长的一周结束了,不过因为下周有个项目比较赶周末会加一下班,补一下周报,再加上准备一下周一的 workshop,忙碌。
The Lost Book Shop - 20231014
去了街边一家旧书店「The Lost Book Shop」,店如其名地很 vintage,一楼很窄却有序,爬上一个楼梯后还有个豁然开朗的二层,作为毛姆粉太喜欢这个系列的封面设计和装帧了,有点后悔只背了个包没带行李箱了,带不了多少东西,纠结了许久,最后除了「刀锋」外,选了几本没读过的。
今天也要好好吃饭 - 20231015
周末还是决定多出门。果然作为一个南方人还是抵御不了海鲜的诱惑,从 TripAdvisor 找到的一家很本地的店「Maadae Slow Fish Kitchen」,食材很新鲜,酱料也很独特。吃完后散步还去了一个旧书店「The Lost Book Shop」,买了一些毛姆的书。晚上又去了一家本地菜「Nun's Restaurant」吃了咖喱面。吃完后有点暴雨,在 711 躲雨的时候还在小吃摊点了一个饼,有点甜但是味道还不错。
大概是从好久之前看到的竹棘大大的一个日剧混剪「今天也要好好吃饭」开始的,感觉因为作息习惯原因自己算不上规律吃饭,但是对待美食都有一种特别的仪式感,会记录和感受。
「无论健康、病痛、满足、寂寞的时刻,请好好吃个饭吧。身心都会获得治愈的。」 ——《食べる女》
记一次英文 workshop | 清迈再见 - 20231016
感觉从香港毕业后就没有很大段地讲英语了,这次为了挑战自己(白嫖住宿)来 muChiangmai 活动申请当了一个 mentor,主要是需要 host 一个两个小时的 solidity workshop,但是上周又很忙导致差不多从周日晚上才开始准备,出去吃饱后回来睡到了凌晨一点,起来改 ppt + 写 demo 弄到六点多,睡了一会儿后继续改,一直到下午。
workshop 在一个小小的会议室里,人不算多但是坐得满满的,氛围很好,还是很紧张的,感觉英语讲还是磕磕绊绊的,但好在至少没卡住,想要讲解表达的都有覆盖到,也算是一个小小的挑战了。结束后和网上邻居们一起去清迈大学夜市逛了一下,大概是吃了这次在清迈的最后一餐了,就匆匆 Bolt 回酒店开组会了。
明天早上 6 点多的飞机,打算夜里过去在机场补一下白天落下的工作和周报了,清迈再见。
杭州生活剪影
故友重逢
原本也许会在清迈待更久,但晓瑜从日本回来了,但只待几天,上次见面甚至疫情都还没开始,时间真的好快。12 年高中认识,到现在也已经是十几年的好友。随着慢慢长大,朋友越来越少,但留下的却都弥足珍贵,甚至几年不见也几乎感受不到疏离感。一起吃了饭,回家看了捏捏,聊了很多想法,也提及了许多过去的小事,真好。
同学的婚礼
大概是第二次参加婚礼了,同时也是第二次因为长/蓝发没当成伴郎哈哈。是我高中的同桌,本就是一个沉稳而万事周全的人,婚礼这样的人生大事当然安排得很周到。刚好借此机会和高中的男生同学们一起聚餐,因为文科班男生很少,8 个男生 40 个女生,所以反倒是结下了比较深的情谊,毕业后直到疫情前每年都能聚上两次。后面即使是四散漂泊,也都还能保持了一些联系,婚礼结束后还去了下一场。
生活变动与捏捏
这周家里发生了一些事,已经 80 岁的奶奶在老家散步时被车撞到,在 ICU 里待了八天,所幸并没有危及性命,但断了十几根肋骨,肺部也有一些波及,据医生说,恐怕再也很难站起来了。从小在老家度过了童年,也在他们身边长大,这两年也陆续经历了外婆离世,以及爷爷奶奶身上的各种大小意外或是病症,原来自己也到了这样的时候了,难过却也无能为力。
父母和亲人也都为此在杭州和江苏老家之间来回奔波,轮流去医院照料,也在商量之后的安排。之前因为自己总是两个城市来回,捏捏在家里由父母和我妹妹照料,但因此变故也不想再徒增他们的思虑,于是找了之前熟识的托运公司,让捏捏坐着小车跨越 1200 多公里又回到了北京,刚好天气转凉,再晚也会更担心路途的奔波。
一切顺利地抵达北京,去接了回家,因为之前也在学姐家寄养过一阵子,倒是没有什么应激,和学姐家的小猫饭饭经过一两天的磨合也渐渐熟络起来。倒是没想到能这样间断性地过上两人两猫的生活。
后面又能够和捏捏朝夕相处了,也拍了更多日常会分享出来。
生活调整与心境
其实从 9 月下旬开始,对于自己的各个方面都有些不太满意,甚至到了有些沮丧的地步,工作上常常觉得有些状态不好,不论是工作效率还是重心,经过了几次和组长沟通才渐渐回到正轨。
输入这一块有所停滞,自己想要看的很多书、文章和电影清单越来越长,却常常很难找回之前那样专注的状态,有时甚至会发呆着就过了许久;周报其实也都不乏要写的内容,只是每当打开文档就有些焦虑,自己似乎都没能读什么,学习进度也不尽如人意,分享出来的东西总觉得有些虚浮。
还有很多很多由焦虑、消沉和不安所带来的负面情绪,而自己似乎又是一个没什么情绪出口的人,没法从运动、游戏这些身体和大脑的瞬时刺激中得到释放,只能强迫着自己继续看一些东西,循环往复。去清迈与其说是参加活动,更多是给自己的生活状态一个调整的契机,虽说寄托于环境似乎是个挺取巧的选项,但确实行之有效。
回来之后的自己似乎重拾了一些动力,开始和学姐一周两次(周中的早 7 点和周末的下午)的健身房私教,能感受到健康的身体所带来的精神状态好转;平时也开始自己做饭,发现倒也还是挺享受于按照美食视频的指引一步步做成形的过程的,似乎成为了一种特殊的解压方式。
感谢 Xiao 友情提供的阳澄湖大闸蟹,加餐了!
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,继续阅读。
- Elon Mask,还是挺期待的传记,刚翻阅了一点点。
- Don Fernando,期待毛姆的毒舌点评。
文章
- ChatGPT 应用开发和思考
- GPT best practices - OpenAI API
- 香港银行账户开通笔记(包括实体银行和虚拟银行)
- Why Rust is the most admired language among developers - The GitHub Blog
- Heptabase 完整功能介紹 - 以卡片和白板為基礎,最能讓你進入心流的視覺化學習軟體 - Pin 起來!
- The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!) @ tonsky.me
- How to optimize garbage collection in Go
- Gap Year Wrapped - Timeline
- 什么是拥塞控制算法,ECN 又是什么? – Yachen's Blog
- 告别电影荒:日本电影观看全指南 - 少数派
- Coder 徙居古城墙:muChiangmai 回忆 - ivyheretochill
- Yuval Noah Harari will release his new book, Homo Deus: A Brief History of Tomorrow, on September 8 | WIRED UK
- (译)2023 年每个软件开发者都必须知道的关于 Unicode 的基本知识 | 新世界的大门
- Why I Won't Use Next.js | Epic Web Dev by Kent C. Dodds
- Writing a storage engine for Postgres: an in-memory Table Access Method | notes.eatonphil.com
- 基于荷尔蒙开发的开源项目 - EAimTY's Blog
视频
- iPhone 首发影像评测 | 看完样片再决定买不买!
- 主观对比 8 类热门显示设备,你用过几种?
- 英国旅游 VLOG | 爱丁堡圣诞节
- 被坑了!花¥3000 买了个黑白掌机,还是手摇的!
- Infuse+阿里云盘教程,苹果用户最佳影视库
- 专访多邻国创始人:从技术天才到全球第一语言 APP,他真的很不一样~
- 征集两万份问卷!全站最受欢迎的 UP 主居然是..?
- Mark Zuckerberg on Threads, Elon Musk, AI, the Quest 3, and more
- 云南旅行 vlog 上篇|不仅是美景,追逐美景的过程同样治愈|旅行碎碎念|旅途、雪山、森林、湖水、动物
- 到底什么才是人生最重要的事啊?!
- 9 月互联网热门话题鉴定
- 你幻想的世界尽头,是这样的吗?|4K 新西兰旅拍
- 【日剧混剪/治愈】今天也要好好吃饭
- study vlog #32 | 重启学习计划|工作是干不完的,记得 work-life-balance|TEDTalk 小分享|复习 Kafka
- 当对象嫉妒小心眼的时候,问题出在哪里
- 【精彩】微软收购动视暴雪 | 世纪收购战争
- 遇 到 了 猫 世 界 的 自 己
- study vlog #33 | 和拖延症逐渐和解|长这么大第一次了解自己的生物钟|希望世界和平
- 犹太人、阿拉伯人、基督徒的千年恩怨
- study vlog #34|女程序员宅家学习周记|超喜欢在秋天学习|沉迷刷 TEDxTalks 脑科学的分享|原来大脑每天都在变化,希望它往聪明变
- 取代微单?能放进口袋的 4K 相机|大疆 Pocket3 首发评测
- study vlog #35 | 或许完不成目标是常有的事|1024 程序员节快乐|TEDx 如何激励自己改变行为|solidity|research | 山形瑞秋
- Introduction to libp2p - David Dias
- WebAssembly: A new development paradigm for the web
- An introduction to WebAssembly
- 10 月网络热门话题鉴定 | 冷知识:除夕从来都不是法定节假日
- 在上帝的后花园,却要把盘子都添干净!?|新西兰基督城 4K
- 横版马力欧居然还能进化?任天堂:这就叫做惊奇!【就知道玩游戏】
- study vlog #36 | 学习使我快乐,记录使我充满动力|状态很棒的一周|利用零碎时间背单词|TEDxTalks:如何与大脑沟通/如何做到内心强大
- OpenAI DevDay, Opening Keynote
剧集
- 3 年 A 班:从现在起,大家都是人质,也是在奈飞首页上刷到,下载到手机 app 里路途上打发时间看的,有点高智商犯罪的起点,但是后续逻辑感觉很站不住脚,也是真的中二。
- 西部世界 第一季,飞机上提前下载看了一个开头。
音乐
周报 #47 - 采访、拳击与工作状态
前言
本篇是对 2023-09-13
到 2023-09-17
这几周生活的记录与思考。
周一去看了期待已久的「奥本海默」很久没去影院看电影了;周六去圆明园写生,完整现充的一天;周日第一次去拳馆上了一节拳击课,很新奇的体验;周中终于见到了 Atlas,聊到了不少关于工作和生活的话题;生活状态逐渐回到正轨,工作状态却有些问题,进行了一些调整;在 polebug 的频道客串了一次采访,聊了很多关于 Web3 与合约开发相关的话题;还有很多有意思的事。
采访
在 polebug 的 B 站频道里聊了一下之前的学习经历、Web3 与智能合约相关的话题,不知不觉竟然也接近 30 分钟了,很有意思的聊天体验,也算是对自己一些学习的小小总结了。
拳击
很久之前在学姐的「运动 | 有哪些事是学拳击以后才知道的?」这篇文章中看到这这项运动,不过自己作为资深死宅也是连西洋拳击、泰拳、巴西柔术这些都不太分得清,更别说去尝试了。直到最近想找一些一起的运动,想着先从拳击开始试试。于是约了一个周末的下午,换上运动装就去拳馆了。
自己之前玩了很多年的轮滑,也玩过一段时间的滑板,对于其他运动算是少有接触,上课前还是带着一些畏难心理的。果然在步法和出拳的配合上因为没怎么接触过这类运动而有些不一致,协调性也不太好,发现可能在自己的思维定势里太久了,一开始恨不得做个导图把各个动作的先后排列出来,也有因为肢体和思维不太一致而有些小沮丧,但是在经过一小阵子的练习后勉强能跟得上练习节奏了。
学姐还拍了一小段我练习出拳的视频,放在了频道里:https://t.me/pseudoyulife/2360
第一节课就能体验出拳的快感还是很正反馈的,整体来说还是一个很有趣和解压的运动,也没有想象得那么困难,很多步法和细节动作还是需要继续练习,也想继续坚持下去训练。
工作状态调整
其实这几周的生活状态逐渐回到正轨,从周报的更新频率也能稍稍看出来,开始恢复看一些书和电影,终于也踏出了运动的第一步,周末也会慢慢地去参与一些户外的活动,情绪似乎一直在不错的状态。
但是却察觉到工作状态有些问题,倒不是工作方向或是内容,只是想做的事太多,又似乎都想去探索,但自己的时间精力终究还是有限的,反而失了重心,效率也受到不少影响,和组长/同事聊了后,开始做一些调整。
似乎又到了自我的调整的周期了。
个人生活剪影
奥本海默
因为订阅了国内外各个流媒体服务,也基本上不追什么热点,就很少去影院了,周一下班后久违地去看了电影,期待已久的「奥本海默」。上一次印象比较深的还是三个小时的蝙蝠侠,同样地长,也同样地喜欢。
诺兰的「星际穿越」和蝙蝠侠三部曲算是自己最喜欢的几部电影了,他对于临场感的追求和情绪的把控是很适合深沉一些的传记、历史和英雄题材的,主角抢眼却也真实,配角也各自有自己的故事感。印象最深的还是刻意打乱的时空叙事,黑白与彩色的交织画面以及长长的对话。作为一个传记很难指望能有一个鲜明的故事线与发展节奏的,略带混乱和复杂度的画面构成了很“诺兰”的剪辑风格,也因此 get 到了好几个埋藏的剧情转折和伏笔。
圆明园写生
周末另外好玩的还是周六陪学姐去参加了圆明园写生,算起来也是第一次去圆明园,虽然带了相机但也没怎么四处拍照,简单拍了一些,不过倒是试用了新买的想用来一起记录生活的 Sony ZV1 Mark II,很小巧的卡片机,比之前用过的 ZV1 在焦段和易用性上还是提升了不少的,调了 HLG3,和相机的参数一致,之后可以配合着拍一些视频了,或许会定期记录一些 vlog 什么的。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,正在基于他的理论构建自己的知识管理系统,继续阅读。
- Elon Mask,还是挺期待的传记,刚翻阅了一点点。
文章
视频
- 350w 粉 UP 主每月要花多少钱?时隔 5 年的读评论!
- 和 web3 从业者聊聊天 #4|从英语专业到智能合约开发的 pseudoyu 🐙|为什么选择去港大学习区块链|智能合约相关的学习资料分享|对于跨考计算机的建议
电影
- 奥本海默,见上文主题部分。
周报 #46 - 告别长发、周报初心与合约开发
前言
本篇是对 2023-09-05
到 2023-09-13
这几周生活的记录与思考。集中地写了一个并算不上复杂的合约项目,也因接受一位 up 主朋友采访而重新梳理了自己的学习经历和合约开发相关的心得,继续出自己的系列教程;有出版社联系,可能会着手开始写一本技术书籍,期待却也忐忑;由于发质和一些个人原因暂剪去了长发,重新开始养,也算是近期最大的变化了;写了一篇自己很喜欢的关于知识系统搭建的文章,重拾了写作中最最本源的快乐,也在越来越多的博客文章里看到我的周报被提及,欣喜之余也有些惭愧,也重新思考了自己写周报的初心;还有很多有意思的事。
告别长发
虽然说剪个头发都要专门写个主题未免有些矫情,但依然有些感触。
留长&蓝发已经一年之久了,从最开始的些许不适应到后来似乎渐渐成为了自己的某种意义上的符号,它也陪着我走了很久,历经了几种截然不同的生活状态。去年年末刚因为想换个风格而染了蓝色,满足了自己二次元的小小心愿,又恰巧没过两个月北京就疫情居家,一直没出去剪头发,等真正放开后已经积攒了不错的长度,买了几个还挺酷的发带,想着干脆就留着了,一留就是一年。
很神奇,当自己的外在会给人留下一些惹眼的印象后,自己的内心似乎也少了一些束缚和顾虑,会在香港的 Web3 Festival 上和一个对我发带还挺感兴趣的中东投资人走了一路闲聊;会有被别的展位的小伙伴搭话说“注意到你很久了,很显眼”;会被接近十年没联系的同样在做 Web3 的高中同学认出,讶异却也惊喜。也许自己本就有去分享和交流的欲望,只是因为有些社恐外加担心他人的反应而有些迟疑,发型发色给我带来了一些暴露在人群中的勇气,也像是一种保护色。
而由于颜色掉得差不多了,且漂了几次因发质受损而有些毛糙,也因为月底有比较重要的场合需要,于是下定决心先剪掉长发,重新再养一段时间,萌生想法的第二天就剪去了。剪完后没有自己想象得那么不适应,反而有些轻松,也许这一年带来的不仅仅是头发长度的变化,自己的心境也在慢慢变化着,也已经有了更多面对这个世界的勇气。
很巧的是 STRRL 也差不多时间剪掉了留了两年的长发,良渚村痛失两个长发小哥哥。
周报初心
周中发了一篇「个人信息获取与知识管理系统(Heptabase + Logseq + Readwise)」,几个小时的写作,从一篇周报中一个衍生的想法到一篇结构尚可的文章,很久没有这样一气呵成而又自得其乐地创作了。
积攒了越来越多想写的主题,其实大多也有了不少素材足以下笔,但总是常常有些迟疑觉得自己”不够格“去传达和评价,就像这次的这篇知识系统,其实 Heptabase 我付费才两周左右,Readwise 甚至更短,就功能上来说自己其实算不上多熟悉所有的模块,但下笔时似乎之前几年对于这套系统的思考与实践都化为了一段段文字,不知不觉写了那么多,很奇妙的感觉。所以重要的可能依然还是独立思考和写下来,而不是需要去媲美教材/文档的大而全。
唯有周报是与未来自己的对话,每次写也都会很放松,毕竟自己也是最有资格去记录和审视自己的人。
这周在几位朋友的周报中都有看到说我周报的形式对他们产生的一些影响,开心之余也有些惭愧,自己似乎确实很久没有准时发布了(甚至这篇也是),甚至拖延了许久后完稿的也依然匆匆,发布完后才想起遗漏了一些有趣的事,又想着,下次再提吧,如此往复。
生活有许多点滴日常,就像自己喜欢用相机记录下一些街边的小小风景一样,文字是我面对这个世界的取景框,也希望自己能留下的更多一些,更生动一些,似乎这样那些记忆和美好才会更多保留下来。
阅读与读书笔记
这周看到一篇有意思的文章「写作入门」,是前段时间写出一篇爆款的关于币安的研报作者分享的关于写作的一些原则,其实自己摄影和写作常常有些不那么注重“术”的部分,常常是因循着自己的感觉和所谓审美,但常常也会担心自己因表达力而没法记录下自己的内心想法和想要表达的内容,所以这篇也是挺有意思的,读的时候稍稍做了些笔记,同步到了 Logseq 上。
有趣的事与物
学习
Arbitrum Stylus
一个可以在 EVM 架构链上运行 Rust 合约的框架 Stylus,还挺有想象空间的,想着可能带着目的再入门一下 Rust 了。
投资入门
孟岩的这个「投资是怎样赚钱的?」视频真好啊,像是之前的「经济机器是怎样运行的」一样的叙述模式,了解了很多之前有些模糊的关于股票、基金、指数的概念,也对投资原则和策略有了一些了解,一边看一边在 Heptabase 做笔记,分享一下。
顺便也才真正稍微了解到学姐是做什么的。
其他
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,正在基于他的理论构建自己的知识管理系统,继续阅读。
文章
- Show HN: I made a browser extension to track the time I spend on websites | Hacker News
- 写作入门
- 周报 #01 – 开学、番茄工作法和新的域名 | 印记
- 2309-1-信息流规划草案-风神殿-情报弱者-葬送的芙莉莲 - niracler
- 现在房价进行到哪一步了?
视频
- 破大防了!教 71 岁老妈剪辑是一种怎样的体验
- 【封神】年度游戏预定!历史最佳 RPG《博德之门 3》不止日熊!
- 投资是怎样赚钱的?
- 经济机器是怎样运行的
- 大豆田竹子的失业生活
- 【4K】我们用 9000 万个光点,还原了他的房间
- 去看花火大会,女友说不如橘子洲头的烟花!
- Prisma Crash Course
剧集
- 街头绝味 第一季,下饭的时候看的,种草了很多美食。
- 假面女郎,也是在奈飞上随手打开的,剧情一般,整体节奏也算不上紧凑。
个人信息获取与知识管理系统(Heptabase + Logseq + Readwise)
前言
我似乎一直有一种把自己作为一个机器来看待的倾向,常常会以置身事外的视角来观察自己,集成各个模组,并不断折腾和优化。当自己搭建的某种行为模式或是习惯在某个时刻突然发挥了作用就会有一种欣喜感,而当受到外界或是自身状态影响而停止运转时则会有一种秩序感被打破的重度不适。
作为一个效率工具控,我的个人知识管理与信息管理则可以说是自己最重要的一部分。其实本没有想要写这篇文章,有太多的先例实践在前,而自己也只是一种前人基础上的微调优化,常常没有什么信心去分享,而这周重新搭建和优化了一下自己的知识管理系统,很开心,有一种想要记录下来的冲动,本来只是想在周报里稍稍提及,却发现越写越收不住,于是就有了这篇文章。
其实之前对于信息输出在周报中时常有提及,所以本文也会覆盖一些之前的内容,并且终于补上了信息获取和知识管理的部分,就作为一个总集篇了。其中,理论的部分,如“费曼学习法”、“卢曼卡片盒笔记法”已经有很多很好的介绍文章,不再花篇幅介绍了,而更多的是阐述我使用的软件工具实践,希望能够对大家有所帮助。
信息获取与管理
不知道从什么时候起,其实能很明显感受到自己对网络世界信息的依赖。可能有别于游戏瘾或是经常被诟病的短视频算法鸦片,我的这种依赖并不是机械性地刷刷刷,或是面对焦虑时的逃避,而是一种对于信息获取的渴求,甚至内化为了一种生活方式。因为我对自己的信息筛选和消化能力颇有信心,所以其实一直以来没有在输入源和整理上花太多的心思。
而随着自己接触和感兴趣的领域越来越多,信息不断积累,有时候仅仅是浏览和通读都已经有些超过了记忆负荷,并且这些信息常常也零散地留在我的笔记或是脑海的某个角落中,并没有成为内化的一部分,以后也很难记起或是检索,于是重新对自己的信息获取方式进行了梳理。
信息源分类
我的信息来源按照大类可以分为以下几类:
- 随机想法
- 信息流
- 聚焦阅读
随机想法
在日常生活、工作、学习或是什么任意的时刻,我有时候会萌生一些随机的想法,这些想法和当前所做的事并不相关或是天马行空,但也许会在未来的某个时刻被用到。因为我大部分时间都不会离开电脑太远,我通常会记录 Logseq 的 Journal 中,有时可能会临时发在一个只有自己一个人的微信群中或是 Telegram 的 Saved Message 中,后续再补充上去。
信息流
我每天从起床开始就会被来自各个平台的信息流所裹挟,依赖于网络世界其实最难免的是与社交媒体与算法的抗争,一方面是要避免自己被过载的贩卖焦虑的信息或是熟人社交圈的“Peer Pressure”所困扰,另一方面也需要警惕算法所构造的信息茧房。实话说这一点挺难做到,即使自己多少算是具备一些克制和过滤信息的能力并有意识在这样做,但依然难以避免被其所扰乱思绪或是引导。
我最后采取了一种简单却也行之有效的方式 —— 关闭微信朋友圈入口与大部分软件通知提醒,并且把大部分不带社交属性而仅仅是用于信息获取的平台(如 B 站、微博等)的关注数量控制在 100 以内,如果新增则筛选优化之前的关注,减少无关内容的干扰。在完成上述行为的基础上,我使用 RSS 订阅这一似乎有些古早的方式,但是仅订阅了不到 50 个网站,其中大部分是博客或是个人网站,且会定期筛选,减少自己每天的 feeds,但几乎在这一 feeds list 中的文章都会扫一下标题或初步浏览一下。
这一点我最开始是自己搭建了 Miniflux 服务来抓取,并且用一个 RSS-to-Telegram-Bot 来推送提醒的,而最近开始使用 Readwise Reader 后,由于体验很好,便把这一部分迁移过来了。我使用的是 Readwise Reader 内置的一种管理模式,分为三类:
- Later
- Shortlist
- Archive
我会每天扫描一下 Feeds 面板,扫到感兴趣的文章会加入到 Later 中,作为一个稍后读,当然,就以前的经验来说,稍后读放久了常常会变成“稍后也不读”,所以我在筛选时非常克制,仅将很感兴趣且有时间后马上会读的文章加入,并要求自己在晚上的时候清理 Later 列表。
而我们也会在社交媒体互联网的各个角落被推送到一些信息,其中我尤其在意的是这几类:
- 感兴趣的一些观点/推文 threads
- 感兴趣的文章
- 有用的资源
如果是一些比较有意思的观点或是评论,我通常并不会加入软件的对应 List、收藏夹等,而是会复制其内容到 Logseq 的 Journal 中并打上对应 tag,其实这一步很多软件(包括 Readwise Reader)提供了推特 threads 保留或是其他的一些更方便保存推文的方式,但我倾向于自己复制和整理,以几句话的方式记录下来而不是仅仅存一个链接,这样似乎刻意增加的步骤会让我多一步审视这些观点,避免被强引导性或是情绪化的观点所影响,也更有益于自己消化信息并内化为自己的想法。
如果是自己感兴趣的一些文章,则会通过 Readwise 的 Chrome 插件进行阅读或保存。这部分我给自己的要求是每篇文章都要打上标签和 notes,notes 中主要描述为什么要读这篇文章。
其中如果仅仅是需要泛读或是获取信息的一些文章,我会加入 Later 列表,而精读的我则是会加入 Shortlist,并且必须要对其中一些有意义的话加 highlights,也尽量对 highlights 加上自己的一些评价和想法,这些都可以在插件中直接操作,很方便。
而如果是一些有用的网站、文档、代码、软件或是其他资源类的信息,我会使用 Pinboard,一个很古早但是很好用的书签管理工具来保存,同样是用浏览器插件进行保存,也会打上标签和简单的描述,大概一年左右了我积累了 455 个书签,其中大部分我都能够通过 tag 和名称在需要用的时候快速检索到。
而像是视频网站等我更多还是使用点赞或是收藏的方式,一方面对创作者表示支持,另一方面也通过一些自动化工具同步到我的 Telegram 个人频道「Yu's Life」,并标记上对应 tag,但大多视频的信息效率并不高,所以更多是一些有趣的或是探索向的。
聚焦阅读
除了上述这些被动推送的一些信息流外,其实我们也还会有很多特定主题或是与自己的领域强相关的一些信息需求,这需要我们去主动阅读一些书籍、报告等。
这一部分我原本更多是使用 kindle 或阅读纸质书,并手动在 Logseq 进行一些记录。但是在 Randy 推出 Notepal 工具后,我开始使用微信读书,它本身有很多可阅读的书籍资源,并且我也用它导入 mobi 或是 epub 格式的一些书籍,阅读体验感还不错。
并且也很方便做一些笔记和标注,由于全平台同步,可以很方便地定期通过 Notepal 浏览器插件同步到 Readwise 中,效果也很好(上图就是同步过来的),这样也更有动力在碎片的一些时间里阅读一些书籍。
信息管理
上一节我对信息获取的渠道和系统进行了一些梳理,但这些依然还是零散的信息,如果要让它们成为自己知识和思考的一部分,依然需要更多整理、消化与沉淀的过程。但涉及那么多平台,搜索和整理并不方便,也比较难建立起信息之间的关联,受正在读的这本「Building a Second Brain」 启发,我主要做了如下两点:
- 借鉴和改造了 P.A.R.A 作为自己的全局 Tag 分类系统
- 使用 Logseq 和 Heptabase 构建 Second Brain
全局 Tag 系统
其中 P.A.R.A 是作者所提出的一个框架,分别是:
- Projects,正在做的项目相关
- Areas,特定领域
- Resources,未来可能会用到的资源
- Archives,已完成的项目
我在这四个的类型的基础上增加了一个「Thoughts」,用于归类我的一些随机的想法。
我的实现思路是把这五个类型作为我的全局一级 Tag,而更具体的一些项目、领域、行业可作为二级、三级 Tag,例如 Projects/writing/pkm
,Areas/blockchain
,Thoughts/weekly-review
等,Logseq 提供了很强大的多层 Tag 系统,会自动根据 /
进行分层,便于检索,分类也一目了然,我把之前现有的一些 Tag 修改后效果如下:
基于 Heptabase + Logseq 的 Second Brain
我之前一直都是使用 Logseq 作为自己的知识管理系统的,最近看到了 P.J. Wu 吳秉儒 入职 Heptabase,对这一平台有了更多了解,于是将其纳入自己的知识管理系统,和 Logseq 双刀流共同构建自己的第二大脑。只要因循上文所说的 Tag 系统,两个平台之间并不需要额外的关联便可以各司其职地进行信息管理。
其中,Logseq 作为兼具简单任务管理和双向链接的笔记系统,非常适合沉淀我上述的这些信息流和一些自己阅读后产出的初步想法,如高亮、评论 notes 等,由于 Logseq 有 Readwise 官方插件,可以很方便地将我在微信读书和网络文章中的高亮和笔记自动同步为 Logseq 的 pages,并通过时间与 Journal 关联,这样我在每天/每周写一些回顾时能很直观地看到我过去的阅读和想法,如上文就是我在阅读 枫影 Justin Yan 的这篇「每个人每天都只有 24 小时,希望我的选择真的是我的选择」时在他的网站上使用 Readwise Chrome 插件做的一些高亮和笔记,自动同步到了 Logseq 中,并根据我的配置打上了一些 tag 与属性。
Logseq 很适合做一些信息整理和回顾,但当我要对某个领域/概念进行调研、阅读书籍整理脉络或是输出一篇博客文章时就显得稍稍有些单薄,它的信息以 block 为单位散落在每一天的 Journal 中,通过双向链接或是 tag 进行关联跳转,不方便进行一些直接的可视化关联,也需要自己对在前期就对关键词和 tag 做到足够清晰,依然有一些心智负担,所以这一部分我使用 Heptabase 来进行管理。
Heptabase 可以看作是一个功能完善的白板笔记工具, P.J. Wu 吳秉儒 有很多关于 Heptabase 的高质量介绍文章,可以阅读了解一下。简单来说,它主要分为以下三个层级:
- Map
- Whiteboard
- Card
其中 Map 可以看作是我们 Second Brain 的整个空间,里面可以装各种白板,我建立了五个白板来作为第一层级 Tag。
卡片代表的是我们脑中的一个个想法或是一些独立的信息点,我们可以通过卡片与卡片的关联,白板与卡片之间的层级来组织我们知识。
当我在写 Foundry 智能合约开发框架的教程时,我首先把一些零散的知识点或是实践中遇到的一些经验、教训以一个个白板平铺在 Foundy 的白板上(其为 Projects
- Blockchain
- Smart Contract
下的第四级子白板),当某个知识点已经足够多时,我会把白板之间再作一些 Section 分组、画线关联等。
其中它还提供了原生与 Readwise 的集成,可以在右侧边栏直接选择 Readwise 中我们对某些文章、书籍的一些 highlights 与 notes 作为卡片直接引入到白板中,为它们建立一些关联,很像我们人脑整理零散信息或是头脑风暴的过程,完美符合了我的需求。
我目前还会用它做一些旅行攻略,把从小红书和其他人的攻略帖中的信息点作为一个个 card 放在旅行规划的白板中,然后再通过关联和分组进行整理,很规整。
信息输出
而我的输出则主要包含以下几个部分:
- 笔记/观点/日常
- 长文
- 主题研究
- 信息流
笔记/观点/日常
其中 Twitter 「pseudo_yu」是我最主要的无结构化的信息输出渠道,有时候是一些关于新技术的想法、关于工作的感受、与朋友相见的心情或是一张可爱的猫猫图,都构成了我输出,也对应着我输入中那些随机想法的快速产出。
其中,Twitter 上认识的朋友也给我带来了很多温暖。
长文
而我最重要的输出平台是个人博客「Pseudoyu」,目前周报是我的主要出口,偶尔也会有一些主题或专题性的关于技术或是效率工具的博文。
主题研究
输出一篇博文由于要考虑到受众、言辞表述与完整性等,其实有一定的心智负担,且周期较长,而我在进行特定领域的主题研究过程中大多把学习资料和一些 Demo 放在 GitHub 仓库中或是 Logseq 的某个笔记角落,有时候时间久了就得要重新学习了。而我现在更多放在 Heptabase 的一个白板里,能够存放很多小的知识点并且在后续的创作中再进一步归纳和精炼,所以其实可以在初具框架后把这个白板共享出来,可以与更多人进行交流,也能对同样在学习的朋友有所帮助。
信息流输出
我搭建了一个自己的 n8n 同步服务,采集我零散在各个平台的信息输入输出,并且还会将我对电影、书籍的观后感以及自己其他一些所思所想发在自己的 Telegram 频道「Yu's Life」里。也关注了一些频道和群组获取一些资讯或是认识一些志同道合的人,偶尔会手动转发,主要同步以下几个平台:
- Blog,现在更像是一种生活日志。
- YouTube,也是重度用户了,看技术相关教程和数码资讯比较多,偶尔也有很多好玩的内容。
- Bilibili,主要保留了自己这么多年一直在关注的一些博主,看旅拍比较多,只看动态不看首页和热门。
- Pinboard,书签和网站保存管理工具,重度依赖了。
- Instapaper,管理稍后读,主要是一些精品或是长文的保存。
- GitHub,也是日常刷了,看一些好的项目,也用列表在管理 Star。
- Spotify,好听的歌会标注一下。
- 豆瓣,记录自己的书籍、剧集、电影、动漫和游戏,也是重度使用了,也在尝试每一个看过/玩过的作品都写一下自己的评价。
数据备份
虽然像是 Twitter、Telegram 已经是比较大的平台,但毕竟是中心化的产物,再加上最近的各种风波,对于自己这些信息源的归集总是不放心 Telegram 作为最终站,尤其是我常常在删消息时差点误点删除全部(奇怪的交互体验),所以信息的同步导出部分也是很重要一环,我使用 Crossbell 生态下的 xLog 与 xSync 服务进行我的博客与各平台信息的链上备份。
xLog
视觉效果和体验感都不错,且基于 Crossbell 地址能够很方便地进行 follow 和评论,包含了 NFT 展示柜、个人作品集等功能,这是我的 xLog 访问地址,有兴趣的朋友们也可以关注一下,不过目前出于定制化程度、各种历史文章迁移路由问题、自己各项数据统计服务变动等考虑,还是更多作为一个同步分发渠道。
xSync
xSync 能够同步 Twitter、Telegram Channel 等平台,不需要做任何侵入式改造就能把我的聚合频道作再一次备份与存档,后续可以通过 xChar 来查看自己的各项消息了,很完美的解决方案,这是我的 xChar 个人主页: xChar,也可以通过 xFeed 查看我的信息流。
总结
it is probably a mistake, in the end, to ask software to improve our thinking.
Casey Newton 在最近的一篇「Why note-taking apps don’t make us smarter」中如是说。确实,这些系统或是工具软件其实终究只能辅助我们进行信息管理和输出,并不能代替我们思考,但构建知识管理系统在取悦自己的同时,也能够让思考变得更加高效,悦己才能达人,从而产出更有价值的输出。
希望这篇文章能够对大家有所帮助。
周报 #45 - 读书笔记、知识管理与双城生活
前言
本篇是对 2023-08-16
到 2023-09-04
这几周生活的记录与思考。
不知不觉竟又是两三周过去了,于是只好安慰自己说每篇向前平移一周很快就能恢复周更了。不过这几周倒也不是在摆烂,读了一些书,看了几篇对我影响很大的文章;参加了一些有趣的活动,折腾了很多有意思的事;重新搭建好了自己的一套知识管理系统,本职与额外兴趣部分的工作也都有序进行中;还有很多有意思的事。
个人信息获取与知识管理系统
继「周报 #25 - 基于 Crossbell 的个人信息输出与同步系统(重构)」这篇之后,我对自己的信息输出同步系统一直都还挺满意的,能够从输出反向推动输入,从而增加了更多信息筛选和思考的过程。但就像是那篇里也提到过的,自己对信息源只是做了精简和筛选,配合了一些简单的 tag 系统和有限的双向链接,其实并没有对输入的一些信息做太多消化和思考的沉淀,而在每次写周报或是文章的时候,常常是对着标题进行回忆,不过由于看的时候也大多做了一些思考,一直以来也算不上太费劲的事。
然而随着自己重新捡起了很多之前感兴趣的方向和目标,用于处理和消化这些信息的时间和精力成本也越来越高,又恰逢看到了 P.J. Wu 吳秉儒 入职 Heptabase,于是重温了数月前他的这篇「我的個人知識管理系統」和 Indigo 的这篇「费曼学习法实践 / INDIGO 的信息获取与知识输出方法论」,于是想着再重构一下自己的知识管理系统,尤其是输入端。
这个人怎么天天不好好学习就知道搭各种系统。
最后的效果很令人满意,本来想在这里写一下一些具体细节,没想到却越写越收不住,所以独立在了另一篇「个人信息获取与知识管理系统(Heptabase + Logseq + Readwise)」中。
选择的意义
这两天读了「枫影 Justin Yan」的一篇「每个人每天都只有 24 小时,希望我的选择真的是我的选择」,其中好几次提到了“向内探索、找到想要的东西”这一概念。想到我之前我思考过的“内观与外求”的概念:
我们作为人的关注点往往都分为内在与外在两个方面,相较而言,对外的关注点由于更具刺激性与正反馈而占了绝大部分,而对内在的关注则往往容易被忽略。
外求似乎总能有一些答案,而内观则没有终点。但内求一定是伴随着对自我的剖析与伤害,是更违背自我保护本能和人性的一种行为,曾经很畏惧这一点,也担心永远找不到意义而一直陷入深渊中。但现在看来,其实只要仍然在质疑和思考,那依然一切都是有意义的。反之,如果失去了自己的内核,失去了对自我的好奇与探索的动力,才是最值得恐惧和难以忍受的事。
这种透过社交网络的小孔窥视别人的人生的方式,很容易放大别人的真实经历。
还看到一段对于放大他人的描述,很真实,其实不仅仅网络如此。在大学以及之后很长的一段时间我都很倾向于选择一个当时的崇拜的人去赶超,总觉得他们拥有着自己梦寐以求的东西,而真正所谓的“超过”后却又知道这一切毫无意义,自己所追赶的不过是放大后的影子,而为了填补这种无意义而再不得不再次选择,成为别人终究是一种取巧偷懒的行径,也常常会离真正自己像成为的样子更远。
阅读与读书笔记
这周开始更多地阅读写作,主要在读的书是 Tiago Forte 的 Building a Second Brain,也读了很多文章。其实之前自己不是很注重读书笔记,大多是靠自己在读的时候去更多消化信息,形成自己的内在的想法,这种方式的好处是让自己读的时候会更专注、吸收效率更高,然而其实一直有点忽略了回顾和内化这一部分,随着时间更久地过去其实就不那么容易记忆了。我现在是用微信读书 + Notepal + Readwise 记录自己的标注和对应想法,于此同时,在 Heptabase 和 Logseq 中每本书都会有一个对应页面,用于写一些更 general 或是零散的一些相关的想法,由于是卡片机制,也可以很方便地把那些笔记碎片进行检索和关联。
“当你准备学习一门新知识时,必须站在传授者的立场,假设要向别人讲解这门知识。”
学会输出,激励我们的大脑更多地使用第二种模式:“在不同的概念之间强行建立联系,也是大脑的特长。”
有集中读一些关于信息获取与知识管理的,也再次强化了费曼学习法的概念,这个和自己用输出倒逼输入的思路很接近,确实是一直很受用的一种方式,也是看了概念之后才比较深切地意识到原来自己也算是在实践这个概念。
目前的时代下我们信息早就到了过载的程度,Logseq 的双向链接、P.A.R.A. 理论、包括 Heptabase 的白板其实都是在因循人脑的一些思维逻辑来做到这一点。自己的实践其实是把不同的概念和信息点创建为零散的卡片信息,积累足够多后从这些信息点中分模块和整理框架,等框架足够清晰后开始创作文章,而在创作文章的过程中也重新梳理这些知识与它们之间的联系,不仅为了当下的记忆,也益于未来的回溯。正如一句我很喜欢的关于笔记的描述:
Note taking is building a relationship with a future version of yourself.
个人生活剪影
去北京过了一个七夕节,由于有些忙碌,就没出去吃了,学姐做了简餐,生活小小的仪式感了,然后给学姐配了 Apple TV + Surge tvOS 客户端,可以直接在电视上看 YouTube 和 Netflix,很开心了!
待了一周后因为去杭州参加一个朋友主办的 Rust 的活动而匆匆赶回了杭州,也似乎稍稍习惯了往返北京,也过上了“双城记”的生活,心情上也放松了许多,会更乐意参加各种好玩的活动,尝试一些新的事物。
周中还去良渚找大家远程办公,见到了 STRRL、图拉鼎、智子等,都有点小后悔当时没有把房子租在那边了,也太快乐了!
到了杭州才收到学姐送的七夕礼物,一个超级酷的透明充电宝,去远程办公的时候还带去给大家围观(炫耀)了哈哈,感觉像是小时候终于收到自己心爱的玩具的心情。
正在放暑假的妹妹想跟捏捏一起玩,所以就没那么早接回家,回来后依然很黏人。写的时候才突然想到,捏捏陪着我也已经 10 个多月了,时间过的真快,不知不觉也已经一岁多,脱去了一些稚气;但时间过得也慢,似乎接回家时偷偷躲在柜子里不敢出来还是在昨天,一起度过的日子缓慢、静谧而美好。
有趣的事与物
MuChiangMai
申请了 MuChiangMai 活动的 mentor,去活动讲三节 workshop 可以换免费住宿!大概 10 月会去清迈当几周游民了,期待的同时还是对全英讲课有些紧张,还是需要提前准备一下,也是一个新的挑战了。
其他
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- Building a Second Brain,正在基于他的理论构建自己的知识管理系统。
文章
- 一个月不使用社交网络/视频网站 | 报告 · 天仙子
- 优雅使用 Cloudflare WARP 应对 RSSHub 反爬难题 - DIYgod
- 布局坎昆升级,OP 和 ARB 谁是更佳选择? - Mint Ventures
- 我的个人站点就是我的社交网络
- How the iMac saved Apple - The Verge
- 《黑神话:悟空》上手前瞻|IGN 中国
- 個人域名郵箱免費方案 - Just lepture
- Heptabase 介紹 - 以卡片為基礎的強大知識管理工具 - Pin 起來!
- 我的個人知識管理系統 - Pin 起來!
- 两岸猿声啼不住,轻舟已过万重山——我的四分之一人生 - This Cute World
- 25 | Homura's Blog
- 我如何使用 Heptabase 記錄想法和靈感? – 元宇宙
- How Heptabase’s founder use Heptabase for learning, research, planning, and writing | Heptabase Public Wiki
- The 4 Levels of Personal Knowledge Management - Forte Labs
- 有关 TLS/SSL 证书的一切 | 卡瓦邦噶!
- Why note-taking apps don’t make us smarter - The Verge
- 让机器理解世界 / GPT 时代人类再腾飞·译者序
- 每个人每天都只有 24 小时,希望我的选择真的是我的选择 | 枫言枫语
- 费曼学习法实践 / INDIGO 的信息获取与知识输出方法论
视频
- 一个叫猫岛的地方,以后再也没有猫了|盛夏关西
- Learn Solidity, Blockchain Development, & Smart Contracts | Powered By AI - Full Course (0 - 6)
- Learn Solidity, Blockchain Development, & Smart Contracts | Powered By AI - Full Course (7 - 11)
- 300 天 4 万公里传遍中国,漂流相机终于回来了!
- 和 web3 从业者聊聊天#1 | 算法开发在 web3 行业的现状|web3 中有哪些需要算法的业务|chatgpt 带来的影响
- 为了开发完游戏,我们开发了一款游戏?还开业了游戏博物馆?— 这是 Gamker 至今最重要的视频
- 【2023】一个百大 UP 主的创业故事(2)
- 俄罗斯黑客的激荡三十年
- 轻便又好看的复古相机再次杀出,背刺 A7M4?|A7C2 首发评测
- 对话诺兰!导演亲自揭开《奥本海默》的 6 个秘密
- 黑神话悟空的聊天漫谈:媒体对它的看法
- 讨好型人格、对抗型人格、孤僻型人格,你是哪一种?
- 理解商业的十个问题【学会快速调研(下)】
- 《博德之门 3》为什么得是回合制?它热卖有什么意义?【就知道玩游戏 2023】
- 和 web3 从业者聊聊天 #3 | 和巨佬聊天贼有意思|快来围观巨佬长啥样
播客
动漫
- 我推的孩子,补标。新番的时候追番看完的,看了两集就停不下来,很喜欢的节奏和走向,在中间一集模仿爱的那一段的时候整个情绪就起来了,期待下一季了。
剧集
- 漫长的季节,补标,好久之前看的,国产剧常常也有超出我预期的时候,剧情节奏和情绪张力都很足够,一口气看完后还意犹未尽。
- 伪装者,偶尔会在 B 站刷到一些混剪,因为太喜欢琅琊榜那拨演员,几个周末本想当作 BGM 放着了,还被剧情深深吸引了,其实还挺喜欢那个年代和这个题材的,有点很久之前玩的《隐形守护者》的感觉,但明显自己还是喜欢游戏里庄晓曼和剧里于曼丽这样的设定和性格,所以看到后面还挺痛心和惋惜的。
- 绝世网红,最近折腾了 Apple TV 上直接看奈飞,试验和下饭的时候随手点开的热播,女主风格和穿搭真不错,其他都挺烂的。
- 走进比尔:解码比尔·盖茨,恢复了中午吃饭的时候看纪录片的习惯,随手打开的,原以为会是讲述他的辉煌历史和微软帝国,然而讲到了很多关于贫穷、慈善、破碎的友情、日常生活,看到这一面还是挺意外的,整体还挺值得一看的。
周报 #44 - 静寂工人、xLog 与日常
前言
本篇是对 2023-07-11
到 2023-08-15
这几周生活的记录与思考。
停滞了将近一个月,再打开周报文档的时候也有了些许陌生感。其实积攒了很多想写的主题,也有很多想说的话,尽管输出变少了,分享欲并未因为生活状态的改变消减,却蔓延在静水流深的日常中。在渐渐习惯了新的生活节奏后,也逐渐开始调整(填补)年初制定的一些计划,周报和博客文章也开始继续更新。
静寂工人
一个周末去听了一席的演讲,有点像是 Ted 的本地化版本,有不少有趣的人,有为了拯救濒危猫头鹰在俄罗斯森林里生活了数年的可爱学者,有探寻山河褶皱残留荒庙的艺术家,自己做书的建筑师...
印象最深也最喜欢的是一位专注于“寻短”的心理咨询师魏明毅老师,现场买了书也找作者签了名,这周挺集中地看完了。很喜欢她“人类学学徒”的自称,深入被台湾基隆码头辉煌年代所驱逐与禁锢的一群工人,与他们同行,理解他们的内心世界与生活的视角。全书其实没有多少去渲染什么苦难,他们辉煌过也经历了被时代抛弃的没落,比起很多真正的难以温饱的群体来说还相距甚远。
但震撼的是这一群人似乎仅仅在几年间就因为政治/经济方向的一些变动而迅速被遗忘,似乎那段“不夜城”的岁月从未属于过他们,而他们却要花上大半辈子的时间去让社会重新接受自己,同时,也要重新认识自己,对外界而言,他们似乎只是“不够努力”而被抛弃的一群“没用”的人,没有人认真倾听过他们的声音,他们也渐渐学会了沉默。
历史总是在以自己(或是某些政治用意)的标准来决定哪些应该被记录下来,他们就是被略过的笔墨,然而真正的历史感往往在史料之外,那些被掩埋的记忆。我们现今的时代也如是,有了太多不可说不可议的东西,那些反而才是真正的时代的声音。
笔触让我想到之前看过的一部台湾电影《阳光普照》,许多对话、独白和长镜头,就像是像把很多生活的痕迹原样地展现出来,大概也是台湾特有的风格,娓娓道来。对台湾的一些生活方式和时代特色有了很多兴趣,接下来想去看一部之前很早就想看的剧《做工的人》。
会对这一点尤其感兴趣也是因为在我初高中的时光里因为我爸的工作原因,有过跟他的几个学徒住过员工宿舍的经历。那时的室友哥哥们大多没念/没念完高中就到异乡拼搏,想学一门技术在异乡谋求一席之地。
在智能手机和短视频还并不流行的那个时代,也许是因为晚上的时间太过漫长,下班后的他们总是需要找一个地方消磨时光,我也曾有几次被带入他们的生活圈子,有时会去室内轮滑场玩上几个小时,有时会在某个热闹广场的一角聊聊天,也有时候仅仅是在房间里用着老式 DVD 一起看一晚上奥特曼。那时候的我还很小,跟他们的相处和交流自然算不上深入,后续随着各种变动也不再有联系。
十几年后的现在想想,他们当时也只是十八九岁,却似乎有着超过他们年龄的成熟感,他们在很小的年纪就需要在这个热闹城市里找到自己的位置,却又不得不面临着奔波的生活、孤独感以及和这个社会的疏离感,也许只有夜晚的自由时光才能让他们真正感受到一些属于自己的东西。后来有稍微打听了下他们后来各自的生活,有的回老家了,做一些小小的事业;有的继续在杭州打拼,换了一个又一个地方,似乎也还是没能实现自己想要的生活。就像书中描述的那样,他们并不会去指责这个时代,而是更多将生活中不满的部分归咎于自己,仅此而已。
个人生活剪影
妹妹放暑假了,于是来北京玩了,和学姐一起去了环球影城,尽管是暑假的周末,但也没想象得那么拥挤。
几个热门的项目都有玩到,在「哈利·波特禁忌之旅」项目时眼镜飞了,至今还没找回来,于是去眼镜城配了一副,大概来到魔法世界总得留下些什么吧。
其他的就是静水流深的日常,缓慢却也美好。有一起见了赴京考察的亮亮和其他老师,聊到了挺多之前的事;会偶尔去探索一些街头巷尾的馆子,也会在工作日的晚上去雍和宫听民谣,热闹中找到片刻歇息;还会在远程办公的间隙接送学姐上下班,等候的间隙跟门口的保安小哥聊聊天...
大约是心境有了些变化,生活状态和看待生活的心情也有了许多改变,很难确切形容,大体是充满了更多美好和善意了吧。
也好久没晒过捏捏的日常了,现在毛越来越厚重,可能下周会带去洗个澡梳理一下毛。
有趣的事与物
xLog
xLog 目前是我自己博客的主要同步和备份平台,由于舍不得之前的数据统计和 Cusdis 积累的评论,一直还没办法整个迁移过去,最新推出了「作品集」功能后,配合着 xSync, xFeed 和 xChar 倒是很好地成为了我的个人 Profile 页面,也是越来越依赖了。
这是我的作品集页面:xlog.pseudoyu.com/portfolios
之前学姐的博客一直使用的是 Hashnode 平台,也算是简易好用的平台,但随着 xLog 功能的更迭和给予创作者的自由度,我还是把它迁移了过来,除了领取 CSB Token 以外,onboarding 体验已经很好了,绑定域名和 umami 解析这些也很方便,建议想拥有自己博客的朋友可以尝试一下。
这是学姐的博客:boyilu.com
迁移和编辑过程中也都再重新读了一遍,依然觉得文字是我所能想到的了解和慢慢靠近一个人最舒适也最温暖的方式了。
个人信息流同步系统
由于 Railway 在 8.1 正式关闭了 Free Plan,n8n 同步系统停了两天,调研了一番后来还是在自己的 vps 上用 docker 运行了(一台搬瓦工的 ThePlan,2c2g,配合 NginxProxyManager 进行反向代理,跑了我大部分需要数据持久化的服务),顺便更新了一下版本,继续进行同步啦。
截至写周报的时候 Telegram 频道已经有了 536 subscribers,渐渐地也形成了自己输入输出的习惯模式,Twitter(现在可能得叫 X 了)虽然渐渐用得少了,也到了 2000+ fo,也算是个小里程碑了。
开源预算
在之前的一篇周报「周报 #30 - 开源预算、写作初心与对技术的谦卑」中提到过这样一段:
在 Randy 的一篇文章『我给自己设立了每月 $20 的开源捐赠预算』中看到他对于开源项目的理念与态度,觉得很有意思,也引发了我想为自己也设立一个同样的开源预算的想法。目前的设定是每月至少 $20(约 130 元人民币)或等价值的预算,根据自己的日常使用与技术栈灵活选择,我会选择以下项目进行捐赠:
- 对我有启发的独立博客作者与开发者
- 我在做 side projects 时常用且解决了很切实问题的项目
- 我高频使用的一些有趣的开源工具与服务
之前固定给 reorx 在 GitHub Sponsor 赞助,这个月在 Randy 发布了 Cusdis Pro 和 Notepal 之后开始给 Randy 赞助。
💖 I'm sponsoring @randyloop for his passion and dedication to open-source. His products, blogs and podcasts really bring inspiration to my growth as a programmer and life learner.
Nuphy
自己偶尔会写一些效率工具类的文章,没想到因此被 Nuphy 官方联系送测了 Nuphy Air60 键盘,轻便且颜值高,打算外出都带它了。
其他
感觉还发生了很多好玩的事,却因为堆积到月的维度而一时难以都想起来,开始集中冲刺学日语,在出一套教程以及很多想写的文章主题,希望后续能够慢慢补坑。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 世界尽头与冷酷仙境,描述得很美,主人公的视角有一种我很喜欢的与世界的疏离感,结局也冷静而不失意外。但是很可惜的是这本书分了好几个月且几乎都是在飞机或是高铁上读的,加上平行的两条世界线的设定,在剧情上断续感很强,也许有机会可以再好好读一遍。
- 静寂工人,有挺多感想的,写在第一部分了。
文章
- Local-first software: You own your data, in spite of the cloud
- 一个独立创造者的五年
- Borg, Omega, and Kubernetes - ACM Queue
- The Modular World
- 对 Newsletter 说不 - DIYgod
- 如何复刻本网站,零氪快速建博客 | Cali Castle
- 《平台工人》丨青山资本 2023 年中消费报告
- AI 正在杀死网络, 相对失败与成长, 纯文本 -#39
- 让玄学可靠:构建复杂 LLM 应用
- 穿透 Web3
- Go 工程化(二) 项目目录结构
- The past is not true | Derek Sivers
- 发布一年多,终于入手了 Steam Deck
- Hashing
- 向量数据库
- 到底是谁的成就感 - Fulfillment Of Platforms
- Thinking something nice about someone? Tell them. | Derek Sivers
- 数据库碎碎念 - 知乎
- A Beginner’s Guide to Docker Networking – Collabnix
- Wireshark 常用功能笔记 | NoPanic
- 开发一个浏览器插件在第三天卖出 1000 元 | Randy's Blog
- ChromeOS is splitting the browser from the OS, getting more Linux-y | Ars Technica
- The Reluctant Sysadmin's Guide to Securing a Linux Server
- 掘力计划第 20 期:Tw93 Pake —— 利用 Rust 轻松构建跨端轻量级应用 - 掘金
- 账户抽象:链接 Web3 和 Web2
- Pake - 利用 Rust 轻松构建轻量级应用 - Tw93
- 使用 Zeabur 构建我的 n8n 赛博空间 | 今是昨非
- 创造了不起丨 TiKV Committer 的最快养成方法 - 知乎
- 在博客融入一个跨平台作品集 - DIYgod
- 全链游戏-重新定义游戏服务端 — dashuo
- 运动 | 有哪些事是学拳击以后才知道的?
- 运动 | 攀岩手记
- 观影|Tercett – Zsigmond Móricz’s Women
- 十斤糖炒栗子那么爱
- 快乐的甲板
- YC's essential startup advice : YC Startup Library | Y Combinator
视频
记录一下看过的有意思的视频:
- ClippyGPT - How I Built Supabase’s OpenAI Doc Search (Embeddings)
- How to create an OpenAI Q&A bot with ChatGPT API + embeddings
- 入门到毕业,一台全搞定!拍照视频两不误|a6700 全新评测
- 月融资 1.6 亿美元!大模型带火的新风口,竟然是它?| 向量数据库爆火背后的逻辑
- 【硬核】苹果海外千亿税款如何避税 | 欧美政府税收反击战
- 对抗孤独需要肤浅朋友,不要什么精神之交
- 一个小时调研全新领域,能了解到什么程度?
- 北京 City walk:属于老北京的童年记忆,在城南找到了
- 带没去过漫展的 UP 逛 BW,是怎样一种体验?
- 有被卷到!剪映——更适合中国人体质的剪辑软件
- 实录对比丨谁是影响听歌音质的最大因素?
- 致敬新海诚|打开往门,奔赴三年之约【关西旅拍】
- 离谱!Apple TV 也能当软路由?!
- 面试必备!每个人都应该掌握的快速调研法
- 90%的摄影师从来都没思考过的问题!每天发作品发了个寂寞!
- 都是演的?!旅拍 UP 主吐槽大会
- b 站千万播放的“三年动画”什么水平?大佬:有点东西
- 博得之門 Baldur's Gate》為何被稱為傳奇?它復活的意義?【就知道玩遊戲 65】
播客
- ActivityPub is the next big thing in social
- Vol. 94 是光诗歌: 用诗歌发现大山孩子手里的光
- 编码人声:面向 AI 的新编程范式
- 第 4 集 |「捕蛇者说」的起源、做公益、如何保存数字遗产、遇到过的名人,清华和二本
音乐
剧集
- 东京爱情故事,重温。
- 伪装者,因为还是挺喜欢琅琊榜的这一波人,mark 了很久,找了个周末集中看了下
周报 #43 - In the Mood for Love
前言
本篇是对 2023-06-22
到 2023-07-10
这几周生活的记录与思考。
过去的几周漫长却也短暂,发生了很多事,有很多想说的话,屡屡想要下笔,似乎却总有一些心底的声音在阻止着自己,似乎一切都还没准备好,想要好好讲一个故事,却有些无从开口。
直到今天的深夜在 Spotify 的 Discover Weekly 推荐中听到了 HIGH4&IU 的一首《Not Spring, Love, or Cherry Blossoms(除了春天、爱情和樱花)》,心绪就像是之前听到五月天的《温柔》中的那句“走在风中 今天阳光 突然好温柔”一样,被轻轻触碰到了。
季节不算应景,歌词也难说有太贴切的部分,只是总有这样的几首歌能够在某个时刻与自己的心绪紧紧地相连,即使只是前奏也让我的心情随之律动。于是匆匆打开早已建好却空白着的博客文档,写下了这个标题,想在这个承载了我太多太多经历和情感的地方,悄悄地写下:
“我恋爱了。”
In the Mood for Love
就像上一篇《周报 #42 - 感情观、生活状态与自我》中所提到的那样,我很难觉得自己对于感情是做了万全的准备的,许多情绪或许已经缓解却尚未沉淀,许多感情观的部分虽有意识到却依然没能好好整理,自我还有非常多的部分需要去了解和克服。
然而,有时候生活就像是《命运石之门》中世界线的交错和收束那样错综复杂却也有迹可循。
月中去了一趟北京参加 Gopher China 2023 会议,因为算是忙里偷闲,并未安排什么特别的行程,只是想着难得返京,多逗留了几日,选择了靠近 boyi 学姐家附近的一家酒店住下了。下班后的生活也现充了许多,会去门口的日料店吃饭聊天,会步行着几公里去听音乐会,也偶尔去清吧小酌&画画。
也许是因为习惯甚至眷恋上了这几天的日常,当离开的行程将近而学姐说突然有工作安排要去上海出差时,我几乎是毫不犹豫(甚至像是抓住了救命稻草一样)说出了那句:
“那我陪你去吧。”
我大抵是算不上一个宿命论的人的,经历了一些事后也有些难以再笃信什么缘分天定,也许没有这次选择、这句话,世界线会照着原有的轨迹运行着,也许会在未来的某个时刻再次收束,也许不会。所幸如此。
尽管上海之行仅有短短两天,变化却悄然在发生,情愫在心中肆意生长、蔓延。我们在外滩走走停停,猜着对面高楼或是游船上的字;明明有伞却在骤雨中淋着、笑着,像是长不大的两个人。
从虹桥各自离开的时候其实都明白再也没办法维持着原本那样的心照不宣,然而我却还是害怕了、退缩了、逃避了。
“害怕自己萌生的情感,既怕糟糕的自己没办法承载这样复杂的关系,又怕自己贪恋一时欢喜的口是心非。”
这大概就是我此前状态最真实的写照。
回去的第一周双方各自冷静,挣扎而痛苦。我和亲人挚友聊至拂晓,试图转移注意力不再被远方的存在所牵动心绪,却发现不过是徒劳与自欺欺人。每天似乎都还在原有的生活轨迹中,却早已乱了心绪,会因为学姐发了一片好看的云而欣喜一整晚,也会因为一句略带客气的语气而伤心一整天。
于是偷偷定了去北京的车票,踏着六月的尾巴带着花出现在了学姐的家门前,忐忑、胆怯却也期待着,因为紧张到说不出话而要了威士忌壮胆(不知不觉喝了大半瓶),由于担心已经半醉的自己没能好好确认心意,而当着面在微信上发出了那句“学姐,我喜欢你”。
然后,我恋爱了。
除了春天、爱情和樱花
恋爱对于自己又变为了一件很没有实感的事,快乐之余自己似乎才开始慢慢思考,我们之间是基于什么呢?
喜欢的情绪自不必多说,新鲜感、好奇心虽美好却常常也难长久,那还剩下什么呢?
因为一个混剪视频《怀旧混剪|漂流都市的我们,是否仰望同一片星空》想到了《东京爱情故事》中的莉香所说的一段话:
"世界上一定有很多像我这样的人,孤单地独来独往。但大家仰望的都是同一片星空。"
我想,这大概就是我此刻的想法吧。
想起当初刚认识不久却要送别她离开时发的一条微博,明明自己不算是那么善于面对面跟他人表达自己心绪的这样一个人,却很真切地记得在那个暴雨的夜晚自己被学姐的话戳中而慌忙转头掩饰泪水的瞬间,这几句话也记了许多年。大概那一刻的自己感受到了共鸣的部分的,同样地四处漂泊,同样地故作坚强与洒脱,却又被一些小到不能再小的事而触动,不知所措。
每个人都是独立的个体,我很难成为也并不愿意把另一个人作为自己的星星/精神依靠,但也许,我们可以一起仰望同一片星空,在被熙攘的人群和蔓延的街灯虚晃了双眼时,静静牵住对方的手。
个人生活剪影
这几周生活上最大的变动是开始每天跑步了,使用 yihong0618 的「GitHub - running_page」还在持续养成习惯,也坚持了每天 7 点多起来,确实感觉世界都不一样了。
其他还有挺多想说的事,之后吧。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
书籍
- 鲁迅杂文集,读者 & 朋友 Junjie 寄给我的书,早上跑完步会慢慢翻阅一下。
文章
- Uniswap 进化史:V4 的机会和影响
- 聊聊公益和助学 | Manjusaka
- 我们团队的 AI 实践:探索过去几个月的时髦科技 | 歌词经理
- 溜达后的一点回顾 | 默默小屋
- 令人劝退的自我介绍 | Homura's Blog
- 新鲜感,占有欲,喜欢,爱 | 默默小屋
- 在清迈冥想学习 7 天后,我不再「追求」幸福
- React 还是 Vue?我对 Web 前端现状的看法 | Cali Castle
- libvips, CGO 与 purego——如何让 Go 应用跨平台编译运行 - WebP Cloud Services Blog
- The Solidity Events Guide I Wish I Had — spacesailor
- 回形针解散两年了,他们怎么样了? - 草台班子
- 专访|RSS3 创始人 Joshua 谈 AI&Web3 创业启示: 趋势无法预测,坚持做正确的事
- ERC-6551 详解 — xyyme.eth
- How to pass any first-round interview (even in a terrible talent market)
- 答案在代码中:“实现需求”的双重含义 | Piglei
- Tutorial: Identicon generator in Go - Bart Fokker
- 一种实用新型 Obsidian 实践之构建我的第二大脑 🧠 - 林宜丙的博客
视频
记录一下看过的有意思的视频:
- 26 岁的我,拯救了 8 年后的自己...
- 用 30 分钟说清楚 B 站引入播放分钟数背后的心思
- 以前收藏的老文艺片
- 怀旧混剪|漂流都市的我们,仰望同一片星空
- A New HOPE (2022): ActivityPub Four Years Later: The Good, the Bad, and the Fedi
- ActivityPub, the Fediverse and Decentralized IDs
- UP 主转行,山顶开了家咖啡店,赚翻了!
- 官方开作弊“毁”游戏《王国之泪》游戏鉴赏【就知道玩游戏 2023】
- 这些知名 UP 主今年最喜欢的歌竟然是..?
- 《黑暗的心》那些教育我的最好的品质,却让我跟时代格格不入
- Tailwind Connect 2023 — Keynote
播客
音乐
- カタオモイ by Aimer
- Ashita Harerukana [2022 Remaster] by Keisuke Kuwata
- 空も飛べるはず by SPITZ
- そばにいるね by Thelma Aoyama
- 特別的人 by Khalil Fong
- Would That I by Hozier
- Not Spring, Love, or Cherry Blossoms by HIGH4
剧集
- 黑镜 第六季,失望。看之前还是抱有不少的期待,第一集觉得有些平但是创意尚可,没想到已经是巅峰了,莫名地感觉很商业。相比之下,第一二季的很多剧情即使放到多年后的现在依然不过时甚至前瞻。
电影
- 某个男人,其实还挺想为这部电影写个影评的,但似乎又看的不够深,还会重温一下吧。
- 消失的她,感觉近一年里难得第一次影院看的电影,有点一言难尽,逻辑和节奏都有点剥离感。
周报 #42 - 感情观、生活状态与自我
前言
本篇是对 2023-06-13
到 2023-06-21
这周生活的记录与思考。
这周奔波了很多地方,也有了一些心绪上的波动,回来后也有些琐碎的事在忙碌,以至于到了现在才真正下笔写下这篇周报。
回北京的前司见了下曾经的 leader 们,聊了很多,关于 web3、AI 和很多技术问题;和老同事们聚餐,把酒言欢,聊着不同轨迹的生活方式与心境;参加了一次 Drink & Draw 活动,新奇而惬意;和恰巧出差的 Boyi 学姐又一起经历了一趟上海之旅,熟悉且珍贵;周六参加了 HZLUG,面基了很多推上仰慕已久的开发者们;还有很多有意思的事。
另外,换了首歌,是五月天的《温柔》。
感情观
其实在早些篇的周报里常常提到感情,像是一个情绪的宣泄之地,而随着自己的生活重心逐渐偏移,便走向了另一个极端,开始只字不提。
直到生日总结时,因为不得不去回忆过去一年中无法绕过的这段至暗时刻,才又重新捡起了一些记忆。前几天和倪聊到时,才开始意识到,其实自己走不出的只是记忆和自以为的无疾而终所造成的不解和所谓伤害,而并不是一个具象的人,甚至不是一段具体的感情。
其实明知道不论要走出还是重新整理自己的生活,是需要直面这些经历并梳理内化为自己的感情观的,但是自己取巧地选择了搁置,甚至像是沉浸在一种自我欺骗的状态中,不愿意去面对和思考,只是告诉自己,“才一年过去了而已,不急”,可能人终究还是爱自己多一些吧,情愿本能地自我保护。
一次算不上意料之外的对话,让我意识到了这种自欺欺人,也发觉自己已经逐渐在丧失面对感情的勇气了;感情思绪理不清,甚至乱到难以分辨;也在害怕自己萌生的情感,既怕糟糕的自己没办法承载这样复杂的关系,又怕自己贪恋一时欢喜的口是心非。
人不管在任何阶段需要克服的也许都是自我吧,大概真的是需要一段时间来重新整理自己的感情观了,重新认识自己,重新出发。
生活状态
其实生活状态也一样,原以为远程办公多了很多时间的自己能够用多出来的时间去调整作息、去注重健康或是去做更多想做的事,但是很多的时候还是把心思和时间都放在了工作和一些学习上,倒不是自己在卷什么,只是好像对于自己生活的其他方面常常是持有一种不太在意的态度,对于自己的生活有一种置身事外的旁观。
随着想把自己的生活与周遭的一切回到正轨,也开始像是遵从一句“每天遛一下自己”的玩笑话一样,重新注重睡眠,早起跑步,重新整理了自己的书单、跑完回来后看上几页。
第二天的清晨走到河边的古镇街区,看着细碎的阳光透着枝叶缝隙浅浅洒在地面时,发觉拍下一张照片后难以抑制的分享欲时,似乎渐渐又重新抓住了一些早已陌生的对生活本身的期待,心之所向,素履以往。
个人生活剪影
第一次去体验了一场 Drink & Draw,虽然我在现场只会 Drink,挺有趣的体验,台上有模特在构筑各种场景,台下许多热爱画画的人在沉浸其中,有的寥寥几笔已经出了神韵,有的则是一笔一笔自己描摹,而我则是在一旁观察着,似乎也能找到一些平静。
上海已经去过挺多次,所以没留下什么照片,只是这次还算是挺少有的不赶行程而是随意探索的机会。
受到朋友邀请,周日一早又匆匆赶去上海参加 Rust China Conf 2023,作为一个 Gopher 混入其中,大部分没听懂但是周边是真不错,感觉这几个月从活动拿到的衣服、包、手提袋够我穿到明年了。
还因为朋友介绍很开心地认识了登链社区的「Tiny 熊」老师,最早学链和合约的时候就在登链上看了很多教程,没想到现在能见到且在帮我筹备出一套 Solidity Foundry 框架的视频教程,有点不真实的次元壁打破的感觉。
还有可爱的捏捏!
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- 回到故事的开始:所以什么是 Web3 - Atlas
- 面向 AI 的编程:是时候该坐下来应对不确定性了 | 歌词经理
- 五郎的哲學:不受時間與社會的拘束 - 華華咖啡廳
- Daring Fireball: Not That Kind of 'Open'
- You can't trust Google
视频
记录一下看过的有意思的视频:
播客
音乐
动漫
- 鬼灭之刃 锻刀村篇,啊啊啊啊啊!太好了,弥豆子!大家快去看!
- 我推的孩子,继续追!
剧集
- 黑镜 第六季,第一集还是很不错的,但确实少了看前两季的惊艳
周报 #41 - 生日的仪式感、时间管理与北京之行
前言
本篇是对 2023-05-30
到 2023-06-12
这周生活的记录与思考。
踏入 6 月第一天就跟朋友说,“我每逢五月一般都挺惨的,六月一定是我的 lucky month”,不知道是心理作用还是愿力生效,步入六月后的这两周各个层面都有了不同程度的好转,工作任务中抽空重构了一些业务代码,减少了很多潜在问题;和 STRRL 参加了 Rokid 的线下体验活动,还见到了偶像开发者图拉鼎;虽然已经没那么在意生日的仪式感,但还是有一群朋友记得并且准备了一些小惊喜;似乎生日后开始逐渐走出自己的小世界,约见了大概已经七八年没见到的高中旧友,重拾一些心绪;周末闪现北京参加了 Gopher China 2023,和 Boyi 学姐吃喝玩乐,跟 Homura 吃饭闲聊,去 Noy 家撸猫;还有很多有意思的事。
生日的仪式感
前两天收到了一位读者朋友的评论,聊到了感觉关于生日的感知和工作后对事物的态度变化,其实还蛮能感同身受的。曾经的自己算是很在意生日的,不知道是在意这个节点本身还是想通过这种方式确认自己对于身边人的重要性,每年时间临近就开始期待,也常常会叫上一大帮人聚会庆祝。
随着逐渐离开熟悉的生活圈,与挚友也难得才能相聚,不再有执念,幸运的是还是有一些朋友会记住并祝福才有了一些生日的实感。
而今年也许是由于立下了 Flag 每年生日要梳理一下自己的情绪情感,早早开始翻阅着之前的周报,也思考过去这一年的所思所想,才意识到除了数字增长之外,原来还发生了那么多变化,当然这些变化有的积极,有的并不那么尽如人意,但有了审视自然也会有所期待,我想今年生日的意义和仪式感源于此。
以文字的方式自省真的带给我了太多,就像我回复这位朋友留言的一句话:“至少对于自己而言,我走出泥潭的方式就是文字,周报某种程度上也是我的自我救赎。”
另外很意外也很感谢许多素昧平生的朋友们在「26 岁的自白:推石头的人」这篇文章的留言和祝福,很温暖,你们共同陪我度过了一个有意义的一天,也希望能继续相伴走下去。
输入输出和时间管理
收到了有点遥远的周报下的一个留言,关于效率和时间管理的。说实话现在再回答这个问题是有些惭愧的,去年输入输出的质和量还算是比较满意,但其实也不是有什么太科学的方法,一开始的自己只是一心把时间都投入到自我提升中来逃避一些事,所以即使在忙碌的时候也依然抽出了很多时间做喜欢的事。
随着渐渐沉浸在一些技术学习和兴趣探索中,也开始有了一些输出和正向反馈,周报鸽一两周就会收到不少催更,自然也会有更多的动力继续坚持。我一直是享受于“Learn/Build in public”这样的方式的,博客和推文自不必说,用于同步的 Telegram 频道「Yu's Life」大多同步我的点赞、收藏、转发等行为,其实就像朋友圈从不分组可见一样,我是完全没有区分 public/private 账号或是列表的,也就意味着我所有的行为都是完全透明的。
当结束了一天的工作或是有了一些空闲时,想到似乎今天还没有什么额外的输入,我会有一种算是动力去读几篇搁置在稍后读中的文章/教程、打开 Kindle 看一下自己的读了一半的书或是从豆瓣列表中翻出一部早已想补的电影,不知不觉也就养成了习惯,也常常会翻看自己的频道作为信息整理,看到输出比较零星的时候也会有一些小小的负罪感。
所以当我的频道连续几天没有什么更新时,那十有八九是在摆烂。
至于时间管理方面,自己也算不上有什么好的实践,主要就是用 Logseq 进行一些基本的任务项记录,并且用 Cron 进行日程管理(最近才开始高频使用,菜单栏的日程提醒还是很有用的),也很久没有刻意使用番茄钟这样的工具进行严格管理了,自己还是更习惯按照自己的沉浸状态来安排,而不是根据固定的时间块。
精力管理的话,唯一说的是可能自己对于吃喝玩乐睡几乎都是保持较低限度的需求吧,常常一天就随便吃一顿饭或是水果,也算不上有什么杀时间的爱好,所以时间略充分一些。当然,并不是说这些时间都过得很有意义,也常常有浪费的时候,但也不会对自己有什么严苛的标准,所以能保持着比较平衡的状态。
五点睡八点起就别学了,上篇周报里「流逝的睡眠」这一 part 我自己刚反思过。
个人生活剪影
自之前出门去参加了开源之夏活动后,对于参加这些技术/科技/数码的活动也开始感兴趣,也更愿意出门见一些朋友们了。
邀请了两个从北京来杭州玩的朋友来家里找捏捏玩,疯狂给他们介绍小佩宠物家的一些宠物智能家居,果然对这种电子玩具完全没有抵御力,但自己又没有什么新鲜的可以折腾了,于是捏捏成为了“受害者”,基本上 App 里都能掌握她的一举一动了,吃东西都精确到克。
捏捏也被朋友称为玩具猫/摆件,就是随意往哪个角落一放就不动了,安心被 rua 或是等着我们摆拍,太乖了。
这次回北京也快乐地去 Noy 家撸猫,他们家的猫叫「贴贴」,是个很小只的可爱蓝猫,也很乖,一直在玩我带来的数据线。
快乐吸猫的一周!!!
这次回北京主要是来参加 Gopher China 2023 大会的,在 GoCN 里也待了两年之久了,第一次见到一些组员小伙伴和 Asta Xie。期间和一个外面帐篷摊位的小哥聊 Serverless 和 GPT 聊得很开心,正要加微信的时候发现是推特好友「Carson Yang(米开朗基杨)」,还在 TG 有过一些小交流,果然推友人均大佬。
虽然时间有些匆忙,中午和 Homura 吃了一顿好吃的自助,聊得很开心!
剩下时间基本上是 Boyi 学姐带我四处玩,因为很日常就没怎么拍照了,记录了一下一个印象有点深刻的烛光音乐会,很有氛围感。
以及超神奇的,学姐有超能力,扭蛋一直能开出想要的,之前我还不信,结果一次就开出了我想要的阿尼亚(然后我一直超开心地攥着阿尼亚的扭蛋,感觉老板都笑了)。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- How the Raycast API and extensions work - Raycast Blog
- ETHGlobal Autonomous Worlds 參賽心得分享 - Moscle.dev
- How NAT traversal works
- 那些隱藏在 CDN 中的危險:為什麼 CDN 可能沒有你想的那麼安全
- 善用 Go Fuzzing,幫助你寫出更完整的單元測試
- 对苹果 Vision Pro 和空间计算的思考
- 2023-24: 漩涡事件反思录
视频
记录一下看过的有意思的视频:
- NestJs Course for Beginners - Create a REST API
- How to make a Stablecoin | Foundry Full Course Excerpt
- 跨平台开发该不该用 Flutter?2023 年版 Flutter 全面解析
- 音乐人要失业了吗?ChatGPT 都可以写歌了!
- 极限 8 小时,我和橘子海拍了「夏日漱石」
- How I take tech notes as a note app author
- Learn Rust Programming - Complete Course
- 9-Year Hustle to Achieve a Single GoalㅣNotion's Cofounders
- 这次相亲没有发挥好,复盘总结经验
动漫
- 鬼灭之刃 锻刀村篇,继续追,喜欢!
- 我推的孩子,后面剧情节奏越来越好,感觉期待值被拉得越来越高了!
26 岁的自白:推石头的人
现在是 2023 年 6 月 6 日,我 26 岁了,其实随着年龄渐长,对于生日本身已经没有太多仪式感或是期待,只是依然像是个节点一样提醒着自己,一年又过去了。从去年开始决定每年生日和跨年都留下些文字,算是对过去这段时光的交代。
其实过去的一年里也陆续写了 40 篇周报,原以为已经习惯去分享自己的情绪,但下笔时依然有些恍惚,不知道从何说起。
2022 年后半段发生的事在「2022 年末回顾 - 迷茫、低谷与改变」这一篇总结中有很详细的叙述,今年经历的一些改变在断断续续的周报中也或多或少有所提及,不想赘述、抑或是怯于回忆,我在这生日之际只想谈谈生活本身。
就像我每周都会试图给周报定几个关键词一样,我总是想给过去自己走过的痕迹定一个主题,想了良久,决定命名为「推石头的人」,源于西西弗斯的故事,一个不断将巨石推到山顶,又不得不经受巨石滚落,再将石头推到山顶,努力、荒诞却又周而复始的故事。
去年生日前经历了一场分手,当天收到生日祝福后才想起来原来生日已经到了,挣扎着起来回复了朋友们的祝福,回忆了一下自己究竟是一个月还是两个月没有踏出房门了,嚼了几片褪黑素又继续回到难眠之夜中。大概是由于太过可怜,白天的时候有朋友送了一束花和一个蛋糕,由于没什么胃口,赶在生日结束前的几分钟仪式感地尝了一口,很甜却无法下咽。
过去的一年里各个阶段都常常有人问“你走出来了么”,问题不难,我却其实一直不知道怎么回答。
大概是从 7 月回杭州散心、换发色、见朋友开始,自己算是决定继续生活了吧?闲置的时间都用来看各种课、学各种技术,无处安放的分享欲也倾泻到了博客文章和推特动态上,当时的我似乎觉得只要把自己的时间挤压到无暇回忆,就能够渐渐走出吧。几个月过去,当我自己都认为似乎也不是那么难以接受时,当我觉得似乎已经能够在新的生活轨迹上缓缓前行时,突然又因为想起一件过去相处的小事,小到我现在都不太能准确描述的事,一切都回到了原点。
我这才发现,原来自己一直像是在做和西西弗斯一样的事,在努力地推着巨石,又不得不看着一切崩塌。过去的一年里很多事都如是。
我在杭州的租屋里有一盆绿植,不了解但应该是很好养的品种吧,入住的时候送的,摆在很显眼的地方,因为是远程办公,我每天都能看见却似乎也不会刻意注意,直到前两天有朋友从北京来杭州玩,邀请来家里撸猫,想着稍稍收拾一下,才看到有很多叶子已经枯了,泥土也已经干得不行,正要浇水时还不小心打翻了,散落一地,联想起了之前写的一句随想。
突然间情绪到了谷底,烦躁,压抑,无法平复。“这一年失去的东西太多太多,任何一点细小的死亡与崩坏,都会变得不可承受”,年初在鹿哥的视频里看到这句话的时候,不由得哽咽了,这大概就是最恰如其分的形容了,我也才发现自己其实一直在“接受失去”这件事上没什么长进。
然而生活也还要继续,要说这一年自己真正学会的,大概就只有“真实地去面对生活本身”了吧。
我养了一只可爱的猫,叫捏捏。
独自养猫对我来说一直是需要勇气去做的一件事,毕竟我觉得我自己对于生活品质的要求可能还不如猫,但依然去选择了对一个新的生活伙伴负责。虽然在她生病时担心到吃不下饭,带去绝育时也连签手术单的手都在发抖,经历过一些烦恼的时刻,但她陪伴着我,常常会抚慰我的心绪,也教会我如何去爱。
捏捏给予了我继续生活的勇气。
去年在北京的这大半年工作时光里,有对我很好的朋友,有一些相熟的同事,有意气相投的 leader,给了我不错的自由度,然而自我的各个方面没有得到如预期的成长,对方向也日渐迷茫,却也始终忙碌到连生活都无暇顾及。随着这样的情绪积累越来越多,我决定离开。
回到杭州后的生活和工作平静、简单却又不乏乐趣,在租屋中和捏捏相依为命,各自沉浸在自己的世界里;远程办公的模式有了更多自由的时间去参加很多好玩的活动,去香港听五月天的演唱会,去西安跟许久未见的舍友喝酒畅聊;不错的技术氛围让我可以不断探索新的技术栈,也会久违地为一个需求或是技术问题通宵死磕。
然而,大概是由于距去年那段至暗时刻恰好一年过去了,这两个月又逐渐发现自己陷入到了过去循环往复的状态。睡眠被剥夺,四五点都已经是常态;社交封闭,常常一两周连门都不出;莫名焦虑,急于求成地想要改变,却又不知如何下手,频频受挫。
过去的一年就是很难啊,自己就还是常常脆弱、敏感地依然沉溺在感情结束的情绪中啊,自己就是还是没能学会如何重新捡起生活啊,年初立的很多 Flag 还是没什么进展啊,明明时间变多了看的书和电影却变少了啊,又是天天熬夜到身心俱疲却也无法改变啊,依然没能成为理想中的自己,依然没能找到生活的意义啊。
但这就是生活本身呀,它公平、残酷地面对每一个人。
我已经渐渐不会再去埋怨,而是真诚而热烈地拥抱它。
巨石总会滚落,而明天一早睁眼,我们依旧要推着巨石往上。
祝 26 岁的自己,快乐。
周报 #40 - 开源之夏、代码之外与流逝的睡眠
前言
本篇是对 2023-05-21
到 2023-05-29
这周生活的记录与思考。
到了周末才意识到这周完全没下过楼,似乎已经成为了生活的常态。不过效率还可以,工作中调研了解了一些新的东西,也继续在看链、合约相关的文档;学习上因为兴趣也稍微看了一下 Swift 和 SwiftUI 的教程,因为自己算是苹果生态的深度用户,对这些背后的东西一直很感兴趣,不过工作中很少用到,刚好趁着了解下;周末想着不能再那么自闭了,于是参加了之前报名的「开源之夏」线下活动,很好玩;还有很多有意思的事。
代码之外
开源之夏
其实自己并不算是热衷于参加线下活动的,常常就是宅在自己的世界里,三四月回杭州后想迈出一步,于是频繁参加了香港的 Web3 Festival 和各种周边线下活动,但其实发现并不是那么热衷于认识很多新的人或是说对一个耗费精力的活动能有持续的热情,所以回来后就没怎么关注和参加了。
这次是看到 STRRL 在推上发了,也了解到智子和面包要演讲,觉得还挺感兴趣的,也不远所以就去了,到的还比较早,拿到了很多好玩的周边,感觉下次换电脑的时候贴纸是不愁了。
后面听到了很多开源大佬们的分享,也跟其中一些有了一些小交流,感觉好奇心和爱折腾还是挺共通的特质,当遇到一个自己感兴趣的东西或是遇到一些现实中的问题时,总是会追根溯源,即使发现不是自己的问题也并不止步,而是会继续向上游探究,不管是 Issue 还是 PR。
前段时间其实陷入了自己的一种内耗焦虑,其实工作比之前有意思很多,也有了一些自己的时间可以学习感兴趣的事,但是可能因为想做的事太多,而自己的自律性和执行力也常常并不能那么稳定地如预期,但是参加完这个活动后自己还是有了不少的好转,感觉不管是开源还是这个领域还是有很多好玩的事,且不管在什么阶段都还是都能够做好玩的事,这大概也是自己一直想做技术的初衷吧。
其实心态挺奇怪的,我的焦虑似乎不是来自于所谓的 Peer Pressure,可能在这个领域都不说同辈了,可能比自己小不少的人也有太多太多大佬,反而是参加这样的活动,看到这些更多的可能性和想成为的人的时候,会缓解不少自己的消极情绪。
分享欲
这周听了 Geekplux 和 Randy 的播客频道「代码之外」,两位都是自己很喜欢的前辈,也都有一些接触,听他们聊天是一件很享受的事,没有在讲什么很具体的技术细节或是教学,但是能感受到即使节目名为「代码之外」,他们的生活也已经与自己所热爱的科技、代码密不可分了。
印象很深的也是 Randy 讲到分享欲的问题,说在最开始玩推特时他总是想分享自己的一些想法和感受,而到了现在总是会担心会不会 "too much",我觉得虽然情境并不一样,我比起之前分享更少了也是有一些担心自己的输入、输出或是想法有些杂乱,没经过梳理和规整的信息,自己似乎也有些怯于分享。
Reorx 之前也在频道里发起过这样一个调查,因为我的频道起初就是他频道的一个 fork 版本,也在差不多的时间段中产生了同样的困惑。不过后来自己想了想,还是没给自己太多心智负担,只是在分享前多加了一层对自己的质问,需要是自己认真读过且有所收获的内容,而不是仅仅是看到被推荐或是一些“看起来”有用的资源整合,其他的还是自己先提升输入输出的价值和纯度吧。
还听他们聊到了很多话题,有关工作、成长、不同的生活环境、离职之后的规划、AI 等等,还听到说 Randy 可能会出一些教程和课程等,之前看他的那本小书「Next.js 应用开发实践」就受益很多,后面有些项目就是完全按照这个实践进行的,陈述的方式和深度很适合想独立做一些小项目的人,期待。
流逝的睡眠
不知道是不是因为远程在家有些时间模糊,最近的作息越来越离谱,有时候其实工作已经忙完了,依然会到凌晨三四点才睡,上午 9 点多会醒一次,但偶尔也直接按掉闹钟睡过去,差不多 11 点开始处理工作和各种事,直到半夜,周而复始。
其实自己身体的负载感觉还好,但愈发觉得其实睡眠还是容易影响精神状态,总感觉睡太晚第二天有些缺少实感,因为刚阳过早上也还没开始晨跑,但是买了瑜伽垫打算室内做一些基础的运动健身,也捡起进展才一半不到的健身环大冒险了。
现在可能由于要睡的时候都已经是疲劳的状态,很少有什么梦,但为数不多的几天似乎也总是会想起以前的一些事,思绪遥远却又真实,之前常常也会说,似乎每年五月总是挺糟糕的,现在也还有一天就要过去了,希望六月,自己很喜欢的这个月,能够一切有所好转吧。
捏捏
捏捏终于恢复了精神,现在四处跑,我工作和加班的时候就在我腿上或者旁边地上躺着,可乖了。
有趣的事与物
Mastodon
这周由于工作上有一些相关,又开始详细看了下 Mastodon 的一些资料,比起之前那次了解又新看到两篇文章和几个项目:
主要是由于公共的服务器一般都会设置一些限流等等,所以想着自己搭建一个,但由于自己其实只需要使用的是支持 Mastodon Api,而其实不需要负载那么多的连接或是复杂的交互界面,了解到了以下这几个项目,可能搭建着玩一下:
- GitHub - cloudflare/wildebeest: Wildebeest is an ActivityPub and Mastodon-compatible server
- GitHub - davecheney/pub: pub, a tiny ActivityPub to Mastodon bridge
- GitHub - superseriousbusiness/gotosocial: Fast, fun, ActivityPub server, powered by Go.
- GitHub - mattn/go-mastodon: mastodon client for golang
go-mastodon 是通过 go 去调用的 sdk。而 wildebeest 大部分基于 Cloudflare 的免费服务,搭建完成后会比较省心地不需要进行太多额外的运维管理;pub 是一个轻量级的 bridge 应用,支持最小化的 Api 访问但是又不需要实现复杂的功能;而 gotosocial 则是比较功能齐全但消耗资源也适中的一个应用了。
感觉 Fediverse 一阵一阵的,真正在上面发言的人还是挺少的,也就当作自己的一方净土吧。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- Everything we care about Account Abstraction(AA) — ERC4337
- Redis 與作者 antirez 的故事
- I Don’t Want Your Bank’s UI. I Want A ChatGPT-Like Natural Language Interface
- You can learn AI later
- DeepL Api 设计中的欺骗战术 - zu1k
- Mastodon, the rise of the Fediverse
- Mastodon: A New Hope for Social Networking
- Same Stop
- 2023-21: 我的 1Password 密钥管理实践
- Tailscale 组网工具 | wzyboy’s blog
- Why Write?
- 解读比特币 Oridinals 协议与 BRC20 标准 原理创新与局限
视频
记录一下看过的有意思的视频:
播客
记录一下看过的有意思的播客:
- 第 0 集 | 离开微软、人生在于体验?阅读的意义、主动和被动的人生、GeekPlux 看 Randy 代码长大?
- 第 1 集 | 我们有片头曲啦!更快晋升的技巧、GeekPlux 的奇怪癖好、AI 孙燕姿、我们在用的 AI 工具、旅行的意义
动漫
- 鬼灭之刃 锻刀村篇,太燃了!
- 我推的孩子,因为我是奈飞看的,可能滞后了几集,但看到模仿爱的那段时候有点感动到了
- 漫长的季节,好久没看国产剧集了,前段时间比较火,这个周末看到并不长就缓缓补了一下,剧情质量还是很在线的
周报 #39 - 初患新冠、过去的心绪与失而复得的分享欲
前言
本篇是对 2023-05-01
到 2023-05-20
这三周生活的记录与思考。
敲下上面这一行字的时候才发现居然已经拖延到了三周之久,期间其实发生了不少有意思的事,但是似乎自己的分享欲正在逐渐丧失,只是在 Logseq 中记下一些零碎的想法,几次提笔想要整理还是没什么思路,遂也没有勉强,停滞到了上周其实也已经渐渐恢复,却又由于一个即将上线的需求而变得有些忙碌,搁置到了这个周末,不知不觉就到了现在。
说来神奇,苟过了疫情三年,成为了身边罕见的没有阳过的人,却在这一波中招了。周末烧到了 39.5 度甚至还以为只是个小感冒,等周一康复差不多了才想着测试一下抗原,果然两条杠了,不过整体来说算是轻症,烧了一天,喉咙吞刀片也就一天,就慢慢康复了,也算是速通新冠了。
所以这个周末处于一个一切都有在好转的时刻。项目大部分的需求已经完成,算是暂得一些喘息的时间;新冠初愈,也算是给自己的身体一个警醒;绝育后的捏捏拆线了,恢复了活泼的性子;自己也开始恢复正常的输入输出频率。
五一去了趟成都参加活动,也见到了一些朋友;匆匆行程后去西安休闲旅游,见到了久违的大学舍友,几年之约终于达成,却差点被返工潮困在机场;还有很多有意思的事。
故友与过去的心绪
我有一个舍友,尽管只是大一一年同窗(后来他转专业走了),却一直联系到现在,自己能定义为朋友的人日渐稀少,也就尤其珍贵。大学时约定在他的家乡西宁见,几年过去了,我奔波了几个城市,他在西安工作定居了。几年未见,于是趁着五一去了一趟西安,算不上旅游,只是喝喝酒、聊聊天,一如往日。
印象里的他不羁、愤世嫉俗,由于常常聊天或是电话,久违后的相见依旧熟悉,在有些无聊的工作日常之外,依然坚持着跑步、弹吉他、看书,依然对世俗的东西不屑不满,却也在自己的轨迹下生活着,多了几分温和。
因为是第一次去西安,尽管是五一,还是踩着人流去了下大雁塔这样的旅游胜地,但只是匆匆一瞥。之前还很热衷于摄影的时候,走到哪总会带着相机多拍几张,旅程结束后修图、分享,但随着疫情几年,这样的热情已渐渐褪去,这两年的出行,即使一时兴起带了相机,常常也没能拍什么,似乎不论是自然还是人文景观都已经很难真正吸引到自己,留下更多的反而是随手拍的合照。
失而复得的分享欲
硬盘里也躺着不少未整理的照片视频素材,其中大部分已经被时间熬到不合时宜,只好当作记忆的一部分散落在某个文件夹里,还记得 2021 年的生日前,由于发生了很多很多事,拍了一些视频,想着把那些事分享记录下来,作为一种视频的生日总结,最后没再去梳理那些素材,后来甚至连文字都没留下什么。
直到 2022 年重新开始记录,一晃,一年也过去了,可能由于是相近的时刻,最近也常常有些失眠,又难免地去翻阅一些痕迹,或是在好友聊天时突然的一句“原来已经整整一年过去了”感慨。最近想要落笔写些东西的时候也常常担心会继续写那些有些丧丧的情绪,虽然真实,却也无力,让自己感到疲惫。
仔细想想,这一年里做了一些改变,或多或少更接近自己想要成为的人;如愿有了不论是工作还是日常的一些自由度,离生活本身更近了;尽管还是时常有拖延,但还是记录下了许多自己的想法和感悟,更多地去思考自我;学了一些自己想学的东西,也更多探索和实践自己的想法;也在朋友的陪伴下经历了一些有趣的事,不至于像是去年那样沉溺在自己的世界里。
一切似乎都有在慢慢变好,没法改变的事也总归是要下定决心走出。我如是安慰自己。
好在最近不论是工作还是生活上一些事的进展还不错,有了一些积极的信号,也渐渐发现分享欲与创作欲的回归,浅浅梳理了一下,才发现想做和要做的事有很多,因为种种原因搁置了许多,开始一件件捡起来。
有趣的事与物
GitHub Copilot Chat
最近算是高度依赖上了 AI 辅助编程,大部分时间用的是 ChatGPT 和 GitHub Copilot 插件,而最近刚好 Copilot Chat 内测通过了,打算切换尝试一下。
ChatGPT Plus 感觉扣费好像除了一些问题,估计到期后要再想办法了,可能可以尝试一下通过美区礼品卡的方式续上,真折腾。
VS Code
另外因为一直在用 VS Code(在团队被 Jetbrains 党鄙视至今依然坚守),通过了 DIYGod 的一条推文发现了这个 EVA 主题,有种莫名的 Coding 力加成,感觉 Bug 都少了,果然颜值才是第一生产力。
自己程序启动器这一块,一直在混用 Alfred 和 Raycast,Alfred 是因为用习惯了,且买了 Mega Supporter 的 License,但是又眼馋 Raycast 的插件生态。
最近发现 Raycast 可以把插件的很多功能通过全局快捷键的方式配置调用,由于经常需要打开不同的 VS Code 项目,于是把用 VS Code 打开和最近项目两个功能分别配置了 Option
+ .
和 Option
+ ,
,高度依赖上了。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- Application-Specific Blockchains: The Past, Present, and Future
- Building an AI-powered ChatBot using Vercel, OpenAI, and Postgres - Neon
- Everything we care about Account Abstraction(AA) — ERC4337
- Enhance Your Internet Privacy in 2023 - GeekPlux
- 网页沉浸式双语翻译的原理
- #15 Dune SQL 查询引擎入门 - Mastering Chain Analytics
- 我的笔记管理法 | Randy's Blog
- 分布式部署 cloudflared 让访客就近回源,进一步提升访问速度
视频
记录一下看过的有意思的视频:
- 我们做了个能对话的 AI 派蒙,免费给大家玩!
- Next.js 13 Crash Course | App Directory, React Server Components & More
- 社区自古以来就不好变现
- 50 元 vs 2000 元的剪辑,你能看出区别吗?
- 我为什么在 30 岁花 50w 去上学?
- 两年后,我还在用 Linux 吗?
- 这届年轻人忧伤的主题是什么?《那些忧伤的年轻人》菲茨杰拉德
- 我如何做笔记
- GPT-4 - How does it work, and how do I build apps with it? - CS50 Tech Talk
播客
记录一下看过的有意思的播客:
动漫
- 鬼灭之刃 锻刀村篇,第三集开始燃起来了,追番中
- 我推的孩子,确实是刀啊,追番中
- 四叠半神话大系,早有耳闻却是断续着看完的番,就呈现方式和风格上很有一种物语系列的即视感。一事无成的主角,循环流的设定、对于未知可能性的诠释,即使到了现在依然新颖,也常常会想,自己其实也同样困于四叠半的空间里,却不知道什么时候才能有打破的勇气。
- 异世界归来的舅舅,忘了是几月番了,感觉停更了好长一阵子,历时大半年,这两天才补完,娱乐日常向,设定挺有意思但是剧情没太多新颖的部分,基本做点别的事的时候放着。
- 电锯人,补标一下,经典重温了算是,动画质量在线。
周报 #38 - Foundry、Logseq 与 Surge Ponte
前言
本篇是对 2023-04-19
到 2023-04-30
这两周生活的记录与思考。
上篇周报提到进行了一场穿越多个城市的旅途,回到杭州后渐渐恢复了原本的生活节奏,独处时间多了许多,输入、思考和所做的有趣的事也有很多,但似乎整理、与自己对话的时间反而变少了,常常会在几天后才意识到时间的流逝。自诩是个不那么依赖社交和适应力比较强的人,想了想可能只是过多地把自己的生活状态寄托于虚拟世界,有一种与现实近乎脱节般的不适感。
现在在一个深夜航班上,小憩了一会儿后困意渐消,于是干脆拿出电脑写点什么,也许是因为没有网络和外部干扰,思绪似乎更加清晰。
工作氛围与自由度
加入新的团队不知不觉已经一个月有余了,大概是因为前两三周一直在四处奔波,常常没什么实感,现在才渐渐适应节奏与步入正轨,我所在组的氛围很好,即使是远程也不会感受到疏离感,一次会议常常从工作正事聊到外卖吃什么再聊到 Vlog 相机买什么(Sony 大法好),本来社恐的我也渐渐更多在群里话多了起来。
有趣的是因为密集参加了深圳团建、香港 Web3 Festival 和杭州的一波团建,细数自己已经见过公司的接近 20 位同事了,在一个 fully remote 工作模式的团队还是挺不容易的。还很幸运地赶上了线上年会,见到了很多只存在于 slack 对话框的有趣的同事们(各路神仙),表演个节目能发掘一个 rapper,玩个俄罗斯方块都能感觉到人与人之间的参差。
经过一些沟通,工作内容上做了一些调整,可以同步继续做一些智能合约开发和链相关的研发与探索,也能更深度参与自己喜欢的产品(看看还有谁还没在用 xLog 和 xSync,具体可以看看这篇「周报 #25 - 基于 Crossbell 的个人信息输出与同步系统」),虽然可能工作量和时间上需要多一些平衡,但还是有点小开心能有这样选择的自由度。
Foundry 与合约测试
由于工作上开始着手了解加入的另一个组的项目,还蛮明显地感觉到自己之前虽然也做过一些链研发和写了小半年合约,但复杂度和开发实践上都还差挺多的,打算从这一块再好好补补,所以这周看了很多合约和调研文档,打算从 Hardhat 转为 Foundry 了。
其实之前 Noy 和一些其他朋友已经向我疯狂推荐了 Foundry 框架,但是由于之前项目对于合约单元测试要求不那么高,自己也依赖于 js 写了很多工具脚本,就一直还在使用 Hardhat,直到这次真的跑了一些项目和写了一些 demo 单元测试,才感觉到它的巨大优势,瞬间叛变。都已经快吃灰的 Solidity 合约开发系列终于也要迎来新的更新了(在写了,不信你看图
其实目前关于合约的企业级实践还是蛮少的,也由于后面所做一些合约是开源的,打算慢慢记录一些踩坑的经验和最佳实践吧(全职开源的优势了)。
Logseq 与任务管理
由于现在自己个人安排与工作任务更多也更复杂,重新启用了 Logseq 作为自己的个人任务管理工具。自己其实之前一直在用 Notion 做个人看板,但是使用的时候总觉得心智负担太重,重度强迫症的自己也总是不断去优化那些任务的类别和描述信息,反而给了自己很大的压力。也用过滴答清单和 Todoist 这样稍微常规型的应用,但是同样的还是需要自己每天去梳理各种任务和标签,回溯起来也不算方便。
我后来发现了 Logseq 这一笔记软件。一开始我其实也只是把它当作一个以 block 为粒度的 markdown 笔记软件,也顺便想尝鲜一下双向链接这一总感觉一直在被提到的概念,用得还挺适应的,所以逐渐把 Notion 上自己的 Knowledge Base 都迁移过来了,后来其实也折腾过使用简悦来同步自己的网页标注这些,但是不久后还是觉得有些麻烦所以舍弃了。
直到我发现了 Randy 的这个视频「我如何使用 Logseq 管理我的生活和笔记」,他提到了使用 Logseq 的 Daily Journal 来做自己的各种笔记与 TODO 管理,这样不需要像 Notion 这类软件那样自己先形成一个规划再呈现出来。
因此当自己突然想起一件想要做的事情时,不需要单独在看板或是任务管理软件里建一条新的任务,只需要像是写一条笔记一样在自己的 Daily Journal 里面随意加上一个条目并且使用 TODO, LATER 这样的简单语法就能够进行简单的任务管理。
不过有些任务会跨越多天,我们的任务也会零散地散落在各个日期的 Journal 下,不是很利于统一管理,这就要使用到 Logseq 另外一个强大的功能了 —— Query,这个功能可以理解成以 block 为粒度的查询(就像是 sql 查询到一条记录那样),通过一些标签、语法等内在逻辑进行筛选,展示出我们想要的 block。
这个部分我参照了 Randy 的实践,创建了一个 Dashboard 页面,里面展示了自己的各种查询结果。我主要使用了如下几个 Query(括号中是其对应的 query 语句,需要的朋友可以自取并且根据需要修改):
- In Progress (
{{query (todo now)}}
) - Todo (
{{query (todo later)}}
) - Writing Plan (
{{query (and (todo later) [[writing]] )}}
) - Reading (
{{query (and (todo now) [[books]] )}}
) - Read It Later (
{{query (and (todo later) [[books]])}}
)
呈现结果如下:
因为这个是 Randy 的实践,我就不单独出博文介绍了,在周报中简单介绍了一下自己的使用方式,大家有兴趣的可以看看他的原视频。
Surge Ponte 与远程开发
自己在网络、各种硬件设备和系统的折腾上属于又菜又爱玩的类型了,之前也探索过瘦客户端开发的一些最佳实践,详情可以看这篇文章:
其中最核心也是最难的点就是怎么在外部网络环境下访问家里的设备,如服务器、Mac 主机等等。在我之前的方案中使用的是 frp 这一工具进行内网穿透,大半年过去了,很稳,依然是首选推荐的方案。
但是当看到 Yachen Liu 发的这篇「Surge Ponte 研发手记」时,又心痒打算折腾了。
五一假期又要出门在外几天,想着日常开发都是在家里的主机进行的,在外也想要能访问,刚好因为重装了系统还没配置 frp 客户端,想着干脆直接上 Surge Ponte 试试了。
于是赶在出发前一天晚上升级了下 Surge 5 并配置折腾了 Surge Ponte,一番探索下来,比起 frp 或者其他类似的解决方案,我觉得 Surge Ponte 在配置易用性和拓展玩法上有着绝对优势。
Surge Ponte 的折腾绝对值得一篇详细的博文,因此本周报里就不详细讲解原理和配置细节了,只简单展示一下目前我使用到的部分功能效果呈现。
当我在自己的 16 寸 MBP 与家里的 Mac Studio 同时开启了 Surge Ponte 功能(我使用的是 NAT traversal via proxy 的模式,只需要用一个支持 UDP 的线路就可以了,如自建的 Trojan 协议的代理),在已注册设备中就能够看到了。
这个时候当设备开启了允许远程登录的权限时,就可以像访问云服务一样通过 ssh [username]@[surgepontename].sgponte
这样的命令直接远程登录主机,因此也可以支持 VS Code 远程开发等。
当然这一点像是 frp 这些也可以轻易做到,而更强大的一点是这时候我们在家里主机上启动的一些服务,也可以通过 [surgepontename].sgponte:[port]
这样的网址直接访问。例如我通过 ssh 远程连接到家里的 Mac Studio 后启动了一个本地的 Next.js 网页服务,在本机开发时通过 localhost:3000
来访问,现在我可以直接在 MBP 上通过 http://yu-macstudio.sgponte:3000
直接访问(虽然 frp 也是能够做到映射服务出来,但是需要在 frp client 端写端口映射规则)。
所以理论上通过 VS Code 直接远程连接主机修改代码文件并且使用 [surgepontename].sgponte:[port]
的方式能够获得完整版本地调试的体验,兼顾了便携性和性能(好,这就把 MBP 卖了换 Air
还有一个很实用的场景就是我们常常会有一些只有在家里的局域网才能访问的服务,如软路由器配置、NAS、树莓派等,这时候如果使用 frp 则需要每个都单独配置,而 Surge Ponte 可以直接通过设定 DEVICE 规则来实现外部访问,如我现在在外地可以直接使用 http://router.asus.com
来访问我家里的路由器配置页,这对于远程管理家里的一些常驻服务很方便。
还有很多好玩的应用,如通过 smb 协议直接访问家里主机设备的文件等等,后面的博文会尽量涵盖一些好玩的应用场景,感兴趣的朋友可以关注(催更)一下博文。
捏捏近况
博译学姐在给捏捏画油画!!!这个还只是一个初稿,还会再加亿点点细节,但是已经忍不住想展示出来了,太好看了!!!
新的猫爬架,提前开启度假模式!
五一后准备带去绝育了还是有些紧张的,希望一切安好。
有趣的事与物
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
视频
同样的,也有记录一下看过的有意思的视频:
动漫
- 鬼灭之刃 锻刀村篇,超级期待!!!希望别崩
- 我推的孩子,看着讨论度还挺高的,但据说有点刀,看了开头一点点
周报 #37 - 浮生半月闲( 武汉 | 香港 | 五月天)
前言
本篇是对 2023-04-03
到 2023-04-18
这两周生活的记录与思考。
大约是因为刚换了一种生活状态,早在 3 月就给自己安排了很多行程,从 4 月初就四处游荡,浮生半月闲。这次的路线像是一场回归之旅,从生养的杭州出发,到第一次长期离开家的武汉看望老师和故友,再到度过了奇妙岁月的香港参加展会和活动。
其实也远远算不上忙里偷闲,因为没有请假,好几天的工作日在学校边的酒店或是会展中心的某个角落度过,大多出行也是匆匆赶场。感觉其实也并没有做太多事,却直到现在才得以稍稍缓过来一些,整理这几天的见闻心绪。
半月的旅途算是有趣和值得,看望了许久未见的老师,补上了一节久违的「English Writing」 课;跟博译学姐逛了一下校园,感慨时间流逝之快;匆匆在上海逗留一晚,和小宇约上了一场饭,也给学姐过了一个简陋的生日;在深圳辗转,见到了很多仅存在工作群中的同事,大型网友见面了;在香港参加了 Web3 Festival,虽然没认识什么有趣的开发者,但见到了一些好玩的项目,也约见了一些新老朋友;回港大走了走曾经的一些记忆点,依然美好而珍贵;在上环和公园见了占,久别重逢;看了气氛超 high 的五月天演唱会;还有很多有意思的事。
回到原本的生活状态了,周报和其他输入输出频率即将恢复正常了(但愿!
武汉记事
其实 2 月已经回过一趟武汉,但因故没见到亮亮老师,所以在隔了短短一个月又重返了。上一次的路途上还在因面试而有些焦虑,这次已经一切落定,多了些闲适的心情,连步伐也都放缓了。
总觉得外国语学院在我的人生或是记忆中是一个神奇的存在,有过一段时间因为职业方向上的限制,我总是特别不愿意提起,似乎在后悔自己为什么没有读一个更“有用”的专业;也有过一段时间,似乎别人问起我文科转码的经历时总是会带上一些惊诧,诚实来讲那个阶段的自己是有些享受于这个标签的;而到了现在,见到了很多有趣的奇怪经历的人,工作也步入正轨,渐渐后面的职业不再受阻于学业,自己对于曾在外院度过的四年大学时光多了一些珍惜。
随着步履踏过校园的很多角落,看过自己所待过的一个个学生组织、教室和工作室的痕迹,才真正感受到时间的流逝,原来一些熟悉的事已经需要用五年、七年为尺度来回忆,一些人也已经许久许久未曾相见了,但自己多多少少还是个念旧的人,明明知道遗忘是自然规律却也常常还是想留住一些,不知道是眷恋那段时光还是羡慕身处那段时间中的自己 —— 虽然依然难免有所忧虑,却不乏探索的好奇与改变的信心。
亮亮老师是在我的不论是学生生涯还是人生中都尤其重要的一个存在。
学业上,她对于教学的理念方法才真正让我感受到 University 和 High School 的差异,也完成了自己学习思维与态度上的转变;私交上,会支持我各个方向的探索,会在我只身前往一个陌生地方的时候委托以前的学生照顾我,也会跟我八卦各种有趣的事。
她也是我这次回武汉的主要念想,约了一次上课时间去旁听了一节写作课,似乎又回到了那段时光。那时的自己忙碌、奔波于各种事,迷茫却也不曾畏惧。惭愧地说当时的很多课我都觉得于自己无益而逃了或是没听,从现在的角度来看还是挺后悔的,英国文学、美国文学、诗歌这些反而是到了毕业之后才慢慢开始吸引我,却再也没有了那样大把的时间来细细品读。
香港记事
另一个主要的行程则是香港了,自 21 年离开后,总想着回去看看,却总是各种拖延,再加上很多生活的变动,计划已经渐渐搁置了。而这次恰逢香港的 Web3 Festival,就迅速决定前往了。
刚刚安顿好就决定去港大逛一圈。这是一年奇妙的时光,自己的各个方面都改变了很多,明明很久不用朋友圈的自己也渐渐开始发一些日常。看了一下当时发的一些动态,虽然总共也就寥寥数条,却似乎将这段生活划分成了好几个阶段,即使也已经过去近两年了,回忆依旧澄澈。
初来乍到
初到香港的时光充满了忐忑与期待,对这个城市的一切都充满了好奇与探索欲。常常会沿着维港走走停停,拍下这个城市的活力;会在自己的小屋子里做饭、学习、写作,安然自得。
说实话香港算不上是一个很温暖的城市,所有人似乎总是步履匆匆,忙于自己的生活与工作,给予他人礼貌却极其克制的关心,狭小逼仄的空间也很难让人感觉到多舒适。
不过那个时候的我似乎还是一个积极的人,总是会在日常中找到一些有意思的点,让生活中的光亮驱散阴影。尤其印象深的是房东的一张字条,记了很多年。
花样年华
经过了一小段时间的适应,自己逐渐开始享受香港的新生活,也度过了很长的一段快乐时光。
惊叹于深夜的港大校园风光,对铜锣湾好吃的韩国烤肉念念不忘,在港大的星巴克中集各种周边,去中环吃 Shake Shack 和看电影,会去兰桂坊的 Quinary Bar 小酌,也会在某个极限赶完的 due 后带着很多零食和酒在维港喝到天亮看日出。
常常还是庆幸于自己 Gap 了一年才重返校园,会更珍惜这样来之不易的节奏与校园生活,也成为了自己人生中特殊而美好的一段经历。
记忆尤其深的是学校旁边的一家「周记点心」,吃过很多次,这次回来再吃的时候似乎又尝到了旧时香港味道。
长夜将近
当然,生活总是有些起起伏伏伏伏的。
快乐的时光并没有持续太久的,生活也总会倾向于在我们自以为步入正轨的时候悄然崩塌。
20 年末结束了一段四年的感情,21 年初失去了至亲外婆,年中失去了一起长大的表哥,同时也经历了一些其他情感和情绪上的至暗时刻。生活总是这样,当你觉得已经很糟糕的时候,意外总会接踵而至。那段时间常常想到的就是一句话:
「永远不知道意外和明天哪个会先来临」。
之后的日子其实过得有些模糊,一部分是繁重的课业与求职压力,一部分是各种情绪积压给自己带来的负面影响,现在回想依然觉得那段时间很不像自己,脆弱、敏感却又冷漠。
因此香港的后半期时光过得很快,也很虚渺,没留下太多视频和照片,几个月没有发布什么动态,以至于到了现在回忆也在渐渐消散,这也是自己之后的一年多里常常遗憾的事。
久别重逢
港大
要说整个香港时期记忆最深刻的当属清晨的智华馆了,在这两点一线直接度过了无数时光。每天早上为了占座,会早早赶在智华馆开门前到达,常常会和看管入口的大爷说一句“zousen(早上好)”,因为只说这句,以至于学期过了一半多他还以为我是个 local。
学校里面的咖啡厅也是承载了很多记忆点的地方,每天早上或是午后都会去点一杯,这次去的时候依然拿出了学生证享受了折扣。当时也常常会因为一些香港限定的周边而疯狂充值卡,可惜的是像是马克杯这种有些最终离开的时候没能带回。
想起来当时离开香港的时候不论是八达通还是星巴克卡中都剩余了一些,但是想着香港会是一个自己时常眷念与回忆的地方,有机会也都会常回来玩,所以就任凭留着了,没想到再一次回来就已经是接近两年后的现在,早已一切不复。所以,这次也像是什么执念一样把星巴克卡里的余额清零了,像是一次道别,对过去的那段时光与记忆。
五月天好好好想见到你
这次回香港其实主要的原因是五月天的一场「好好好想见到你」的演唱会,他们的歌在我的各个阶段都对不论是情感还是生活都有着特殊的意义,陪伴着我度过了几个难熬的阶段,而有了疫情三年的各种限制,似乎这样的现场显得尤其珍贵,直到抵达现场都还有一种不真实感。
其实感觉这段时间的状态也并不好,处于一种情绪积压后的放纵中,没能沉下心好好做自己想做的事,却也不想再陷入恶性循环,于是干脆把这次历时半个月的“旅行”当作是一场自我疗愈。但其实结果不尽人意,在武汉的时光很享受,但是是一种回到过去时光的慢,也像是一种家园似的安心,美好却短暂,离开后也不得不再去面对人生海海。
经过一阵子的劳顿后,其实发现自己也并不能那么享受于这样的“自由”,也很难从中得到什么纯粹的快乐,甚至开始有些期盼着回家,回到那种专注在自己世界的状态中。可能时隔那么久才有这样的出行,我才意识到自己原来也已经常常在逃避这种生活的变动与不安感,人也总是有自己的舒适区。
旅程的终点是五月天的演唱会,带了相机,在即将进场时却被告知不能带入,需要到很远的一个地方寄存,在飞奔着赶着的时候自己突然感受到了这趟旅行中自己一直在追寻的那种放松和快乐。在后面几个小时的演出中,也一直处于这种有些奇妙的状态,似乎一条曲线从谷底渐渐回升了。
在挥着应援棒、跟着五月天一起唱一起蹦的时候突然意识到其实生活本身也没有那么多答案,许多意义潜藏在体验和感受之中,有时候更多需要的是放下心防去融入、去探索。
回到家后才开始动笔写下这两周的见闻,自己在周报中总是希望能够出自内心感受而不是仅仅记录一些生活碎片与痕迹,旅途中几次想动笔却总是有些不顺,于是干脆搁置了。
Web3 Festival
另外还去参加了 Web3 Festival。换工作后出门的欲望尤其强烈,想认识一些新的人,也更想通过这次机会看看这个行业更多的可能性。
见到了很多同事,由于一直是远程办公所以大多都是“网友”,这次刚好有这样的机会可以见面,是很有趣的体验。参展的项目很多,也跟很多团队聊了聊,真正好玩的并不多,也没认识到什么新的有趣的开发者,算是有些遗憾的点。
倒是有意思的是在会场闲逛的时候,被一位万万没想到的朋友叫住了,文理分班前的同学,大概也得有 10 年没怎么联系了,说看着有点眼熟所以翻了下朋友圈看到是蓝色头发所以就来打招呼了。聊了一下发现还是我司最亲近合作伙伴的前员工,奇妙的缘分。
捏捏近况
半个月没见了,很想念。所幸家人把两只小猫照顾得都很好,两只小猫(同事寄养的)也成为了好朋友,回来开始继续多多更新和捏捏的日常了。
有趣的事与物
玩具
自己大概也多少有些松鼠的属性,已经很久没有打开各种主机掌机玩了却总还是会收藏一些卡带和周边。要说 Switch 里面玩得最入迷的除了宝可梦系列就是火焰纹章了,正逢新作发售,于是入了「火焰纹章:Engage」和「歧路旅人 2」典藏版。
由于是从日本寄回来,等待了很久,但周边确实很精致,歧路旅人的包很快这次旅途就用上了,超级方便。
输入
虽然大部分有意思的输入会在 「Yu's Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- BeyondStorage: why we failed
- 不想当作家的程序员写不出 Redis | 程序员的喵
- Anthropic | Introducing Claude
- The End of Front-End Development
- 令我痛心的三部反乌托邦动漫 - DIYgod
- 「CN」ABCDE:香港大会,重新思考 3 个热门赛道
视频
同样的,也有记录一下看过的有意思的视频:
周报 #36 - 肠胃炎、捏捏近况与新的旅途
前言
本篇是对 2023-03-25
到 2023-04-02
这周生活的记录与思考。
万万没想到作为一个在杭州生活了十几年的南方人,居然会在重新回到杭州生活的时候经受严重的水土不服。
上篇提到经过路途的颠簸等等影响,捏捏有些生病,不过好在经过了一阵子的适应,昨天去进行了一个详细的体检,已经没什么问题了,开了些营养剂进行调养。
然而,在处理好搬家和各种安顿事宜的第一周我的身体就有了各种反应,但由于自己属于几百年不生病的那种体质,也没太在意,到了松懈下来的时候终于集中爆发。
其他就是在适应新的工作模式和节奏了,感觉由于身体和精神上的一些疲惫,没有给自己留太多缓冲时间,因而在工作和自己其他安排的一些状态上都不算太理想,不过也在自我调整过程中了。
另外再矫情一句吧:
没有你的四月就要来了。 —— 《四月是你的谎言》
生病
在脱离了高中住校后日渐不规律的作息和饮食习惯后,自己对于健康这件事一直处于一种既随缘又有些害怕的状态,在大学最忙最多线程的一段时间甚至有“只要我不知道自己身体状况怎么样就可以心安理得地继续作”这样离奇的想法,因此在很长的一段时间都没有体检过。
反而是 Gap 在家的一些时间里,才尤其关注到,把体检、牙和各种大小问题都稍微处理了一下,之后或多或少都有稍微惜命一点,说来有趣,自己大概一直算是经常作自己的身体但是有些奇迹般地还算健康的那种体质,每天十几个小时高强度看着电脑视力几乎也没变差,没做太多防范也躲过了好几波疫情至今未阳,因此也似乎有了一种我似乎不会生病的错觉。
或是之前两周高强度的聚餐,或是回来第一周的周末就和友人连喝两天酒,又或是不知道为什么深夜的时候喝了杯冰的鲜奶,从周一就开始有些肠胃不适,但也没怎么在意,既没去医院又没吃药,就这样熬了两天,终于在周三周四的时候有了报应,下午的时候已经疼到需要躺着缩成一团才略有缓解,原本晚睡早起不午睡的习惯硬是被纠正到健康作息了(睡着了就不痛了),也终于在周四乖乖下单了一些药开始吃,第二天才开始略有好转,直到今天挂号去检查的时候才知道应该是急性肠胃炎,硬是被我拖到一切指标都正常了。
虽然倒不至于入职第一周就请 sick leave,但这周除了完成了一些基础的没太多难度的工作任务外,其他各个方面都没什么额外的进展,甚至都有些不好意思写周报了。算是临近初愈的当下才真切地觉得健康真好,之后还是好好体检和注意身体吧,各方面状态影响也都还挺大的。
工作
工作上由于之前已经熟悉了部分人和项目的一些情况,更多的是根据现有的一些资料和代码自己探索,也通过了一两个小的需求略微熟悉了下开发流程,后续更多是自己选择感兴趣的需求来开发,也算是一种不错的模式。
但原定的好好读代码上手一个新模块的计划被病情打乱了,整体来说还是不太满意,总感觉还是有些没回到专注写代码的状态,所幸周末已经康复差不多了,下一周得多补一些了。
可能由于之前也有不少远程的经验,对于远程办公的工作模式倒是适应得很快,算不上新的体验但是需要更加完善自己的任务管理系统了。
捏捏近况
上篇有讲过捏捏生病了,经过了两周的治疗,终于算是康复了,因为不放心所以还是去邻近的宠物医院做了完整的体检,一切安好,精神和食欲也恢复正常了。
在新家的捏捏刚开始还有些拘谨和闷闷不乐。
熟悉后整体感觉状态比北京时还要松弛一些,现在甚至会直接趴在我的肩膀上睡一晚,或者就在我旁边的被子上趴着,觉得适应得比想象得要快,完成了北方猫到南方喵的身份转换。
直到...
一位友人因为最近要出远门一段时间,所以把小猫先送到我家熟悉一下环境照料一下,这样即使我出门的时候我家人也可以帮忙来投喂和收拾。原本以为这样捏捏也会很开心,多了一个玩伴,但是似乎莫名地不合,两只猫在一起的时候总是互相示威、吵架甚至打起来,持续了两天了。
最开始捏捏作为家里的主人却似乎怂到丢失了地盘,常常在角落里躲着或者默默趴着,但是不知怎的从今晚开始,互相都 A 起来了,打到现在了。
目前双方主人内心毫无波动甚至在观战押注。其实主要是因为他们打到现在甚至没有一下打到对方,全是虚张声势的佯攻,我内心如下:
下周再报告新的战况,或者希望一觉醒来她们就是好朋友了。
新的旅程与计划
这周末在杭州见了一位新朋友 Xiao,之前互相看过博客但一直没见过面,就约了个饭,聊了很多很多,从技术到生活,从工作到人生,从理想到现实,从情感到自由,还挺神奇的。
之前另一位友人也说这个月要努力认识更多有趣的人,自闭了好多年的自己直到最近才意识到这件事的魅力,和不同经历的人交流常常会得到一些很新的视角和想法,可能这也是求同存异的价值所在。
所以从这个月开始也打算多出去走走,认识更多有意思的人,也算是新阶段的一些计划吧。不过还是需要在意远程办公的一些时间平衡,还在努力尝试中。
后面一个月依次会在武汉、上海、深圳、香港、成都和西安,行程很满但是充满期待,有兴趣的朋友可以随缘碰面。
有趣的事与物
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
视频
同样的,也有记录一下看过的有意思的视频:
- 一万首歌里选出前 10,图一乐音乐大赛获奖作品公布!
- 【把 ChatGPT 做成智能音箱】发短信 发邮件 控制程序 执行指令 任意输出 交互演示 AI 助手
- The Legend of Zelda: Tears of the Kingdom – Mr. Aonuma Gameplay Demonstration
- 一期杀疯了的吐槽大文豪的脱口秀
- Intro to Foundry | The FASTEST Smart Contract Framework
- 她不再需要我了!AI 又又又让人失业?【全新 ZV-E1 测评】
- 为了保护非遗,我把万元瓷器砸成碎片
- 把 9 年日记分享给 ChatGPT 后,它到底有多离谱?
- 孔乙己脱不下的长衫,我给他脱明白了
周报 #35 - 登报、搬家和生病的捏捏
前言
本篇是对 2023-03-14
到 2023-03-23
这周生活的记录与思考。
要不是因为 xLog 的激励差点就打算鸽了这篇周报了。
过去的一周多里,捏捏生病、父母开车来北京接猫(顺便接我)、陪同旅游(虽然所有景点我也是第一次去)、和即将离别的朋友相聚、15 小时车程的跨城长途、找房子(虽然只花了 1 个小时就签约了)、搬家和布置家里、新工作入职等等一系列事,似乎所有事都在接连着发生,没有什么喘息的时间。
大概是由于常常是沉迷在不管是工作还是生活中自己在意的部分,自己其实对于很多事物感知都不那么明显,即使短短的一周不到的时间似乎自己生活的方方面面和状态都改变了,却也只有在敲下上面那段话的时候才有些实感。
不过接近三周没敲代码是真的会生疏(且看着空白提交记录有点心绪),需要捡起来状态了。还有很多有意思的事。
上报纸啦
这周最有意义的事大概就是自己被『中国日报 · 21 世纪英文报』采访的报道出刊了,本身倒不是什么多大的成就,毕竟不是什么技术的贡献,自己各个方面也还差得远。但于我而言还是有着独特的意义,或者说是感觉是一种奇妙的缘分际遇。
18 年初,英专大三的自己处于极度迷茫期,转专业和辅修申请碰壁,而由于自己的专业背景差异太大,去极小的创业公司应聘前端面试时也屡屡被劝退说“你能力挺不错的,但是技术岗要相关背景,要不要考虑还是做产品/运营方向,可以加面”,自学上似乎也遇到了瓶颈,总觉得没方向地学了很多东西却不知道未来该怎么走。
鼓起勇气加了好友向一位计算机专业的英语学习博主(?)『LearnAndRecord』咨询他对我选择的看法和建议,原本其实也没抱太大的希望,而他很耐心地回了我很多,包括具体的方向等,可以说在那个阶段成为了我继续走下去最大的动力。
后来一步步申请学校、拿 offer、转码学习、从事了自己喜欢的工作,当然,期间挫折与喜悦都很多,不甚感慨。恰好发表的时机又是自己如愿加入 RSS3,能够更尽情探索未来可能性和生活方式的时候,就像是一个 milestone,告诉了自己似乎之前的一切都是有意义的,自己真的做到了,原来也真的值得。
借用某友人的一篇博客标题『吾将远航』,未来还有很有意思的事值得自己去追寻,自己似乎也处在这个节点,不早不晚。
另外,跟『LR 君』认识那么多年了终于能约上饭了,也算追星成功了!!!
搬家啦
自己这两年待得最久的地方就是自己的书桌前了,所以对书桌的收纳和布置都比较在意,因为前司定的的 last day 和入职 onboarding 间隔只有一周不到,回到杭州就只有两天时间处理各种事务,所以就迅速选定了一个离家不远的租屋,签约、办网、搬家、布置,两天内火速完成了,虽然还缺一些家居用品,但总算也是初步成果了。
桌椅是物业留下的,等各种安顿好打算换一下,其他的慢慢调整了!朝南的落地窗真的好赞!
顺便纪念一下之前在北京的桌面 Setup。
搬家是一件挺耗费心力的事,这次也是多亏爸妈来搬运了,整体还算顺利,新家各方面也还挺满意的。
也算是正式离开北京,离开这个自己曾留下挺多记忆点和经历的地方了,前前后后辗转了挺多城市,似乎总该习惯离别了,却依然还是会难过。祝好。
捏捏生病了
从周六开始,捏捏突然有些呕吐,观察了一阵子后马上送去宠物医院检查了,是幽门螺杆菌感染,医生说不算什么大碍,但是需要一段时间的治疗,也还是挺担心的,因为也还要坐十几个小时的车回杭州。
出去玩的路上还一直在看家里的摄像头,但是她活跃到把移动监控机器人揍到没电了,看起来没事。
幸好吃了药一天后症状就好了,后面食欲和各种也都恢复了,一路上也很乖巧。
还有一周左右的疗程,希望早些痊愈!
正式从北方猫变成南方喵啦!
有趣的事与物
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- ERC 4337: account abstraction without Ethereum protocol changes | by Vitalik Buterin
- 可靠分布式系统-paxos 的直观解释 - OpenACID Blog
- 云风的 BLOG: 学习从历史开始
- Surge Ponte 研发手记 | by Yachen Liu
- ReLIFE | 重返十七岁 · 天仙子
- 开源四年的一些记录
- GitHub Copilot X: The AI-powered developer experience | The GitHub Blog
视频
同样的,也有记录一下看过的有意思的视频:
- BAT 早就过时了,看懂 2023 年互联网大厂新战况
- GPT-4 Developer Livestream
- The Future of Work With AI - Microsoft March 2023 Event
- 一口气了解硅谷银行倒闭危机
播客
记录了一些自己在听的播客:
周报 #34 - Don't Stop the Clocks
前言
本篇是对 2023-03-08
到 2023-03-13
这周生活的记录与思考。
本周主要是工作的一些交接,相比起之前算不上忙碌,但紧迫的时间和后续要处理的事务依然带来了不少压力。毕竟还是即将离开一个生活了近两年的城市,更多的时间留给了一些聊天和聚餐,倒也是久违的放松时刻,然而就好像一直在走动的时钟在这两周突然停摆,觉得自己也还挺有意思的,忙碌的时候很想休息放松,而真正能卸下一些包袱的时候却又有些无所适从。
上篇刚写完就没长记性,又经历了一次喝断片,不过倒是是上演了同事们集中从各种线索里找我家地址最后虚惊一场的经历,也是一个有些奇妙的记忆点了;眼镜断了,但是因为本来度数不高,所以干脆几天没戴,有些不适应变得略模糊的世界但也还好;晓瑜打了电话,讲了很多近况;见了一些新老朋友,家里还当作猫咖迎接了两波朋友;还有很多有意思的事。
Don't Stop the Clocks
跟晓瑜电话时,因为有提到说后面可能计划去日本一边远程办公一边重返学校学个摄影这样自己喜欢的专业,她突然提到一句,从高一认识以来,也许是因为想做或是想做到的事太多,似乎我一直在向前走着,一直都不愿意停下。
回想了一下,确实。即使在 19 年本科毕业时所谓的 gap year 也忙忙碌碌做了不少事,攒够了学费。其实也不是什么压力所迫,家人一直以来也很支持我的选择,只是自己似乎大概在大二大三开始真正思考自己想做什么,想成为什么的时候,就不自觉地一直处于向前走的状态,想自由且独立地决定自己的人生,经历过一些否认和挫折因此也更想做到,或者说更不愿意输,太过习惯这样的节奏以至于不知道怎么样停下来。
想起常听的一首歌的歌名,『Don't Stop the Clocks』。之前自己的生活似乎像是一座时钟,似乎只有在转动时才能感受到意义。
中学时代没想那么多,基础不算太好的自己似乎只有不断努力去追寻更好的成绩;本科时知道明明不是喜欢的专业,其实也有大把的时间,却没有过多花在方向探索上,反而是过于努力地去参与各种学生组织来追求那个环境下的“最优解”,最多的时候四个社团,一周五六个会;在即将迈入大四,似乎可以闲下来的时候开始了自己的视频工作室创业,重新回到了忙碌的状态;毕业的时候才发现自己其实依然不愿意草草地从事一个自己并不喜欢的岗位,所以开启了 gap year,筹备留学申请,即使早早拿到了 offer 却也总是患得患失;去香港前反复告诫自己,可能是自己最后的学生生活了,要好好享受其中,其实也没能做好,从 1 月开启第二个学期后,就不断地开始焦虑实习、工作;工作后由于是自己的第一份正式的技术工作,从未敢松懈,似乎为了向他人和自己证明自己是能够好好走这条路的。
其实就结果论而言似乎这些前进都是有意义的,带来了还不错的高考成绩让我进入了一个还可以的大学环境,带来了不错的本科绩点和履历让我申请留学时至少不那么制约,带来了还不错的技术积累让自己也还有机会去追求自己喜欢的方向,也带来了很多很多其他的。但代价就像晓瑜说的,“感觉你一直好累哦”。是啊,其实挺累的,也不想很鸡汤地说什么一切都值得之类的,一路有得有失罢了。
现在身处在两份工作之间有些难的可贵的 gap week 中,却才真正愿意放缓自己的时间,不带那么多得失心去做、去思考一些事。会熬夜刷剧,第二天早上和试图叫我起床换粮的捏捏僵持;会把自己的租屋当成猫咖,一个周末接待了两波访客;会打开几个月都没动过的 Switch,和朋友打一下午的双人成行(真好玩!)。
時計の針を進めて。
时钟的指针继续向前走吧。
即使到了现在,我依然会跟自己说,“Don't Stop the Clocks”,因为未来依然有很多有意思的事值得自己去追寻,只是也会常常告诫自己,也别总是看向前方,偶尔也多体会身边的人事物,他们才是自己生活流动、让生命有意义的刻度,一切时光都值得被珍惜,即使是“虚度”的。
有趣的事与物
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- Why Write?
- 当稳定币不再稳定 - Atlas
- 使用 Cloudflare Workers 解决 OpenAI 和 ChatGPT 的 API 无法访问的问题
- OKR + GTD + Note => Logseq · BMPI
视频
同样的,也有记录一下看过的有意思的视频:
- Web Development In 2023 - A Practical Guide
- 和家人一起旅行,有多崩溃?!【西双版纳摆烂游】
- 人只有一个使命:走向自我|德米安【推书】
- 像我们这种怪人,会有朋友吗?
剧集
- 黑暗荣耀,可能因为看韩剧算少,感觉制作还挺精良的。一次性看完觉得剧情呈现还算完整但有些老套,只是周汝正人设有点喜欢诶,不逾矩的爱,还挺配的,基本上只想看他们谈恋爱。
个人生活剪影
初中班主任想给学生演示 ChatGPT,但是国内访问和各种登录限制是挺大的问题,折腾了一圈,最后采用了 Vercel 自部署 + GPT-3.5 Turbo API
https://github.com/ddiu8081/chatgpt-demo
并且根据这篇教程使用 Cloudflare Workers 配置 openai 代理
https://github.com/noobnooc/noobnooc/discussions/9
终于有了不错的体验,有点小开心。
初中班主任春哥因为想给学生演示 ChatGPT(也可能想偷懒让 ChatGPT 帮忙备课),所以我就搭建了一个服务供国内网络环境下直接访问使用,花了半个上午,真正用上的时候还挺开心的。
自己之前还挺常被戏称是小叮当,或者最近还多了个称号,被怀疑是人工 ChatGPT,似乎总是能用奇奇怪怪的方式实现朋友们的一些需求,还挺有趣的,也很享受其中。
然后就是希望下一周一切顺利了。
周报 #33 - 北京 x 故事 x 离别
前言
本篇是对 2023-02-27
到 2023-03-07
这周生活的记录与思考。
这一周生活发生了挺大的变动,也出于一些原因即将离开北京,有很多事需要额外处理所以不管是 Twitter 还是 Telegram 频道都很少更新,连 GitHub 都久违地出现了大段的空白格。
但总体来说是一个不错的趋势,把自己从一种生活的惯性中拯救出来,也发现这大半年自己的心态还是有了不少变化的。原本的自己大概几周才会出去一次,来北京快两年了哪都没去过,朋友依然只有那几个,也曾有过从杭州返京时,仅仅下了高铁就感受到一种精神不适,然而真正要离开这个城市时,却也发现还是有不少值得挂念的人事物。
看了一次展,喝了两趟酒,聚了几次餐,见了一些人,还有很多有意思的事。
北京 x 故事 x 离别
最喜欢的日剧叫『东京爱情故事』,91 还是 92 年的,很老的一部了,很喜欢这种几个人就能勾画出一座城市所有印象的感觉,当然,更主要是太喜欢莉香了,也总是在完治身上看到自己影子。
二十多年的人生里也浅浅接触过一些城市,哪怕是对于生活了十余载的杭州,我也从未觉得城市本身给我带来了多少印象或是归属,依然是人。上篇写到了武汉,这次就来聊聊北京吧,虽算不上喜欢,毕竟也经历了许多,依然值得一篇主题。它于我来说的意义可能远远不止爱情,所以就取名为『北京 x 故事 x 离别』。
曾经其实从未想过自己会和北京这座城市有多少交集,此前的唯一印象就是 2018 年的 11 月去北京展览馆参加一次展会时候因为是从武汉出发,错误评估了气温,在出站时被风吹到瑟瑟发抖,着实算不上一个好的印象。
再下一次就是 2021 年了,临近毕业,或多或少因为感情的因素开始考虑北京的工作,倒也没经过太多深思熟虑,再加上一个不错的机会,几天就决定了过去这两年的暂留之地。
我似乎一直以来对于城市是没有那么多执念的,常常觉得四海为家也没什么不好,只是从北京西站出来的破败感和夏天的燥热也并没有让自己的印象有多少改观。紧接着找房子、入职、两点一线地工作,一切似乎都发生得自然而然。
似乎自己多少还是带着些幸运体质,房东人很好,同意养猫,除了收房租外从来不多事,但是家里出现问题却总是随叫随到;公司原本有一小时的车程,却半年后搬到了三里屯,吃喝玩乐多且上班仅需 40 分钟;leader 给了我很高的自由度,在这一年多里尽情探索;经验多的同事在工作上很照顾我,会一起加班也常常聚餐,让占据了自己生活大部分时间的工作环境少了很多束缚感;会议室里的产品和测试同事也很有意思,总是说“别皱眉,有什么烦心事跟姐姐们说说”,还会在我生日的时候送我大黄蜂玩具;项目虽然常常做得很艰难,但每一个项目都能认识一些志同道合的人,度过了甲乙方的艰难时期也还能有不少私交。
幸运总是有限的,或者说总是平衡的,又或许曾经的自己透支了一部分未来的运气。
经历过因失恋+一些原因在家两个月不出门爆瘦 10 斤、每天也只能依靠着褪黑素睡上两三个小时的时候;有因对自己工作生活状态不满意,每天焦虑到深夜才缓缓睡去,没多久后又失眠发呆的时候;也有因公司项目聚餐喝了很多酒,打车回家的半夜躺在小区里不知道哪个角落睡了几个小时才苏醒,强撑着回到房间收拾残局,醒来后甚至还花了几百块向小区的大爷赎回丢在路上的手机这样的时候。
在这些多少有些不幸的时刻也难免会觉得,自己何必呢,待着一个似乎总会被勾起往事的地方,待在一个似乎连出门都没有动力的地方,待在一个可能自己哪天出了什么意外都不知道该向谁拨号求助的地方。何必呢。
后面的一段时间也一直窝在家里,似乎自己身处哪个城市也无所谓了,连季节更迭都有些模糊了。即使到了现在,故宫、圆明园、环球影城这些依然没去过,过得就像是一个在这个城市长期借宿的人。直到要离开这个城市,依然没有过多地对这个城市有所眷恋,只是渐渐还是多了一些珍惜的人和回忆,可能依然没能太习惯离别,越靠近定好的时间心情也容易更加沉重。
生活常常就像是随意涂抹的线条,时而稀疏时而密集,有的纵横交错,有的却背道而驰,但也许这些才共同构成了生活原本的模样吧。人越是长大,生活才渐渐展现其真实的一面,真实、残酷却不得不去面对。
有趣的事与物
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- 谈谈我对 ChatGPT 应用的 prompt 的看法 | Reorx’s Forge
- 我的六個專屬 ChatGPT 助手 - Pin 起來!
- Self-Hosted SaaS Alternatives: Replacing Paid Tools With FOSS Tools
- Buidler DAO x SevenX:Lens Protocol 万字深研报告
播客
记录了一些自己在听的播客:
视频
同样的,也有记录一下看过的有意思的视频:
- 当公司变成网吧,员工竟集体背着老板【工作室 Roomtour】
- 时隔 9 年重回特斯拉上班,比做 UP 主还卷?
- 面对越来越多的网络暴力,普通人能做些什么?
- 我们生活在四个世界里面
- Bing's AI Chatbot is Alive | tech news
电影
- 千寻小姐,太喜欢有村架纯了。海边小镇、平凡的日常,很难不联想到一种是枝裕和式的悲伤。千寻救赎和温暖了周遭的人,对自己的生活却永远都像是加缪的《局外人》一样置身事外,永远带着一种孤独的氛围。
个人生活剪影
之前其实一直觉得自己的心态还挺稳的,但原来当生活里久违地出现一件那么想成功的事时,真的还是会焦虑到需要不停地听歌来缓解。
也许是由于工作后的生活渐渐趋于稳定,自己并没有太大的情绪波动,甚至因为自己已经习惯将自己置于高压之下,反倒好久没有体会过心慌的感觉了。最近却真真切切体会到了这样极度的焦虑感,也许由于是自己太想实现的事,很难以平常心相待。
所幸最后是个好结果,真正心里的石头落下的那一刻,才发现自己竟然积累了那么重的压力,和朋友去清吧喝酒,一杯接着一杯,似乎想让所有的压力都随着酒精散去。
和 @RealAkemiHomura 面基吃饭 * 2,压马路聊了很多。虽然一直觉得自己很不 social,但真正快要离开北京前才发现还是有些想见的人的。
周末也异常丰富,和之前项目的甲方朋友出去吃烤肉,临走时却被楼下偶然瞥见的漫展所吸引,算是一次不期而遇的有趣活动,然后看了一下午小姐姐跳舞;作为社恐晚期,晚上和博译学姐的两个朋友见面,觉得似乎还是有点好转的,很开心;吃完饭还去跳海酒馆看了学姐在画室的朋友的个人画展,抽奖还抽中了一张画的微印版本,也是很有趣的体验了。
借着这次个人画展的主题里的前几个词,『杀出生活』,最近的状态似乎就是通过这样的方式重新找回对一切的期待。生活也许本身带着诸多不顺,终究需要去打破的勇气。
又联想起了『时间之书』里的一句话:
年轻人,你的职责是平整土地而非焦虑时光,你做三四月的事,在八九月自有答案。
记得原本是讲节气相关,现在刚巧三四月,却也十分应景。
综上,这周虽然没做什么正经事,吃喝玩乐倒是一样不落。
周报 #32 - 武汉、久别重逢与流动的心绪
前言
本篇是对 2023-02-21
到 2023-02-26
这周生活的记录与思考。
这一周工作上比较日常,并没有太紧急的任务,由于一些自己的事而处于有些紧绷的状态,但焦虑感和低迷的情绪却少了很多,大概有一种一切都在正轨上的感觉了吧。
前两周静茹突然发消息说 23-25 这个周末能不能来武汉,刚好和屈都在,想着能一起见一面,没什么犹豫,又有了一场随心的“旅行”,也重新回到学校、学院见了一些老师朋友。因为有了失去的疫情三年,似乎现在盘点和一些朋友的上一次见面都会恍惚良久,原来都是三四年前的事了。
这次在武汉也仅仅度过了周五周六两天,时间很短,却是自己这两年里第一次纯粹的旅行,有种很奇妙的感觉,似乎重新感受到了生活和自己心绪的流动,也从另一面映射出了自己的变化。
武汉
15 年的 6 月,自己填志愿时翻阅了学校发的一本小册子,里面有所有学校的介绍与历年分数线,带着些草率地选择着未来几年要朝夕相处的城市。其实没花多久就决定了武汉,大概多少源于自己曾向往武大的人文气息(分数差点,没去成,所以选择的学校多了两个字),进而觉得这个城市也带上了一些别样的吸引力。
虽然我会觉得学业上自己有些惭愧地并没有付出太多,也没有什么记忆深刻的成就,但在武汉度过的时光却不知不觉成为了我生命中很重要的一段时光。毕业时因为身边大多人也离开了武汉四散各方,我也曾想过说即使之后与这个城市再无交集似乎也没什么,重要的是这些记忆与关系。
而这次回武汉,从武汉站下车,到换乘地铁途经一个个熟悉的站名,再到那条走过几千遍的工大路与学院教室,才发现原来这个城市和里面的一草一木原来也已经刻入了自己的生活中,久违地感受到了一种“回归”的感觉。
也许算不上归属感,从独自拖着行李箱来到这个城市的那一刻,我就明白我终究是客居于此,甚至都没对这个城市抱有太多期望,直到离开时其实难过的也只是与这些熟悉的人分别本身。但不久后,疫情爆发了,封城、方舱、许多令人悲痛的消息甚至就发生在认识的人身边,这个城市似乎渐渐蒙上了一层灰色。
当时我人在杭州,看着网络上铺天盖地的负面消息,以及更多对武汉的谩骂与隐性歧视,切实地感受到了一种心疼与无奈,一个原本充满那么多色彩的城市现今却以这样的方式展示在所有人的面前。提到武汉明明有那么多值得说的,粮道街的“过早”文化、热干面与周黑鸭、自带气场的武汉话,暴躁却直爽的武汉公交司机(虽然真的有被一个刹车从最后一排差点飞到了中间)、传说走过就能携手白头的长江大桥(走过几次,风挺大、挺锻炼身体的,其他并没什么用)、江汉路的繁华与江边的惬意时光,光谷的热闹与成谜的交通状况。还有很多有趣或是会拿来的调侃的点,会跟朋友说这个城市很值得自己去体验一下,多面而别具魅力。却因为这一场疫情,武汉似乎已经渐渐失去了这种神秘感,甚至让一些人有了些固有印象,心情还是挺复杂的。
武汉并不会成为我第二个家,却始终会是我归途的栖息之所,累了,也许就会回去看看,重新捡起自己的生活。
久别重逢与流动的心绪
曾经在『周报 #09 - 没有色彩的 Yu 和他的巡礼之年』这一篇文章中有提到过这样一群人:
人在各个阶段似乎总是会有抱团的倾向,而一旦依赖于一个群体又不免遭受来自关系的压力与挫折。大学时我曾有这样一个四人小团体,两男两女,总是形影不离,到辅导员或是同学发现缺人都会很自然地询问其余的人。
但我在一段时间后感受到了明显的压力,剩下三位似乎是更风云一点的人物,总是在人群中耀眼的那一个,而我却似乎总是缺乏存在感,而内心又不想成为这样出于习惯而依附其中的多余之人。于是我开始刻意回避和逃离,当然,表现拙劣的我并不懂如何隐藏,很快就被察觉。
可以说比起多崎作我是幸运的,没有被抛弃,也没有什么误会,另外三位在一个夜晚把我堵在男生宿舍楼下让我讲出心结,并逐一进行排解,关于个性和存在感的回应我可能依旧觉得是安慰,但有感受到自己有被这段关系和模式所需要,自己的情绪有被他们所认真看待,我们的关系有被珍惜。即使后续因为城市和很多原因已经少有共同行动的机会了,但是依然有着不错的联系,以及到了任一成员所在的城市所首先会想到的人。
这次回武汉见的就是他们。
自己其实一直都很珍惜这种自然惬意的关系,似乎是谁一句“想你了”就能见面的那种,不需要太多刻意的陈词铺垫或是安排,倪、占、晓瑜和他们都是,即使由于疫情其实已经都三四年没能见面了。
在香港时也有在一晚接到一个突然的视频电话,他们三个在武汉相聚,我在微信视频中远程合影,而这次,终于我也能够在现场了。吃吃喝喝,闲散地逛着校园,讲着过去和现在的事,一切如旧。行程匆忙,周日就回了北京,希望也能再多相见。
除了见面外,在这次短暂出行中似乎发现自己有了一些变化,会更愿意去感受身边的事物,会更频繁地因为一些不起眼的小事或者甚至是在走过某条路时恰好听到的一首歌而愉悦,明明目前被一些很值得焦虑的事包围着,但心绪却似乎渐渐随着旅程流动了起来。
也后面也希望能有更多旅行的机会,
有趣的事与物
赛博搬家
大概多少是对国内的互联网公司以及一些面向国内的服务有些心存疑虑,这半年陆续在把自己所依赖的服务都尽可能搬到了国外,虽然大多还是中心化的,至少能少一些审查及隐私保护方面的担心吧。
而在武汉的这一周终于把依赖最重且搬家最麻烦的 iCloud 从云上贵州搬到了港区,还经过了不少波折,不得不说 Apple 在帐号管理和云服务同步这一块做的实在是不太行。
因为我的帐号买了很多软件(包括 Final Cut Pro X 等全家桶),所以其实并不想开一个新的号来专门迁移,幸好 Apple 的换区是能够保留已购买项目的,且我所有在国区买的 App 在港区也都有,这一点上其实还是比较无缝的。
但 Apple 的家庭共享就没有那么方便了,之前是我的帐号开了一个 Family,共享了 iCloud 200G 给倪和占共同使用,并且还监护了我妹妹的帐号(因为未满 14 岁),在我想换区时,则是需要先把我妹妹的帐号迁移到另一个家庭,以及我订阅的 Apple Music 到期(甚至不能提前,只能等到当月订阅周期结束,有点离谱),然后再用港区的支付方式与各类信息来更换区域,再启用港区的家庭共享 iCloud。
不仅是过程有些麻烦,而且在重新登录帐号时 iPhone 还出现了验证错误的情况,查了很多资料,都说只能恢复出厂设置,于是只能折腾了一晚上软件,幸好之前在工具箱项目中有过记录,但所有权限/应用都要重新设置也很痛苦,幸好最终还是解决了,总觉得这也是一件迟早要做的事。
另一部手机是 OnePlus 7 Pro,好几年前买的了,也是一到手就折腾刷了海外版氧 OS 来使用 Google 全家桶,可能国内厂商和一些服务已经让我到了有些精神洁癖的地步了。
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
视频
同样的,也有记录一下看过的有意思的视频:
- 对话 RSS3 创始人 Joshua:从 ChatGPT、AI 与 Web3、Web3 Social、Open Web 概念到 RSS3 发展思路【Rex Talk】
- Microsoft vs Google: AI War Explained | tech news
- 我们是倦怠的一代人,对内剥削自我,对外孤立自我
个人生活剪影
因为要去武汉,所以把捏捏寄养到了学姐家,自己就没拍什么照片,倒是因为她待得有点乐不思蜀了,我还拍了张在武汉的咖啡馆抱别的小猫的照片给她看:
然后她惬意躺在新家沙发上,一副 Who Cares 的样子:
这只没良心的小猫。
周报 #31 - 开源、前端开发与 ChatGPT 实践
前言
本篇是对 2023-02-13
到 2023-02-20
这周生活的记录与思考。
这一周工作和各种自己的项目安排异常满,虽然其实也不是真的忙到一点睡觉的时间都没有,但是因为有了很多莫名的焦虑感和低迷情绪,导致常常有些报复性熬夜的倾向,看了看手机给我记录的每天平均睡眠不足 3 小时。
这周情人节被豆瓣电影日历触发了一些心绪,想到了一些过去的事;下定决心折腾了一下买了 ChatGPT Plus,配合上 GitHub Copilot,节省了很多重复性的工作;因为最近一直在折腾这个,还去博译学姐的财经直播间里科普了一个小时 AIGC 和 ChatGPT,直播首秀,很新奇的体验;周末因为实在太压抑,和朋友去跳海酒馆喝了点酒,是难得的放松时刻;之前的 Side Project 疯狂拖延,到了周末几乎通宵两天,疯狂写前端;参加了 Cusdis v2 的开发团队,也写了第一个功能,作为一个后端给第一个比较大的开源项目提的 PR 居然是 Next.js 的,有点离奇;还有很多有意思的事。
开源与前端学习
虽然自己好像还是挺活跃在 GitHub、推特和博客的,但是因为其实工作年限比较短,而且当前工作也还并不是开源性质的,所以其实并没有怎么以代码贡献的方式参与过什么大型的开源项目,倒是几个 Markdown 和课程作业项目拿了不少 star,让我常常有些不太好意思。
所以今年年初也还是立了一些 Flag,多多以各种形式参与一些自己感兴趣的开源项目,包括在上周自己还给自己定了一个开源预算(详见『周报 #30 - 开源预算、写作初心与对技术的谦卑』),也给 RSS3 提了一些 Issues,算是一个好的开始了。
有一个挺有意思的事是看到 Randy 在推特上找一起开发 Cusdis v2 版本的伙伴,我用 Cusdis 已经接近两年了(即本博客的评论系统),非常喜欢这样简约且强大的系统,也帮一些朋友创建或是解决了一些部署和使用的问题,也差不多是移动的广告牌了。
虽然我不是前端,但因为太感兴趣了还是加了 TG 聊了一下,Randy 真的是个很纯粹的技术人,也很友好,我简单陈述了自己的情况和想法后,他让我先拉一下最新代码,能跑起来再聊(顿时有点面试的感觉)。
我粗略看了一下代码结构与命令,因为之前写 Solidity 一直用的是基于 JavaScript 的 Hardhat 框架,而后面学前端的时候也了解了 TypeScript,所以对包安装管理、一些基础命令还是比较熟悉的,只是从 yarn 换成了 pnpm,折腾了一下环境,在服务器上用 Docker 启动了一个 PostgreSQL 实例,就运行起来了(后来发现其实本地 sqlite 就可以了,不用绕那么大一圈)。
然后就是让我看了一下现在的基础功能,看看对哪一块比较感兴趣,于是我开始慢慢看代码,并且还提了一些 v1 版本的 Bug 给他(迅速都修复了,强大的执行力),接着工作项目很忙,就没开始写,但是期间看了一本 Randy 写的 Next.js 开发的小书:
这本书真的超级好,是我写 Next.js 以来在代码实践上讲得最清楚的资料了,其中有 Query、Mutation 和通过 Query Invalidation 来强制刷新数据等最佳实践,也推荐了 Prisma 这个超好用的 ORM 库,前面的理论讲解很清晰易懂,后面还附了两个实例项目,非常值得一看。
看完这本书后,我废弃了做了一半的 Side Project 的 Go 后端,花了一整个周末把后端逻辑实现部分在 Next.js 的 api 模块用 Prisma 连接 PostgreSQL 数据库的方式重构了,刚开始写的时候有些不太习惯,在用户管理和鉴权这一块一边看着那本小书的代码一边照着修改,后面的其他功能就比较顺手了,也算是一个比较完整的实践了,称赞一下 Next.js + TailwindCSS + Prisma 的组合带来了非常好的开发体验,很适合独立开发一些项目。
而经过了周末两天的狂写代码,对前端这一块实现上的信心也增长了不少,于是找 Randy 去领了开发任务,功能不复杂,就是使用 Mutation 实现用户保存评论提醒所需要的 Webhook 连接配置的逻辑,并且加上一些加载中状态、toast 提示等效果,但也是一个还不错的开端。
实现过程还遇到一些问题请教了他,也给了很耐心的解答。最后终于在晚上完成了这个 PR。
其实这种体验还蛮有意思的,自己在几乎没写过前端项目的时候去尝试参与开源,得到了很敬佩的开发者的帮助和引导,可能有时候主动一些也会有意料之外的收获。不过想到自己作为一个区块链后端开发,加入的第一个比较大的开源项目和提的第一个功能性 PR 居然是前端的,也是奇妙的体验了。
大家有兴趣可以尝试一下 Cusdis,之前也写过一篇部署介绍的文章可以参考:
ChatGPT
自己最早就是 GitHub Copilot 内测玩家,第一次用上就惊叹不已,原来 AI 在代码这一块就已经能做到这样的程度了,后面也持续在使用,大概也有一年多了;后来也同样高频用到的是 DeepL 的机器翻译,质量感觉比 Google 翻译好很多,也辅助我完成了很多开源的翻译项目;再之后就是 Notion AI 了,不过因为后来完全从 Notion 转移到了 Logseq,所以尝了个鲜就搁置一旁了;同类的还有之前黑五买的 Craft,一个在线笔记软件,也内置了小助手来优化文本;而最最重磅级的当属去年年末推出的 ChatGPT 了。
我记得约 11 月底推出,我在 12 月初找在澳洲的倪接了个手机验证码开始体验了。当时就常常用来问一些代码问题,基本上都能给出比较准确的回答,但由于自己其实还是更偏向于 GitHub Copilot 这种比较无感的方式,而并不想每次都组织一堆语言去问问题,再粘贴代码回来编辑,所以玩了一阵子其实也就搁置了,只是在学一些新技术的时候偶尔打开看看。
而上周偶然看到自力使用 ChatGPT 作为小助手的用法,很心动,经过一番虚拟信用卡之类的折腾终于搞定了 Plus 会员,20 美元一个月的的不菲开销让我开始梳理自己的日常使用需求,最后把编程代码问题、日语学习、中英翻译、搜索引擎、文案优化等需求分成了多个对话框进行使用,每天像是有一堆小助手一样,可热闹。
最近有不少写前端的事,之前虽然也看过课学习过,但是还是有很多细节不算很清楚,这时候面向 ChatGPT 提问和从它的回答中过滤正解以及消化为自己的知识其实也还蛮有效的,而且很偏实战,也会提出不少新颖的实现思路,语言学习应该也是同理,但还没来得及好好测试日语学习的效果,后面如果有意思可以记录一下对话。
有趣的事与物
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- Next.js 应用开发实践
- 入行 14 年,我还是觉得编程很难 | Piglei
- 马桶里的大厂病 - hayami's blog
- Re:Play Issue 25 - 浪漫至死
- The 4 Levels of Personal Knowledge Management - Forte Labs
- Real-world Engineering Challenges #8: Breaking up a Monolith
- Readme Driven Development
播客
记录了一些自己在听的播客:
- ep.2 跳海酒馆:世界在下沉,我们要建造 - 牌牌坐 | 小宇宙
- Vol. 84 数码荔枝: 正版软件生态、独立开发与远程办公 - 枫言枫语 (播客) | Listen Notes
- ChatGPT 的出圈与大佬们的焦虑 - 科技乱炖 (播客) | Listen Notes
- #20 一年一度败家节目 2022 - 二分电台 (podcast) | Listen Notes
视频
同样的,也有记录一下看过的有意思的视频:
个人生活剪影
跳海酒馆
周末和朋友去了跳海酒馆,一个在胡同里的小小的酒吧,拥挤但算不上嘈杂,却别有一番热闹,里面写着大大的“有人跳海”四个字。和恰巧来北京出差的朋友畅聊了很久,连这周带着些阴霾的情绪也缓解了不少,新的一周也要好好调整。
捏捏
去『跳海酒馆』喝了点酒,到家已经大概 1 点,没多久就昏睡过去。刚迷迷糊糊睁眼发现捏捏似乎凑在我的脸上努力闻着什么,时不时还用小爪子试探性地碰一下,脑子(重启后)转了好一会儿才反应过来她是在担心我是不是还活着。黑暗中慌忙打开手机抓拍了一张,顿时感受到了些许久违的温暖和依靠。
她一定知道自己很可爱!
情人节
不得不说豆瓣电影日历的选片人还是有点心思的,情人节放花束般的恋爱,然后配上一句:
恋爱就像派对,总有一天会结束。
周报 #30 - 开源预算、写作初心与对技术的谦卑
前言
本篇是对 2023-02-07
到 2023-02-12
这周生活的记录与思考。
这一周工作上不算有太多进展,却感觉年后的时间感觉过得尤其快,明明好像也没做什么有价值的事,却处于一种忙碌之中。但额外的项目部分终于开始投入不小的时间在处理了,离原本的预期有些偏差,也带来了一些焦虑,算是在慢慢排解。
这周受公司运营之托写了一篇关于 Cosmos 的文章,在写作和发布过程中倒是有些心态上的警醒,也引发了自己对于写作初心与对技术的谦卑的一些思考。
周末去了国家大剧院听了场音乐会,之前一直想听交响乐不过少有机会,终于解锁了周末新去处;周末和我目前评论系统 Cusdis 的作者 Randy 聊了一下(顺便报了几个 bug),感觉是个很纯粹的技术人,希望在 Cusdis v2 版本的开发中自己也能有所贡献;还有很多有意思的事。
开源预算
在 Randy 的一篇文章『我给自己设立了每月 $20 的开源捐赠预算』中看到他对于开源项目的理念与态度,觉得很有意思,也引发了我想为自己也设立一个同样的开源预算的想法。
目前的设定是每月至少 $20(约 130 元人民币)或等价值的预算,根据自己的日常使用与技术栈灵活选择,我会选择以下项目进行捐赠:
- 对我有启发的独立博客作者与开发者
- 我在做 side projects 时常用且解决了很切实问题的项目
- 我高频使用的一些有趣的开源工具与服务
目前我捐赠的项目为:
- Reorx,一个我很欣赏的开发者,他的独立博客、对于工具的态度与探索以及开发的一些项目都让我获益良多,我的『Yu's Life』频道就是 fork 于他的『Reorx’s Footprints』,在大半年的时间里重塑了我的信息输入输出流,最近刚发布的『GitHub - jsoncv』也恰好在我重构简历时帮了大忙。
- immersive-translate,是 owen 主导开发的一款沉浸式翻译插件,是一个很有趣的工具,且 owen 在非常勤劳地开发 v2 版本,我早早加入了团队,目前也在认领一些需求进行开发,在团队讨论得知需要一些服务器时,提供了两台。
可以在 GitHub Sponsor 看到我对哪些项目和个人进行了捐赠。
写作初心
自己其实一直以来还算喜欢写作,尤其是这大半年的输出达到了还不错的频率和质量,因为长期写博客也认识了不少朋友,甚至偶尔也能得到一些不错的机会。但随着自己的文字功底随着积累增长,也常常得到一些挺正向的反馈,却似乎有时候会陷入一种写作的陷阱。最近发生的一件事让我有些警醒。
公司的媒体运营在年前跟我约了一篇稿件,主题并不限制,大致方向是有关公司业务技术的就可以,因为当时时间还多,就先应承了,但过年期间也就搁置了。回北京返工后被催稿时才记起,但又不想很敷衍了事,所以选择了一个 Cosmos 底层链和共识分析的大主题,花了一晚上写完了。
其实交稿时还没什么,因为大部分知识点也是出自于对一本书籍的梳理总结,想着可能只会是一些细节微调,然而交到一位精于底层链的 leader 手上审核时,却有了如下对话。
查看了用于审稿的分享链接,发现他在我的文章一些存疑的细节中做了十分详尽的标注,很多部分还带论文与引用。
起初只是觉得,自己是不是有些过于盲目相信所读的书籍与知识点了,而少了一些应有的怀疑与求证精神。
又深思了一下整件事发生的全过程,发现是自己的心态产生一些微妙的改变。自己似乎一直以来是挺擅长驾驭文字的,有时候是梳理总结一些知识点并以一种易读有趣的方式呈现,有时候是通过文字表达和呈现自己的一些想法与思考。
文字似乎成为了自己习惯的表达方式,也因为有了不少正向反馈,所以似乎有一些失了本心。写作本身源于对生活与一些事物、技术的探究与呈现,其次才是分享与为他人创造价值,自己似乎慢慢有些把分享这件事作为了一种目的。
论语中有一句话:
“质胜文则野,文胜质则史。文质彬彬,然后君子。” —— 《论语·雍也篇》
其实蛮适用于写作的。当质(写作中的干货)太多而文(文采/技巧)太少,则少了一些吸引人看下去的乐趣,也失去了写作的魅力;而文胜过质则容易虚浮,缺乏实质性的内容,则失去了写作的意义。只有文和质兼具,才可以说是一篇好的文章。
我想我或多或少会担心自己向文胜过质的方向倾斜,好在有这次的事及时警醒,后面也会更加谨慎对待自己的文字。
对技术的谦卑
这其实又关联到一个挺值得探讨的话题,即对技术的谦卑之心。
我想处于这个行业的人或多或少都能意识到技术的无止境,编程入门或是以之为业其实只是一个开始,有太多值得敬佩的人,也有太多有趣的技术。
我其实是带着滤镜进入这个行业的,在还是一个英语专业本科生的时候对这个行业和职业充满了太多幻想与期待,因此如愿从事了开发工作后,就时常提醒自己一定要对技术有着谦卑之心。
因为看到了太多前后端都很强的开源大佬称自己为“会写一点后端的前端”或是“做点大家喜欢的小玩意”,很喜欢这样的态度,技术本身是乐趣与实现自己想法的一些手段,而不是需要拿出来炫耀的工具,对技术需要抱有这样的一种理念,才能不断学习成长。
有趣的事与物
软件
之前自己其实一直用 Apple Music 居多,但是有些操作逻辑实在是有点无语,歌单功能形同虚设,而且由于接口的一些封闭性,很难获取自己的数据。因此,即使我的 Telegram 频道其实原本就配置了 Spotify 点赞歌曲的自动同步,每次都是在 Apple Music 听到好听的歌后,去 Spotify 搜索,且由于免费版本的广告和试听切歌限制等很麻烦,所以其实很少同步自己的一些歌。
最近和倪、占的 iCloud Family 正在迁移逃离云上贵州,停掉了原本的服务,对比了一下港区价格发现还不如直接迁移到 Spotify 了,于是快乐地拥有了 Spotify Premium 了,体验起来舒服很多了,再加上之前看了『串流先锋』剧集,总有一种奇妙的参与感!
再加上占在香港办宽带送的 Netflix 家庭会员,影音娱乐这一块现在有了很无缝的体验!
输入
虽然大部分有意思的输入会在 『Yu's Life』Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
文章
- 黑客与顾客:开源软件能商业化吗? | 夜天之书
- ChatGPT 是網路上的一個模糊 JPEG 文件
- 我看 ChatGPT: 为啥谷歌掉了千亿美金 | 酷 壳 - CoolShell
- The 4 Levels of Personal Knowledge Management - Forte Labs
- The latest gossip on BFT consensus - Tendermint
- HotStuff: BFT Consensus in the Lens of Blockchain
播客
记录了一些自己在听的播客:
视频
同样的,也有记录一下看过的有意思的视频:
- 你对 AI 的理解可能从根儿上就错了【关于 AI 的一些元问题】
- 功绩社会生产抑郁症患者和厌世者?
- 公开呼吁取关?!一条视频席卷全国,衣戈猜想走红真的是偶然吗?
- 我办的音乐比赛炸出了这么多大佬? [图一乐作品 PICK]
- 重启 20 年前的索尼监视器和游戏主机,需要几步?
输出
博客
个人生活剪影
生活
这周大部分时间在公司,所以格外期待周末的到来。
周六的时候和博译学姐去国家大剧院听了一场贝多芬的音乐会,之前我总是会去三里屯那边的爱乐汇轻音乐团去听一些小型的主题演出,像是宫崎骏、爱乐之城与百年经典等专题,小小的空间气氛很好,不过当时就也想着感受一下交响乐的震撼,终于得偿所愿!
很有意思的是看完音乐会出来后就买了莫扎特的胸针(谁让他更可爱),还发表了如下茶言茶语。
今日份茶言茶语。“刚听完贝多芬专场音乐会转头就买了莫扎特的胸针,他会不会伤心啊?”
在发完推后还很巧合地认识了相同时空同在国家大剧院的推友 Noy,发现也是做 web3 开发相关的,周末也爱去看一些剧和音乐会,约了面基,之后可以一起去看了!
还有一个小惊喜就是我们在大剧院落座路过一个外国帅哥时,他说了一句“I love his hair”,来自陌生人的友好就很开心。现在顶着一头蓝色长发真的越来越二次元了,回头率 300%。
捏捏
叫我起床的捏捏
因为我不起床开罐头而直接爬上被子给我一拳的捏捏。
撒娇的捏捏
最近捏捏又特别会撒娇,经常在桌子上歪头杀。
跟朋友分享后,捏捏以一猫之力拉高了别人家的小猫吃猫粮的标准,哈哈。
Cosmos 区块链架构与 Tendermint 共识机制
前言
工作中我主要参与的是跨链项目的方案架构设计与实现,因为公司既有方案是基于 Cosmos 区块链的,我在一年多的项目中基于 Cosmos SDK 作了一些底层链开发改造,对其技术实现有了一些了解,但由于开发周期比较赶,一直没能对 Cosmos 的架构设计与 Tendermint 共识机制有一个系统的了解。
项目结束后,终于得闲读了一下《区块链架构与实现:Cosmos 详解》,本文则是我自己对 Cosmos、Tendermint 的理解和总结。
区块链技术发展
在讲具体的 Cosmos 区块链之前,我们先梳理一下区块链发展的历程,以及目前业界主流的区块链技术。
技术限制
区块链发展至今已经有十几年的历程,从最开始的比特币,到红极一时的 EOS,再到后来渐渐成为主流的以太坊,各有特色却也都有其限制之处。
- 基于比特币或以太坊的方式由于需要实现 p2p 网络、密码学、共识算法等,需要相对比较高的技术门槛;
- 基于 PoW(工作量证明)机制的底层链对于算力(电力)消耗也越来越大,对于资源与环境并不友好;
- 随着链上应用数量与规模的不断增加,链的性能瓶颈越来越明显;
- 随着业务场景复杂度提升与需求不断增加,链的共识算法也需要根据具体场景而变化;
- 不同链的底层架构差异较大,不同链之间也是孤岛,难以互相通信,跨链技术方案落地也是一个难题。
技术发展
为了解决上述问题,业界也有不少的技术方案。
- 由于 PoW 对于资源的大量消耗,许多链采用了 PoS(权益证明)机制,如 EOS 的 DPoS 与以太坊刚升级不久的 PoS,发展也日益成熟;
- 为了解决底层链限制问题,从类似比特币这样为单个应用构建单独链的模式也渐渐发展到了利用智能合约构建 ÐApp;
- 对于性能限制问题,比特现金采用了增加区块容量的方案,EOS 采用提升 TPS 的方案(号称百万 TPS),而以太坊则通过分片(Sharding)的方式对链上交易进行并行处理;
- 跨链技术方面,哈希锁定(散列锁)的方式在比特币与 Algorand 项目中有应用,除此之外还有公证人、中继链等方案。
Cosmos 区块链框架
概述
Cosmos 是一个由 Tendermint 公司开发构建的开源区块链底层框架项目,其目标是为了解决区块链技术发展过程中遇到的各类问题,提供一个高性能、高可扩展、易于开发的区块链框架,其开源地址如下:
Cosmos 可以看作一种多链网络,旨在实现“互链网”远景,而 Tendermint 和 Cosmos SDK 则是其技术手段与实现路径。
对于资源消耗与交易问题,Cosmos 采用了 BFT(拜占庭容错) + PoS(权益证明)的方式来解决;同时,为了降低区块链搭建与基于区块链的应用开发门槛,Cosmos 采用了较为通用的项目构建方式,使基于 Cosmos 进行链开发更加模块化与工程化,其主要由 Tendermint Core、IBC、Cosmos SDK 三部分组成。
Cosmos SDK 组件
虽然名称叫作“SDK”,容易引起一些误解,认为其仅仅是与链交互的一个库/组件,但其实 Cosmos SDK 可以说是一个完整的架构,开发者可以通过其来快速搭建自己的区块链,是 Cosmos 生态体系中的重要组成部分的。其开源地址如下:
Cosmos SDK 主要实现了区块链中的一些通用模块,如账户体系、交易、链上治理等,开发者又可以便捷地基于其快速构建新的功能模块。
其主要模块如下:
- 账户与交易相关模块
- auth:系统账户管理
- bank:链上资产转移
- 辅助功能模块
- genutil:创世区块
- supply:资产总量管理
- crisis:所有模块不变量管理
- params:所有模块的参数管理
- 链上治理模块
- gov:链上治理机制
- upgrade:链升级
- PoS 模块
- staking:链上资产抵押
- slashing:对验证者的被动作恶进行惩罚
- evidence:对验证者的主动作恶进行惩罚
- mint:链上资产铸造
- distribution:区块奖励管理
- IBC 协议模块
- ibc/core:跨链通信功能
可以看到,Cosmos SDK 框架设计出于 Object-Capability Model 安全理念的考量,设计高度模块化,每个模块都有自己的存储空间且对外仅暴露必要接口。
Cosmos SDK 中有一个特定的 Keeper 角色,用于维护更新状态。通过这种管理方式,模块之间彼此隐藏了具体实现细节,而仅仅通过 keeper 来互相调用,且每个模块内部也都只会被 keeper 进行更新,有效保障了链上状态的一致性。
Tendermint 组件
Tendermint 是 Cosmos 的核心组件,是一个高性能的区块链底层共识引擎,从架构上来说,其主要分为对等网络通讯层、共识协议层与上层应用层三大部分,其中共识协议层是其关键部分。
Tendermint 在共识时并不关心具体交易细节,而只是将交易当作字节打包成区块,然后通过各节点之间的的机制达成共识。其要求上层应用状态更新为确定性过程,即从相同初始状态开始,在全网环境下交易顺序达成一致(即对于一个序列的消息所有的正常节点都会以相同的顺序进行处理),上层应用的状态在全网之间也应保持一致,区块链会包含上层应用的数字指纹来进行验证。
Tendermint 共识可以支持在上百个节点规模的区块链网络中实现秒级出块,其提供了逐块最终化(Finality)的特性,即一个块确认后可以保障其之前的所有块都不会被修改,保障了区块链网络安全性。
区块提交后,Tendermint 共识协议层通过 ABCI(应用层与共识层交互所抽象出来的接口)与上层进行互动,完成交易处理并返回结果。其将区块执行过程划分为多个步骤,上层应用拥有自主权来定义业务交互逻辑,通过特定接口进行开发与实现(如可以实现筛选验证者逻辑或复用 Tendermint Core 的共识协议与对等网络通信来实现链业务需求)。
关于 Tendermint 共识算法具体机制可以阅读以下论文进行了解:
其特有的一些机制带来了区块链共识过程中的显著优势。
首先,Tendermint 源于 PBFT SMR(State Machine Replication)算法,但对其机制进行了简化,其共识主要基于区块而不是用户请求,并且在机制上将 PBFT 常规流程与视图切换流程进行了统一,使其更容易理解与实现。
它提供了坚实的基础设施与良好的用户体验,是较早能够支持在上百个节点规模的区块链网络中支持秒级出块的底层,同时也通过逐块最终化(Finality)的方式确保之前的所有块都不会被修改,保障区块链网络安全性。
其节点之间通过 Gossip 协议进行通讯交互,不要求节点之间的全连接,而是通过 gossip 对等网络进行通信,这样可以有效降低节点之间的通讯成本,同时也可以有效提高网络的容错性。
Tendermint 算法实现细节与机制将在之后的系列文章中具体讲解。
IBC 协议组件
IBC 协议属于 Cosmos SDK 中一个特殊的模块,其主要为 Cosmos 提供了区块链之间的跨链能力,其主要原理是通过密码学技术来向其他链证明自己的链上事件,可以理解为跨链双方彼此为对方的一个轻节点(轻客户端),而两条链的通讯则是通过 relayer 实现,从而实现跨链通讯/交易。
这一部分细节较多,且与跨链较为相关,会单独出文章进行详细讲解。
总结
本文为 Cosmos 及 Tendermint 共识系列第一篇,主要介绍了区块链的技术发展、Cosmos 区块链框架中的 Tendermint 和 Cosmos SDK 等核心组件,并对 Tendermint 共识协议的原理和各机制进行了一些概述。受限于篇幅,主要以概念讲解与流程梳理为主,未涉及具体的技术实现细节与代码讲解,将会在后续的系列文章中对 Tendermint 共识算法/机制及 Cosmos SDK 代码实现进行补充。
参考资料
周报 #29 - 日语学习经验、Steam Deck 与居酒屋
前言
本篇是对 2023-02-01
到 2023-02-06
这周生活的记录与思考。
是上班的第一周,因为过年期间也有在做一些工作,所以倒不是不适应工作节奏,只是常常没办法自由地做自己的事,顿时觉得时间紧迫了起来。
开始重温日语,发现居然还记得很多,惊喜;周末追了些新剧,时隔一年第一次去电影院看了电影;拿到了期盼已久的 Steam Deck,一番配置;周一开始尝试给捏捏喂翅中(据说对毛发好),感觉胃口还不错,不挑食;时隔大半年重新整理了厨房,开始自炊生活,已经坚持到了第三天;周一出门吃了心心念的大阪烧;还有很多有意思的事。
日语学习
因为有去日本的打算,年初立下了 flag 重温日语。上次学大概已经是六七年前了,所幸五十音和一些基础的语法还没忘记,捡起来也不算太久,不过因为这次有了考证的压力,还是重新认真学习了。
课程资源
之前一直看的是沪江网校葉子先生的新标日初级,算是比较经典的教材了,在 B 站上有官方的录播课
而最近在 Twitter 上看到了一名博主 Yellow 的一个日语学习的 thread,使用的是『大家的日语』,也提到了配套的 YouTube 教程,是一名在台湾教日语的老师,感觉很有趣,想尝试一下
辅助资料
关于一些单词语法学习方面,记起了当时大一的时候每天上课路上都听一个播客频道来记忆一些语法点,很有效(主要是声音太好听了)
因为也习惯了书 + 课程这样的学习模式,所以前期也没再找其他的辅助资源了,打算先好好打基础。
输入法
解决了学习资料的问题,接着就是输入法了,iOS 使用的就是原生输入法,不折腾了。
而我日常 macOS 端因为有双拼需求,使用的是 Rime 输入法,并且根据通过这篇文章配置删除了系统原生的 Abc 输入法:
所以也不想因为日语输入法而新增一个系统原生,于是找了一个 Rime 适用的日语调教方案,目前体验下来很棒:
使用效果如下:
不过有个问题就是双拼用久了后,有时候用罗马音打字的时候也会手快打双拼,还在勉强适应中...
有趣的事与物
Steam Deck
这周最开心的就是收到了挚友送的 Steam Deck 了,虽然其实 12 月就已经到货了,但是香港邮寄什么的不算方便,直到年后才拿到手,比想象得大很多,但是并不重,手感超级舒服。
虽然像是松鼠一样买了很多 Switch 游戏,但是自己其实一直很少玩,总是很难把游戏作为一种真正放松下来的娱乐方式,倪这么多年一直督促我玩游戏,也没什么成效,再加上后面换成 mac 后,连 steam 都已经很少打开了,这次终于让我连没有设备这个借口都没了哈哈,后面还是会有一些定期体验一些经典游戏的计划。
话说 Steam Deck 送的专属皮肤好酷。
输入
文章
虽然一些有意思的文章会在 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。
- 2023-01 网络阅读总结 · 天仙子
- Nostr 介紹 | 蓋索林 Gasolin
- 聊聊 nostr 和 审查 | 酷 壳 - CoolShell
- DApp 构建指南 —— 02 需求业务分析 - Caos
- 图床服务的搭建思路
- Video Game Economies
- Learn In Public
- My Story as a Logseq Contributor | pengx17
播客
因为这周通勤少了,所以播客听得不算多,印象比较深的是这个:
视频
同样的,也有记录一下看过的有意思的视频:
书籍
- 世界尽头与冷酷仙境,在读。其实好久没有从小说中得到这样的期待感了,也许是因为叙事方式,或是因为每次都是路途中读几个小篇章而有些断续,总是想知道后面会发生些什么,却也不想太过囫囵而错过了这样优美的笔触。另外这种“另一个空间”的设定让我想到了一个古老但同样很有意思的游戏《废都物语》。
剧集
- 最后生还者,之前一直耳闻过游戏,最近出了剧集,看了前两集,还不错,会继续追一下。
- 三体,因为对动画太失望而开始追的剧集,意外地很不错,很喜欢于和伟。剧集的节奏有些缓慢,三体游戏的部分有时候看着也有些难熬,但整体来说还是很值得一追的,也期待奈飞版的。
- 狂飙,近几年好像除了迷雾剧场以外,蛮少追这种题材的新剧了,但因为热议太多,所以还是看了一下的,没想到还是挺惊喜的。即使难免有些政治正确的妥协,也还算大胆,就是是小人物也塑造得很好,但是结局确实抽象了点。同类型更推荐的其实还是《沉默的真相》。
电影
- 深海,听说了一些并不好的评价,但可能由于是这大半年第一次进影院看的电影,有些心情的加成,觉得还挺不错的。一个小女孩的梦境,一个千与千寻般的童话世界,略带些浮夸的演绎,还算应景的 bgm(除了小白船一下让我出戏到《隐秘的角落》)。至少能看到国漫电影也尝试去探索更小更细腻的视角去呈现,而不仅仅是各种奇闻神话。
个人生活剪影
生活
这周感觉很魔幻就过去了。年后请假了三天,返工第一天因为担心捏捏所以提前回来了,还买了一个移动摄像头;第三天因为公司楼下着火了,也提前回去了;第四天则因为项目经理和测试一起去滑雪&泡温泉去了,所以我也居家了;满打满算上了两天班,不过工作也还是完成了。
火灾虽然没有人员伤亡,但是发生在市中心也还是挺后怕的,不过就是这种时候发现身边从家人到朋友都多少有点喜剧人了。
我司所在大厦中午起火🔥了,到处都是浓烟,来了九辆消防车。
项目经理姐姐:冒着生命危险把电脑给你拿下来了(记得回去加班)。
我家人:还好电脑拿下来了。电脑才是我本体吧🙃
周末本来安排了算是不少工作量,但是因为刷《狂飙》和《三体》,效率挺高但是完成量不够,这周周中要补不少了。
而周日晚上因为朋友刚好在我家附近看电影,就约我一起去,没有选比较热门的《流浪地球 2》或是《满江红》,而是看了这一部《深海》,进入影院才发现已经好久没有线下看电影了,确实还是别有一些心情的加成,后面会尝试自己多去看看。
周一晚上去吃了我心心念了好几个月的大阪烧。
其实起因就是在看《静雪》时候看到他们就是爱吃各种,尤其是铁板烧大阪烧这样一看就很有食欲的,之前还跟朋友吐槽过:
但是因为天选打工人体质,一直都没阳(直到现在),年前还是不敢出门,现在已经佛了,四处吃喝玩乐。
“诶 大阪烧?”
终于吃上了因为日剧一个画面馋了好久的大阪烧,果然打工人的周一和扎啤绝配!
感谢博译学姐作为日常饭搭让我避免了一个人喝两杯扎啤的惨兮兮时刻,在北京的快乐玩耍时间又增加了。
捏捏
镜头下
而因为在摄像头里找不到捏捏而担心,所以后来买了一个移动监控机器人,在调试的时候偶然拍下了好几张照片,觉得好可爱,后面有摄像头也放心很多了。
论捏捏的 MBTI
这周和友人有一个很有意思的话题讨论,被问到说我觉得捏捏是什么性格的,一个我从没想过但是很有意思的问题。
这是一个还挺有意思的命题,因为猫猫不会自己做测试,而我们眼中的她的性格也往往是日常相处下来的观察与自己的一些私心希望所塑造的,某种程度上也会是自己的各种观念的映射,很新奇的角度,其实也很久没有跟朋友有这样惬意而带着些有趣思考的聊天了,挺珍惜的。
周报 #28 - Mastodon、故乡与捉迷藏的猫
前言
本篇是对 2023-01-23
到 2023-01-31
这周生活的记录与思考。
这周的大部分时间是在老家度过的,弥补了一些遗憾,平淡却又珍贵。回杭后因与友人相见而暂留了一天,又从杭州匆匆回到北京。到北京的家后稍放下行李就迫不及待地去同事家接回捏捏,等都差不多收拾好已经神情恍惚,简单洗漱了一下打算小睡一会儿写个周报,再一次睁眼就已经是早上 7 点了,再加上白天要通勤去公司,所以也就搁置到现在才写。
回来第一天就被捏捏气到,给上班第一天增加了些许惊吓,但想到又回到了这样有趣的日常便也是心安多过责备(我哪敢啊);然后火速下单了一个移动摄像头,难怪朋友说我是以养女儿的方式在养捏捏了,各种不放心;还有很多其他有意思的事。
有趣的事与物
Mastodon
这周没写什么博客,年前想折腾的几个事也没做完,但是倒是研究了一下 fediverse,觉得很有意思。
本想着把一些英文内容放到 Mastodon 上进行发布,后来想着还是把自己的输出平台收窄了,还是会在 Twitter 发布,通过 IFTTT 自动同步过去,依然聚合在 Telegram 频道和 Crossbell 链上,有兴趣的朋友可以一起来玩,我在 mas.to 域的 @pseudoyu@mas.to。
有几篇关于这些很有意思的文章,读了后理解了挺多的:
- 谈谈 Mastodon、Fediverse 和 ActivityPub - zu1k
- 什么是 Mastodon(长毛象),应该怎么玩
- 写给 Twitter 用户的 Fediverse 指南 | wzyboy’s blog
- 去中心化社交网络 Mastodon 研究报告:平台与协议之争背后,它会是最终赢家吗? – Web3Caff Research
- 設定 IFTTT 同步 Twitter 到 Mastodon. 事前準備 | by Pei-lun | Medium
Crossbell
另外,之前在这篇『周报 #25 - 基于 Crossbell 的个人信息输出与同步系统(重构)』中提到过把 Twitter 和 Telegram 历史消息同步到链的方式问题,后续也都从他们这里得到了对应方案:
用的时候顺便还提了几个 bug,后面再深度体验一点会整理一下再写一篇详细的文章,以及提一些 issue,挺有意思的。
输入
书籍
- 我的职业是小说家,其实村上的随笔或是文集算是很好读的那种,言辞带些犀利却也同样带着些娓娓道来的真诚与别样韵味,像是对话,却也时常被埋在其中似乎带着些雕琢的幽默感逗得不禁莞尔。总共大概花了三个月才真正看完,作为手头上为数不多的纸质书,更多的是想起时随便翻翻。第一次去猫舍的时候虽然心动,却也本没有太下定决心那么快承担这样的责任,而路上随手翻起的一页里写道“当时我们过着非常节俭的斯巴达式的生活。家里既没有电视也没有收音机,甚至连一只闹钟都没有。也几乎没有取暖设备,寒夜里只好紧紧搂着家里养的几只猫咪睡觉。猫咪们也使劲往我们身上贴过来。“短短几句,却构成了我当下把猫带回家的最大动力。也谈到了许多,关于爱好、写作目的、创作思路与平衡,都是近两个月慢慢沉静下来才真正能够稍理解些的。
- 世界尽头与冷酷仙境,其实好久没有从小说中得到这样的期待感了,也许是因为叙事方式,或是因为每次都是路途中读几个小篇章而有些断续,总是想知道后面会发生些什么,却也不想太过囫囵而错过了这样优美的笔触。另外这种“另一个空间”的设定让我想到了一个古老但同样很有意思的游戏《废都物语》。
剧集
- 静雪,前几集是真的很喜欢,spitz 的歌、各个角色的性格、很舒适的日常。也许是因为太过于代入男二凑斗的情感,一种岩井俊二所描述的“我爱你,与你无关”的温柔和坚定,后来对于故事情节的发展有止不住的失望,直至最后也没能太过了解到青羽和想感情的基点,确实美好,却有些直白与单薄。
- 三体 剧集版,倒是成为了自己每天会持续追的一部,剧情节奏有些缓慢但是目前看下来还是有些期待的。
动漫
- 文豪野犬,过年的时候缓缓在补,对于这种以作家与文学作品为任务和技能的设定感觉还挺有意思的,侦探社蛮多角色的性格人设都很喜欢。不过感觉不是会想着会马上追下一季的那种,可能之后想起来会继续看吧。
个人生活剪影
生活
承接上周周报中对家的描述,今年过年在老家呆了接近 10 天,算是这几年少有的时间了。老家的人越来越少,整个氛围也显得冷清而少了些烟火气,但是却可以放实打实的烟花,也算是一种别样的记忆了。
因为我自小也就离开了,儿时玩伴连记忆都早已模糊,更别说什么发小了。所以这十天里,去看了外婆,陪伴了爷爷奶奶和外公等家人,倒也是难得的闲散时光。
温情有余,只是日常零下的温度让我不由得想念起了有暖气和捏捏的时光(逐渐丧失南方人的骨气屈服于暖气,太香了),不过也还好带的是老 Intel MBP,跑个 IDE 加几个网页就热起来了。
今年带了相机,虽然因为手冷而没拿出来拍几次,却拍了很多全家福。老人都不太爱拍照,好在现在也有手机这些能够随时记录些日常的工具,不至于有太多遗憾,但总还是怀念一大家人去照相馆拍的时候,虽然已经是多年前的记忆了。这次充当了那个摄影师,给全家人和各自小家都拍了很多,索尼的自动对焦和连拍还是很值得夸一下的。
到了我家的时候,我妹抱了只狗狗过来作“占位符”,说我以后把自己 p 上就行,她多少也是有点只坑自己哥哥的喜剧人成分在的。最后确实拍了和狗狗的合影,四口整整齐齐,没有我哈哈,大概这就是那种“听起来很离谱,但在我家,似乎也很正常”的有意思的事了。
当然,大家庭的全家福还是用了脚架定时连拍的,打算最近修一下洗一些片子出来。
捏捏
这次离开了捏捏接近半个月,虽然同事很细心且经常给我发视频,但终究还是不太放心,回到北京后第一件事就是去了同事家,回程一路也是在各种抚慰她,好在没把我忘了,还算有点良心;回家后也没太多陌生感,马上就去自己最喜欢的角落舒适地躺着了,真好。
第二天因为有些事要和项目组的同事讨论,再加上很久没去了,于是还是收拾了下去公司,感觉习惯了远程办公后,再回公司上班有些不适应,感觉就是到公司 10 点半了,和久违的同事寒暄了几句,刚打开电脑没一会儿就被叫去吃中饭了,吃完就开始午休了,感觉时间被刻意划分得“劳逸结合”反而更容易打乱节奏,我可能还是更喜欢那种不吃不喝搞完,然后余下时间安排自己的事这样的模式。
另外还有一件又好气又好玩的事。
时隔三个月第一次去公司,午休打开摄像头,经历了十分钟看不到猫、开麦克风喊了五分钟没反应、仔细回想自己的门窗有没关好、无比烦躁焦急、火速请假、一路狂奔冲回家,最后到家了发现就躲在盲区椅子后面懒得探头。大概自己下一份想换一个 fully remote 工作排名第一的理由就是这只不省心的捏捏了吧🙃。
以及还有后续。
接上条后续。回来后本来想好好教育她,迅速跳上来趴在腿上睡着了,醒来后一脸迷迷糊糊,可无辜,不太忍心,于是冷战了一个小时作罢。另外,下单了 @mr_easonyang 推荐的 ebo 移动摄像头,感谢!后面外出也能放心点了!
以后摸鱼的时候可以操纵监控机器人来逗猫了。
其他
两位挚友有了一些现阶段比较难调和的矛盾,作为持续了很多年的完全是家人一样的三个人的小团体,总还是不免有些自责自己在其中所能做的是不是太少。
希望一切安好吧。
周报 #27 - 何以为家
前言
本篇是对 2023-01-16
到 2023-01-22
这周生活的记录与思考。
这周的时间三等分了,在北京、杭州和江苏老家三地奔波周折。作为已经几乎三个月没出门的自己来说,路途还是带来了不少疲劳感,但却发现自己其实对于这种很长一段时间固有生活节奏的变化其实并不抵触,甚至有些新奇与期待。
把捏捏送到了同事家寄养,很担心;回了杭州,陪伴了父母和妹妹,见了一些朋友;又急匆匆地回了江苏老家过春节,可能因为心境有所好转,今年对待新年和春节跨年态度积极了许多,给朋友发了一些跨年祝福,捡回了一些仪式感;也发现了我的朋友们讲话都还挺有意思的,最近倒是更多把这些日常 po 到推上,大概也是之前提到过的分享欲的恢复吧;还有很多其他有意思的事。
何以为家
回家第一天偶然拍到的夕阳,拍完感觉田野的天还是别有一番感觉的,这个意境有些联想到《Flipped》的封面图。
其实提到回家或是回老家这件事,多少是带有些复杂心情的。或者更抽象一点说,对于『家』和『家人』的归属感,自己也经历了很多思考与改变。
自己虽在杭州出生,但童年大部分的时光是在江苏老家度过的,父母都在杭州发展事业,也许对于那个年代的年轻人来说,也还算是一个比较合理的选择吧。在我已经有些淡忘的幼时记忆里,其实父母的形象并不那么清晰。直到小学二年级,我 9 岁的时候,才到杭州和父母一起生活。
或多或少有一些亲近感的影响,自己一直以来算是比较独立地生活的,从大概初中开始,不论是中考志愿、高中自主招生、高考志愿、城市选择这些重要节点选择,还是日常的什么琐碎事宜,似乎都是需要自己去独立做决定,父母极少会给我建议,更别说是帮做决定了,当然,好处就是同样也不会因为成绩或者早恋这样的事来干涉我(甚至帮我掩护)。
记得最清晰的一次是在高三,自己的成绩排名刚好可以选择去『南方科技大学』,一个当时刚建校不久但挺有意思的学校的自主招生机会,其实还是挺心动的,但对于当时甚至极少离开江浙的我来说,要在有着不小高三课业压力的情况下去这样一个陌生的城市面试,还是有些难以果断地作出什么决定的,于是还是拨通了我爸的电话,跟他简单陈述了情况,想问问他的建议,换来的只有一句“你自己决定就好”,然后挂断了。
说没有一丝难过与埋怨是假的,尤其是看着周遭电话亭同学与父母在热烈地对备选的几所学校机会进行了各种权衡和商讨,自己似乎第一次感受到那么无助。回到候选教室后,没再说一句话,签署放弃了所有机会。
高考结束后的志愿也是,当时自己因为一些情感上的问题避开了浙江和上海的所有选项,大概只花了下午两三个小时对着那本粉色的历届招生手册选了几所省外从未了解过但是分数差不多够的学校,父母知道缘由,但也同样没有给予什么干涉。也许还是带着一些赌气的成分吧,当时的自己还是挺幼稚的。
可能直到大三,当时自己忙于创业和一些实习差旅,有一次刚巧到杭州出差,赶着一个晚上回家住了。已经临近一点了,到家后发现妈妈仍然在等我,而我爸刚好因为有些应酬而喝醉先睡了。当时不知道出于什么缘由,坐在床边和妈妈聊起了各种过去,才发现自己似乎没有真正去了解过父母的内心或是去试图沟通。
我爸妈都是 75 后,与我的同龄朋友相比算是比较年轻的了。妈妈说他们也是第一次做父母,并没有什么经验,而又心怀愧疚地因为自己的工作而没能陪伴我度过童年时光,等我到了杭州后,他们也有些不知所措该以怎样的态度来面对这样一个熟悉却又有些陌生的个体,最后,他们选择了『尊重』,也讲了很多很多这些年来相处的细节。
说实话我第一次听到这句话的时候,有些意外。我之前有过不少很自我的猜测,总觉得也许是因为没有从小在身边长大,感情没那么深,因而似乎少了些父母与子女之间的情感纽带,也许是很难弥补的。
也有些恍然,其实父母在潜移默化间带给了我非常多。从我记事以来的十几年里,我从未见父母吵架过,甚至到了现在恩爱也并未随着年月而消减,让我对家庭仍保留着许多美好幻想;爸爸性格十分宽容,从小到大都未对我进行任何打骂,但对时间观念与承诺尤其严格,当我违背时总会反复强调,直至我将之刻入本能;妈妈虽大多事交由爸爸决定,她性格中的善良与温和极大地影响了我,让我在面临各种选择时至少善恶为先,对他人也真诚以待;而之前我有些埋怨的关于我需要一直自己独立做决定的方面,其实在大三大四后的许多人生选择里,让我得以坚定地独自前行,可以说我后来的创业、跨专业申请、去香港读研、来北京工作,以及后面会作出的各种或许会被称之为勇敢的决定,也都缘于此。
在这次长谈之后,似乎已经习惯了这样的方式,每次回家总会畅聊到深夜,或关于我在各个地方的见闻,或家长里短,就像是朋友一样相处,也会互相调侃(比如我妈一直觉得我是个渣男)。我依然作为一个个体浪迹在各个城市过着自己的生活,只是家对于我来说不再是一个暂时的栖息之所,而是有了一种归属的寄托,独立却又并不疏离。
而对于老家,其实可以说是幸运眷顾吧,截至 2021 年初,在我已经度过的二十多年里,并未经历过任何刻骨铭心的离别,也就认为这是一件非常理所应当的事。而在一个清晨收到爸爸的一句『外婆走了』的简短却又刺痛的四个字时,才真正感受到一种精神与情绪的撕裂感。
甚至当时因为在香港读研,没办法赶上最后一面,而之后的一年也因故无法返回,一拖,甚至就已经是第三年。以至于越到临近回家的时候,自己越是愧疚与害怕。从小也在外婆身边长大,我的情感自是无需多言,但也更难想象到妈妈的心情之痛,回老家也因此带上了一些不一样的意义。
有部电影叫『何以为家』,故事本身倒没什么相似之处,只是对这个标题有些印象深刻,每个人的家都不同,却总是需要不断寻找这样一个存在,或谓之为起源,或谓之为归属。
个人生活剪影
捏捏近况
捏捏寄养到我项目的小 leader 家了,17 号的时候他还很贴心地开车过来接了,我装了好多好多东西,各种嘱咐,完全舍不得,即使只是短途的分离。不过好在适应得还算可以,虽然白天不那么活跃,但是晚上还是会出来探索,饮食也很正常,算了稍稍放心了一些。
完全是一种老父亲的心态了,既担心不那么适应而受苦,又觉得如果太过适应会有些怅然若失(不会那么没良心吧,不会吧)。朋友们表示我以后可别养女儿了,得心疼死。
倒是在他家似乎看上了他们家养在鸟笼里的鸟,他总觉得捏捏想吃掉她,我花了好久解释捏捏那么可爱友善,可能就是喜欢她想跟她玩,我也不知道他信了没。
想回去接她了。
见朋友
回杭州第一天去见了一起做 side project 的学弟。大概六七月份因为我写周报发在即刻上而结识,聊了几句惊奇地发现是本科的学弟,不得不说世界还是蛮小的,后来聊了不少想法,也作为主程深度参与了一个创业项目,其实自己之前虽然有过一些各个岗位的粗浅经验,也做过一些创业,但实在是对那些繁琐的部分有些厌倦,而他又恰恰十分擅长这些,可以让我只需要专注在工程实现上,且最早项目的想法也源于我个人信息管理的一些需求,也是一种莫名的契合了。这次终于线下见到了,交流了些想法,过年也有不少任务量和安排,不过年三十和初一还算是摆过去了(主要是太冷了)。
终于见到了 STRRL,算起来自己刚开始玩推的时候还是一个小小透明,是和 STRRL 一次交换友链结识,还带我进了 Homura 组建的一个周报群,和大家有了更多交流,逐渐才成为自己表达欲的出口。
自己作为一个深度社恐,虽然也有(且仅有)之前在北京面基 Homura 的经历在先,但在见面前其实多少还是有些害怕。约在了杭州一个小商圈吃中饭,见面后发现他很酷很有意思,聊了不少之前的有趣经历和一些规划,没有太多拘谨的感觉,反倒是有蛮多方面的共同点,很成功的一次面基交流!(感觉其实真正见面了我话还是不少的)
输入
书籍
- 我的职业是小说家,在读,但是进度缓慢。
- 世界尽头与冷酷仙境,回程的高铁上在读,读的篇章不算很多,但对被这种交错的叙事方式以及其中很多描述方式所吸引,这几天会读完。
- 始于极限,其实自己还是蛮少直接看女性主义相关的书籍的,毛姆的《面纱》算是印象里比较相关的,这本被朋友强烈推荐,且是书简的形式,看了个开头觉得还不错,也并行在读了。
动漫
- 文豪野犬,在追番,对于这种以作家与文学作品为任务和技能的设定感觉还挺有意思的,晚上会稍看几集。
- 三体 动画版,动画版真的是随缘看了。
剧集
- 三体,电视剧版的感觉确实还可以,可能主要是还挺喜欢于和伟的(对《觉醒年代》里演绎的陈独秀先生印象深刻),所以反而是晚上抽空就看看更新,但是节奏太慢了倒是,希望至少能稳定发挥一下,别像动画版那样不知所云。
周报 #26 - 博客、客制化键盘和新服务器
前言
本篇是对 2023-01-10
到 2023-01-15
这周生活的记录与思考。
已经临近假期,虽然也算不上对过年有着多少仪式感。去年的那段时间花了一周多的时间通了『宝可梦 阿尔宙斯』和重温了『火焰之纹章 风花雪月』,过年当天煮了火锅并跟家里人视频通话了,似乎年就这样过去了。但由于今年决定了要回家,有寄养捏捏以及过年期间各种安排的事,倒是没能多放松,想把很多事提前做完,能匀出一些时间好好陪家人了。
工作上这周状态一般般,写完已经上线的需求出了几个细节小问题,不得不拖着 leader 和我一起加班处理,还有一部分年前要上线的新功能还没测完,还剩下两三天时间;和朋友做的项目也遇到了一些问题,原本负责前端的朋友因故离开了,不得不再去负责他的部分,上线也会有一些拖延,过年也没法真正清闲下来,也算是一个不小的调整吧。
因为要寄养在同事家,保险起见今天去了趟宠物医院检查,顺便剪个指甲。医生说状态很健康,之前的一些小病症已经基本康复了,也夸我照顾得好,开心。不过想到寄养还是有些舍不得和不放心,年后也会早些回来了,毕竟有了牵挂。
接受了一个有点神奇的采访,收到了一个巨可爱的键盘,继续优化了一下自己的博客(不写文章就知道优化主题了),还有很多有意思的事。
有趣的事与物
博客折腾
我目前版本的个人博客大概已经运行了接近三年了,之前也用过服务器自己搭建 WordPress 等方案,后来因为不够稳定性且数据迁移很麻烦,我转向了 Hugo 静态博客 + GitHub 自动部署 + Cloudflare 托管这种一劳永逸的方案,详细可以看『2022 年了,聊聊我为什么还在写博客』和『Hugo + GitHub Action,搭建你的博客自动发布系统』。
而我选择用 Hugo 除了因为我主业是 Go 开发导致的有点莫名但并没有什么用的亲切感外,还有一个最主要的原因就是目前在用的主题『den』,这是一个台湾的开发者自己写的主题,当时他因为构建速度等因素考虑打算从 Pelican 转向 Hugo,但又喜欢自己原来的主题,所以自己复刻实现了一个,具体可以看他的这篇『從 Pelican 及 WordPress 轉移到 Hugo』。
我大概是 18 年关注到他的技术和个人想法输出的博客,可以说很大程度上我后来的文章风格与思维模式都受到了他很大的影响。而这种带着些老式互联网遗风的主题又刚好完美在我的审美上,于是一番折腾搭建上了,沿用到现在。
由于是个人使用为主,这个主题虽然很美观简约,但还是有一些功能缺失的地方,于是在使用的这三年里也不断根据自己的使用需求修修补补,去年也把自己对 RSS Feeds、相关文章、友链这一块的改动提了 pr,有一些经过了一些沟通后合并到了主分支里,还有几个还没改动(太偷懒了)。
最近刚好在 P.J. Wu 吳秉儒 的博客里发现了 Pagefind 这一网页搜索方案,研究了一下集成到了我的博客里,效果很不错。
它采用了将文章索引文件预先生成而不是实时检索的方案,速度很快,也不需要额外的后端服务,很适合静态博客的部署方案。关于 Pagefind 的介绍和使用可以看看 P.J. Wu 吳秉儒 的这一篇『如何透過 Pagefind 在 Zola 產生的靜態網站裡加入搜尋功能』,但是是集成进 Zola 博客框架并通过 Netlify 发布的,原理差不多。关于 Hugo 的集成方式我折腾配置一下再出一篇文章吧,可以预先通过这个网址体验一下,或者点击导航栏的『搜索』(加上了回到顶部功能,可以直接点击返回)。
我将它结合进了我原本的 GitHub CI 自动发布流,体验很无缝,并且通过 Hugo 的 shortcode 的方式集成一个搜索页面 UI 来供使用,很强大,也会向主题仓库提一下 pr 支持,看看这一块有没有需求。
但其实使用下来对中文支持有一些问题,没法很好的分词,比如『区块链』这个词直接搜索会无法匹配,改为『区块 链』,自己主动分词后才能得到想要的效果,也在页面注明了搜索方式了,又不是不能用,看看后续有没有更好的方案了。
有意思的是,本来这周的博客折腾已经到此为止了,但是突然 GitHub 发邮件提醒我有 pr 和评论,有一个陌生的朋友 fork 了我的博客并且做了一些样式调整和改动,增加了一些功能,后来还直接把自己改好的 css 文件发我参照了。
其实原本只是自用的一些方案,也常常陷入折腾了一下午主题没写一个字却自得其乐的状态,没想到也会有一些人关注到、认可并且采用,还能反过来解决不少我的一些问题,感觉很奇妙,有点慢慢感受到像是开源或是 work in public 的乐趣,总能有一些意想不到的收获。于是昨天晚上一通折腾,修改了好几个一直有点问题但是没改/没当回事的样式问题,还增加了回到顶部的按钮效果,还挺开心的。
服务器
之前周报提到过自己研究清楚通过 Nginx Proxy Manager 给自己的服务器进行反向代理后,上线了几个常用的服务和站点,比如之前的 zlib.pseudoyu.com 图书检索服务,因为得到了一些关注,也被一些群组和频道收录了,所以还是想着得持续维护下去保持服务稳定性和访问速度,但之前都是一些低性能的机子,几个服务就跑满了,于是趁着搬瓦工推出了一个新的还不错的 Plan,入了几台,2C2G + 40G 硬盘 + CN2GIA DC6 的线路,完全够一些服务的长期稳定运行了。
之前也还有一些机子,跑一些自己的基础服务,有些也搭载一些小应用给朋友用,这次也好好整理了一下,把所有服务都迁移到了一台机子,这里就得赞美一下 Docker 和 docker-compose 的管理方式了,数据迁移也太无缝了。全部迁移完,居然也才占用了一半的样子,幸福。
因为机器也多了(幸福的烦恼),所以也找了一个开源的监控服务进行管理,有一种赛博资本家的感觉,监督着这些机子好好工作不许偷懒。
桌面 Setup 与键盘
可能因为不打游戏,其实自己并不是一个资深的键盘爱好者,对于不同轴体、键帽的差异也很难说得清楚,之前也大多用的 Mac 自带的剪刀脚键盘,并没有觉得什么不适。
大概是在 20 年底,被她问到说有什么一直很想要但自己可能又不太下定决心买的东西,当时想了半天,说了 HHKB,其实比起实际需求更多只是好奇,而老式电池仓的这种复古设计也完全在我的审美上。
几天后收到了,是 HHKB Professional Hybrid Type-S 静音版,老式 IBM 风格的配色,静电容的手感,再加上小巧的体积,很喜欢,在桌面上也非常协调。
每天早上开始学习、工作前总是先会简单布置一下环境,小心翼翼地放上键盘,而这把键盘陪伴着我从香港到北京,甚至每次外出去咖啡馆也都会带上,刚开始可能只是习惯,慢慢竟变成了一种仪式感,似乎这样让写码和写作都带上了一些乐趣。
用了一年多后,因为很喜欢静电容的手感,不由得想尝试一下剩下几把经典,于是同样作为礼物,我收到了一把 RealForce PFU 联名版 87 键,这把的颜值也很不错,暗光环境下有种金属感,不过可能是由于习惯了 HHKB 的特殊键位,突然转换到 87 常常有些不适应,所以反倒是给她用来打游戏更多一些,反正键盘也拯救不了我的游戏操作手残。
RealForce 后来也就闲置了。而自己也确实有些用不习惯大尺寸键盘了,于是寄给了远在澳洲的倪(这么一想我的第一把机械键盘也是他送我的,一把 Cherry 的,但是轴体倒是忘了,当时还在用 Win 的时候在家用了快一年,也很不错)。
虽然 HHKB 和 RealForce 这两把知名度感觉更高一些,但我个人体验下来在誉为静电容三大经典中作工最精致、质感最好的反而是我去年年中才入手的 Leopold FC660C,配色和敲击感都更舒服,真正让人有些享受其中,后续成为了我家里桌面的主力键盘。
其实至此,自己键盘使用的需求已经完全满足了,也没太多心力去追求极致去玩客制化。然而,一个深夜刷到了稚晖君的『【自制】我做了一把 模 块 化 机 械 键 盘 !【软核】』,一把从电路硬件到固件代码都重新设计定义、自己做的键盘,这谁忍得住啊。
而在国庆的时候,刚好看到和 B 站出了联名款键盘,毫不犹豫下单了,果然猛男粉还是很有吸引力的,这也是我某种意义上的第一把客制化。
接着就是几个月的漫长等待,终于在这一周到了我手上,不得不说颜值和手感都很绝,迅速更换了我的桌面布局,快乐地敲了一周。可能颜值才是第一生产力吧,感觉这周写文章和代码量都上去了,晓瑜表示“怎么换了把键盘你人设都变了喂”。
我没有什么收藏癖,也没有想追求极致的手感或是客制化方案,只是我一直对桌面陈设、电脑、键盘和工具软件等会和我朝夕相处的事物有着极大的折腾欲望,哪怕只是几秒速度提升或是一点点心情体验的改善,于我来说也是一件何乐而不为的事。
个人生活剪影
学习
日语没学...第一周打卡失败!
输出
输出这一块,给 GoCN 翻译了一篇『[译] Go 1.20 新变化!第一部分:语言特性』;上一篇周报发完认识了不少新朋友,这周也发了不少推讲博客搭建相关的;和少数派约了一篇稿,不过还不知道什么时候写。
输入
书籍
- 我的职业是小说家,这本书从 10 月就开始读了,中间各种事反而落下了一些读书的进度,最近在空余时间慢慢在读,太喜欢村上的讲话风格了,想把他的每本书都补一遍。
动漫
- 灵能百分百,几年前看过一次,觉得设定有点意思但是并不算太细细品味,最近想着再补一下,第一季有很多主要角色的缘起、羁绊与改变,搞笑日常之余带给人很多想法与思考。第二第三季一口气刷完了,如果说第一季只是描述一些羁绊,第二第三季就给我带来了太多的感动,角色的成长,身边人的变化,尽管是超能力者的设定,却在点滴日常里不断自我否认以及在身边人的影响下自我接纳,最喜欢记者会后 mob 和灵幻的侧身对话场景,情感已经在不言中。
- 文豪野犬,早有听说,刚开始追。
- 三体,大概追番剧的心态就是看你还能有什么迷幻操作。
周报 #25 - 基于 Crossbell 的个人信息输出与同步系统(重构)
前言
本篇是对 2023-01-01
到 2023-01-09
这周生活的记录与思考。
这是 2023 年的第一篇周报,明明感觉跨年似乎还在昨天,一月上旬却已然结束,大概是心理上对于时间的感知愈加迟钝了吧。
跨年时写了一篇还算详尽的年度总结,将这过去的一年中的发生的种种悉数道来,写完后发现篇幅已经超过预计,再加上新年计划与期待这一块当时也还没有理清思绪,所以略过了,所以也就趁着新年伊始的这篇周报,浅立一下 Flag 了,有些是小小的习惯养成,有些是长远的充满不确定性的规划,也不知道未来的这一年是否能如愿,但列出来了就会更有一些动力,也当作是一种监督了。
宅了快两个月,周末终于决定出门去朋友家蹭饭,度过了快乐的一天(不然感觉自己都已经不知道怎么跟人面对面讲话了);虽然出片率堪忧,但可算是把照片修出来了,发了两篇摄影集;整理自己的各种软硬件服务(每年的仪式感了,总觉得整理后就会更有动力重新开始);整理的时候想起之前的一些小计划,搭建了一个网站运行了 IPFS 版 ZLibrary,却得到了意料之外的关注,吓得我连夜优化服务器和线路;以及很多有意思的事。
个人服务重构
服务管理
跟往年一样。开年就整理了自己的各种服务,发现居然已经有 20 个之多,且半数是 serverless,这一年白嫖功力见长。为了方便管理,用开源的 Uptime Kuma 为搭建了一个监控服务,并且绑定了 Telegram Bot 提醒,放心了许多。
说来有趣,其实自己之前一直觉得用服务器管理网站很麻烦,每次迁移或是服务变动总是很头疼,所以把大部分的服务都托管到了 Railway、Vercel、Supabase 这几个 Serverless 平台,因为大多是一些个人的服务,没什么太高配置需求,安全稳定就够了,就一直没折腾 Nginx 反向代理、https 证书这些。
而之前有提到过最近帮一个二次元同学做 B 站直播的房管和技术支持,就想着用一台白嫖的甲骨文日本机器来专门做直播监控和自动录制。因为有时候朋友也需要能够直接查看和下载,那自然一个好记的域名、国内网络环境下的访问速度、下载带宽等都要考虑在内,Serverless 服务就已经远远不够(也并不太划算了),于是探索了一些方案,选择了 Nginx Proxy Manager 这一便捷的反向代理工具。
我在一台线路比较好(CN2 GIA)的搬瓦工机器上进行部署,托管自己的各项服务,能够保障还不错的访问体验。因为也可以通过通配符匹配的方式直接为自己的 *.pseudoyu.com
子域名统一签发 https 证书和自动续期,很省心。配合上述的监控,目前使用了一周,还挺舒服的。
官方文档很清晰详细,配合 docker-compose 这样人性化的容器服务管理方式,操作起来上手很快,不过可能还是会考虑后面出一个教程,让想托管一些像是博客这些小服务的朋友们有所参考。
RSS 输入
2022 年其实大多都还是专注在博客输出以及自己的 Telegram 频道上,对于输入和各个平台同步这一块其实没花太多心思,导致自己的 RSS 订阅堆积,newsletter 也有些过载,反倒是没能好好过滤输入信息源,于是删除了用了很久的 NetNewsWire,通过 Railway + Supabase 的方式搭建了一个更轻量级的 Miniflux,作为自己的主要阅读器,并且对 RSS 信息源作了筛选,控制在了 52 个,几乎都是个人博客,后续也会继续优化调整。
虽然有了 Miniflux 提供了还不错的阅读体验,但我其实更习惯于点进原文,我总是觉得对于个人博客来说,不仅仅是内容,网站的风格设计、一些相关的文章和主题也都是属于博主不可或缺的一部分,才能带来阅读更完整的享受。
RSS 阅读器对于我更多是作为第一步聚合工具,而由于 Miniflux 是一个基于网站的服务,并没办法做好很即时的提醒,而我每天又高度依赖 Telegram,所以基于 RSS to Telegram Bot 搭建了自己的 Telegram 提醒,将这些信息源更新推送给我,看到一些感兴趣的标题会留个印象,空闲时统一到 Miniflux 去阅读查看。
这样下来也比较不容易错过想看的文章,也不至于造成太多信息堆积,目前这套方案使用下来感觉很不错,顺便每次周末看到各种周报的时候也催更效果显著(这周日出去玩了,合理拖更)。
Telegram 输出
我同样基于 Railway + Supabase 方式搭建了一个自己的 n8n 同步服务,将自己的各平台输入同步到频道,详细描述可以看这篇『周报 #12 - 赛博空间、自我定义与界限』。
之前平台基于 Reorx 的方案进行了一些自己的调整,但一直没添加更多信息源,国内源较少。
虽然自己自己目前国内的各个平台以及极少进行分享,但也总共是自己的一部分,再加上新增了少数派作为自己的一些工作效率类文章发表渠道,所以在朋友涂俊杰 JunJie 推荐了 RSSHub 与 n8n 集成这种形式后,我在服务器上部署了一套 RSSHub 服务体验了一下,顿时感觉是很惊艳的解决方案,火速给自己的 Telegram 信息流频道加上了网易云、微博、B 站和少数派的同步支持,内容更加丰富了。
Crossbell 同步
虽然像是 Twitter、Telegram 已经是比较大的平台,但毕竟是中心化的产物,再加上最近的各种风波,对于自己这些信息源的归集总是不放心 Telegram 作为最终站,尤其是我常常在删消息时差点误点删除全部(奇怪的交互体验),所以信息的同步导出部分也是很重要一环。
自己之前提到过的 Side Project 也算是在做这样的事,不过作为一个 Web3 从业者,自然也是眼馋基于区块链的解决方案很久了。其实毕业设计也是做的基于 Ethereum 和 IPFS 的数据所有权保护 ÐApp 项目,不过我那个纸糊的 Demo 项目自然是没法满足自己的各种需求,而当时的代码写得实在太乱也没有去重构的欲望了,于是开始找寻链上解决方案。
好久之前关注了 Crossbell,也莫名机缘巧合结识了不少 RSS3 的朋友,但对 Crossbell 之前的印象还停留在 Diygod 在推特上发的 CrossSync 浏览器插件是基于这个链的,当时手机打开的链接,关联钱包并不方便,所以搁置了。
所以想着去官网逛一下,结果发现居然已经有了 xLog、xSync、xChar、xFeed 等好几项应用,而最关注的 xSync 居然还刚好支持 Telegram Channel,完美匹配了我的需求。
xLog 同步发布博文
于是开始一番配置和装修,首先是将自己个人思考相关的博文同步到了 xLog 上,视觉效果和体验感都不错,且基于 Crossbell 地址能够很方便地进行 follow 和评论。
这是我的 xLog 访问地址:xlog.pseudoyu.com,有兴趣的朋友们也可以关注一下,不过目前出于定制化程度、各种历史文章迁移路由问题、自己各项数据统计服务变动等考虑,还是更多作为一个同步分发渠道,暂不打算把博客彻底迁移过去。
自带的 NFT 展示柜很不错,应该是集成的 Unidata,之前就想集成到我的 Hugo 博客里,但一直没来得及动工(有现成的就更懒了)。
xSync 自动同步 Telegram 和 Twitter
看到 xSync 能够同步 Teleram Channel 数据的时候真的很惊喜,完全不需要再做任何改造就能把我的聚合频道作再一次备份与存档,也很快配置上了,瞬间有点想舍弃自己 Side Project 的冲动。
不过有些遗憾的就是历史数据只同步了一部分,之前没接入时的数据似乎也没有手动备份同步的选项,不知道有没有配置项或者后续功能可以解决,或者有 RSS3 的朋友知道解决方案的可以说一下,感谢!
都配置好后就可以通过 xChar 来查看自己的各项消息了,很完美的解决方案,这是我的 xCharacter 个人主页: xchar.app/pseudoyu,也可以查看我的信息流。
另外的一个小插曲就是看到要把 pseudoyu@crossbell
放到简介时会心一笑,我当时毕业设计做版权保护 ÐApp 的时候是在 Solidity 合约里使用了 Oraclize API 来访问链下数据,也是抓取的 Youtube 的简介里的唯一标识来作为帐号所有权凭证,有种奇妙的熟悉感哈哈,后面有机会研究一下代码。
这套基于 Crossbell 的信息输入输出解决方案可以说是重构了我原本的个人管理系统,也希望能够结合这个系统做一些自己的尝试。
新年计划
似乎每年列一些年度计划已经是不成文的习惯,但是自己过去的那么多年里也少有照做实现的。今年增加了更多的公开表达渠道,似乎能够更加有动力去做践行。
之前看过 Xuanwo 的一篇『2022-37: 基于 Github 的公开工作流程』,稍微研究了一下 GitHub Projects,觉得简洁却也够用,虽然平时也基于 Logseq 做一些基础的 GTD,但依然很难作为看板来使用,今年会试试,也给自己一些对应的压力。
新年计划的粒度很难把控,就随心所欲了,不写那么大而空的了,更多是一些指标吧,有的是自由探索的想法,有的是一些长期的目标,也有一些短期要完成的事,采取了勾选框这样的形式,也许后面想起来会继续添加,期间完成或新的一年年终总结的时候会来回顾 check 一下。
- [ ] 好好照顾捏捏,保护好她
- [ ] 去日本 or 回香港工作/一份享受其中的远程工作/自由度满意的工作模式,按照优先级三选一吧
- [ ] 至少去 6 个没去过的城市旅游,最好能见见久违的朋友,虽然不多
- [ ] 坚持每周写周报,完成 48 篇
- [ ] 除了周报外,至少再更新 48 篇原创博文,技术为主
- [ ] 多外出拍照,新开的摄影集栏目至少更新 12 篇(元旦已经冲 kpi 发了两篇了),并且深入学习一下构图、色彩与后期
- [ ] 为 GoCN 贡献至少 12 篇译文
- [ ] 少数派发布 10 篇文章,赚猫罐头钱
- [ ] 开始做 B 站 up 与 Youtuber,至少发 10 个视频,不能太水
- [ ] 坚持每周锻炼/跑步至少四天(健身环或 Keep 也算),也同样会在周报中记录打卡
- [ ] 坚持练吉他,录至少 3 首歌并发布
- [ ] 捡回滑板技能,每周至少练习滑两次
- [ ] 读至少 24 本有意义的书,但不能囫囵吞枣,需要在豆瓣等平台发布自己的感想
- [ ] 日语 N2 证书,为了之后日本的一些计划做的筹备,学习进度会在周报里单开一个模块打卡,可能会突击一下选择 7 月的考试,
实在不行 12 月再来一次 - [ ] CKAD 证书,去年就准备了一半,不过后来忘记报名购买考试了,没有了压力果然会偷懒
- [ ] 为更多开源项目贡献代码,不要求量,但希望有更多有意义的提交
- [ ] 为自己的开源工具箱项目『Yu Tools』写一个展示网站,以及为其中的软硬件条目都写使用体验(大工程了),不断优化迭代
- [ ] 完善『Blockchain Guide』这一开源指南项目,把过去这一年工作学习的区块链底层与 Web3 相关的项目经验工程经验都多涵盖一点,惭愧的是大部分文章还是在香港读研的时候写的
- [ ] 和朋友一起做的 Side Project 创业项目顺利上线并且不断优化
- [ ] 探索更多有意思的技术,继续享受其中
- [ ] 认识更多有趣的人
- [ ] 好好生活下去
个人生活剪影
从 11 月北京疫情严重开始,我就开始了长达两个月的宅家生活,大概多少是有着不错的物理防御属性(指把当时手头上唯一的一点药寄给了朋友,纯靠不出门来隔绝病毒)和幸运点数(每天照常点外卖,中途还有物业来家里处理漏水问题一下午),自己到现在还保持着阴性,已经在决赛圈了。
但随之而来的后果就是已经康复转阴的朋友已经在四处旅游,而我依然连倒个垃圾都全副武装,更不敢出远门了,就这样和猫猫度过了两个月。
虽然确实是宅,但随着疫情放开也确实没个头,所以心态也佛了,这周末应邀(并不,只是以携猫拜访的名义去玩)去了博译学姐家蹭饭,呼吸到了外面并不那么新鲜的空气(毕竟北京),也吃上了久违的家常菜,摆了一天,却心安理得且快乐。
打算 1.18 回杭州了。其实 2022 年回家时间在近几年里已经不算短了,各种调休和假期回家前后加起来可能有 1 个月,只是常常疫情反复,也没来得及回老家一趟。两年前的 1 月外婆离世,困于香港疫情没能回家,去年春节又因为突然的疫情而滞留在京,是该回去看看了,越长大,去的地方越来越多,家却也离我愈发遥远了。
其实前段时间就一直在犹豫回家的事,担心再有什么变故,但还是想回去看看,但这种局势下又不放心给猫舍或者不熟悉的人看管。后来一次开会闲聊时偶然提到,有了解决方案,定了捏捏会寄养在我的项目的小 leader 家里,他女儿眼馋猫猫很久了,安顿好后终于放下了悬着的心。
这样一路折腾估计十有八九是要阳的,得知这个,学姐还给了我豪华抗疫大礼包,感人。
然后前段时间博译学姐在灵隐的时候帮我许愿了”2023 都能如愿做自己喜欢的事、能够探索更多爱好“,还带了一个好看的佛珠手饰送给我了,我单方面宣布是天下第一好的学姐了,希望新的一年也都能好好的。
突然想起其实之前大学的时候有一年多一直带着倪给我的一个同样是灵隐的佛珠,直到线快磨断了、珠子摇摇欲坠才收起来,莫名觉得那一年确实幸运了许多,有时可能只是需要一些心静吧。
实现了会去还愿的,双份的愿望。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
这周在 B 站看了两个很有感触的视频,一个是来自我最喜欢的 Up 主『小鹿 Lawrence』的『这是我最拼的一年,却让公司缩小了一半|2022 年终总结』,有一些感触:
接连着看了好几年了,年终总结这个保留栏目每次也都会看好多好多遍。
有过处于同阶段的感同身受,为一些视频而触动;有过动态被鹿哥回复、鼓励了,开心了好多好多天;更多的是陪伴着我度过一个又一个深夜,醒来继续努力生活。可能由于太过熟悉,刚开新工作室门时细微的一点停顿,讲那句“因为曾经家人的支持是你的底气”时的哽咽,花束的 BGM,回顾这一年时的一声苦笑,都让我的情绪随之起伏与落泪。
“不是你长大了你就变了,而是你长大了,世界才开始对你展露全部的真相”。也许自己常常被描述的少年感、学生气也不过是过去经历的那些幸运的透支,与身边人对我的保护,才能在自己的周报里一次次谈论自我,一次次向往美好。而在 2022 年,一切也都回到原点。所幸,还能保留着『记录』这种习惯,还未丧失『感受』这项能力,微小,却弥足珍贵。
“这一年失去的东西太多太多,任何一点细小的死亡与崩坏,都会变得不可承受”。是啊,2022 就是很难啊,不可名状。新的一年,也要勉强努力一个人生活下去。
感谢鹿哥过去一年的陪伴与带来的感动,新的一年,加油!
还有一个很犀利的 Up 主『老蒋巨靠谱』的『和不可名状的非必要一年说再见——我的新年献词』,感想:
太喜欢老蒋的思考和叙述风格了,平实、真诚但却大胆而不失尖锐,是看过得最好的新年献词了。
2022 就是这样过去了,很多事不可说,很多事正在发生,很多事再也不会发生,不可名状大概也是最好的形容了。
总结
2023 年的第一周,今年是个还不错的开端吧。
摄影集 #02 - Moment In Peking (The Autumn)
前言
来北京已经一年多了,由于长期宅在自己的小屋里,也没有太多心绪去探索,它的四季于我来说仅仅是上班路上的草木风光,连最耳熟能详的几个景点都未曾涉足。
其实这些年辗转了不少城市,每次都总是觉得“时间还早”、“来日方长”、“总有机会”,却常常留下许多遗憾。临近 12 月了才发现已经是晚秋了,之前计划的香山红叶可能也只剩一些残存了,但依然决定去用镜头留下一些秋天的痕迹。
之前看过林语堂的《京华烟云》,英文书名是《Moment In Peking》,承载了这座城市的很多悲欢离合,也勾画了当初的我对北京的第一印象。所以这次的摄影集也取名为『Moment In Peking (The Autumn)』,尽管秋意已经几乎散尽,依然是一段城市回忆。
特别鸣谢刚拿到驾照的博译学姐在疫情已经恶化的时候还愿意租车带我前往(也是一个敢开,一个敢坐)。
因为是摄影集作品,这个栏目不想压图片质量,每张都比较大,放在阿里云 OSS 上了(账单警告 ⚠️),加载可能会略慢一些,见谅。
Moment In Peking (The Autumn)
摄影集 #01 - Cat In The Box
前言
从 11 月开始一直想好好给捏捏拍照,但家里的采光不太好,当时工作比较匆忙也没刻意去购置布景和打光器材,今天在修图(我其实主要就是微调个色,懒)的时候感觉成片不算很满意,但是在新年第一天的 flag 不能倒,所以找朋友选了几张觉得还可以的,也算是一个好的开始了。
我的摄影启蒙来自一位纪实记者与纪录片导演,所以其实更在意画面构图与元素,总希望拍下的每一张照片都有一些故事感和主题(低情商:技术不行)。因为太喜欢这张在盒子里的照片了,所以给这个特辑取名为『Cat In The Box』;其中也有一个场景正巧站在我看了一半的村上的书上,再联想起当时看到村上的书里对猫咪的描述才有了更迫切的养猫的念头,也有一种奇妙的缘分,所以取名为『猫与村上春树』;还有几张是睡前抓拍的,光线是暗到后期都拯救不回来的程度,但是确实觉得很可爱(是摄影师的问题),所以也当作番外放一下了,取名为『Silence』(没错最近看日剧『静雪』有点上头)。
其实已经大概两年没好好拿起相机拍东西了,想重新开始记录一下生活,也要在摄影上多下点功夫了(之前纯靠玄学审美和模特好看扛着了),所以在博客的项目模块新增了一个摄影集栏目,当作自己摄影提升计划打卡了,新年里也要多给捏捏拍照。
因为是摄影集作品,这个栏目不想压画质,每张都接近 10M,放在阿里云 OSS 上了(账单警告 ⚠️),加载可能会略慢一些,见谅。
Cat In The Box
猫与村上春树
Silence
2022 年末回顾 - 迷茫、低谷与改变
前言
今天是 2022 年的最后一天了,如之前周报所说:
年度总结也会有,会有自己这一年的各种事,失去的、得到的、值得感谢的、难免遗憾的,虽然也犹豫过要不要再提一些东西,但还是决定更真实地面对吧。毕竟所有东西都会过期,凤梨罐头也是,这一年也是,是这些喜怒哀乐构成了我的 2022,也构成了一个更加完整的我。
早早立下了年终总结的 flag,本想花上几天好好雕琢一下,却(毫无意外地)拖延到了 31 号下午。
19 年 Gap Year 的时候,当时的那份工作常常要出差,大半年里飞了三十多趟,行程密集时常常在飞机上一觉醒来会有几秒的恍惚,不知道自己在哪个城市、在做什么。这一年的生活其实大多时间在自己的小屋里,却也有同样的感觉。
似乎从大学毕业的那一年开始,每年总会发生很多计划之外的事,甚至一些事也会很轻易地改变自己的人生,但可能这也是生活的有趣之处。
也许是因为分享欲有了身边人的寄托,之前的几年里感觉生活已然美好而自足,所以没把跨年本身作为一个很有仪式感的节点,但今年却总想记录些什么,大概也到了以文字来对抗遗忘的年纪了吧。开始写回顾时才发现过去的一年奇妙地是自己各个方面的转折点。
虽然没能回去参加毕业典礼,但 1 月拿到了港大的毕业证与留学生认证,正式离开了学校;同样在 1 月初申请了岗位转正,开启了自己的第一份区块链研发工作;4 月,自己作为技术负责人的第一个项目顺利交付;5 月,分手了;6 月,重新捡起断更了很久的博客,开始写周报,并开始启用 Twitter 记录生活日常;7 月,回了趟家,重新体会到生活的一些归属。10 月,重拾心情养了猫,一只可爱的银渐层,生活明媚了许多;12 月,因为疫情在一直在家和“捏捏”共度时光,也开始做一些 side projects,算是离独立开发的梦更近了一些。
似乎这一年转换了很多身份,也经历了很多心境变化,从初工作的迷茫到生活的最低谷,再到重拾心情改变,站在这个节点回看也会感到讶异,原来短短几个月会发生那么多事。如果要给这一年设定一个主题,我会选择『变动』吧。
感谢的人
这一年的生活里有很多值得感谢的人。
感谢甜崽陪我度过了上半年最迷茫和焦虑的一段时光,即使没能继续走下去,也希望能够一直好好的;虽然身处三地,倪和占在很多个深夜里听我倾诉,陪我难过,后来的这些对于生活、感情观的思考也都源于他们的 push;和晓瑜虽然常常各自消失,但似乎不论什么时候只要一个电话就能够畅聊整晚,每次聊完也都能重新拾起对生活的期待,同时也算助力和见证了一段感情的萌生与结果,一定要继续幸福下去;父母日常的关心总是能够让我感受到温暖,与妹妹萱萱的聊天也让我多了很多乐趣;每次回杭也会期待与初中班主任春哥的相聚,似乎这样十几年如一日像朋友般的相处模式才能让我感觉到时间的静止(虽然每次都是最好奇我的感情经历然后骂我渣男)。
与乐迪的日常和带些文青属性的交流让我们感觉似乎回到了大学时光,也相互为对方的“感情”出谋划策,尽管都以悲剧收场;小雨学姐和许翀在我情绪的最低谷陪我喝酒排解,当然,后来也渐渐发现酒并不能解决问题,戒了;来自小宇、草木灰、静茹和徒儿的关心让我觉得似乎自己也还值得拥有一些朋友;博译学姐的生活状态让我相信 work 和 life 真的能 balance,也感谢数次收留我去蹭饭,让我觉得北京似乎也不是那么无依无靠;还有很多很多。
感谢这一年里大家给予我的陪伴与感动,也希望在未来的日子里平安喜乐,都能被生活温柔相待。
感情与重新生活
在分开后的日子,自己花了几个月的时间放慢脚步,用心去体会与感受生活本身,去找回自己在迷茫中前行时丢失的那些点滴。
从『25 岁的自白:花束般的恋爱』这篇当时写完心情起伏很大但后来回顾却虚有些华丽的生日总结开始,思考了『情感、安全感与认真生活』,试图找回自己『健康、目标与生活的节奏感』。
趁着项目结束的小长假回了趟杭州,思考了『亲情与城市的归属感』。偶尔会有因为曾经一起的痕迹被悄然抹去引起的情绪波澜,当发现过去的那些生活与关联『404 Not Found』后,也重新开始计划再养一只猫而让自己有所寄托与期待。
因为村上的一本书开始思考自己的『人格与生活的本质』,因为和故友的几次聊天不眠夜开始想起更加遥远的过去,回想了『过去、遗憾与当下』。
趁着一次突发的青岛出差给自己设计了一场『不期而遇的旅行』,在旅途中感受美好,并与自己的一部分内心执念和解了。国庆时由于突发的情绪波动,刚刚好转起来的生活又有了明显的颓势,度过了一阵艰难的时光,『搁置了生活与自我』。
也愈加发现情绪积累之重,于是回北京后不久就去猫舍看了,因为合眼缘当周就养了一只可爱的银渐层,重新过上了『他和他的猫』的生活。
与猫猫共处的日子静谧而美好,感受到了『陪伴与另一种生活』,也慢慢开始重新拿起手机和相机随手记录一些生活点滴美好,其实未曾设想猫能给自己带来那么大的变化,就像自己『重新捡起了生活』,也在圣诞的深夜看着『Love Actually | 真爱至上』并重新思索爱情与生活。
有些庆幸当时决定以周报的形式开始记录一切,在回顾时也能够将自己在这半年里零碎记录下的想法与感受串成一条线,能看到自己的变化,也能看到生活的流动。不知道新的一年会在哪里有怎样的感受,各个方面是会有怎样的改变,但依然会继续记录这些自己成长的碎片。
性格与改变
昨晚突然想到很久没有做性格测试了,可能也有了不少改变,就做了一下。还记得大学时候的自己是个 ENTJ,后来短暂有变成 INTJ,但也时常徘徊,经过了这一两年的各种事,自己竟然已经是 INFJ 了,有些惊讶。
可能是由于更多把自我的一些追寻和探索转向『内观而非外求』,而周报也是多偏内心与情绪,我的内向与偏重感受的倾向变的越来越明显。
之前的自己大概是一个有些过分追求自我、某些时候理性到甚至有些冷漠的人,对他人的生活总是仅仅给予礼貌限度的关心,即使是最亲近的人,优先级似乎也常常在自我之下。这一点也许在独自前行时能够有一些助力,但生活是复杂的也是流动的,人与人的关系常常也并不只是单方的妥协,简单的道理,身处其中却也很难做到。
改变最大的三件事
常常会看到在年终时总结自己这一年的变化,我也跟风列举三项,不是什么深思熟虑后的重大事件,只是回顾时记忆深刻的一些。当然,上文已经提过不少,所以不想过多提及感情。
抚养捏捏
“捏捏”是我家的猫猫,从 10 月 30 日带回家后已经一起相处了两个月。
独自养猫这件事本身对于我来说其实也是一个很大的挑战(毕竟我是真的能两三天不吃饭不怎么睡觉在电脑前沉迷在自己的世界的,生活无比粗糙),也经过了很多犹豫,但见到她的当下,几乎就已经下了决心。
一切似乎都是从头开始学,两个月的时间改变了我很多,也希望新的一年里都能够继续健康生活下去。
圣诞装扮因为快递延迟了一些,所以还没出,明天会更新之前拍的一套『Cat In the Box』系列照片,只想看捏捏的可以退出了。
使用双拼输入法
从小学接触电脑开始,我就用的拼音输入法(全拼),也就是我们常用的九宫格和 26 键那种,一个维系了十几年的习惯,在 5 月突然想有所改变,其实倒也不是纯粹去追求打字速度的提升,只是想尝试一下,改变一个早已习以为常甚至已经融入本能的生活习惯有多难(这个人句句不提感情,但句句不离感情)。
双拼是一种不同的键位分布,打任何一个字都只需要敲击两下键盘(声母+韵母),所以前期还是会有很多不适应的地方,虽然记忆键位只用了一个下午,但转换习惯大概花了半个月,也无数次想要切换回来,但过了阵痛期后原来也没有那么难。
是吧,其实也没有那么难。
换了新发色
实在是很少有自己的照片,而且拍完才发现镜子已经脏到不需要打码了。
这个本身虽然倒不是一个多大的改变,但我是比较少做这样的尝试,在 7 月的时候换了绿色发色,褪色差不多后又在 10 月换了蓝色,后者感觉更像个动漫死宅了,也算是圆了自己的一个二次元梦了,不过也就现在头发多所以还能折腾折腾,目前还是会保留蓝色吧。
也算是通过改变换一下心情吧。
学习、输入与输出
工作
今年和 leader 涛哥在项目上的接触少了,但他的一些对于技术的想法态度还是有在深深影响着我,后面大概还是在几个项目的折磨下提升了不少 Go 开发的工程能力吧,还对 docker、k8s 以及各种 ci/cd 有了不错的基础,也自己做了不少探索。
系统学习了 Solidity 智能合约开发的一些知识,也出了相关的入门系列教程 —— 『区块链入门指南』,在下半年的项目中也做合约开发和与链交互相关的一些工作任务,总体是挺开心挺有成长的一年。
虽然工作氛围和方式已经是较为自由了,但也常常会感受到来自工作的一些消耗,有在考虑一些 Web3 远程工作的形式或是新的机会,大概也可能会回香港吧,新的一年,也许也适合做一些改变。
技术
工作之外,自己还是做了一些好玩的探索,算是解锁了前端开发的一些基础技能,能够结合着原有的技术栈做一些小项目和工具了,以后介绍就可以加上“一个会糊点前端的后端”了,或者厚颜无耻地加上一个伪全栈(pseudo full-stack)了。
倒不是前端技术学习本身有多么让人欣喜,只是这样就可以独立做一些自己的产品,也能更好地解决一些问题,更接近自己想做技术的初衷了。
Rust 学了基础,但是还没在实践中用到,新年希望能有所精进;倒是计划好的 LeetCode 算法刷题一直没实践,也是新的一年的重点计划了,虽然确实很难坚持。
在 GoCN 翻译团队继续贡献了接近 10 篇文章和参与了两本书,也承包了各种 ci/cd;参与了慢雾的『区块链黑暗森林自救手册』英文翻译团队,也算是为 Web3 作了一些微小的贡献。
语言
今年的很多重心放在了英语听读写的培养上,算是有了一些进步,可以 1.5 倍速看英文教程与 Podcasts,无字幕刷《硅谷》美剧,一些技术翻译和写作也还算得心应手,但口语还是有些欠缺,再加上很少练习,算是比较薄弱的一环了,离开了英语环境的提升也很依靠毅力了。
原本计划好的日语复习(其实基本也等于预习了)也搁置了,新年开始要在周报打卡学习进度了。
德语也只复习到一些基本词汇短语,早知道当年学二外的时候更加认真了,现在就是很后悔,这个不立 flag,随缘了。
阅读与影音
为了 Telegram 频道的同步,我今年开始用豆瓣记录自己的一些读书、影音和游戏,影音因为有一部分是补标的,数据没什么参考性,就不放了。
今年后半年还算是读了蛮多书,大多时间是在通勤和午休的时候看的,没有刻意去追求什么量,整理时却突然发现也已经有 30 本之多,感觉慢慢找回了一些阅读写作的心境和乐趣。我最喜欢的作家是毛姆,他有一本读书随笔中有一句话叫“阅读是一座随身携带的避难所”,这半年也深有体会,书中可以看到很多不一样的世界,也有很多不一样的人生,真好。
也刷了不少剧,各种电影、剧集和动漫加起来应该有超过 100 部吧,也尽量有在认真体会。大概自己豆瓣文青的人设已经稳稳的了,收到了分别两个朋友送的豆瓣电影日历和一个电影放映周历,未来的一年也会继续多看一些。
因为想记录下这些痕迹,所以也开始在看完的书籍和影音后加上自己的感想发在豆瓣,感觉这种方式也有让自己在看的时候会更用心,虽然都是短评,累积下来不知不觉也有 8932 字。
年终数据
大概还是受到了她的一些影响,原本比较随意无序的自己今年似乎也想以数据化的方式展现一些小小成长。
重新捡起的博客
自己很早开始写公众号和博文,但是就之前的更新频率和内容来说也很难称为独立博客。从五月的一篇『2022 年了,聊聊我为什么还在写博客』开始,重新捡起了我的博客,这一年里正好更新了 48 篇博文,虽然几乎都是下半年更新的,但四舍五入我周更了,其中周报和一些心绪相关的文章与技术博文和效率工具相关的文章刚巧约一半一半,也符合了我对于内容输出与分享欲的定位,不错的开端。
随着博文的持续更新,稍得到了一些读者的关注。从 6 月中旬通过 umami 搭建了一个数据统计系统,随着每个月更用心地输出,月 pv(page view) 已经到了 12k+,月 uv(unique visitor) 也到了 4k+,并且保持着不错的增长态势,能够看到自己的输出得到了一些认可,也常常在半夜打开统计界面时看到“当前在线 5 人”这样的提示时会心一笑。
常常也会收到一些感谢或是鼓励的评论,不知不觉也积累了好多页,很感谢这些素昧平生的陌生人用心的留言与评论,很开心自己的文字能够改变或是启发一些人,也感谢在博客已经式微的当下,他们依然愿意“浪费”自己的一些时间通过这种方式向我传达一些想法,即使只是简单的一句祝福与感谢。也在年度回顾之际精选一些以作分享(见文末),希望未来的一年还有你们相伴。
推特
也许是因为渐渐习惯了博客这种对外输出的方式,也许是因为随着生活变动分享欲无处安放,从年中启用了自己的推特帐号,原本只是想作为一个像是私密微博,前期也只是发一些深夜情绪。
后来随着和 STRRL、Homura、Manjusaka、新一和 Xuanwo 等朋友一起分享自己的周报和闲聊,感受到了大家的友好,也更多开始分享自己的日常,不知不觉也发了 514 条推文(这个人废话还挺多的),收获了 600+ 朋友的关注,居然也能和 yihong、GeekPlux 这些之前仅存在我仰望的关注列表里的技术博主互关,偶尔也能有一些很有趣的互动。
感谢这些朋友不嫌弃我。
Telegram 频道
在之前的一篇周报『周报 #12 - 赛博空间、自我定义与界限』里,我提到有搭建自己的一个 Telegram 频道,用来同步自己的各种 Twitter、评论、点赞等,原本也只是用于自己每周周报找素材的一份存档,不知不觉也有了 251 位订阅者,也收到了其中一些人对我频道的感谢,似乎自己不经意间做的一些事竟然也给别人创造了一些价值,很惊喜,会继续坚持输出的。
GitHub
GitHub 也是年中才好好用起来的,2022 年有 1.1k 次代码提交,给 12 个项目贡献了 36 个 PR,收获了 260 个关注者。最开心的还是给自己在用了好几年的 hugo 主题项目提了一些优化和新增特性的 PR,经过了和开发者的一些交流后合并进了主分支,有一种很奇妙的参与感,可能这就是开源的魅力吧。
自己的一个工具箱项目『GitHub - yu-tools』也让我收获了 400+ stars(别骂了,是 markdown 项目),再加上自己做了一些区块链相关的项目,总 stars 终于破 500 了,还是蛮开心的,新年会为这个工具箱项目写一个网站,呈现更多工具介绍和使用体验。
少数派
少数派是一个我看了好几年的平台,有很多效率工具类的优质文章,其实没想到自己能成为入驻作者。这一年写了 12 篇文章(包括了前几篇从博客搬运过来的),累计 38660 字,得到了 7 篇推荐,其中 4 篇首页推荐,1 篇会员专享,文章总阅读量达到 20w+,收获了 150 左右的关注,还收获了几千的稿费。新的一年也会继续产出一些文章,猫罐头就有了(为了养猫真是成为了打工战士),很感谢少数派的编辑『北鸮』,很耐心也很友好,还向他学习了一些双拼输入法经验。
总结
2022 年经历了许多许多,即使有了这些记录和数据,回顾的时候仍觉得有些恍若隔世。
新的一年就要开始了,祝 2023 年的自己,快乐。
附录
博客评论展示
周报 #24 - Love Actually | 真爱至上
前言
本篇是对 2022-12-20
到 2022-12-27
这周生活的记录与思考。
不知不觉已经第 24 篇了,也是 2022 年最后一篇周报了。有时候就是有这样莫名的仪式感,当有意义的事发生在一些比较整的时间节点时常常就会格外开心。
有时候分享欲这件事就是那么奇妙,明明在过去接近四五年里都已经习惯于关闭朋友圈入口,也很少发与私人情绪有关的东西,却在这小半年里开始用周报记录自己的日常,也在推特和 INS 上频繁分享(虽然大多也是猫猫相关的,但也是迈出社恐康复治疗第一步了),有时候改变的发生可能也不需要太多理由,只是 Timing。
这一周依然在辗转于学习与工作,但可能因为之前几天严重缺觉(基本上都是 3 点后睡),效率不算很高,大多时间也是在看课和调试代码,也算是缓缓调整了一下节奏。
在家与猫猫共度了第一个圣诞,收到了朋友给捏捏寄的圣诞装扮但当天偷懒没拍,也同样是跟着年底一起出片吧(还在 SD 卡里),当天也带点仪式感地点了想念了挺久的胖哥俩肉蟹煲外卖,但可能长期断食每天一顿饭,食量下降得严重,分两顿也没吃完。
一位很久没联系的大学同学最近在 B 站做了主播,突然感觉自己的二次元宅属性被唤醒了,看了几场,还受托当了正义的房管和粉丝群里的信息老师(?),还挺有意思的。顺便研究了一下录播姬,找了台服务器用 Docker 跑了个服务自动录屏,感觉能用一些自己熟悉的技术解决朋友的问题还挺有趣的。
另外,我的博客下雪了。
Love Actually
虽然其实自己现在很难去思考对于感情还留有几分向往和几分勇气,曾以为能共度余生的人悄然离开,生活的痕迹被一点点抹去,但记忆重新涌上心头时难免会怀疑所谓 True Love 是否存在。于是在圣诞的夜晚重温了《Love Actually | 真爱至上》这部经典,也算是每年的保留节目了。
这是不论自己处于多痛苦的时刻,看了后总会愿意继续相信美好的一部电影。这部电影和 Matt Cab 翻唱的英文版『Christmas Song』(日剧《朝五晚九》的主题曲)总是让我把圣诞与美好的爱情联系在一起,无关具体的情感或是经历,只是这种美好的氛围就已经足够诉说所有情愫。
最喜欢的是这一对,虽然只有藏在心底的爱慕,却真诚而美好。
“我爱你,与你无关。”
到了这个年纪还保留着那么多幻想还挺难得的(或者说幼稚)吧,但始终觉得喜欢的情愫是远远凌驾于其他因素之上的,经历了这些依然这么坚持着。
写着写着难免泛起一些情绪,不想聊太多,分享一下歌词吧。
The sound and bells are ringing everywhere,
A common classic familiar feeling,
There's something about the coldness in the air,
This season's got me feeling some kind away the night,
Christmas Carol's on repeat,
and happy couples fill the street,
See the city glistening,the sun and rushes over me,
I just wanna see your face, want you next to me,
Cause it has to be alone in Christmas Eve,
And if I could have just one wish come true,
girl you know, I wish for you,
Oh no every time I take a look around,
I get a little blue,
Cause even though I ask Santa to be nice to me,
There's nothing he can do,
I just want you in my arms, want you close to me,
and if I have you by my side make sure you'll never leave,
Yeah I know you out there aren't you missing me,
Cause girl you know, I'm missing you,
No I can't find a better word to say,
I don't know what they'll do,
So maybe it's just better if you let me sum it up,
Baby I love you,
Oh......Oh baby.....yeah......
And it feels like yesterday,
the first time that I saw your face,
I never felt quite like this before,
Girl you do something to me~.
—— 来自 Matt Cab 《クリスマスソング (English Cover)》
与『捏捏』的日常
之前拍的几批和圣诞还没出片,就放一些静静的日常吧。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输出
上周的周报写了一篇关于如何学习的文章,算是对自己的一些经历的总结和思考,还挺开心的,顺便也在少数派上发了,继续打几份工挣猫粮钱了哈哈。
虽然不想那么早就开始立各种新年 flag,但是得继续更新文章了!
输入
动漫
- 天官赐福,这部倒是很有意思,本来我蛮少看国漫以及类似题材的,但我现在刚上初中的妹妹今年开始写天官的同人小说,虽然是每期都追完了,但动漫却还一直没看过,也是补上了,这样去了解妹妹的喜好和她关注的世界也很有趣。
- Death Note: Desu nôto,死亡笔记的动漫是无法超越了,但就是喜欢到即使失望也会去看各种衍生作品,但是剧集出乎意料地还不错,很侧重月的心理描写和变化。
- 间谍过家家,part2 开播的时候没追,这两天才补完,阿尼亚赛高!
- 三体,第四集有点迷,几句话能讲完的剧情水了一集。
周报 #23 - 如何学习一门新的技术(文科转码选手浅谈)
前言
本篇是对 2022-12-14
到 2022-12-19
这周生活的记录与思考。
本周同样因为疫情而居家办公(感觉这个开场白之后可以去掉了,已经是常态了),依然还是在“不务正业”地学前端,顺便工作写一点后端代码,有几天甚至不知不觉都已经拂晓了,感觉找回了去年在香港赶 due 和备战期末考的状态,但这次少了很多外界的压力和焦虑感,更加享受其中。
有过前一段时间天天加班到深夜的体验,才更加意识到能够自由支配一些时间,学习想学的东西,或是单纯和猫猫一起发呆的日子是多么珍贵。但是感觉已经有很久的时间都在状态调整和分享自己的一些日常,很久没有写些什么干货或是经验了,今天就来浅分享一下自己的一些学习经验、方法和思路吧,可能更多还是一些概念上的,后续(大概?)也有更具体的分享。
想了想还是补充了下面这两段话。
其实一开始只是想着该写年度总结了,于是看了看自己这一年(或者其实严格意义上是从 5 月才开始恢复更新的这半年)的文章,除了 5 月发了很多工具效率类的文章外,大多都是周报,一些思考、想法、情绪和碎碎念,虽然说更多只是一个表达欲的渠道,但偶尔也会惭愧自己讲情绪太多,似乎把博客作为了一个出口,于是想着还是能够带来一些干货吧,所以就有了这篇经验谈,不知不觉竟然也写了快 7000 字了。
年度总结也会有,会有自己这一年的各种事,失去的、得到的、值得感谢的、难免遗憾的,虽然也犹豫过要不要再提一些东西,但还是决定更真实地面对吧。毕竟所有东西都会过期,凤梨罐头也是,这一年也是,是这些喜怒哀乐构成了我的 2022,也构成了一个更加完整的我。
然后,会在 12 月 31 日发,一个对我挺特殊的日子。
从今年的某个时候开始,我在每篇文章加上了主题曲,五月天的《后来的我们》,一首我很喜欢的歌。今天换成了《Brand New Day》,垫底辣妹电影的主题曲,一直觉得很好听,也挺适合这篇文章。
如何学习一门新的技术
我的学习方法探索之旅
初探
自己以前并不算是一个很崇尚各种学习方法论的人,对这种“如何”体也比较无感,高中在阅读『如何阅读一本书』时也没能成功读完(?),总觉得这是一件很因人而异的事,看过许多帖子可能也比不上自己某个阶段的带点玄学的所谓“开窍”,当然,这里的开窍大多与天赋无关,只是在摸索中找到了一些自己的路子而已。
发生转变是高中一次在书店,遇到一些浙大的学生在售卖自己总结打印的高考备考资料和经验,出于好奇买了一本历史学科的,闲来无事就翻着看,里面有一些时间轴的整理和记忆的小技巧,后来真正学到这些知识的时候常常就能更加得心应手地运用,后来历史成为了我常常能拿年级前列的学科,慢慢也积累了我对历史学习的兴趣(甚至一度想报考历史系)。
现在想想,可能那本书上的内容本身并没有什么独一无二的部分,知识就是那些知识,只是从一个经历过高考且取得了不错成果的大学生视角来归纳方法,还是很有一种“降维打击”的效果的,这某种程度上也启发了我在其他学科的学习中也开始逐步探索自己的方法。
学习心态
本篇并没有打算(主要也讲不明白)介绍各种有理论基础的学习法,主要是关于“XX 学习法”这样的视频、文章有很多,可能经过一些总结和内化后也不如阅读原文,这里先推荐『是落拓呀』学长的这篇『我是如何学习一门新的技术或知识的?WW 学习法?以区块链为例。』,我刚开始学习区块链和很多其他知识的时候从中获益良多。
这次更多想从一个我觉得很重要但常常被忽略的点讲讲我的一些想法和经验 —— 学习心态。
大学被调剂到了英语专业,只花了大概半个学期的时间,我就非常清晰地意识到了这并不是一个我会持续投入热情并能够赖以为生的专业。但当时的自己还没有很清晰的目标,于是开始不停地学各种技能以缓解迷茫和焦虑。
因为在社团主要是负责一些“技术”相关的工作任务,当然,这里的技术主要是指平面设计、摄影和视频剪辑这样的技能。还记得我第一个重点负责的晚会项目有一个很赶的宣传视频/MV 的工作任务,印象里并不复杂,也没什么特效,就是一些视频的素材基础处理、拼接和导出,最多也就是适配不同尺寸的屏幕以达到不错的显示效果。
于是在一个周末,下载了 Adobe Premiere Pro(也就是俗称的 PR,一个万恶的折磨了我长达五六年的软件,也没想到后来自己的很多事都和视频剪辑相关,也是奇妙的际遇了),看了一些入门教程,两天赶完了。去交任务的时候社员包括部长都挺惊讶的,问我之前学过么,怎么那么快。
其实我对于视频拍摄、剪辑的了解也不过就是在高三时做了一个生日祝福视频,还是找朋友帮忙一起做的(好像用的是绘声绘影还是爱剪辑来着,也是好遥远的名词了,然后这位朋友现在在做导演、剪辑相关的工作,奇妙际遇 * 2),而在用 PR 时也下意识地并没有觉得这是一个很难的软件或者说没觉得剪辑是一件很难的事,学习起来也就很顺其自然,遇到不会的问题现查就可以了,也并没有太多的技术含量,只是我去学了,仅此而已。
而很多朋友可能会在刚开始学习一个自己不了解的东西时候有一种很本能的畏惧感,觉得它很复杂,自己给自己设置了心理障碍,直到最后也没下定决心去学,后续我在带部门和社团进行教学的时候也大多用一个基础的实战项目带大家了解到这并不是一件那么“高不可攀”的事,打破了这一层心理因素并调整了学习心态后,学习操作本身就很容易了,效果很好。
当然这些只是一些通用性的技能,真正编程相关的技术还是差异很大的,但这一方面的心态变化历程可能就说来话长了,因为也常常被问到,也算是顺便提一下自己的文科转码之旅了。
我的文科转码之旅
VB 入门
作为理工院校的文科学院,我们非常具有理工特色的就是需要学计算机,但是只是基础的 VB (Visual Basic) 语言。得益于浙江的学业水平考试的信息技术学科需要 VB 上机考,已经在高中有过一些基础的了解,再学起来也比较轻松,虽然语法都需要重新学,但同样的,在心态上也觉得是一件并不那么难的事。
当时由于身边许多朋友都是初接触编程语言,对语法和各种符号有着非常强烈的畏惧感,所以我在学的时候以自己的思路和解释整理了一份几十页的笔记,从一本书变为了薄薄的几十页纸,朋友们在学习的心态上有了很大的变化,卓有成效(后来还“继承”给下一届,有成为了传说中的学长学姐宝典的经历也是一件很开心的事了)。
转换方向
重温了 VB 后,突然觉得自己很喜欢这种能够通过代码来创造、实现一些想法的感觉的,然后也觉得某种程度上还算“擅长”,遂萌生了一个在当时看来有些大胆的想法 —— “是不是我也可以把计算机作为自己的未来方向”。
当然,因为学校莫名的“高考文科招生不能转理工专业”的规定,转专业这一条路已经被堵死,武大计算机辅修的申请也因为绩点差一点而失之交臂。
算了,那就自己学吧。
于是向认识的在华科辅修计算机的朋友要了课表和教材,当时的心态很简单,可能科班的很多课我确实没有那么多时间精力来通过自学同步补,但是辅修的课程负载还是可以接受的。于是,一边补着操作系统、计算机网络这些基础课程,一边学 Python(没错我也是从廖雪峰老师的 Python 课程开始的),开始了自己的“不务正业”之旅。
艰难前行
中间有过无数次挣扎和觉得自己是个废物想放弃的深夜时刻,以及在挣扎期间因为迷茫去做过公众号运营、产品经理、区块链游戏策划、平面设计等各种岗位实习/兼职以及后来注册公司开了工作室做视频剪辑等等的经历,这就在另一篇『周报 #19 - 忆一次创业经历』了。
自己那几年真的在这条路上坎坷地走了很久,有过盲目地学各种语言(因为觉得写上自己会一些小众语言听起来很酷),有放弃枯燥的基础知识学习去写 Web 和小程序(因为可以赚外快),有觉得不需要去理解各种底层原理和数据结构自己也能写好代码的误区,有学了很久但是似乎长进并不明显的瓶颈期,当然,也有很多开心的收获,但这已经是日常了,就不细数了。
后来出于职业规划(诚实来讲,大多英语专业本科出去在现在的环境想找一个技术工作确实是简历都递不出去的,无奈却也不得不面对的现状)与想在具体的领域有所造诣的考虑,我在毕业后 Gap 了一年去申请了香港的计算机系研究生,这部分在『23 岁的自白:去追寻意义』里有提到,因为之前有拿到了台大计算机一名区块链方向教授实验室的邀请最后却被鸽的对我打击挺大的事,也算是圆了自己的一个梦(你不要我,我值得比你更好的)。
摆正心态
其实在后续的学习中,自己受益最大的是从来都没有把“我是一个英语专业的学生”作为自己学不好的理由,毕竟现在已经没有什么太高的知识获取壁垒,别人能学到的知识我也能够在很多公开课、教程中学到,甚至有了一些自己选择的权利,可以找最好的最适合的课程进行学习,以至于刷了好多门 MIT 的公开课和 Coursera 的课。
包括真正去参加港大计算机学院的面试时,我也没有把原专业作为自己的弱项避而不谈,而是提到了自己作为一个来自不相干专业的学生对于热爱的专业所付出的努力和获得的成果,包括对于专业和行业的一些探索和想法,相信对于最后的 offer 也有一定帮助。
鸽了的文科生转码指南
题外话,关于文科转码其实之前自己一直有想写一个指南,大概就叫『文科生编程入门/转码指南』之类的(虽然听起来就很营销号的 Python 广告),但总是觉得无非是一些教程推荐和申请经验,最后的结果运气也占了很大的成分,分享出来也并没有太多的干货,反而更容易像是一种幸存者偏差的“炫耀”,于是一直没动笔。
但现在经过了一年多的工作和探索学习,自己也算是真正在程序员这个职业或者说区块链这个行业勉强站稳了脚跟,也觉得自己或多或少在学习新技术/知识上有着一些小经验,所以打算重启这个想法了,也挖一个小坑,慢慢填。
但其实想做这件事并不是说标榜转码有多好或是这件事有多容易,行业确实有一定红利,但转码和技术学习的个中艰辛苦楚也有不少,有很多熬夜的夜晚,也有很多怀疑自己的时刻,只是不值一提罢了。而且终究还是靠一点点的积累,就像那句朴实却很真切的道理 —— “无他,唯手熟尔”。
在 Podcasts 和推特上也见到过很多崇拜的技术大佬,也不乏转码的,相比之下,以自己的能力尚不足以去教导大家些什么,但想把这些写下来其实也只是想传达一下自己的想法与心路历程,或多或少让对这一领域有所好奇的人不要因为心态问题怯而不前。
有相关经验心得的也欢迎一起参与贡献。
我是如何学习的
回归正题,浅谈一下我学新技术或是接触一个新领域的一个基本模式吧,纯个人经验分享。
信息源采集
可能由于之前学习模式和个人信息控特质的一些影响,我非常倾向于在学习一项新的技术/知识时收集很多信息源,可能比起一些搜索引擎和算法推荐的结果,我更习惯去一些喜欢的 Youtuber 或是个人博客作者的历史视频/文章中进行翻找,常常有一些意外之喜(主要是那些大佬都太强涉猎太广了,好多个之前看 Python 和 Go 的博主都更新了区块链的很优质的内容),从他们的视频/文章中能看到学习中的坑,以及这项技术后面的实际应用。
比如在推友『STRRL』的博客『strrl.dev』中能看到他折腾的很多小玩具,有些就是我同样需求但是没想到(或者做不到)能够以这种方式实现的,能有很多启发;以及在看另一个推友『Nova Kwok』的博客『Nova Kwok's Awesome Blog』时常常会发现,“这个人怎么什么都会啊”。
除了具体的知识和教程外,也能够从他们身上看到自己所向往成为的样子,能有更多的好奇心与探索欲,对未来有更多期待。
初步了解
在选择教程方面,我之前也提过很喜欢以 Crash Course 的方式开始,直译成“XX 小时带你学会 XXX”好像有些营销号的感觉,但 Youtube 上真的有非常多这种系列,直接搜索比如『Next.js Crash Course 2022』就会有很多很有意思的结果。
我前段时间做一个 ÐApp Demo 的时候因为有用到 Next.js 做基础的前端显示,就看了一下搜索结果中 Traversy Media 的这个 Next.js Crash Course,很喜欢他的讲解方式,在一个小时里就让我对这个框架包括整个前端开发语言有了基础的了解,虽然没经过系统性地学习自己很难上手做一个项目,但是在后来的项目中看到前端代码中出现的一些语法也能知道在做什么,在别人框架的基础上做一些自己的定制化修改也比较容易。
比如这就是我看完 Next.js Crash Course 后通过另一个很喜欢的 Youtuber devaslife 开源的一个『GitHub - craftzdog/craftzdog-homepage』项目修改的个人主页,『Yu - Homepage』,花很短的时间就能做出一个很美观的小项目,也是在开始学习一项新技术时候很好的动力。
深入学习
但真正要写一些企业级项目或是自己从头做一个复杂的项目,仅仅靠 Crash Course 是远远不够的,会需要更系统的学习和很多项目的实践,这个时候需要一些更实战性的课程,这一点看个人偏好,很多 Crash Course 作者其实有自己的训练营或者付费教程,如果找到了喜欢风格形式的博主则可以跟着他继续学下去。
我个人更偏好的是 Udemy 平台,也算是一个比较老牌的在线课程网站了,虽然价格看起来比较离谱但是基本上都在打骨折,总是各种理由发优惠券,让我总是担心它哪一天就倒闭了,平均一门课大概就 9.99-12.99 美元的样子吧,折合人民币 100 不到,还是很值得的。
比如我上文提到的 Brad Traversy 就在 Udemy 上开设了 React、Next.js、Tailwind CSS 等课程,因为我确实很喜欢他这种以项目为导向的方式和他的教学风格,虽然在 Udemy 上相关课程有比他购买/评分都高很多的课,我依然选择了他的,这些是我学 Web 相关购买的一些课(很多是前两天活动价购入,还没开始看)。
成果输出/项目实践
之前跟我 leader 聊过学习方式,他学习一个新的语言/框架会先自己摸索着把项目运行起来,自己尝试着改点东西,然后可能项目里直接用上了,遇到问题再一点点解决。这是一种很高效的掌握方式,而且可能在项目工程应用上更加普适,但可能我还是偏学院派一点,会选择看课/看教程这一种起初效率相对较低,但能够在一开始就掌握一些最佳实践,且在后续遇到问题在心态上更稳一点的方式吧。
内心 OS:要是我有我 leader 那样前一天晚上刚发现一个框架,第二天就把项目架子重构了的可怕工程能力,我还看什么课啊。
看课也有一些完成作业、项目实践和最后的课程结业的成就感,能够在学习的各个阶段里给自己一些动力,比如我一周多学完的 React 课程拿到证书,并且成功用到了实际的 Side Project 项目中,还是蛮激励自己继续下去的。
当然,这种方式也还是有一个门槛就是很多这样比较高质量的课都还是在 Youtube 或是一些国外的平台的,基本只有英文,所以还是需要有一些克服的,不过也都会提供中文字幕,但我个人还是更倾向于英文来看的,毕竟也会牵扯到很多术语,而且机翻很一般。
另外,看课由于一般周期比较长,很容易中途放弃或是拖延到忘记了前面的内容,不进行实践或者记录很容易忘记,为了克服这一点,我采取了两种很简单却行之有效的方式 —— 以输出为导向与以结果为导向的学习。
输出导向很好理解,我有在更新自己的个人博客,曾经技术干货还是很多的,现在在日常博主和工具效率博主之间反复横跳,我会在学一门技术/知识的时候分屏在 Logseq 中记录下关键笔记,注意,这一定不能是直接粘课程资料,而是更多自己在编辑器里敲一遍并且勤加注释,顺便把关键的一些比如命令或者代码片段直接截图保存一下,完成后消化一段时间笔记。
过了 1-2 周后,再重新去看笔记,并且把笔记整理成文。这里有两点非常重要,一个是过 1-2 周,我们刚学完时会有比较深的印象,也常常会有一种“我已经会了”的错觉,但其实掌握得不一定很扎实,可能只是一些即时的记忆,1-2 周正好是一个不错的消化周期;而整理成文则是另一个很关键的点,我们常常会写一些零散的笔记或是思维导图,但其实能把一个知识点组织成文,用自然语言讲出来,让读者能够看得很流畅,是一件挺具有挑战性的事。
这时候上文的那些注释和截图就有用场了,我在写文章时有自己和自己对话以及反复回看的习惯,就是比如写完一个模块后,会常常问自己,如果我是读者,我在这里会提什么问题,我该怎么解答,那其实常常会发现一些讲得不够清楚的点,再加上反复回看后添加的补充说明,成文的时候一般来说还是一个挺行文完整且符合自己思维逻辑的技术博文了,作为以后温习或是当作参考文档查询也会比看别人的资料要有效得多。
其实更好的方式是录视频讲解,能把一件事在视频中讲清楚比起写明白的难度还是更上了一个层级的,但我还在克服需要录制视频讲课的一些心理障碍。
明年的一个小目标就是成为一名技术 Youtuber/up 主了,可能最后成为了萌宠博主呢,毕竟谁看我啊,点开周报的都是来看捏捏的吧,我今天就不发,囤到年终总结攒一波出片。
除了输出外,我还有另一个并不建议大家轻易尝试的方式 —— 以结果为导向的极限操作。其实就是把一些超出自己目前能力范围(但也别太多)的任务先接下来,以结果和 ddl 来逼自己快速掌握,以及遇到问题会更拼命想办法去解决。
这个可能和个人心态、信心和多线程能力有关,我是一个遇事还算冷静处理的人,经常几个任务并行但也不至于会被压垮,而这么多年踩坑的经验也让我明白了一个朴实的道理 —— 再复杂的任务总是奇迹地能在 ddl 逼近之前的几分钟搞完,大概这才是第一生产力吧。
但现在随着做的项目越来越复杂还是少这样吧,万一翻车了呢。
总结
剩下的其实也没有太多方法可讲了,以上其实也都只是学习一门技术或知识的一些经验谈,学完了可能也只能说刚入门,工程能力的培养没有捷径,只能靠不断实践积累咯。
技术是一件很有趣且不同阶段去了解学习都有截然不同感受的事,就像我 leader 是一个二十多年工作经验的强者了,依然经常在半夜突然发个消息给我,说“XXX 框架/工具挺有意思的,可以玩一下”。
我很喜欢他的这种说法,“玩”一下,我们不需要再去纠结或是辩驳把爱好作为职业是一种怎样的体验,因为我们本就乐在其中,工作不过是顺便能够糊口的副产品罢了,也希望大家都能找到自己的心之所向吧。
自己并不是什么大佬,目前阶段很难能够在具体的一些技术和领域写出很深度的文章(但是也有在努力了),于是想把自己的各种经验作一些分享吧,后面也想针对一些更细节的技术输出一些视频教程和文字教程。
让我数数今天挖了几个坑要填。
周报 #22 - 内卷与焦虑感
前言
本篇是对 2022-12-07
到 2022-12-13
这周生活的记录与思考。
这大概是累计没有踏出家门的第 20 天了,基于当前多个项目并行的工作强度和阴性快要清零的现状,还并没有打算回公司,甚至想在家窝到年前都不出门了,自宅生活也很惬意。
忙碌的各项工作和 Side Project 任务模糊了周末与工作日的界限,但多年残留的习惯依然让我有一种“周末是自己的时间,用来睡觉岂不是太浪费了”的错觉,再加上没有早会的时间压力,也越睡越晚。不过做了不少有意思的事,探索了一些一直想学的东西并且应用到了项目里,还做了一些 Demo 玩具,一直处于还挺开心的状态。
其他时间里,和远在澳洲的挚友一起连麦看了荷兰的比赛(虽然输了),并得知会收到一个很欣喜的礼物(虽然会寄到香港,暂时拿不到);一位朋友受到我的影响也开始写周报,互相催更(虽然我又拖延了几天);猫猫能听懂自己名字了,一句“捏捏过来”就能从家里的各个角落召唤出她,像宝可梦一样;以及很多其他有意思的事。
内卷与焦虑感
在 polebug 最新的一期学习记录视频看到有在谈论卷和焦虑感的话题,其实就个人偏好来说,我不是很喜欢“卷”这个词,自己说自己卷像是带着一种居高临下与自我满足,听到别人如此评价又似乎有一种小时候听到老师说“这孩子不聪明但是一直很用功,值得鼓励”的莫名意味。
“卷”似乎与现在到处弥漫的焦虑感相生相伴,来自工作项目的压力、对自己方向的迷茫或是不满足于提升速度,以及所谓的 Peer Pressure,我们总是倾向于将自己置于当前所处阶段的消极面,总是去受到一些论调的影响去否认自己的一面,然后通过各种形式的自我满足式付出去挤压自己的空闲时间,常常也身心俱疲。
我更喜欢的是国外可能更常提及的“TIL”的描述,Today I Learned,在完成基础或是重复性的本职工作之外,自己又学到了什么。可以是看了一些闲书或是工具书,可以是学了一项新的技术或是将之前的经验总结成文,可以是着手做一个新项目或是对原有项目进行了一些优化,只要是好奇心与求知欲所及,都可以称为一个个“TIL”。
学习和探索本身是一件有趣的事,甚至并不一定是一件与结果/收益直接相关的事,虽然略有些俗套,但我并不丰富的一些阅历和经验让我总是信奉着一种“无用之用”的心态,常常是过去出于兴趣、好奇或是其他纯粹目的所做的一些事在未来的一些阶段带来一些惊喜,要做的常常就是遵守本心和静静等候。
与『捏捏』的日常
这周依然是一起宅在家的生活,能渐渐感觉到一点点建构起来的信任与情感依赖(同时也放肆了很多),会在我忙在各个会议里时静静躺在键盘前伴着嘈杂的人声与键盘敲击声熟睡,会在我许久没有管她时绕着我的脚撒娇要抱抱,会在我看世界杯时在我面前一起关注着赛场的动向,会在睡前跑酷到我的被子里一起入眠,也会在我赖床不起时直接一脚踩在我脸上“叫醒”我换粮。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
技术
因为 Side Project 需要,这周跟着 Udemy 上之前买的一些课好好学了下 React,感觉前端现在还是蛮有意思的。大学时候赚外快写过一些网站,还记得当时都还是自己糊的 HTML、CSS、JavaScript,好像用了 JQuery 来获取元素什么的,还记得当时用 ThinkPHP,然后有一个什么 MVC 框架,包括后来做的一个微信小程序也是,现在感觉都有些时代的眼泪了。
因为很久没写过前端,也没什么技术包袱,用了 JavaScript + React + TailWind CSS + daisyUI 糊了一个查找 GitHub 用户和 Repo 的 Demo 练习项目“GitHub Finder”,感觉现在写前端多了好多工具链和库,整个项目就没写几行 CSS,移动端响应做得也不错,有点舒服。
不过后面项目需要用的是 TypeScript + Next.js + TailWind CSS,所以这个 Demo 也就是打打基础了。
有意思的是这两周 JavaScript 写多了,那天给我一个工作里的小 leader 投屏改 Go 代码的时候取一个数组的长度我下意识就 .length
了,报错后好久才反应过来,感受到了来自屏幕对面的困惑,几天不见 Go 都不会了哈哈。
感觉离自己能糊出一些好玩的小工具越来越近了,开心。
输入
动漫
- 三体,也还算期待了一阵子的三体动画版,放出了两集,我本身原著应该是看了大半,但算不上什么粉也没太多信仰,整体感觉的话还是挺不错的,画面和节奏都还行。
周报 #21 - 重新捡起的生活
前言
本篇是对 2022-11-28
到 2022-12-06
这周生活的记录与思考。
都说 21 天可以养成一个习惯,然而到了第 21 篇周报,却依然没能如期更新,每周都是花式拖更理由了。
过去的一周工作上其实算不上多忙碌,为活动开发的功能都顺利上线而进入了日常维护阶段,但是睡眠状况依然堪忧,几乎也都还是 3 点后才睡。之前提到过的和学弟一起做的项目筹备得差不多,也逐步启动了,却更多地感觉是在忙自己喜欢的事,所以也算是幸福的负担了。但前前后后堆积的事还是不少,即使是习惯了多线程的自己也频繁感觉到有些力不从心,好在身体健康状况感觉还行。
仍然因为疫情而居家远程办公(已经整整 15 天没有出门了),继续和捏捏共度时光,与之前的一篇周报主题“被搁置的生活与自我”相对应,我的生活似乎重新被捡起来了,多了许多明媚时光。
重新捡起的生活
其实即使自己并没有怎么意识到,在接捏捏回家后的这 40 天中,自己发生了很多变化。因为前段时间分别忙碌于工作,和一位友人一个多月没有联系,这次刚好我帮忙解决一个电脑问题,聊了几句,有了如下对话:
虽然也没有说的忧郁气质那么夸张,但我总体来说是个不那么积极阳光的人,对于生活和很多事都有着一种置身事外感,并不是不关心或是无法共情,只是不会有那么大的情绪投入,就像是一种角色扮演游戏,我扮演着我自己。而与他人的对话中其实更加不会过多展现自己的内心部分,同样,并不是因为不信任或是蓄意隐瞒所打造什么人设,只是不习惯。
而现在,即使自己好像并没有刻意改变什么,却依然能从哪怕只是日常的对话中让人感觉到情绪,是一种渐渐从自己的言语中溢出的满足感和充盈感。虽说决定再次养猫这件事也经过了反复思虑和权衡,但也未曾想这是一件会对我改变那么大的事,作为宠物和舍友责任与牵挂之余,她已然成为了我生活密不可分的一部分。
和另一位挚友聊天时被问到一句:
“有了捏捏后会不会更安于现在的生活而不愿意做什么改变?”
其实我的感知恰恰相反,最近有更加频繁和主动地去重新规划自己的生活节奏与未来目标,包括后续的工作形式、地域和内容。似乎对于之前的我来说,在哪个城市或是做怎样的工作,只要是自己喜欢做的事,只要是和自己在意的人一起,就已经足够满足,其他的没太太所谓。而现在则在自我独处以及和捏捏的“虚度时光”中逐渐更加能找到令自己舒适的生活状态与模式,也更加会在意生活本身的意义,生活不仅仅是自己爱好与工作的附属品,而是本身就值得被尊重和去好好探索的珍贵存在。
虽然并不想说得那么深沉,但捏捏似乎就像是在我生活的灰暗时刻突然出现的救赎,我在照顾之余也寄托了太多太多情绪与情感。所以其实会更加对未来会一起度过的生活有着更多期待,至少会更尽力工作来挣猫粮钱和争取更高的时间支配权来给予更多陪伴。
与『捏捏』的日常
之前看过一部纪录片,《喵星人的奇思妙想》,是在解读猫的行为和背后潜藏的想法,自己最近似乎也有一些这样的倾向,在一些生活中的有趣时刻会拍下一张照片,并配上自己的猫语解读,是一种很有意思的体验,似乎猫和人都在互相揣测对方的想法。
因为她眼角分泌物比较多,咨询了医生说可能蛋白质摄入过多,所以开始换粮并减少了一些零食的投喂,第一天她发现吃的没有以前丰盛了,就一直趴在我电脑上用下图眼神看着我。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输出
发现好久没正经写技术博客了,其实很多都已经打了草稿和笔记,只是还没有梳理成文,要继续加紧输出了。不过最近倒是和 GoCN 的小伙伴们一起翻译了一个 『Google Go 编程规范』,还连同之前的『How To Code In Go』发布了在线版本和 pdf 版本,今天还接到了极客时间的合作邀请(顺便小组成员都能白嫖一个专栏),也算是很开心的一个小成就了。
不知不觉自己的 Telegram 频道『Yu's Life』刚满了 200 订阅了,其实挺神奇的,只是一个自动化同步自己各个平台输入输出的一个小频道,慢慢积累了一些关注,也常常收到各个平台来的读者们的私信或是加好友申请,说频道有为他们带来一些不一样的视角和思考,还挺荣幸当时的一个小小的想法能够产生这样有趣的结果的,前几周忙碌于工作也少了很多输入输出,也希望继续坚持下去了。
这周的另一个小爱好就是调戏 ChatGPT,现在的 AI 聊天机器人也太强了,要是 GitHub Copilot 可能更多只是能够辅助一下写一些工具方法,但是 ChatGPT 是真能把整个程序给写出来(并且忽略了我的拼写错误正确理解了),要失业咯。
输入
剧集
- 唐朝诡事录,被朋友推荐来看的,好像这种题材看得蛮少的,有些惊喜感,集中一个周末就刷完了,剧情大多还算经得起推敲,人物都很讨喜,喜君和小薛环都太可爱了!
- 边缘世界,前几集虽然有点缝合但是感觉呈现形式挺不错的,后面越看越混乱,既没有了像是头号玩家那样的爽感,也算不上有什么深度,最后也算烂尾了。
- Wednesday,星期三,忘记从哪看到的推荐,工作间隙看完了,除了最开始的设定初见还比较新颖,后面有些不明所以,有点失望但还是追完了。
- 静雪,正在追,侧重于情感渲染,所以后续节奏也比较慢,只求别再虐男二了。
周报 #20 - 丧失的消费欲
前言
本篇是对 2022-11-18
到 2022-11-27
这周生活的记录与思考。
刚好到周末了,难得一天没有集中的开发工作量,饱饱地睡了一觉,下午补了落下的剧的一些进度,终于开始写周报,好像每周拖延几天(偷偷)磨掉了一周的周报哈哈,又回到了周日,新的轮回开始了。
这周是魔鬼作息,日常都是凌晨三四点睡,早上八九点起,有两三天甚至直接到了早上六点多才睡,然后又是一整天的工作量,周而复始,不过有猫猫的陪伴倒也算不上多苦,而且一直居家,反而多了一些相依为命的情谊。
可能因为确实过得太工作狂+生活佛系,又刚好要帮之前提过的酷学姐把一个她的画作上架成 NFT,所以让我带着猫猫去家里玩,体验了一下 “WeWork + 猫咖”,还蹭了两顿饭,是这周中为数不多的惬意时刻,也再次感慨自己的生活方式和品质和她的差距之大,不过也各有各的乐趣。
倒是猫猫是真的没良心,一点也不认生,一点好吃的好玩的就被收买了,四处好奇地探索,走的时候还不舍得,白养了,以后一定努力改善生活环境哈哈(卑微铲屎官的觉悟)。
丧失的消费欲
其实自己以前一直算是个消费欲比较强的人,更多像是一种压制之下的报复性消费。因为家庭教育方式的问题,自己在学生时代一直是没有常规意义上的零用钱的,也不会有什么考好后的奖励这些(当然,与之相对的也是没有考不好后的批评和惩罚,很公平),而是有什么需要的会去跟父母说然后直接买,可能也是一种还不错的模式,但一些额外或是无用的消费也不太好跟家人提。
至今仍然记忆犹新(或者说是耿耿于怀哈哈)小学时期待了半年的一个礼物,原本一直以为会是 GBA SP(就是那个翻盖、有背光的 GBA 掌机,因为一直想来打口袋妖怪),但是收到后是一个遥控直升机,当时很失望。现在想想其实也挺好的,后面学无人机也有了一些基础直接上手了。
不过就是因为当下想要的东西总是没法第一时间获得,总是一种对于消费欲的压抑,而从大三开始经济独立,因为都是自己赚的钱所以可以很自由地支配,所以陆续买了很多东西,尤其是各种电子/数码产品,其实有些也并不是刚需或是真的很想要的东西,只是享受于能够自由拥有的感觉,甚至还有收藏各种包装盒的习惯(现在还都整齐地堆在书架顶上)。
工作后其实也更加是,毕竟也是一个算是天天和软硬件打交道的职业,再加上自己喜欢折腾各种工具应用,在有了一定经济能力后也都支持正版,在电子设备和软件上一直都有不小的开销,甚至还维护了一个还算小有热度的『个人工具箱 - pseudoyu/yu-tools』项目,也在持续更新中;同时,也常常会买一些感兴趣的 Switch 游戏,虽然有好多甚至都还没来得及打开,也少了很多沉下来慢慢品味的心境。
我似乎是一个不吝在爱好和喜欢的事物上消费的人,比起这些,反倒是自己的日常饮食或是生活起居才算是比较敷衍。但感觉近半年来,自己的消费欲在逐渐丧失,似乎再没有那种为了一个硬件产品期待好多天蹲发布、看评测和等收获的热情了,虽然常常嚷着自己的 16 寸 Intel 笔记本是被 Apple 背刺了,但也没那么在意所谓的 M 系列和它背后的数字了,更多就像是一种习惯一样看看发布的参数和跑分,提升了哪些哪些,然后自己来一句,“哦好,下一代再说吧”。
前段时间参加了双十一,因为刚刚把猫领回家,所以买了很多相关用品,倒是接连收了几天快递。然而在都安置好了,想着要不要给自己买点什么时,却好像陷入了一种空白,好像并不缺什么,也没有什么想要的,后来只好作罢;最近也是到了黑五,跟往年一样打开一些推文和文章看看有什么打折的软件数码,看了好半天最后也就买了两门和最近工作相关的课和一个笔记软件 Craft 的个人订阅会员,大部分期限也快结束了,自己也没什么感觉;可能双十二会买个体检套餐吧。
物欲的降低说不上是一件好事还是坏事,可能是因为现在自己已经不需要太多实体的、能触摸到的东西所带来的实感来填补自己的内心需要,慢慢地转向了一些可以内化的部分;可能是因为自己将许多需求的部分寄托到了猫猫和一些依赖关系上,并没有像以前那样有更多心思来关注自己的一些一时的满足;抑或是自己在日渐饱和的工作与日常中已经慢慢被磨灭了一些好奇心与探索的动力。
与『捏捏』的日常
这周忙到书也没看,剧也只有周末的时候追了一部,其他也是什么都没顾上,但还是抽出时间带捏捏去体检了,依然有一些令人担心的小问题,也在继续吃药治疗了,希望能一直健健康康的,真的是有一点点小问题都会无比担心。
而因为一直都居家办公,陪伴的时间长了很多,有很多很棒的时刻值得记录,很不得每天都发好几条日常,像是一个晒娃狂魔,于是打算周报开一个小模块,日常记录这些瞬间,后面也想弄一些类似相册来记录下这些宝贵的时光。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
剧集
- 初恋,First Love,出租车司机的设定让我想到之前看的《稍微想起一点》、《驾驶我的车》和一部动漫《奇巧计程车》,觉得这个还真的是能看到人世间百态的职业。这部期待了挺久的其实,围绕着音乐的展开、回忆和当下交错的呈现方式和满岛光,都是吸引的点,有好几个转场有被惊艳到。不过轮剧情上很难说出彩,只是现在越来越受不得虐,觉得这样甜甜的也挺好,毕竟看隔壁在播的《静雪》天天都在心疼男二和女二,果然年纪大了,还是适合甜甜恋爱的展开。总体来说还是蛮值得一追的。
- 静雪,正在追,真的是被虐到,一直到更能带入一点男二却要被刀。
- 边缘世界,正在追。
周报 #19 - 忆一次创业经历
前言
本篇是对 2022-11-09
到 2022-11-17
这周生活的记录与思考。
这周的周报差点就鸽了,好像已经很久没有在周日准时发布了(甚至越拖越晚),总是有各种各样的事,原本也常常安慰自己说反正是自己的一种生活点滴记录,太忙了也可以降低一下优先级,但偶然在后台会发现一些用心的留言,甚至在微博这样已经几乎废弃使用的平台也能偶现一些催更,让我很真实地感觉到了自己写的文字和屏幕前的阅读者之间的链接,所以每次打开文档时也很难做到敷衍,倒不是说给自己压力一定要产出什么干货或是什么有价值的想法,但也难免会想象如果我作为读者在按照每周惯例打开周报看时是否会失望,也算是自己的一个小小标准吧。
其实一直很难称呼自己为作者,总觉得这个称号太重,似乎一下子和读者有了一些鸿沟,可能更多是自我定义为真诚写作的人,不论是一些周报想法中的碎碎念还是技术博文中对于知识的消化与解构,自己似乎很习惯于将自己的很多东西以文字形式呈现出来,归根结底还是自我分享欲的载体,但也常常能收获很多意外之喜,也更有动力坚持下去。
因为被工作占满了,这周的输入输出都不算多,不过倒是因为一些事记起了之前的一次创业经历,也算是第一次完整地回顾吧。
忆一次创业经历
工作上已经连续熬了一周多的大夜,大概每天都是两三点睡,第二天挣扎着爬起来开晨会,上线了好几个大需求,不过大部分时间在家远程,偶尔想出门了就去公司,所以也提前享受了一下自己理想的远程办公模式,再加上有猫猫陪着,尽管处于高压之下,也没有去年驻场开发赶交付终验那么痛苦。
并且甚至在赶着项目的同时,还和一位偶识的挺有缘的学弟开启了一个分支创业项目,参与的初衷只是更快地提升一下自己的技术力,但能够把一些小小的构想通过一次次的讨论逐步成型也是一个很有趣的过程,也很乐在其中。
而且这周也第三次重温了美剧《硅谷》,大概自己就是那种只要感觉自己处于新领域探索或新知识学习时就会有用不完的精力(或者某种程度上的透支),似乎更能找到乐趣和成就感,自己大体还是幸运的吧,自己所谋生的工作同时也承载了自己的兴趣与个人追求。提到这个,其实在目前的阶段倒是可以略有些不好意思地说自己曾经有过那么一段创业的时光,结果不怎么好,但对于我也是一段很珍惜的经历。
大三结束的暑假自己咬牙买了一台 Sony A7M3,全套下来两万多的售价掏空了当时的全部积蓄,于是和一位学院的老师一拍即合,萌生了做一个在线教育视频工作室的想法。
事情的展开比自己想象得顺利很多。7 月底有了初步构想,八月底制作了商业计划书(BP)并和学院领导进行合作协商,很快申请到了一个可以免费使用的场地、一笔在当时看来不菲的启动资金与一些项目的合作机会;9 月就成立了公司,甚至为了省钱连注册公司与财务都自己去学习和尝试(最后注销公司的时候差点因为一些税务申报不规范问题而翻车),接下来就是几周的工作室设备购置与布置;10 月就正式招人和录制了第一门课程。
即使站在现在的角度也很难想象当初是抱着怎样的想法与热情在做这件事,市场推广、打光、拍摄、剪辑、后期、包装和各种繁琐的商业宣讲与谈判,为了节约成本前期都是自己一个人去做,后面才慢慢也带出了几位得意的“实习生”。已经记不清在那个因为要隔音而密不透风的录影棚中通宵过多少个夜晚,宜家沙发床的质感也成为了那段时间无法磨灭的记忆点。
经过了一年的探索,一切似乎慢慢有了起色,工作室也初具规模,但临近毕业时候的自己却很难真正将做视频这件事当作自己的事业,有些任性地还是选择了自己去申请计算机的研究生,于是一边做着一些远程工作维持 gap year 的生计,偶尔往返武汉完成录制项目,同时准备着雅思与申请文书,其实当时自己已经意识到了可能并没有打算再把这件事坚持做下去,只是不愿意就这样放弃自己的心血。
这样的纠结其实并没有持续太久,疫情来了,Base 在武汉且高度依赖线下业务的工作室自然陷入了停滞,而随着我赴香港读研,挤出来的时间也只够自己远程完成一些业务的收尾工作,于是在 21 年的 5 月也正式注销了公司。其实在收到最终的注销确认单时,算不上遗憾,在自己力所能及的领域做了一些尝试,为自己的大学生涯涂抹上了几分色彩。结束得也还算体面,将最后的一笔业务收益(尽管不多)全分给了参与投资的老师和依然在帮我完成许多善后工作的工作室成员,为自己的创业画上了一个还算圆满的休止符。
尽管都是自己主动的选择,依然残留着几分难过,在后面很多次的总结中也仅仅是轻描淡写地提及一下,似乎是在害怕过了这个阶段的自己就没办法捡起这样的勇气去做这些事,那再提“当年勇”也失去了意义。比起纠结于结果的成败,我依然觉得那段时光在积极地影响着我的工作与生活态度,尽管领域和内容天差地别,但坚持做好一件事的信念、解决问题的方法论、多线程处理各种事的冷静以及太多太多的品质似乎都是那时候所留下的,我也很庆幸现在的自己依然能够追随本心去尝试一些东西。
『捏捏』与被治愈的生活
其实还没有正式取名字,总觉得是一件需要非常郑重去决定的事,一直还没有思绪。但最近也有了一个小名叫“捏捏”,一个可爱的拟声词,后面大概每篇周报都会有一些日常记录吧,周末也开始整理一下相机,开始记录一些成长,没准能成为一个 vlog 或萌宠博主呢(?在做梦),不过也确实因为在 B 站看到的 polebug 的视频周记而燃起了视频记录的念头,总之想做的事还是挺多的,一点点开始吧。
这周跟一位朋友聊天时,突然被评价说好像我的生活也还挺治愈的。才突然意识到好像是很久没有被这么说过了,总是让自己沉溺在一些情绪中,或是通过一些内心或是外部的忙碌来填充自己的时间,但这两周有了捏捏的陪伴,似乎成为了晒娃狂魔和一个奶爸,似乎整个世界都变的明媚了起来,连带着我的生活。
可能因为太宠了,最近总是在我工作的时候来捣乱,也爱上了爬我的键盘和电脑,完全无心工作哈哈。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 我的职业是小说家,正在读,村上真的是一个很独特的作家,太喜欢他的笔触与表达方式了。
剧集
- 硅谷,重温第三遍,第一次看是在高中,觉得很酷但作为文科生的自己也没 get 太多;第二次是在大学毕业后,即将去读 CS,对其中的很多梗和这群 tech guys 的热情也更加向往;最近看完了第三遍,自己也终于如愿成为了 tech guy,尤其是后面很多区块链与去中心网络相关的,又有了奇妙的链接与共鸣,算是和《社交网络》一样对我影响挺大的一部作品了。不知道下一次重温的自己会是在做什么呢?
- 她和她的她,被题材和宣传片所吸引,没办法去很自大地说自己能够对女性所面临的这些困境感同身受,但还是有很多共情的点,上周刚经受了《房思琪的初恋乐园》所残留的一些情绪波动,又看了这部,有些失语。整体节奏还不错,但依然还是觉得结局似乎有些太过于理想化和口号式,现实残酷的多。
- 边缘世界,正在追。
周报 #18 - 陪伴与另一种生活
前言
本篇是对 2022-11-01
到 2022-11-08
这周生活的记录与思考。
这周是和猫相处的第一周,因为双十一买了很多猫的各种设施和吃的,快递很多,大概有一半多的时间是在居家办公收快递,所以也能有更多的相处时间,太乖了;周末带去体检了,整体还算健康,眼睛和肠胃有一些令人忧心的指标问题,开药进行了一些治疗,下周再去复查。
工作上这周进展不错,两个项目并行且都有了一些进展,写了一个合约并上生产环境使用了,并且针对一些常用的日常活动写了一些实用脚本,减少了很多重复性的繁琐工作,还挺开心的。
陪伴
这是与猫度过的完整的第一周,因为也很不放心在家时候的状态,所以一半时间居家在家了,在公司上班的时候也时长开着摄像头观察一举一动(虽然大部分时间都是趴在椅子上睡觉的非静止画面,依然能盯着看很久),有一种莫名的牵挂。
常常以为自己是很能独处的一个人,并不需要太多陪伴,探索一些有趣的东西、或是看看电影书籍似乎已经足够填满我的大部分闲暇时光。但渐渐地发现其实自己是属于一个情绪隔绝的状态,低落和消沉的情绪逐步积累,却也不会影响我的正常生活工作,而从日常或是工作中获取的愉悦感也无法反向去消减我的负面。长此以往,有时甚至我自己都能够清晰地触摸到我的情绪值。
而这一周和猫的共处中,我能够感受到自己有在依赖这种感觉,一边开着会议一边抱着猫,或者看着她在旁边玩耍,时间流动得缓慢而美好,慢慢地才意识到这种感觉多么久违。
人和猫的羁绊真的很神奇,语言不通,情绪也很难共感,却似乎有一种隐隐的默契,一个将自己的被需要感寄托,一个静静地陪伴着。后面也慢慢打算捡起相机多拍摄一些自己的生活与猫的日常,似乎每天也都能有所期待了。
另一种生活
这周和之前在香港结识,并且现在同样北漂的学姐吃了饭,一年可能也就会约三四次饭,每次却都有挺不一样的体会,大概是每次都能从中获取自己对另一种生活方式的想象与期待。
大概从经历和性格上来说完全是两个不一样的人,我有自己专注的东西,似乎工作内容本身和沿着这个方向领域的许多事宜都是我所享受其中的,可以说是某种程度上的幸运,却也常常有些好奇如果没有走这条路,自己的生活又会是什么模样。
自己大概原本是一个所谓的挺“斜杠青年”的人,常常去学习体验一些全新的东西,有时候是享受于学会一项新东西的愉悦,有时候仅仅是沉浸于在学东西的过程。后来陷入了挺深的迷茫,纠结于“知识和体验是要更加追求深度还是广度”,最后还是选择了一个更专精的领域,同时,某种程度上来说也放弃了其他的可能性。
而学姐则是一个可以把自己的事做好,却也很能把自己的工作与自我追求分离的人,会在周末和闲暇的时候去攀岩、跳舞、游泳、冲浪、打拳,以及最重要的画画,在自己的各种兴趣爱好中尽情探索,不在意那么多得失,也不去纠结那么多意义,只是享受过程,同时享受着自我的补全。
而明明处于事业和个人发展都令人羡慕的阶段,却充满着热情跟我讲着在计划明年 gap 一年去美院参加一年全日制项目学画画,也不为了什么转型或是方向调整,只是喜欢。一时竟分不出自己是在羡慕能为了这样仅仅是“喜欢”的追求而能够做到这种程度还是能够找到这样的喜欢。
也许自己也在一些阶段做出了一些转变,不论是学业还是工作的方向,似乎也需要一些所谓的勇气,但内心深知自己已经平衡了其中的成本与得失,自己似乎已经好久好久没有为自己的内心追求与纯粹的喜欢去做一些事了。学姐所在体验与践行的就是曾经的我所向往的另一种生活,也让我看到了另一种生活的可能性。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
收到了一位读者 seyee 的评论:
好奇一下这些书你都会读完嘛(没有质疑的意思,只是作为社畜觉得一周读这么多书好厉害)
其实当然是不可能一周读那么多的书哈哈,只是我有并行读书的习惯,尤其是一些非小说类的书籍我可能会每天读部分章节,也根据时段和心情不同选择读不同的书,平均下来一本完整的书读完会在 2 周左右,但是遇到感兴趣的剧情类的可能一下午或者一晚上就会读完,或是两三个通勤时段,列举出来的大多是刚好在这周读完或是有读部分篇章的书。
对于读书这件事从并不想以量或是产出作为自己的压力或是限制,而是更多作为自己的一种输入渠道和某种程度上的放松手段(当然在之前读《房思琪的初恋乐园》的时候也会 emo 好几天),尽量会达到一种情绪平衡吧。也是因为来自工作和多个方面的压力才寄托在书籍、电影这些媒介上,更像自己的一方净土吧。
- 我的职业是小说家,正在读。
- 常识,正在读。
- 自学大全,其实自己好像不算很喜欢像是《如何阅读一本书》这类的偏工具技巧类书籍,但确实有挺多经验可取的地方,这本书最近也比较火,刚开始看看,希望能有些方法上的参照。
- what if,那些古怪又让人忧心的问题,发现是那个火柴人的作者,真的讲了好多我小时候一些很好奇的疑问。
剧集
- Hacking Google,意外地节奏感很不错,虽然没有深入技术细节,但有把安全链条中的各个环节很清晰地呈现出来,很向往。
- 边缘世界,正在追,但是感觉从第三集开始有些节奏一般,不过应该还是会追完。
周报 #17 - 他和他的猫
前言
本篇是对 2022-10-28
到 2022-10-31
这周生活的记录与思考。
因为上一篇周报很晚才更新,所以这期在时间跨度上显得尤为短暂,但却也因生活中迎来的一个重大改变而别具意义。
经过了周五到周日三天的猫舍之旅与纠结,我把一只很合眼缘的银点(银渐层重点色?才发现原来也分那么多品类)小猫(名字还没决定)带回了家,重新过上了与猫的生活。
他和他的猫
这个标题源于一部动漫《她和她的猫》,其中有这样一句话印象很深:
我一直寻找着她的踪迹,我寻找她的理由,正是因为她同样也在寻找我。 —— 《她和她的猫》
一直很喜欢猫,在遥远的 16 年的一家咖啡厅看到店主的可爱布偶时也动过想拥有一只的念头,但似乎在上段恋爱之前,自己从未真正认真思考过养猫这件事,或者说与猫为伴的生活。可能对于猫的热情与耐心是有的,但总是觉得自己并没有做好为一个新的生活伙伴负责的准备,自己的生活也常常是一团糟,又怎么敢去自以为是地负责 ta 的一生呢?之前见到过这样一句话,朴素却让人有些心痛。
猫可能只是你这一生中的一小部分,而你却是它一生中的全部。
在来北京生活工作稳定之后,“养猫”这件事似乎发生得自然而然,花了一个周末,去了几家猫舍,很快决定了很合眼缘的小薯,像是初为父母一样对于这个新伙伴的一切好奇而又紧张。
日子一天天地过去,似乎这已经是平淡的日常,但其实并没有那么理所应当。过去也曾有过这样的视日常为习惯的阶段,当似乎认为已经自己和一切改变了的时候,才发现不过更多的是自我满足罢了。
也很惭愧地说,在之前似乎也不短的养猫生活中,自己更多是享受其中的角色,在忙碌疲累时有所期待,在痛苦消沉的时候有所陪伴,在欢欣喜悦时有所寄托。而对于照顾猫的很多细节,似乎自己并没有上心太多,甚至到现在也很难准确说出小薯最喜欢的猫粮和罐头的品牌,实在也算不上称职。
后来的事也自然而然地发生了,在之前的一篇『周报 #08 - 职业杂谈、404 Not Found 与猫』中也提到过:
实话说和她一起之前自己并没有想过养猫,大概是觉得连自己都照顾不好的人又怎么有资格对另一个生灵负责,但当真正家里多了一个成员时也才渐渐发现自己享受于这种依赖与被依赖,似乎生活也多了很多目标。
她离开后,小薯一并被带走了,虽然常常也跟朋友无奈地玩笑说自己“人猫两空”了,但也心知自己之前的照顾确实不如她,这样的选择也无可厚非,只是每次忆及从前又多了一倍的难过。
昨晚看了『喵星人的奇思妙想』纪录片后也更多了解了之前忽略的很多猫的想法和相处细节,也隐隐萌生出是不是要自己再养一只猫的念头。只是这就像是对小薯的一种背叛,自己也依然没能做好这个心理准备去再次去好好对待一个新的成员,而在自己需要的时候迎接一个新的成员于人于己都很难说是一个负责任的选择。
也许未来某一天吧。
提到的这“未来某一天”,到了。
远处的事物看起来渺小又模糊,近处的东西却非常清晰,回忆也是同样,遥远的曾经非常模糊,方才发生的事能记得一清二楚,本应这样才对。但我最近总能清晰地回忆起往事。 —— 《她和她的猫》
原本觉得这一天会很遥远,会需要到我能够真正接受过去的时候才能够做到,会需要到我能够真正能说出“let it go”的时候才能坦然面对。然而并非如此,越是想要遗忘,回忆就越是清晰。
经常能够收到“珍惜当下”的安慰或是祝愿,但其实这于我而言是一个很狡猾的词,过去的所有经历构成了现在的我,过去和当下同样值得珍惜,而自己也并不想因为想走出消极情绪而抛弃一个完整的自己。大概还是抱着这样的念头继续生活下去了。
心理上很难说是不是真正做好了准备,各种意义上的准备都是,思绪理不清。但是,觉得自己应该已经可以好好地再接受一个新的生活伙伴了,或者说,也需要这样一种互相陪伴的关系了,也在『周报 #14 - 被搁置的生活与自我』中提及了:
10 月 10 日就是当时第一次接小薯回家的日子了,躺在沙发下几个小时用猫粮吸引着她出来的时光还历历在目,第一次到怀里的欣喜也难以忘怀,临近这个日子却也只会愈加难过。
养猫大概是一件需要倾注许多心力去做好的一件事,原本更多觉得是我们在照顾猫,给她一个优渥的生活环境,到现在才发现,原来是我需要她。大概会早些考虑再养一只猫吧,等能够返京后会去之前的猫舍看看,让自己的生活多少能够增加一些期待与温存。
这个时候其实挺感激当时立下了写周报这个 flag 的自己的,把这些思绪与其背后的自我记录了下来,也许是因为这些文字,自己才能够从中找到一些问题的答案。
尽管想再养一只猫的心路历程已经持续了好久,但下定决心其实更像是一个一时之念。周五下班后去了预订好的离公司并不远的猫舍,原本想选一只与小薯相似的布偶,却被一只小小的银渐层所吸引,也许是因为她蓝蓝的晶莹的的眼睛,也许是因为一来就乖乖地趴在我的腿上,安静而温柔。
因为要出差的安排,一直很犹豫,想着也许要在 12 月底才能带回家,害怕错过重要的陪伴阶段,也害怕路途与环境的颠簸对她带来的不适,似乎一到这样的时候就开始考虑很多。
周末还是去了原定的昌平的猫舍去看布偶,因为路途遥远,路上翻起了村上的这本《我的职业是小说家》。
他讲到了这一段刚毕业时候的经历,突然很戳内心感受,大概自己已经很久没有泛起这种温暖而有所期待的感觉了,原来,我比自己想象得更加需要一个陪伴。
在打听清楚了跨省托运的规则,和公司也经过一些沟通交涉后,还是决定当下就领回家,重新过上了与猫的生活。其实很奇妙,明明似乎一切都没什么变化,但在回家途中的出租车上,自己跟司机有一搭没一搭地聊着天,时不时地看一眼航空箱里的猫,突然有一种生活又重新流动起来的感觉,窗外依旧是那个并不算熟悉的北京,内心却有了一些归属。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 我的职业是小说家,正在读,村上的文字真的太有意思了,几分真实几分自嘲。
- 计算机体系结构:量化研究方法(第 6 版),正在读,有点难啃。
- Programming in Lua, Fourth Edition,看完了视频,通过书巩固一下。
- 常识,正在读,果然在行程里没有一口气读完就拖到了现在。
- 乌合之众,正好重温了下,印象最深的也是进入一个群体就很容易降智或是忽略自己行为中错误的部分,即使并不是直接加害者,也难免成为一个抱有“法不责众”的心态去释放恶意的帮凶。 有些部分还挺有参考性的吧,但个人色彩也很浓厚。对于恶意群体是否值得被拯救也是挺需要思考的。
- 五种时间,小鹿的视频里提到这本书就好奇来看了一下,我算是对于时间管理、知识管理等等这些有所追求的那一类群体了,依然在这本书中没法获取什么有益的部分。理论讲解的部分过于经验谈,很难了解到获取这些经验背后的经历和思考逻辑,这一部分《被讨厌的勇气》中阿德勒的对话思辨方式会好得多;而方法论部分华丽的“花园模型”却也很难有所参照。
剧集
- 静雪,看了第四集突然好难过,虽然是意料之中,但还是很心疼凑斗(可能代入感比较强)。
- 边缘世界,正在追。
动漫
- 她和她的猫,很短却又很戳感受的一部短片,因为周报的标题重温了一下,对于新养了一只猫的自己可能触动尤其明显。猫可能只是你这一生中的一小部分,而你却是它一生中的全部。养猫大概是一件需要倾注许多心力去做好的一件事,原本更多觉得是我们在照顾猫,给她一个优渥的生活环境,到现在才发现,原来是我需要她。
游戏
- 女神异闻录 5 皇家版,期待了很久终于上了 Switch,但才玩了指引的部分,画风、配乐和玩法设计都很惊艳,有时候做别的事放着作背景音乐也是一种享受,不知道什么时候才能完整体验完。
周报 #16 - 纯粹性学习
前言
本篇是对 2022-10-19
到 2022-10-27
这周生活的记录与思考。
这一周工作项目很忙,连续好几天都在加班,不过总算是完成了自己部分的需求。但是在闲隙时间里,倒是把几个之前一直想学的语言的入门教程看了,很有意思。然后公司安排作了一次技术分享,讲智能合约这一块,还是好好做了 ppt,不得不说 Apple 的 Keynote 真好用,神奇移动和一些内置的动画效果都很顺滑。
又折腾了好几个小网站和系统,自己的 starter page 也越来越丰富啦。其他就是因为一些个人的规划问题,打算把之前的一些项目和文章做一下双语版本了,后面可能除了周报外其他的技术文章也会先写英文再翻译一版中文(或者反过来?),感觉压力很大,不过还是要坚持下去。
纯粹性学习
这周沉迷学了好多新技术,把一直有些好奇的 Lua 基础语法看了,感觉能用来写点脚本和小游戏;C++ 进行了一些入门学习,这个主要想深入一些语言的机制,这次学反而更加能体会到一些语言设计的精巧;Rust 也把基础语法又巩固了一下,算是第二次冲击入门了;因为要写一些 DApp,React 和 TypeScript 也在进行中。
继续在读那几本很难啃的书,像是《深入理解计算机系统(CSAPP)》和新出的《计算机体系结构:量化研究方法(第六版)》进展都有点缓慢,但是慢慢来吧。
其实学这些倒也没有那么强的目的性,大部分在工作中也不会马上用到(这也是时常觉得工作有时候有些无趣的主要原因),可能没有很多实际应用的话也会常常忘记,但是本身学习过程就很有意思。慢慢还挺喜欢 Crash Course 这种形式,几个小时揭开了一些神秘名词的面纱,或是掌握一些奇奇怪怪的技能,能感受到一种很纯粹的学习乐趣。
这个好像是一直以来的习惯,大学时候就鼓捣着学习好几种新的外语(当然,学了一阵子后就放弃了,德语作为二外算是入门了吧,但不知道什么时候才能捡起来,有点后悔没好好学),以及把 Adobe 全家桶都学一遍(好多确实有点鸡肋,但有用的确实学得差不多了)。比起一项技能或是一类知识能够给自己带来的实际益处,似乎探索带来的动力更为重要。
目前也很想能做出一些有意思的东西,希望能一直从自己做的事中找到乐趣吧。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
Twitter 统计系统
跟着推友象牙山刘能的『twiyou』项目搭建了自己的统计系统,很有意思。
博客系统
之前虽然也经常魔改一些主题设置,还给我用的 hugo 主题提过 pr,但其实一直没深入研究过 hugo 的模板系统,这几天好好研究了一下,打算写一些 shortcode 来供使用,还是挺强大的。
文章的部分闲置了好久,其实都在 Logseq 中有记录,但是一直没细致整理,后面有些不一定很成文的可能就放在 Notes 模块了,持续更新下。
输入
书籍
- 乌合之众,正在重温。
- Programming in Lua, Fourth Edition,学了一点 Lua,感觉是个很有意思的语言。
- 计算机体系结构:量化研究方法(第 6 版)
电影
- 溺水小刀,画面还不错,有几个经典场景常有在混剪中看到,但是剧情和节奏还是挺平庸的。全程也就是在欣赏音乐了,歌单添加了好几首,很适合做视频的 bgm。
- 罗马,节奏和画面都无比缓慢的一部电影,像是一部个人的回忆录,在当时的环境下又有一些微妙的隐喻,也正如在时代下无从适从的当下的我们。
- 瞬息全宇宙,前几个月火到不行,今晚一边补周报一边看了,很失望,有点不明所以,情绪转折和反转都很莫名,有种想表达的太多,也立意太高,反而撑不起内核的感觉。
剧集
- 串流先锋,故事总是相似,虽然在心目中还远比不上《社交网络》,但作为一个互联网创业故事很难得地没有仅仅专注于程序员,很新颖。崇拜 The Coder 中的科技宅们但是最喜欢的还是 Martin,毫无拘束,商业和现实世界不仅仅只是二进制,需要有人来为其理想主义而背负代价。另外,The Lawyer 中的许多转场画面很惊艳。
- 龙之家族,我本身也不算权游的爱好者吧,当时看到第五还是第六季听说烂尾了就没追了,书倒是看了大半。前几个月比较热门所以追了,前几集几度想要弃坑,零碎着看完了,感觉这么宏大的世界观可能还是书更适合铺垫,剧集总有一些断续感。
动漫
- 朝花夕誓,也是被朋友推荐,略带些奇幻的不老一族的设定。宏大的世界观下却只是从时间流逝与缘起缘尽的人情讲述整个故事,有一种不一样的视角。
- 万神殿,同事说这部动漫有并行计算,资源池、死锁、互斥锁,于是好奇来看看。前几集很有意思,临近结尾有些抽象,看得很累,可能也是因为在午休闲隙看的没能细细琢磨,但总体还是很值得一看的。
周报 #15 - 内观与外求
前言
本篇是对 2022-10-10
到 2022-10-18
这周生活的记录与思考。
因为疫情的缘故一直在杭州居家,天气日渐转凉,没带太多衣服,所以在健康宝状态正常之后马上买了回来的票,周五就回了北京。短短半个月时间家里就有些一团糟,周末两天几乎都在大扫除和整理。
两个项目陆续开始有些重叠,在家的工作效率不算太高,也很久没有好好学点东西了,整理了下学习计划与日程安排。
不错的是自己终于坚持了几天晨跑,看到了久违的杭州的风景,不过也明显感觉到自己体能有所下降,临近秋冬了可能多做一些室内的运动吧。
记一次印象深刻的交流
本科时候在社团结识并一直师徒相称的一个朋友完成了第一部小说,也开始做自己的 B 站荐书的帐号,有一种很因缘际会的感觉。记得很遥远之前谈论过要写这样的一部作品,就像一棵幼芽一样藏在记忆中,而到了现在渐渐有了第一个发芽的种子,而自己作为这样的见证者,也由衷地开心。倒是作为师父,自己一直想做的一些事(比如 B 站帐号)反而持续搁置,也该加油了。
自己其实一直很珍惜这种能够不基于日常的交流模式,尽管好像已经有近两年没什么联系,却依旧发现了很多想法和特质上相像的点。这就像是一种磁场或是默契,基于个性特征的契合而不是日常或是某些其他的目的性的交流也更容易保持恒久,似乎只需要想到些什么,一句“对了,我突然想到...”或是相隔几个月毫无铺垫的一句“约个电话?”就已经足够打开话匣,是一种很令人惬意的关系模式。
性别与交流
起初聊到了关于性别与交流的问题,提到说好像当前比较普遍的男生比较难去完完全全静下心去看女生产出的内容,就好像总是对照片、工作情感状况尤其敏感,而常常忽略一些观点性的输出,就好像性别隔离了平等交流。
这是一个挺有意思的现象,似乎天然存在于异性之间的关系中,且由于心思细腻程度的一些天然差异,男性也更容易成为无视女性观点性表达的一方。诚然,自己也不是什么高尚的人,无法免俗地因外表或是称之为魅力的因素影响一些起初印象的判断,但一旦进入朋友的范畴,会更倾向忽略这些来追求更为真实与平等的交流,而尤其随着自己逐渐不再依赖于社交,也对这样仍可以交流的机会倍感珍惜,而这样的真诚也往往能有同样的回应。
创作与分享欲
还聊到了创作与分享的一些关系。其实某种程度上来说我的博客与朋友的书都是一种创作,同样也是我们分享欲的载体。
写东西、产出内容、表达想法,或是把之前埋下的想法一点点实现,是分享欲的一种表现,但并不是那种告诉别人自己在写一些似乎很厉害的东西这样的虚荣心作祟,而是希望真诚表达,或是自己付诸心血完成的作品能被认真对待,或者是得到一些反馈。
朋友的一句比喻很贴切,这就像是对着山谷发声,希望能听到回音。
内观与外求
印象比较深的是提到了“内观与外求”这个概念。我们作为人的关注点往往都分为内在与外在两个方面,相较而言,对外的关注点由于更具刺激性与正反馈而占了绝大部分,而对内在的关注则往往容易被忽略。
似乎从某个阶段起,开始有些害怕和警惕自己的变化,担心有一天再也看不进书和电影,或是看完后想法空空,这是一件多么难以想象和接受的事呀;与此同时,似乎又有些担心自己停止变化,那又会错过多少有趣的人生阶段呢?
细想了一下,自己其实是在害怕不再具备内观的能力,外求似乎总能有一些答案,而内观则没有终点。如果失去了自己的内核,失去了对自我的好奇与探索的动力,是最值得恐惧和难以忍受的事。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 毛姆读书随笔,补标,几年前最初读到,后面陆续又看了好几遍,可以说是重新燃起了我对文学经典的热情。
- 常识,道长的时评政论,不得不说那么多年前的一些政治看法在现在的中国环境下看,有一些很有意思的点。
- 乌合之众,也是大一的时候看过,路途上重温,挺不一样的,尤其是能够感觉到个体特质渐渐在被抹去的当下。
电影
- 坠落,看得全程很都很精神紧绷,也还是挺不一样的观感,大概上一次有这种感觉还是《云中行走》了。平时自己虽然并不怕过山车这样的活动但也不会刻意去追求刺激感,大概也比较难理解这种体验,倒是有点好奇,最近有在思考去徒步,也许之后可以去试试蹦极和跳伞。
剧集
- 终极名单/The Terminal List,第一集的铺垫看着有点累和压抑,后面节奏感很紧凑,PTSD 与复仇元素也算是剧集常客了,但依然有不少惊喜感,查了一下原来也是 poi 的导演,熟悉的感觉。
- 石子和羽男-这种事情也好告吗?,因为有村架纯的一个表情包看的这部剧,风格不错但是剧情和案子也就这样吧,可能原本定位更偏向社会现状影射和教育意义。另外怎么感觉最近律政题材的不错的新剧也越来越多了。
- 甄嬛传,周末居家的时候补了,以前一直因为题材不太感兴趣,古装里面一直也都喜欢《琅琊榜》,不过追完后倒是发现了很多不一样的吸引点了,当时的剧集节奏和演技都还是挺绝的。
- 静雪,在追的一部新日剧,很美。
动漫
- 狼的孩子雨和雪,晚上突然翻起豆瓣想看的列表,偶然看见这部从高中时候就码了的动漫电影,就打开看完了。很喜欢的画风,尤其是自然景观的部分很细致,剧情上虽然结局算是不错但依然有点致郁,人物的性格都好喜欢。
- 电锯人,高中时好像很有名,但是我当时没看过动漫,补一下番,看了第一集还蛮不错的。
- 万神殿,听同事说看这个番还得了解死锁、互斥锁和并行计算什么的,有点兴趣,就追了一下,感觉设定也挺有意思的。
游戏
- 火焰纹章:烈火之剑,打了一半多了,有点累了,比较费脑,等下一波时间空一点打完。
周报 #14 - 被搁置的生活与自我
前言
本篇是对 2022-09-27
到 2022-10-09
这周生活的记录与思考。
这是一篇跨度很长的周报了,缘由是我自 9.29 日早晨就提前调休回了杭州,接着国庆假期,又凑了个小长假,那一周主要也是加班与回家的行程,便干脆合并为一篇了。
继续忙于手头项目的上线,且由于节前的调休而有些匆忙,尽管假期还有很多需要加班调整的,但总算功能是完成了。因此在家的一周多也算是有些放松,陪伴了家人、见了一些朋友、换了个发色(蓝灰色),也重新整理了自己被搁置的生活。
被搁置的生活与自我
距离年中的生活变动已经过了接近半年,我一直以为自己在经历着无可避免地遗忘,但最近愈来愈频繁的梦境像是嘲弄般地提醒着我,不过是被搁置了而已,从未真正过去。
自己之前一直不怎么做梦,虽然算不上无忧无虑,但还算积极的品性也使得烦恼确实并没有在显著影响着我的生活。然而最近总是有一些真实记忆和情景通过梦境的方式重现,真实到每天早上都有些茫然,需要花越来越久的时间来排解这些低落情绪,或是任由它们滋生并蔓延到我生活的角落里。
细数一下过去的半年自己似乎并算不上一蹶不振,工作还算完成得不错,重新捡起的博客得到了一些认可并且有了还算可观的访问量;周报虽然常有摸鱼的时候,但也还算坚持下来了;作为分享欲出口的推特帐户也积攒了一些粉丝,算是一个小小的技术+日常博主,自己碎碎念的频道也慢慢充盈着丰富的内容。同时,我也看了很多之前 Mark 的书、电影、动漫和剧集,可能思想算不上有什么变化但有在培养思考的习惯。
似乎一切都有着不错的态势,但总是隐隐觉得缺少了一些什么。
我似乎总是自我保护式地避免让自己陷入极度糟糕的状态,在某些方面低落消沉时便会强迫式地将精力投入其他,像是在寻求某些方面的平衡与体面,就像是从一个客观视角审视自己的生活,过于冷静地填补着生活的空缺之处,而生活本身的意义则是被搁置了,似乎失去了其重要性与意义。
几年前写过一篇《23 岁的自白:去追寻意义》,也算是这个博客颇具意义的开篇之作。回看当时的文字,尽管在一些略带自以为是的心得体悟陈述后最终也没得出什么太深刻的道理,但多少还是有些追寻自我的傲气与建构自我的决心。
然而现在的自己似乎把自我这件事随着生活意义的缺失而一同搁置了,似乎只要能让自己不闲下来,一切都好,周报算是一种自省的渠道,却也只能解决当下的状态与心情而难以触及自我的深处。
能看到明显的颓势却无力去弥补,这种无力感并不是主观的自我麻痹与纵容,而是一种如在大海中溺水般的窒息与绝望,无法自救,更难以指望他人,看不见灯塔,只能依靠着偶然出现的浮木苟活。并不想总是留下一些消极的文字,但在这个假期却放任自己被情绪的漩涡所吞噬,几乎感受不到时间的流逝。
10 月 10 日就是当时第一次接小薯回家的日子了,躺在沙发下几个小时用猫粮吸引着她出来的时光还历历在目,第一次到怀里的欣喜也难以忘怀,临近这个日子却也只会愈加难过。
养猫大概是一件需要倾注许多心力去做好的一件事,原本更多觉得是我们在照顾猫,给她一个优渥的生活环境,到现在才发现,原来是我需要她。大概会早些考虑再养一只猫吧,等能够返京后会去之前的猫舍看看,让自己的生活多少能够增加一些期待与温存。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
设备
每隔一两年就会用手机模拟器重温一下经典 GBA 游戏,但虚拟按键玩起来总差点小时候的那种感觉。从
@Ehco1996 get 新玩具,解锁了开源掌机新世界!
火速重温宝可梦和火焰纹章系列(虽然已经通关好多遍了),快乐!
输入
书籍
- 送你一颗子弹,是我近两年看得最享受的一本书了,因为是杂文札记,通勤时看上几篇不至于有断续感。可太喜欢刘瑜的讲话风格了,生活随笔掺杂着一些政治、文化思考,好几次在地铁上快笑出声,原来文字可以把一个人怎样生活和其世界的面貌展现得如此具体而真实。另外这种文字中的真实和对自己的戏谑也是我所向往的状态,希望多年后看自己的文字也能或多或少有这样的惊喜感。
- 悉达多,很短的一本小书,两个小时的航程途中看完的,可能因为物理上隔绝了外部干扰,莫名宁静。讲述的是印度宗教哲学,是一种对人的自我纯净与宁静部分的追寻。听一位朋友讲说有过觉得一切都无意义的阶段,封闭且痛苦,自己也常有,就突然想到了悉达多。一个完整的人需要经历悉达多的一生,从反抗世间的一切、拒绝庸碌,到克己、压制欲望、自我逃避与安慰,再到开始认识、学习并推翻自己,自我矛盾,最后到依然遵循自我,却能够理解与同情世人和他们的生活方式。于我而言最深刻的点就是从一个完整的一生的维度告诫了自己人生无法通过遵循规律或是模仿、追随他人来找到自我,只有不断思考与找寻才能真正理解自己与生活,并不是说一定所有事都需要亲历,只是至少更应该探究与体验而非索取。强烈推荐看 B 站宝藏 up “天真的和感伤的小说家”的评析视频。
- 小于一,回家整理书架发现几年前读过,但记忆已经有些模糊了,补标一下,之后有空重读一下。当时真爱纸质书啊。
电影
- 子弹列车,有点《两杆大烟枪》的即视感,镜头切换和霓虹灯旁白设定还挺印象深刻,可惜最后收尾和背景解释有些仓促。
- 海边的曼彻斯特,可能并不是一部适合在我本身情绪低迷时候看的电影,还是静静看完了。悔恨、感情、亲情、一个人的孤独感,称不上感同身受但有在好好体会。
- 新·奥特曼,没想到现在还能看一部奥特曼电影,还是熟悉的感觉。
剧集
- 终极名单/The Terminal List,看到推荐,刚看了个开头。
- 石子和羽男-这种事情也好告吗?,已经完结了,但一直还看完,前段时间看到竹棘的剪辑,于是想着把后面的部分看了。
- 龙之家族 第一季,看到中间了觉得倒是还行,想着干脆追完吧。
- 瑞克和莫蒂 第六季,可能因为前几季连着看完有些匆忙,追这一季慢慢看能发现更多细节。
动漫
- 夏日重现,陪我度过了这半年,设定、节奏和剧情都很舒服,结局我圆满了,果然谁不爱甜甜的恋爱呢。
- 继母的拖油瓶是我的前女友,抛去设定,中后期更像恋爱日常番,倒是也有点甜。
游戏
- 火焰纹章:烈火之剑,最近闲鱼收了一个开源掌机,可以静下心补一下之前心心念的火焰纹章系列,当时太小,没能太体会战棋策略类的乐趣,也算是有些遗憾。
周报 #13 - 忙里偷闲的乐趣
前言
本篇是对 2022-09-19
到 2022-09-26
这周生活的记录与思考。
这一周异常忙碌,有好几天都很晚才到家,但是神奇的是倒是只有在这样的时候才似乎更有动力做更多,看完了一本书,补了好多电影和剧集,还完成了不少大大小小的事,其余倒是没有太多事发生,以至于周报都有些拖沓。
忙里偷闲的乐趣
今天刷推时偶尔看到象牙山刘能和云风的一段对话,觉得很有意思:
象牙山刘能:平时上班干活的时候总想着做 side project,真到了周末只想打游戏看剧...
云风:不如上班永远做 side project ,周末工作。这样就不会打游戏看剧了,因为周末再不做,就真的什么工作都没做了。这样做还有一个好处:如果你的工作和同事是相互依赖的,那么这样没有并行,所以永远不会产生冲突。你还可以充分考虑产品多变的需求后才开始动手。
网友:这个想法的侧面是,工作两天就能做完
云风:一个长期工程的实际有效工作量远小于 2/5 吧。如果实在做不完,可以适当延长周末工作时间。另外,每周有长达五天时间去自习估算这个工作量,一般不会错了。所以,这个方法实质上指:多想少做。
象牙山刘能:多想少做这点确实是的,经常拖得越久做起来就越顺利。不过只在周末做正经工作这个难度有点高,我还以为你在讲段子哈哈。而且应该很多人都不适合,比如说我如果工作都推到周末估计会因为压力太大直接摆烂😳
云风:一半是段子 :) 不过我这些年不少关键工作的确是周末/法定假日做的。
仔细回想,自己似乎总是有这样的倾向,大二备考专四和软考时,尽管复习时间已经十分紧张了,却好像拿这段时间来学了很多无关(但也不至于无用)的东西,能够感受到挤压出来的时间尤其珍贵,做什么事都有额外的乐趣。
在忙到爆炸争分夺秒时,常常会有这样的念头,“原来我这短短的一周能够完成那么多事,那等我考完/假期/闲下来,有了大把能够支配的时间,那一定能学完/做完 xxx”。但其实当那个节点真正来到时,反而开始“摆烂”了。
仔细想想自己的大部分额外的技能或是学习的东西都是“不务正业”时完成的,甚至在很久后的现在都还受益良多,而真正那些正经任务却经常是积累到 deadline 的最后时刻完成的,似乎也有不错的结果,这不禁让我困惑时间与效率之间的相关性以及心态对自己做一件事动力的影响。
每个人对于任务安排与时间管理的模式各不相同,我可能是个效率控,但绝对不是一个对于时间安排极度细致的人。某种程度上我享受于一种并不有序却又能恰好完成所有事的一种随意感,这让我觉得自己不是在被任务清单上一个个条目所奴役,而是在支配着自己的时间。作为这种模式产生的副作用,我常常会有不得不“力挽狂澜”的时候,久而久之倒是心态也变得更稳了,或者说对于自己解决问题的能力有了一些衡量标准与累积的信心。
另外,惯性与乐趣也在其中扮演了重要角色。
这在五六月我被疫情封锁在家中,接近 50 天未出门的那一段经历中表现得尤其明显。那段时间因为自己的精神状态也并不好,一心投入了工作中,在很多会议或是任务项的间隙,却一直在学很多额外的部分,同时也重新开始写博客记录,似乎自己要在极其有限的时间里消耗完全部精力,而现在依然从那一段时间的很多积累、决定和培养的习惯中获益。而到了七八月项目结束略空闲的时期,尽管还是有在按照计划做一些事,却很难找到当时的沉浸感。
后来发现这取决于如何看待这些事,在工作忙碌时的学习或是放松是一种额外的状态出口,能够从繁重而重复的日常中脱离,当然也更容易感受到乐趣所在,而且这时并不需要太多状态调整或是筹备的前期步骤,依靠工作状态的惯性也更容易切换。而到了真正可以支配的自由时间时,我们却不得不将其看待为任务项,需要为其安排出时间并将自己从休息或是娱乐的状态中切换回来,成本更高,阻力也更多。
所以之后在工作日回家的可能并不那么完整的时间里,也会尽量安排一些 side project 或是学习的部分,而周末则希望更完整用来外出或是书籍、电影、剧集或是游戏这样的输入活动,更好将自己的状态作一些切分似乎也是不错的方式,会尝试探索一下。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 法治的细节,之前看过一些罗翔老师的视频,也读过他的一本《圆圈正义》,我觉得与其说“清醒”,我更觉得罗老师只是保持了对于一切的“敬畏”与“谦卑”,在此之上,尽管觉得自己永远做不到,无法画出一个完美的圆,但始终在追寻。受益很多。读经典的这一部分读得很吃力,重看了几遍还是没办法消化,“自由、平等与博爱”那么大的主题却能那么娓娓道来,果然还是需要更多积累吧。
- 送你一颗子弹,正在看,太喜欢刘瑜的讲话风格了。
播客
- Fork It - #22 - PoW vs PoS,随着 “The Merge”的发生,这个话题又变得热门起来,一期很好的概念梳理探究,值得反复听和记笔记。
- Fork It - #23 - PoS 是谎言么?,前后花了三天的通勤才完整听完,有几个概念解释不断回退反复听,还是发现了很多理解上的漏洞,打算看看 BTC Study 补补了。
- 科技乱炖:你被羊了个羊骗了么?,最近挺现象级的一个游戏,但自己又没什么兴趣,通过主播们的这期了解一下,很短,但作为科普话题也还算有意思。
电影
- 春天不是读书天,刚开始看还觉得男主有些太跳了,后面慢慢发现这才是不设限的生活方式,太快乐了。和《早餐俱乐部》连着看,感觉内心的叛逆都被唤醒了。
- 鹬,最近加班加到有点心累,想起了一些一直躺在列表里的动画短片,莫名好治愈。
- 达拉斯买家俱乐部,片子里对于绝望与窒息感的刻画太细了,耳鸣的音效和逼仄的画面,代入感极强。看到了一个 cowboy 的生活态度,好像厌倦一切却真真切切地热爱着人生,似乎漠不关心他人却又愿意付诸真心,太酷了。另外,虽然没什么爱情戏,但后半段和女主的几次眼神和神态交流也真的很够回味许久的,好配。
- 花样年华,一次次重复的走过巷子与擦肩的镜头描写,点到为止的情欲和欲言又止的情愫,原来爱是真的能从眉眼间滋生和蔓延的。能感受到其魅却又不至于艳俗,拿捏得刚好,可能这也是香港和那个时代特有的气质了。另外,真的很喜欢这部的英文片名,In the mood for love,太美了。
- 爱乐之城,说来有意思,爱乐之城组曲的现场音乐会都去了两次,电影却才第一次真正看完。遥远的 16 年,刚上映的那个情人节订了电影票却因故错过,后来也一直没补上。最近听朋友提到,就分了两个夜晚看完了,也才真正感受到那曲《City Of Stars》的韵味,一曲便走完了想象中的一生。
- 卡萨布兰卡,看《爱乐之城》的时候女主提到小时候看了这部电影反复模仿,也在之前自己的列表里所以就翻出来看了下。不得不说那个年代的片子还是经典,不需要太多拖沓的剧情,对话就已经足够展现大多数主题了,最后机场的那场三个人的对话,关于革命、民族与爱情,寥寥几句就把各自性格和对应的选择呈现得很具象,特有的魅力了。
- 敦刻尔克,没有什么宏大的战争场面,只是海滩上战争的狼藉、海上义无反顾的小船和天空中战斗机的周旋几个场景不断切换,形成了一种异样的美感。最后燃烧的飞机和驶在国土上的火车的对比,隐于发言稿之下战争的代价让人心痛。
- Nope 不,大概分三次才看完,叙事确实有些乱,看了一半还是有些不明所以,可能缺少渲染,剧情推动上如果是那个导演可能还合理一点(但是很轻描淡写),只是那对兄妹做这些事的动机实在不足(可能是什么奇妙的家族骄傲),以至于到了最后也没能很理解。
剧集
- 人生切割术,前段时间风评不错的剧,整体风格节奏很喜欢,尤其是片头,太惊艳了。故事设定上蛮新的,对一种扭曲的“Work Life Balance”科技的反叛,但可能是因为第一季的戛然而止,总感觉有些动机不足,期待后续发展了。
- 真相捕捉,同类型里的最经典还是《疑犯追踪》,但英剧特有的紧凑节奏感也很适合这样的叙事方式,感觉第一季可能都是几年前看的了,衔接剧情上也没什么问题,看了一半左右大概就能猜到结局,但真正最后反转的大型 show 上演时还是燃起来了,只能说不愧是 BBC 剧里的 BBC,很强。
动漫
- 红辣椒,补一下今敏的作品,原本主要是想看看分镜和转场,发现真的藏了好多隐喻和想象力的部分,也可以理解之后那么多的致敬今敏的一些由来了。
- 夏日重现,追番中,要结局了,潮也太好了。
周报 #12 - 赛博空间、自我定义与界限
前言
本篇是对 2022-09-13
到 2022-09-18
这周生活的记录与思考。
过去这一周有些忙碌,在几个项目中反复徘徊,所以也没能有很多输入。周末要加班但不想一直窝在家里,所以外出了,意外发现了一家挺不错的咖啡厅,度过了惬意的一天。
赛博空间
之前从 Reorx 的这一篇『使用自动化工作流聚合信息摄入和输出』了解到了“赛博空间” 这一概念,原话是:
赛博空间构成了我的精神世界。
很难不赞同这一描述。
不知道从什么时候起,自己其实能很明显感受到自己对网络世界信息的依赖。可能有别于游戏瘾或是经常被诟病的短视频算法鸦片,我的这种依赖并不是机械性地刷刷刷,或是面对焦虑时的逃避,而是一种对于信息获取的渴求,甚至内化为了一种生活方式。
依赖于网络世界其实最难免的是与社交媒体与算法的抗争,一方面是要避免自己被过载的贩卖焦虑的信息或是熟人社交圈的“Peer Pressure”所困扰,另一方面也需要警惕算法所构造的信息茧房。
实话说这一点挺难做到,即使自己多少算是具备一些克制和过滤信息的能力并有意识在这样做,但依然难以避免被其所扰乱思绪或是引导。我最后采取了一种简单却也行之有效的方式 —— 关闭微信朋友圈入口与大部分软件通知提醒。
大概是从大三的一个晚上我关闭了朋友圈的入口,具体的情境与动机已经有些模糊,但这一偶然之举也奇迹般成为了一个我坚持至今的习惯。想说的是,这并不意味着我不再关注朋友或是周围人的动态,在关闭朋友圈之后,常常在阶段性想起一些人的时候会点进他们的头像去看看近况,也许会就一些内容开启一次对话。
也许听起来有些多余,比起一个即时的小红点提醒,我们需要经历“想起某个具体的人/事 -> 找到对话框 -> 点进头像 -> 查看朋友圈 -> 了解近况”这样繁琐的过程。但于我而言,如同一种仪式感的隐喻,这种刻意制造的麻烦不断提醒着我维护一段关系所需要付出的部分,渐渐地,朋友越来越少,但留存的人也愈加重要。
而近两年也做了一些另外的改变,关闭了除了即时通讯软件(微信、Telegram)和邮件以外的所有软件消息提醒,并且把大部分不带社交属性而仅仅是用于信息获取的平台(如 B 站、微博等)的关注数量控制在 100 以内,如果新增则筛选优化之前的关注,减少无关内容的干扰。
我的信息流
通过这一篇『使用自动化工作流聚合信息摄入和输出』和后续的『使用 Railway 和 Supabase 零成本搭建 n8n 自动化平台』迭代升级,我也通过 n8n 和 Telegram 搭建了自己的自动化信息流平台 —— 『Yu's Life』,
参照着 Reorx 的列表,我也整理了自己的输入输出源:
- Telegram,采集我零散在各个平台的信息输入输出,并且最近还会将我对电影、书籍的观后感以及自己其他一些所思所想发在频道里。也关注了一些频道和群组获取一些资讯或是认识一些志同道合的人,偶尔会手动转发。
- Blog,目前最用心在维护的输出渠道了,现在更像是一种生活日志。
- Twitter,我目前主要在使用的社交平台,也是分享欲的载体,认识和关注了很多有意思的朋友。
- Instagram,最近才打算恢复使用,主要想分享一下自己的摄影成果和一些日常生活。
- YouTube,也是重度用户了,看技术相关教程和数码资讯比较多,偶尔也有很多好玩的内容。
- Bilibili,主要保留了自己这么多年一直在关注的一些博主,看旅拍比较多,只看动态不看首页和热门,之前倒是有自己经营帐号的计划,暂时没有什么好的想法。
- Pinboard,书签和网站保存管理工具,才开始用几个月就保存了很多重要的内容,重度依赖了。
- Instapaper,管理稍后读,主要是一些精品或是长文的保存。
- GitHub,也是日常刷了,看一些好的项目,也用列表在管理 Star。
- Apple Music,日常听歌软件(毕竟全家桶还是方便),但是列表这些交互感觉很一般。
- YouTube Music,订阅了 YouTube 会员所以附带了这个,用得不算多,但偶尔用于检索。
- Spotify,在上述两个音乐软件听到的好歌会在 Spotify 标注一下并且自动同步到频道。
- 豆瓣,记录自己的书籍、剧集、电影、动漫和游戏,也是重度使用了,也在尝试每一个看过/玩过的作品都写一下自己的评价。
- 微博,很少发,也依然是保留了一些熟人关注,偶尔会同步分享一些动态吧但是没有太多动力。
- 微信朋友圈,摄影以及一些自己写得比较开心的文章会发,基本是偶尔证明自己还活着的频率。
自己就像是有一种信息整理的强迫症,在看到自己这些零散的数字痕迹被归集到自己的个人小空间时会感到由衷的快乐,写周报时候往回翻翻也能捡起不少有意思的点,希望之后也能积累越来越多的东西。
自我定义与界限
这周末可能有点叛逆,看了两部青少年电影,《早餐俱乐部》和《春天不是读书天》,都是很老的片子了。主题上跟自己看了好几遍的《死亡诗社》一样,有对于自己个性的坚持、对权威的认知与反抗、对生活与未来可能性界限的冲击,但相比起来可能更加轻松与诙谐。
随着经历见长,自己可能在面对生活与变动已经不算怯懦,也常常踏出一些不一样的选择,但即使到了现在我依然觉得自己还是一个被内心界限所定义的人,以及会用这样的方式与习惯去定义周遭的一切。
我不认为自己是有很强“创造力”的人,所以常常在遇到相关事情或是选择时本能逃避;我认为“友善”和“礼貌”是自己的标签所以常常在一些交流中不愿意破坏,“理性”和应有的“坚持”常常为之让步;我可能愿意为自己的一些看似疯狂的选择负责但其实已经在内心评估过其代价与是否能承受,所以其实也缺少真正“冒险”的勇气。
在亲情、友谊与亲密关系上其实也是如此,我似乎在内心为每段关系下了自己的一些定义,并自认为遵守着其中的界限,但其实情感并非如此分明,自己有意无意地忽略了这一点,却还觉得自己在维系着这样的平衡。
本周自己与身边的一些关系发生了微妙的变化,自己的第一感是无所适从,就像是面对变化的本能的恐惧,在克服之余却也很难马上梳理清楚自己的情绪与想法,可能这种状态可以称之为“情绪过载”吧。自己在这样反复的过程中也常常会思考着是不是自己一直太执着于界限本身而放弃了感受情绪和情感的真实变化,抑或是界限本就是一种自我保护的机制。
好难。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 送你一颗子弹,正在看
- 法治的细节,正在看
剧集
- 医院五日,讲美国卡特里娜飓风时候的一些事,难免不让人联想到武汉疫情当时的一些事。就医学伦理或是法律相关的知识储备都不足以让我来评价紧急情况下安乐死的正当与否,只是在其中也确实看到了政治家的傲慢、人性的真实与小人物在其中的卑微。就像其中所说的,没有亲历常常也是没有资格去居高临下评判其对错的。
电影
- 早餐俱乐部,可能老片的年代感和主题上会让我稍稍想起《死亡诗社》,但是更轻松有趣,学生的视角、一个有限的空间场景和足量的对话这样结合的表达方式会让人很容易代入,叛逆与对权威(家庭、校园)的本能畏惧展现得很自然,而最后的集体独白也令人会心一笑 — 一群并不愿意被定义的青少年。
动漫
- 赛博朋克:边缘行者,剧情比较常规,画风也算不上喜欢,但有些造型和场景美术还可以。可能因为没玩过游戏本体,对其中世界观和人物的部分没有太多代入。算是中规中矩的游戏周边动画吧。
- 夏日重现,追番中
周报 #11 - 心情、旅行与不期而遇
前言
本篇是对 2022-09-05
到 2022-09-12
这周生活的记录与思考。
过去的这一周不论是周中还是中秋假期都还挺丰富的,工作渐渐变得忙碌但也有趣;日常也有了一些变化,不至于那么乏味和碌碌;也会在即使只有短短几十分钟的车程里习惯性地拿出 Kindle 翻上几页,很快便沉浸其中;出门也变得更多了,即使只是毫无目的地在街上走走。
大概一切都有在变好。
心情
虽说平时话并不多,但自己大体上还是个挺情绪化的人,会因为一些突然闯入的心绪伤感,因为一部电影的结局而发呆许久,也会因为一些生活中的小小细节而感到莫名地欢喜。
我并不是一个对生活那么乐观的人,现在依旧觉得生活中的不幸远远多过幸运,在遭受痛苦时常常觉得自己理应承担这些。过去一两年经历了很多痛苦的事,有的是天灾人祸,遗憾而不甘;有的是自作自受,自责而悔恨。幸而有这样几位挚友,可能并不一定在身边,但过去的那些共同度过的惬意时光常常像是冬日暖阳般照亮我的至暗时刻。
但有时候也需要踏出自己的角落,走在阳光下。
今天早上起来晚了一点 出来上班的时候天已经挺晴的了 不过气温还好 有点风 在一边听歌(五月天的温柔) 突然感觉心情很好很好 已经很久很久没有那么放松 从心底比较愉悦的这种感受了
我很庆幸能有这样的时刻,哪怕只是很短暂的情绪,也让我感受到自己与内心的某些部分和解了,连带着周遭的时空。
旅行
自己应该算不上一个旅游爱好者,之前有闲暇的时光大多宅在家里打发了,想到要计划各种出行琐事,兴致早已减了大半,更别说还要忍受热门景区的拥挤和吵闹了。
买了相机后,开始有了一些出门的念想,在实习和工作之余也常常随身带着相机出去转转,不知不觉走过了很多城市,拍下了很多记忆。后来看了『小鹿 Lawrence』的旅拍视频后,在自己的出行清单里列了一条又一条,可始终未能兑现。
8 月本来有去青岛旅行的计划,但因为工作和一些细碎的事未能成行(可能更多也是因为懒),而后疫情又开始各地蔓延,只能一拖再拖。所以当中秋第二天突然得知要去青岛出差时,欣喜的情绪甚至盖过了突发工作任务的压力。
定了第二天一早的票,一边补眠一边看着沿途的风景。抵达后很幸运遇上了一位本地的出租车司机,攀谈几句后突发奇想地决定改行程,让他带着我绕着海边转一圈,一路走走停停,遇到不错的风景就下来吹吹海风,顺带着拍几张照。
这一个小时的旅程似乎是一个青岛旅游的缩印版本,没有看什么攻略,没有在几个景点之间奔波。有的景错过也就错过了,没有多少遗憾;而有的心绪感受到了,却会成为记忆中很美好的一部分,在许久之后也值得会心一笑。
因为只带了一只轻便的 55mm F1.8,却因为时间关系只能拍远景,所以匆匆几下快门的结果并不那么满意,但至少留下了一些记忆点,也勉强串了一个主题《海边的人们》。
不期而遇
其实之前和挚友去泰国也是一样,比起曼谷的繁荣热闹,我们在清迈逗留了更久,有时候只是走在街道找一些不起眼的美食,或是跟着 Pokémon Go 的活动探索着城市的另一面。
愈加觉得对于自己而言,旅行的重点早已不是那些“十佳”、“必去”和“绝美”的景色,而是旅途中的心绪感受,以及陪伴着走过的时光。在这样的心境下,所有的不期而遇反而更加美好。
看了小鹿最新一期视频 —— 《不做攻略的旅行有多绝望...》,可能,下一站会是云南吧。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
工作
这周工作上做了一些和链交互的开发,还挺有意思的,后面也想再研究一下链上数据处理这一块。也开始要写一些生产级的智能合约了,工作任务挺多的,十一前也得上线两个我负责的新模块,需要加油了。
博客
很意外的是自己写的一篇『PostgreSQL 基础与实践』得到了很多关注和反馈,后面也还会继续写工作实践系列了,目前完成了:
其他的就是还蹭了个 Go 的热点,给 GoCN 首发翻译了一篇文章:
还有很多想写的主题,后面不能再偷懒了。
输入
书籍
- 黑客与画家,通勤路上在读的,原本以为像是软技能那样的比较实际的一些内容,是当作路途消遣来看的,但是出乎意料地很多想法挺有趣,文风也很舒服。一直觉得代码、绘画或是写作都是创作的不同形式,都能让人感受到创造的快乐,但少有书籍能将这部分那么自然地表达出来。
- 送你一颗子弹,正在看
- 法治的细节,正在看
电影
- 蓝色大门,之前对台湾电影最深的印象应该就是《阳光普照》了,许多对话、独白和长镜头,很多景就像是想把记忆碎片拍下来。假期补了这部《蓝色大门》,早期青春片的质感真的很绝,诠释了“唯美”这一后续被滥用的形容。陈柏霖的《我可能不会爱你》影响了我青春的很多部分,甚至有些想法和品性深入了我的人格本身,对他的印象也多是沉稳而温暖,是自己想成为的样子。在这部看到了一个相似却不一样的他,很喜欢的一点是他总是认真而坚定地重复着自己的话,不论是自我介绍还是带着愠怒的质问,似乎在和自己确认着什么,又带着一些青春特有的胆怯。最后一段独白也很戳,终于找到了之前喜欢的这句话的出处 — “虽然,我闭着眼睛也看不见自己, 但是我却可以看见你。”
- 驴得水,又是一部群像的电影,刚好是我最近最喜欢的叙述方式。不知道该归咎于时代还是人性,混乱与可笑的政治正确的秩序交织着影响着事情的各种走向。政治、爱情、女性,包罗了太多主题,却不至于让人感觉到故事的剥离感,喜剧和幽默的部分自一开始就没打算掩盖其悲剧的内核,以至于到了结局虽然有些难过,但更多的还是无力。
动漫
- 夏日重现,追番中
- 继母的拖油瓶是我的前女友,追番中
摄影
目前一直在用的是 Sony A7M3,主要看中的是视频性能,也买了大疆稳定器来拍一些视频,但就没法兼顾拍照了。想着之后旅游再有一台设备来进行街拍,对 Fuji Xpro3 有点心动,尤其是光学取景和胶片模拟,太有仪式感了。
不过还是先多出门多拍,再更新设备吧。
Docker 基础与实践
前言
这是工作实践系列容器部分的第一篇,主要介绍 Docker 的基础知识与实践。
作为一个后端开发,我刚开始工作的时候其实主要都是在本地调试的,并没有怎么了解过 Docker 的相关使用。直到后来开始接触较为复杂的底层链开发,因为链或其相关工具的依赖关系比较复杂,也涉及很多版本冲突问题,在本机或服务器上每次需要配置复杂的环境,且每次重启后很多服务与配置都需要重新部署,繁琐且容易出现一些莫名的跨平台错误。
因此逐渐开始采用编写项目特定 Dockerfile 并编译镜像的方式进行后续的开发调试,部署的机器仅需安装 Docker 环境(以及 Docker Compose),而不需要本地安装各种依赖,很便捷。后续也和 Leader 一起基于 Docker 镜像、GitLab CI 与 k8s 环境配置了项目的 CI/CD 流程,极大提升了开发调试效率。
本文将基于这些经验对 Docker 相关的概念与实践进行总结,希望能有所帮助。
Docker 简介
我们所开发的服务往往以二进制的方式运行在操作系统中,而 Docker 是一种容器技术,将我们的应用程序及相关依赖打包在一个容器中,容器往往是基于一个较为轻量级的 Linux 镜像,是多层镜像的堆叠,我们的应用往往在最上层,这些依赖关系在 Dockerfile 中进行指定。
使用容器进行部署比起在本机或远程服务器有很多明显的优势。
- 无需在操作系统上安装各类环境和依赖(除了 Docker 自身)。如果采用原有的服务启动模式,开发流程会变得十分繁琐,需要开发与运维不断沟通,配合完成环境配置与部署,并且如果一台机器上部署了多个服务,也极易造成依赖/版本冲突问题。
- 可以拥有独立的部署环境。我们通过为不同的项目编写 Dockerfile 来构建镜像,将应用所需环境与依赖打包在镜像中,可以很方便地运行同个应用的不同版本,或为 MySQL 这样的通用服务运行多个实例,并且可以通过 Docker 命令或 Docker Compose 命令进行管理,一键启动/暂停。
- Docker 并不强依赖于操作系统本身的版本,同一个 Docker 镜像可以在不同的操作系统(Windows、macOS、不同发行版的 Linux)上运行,易于服务的分享、迁移与跨平台部署等。
- 与虚拟机相比,Docker 容器没有内核而只包含应用层,体积更小,启动速度更快,更加轻量级。
当然,Docker 容器的兼容性相比操作系统与虚拟机相对更差一些,如 VM 能够运行任意其他操作系统,能满足更特定的一些需求。
Docker 基础操作
安装 Docker
Docker 的安装很简单,在官网下载自己操作系统对应的安装包并按照指引进行安装即可。
macOS
我个人的 macOS 系统起初是安装了 Docker Desktop,可以通过图形化界面对镜像、容器进行管理,很方便但是占用较高,比较耗电。
后来尝试了 Colima,一个较为轻量级的容器运行环境,在 macOS 系统上本机调试十分方便,推荐使用,根据项目官方文档安装并配置环境即可。我直接通过 brew
包管理工具来进行安装:
brew install colima
安装完成后运行 colima start
即可启动容器,运行 colima stop
停止容器,更多命令可以通过 colima --help
查看。
我通过了如下命令启动了自己的常用开发环境,大家可以根据自己的需求自行配置:
colima start -c 8 -m 16 -a x86_64 -p docker-amd
CentOS
比起本机开发,Docker 更常用的应用场景是在服务器上部署应用,我常用的操作系统是 CentOS 7
,可以通过 yum
包管理工具安装:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
安装完成后,启动 Docker 服务并配置其开机自启:
systemctl enable docker
systemctl start docker
Docker 镜像
Docker 主要有镜像和容器两个概念,可以认为镜像是通过 Dockerfile 编译出来的容器的一个模板,而容器是镜像的一个实例。
Dockerfile
我们通过 Dockerfile 来指定应用所需环境与依赖,其基本格式如下:
FROM <image>
ENV USERNAME=admin \
PASSWORD=123456
RUN mkdir -p <app-directory>
COPY . /<app-directory>
CMD ["<command>", "<entrypoint file>"]
完成 Dockerfile 编写后,我们可以在同级目录(或指定 Dockerfile)下通过 docker build
命令来构建镜像:
# 镜像构建
docker build -t <image:tag> .
存储、加载镜像
我们可以把本地编译好的镜像存储为 tar
包来进行分享:
docker save -o <image-name>.tar <image-name>
当需要使用镜像时则可以通过 docker load
命令来加载 tar 包:
docker load -i <image-name>.tar
上传、拉取镜像
当然,通过镜像 tar
包的方式来进行分享并不那么便捷,有的镜像可能会很大,传输也不方便。因此,我们可以通过 docker push
命令来将镜像推送至官方镜像仓库或企业/个人的私有库(像我所在的项目就是通过 Harbor 来管理镜像),并通过 docker pull
命令来进行拉取。
# 拉取官方镜像(简写)
docker pull <image:tag>
# 拉取官方镜像(完整命令)
docker pull docker.io/library/<image:tag>
# 推送镜像至官方镜像仓库 Docker Hub
docker push <image:tag>
# 推送镜像至私有库(需要配置鉴权)
docker tag <image:tag> <private-repo-path>/<image:tag>
docker push <private-repo-path>/<image:tag>
Docker 镜像操作
针对 Docker 镜像,我常用到的操作就是查看、删除与重命名 tag,更多命令可以通过 docker image --help
或官网查看。
# 查看所有镜像
docker images
# 删除镜像
docker rmi <image:tag>
# 重命名镜像
docker tag <old-image:tag> <new-image:tag>
容器操作
查看容器
当我们通过 Docker 或 Docker Compose 命令启动镜像后,可以通过以下命令查看服务状态:
# 查看运行中容器
docker ps
# 查看所有容器
docker ps -a
通过镜像启动/停止实例
当我们通过 Dockerfile 编译好了所需镜像后,可以通过 docker run
命令启动镜像实例,并在命令中加入一些配置来满足我们的服务需求,我的常用操作如下:
# 运行容器
docker run <image:tag>
# 运行容器并指定名称
docker run --name <server-name> <image:tag>
# 以 detached 模式运行容器
docker run -d <image:tag>
# 端口映射
docker run -p6000:6379 <image:tag>
# 配置环境变量
docker run -e USERNAME=admin -e PASSWORD=123456 <image:tag>
启动/停止容器服务
当我们通过镜像创建实例后,可以通过如下命令来启动/停止容器服务:
# 启动/重启容器
docker start <container-id>
# 暂停容器
docker stop <container-id>
查看日志
当我们的通过 Docker 启动服务后,还常常需要查看其运行日志以便于调试,可以通过 docker logs
进行查看,具体命令如下:
# 查看日志
docker logs <container-id>
# 滚动查看日志
docker logs -f <container-id>
进入容器
有时我们还需要进入 Docker 容器服务内部进行服务查看与调试,可以通过 docker exec
命令进入容器,具体命令如下:
# 根据 id 进入特定容器
docker exec -it <container-id> <command>
Docker 网络
Docker 容器实例运行于网络中,我们上文的各个命令未指定网络,所以服务会运行在默认网络下,我们可以通过以下命令来查看网络:
# 查看所有网络
docker network ls
如果不想运行在默认网络中,我们可以通过如下命令创建自定义网络:
# 创建自定义网络
docker network create <network-name>
创建了我们的自定义网络后,在创建容器实例时我们可以通过 --network
参数来指定网络:
docker run --network <network-name> <image:tag>
Docker 数据持久化
使用 Docker 实例运行服务后,我们的数据会保存在容器中,当容器被删除后,数据也会被删除,对于一些需要长期运行的服务来说会造成数据丢失。因此,我们需要进行数据的持久化,我常用 host 挂载与 container 挂载两种方式。
我们可以通过将宿主机的某个具体的目录挂载映射至容器内的目录来实现持久化:
# 通过宿主机目录挂载容器内目录
docker run -v <host-file-path>:<container-file-path> <image:tag>
也可以通过 container 挂载的方式,使用 volume 来实现持久化:
# 可以通过名字来引用 volume
# Docker 会自动生成一个路径
# Windows: C:\ProgramData\docker\volumes
# Linux: /var/lib/docker/volumes
# macOS: /var/lib/docker/volumes
docker run -v <volume-name>:<container-file-path> <image:tag>
如果只是需要挂载,不需要对文件进行具体的管理查看等,我们也可以通过 container 匿名挂载的方式,不指定 volume 名称,而使用其自动生成的目录:
# Docker 会自动生成一个路径
# Windows: C:\ProgramData\docker\volumes
# Linux: /var/lib/docker/volumes
# macOS: /var/lib/docker/volumes
docker run -v <container-file-path> <image:tag>
Docker Compose
Docker 提供了丰富的命令供我们使用,但是使用命令行操作不易于记忆,且如果应用依赖多个环境/服务,则需要分别运行与管理多个容器,造成不便。因此,我们可以通过 Docker Compose 工具来进行管理。
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,其通过 .yaml
文件来进行配置管理。我在日常工作中使用最高频率的也是 Docker Compose,只有一些很简单的应用才会使用 docker run
命令来启动,也便于统一管理和后续的配置调整。
安装
macOS 系统如果安装了 Docker Desktop 则已经自带了 Docker Compose,可以直接使用。如果是 Linux 系统则需要单独安装,我这里同样以 CentOS 7
为例:
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
完成安装后就可以使用 docker-compose
命令了。
配置管理
Docker Compose 的配置文件是一个 yaml
文件,其基本格式如下:
version: '3'
services:
contrainer-1:
image: <image-name>
ports:
- <host>:<container>
volumes:
- <host-file-path>:<container-file-path>
environment:
<ENV-KEY>=<ENV-VALUE>
contrainer-2:
image: <image-name>
ports:
- <host>:<container>
volumes:
- <volume-name-1>:<container-file-path>
environment:
<ENV-KEY>=<ENV-VALUE>
volumes:
volume-name-1:
driver: local
其大部分配置都很直观,如服务名称、镜像名称、端口映射、文件挂载、环境变量等。
其中,version
表示配置文件的版本,services
表示服务列表,volumes
表示挂载的卷列表。
在具体的 services
中,image
表示镜像名称,ports
表示端口映射,volumes
表示文件挂载,environment
表示环境变量,更多配置可以根据项目需要进行查看。
常用命令
启动/停止服务
跟 docker run
命令类似,Docker Compose 也提供了 up
和 down
命令来启动和停止服务。
# 启动服务
docker-compose -f <name>.yaml up
# 以 detached 模式启动服务
docker-compose -f <name>.yaml up -d
# 停止服务
docker-compose -f <name>.yaml down
查看日志
我们可以通过 logs
命令来查看服务的日志。
# 查看日志
docker-compose logs <container-id>
# 滚动查看日志
docker-compose logs -f <container-id>
实用操作命令
除了以上基础命令外,我常用的还有以下几个常用命令。
清除无用容器
当我们因配置或程序运行时调用出错而导致容器实例退出时,其依然会保留,可以通过 docker ps -a
命令来查看,我们可以通过以下组合命令进行清理:
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
批量导入本地镜像
当我们需要将大量本地镜像导入机器时,如果一个个导入会非常麻烦,我们可以将镜像放入同一个目录并通过以下命令进行批量导入:
for i in `ls`; do docker load < $i ; done
总结
以上就是我对 Docker 容器技术的基础知识与实用操作的讲解,希望对你有所帮助。其实 Docker 的内容还有很多,如在上一个项目中尝试用到 Docker 的 Buildkit
特性,极大减小了最终构建镜像的大小,以及使用到 buildx
来实现跨平台兼容等等,本文旨在讲解基础知识与实践中常用的命令,这些拓展部分如果大家感兴趣的话后续再进行更新。
参考资料
PostgreSQL 基础与实践
前言
最近想着把工作中常用到的技术点与工具做一些整理总结,一方面梳理一下这些知识点,加深使用记忆,也可以作为之后使用的查阅。
目前主要计划了数据库相关、CI/CD 相关(GitHub Actions + GitLab CI)、容器相关(Docker + k8s)、运维相关(Ansible 等)这几个核心介绍,以及一些像是语言特性、Git 实用技巧、Shell 脚本等技巧总结。因为有很多内容工作中只是接触到,自己做了一些拓展学习,所以不一定完全符合企业具体实践(大多为自己的经验与理解),希望能有所帮助。
本篇是数据库系列的 PostgreSQL 部分,关于 MySQL 之前已经梳理过,可以进行查阅 —— 『MySQL 基础与实践』。
数据与数据库概述
数据
首先,数据其实本质上是一种事实或者观察到的结果,是对客观事务的逻辑上的归纳总结,是信息的一种表现形式和载体。人们从很早的时候就开始管理数据(即使还没有这个概念),最初是由人工管理,而后来渐渐有了文件系统(就像图书馆一样,分门别类地管理不同信息),而随着计算机技术的发展,最后形成了用数据库进行管理的这种较为便捷高效的模式。
数据库
数据库是按照一定的数据结构来组织、存储和管理数据的一个仓库,主要特征为
- 结构化
- 可共享
- 冗余度小
- 独立性高
- 易于拓展
很好理解的是,按照不同关系/结构组织起来的数据具备不同的特征,同时也适用于不同的应用场景,目前主要分为层次数据库、网状数据库和关系数据库三种,而我们要着重介绍的 Postgres 就是关系数据库。
数据库管理系统(DBMS)
数据库管理系统(DBMS)是对数据库进行各种操作的一个系统,一具有建立和维护数据库、对数据的存储进行组织管理、对数据库进行控制、定义数据、操纵数据以及管理数据之间的通信等核心功能,不同的数据库管理系统对数据库和数据的处理方式不同,数据呈现方式也不同,也往往需要根据数据规模、业务需求等场景选择合适的数据库管理系统,如在海量数据和高并发数据读写的情况下,关系性数据库的性能会下降得很厉害。
关系性数据库(RDBMS)
主要特征
关系性数据库主要以数据表的形式呈现,每一行为一条记录,每一列则为记录名称所对应的数据域(Field)。许多行列组成一张单表,而若干单表则组成数据库。用户/系统通过 SQL(结构化查询语言对数据库进行查询。
有些关系型数据库的操作具有事务性,即 ACID 规则
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
原子性是指一系列事务操作要么都完成,要么都失败,不存在完成了一部分这样的情况,例如银行转账这样的场景里,转账行为发生后,发送方余额减少,而如果数据库出现了操作错误,接收方余额未增加,则会造成严重的问题。
一致性是指在事务执行完成后,整个数据库的数据是一致的,不应存在数据库内同一数据不同步的情况。
隔离性则是指不同的事务之间应该独立进行运行、互不干扰的,当然,这样会牺牲一定的效率,但对数据的准确性等提供了较好保障。
持久性则是指当一个事务执行完成后,它对数据库进行的更改、对系统产生的影响是永久的。
数据完整性
数据完整性是数据库很重要的一个要求和属性,是指存储在数据库中的数据应该保持一致性和可靠性,主要分为以下四种
- 实体完整性
- 域完整性
- 参照完整性
- 用户定义完整性
实体完整性要求每张数据表都有一个唯一的标识符,每张表中的主键字段不能为空且不能重复,这主要是指表中的数据都可以被唯一区分。
域完整性则是通过对表中列做一些额外限制,如限制数据类型、检查约束、设置默认值、是否允许空值以及值域范围等。
--- 在创建表时对字段进行唯一性的约束
CREATE TABLE person (
id INT NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(30),
id_number VARCHAR(18) UNIQUE
);
参照完整性是指数据库不允许引用不存在的实体,数据库的表与其他表之间往往存在一些关联,可以通过外键约束来保障其完整性。
而用户自定义完整性则是根据具体应用场景和涉及到数据来对数据进行一些语义方面的限制,如余额不能为负数等,一般用设定规则、存储过程和触发器等来进行约束和限制。
主流 RDBMS
目前主流的关系型数据库有以下几种
- SQL Server
- Sybase
- DB2
- Oracle
- MySQL
- PostgreSQL
企业和个人用得比较多的是 Oracle、MySQL、PostgreSQL 几种,接下来也会以 PostgreSQL 为例进行详细的操作讲解。
PostgreSQL
安装与配置
PostgreSQL 是一种现代化的开源对象关系性数据库管理系统。
作为个人用户学习使用,可以直接下载软件安装包使用本地搭建环境,可以根据不同的系统选择不同的版本,也具备较便捷的图形界面供大家进行服务的开启、关闭、重启以及进行相关的配置等。本文以 macOS 系统下的 PostgreSQL 14
为例,在官网安装及进行基本设置后,就可以对本机 PostgreSQL 服务进行管理,版本可能会略有差别,但核心功能差别不大。
图形界面
打开 PostgreSQL.app 应用,可以看到如下界面:
在这个管理界面可以很方便地进行 PostgreSQL 服务的开启与关闭,点击对应的数据库也可以进入命令行操作界面。
命令行界面
首先我们讲 psql
的路径加入环境变量以便后续使用,我使用的是 zsh
,所以在 ~/.zshrc
文件中添加如下内容:
# postgres
export PATH=${PATH}:/Applications/Postgres.app/Contents/Versions/14/bin
之后在终端中输入 psql
,就可以访问 PostgreSQL 的命令行界面了。可以使用如下命令查看 psql 的命令列表:
psql --help
连接 PostgreSQL
我们可以通过以下命令连接数据库:
# 连接数据库
psql -h <host> -p <port> -U <username> <database-name>
当然,我们也可以通过一些第三方工具来更方便地连接数据库使用,我当前使用的 TablePlus 就支持 PostgreSQL 数据库,推荐。
命令行交互
PostgreSQL 提供了强大的命令行交互功能,我们可以使用 \
+ 关键词来进行操作。我们可以通过查阅文档或 \?
与 help
命令来查看命令详情与帮助信息。其他常用命令如下:
# 查看帮助
help
# 查看 psql 命令详情
\?
# 查看数据库(全部)
\l
# 查看数据库(指定)
\l <database-name>
# 连接数据库
\c <database-name>
# 查看方法
\df
# 查看表(全部)
\d
# 查看表(只看表)
\dt
# 查看表(指定)
\d <table-name>
# 执行 sql 命令
\i <filepath>/<filename>
# 打开拓展视图
\x
# 导出至 CSV
\copy (SELECT * FROM person LEFT JOIN car ON person.car_id = car.id) TO 'path/to/output.csv' DELIMITER ',' CSV HEADER;
# 退出
\q
核心语法
经过了本地 PostgreSQL 配置与连接后,我们就可以对数据库进行一些操作了,SQL 语言主要分为以下四类
- DDL 数据定义语言(Data Definition Language)
- DML 数据操纵语言(Data Manipulation Language)
- DQL 数据查询语言(Data Query Language)
- DCL 数据控制语言(Data Control Language)
DDL 操作
--- 创建数据库
CREATE DATABASE <database-name>;
--- 删除数据库
DROP DATABASE <database-name>;
# 进入某个数据库
\c <database-name>;
--- 创建表(添加约束)
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
date_of_birth DATE NOT NULL,
country_of_birth VARCHAR(50),
email VARCHAR(150)
);
--- 修改表
ALTER TABLE person ADD PRIMARY KEY(id);
--- 删除字段
ALTER TABLE person DROP column email;
--- 删除全表
DROP TABLE person;
DML 操作
--- 插入数据
INSERT INTO person (
first_name,
last_name,
gender,
date_of_birth
) VALUES ('Yu', 'ZHANG', 'MALE', DATE '1997-06-06');
--- 修改数据内容
UPDATE person SET email = 'ommar@gmail.com' WHERE id = 20;
--- 删除数据内容
DELETE FROM person WHERE id = 1;
可以使用 ON CONFLICT
关键字来处理冲突:
--- 当发生冲突时不进行操作
INSERT INTO person (
first_name,
last_name,
gender,
date_of_birth
) VALUES ('Yu', 'ZHANG', 'MALE', DATE '1997-06-06') ON CONFLICT (id) DO NOTHING;
--- 当发生冲突时更新指定字段
INSERT INTO person (
first_name,
last_name,
gender,
date_of_birth
) VALUES ('Yu', 'ZHANG', 'MALE', DATE '1997-06-06') ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email;
DQL 操作
可以通过 SELECT
命令来对表进行查询,最常用的查看全表命令为
--- 查看表的全部数据
SELECT * FROM person;
--- 查询数据(特定字段)
SELECT first_name, last_name FROM person;
可以通过 WHERE
关键字来进行条件查询、以及多个条件的组合查询:
--- 查询数据(条件筛查,WHERE | AND | OR | 比较 > | >= | < | <= | = | <>)
SELECT * FROM person WHERE gender = 'MALE' AND (country_of_birth = 'Poland' OR country_of_birth = 'China');
IN
、BETWEEN
、LIKE
和 ILIKE
也是一些可以很灵活用于查询的关键字。
IN
可以帮助我们过滤某个字段的多个值。
--- 查询数据(使用 IN 关键词查询)
SELECT * FROM person WHERE country_of_birth IN ('China', 'Brazil', 'France');
BETWEEN
可以帮助我们过滤某个字段的一个范围。
--- 查询数据(使用 BETWEEN 关键词查询)
SELECT * FROM person WHERE date_of_birth BETWEEN DATE '2021-10-10' AND '2022-08-31';
LIKE
可以帮助我们进行一些包含关系的模糊搜索,%
可以匹配任一个字符,_
可以匹配单个字符。而 ILIKE
则是不区分大小写的 LIKE
。
--- 查询数据(使用 LIKE/ILIKE 关键词查询,_ | %)
SELECT * FROM person WHERE email LIKE '%@bloomberg.%';
SELECT * FROM person WHERE email LIKE '________@google.%';
SELECT * FROM person WHERE country_of_birth ILIKE 'p%';
实际应用中,往往数据表的数据量非常庞大,会对数据根据相应条件进行分组,这就要用到 GROUP BY
关键字,以及 HAVING
用于进一步筛选条件。GROUP BY
需要配合聚合函数进行使用。
--- 查询数据(使用 GROUP BY 关键词分组查询,使用 HAVING 关键词添加条件,使用 AS 对结果别名)
SELECT country_of_birth, COUNT(*) AS Amount FROM person GROUP BY country_of_birth HAVING Amount > 5 ORDER BY country_of_birth;
有时候我们只需要返回唯一值,而需要去掉重复数据,则可以使用 DISTINCT
关键字
--- 查询数据(去重)
SELECT DISTINCT country_of_birth FROM person;
在实际应用中,还很有可能会需要对某些商品交易量进行排名、对一些数值进行排列或博客文章中按照时间线后进行顺序显示等,这就需要用到 ORDER BY
这一关键字,它默认为 ASC
升序排列,可以通过手动设置 DESC
来实现降序。
--- 查询数据(排序 ASC | DESC)
SELECT * FROM person ORDER BY id, country_of_birth;
同时,有的数据库数据量非常大,一次返回所有的数据比较消耗资源,因此也可以使用 LIMIT
关键字来约束返回的记录数,同时可以使用 OFFSET
指定偏移量。
--- 查询数据(指定数量与偏移量)
SELECT * FROM person OFFSET 5 LIMIT 10;
SELECT * FROM person OFFSET 5 FETCH FIRST 5 ROW ONLY;
核心概念
PRIMARY KEY 主键
主键在数据表中的唯一身份记录,用以下命令创建与修改:
--- 添加主键
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY
);
--- 修改主键
ALTER TABLE person ADD PRIMARY KEY(id);
其中主键通常会使用 SERIAL/BIGSERIAL
递增 INT
值,也可以使用 UUID
作为主键。
CREATE TABLE person (
id UUID NOT NULL PRIMARY KEY
);
FOREIGN KEY 外键
外键是一种特殊的主键,它是另一个表的主键,用以下命令创建与修改:
--- 添加外键
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY,
car_id BIGINT REFERENCES car (id),
UNIQUE(car_id)
);
--- 修改外键
CREATE TABLE car (
id BIGSERIAL NOT NULL PRIMARY KEY
)
JOIN 联表查询
联表查询是指在查询时,将多个表中的数据进行连接,以便查询出更多的信息。在 SQL 中,我们可以使用 JOIN
关键字来实现联表查询,使用 LEFT JOIN
关键字来实现左联表查询,使用 RIGHT JOIN
关键字来实现右联表查询。
--- JOIN 联表查询
SELECT * FROM person
JOIN car ON person.car_id = car.id
--- LEFT JOIN 左联表查询
SELECT * FROM person
LEFT JOIN car ON person.car_id = car.id
可以通过 USING
关键字来简化 ON
关键字的使用。
SELECT * FROM person
LEFT JOIN car USING (car_id);
约束
CONSTRAINT 约束是用来限制数据表中的数据的,我们可以通过以下命令来添加约束:
ALTER TABLE person ADD CONSTRAINT gender_constraint CHECK (gender = 'Female' OR gender = 'Male');
例如通过添加 UNIQUE
来显示唯一:
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY,
email VARCHAR(150) UNIQUE
);
ALTER TABLE person ADD CONTRAINT unique_email_address UNIQUE (email);
常用技巧
聚合函数
内置了很多聚合函数,例如 COUNT
、SUM
、AVG
、MIN
、MAX
等,用于对数据进行聚合计算。
COALESCE
在查询数据时我们可以使用 COALESCE
填充默认值:
--- 使用 COALESCE 填充默认值
SELECT COALESCE(email, 'Email Not Provided') FROM person;
NULLIF
使用 NULLIF
关键字,当第二个参数与第一个相同时返回 NULL
,否则返回第一个参数,用于防止一些被除数为 0
的报错等。
SELECT COALESCE(10 / NULLIF(0, 0), 0);
时间
时间的显示格式如下:
SELECT NOW();
SELECT NOW()::DATE;
SELECT NOW()::TIME;
我们可以对时间进行运算:
SELECT NOW() - INTERVAL '1 YEAR';
SELECT NOW() + INTERVAL '10 MONTHS';
SELECT (NOW() - INTERVAL '3 DAYS')::DATE;
可以通过 EXTRACT
来获取时间的某个部分:
SELECT EXTRACT(YEAR FROM NOW());
SELECT EXTRACT(MONTH FROM NOW());
SELECT EXTRACT(DAY FROM NOW());
SELECT EXTRACT(DOW FROM NOW());
SELECT EXTRACT(CENTURY FROM NOW());
可以通过 AGE
关键字来计算年龄差值:
SELECT first_name, last_name, AGE(NOW(), date_of_birth) AS age FROM person;
拓展支持
PostgreSQL 提供了许多拓展,以实现更丰富的功能。
安装拓展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
查看拓展方法
df
使用拓展方法
SELECT uuid_generate_v4();
总结
以上就是我对 PostgreSQL 的基础知识与实用操作的讲解,希望对你有所帮助。
参考资料
周报 #10 - 重返过去、遗憾与当下
前言
本篇是对 2022-08-29
到 2022-09-04
这周生活的记录与思考。
发现以前拍的照片原片越堆越多,好多都没修,最近在慢慢整理。目前每篇封面图也都会选一张尽量符合主题的作品作为展示,看看后续能不能挑选一些作为特定主题的作品集。
挺意外从好几个现实里的朋友这里听说在 follow 我的周报,在聊天时讲到一些话题时会说“你在之前周报里提到过”,也有一位意料之外的人因为周报而恢复了一些联系,自己分享欲的载体慢慢在关联与影响着自己的现实生活,感觉很奇妙。
重返过去、遗憾与当下
因为一段对话,周五度过了一个未眠之夜,很多学生时代的记忆不断浮现。
第二天实在有些心乱,于是重温了一部古早的日剧《求婚大作战》,大概是讲了男主通过照片重返过去来弥补遗憾,却发现不论怎么修补都无法改变结局,最终决定在现实中付诸行动的故事。
其实几年前看的时候一直有些疑惑,在多年后重拾以前的遗憾,去试图达到一个美好的结局是否真的有意义?换言之,这一切会不会只是对记忆滤镜映射出的美好想象的盲目追逐,就像那些用于穿越的照片所散发的青春与美好一样,存在于记忆中,也仅仅存在于记忆中。
重返过去
不知道该说是幸运还是不幸,自己曾有过这样一段可以称之为“重返过去”的故事。故事倒并不复杂,初中时喜欢过的女生在大一时因为一些交集再次相遇,也许是重新燃起了一些莫名的情感,在一起了,一个多月后,又分开了。
可能因为一切都发生得太快,来不及留下什么美好,只有一条大意为“新鲜感不是和未知的人体验已知的事,而是和已知的人探索未知的事”的说说被遗忘在记忆的某个角落里。
其实那段感情结束带来的伤害早已不再重要,但它的存在本身却有其特殊的意义。初中的我大概是木讷而迟钝的,对她学不会隐藏自己的喜欢却也只会笨拙地表达,现实中并没有什么男主光环,自然也没有皆大欢喜的结果,但那确实是我第一次感受到了名为“喜欢”的情绪,而“巧”的是大学的这一次“续前缘”也是我的初次恋爱。
同一个人带上了两层不同的情感和意义,也许本应是一段佳话,“多年后弥补初次悸动的遗憾”这样百看不厌的爱情主题。但真正进入了这段感情后,却发现并不是如此,当初的喜欢经过了时间和成长的磨损后仅剩的一些执念也被这样的逞强所撕扯得支离破碎。
遗憾与当下
我们都不存在回到过去改变记忆的超能力,并且因为上述的经历,自己也一直有些害怕重蹈覆辙,我对待那些遗憾像是潘多拉魔盒一般谨慎。一直习惯于将过去的这些事尘封起来,有时候甚至久到觉得自己都已经忘记了,而因为一些事或言语牵动情绪时才发现依然清晰。
既然聊到这个话题了,我还想讲另一个故事,一个藏在记忆深处的悠长的故事。
高中文理分科后,进了文科班,一个陌生的环境。脸盲晚期的自己却莫名在第一时间记住了前排的一个小个子女生,笑起来很好看,第一次加好友时别致的“猜猜我是谁”也让我每每想起时都嘴角上扬。一个国庆假期的聊天让我们亲近了许多,一句本是玩笑话的“我打电话到你宿舍呀”让我之后好几个月的周末中午都充满期待。因为常常一聊就是几个小时,我会沿着运河边的小道一直走,踩在落叶上的沙沙声和电话听筒那端的温柔勾画了我记忆中最美好的一个秋天。
后来的记忆以陪伴为主线,夹杂着一些细碎却温暖的日常:每次晚自习下课后默契地一起在走廊看夜空,与喝着 QQ 星牛奶努力长高的她聊日常成为了一天里最幸福的时光;记得一次偶然听到她说一位同学带来的糖葫芦很好吃,不好意思开口问,于是在打探到的同学家住址附近走了几条街,终于根据包装袋找到了一样的,只为看到送到手边时惊喜却又故作淡定的小表情;记得一次学校办手工节义卖,我选了一个很喜欢的蓝色风铃填写了她的名字让他们送到班级,青涩的小心思伴随着风铃轻轻晃动;她 18 岁生日之前几个月我申请了走读,悄悄录制着她身边重要的人的祝福视频以及全班的留言录音,剪辑成一条现在看来可能无比粗糙但当时倾注了许多心意的视频,只是想让这个生日在她的人生中多几分特别;...
似乎只要与她有关,什么都好。
但世间美好往往带着遗憾匆匆收场,最后也没能在一起,让人感慨缘分之无情。
高考后,因为一些也许现在看来本可以释怀的事争吵、决裂、互删。尽管后来有问过分数和志愿,几番犹豫之后却鬼迷心窍地避开了所有与她有关的城市。直到大学才打听到了近况,恢复了一些联系,但已经都不是曾经的我们了。
其实那么多年一直没法云淡风轻地讲出这段故事,也一直畏惧着那些遗憾和衍生的情绪,直到这些记忆全在这个夜晚涌现,无眠。
过去的这些美好与遗憾造就了现在的自己,《求婚大作战》中的健选择了带着这些面对当下,而我选择写下来。勇气的表现各不相同,但至少,我们都迈出了第一步。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
工作
这周工作上主要在忙一个演示的排练,因为要系统操作演示+讲解共计一个多小时,对内容编排和临场应对都有一些考验,难免还是有点紧张,希望正式的时候能够顺利一些;其余时间都在了解新项目,还没正式进入我的开发任务部分,其实以前的时候也常常多任务并行,但大多是同类型,这次因为有很多需要额外了解学习的,略有些力不从心。
其他就是学了一下 PostgreSQL,就想着整理一下工作实践中用到的一些常用技术栈或是工具的使用,也可以作为一个查阅,就当作一个持续更新的系列吧(又是一个 Flag)。不知道什么时候才能更得心应手写一些深度的文章,还差得远呀。
输入
书籍
- 黑客与画家,通勤路上在读的,原本以为像是软技能那样的比较实际的一些内容,是当作路途消遣来看的,但是出乎意料地很多想法挺有趣,文风也很舒服,看了一半左右了,还有些沉浸
- 送你一颗子弹,刚开始看,更多想学一下怎么样“审视”身边的人事物
剧集
- 彩排,看第一集的时候就有在想,参与彩排主角的人真的能以一个新的身份进入角色么?抑或是如果身处彩排其中的人逐渐分不清其和现实的界限会怎么样?很短也很有趣的走向,就像一开始就告诉你这是在表演,少了一些反转的期待却更容易被事情发展吸引到,滑滑梯下来的年龄转换有被惊艳到,以及很多长镜头
- 求婚大作战,老剧,因为本周的一些事想到了高中时代,重温了一下这部剧,上次看应该也是大一大二了
- 医院五日,讲到医学伦理部分,有些好奇在这样政治环境下的处理方式
- 龙之家族,又追了一集,感觉快要弃了
动漫
- 奇巧计程车,群像的感觉很不错,围绕着一个主线的各个人之间都有关联。挺喜欢漫才组合的那条线,想到了好久之前看的日剧《火花》,觉得这个职业一直好有意思
- 夏日重现,追番中
- 继母的拖油瓶是我的前女友,追番中
周报 #09 - 没有色彩的 Yu 和他的巡礼之年
前言
本篇是对 2022-08-22
到 2022-08-28
这周生活的记录与思考。
这周工作上终于有了些变化,进入了另一个很感兴趣也更有挑战性的项目,感觉可以把之前居家时候学的合约和底层链相关的都用上一点。周中有个挺亲近的同事离职了,比我早一周入职,我工作以来的第一个接口就是他教我写的,可能还没太习惯离别,有些感慨。
周末和推友 Homura 面基了,是个有趣&可爱的男孩子,聊了很多,有很多想法和爱好相近的地方,很开心的体验。大概因为之前不打网游也不怎么发社交媒体,自己好像不太会结识网友,也算是最近的一个小改变了(社恐康复治疗),也决定之后多出门拍照和让生活更丰富一些。
另外就是看了不少书,逐渐也在生活的正轨上了,很巧(或是隐隐有些倾向)的是这周在看的两本书和联想到的剧都是讲述一个普通人的生活与想法,引申了很多思考,关于有趣、平凡与自我。
另外还因为 Manjusaka 的一条推勾起了一些记忆以及对慈善和善意的一些思考。
没有色彩的 Yu 和他的巡礼之年
这个标题取自村上春树的『没有色彩的多崎作和他的巡礼之年』,很长又略些不知所云的名字。这本书是在和 Humura 面基的时候约在了书店,瞥到了他在看村上的『海边的卡夫卡』,突然想到之前想补一下村上的书。
之前看『1Q84』和『挪威的森林』这两部的时候就挺喜欢他的文风,感觉平实而有些娓娓道来的韵味,夹杂着一些充满想象力的比喻。但我最喜欢的还是他的杂文札记,在『当我谈跑步时我谈些什么』的很多思考耐人寻味,看完后也有动力坚持跑了一个寒假的步。
北京的万圣书园外面很破败,甚至对着地图确认了好几遍才在旁边的一个不起眼的地方找到入口,进去后四处都是书架,摆放算不上有序但也不缺美感,顺着同样在旁边的一个小角落里发现的入口拐了几个弯才发现文学区,“别有洞天”可能是最好的形容,很有趣的地方,也让我联想到了香港的很多旧书店。
一下就看到村上的书所在的书架,随意选了这本『没有色彩的多崎作和他的巡礼之年』,还顺便拿了一本『我的职业是小说家』。犹豫了一下还是决定先看前者,不知所云的名字让人多了一丝好奇,下午的时光也是小说更容易打发,初读了几页,嗯,还是熟悉的味道。
尽管读得匆匆,看小说也没有太多记笔记的习惯,但还是记住了几个很有趣的点。首先就是对名字的释义与探究,父母为他取名时纠结于“多崎作”与“多崎创”,后来选了前者,仅需做到“制作”便好,不希望施以“创造”的压力,本已经有了不错的寓意,但因为他所在的小群体中其他四人以及后续结交的挚友的名字都巧合地包含了颜色词:“赤”、“青”、“黑”、“白”、“灰”,让他感觉自己就像是一个没有个性的存在,连带着没有色彩的人生。
其实关于自己名字的埋怨常常有,『请回答 1988』里德善也有向父母埋怨自己的名字毫无特色,不如姐姐宝拉。我也曾有过这样的想法,似乎自己的名字简短而没有特色,再加上也是几个大姓之一,常常在一个学校遇到不少同名的人,与之相伴的就是自己常常也需要额外努力才能留下更多记忆点。
虽然后续也和自己和解了,但似乎还总是感觉自己的生活与有趣已经无缘了。总是羡慕别人的有趣个性和经历,也常常在即使自己做得不错时也只是觉得在履行自己平凡人生的职责或是这些都并不属于自己,心理学有个症状定义叫“冒名顶替综合症”似乎很贴切地描述了这一点。之前看过一篇关于工程师素养的文章中提到过这一点:
而随着年岁和经历的增长这种倾向似乎愈演愈烈,追寻有趣也成为了一个虚无缥缈的执念,但即使是他人评论是个经历丰富或是有意思的人也总是将信将疑。书中描述的多崎作似乎也处在这样的状态中,其实又在做自己一直很感兴趣的车站建造工作,却依然觉得自己缺失了什么,就会将其归咎于自己的缺乏色彩。
人在各个阶段似乎总是会有抱团的倾向,而一旦依赖于一个群体又不免遭受来自关系的压力与挫折。大学时我曾有这样一个四人小团体,两男两女,总是形影不离,到辅导员或是同学发现缺人都会很自然地询问其余的人。
但我在一段时间后感受到了明显的压力,剩下三位似乎是更风云一点的人物,总是在人群中耀眼的那一个,而我却似乎总是缺乏存在感,而内心又不想成为这样出于习惯而依附其中的多余之人。于是我开始刻意回避和逃离,当然,表现拙劣的我并不懂如何隐藏,很快就被察觉。
可以说比起多崎作我是幸运的,没有被抛弃,也没有什么误会,另外三位在一个夜晚把我堵在男生宿舍楼下让我讲出心结,并逐一进行排解,关于个性和存在感的回应我可能依旧觉得是安慰,但有感受到自己有被这段关系和模式所需要,自己的情绪有被他们所认真看待,我们的关系有被珍惜。即使后续因为城市和很多原因已经少有共同行动的机会了,但是依然有着不错的联系,以及到了任一成员所在的城市所首先会想到的人。
『斯通纳』其实也描述了许多关于生活的平凡与人格的完善这一块,不过话题比较庞大,可能以后会结合着『Normal People』一起讲讲。
善意与慈善
上周看到 Manjusaka 发的一条推文:
一个好消息和大家分享一下
我妹子和我一起资助的一个大凉山的学生,比较顺利的考上了东部沿海一个还不错的公立大专。算是迈出了走出来的第一步,虽然对于很多人来说大专不值得一提,但是对于大凉山的孩子来说,这一步已经需要付出太多的努力
欢迎大家一起来资助学生,毕竟
#教育是最好的公益
后来也了解了一下『壹个村小』这个组织,打算后续关注一下通过一对一的方式援助一位。
其实我很难将自己这些举动赋予“慈善”这样高尚含义,自己也曾有过以之为炫耀或是谈资的时候。
高考结束那年和挚友去了湖南的一个山村支教,参加了一些活动、教了一些课、结识了一群可爱的小朋友,然后匆匆离去。后来大学开始的时候一次在班群讨论过关于支教的事,当时我讲了这段经历(或许带着一些隐隐的自豪,“看!我还做过这样的事”),有一位同学回复让我印象深刻,具体的言辞记不清了,大意是质问我是否想过这样一波一波的支教老师似乎带着自己的目的去让那些孩子看到了外面的世界、给予了他们更多的想象和温暖,然而却匆匆离开,可能再也不会回到这个地方,生活也不会再与之交轨,比起这短暂传递的所谓“知识”,究竟是益处更多还是伤害更大。
后面大家的议论我记不清了,我想我无非是还带着对那些孩子们的不舍之情说了“我之后有机会会再去看他们的”这样的话。那时是 2015 年,7 年过去了,我再也没有回去过,她是对的。
后面自己很小心翼翼地对待这样的事,也不再敢称什么慈善,生怕自己出于虚荣做出这样自我满足的事。记忆里也就是在系里支教团号召捐钱买冬衣的时候略多出一些以尽绵薄。
这次看到了 Manjusaka 的这条推,感受到了由衷的开心,也希望自己也能以这样的方式多做一些什么吧。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
输入
书籍
- 工作、消费主义与新穷人,不论是在工作伦理时代还是后来的消费主义,即使加上了伦理、道德这样冠冕堂皇的措辞,穷人终究仅仅是一个符号而从未被当作一个群体来正视,不断变化的规则秩序或是不同的态度也只是每个社会选择了它在那个阶段偏爱或允许的方式,即使赋予了穷人“价值”也不过是居高临下的施舍。
- 九宫格写作法,一本小书,精简且文风很有吸引力,之前自己其实一直不爱看这类“如何阅读/写作”这样的书,但随着自己开始博客更新后也常常感受到表达方式的局限,很有启发,尤其是在信息收集与整理这一块,在自己的实践上结合 Logseq 的每日记录各种想法,能为写作增加很多思路。
- 斯通纳,高中时草草读过一遍,最近重读又有很多新的感受。不知道是不是因为设定都是文学专业,读的时候联想到了 Normal People 普通人,前两年很火的剧。大概一个普通人的一生总是这样琐碎且真实,学业、爱情、婚姻无不充满着破碎感,无力改变却又认真地生活着。最近越来越喜欢这样朴素笔触下的平淡人生和它传达出来的生活态度,大概慢慢也老了(虽然这么讲有些矫情
- 没有色彩的多崎作和他的巡礼之年,最近难得的一口气读完的实体书,村上的文字常常有这样的魔力,似乎只是在描述一些琐事和心里的杂念,却又吸引着人去探究各个元素之间的关联。这本书主要关于友谊的破碎以及失去。不禁联想到我所在的一个三人小群体,寄托了过多依赖的自己也许已经无法承受失去的代价了,只是随着生活与时间流逝我们所需要面对的也更多了。
剧集
- 医院五日,看了一半多,讲美国卡特里娜飓风时候的一些事,难免不让人联想到武汉疫情当时的一些事
- 龙之家族,权游前传,目前看了一集观感一般
电影
- 隐入尘烟,第一感觉想到了无依之地,紧接着是活着。雨中那一段既感动又心疼,默默祈祷着苦难不要降临,却也于事无补。但静静看完的两个小时里观感上并没有太多渲染苦难的痕迹,大概这就是中国人真实的苦难本身的样子,一代又一代人地重蹈覆辙。
动漫
- 夏日重现,甚至有些舍不得结束了,很难得到了 20 集还在期待后续发展的番,千万别烂尾
游戏
- 八方旅人,工作日晚上闲暇的时候打了一会儿,高清马赛克的体验还是挺不错的
- 极乐迪斯科,这周生病了,停滞了没玩
周报 #08 - 职业杂谈、404 Not Found 与猫
前言
本篇是对 2022-08-16
到 2022-08-21
这周生活的记录与思考。这周工作上依然没那么紧,周中也有了更多时间跟同事交流和聚餐,回家后的时间并不多,所以整体也算休闲。感觉七八月就像是之前放暑假一样,心态上也没有什么负罪感。不过还是读了一些书,并且把阅读时间、频率和方式都更规律化了一点。
周中在感情上(可能也有些难再冠之以感情,记忆吧)发生了一些令人低落的事,经过了几天的调整略缓过来一些。对自己的状态有些担心,可能也有在认真地考虑是不是要(再)养一只猫。
职业杂谈
上周听了这期『65. 内核恐慌 × 枫言枫语:如果不做程序员我们会做什么?』,还挺有感触的。和各位嘉宾不同,其实自己走上程序员这条路才算是阴差阳错,之前并不算长的人生里也经历过数次转折,就像一条条不同的世界线,也常常会想另一个平行世界的自己是过得更开心还是同样迷茫。
其实自己一直也算不上什么大理想,自小就没有成为“xx 学家”的梦,更真实的倒是有过一段时间想做老师,但在与一个并不友善的小学班主任共度几年之后早已失去了大半兴致,不是说老师这个职业不好,只是害怕自己成为这样的大人。
在高中时随着读书写作变多了,也萌生过成为独立作家或者记者的梦,或许有带着稚气的一些正义感和英雄主义,但总的来说当时没有多宏大或是高尚的想法,如想要“振兴中华文坛”或是“揭露社会丑恶”,而只是单纯地觉得,能把读书和写作兼为自己的爱好和职业该是一件多幸福的事呀。
高考后参加的一个国际支教团中也见到了真正的国际记者,填充了自己对于未来职业的想象。只是随着年龄见长,才慢慢觉得对于成为作家而已自己少了一些想象力,而作为记者似乎又缺了一些勇气。这大概也是成长的代价吧,已经不再能大声说出自己的所谓“理想”了,也不得不承认并面对自己力有不逮之处。
调剂到了英语专业算是万幸,或多或少在我迷茫未来的时候没有觉得自己是在虚度时光。大一大二时并没有思考那么多未来的事,只是在闲暇之时不断学 ps、pr 等各种软件,活跃在各个社团组织里,做文科学院里所谓的“技术宅”。
大多软件的使用逻辑并不复杂,“我亦无他, 唯手熟尔”。慢慢地萌生了一个想法,比起“使用”,是不是“创造”可能更有趣一些?于是从 Python 开始学代码,走了很多弯路,也经历过学了几个月依然只会课后习题,做不出什么完整项目的阶段,慢慢摸索至今才勉强摸到了一些门槛。
那时也并没有把其作为自己的职业目标,可能仅仅觉得自己在做一件挺有趣也很酷的事。到了大三时候一时兴起开始学摄影,买了一台 Sony A7M3 微单(陪伴我至今),一边实习出差一边记录一些风景人文。
当时教我摄影的师父是一位深度记者兼纪录片导演,其实并不会教我构图原理或是参数怎么调这样的基础,而是潜移默化地向我传达即使是一张简单的照片,在拍摄的时候也一定要在心里构思一个主题,就像是含蓄地讲一个故事一样,所有构图、色调或是效果都需要为这个故事服务,这一点持续影响着我。
实习结束后回到学校开办了自己的视频工作室,承接一些宣传视频与在线课程的录制剪辑,从打光、布景、绿幕等开始,以一个最小工作流体验了这个行业的各个方面,其实也萌生过是否要将其作为职业的念头,只是最终还是觉得乐趣不足,遂放弃了。
临近毕业时一直有考虑从事产品经理一职,也了解和体验了一些相关工作,后来依然觉得自己的兴趣是在“创造”与自己真正完成一件事的满足感,而不是在设计与勾画蓝图(同时依然觉得自己缺乏足够的创意),依然没走下去。
最后跨专业出去留学,回来成为了一名还算合格的程序员。这就是我目前的职业之路,尽管有很多轻描淡写的部分,但各个阶段也真切地体会到了迷茫、挣扎、沮丧等各种感受,能走到现在有幸运有付出的回馈,也让我倍感珍惜。并不能确信自己以后会一直会做程序员,但应该或多或少都会与 Coding 有关,毕竟这是我迄今做过的最有意思的事,还有着无尽的探索空间。故事还在继续,谁又不想体验更多元有趣的生活模式呢?
404 Not Found
这可能是一个有些不知所云的标题。
在网页中,如果内容已经不存在了,一般会显示一个“404 Not Found”页面以起到告知作用。我一直觉得这还挺酷的,之前有把自己随身带的用来装充电宝的包选了 404 的图标样式,也有一段时间把自己的介绍页面加上了 Google 的小恐龙动画(Google Chrome 浏览器在访问网站出问题时会有一个离线的跳跃类小游戏,让访问者等待之时有一些乐趣)。
大概一直觉得自己在某种意义上是一个容错率很高的人,能够坦然甚至玩笑的方式看待一些小错误插曲,有常常自豪这样的心态。直到,我的感情 404 Not Found 了。
其实自己也并不是没有发现一些被清理或是解除关联的痕迹,也在一天天逝去的时间里在逐渐接受了一些现实,只是当 404 的提示出现在眼前时才发现刺痛感比自己想象得强得多,也撕开了我那么多天伪装的坚强。
我一向来看待感情比起其他事物要乐观得多的,至此也不得不承认感情自带的悲剧属性,曾经的甜成为了如今束缚自己的布满荆棘的牢笼,不去触碰就不会受伤,也失去了迈出去的勇气。
猫
实话说和她一起之前自己并没有想过养猫,大概是觉得连自己都照顾不好的人又怎么有资格对另一个生灵负责,但当真正家里多了一个成员时也才渐渐发现自己享受于这种依赖与被依赖,似乎生活也多了很多目标。
她离开后,小薯一并被带走了,虽然常常也跟朋友无奈地玩笑说自己“人猫两空”了,但也心知自己之前的照顾确实不如她,这样的选择也无可厚非,只是每次忆及从前又多了一倍的难过。
昨晚看了『喵星人的奇思妙想』纪录片后也更多了解了之前忽略的很多猫的想法和相处细节,也隐隐萌生出是不是要自己再养一只猫的念头。只是这就像是对小薯的一种背叛,自己也依然没能做好这个心理准备去再次去好好对待一个新的成员,而在自己需要的时候迎接一个新的成员于人于己都很难说是一个负责任的选择。
也许未来某一天吧。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
学习
这周也还是陆续在按计划看一些学习课程资料,也终于把智能合约这块的课程追完了(32 小时,好长!),不过后面因为已经熟悉了合约,而且很多重复性的代码,就比较少之间上手跟着写了,打算这周看项目源码作一些分析,所以这两周的代码量也少得可怜,都快成为一个 Markdown 工程师了。
博客相关
之前写的那篇 Stablecoin 相关的还是有一些要修改的,但后半期因为自己状态的影响还没修改,这几天需要调整完善一下了,剩下这周继续完成以下几篇博文(拖了好久了还没动笔):
- Cosmos 原理与架构
- Docker 基础与实践
- k8s 基础与实践
输入
书籍
这周把之前遥远的 Kindle Oasis 2 翻出来了,清理了一下帐号和书籍分类,只留了”To Read“、“Reading”、“Read”三个分类,基本与豆瓣同步,这样每天通勤能看 50 分钟左右,有时候在家也能看一点,也比手机看电子书更有沉浸感和护眼一些。
- 蒂姆库克传,看完了,书是一般,感觉更多就是信息的堆砌,但是确实让我更多了解到了乔布斯之后的苹果与它践行的价值观
- 工作、消费主义与新穷人,一本很有意思的书,读了两个章节了,对自己最近工作状态的一些思考还挺有启发的
- 九宫格写作法,Randy 推荐的一本小书,这周读一下
剧集
- 非常律师禹英禑,原先只是看了一个剪辑觉得女主很可爱所以追的剧,竟然完整等周更看完了,自闭症律师是一个挺新的切入点,难能可贵的也并没有仅仅是渲染女主的幸运,也包含到了其他自闭症相关的案子,主线剧情不多但男女主的感情线挺清新自然
电影
- 稍微想起一点,虽然自己还没有到可以很平静地看爱情片的程度,但也算沉浸其中了。能看到一些类似花束中描述的场景与模样,但是少了几分刻意渲染的缘分和矫情,多了一些融在言语举止里的过去与现在的牵绊。另外,深夜的日式街景真的完全满足了我对美好缘分的一切幻想,想去
- 喵星人的奇思妙想,有点了解到了猫的一些想法,也能感受到拥有过又抽离出生活后的痛苦,有点考虑等略调整之后再养猫了(总有一些莫名的背叛感)
动漫
- 英雄联盟:双城之战,刚出的时候就想看,结果到现在才补,算是近几年看过的动画里在画面、剧情、节奏和配乐的巅峰了,虽然我不玩英雄联盟,可能少了些对人物剧情的触动,但也能看到一个很好的故事和与之匹配的宏大的世界观,期待下一季了
- 夏日重现,越来越精彩了
游戏
突然发现豆瓣还有记录游戏的功能,修改了一下自己 n8n 的自动化脚本,添加了游戏记录同步的功能,之后也想在自己的日常生活里添加一些能够放松的部分。
- 极乐迪斯科,算是前两年很有名的文学游戏了,制作人是几个作家。之前在 Steam 上玩了一点但是记录没留存了,最近买了 Switch 卡带版好好玩一下,顺便作为收藏,大概玩了两三个小时了,被画风和背后的一些思考吸引了,慢慢玩,也想写点东西
加密世界与现实世界的桥梁,稳定币的前世今生
前言
相信大家近几年对加密货币,尤其是比特币、以太坊等名词并不陌生,从一波一波的价格新高或是新低,到活跃在各类媒体的马斯克与“狗狗币”,再到前段时间沸沸扬扬的 Terra 稳定币崩盘,数字货币尽管规模不大,却已然是现今经济体系尤其是货币市场不可忽略的一部分了。
然而,加密货币的价格是如何变化的呢?其与现实世界的资产是如何交互的呢?其中的所谓“稳定币”又是怎么一回事呢?
本文将从原理、运行机制、商业模式等方面浅析一下加密货币中非常特殊的存在 —— 稳定币。
加密货币概述
加密货币是一种基于密码学、分布式系统等技术原理运作的一种货币形式与交易媒介。例如,Bitcoin 是在 2009 年由中本聪发明的一种加密货币,主要是为了反抗中心化的银行体系,因为其精巧的系统设计和安全性,价值也在迅速提升,与 ETH(以太坊区块链使用的代币)等热门数字资产共同构成了加密货币生态系统。
有别于腾讯的 “Q 币”或是少数派平台推出的“派币”等虚拟资产,加密货币是一种在不受中心化机构平台管理的基础上依旧具备价格度量、交易等功能的虚拟货币形式,其价格由市场决定的,更确切地说,其价值主要由资产持有者信任与市场中的购买意愿等决定的。
然而,由于目前其依旧是一个很小规模的市场,极易受到各类因素影响,其价格具备极高的波动性与不可预测性。例如,在特斯拉与 Space X 公司的创始人马斯克(Elon Musk)经常发推表示自己的狗狗币(Dogecoin,一种数字货币)的推崇,发布 Space X 将发射一枚以“Doge-1”命名的卫星至月球且该任务完全采用狗狗币进行支付等消息,极大提升了狗狗币的关注度,市场也迅速对其做出反馈,价格不断提升;然而,在他公开承认“狗狗币是骗局”时,又导致了其接近 40% 的跌幅。马斯克仅是一个数字货币大户,就可以对市场产生如此大的影响,加密世界里还有投资机构、大规模矿场及其他“巨鲸”(即大量持有某种数字货币的用户),他们的许多举动都会给加密货币市场带来更多不稳定性。
加密货币可以通过区块链网络打破地域限制,在世界范围内快速流通,无需经历繁琐的购汇、国际转账等手续与高昂的手续费。然而,主流加密货币目前更多作为一种交易媒介及投资方式,而很难作为一种像是法定货币这样可用于真正的生产、消费等现实活动的稳定货币载体,毕竟没有人想一觉醒来自己的资产莫名缩水一半还无处说理。当然,也有一些国家作出了将数字货币作为其法定货币的尝试,例如在 2021 年 9 月 7 日,萨尔瓦多正式采用比特币作为法定货币,其设想通过这种方式来推动国内投资、旅游、经济等行业的迅速发展,也产生了很多积极效益与创新性成果。然而,其也必须为数字货币的高波动性作好充分的准备与调控措施,前几个月比特币等数字货币经历暴跌时,萨尔瓦多国家财政就遭受了巨大损失,甚至会对国家经济社会稳定造成一定影响。
而随着区块链与加密货币生态持续发展,其不仅仅局限于投资用途,国际汇款、跨境贸易乃至日常交易使用等应用场景也逐渐涌现出了需求,那有没有一种方式能够兼具加密货币的便利与法定货币的稳定性呢?
稳定币(Stablecoin)即是基于这种需求诞生的一种解决方案。
稳定币
稳定币是一种特殊的加密货币,它能够与某种传统的法定货币(如美元、韩元等)挂钩,因为其与法币价格锚定而不是随着市场剧烈波动,因此常用于不同数字资产的一种避险方案、中转方案以及满足日常支付需求。稳定币能够在缓解价格波动的同时,保有数字货币安全、公开透明、可追溯、低费用等特征。
那么,既然没有政府与银行为其背书与调控,稳定币是如何与现实世界的法币锚定,也就是如何实现 Pegging 的呢?
分类
从锚定方式来看,稳定币可以分为以下两大类:
- 抵押稳定币
- 算法稳定币
抵押稳定币
抵押稳定币通常是以既有的一些政府发行的法定货币为基础进行 1:1 锚定,每一枚稳定币的背后都有等值的法定货币进行抵押,从而保障其价值的相对恒定。如上文所述,加密货币的价格主要取决于持有者及市场的信任与信心决定的,因此,抵押稳定币通过与中心化的现实资产绑定来维持这种信心,从而维护其价值。
除了与法定货币锚定外,也可以与黄金、钻石、石油等现实世界的价值载体锚定,减少价格的波动性。然而,因为这种方式依托于一些组织机构或联盟进行管理运营,一定程度上背离了去中心化的设计原则,也存在一定风险(如没有足够的抵押物),但总体来说是比较普适与稳定的解决方案。
例如,Tether 推出的 USDT 就是一种锚定美元的稳定币,他们持有与其发行的 USDT 等值的美元抵押,定期公布并接受相关机构审计以维持消费者的信任。
它自 2015 年起运行至今,一直保持相对稳定,然而,一直有声音称其并未持有与流通的 USDT 等量的美元资产抵押,也就是存在增发现象,如果市场产生恐慌,大量消费者想出售手上的 USDT 赎回法币时,如果 Tether 的法币抵押物储备不足(有些是美国国债等资产,披露不透明且常常无法马上兑付),则会对 USDT 与美元的锚定产生影响,甚至影响到整个加密市场。
同时,由于 Tether 与 Bitfinex 交易所等机构对 USDT 享有极大的操控权,具备一定的中心化风险,即他们可以用 USDT 来对比特币等数字货币乃至整个加密市场进行操控,加剧了市场的波动,也会影响持有者对稳定币的信任基础。
此外,在 2022 年 5 月 Terra 稳定币崩盘(后续会讲到)之后,随着投资者对稳定币的质疑及其他外部市场影响,Tether 也经历了一场短暂的波动,从 1 美元降低至 95 美分,对整个加密市场都造成了很大的影响。尽管 Tether 背后的公司通过临时性应对措施(如提高提现门槛与手续费)恢复了锚定,依然暴露出了其过分依赖于市场信心与中心化公司调控能力的风险与弊端。
算法稳定币
为了解决抵押稳定币的中心化问题,还有另一种方式,即算法稳定币。这是一种基于特定算法组成的机制运作的加密货币,无需抵押任何现实世界的资产,而是通过智能合约对货币流通量进行动态调整来实现价格锚定。
这是一种巧妙的解决方案,运作原理类似于一个去中心化的央行。在经济学中,国家中央银行通常会为了实现既定经济目标,运用各种工具调节货币供应量和利率等,最终影响宏观经济运行。当通货膨胀时,央行会采用紧缩的货币政策,减少货币供应量,使市场上的流动资本减少;反之,当通货紧缩时,央行往往会采取扩张性货币政策,增加货币供应量,使市场上的流动资本增加,灵活实现对经济的宏观调控。
而算法稳定币就是通过智能合约(运行在特定区块链网络上自动执行的链上程序)以去中心化的方式模拟了这一调控过程,以稳定币与法定货币 1:1 为目标,根据市场的反馈与波动来动态调整数字货币供应量,这种方式减少了对公司持有现实资产的依赖,极大减少了中心化作恶风险。
例如,在 Terra 的 UST 稳定币场景中,算法稳定币的智能合约的运作方式如下:
当 UST 价格高于现实美元价格时,算法会自动增加供应量,随着市场上 UST 流通量提高,价格自然会下降,直到与现实美元价格相等。
反之,当 UST 价格低于现实美元价格时,算法会自动减少供应量,随着市场上 UST 流通量减少,价格自然会提高,直到与现实美元价格相等。
然而,基于算法的稳定币在实际运作过程中易受一些外部影响,供应量调整也并不能完全保障其价格稳定,具备一定的风险,例如前段时间 Terra 稳定币崩盘事件就是一个典型的例子。
Terra 生态详解
Terra 是基于 Cosmos SDK 创建的区块链网络,采用了算法稳定币的模式,构筑了独特的生态系统。其发行了与美元、韩元、欧元等锚定的稳定币(分别为 UST、KRT 与 EUT),并通过弹性的货币供应量来保障价格稳定。其并没有使用美元抵押来维系价格,而是通过智能合约实现的调节算法与链上原生资产 LUNA 来进行价格调控。
LUNA 代币可用于参与 Terra 生态的交易手续费、社区治理投票等,并且可以通过与稳定币资产(如 UST)进行双向销毁,以维持稳定币价格。
Terra 运作机制
在算法调控过程中,当提高 UST 供应量时,用户可以通过协议销毁一定数量的 LUNA 得到对应价值的 UST,卖出后可以获取一定收益;而降低 UST 供给量时,则可以通过低于 1 美元价值的 LUNA 代币购买 1 美元 UST,卖出后可以获取一定收益。
以上两种情况下 LUNA 的持有者都能通过价格差异获取一定收益,当越来越多人购买 UST 时,LUNA 的价格会上涨,激励持有者们更积极参与 Terra 生态系统的运作。
而为了吸引市场持有 LUNA,参与 Terra 生态,Terra 提供了两种协议,Mirror 与 Anchor。Mirror 协议让 Terra 用户可以通过 LUNA 与 UST 资产便捷地购买一些现实资产在生态中的映射用于投资,如黄金、证券、股票等;而 Anchor 则是提供了类似银行存款但更可观的利息收益。这两种协议的结合推动更多人参与到 Terra 生态并吸引了更多资产留存。
Terra 崩盘事件解析
有了以上对 Terra 运作机制的了解,我们可以从算法调控的角度更好地理解 Terra 稳定币崩盘事件。
首先,Terra 生态调整了上述 Anchor 协议的利率结构,提升至 20% APY(Annual Percentage Yield,年利率),吸引了大量用户,Anchor 协议中也累积了大量 UST 资产;同时,由于投资市场波动、美联储加息等原因,人们开始抛售一些数字资产,包括 LUNA 代币,造成了其价格的下跌。
由于 LUNA 是调控 UST 与美元价格的重要资产,随着 UST 与 LUNA 的市值差异不断增大,人们开始怀疑 LUNA 是否能够支持 UST 价格的锚定,因而产生了对 UST 的价格恐慌,大量用户开始挤兑 UST 代币与 LUNA 代币,导致 UST 价格低于其锚定的 1 美元,LUNA 价格也不断下跌,再进一步引起恐慌,导致新一轮抛售,形成更大的价差,不断恶性循环,最终几乎归零。
总结
以上就是我们对加密货币,尤其是稳定币生态的概述,并对抵押稳定币与算法稳定币两种主要稳定币分类进行详细分析。加密世界是一个充满创新与挑战的领域,也依然处在发展早期,后续也将会对区块链技术原理、公链、智能合约、去中心化应用、DAO 等有趣的概念进行探索与讨论。
参考资料
- What Are Stablecoins?
- The not-so-stable coins: How Terra’s collapse is dragging down crypto markets
- Tether Loses $1 Peg, Bitcoin Drops to 2020 Levels of Near $24K
- The Complete Beginner’s Guide to Stablecoins
- Is Terra — whose LUNA coin is now at another all-time high — really where the smart money is?
- Terra Money: Stability and Adoption
- 稳定币常识:什么是稳定币,它如何保护您的资金
- Luna 崩盘分析与启发
周报 #07 - 学习、考证与工作追求
前言
本篇是对 2022-08-08
到 2022-08-15
这周生活的记录与思考。这周的工作还是筹备项目需要参加的一个测评,主要是方案讲解,下班时间都还算正常,也渐渐恢复了不错的生活节奏。
但是感觉下班回家宅习惯了后就很缺乏出门的动力,原定的练习滑板和夜跑也都暂搁了,不过比起之前也还是出门了几次,工作日几个晚上有聚餐,周末去了趟南锣鼓巷,晚上还去了什刹海散步,一直觉得这个地名很美,终于得以一见。
经过了上周的调整,这周也安排进了不少学习计划,并且决定通过考一个证书来检验自己的学习,也算是一种外部激励吧。其他就是与几个朋友聊了一下关于工作调整、远程工作与工作追求相关的事。
学习与考证
之前的两个工作项目里就经常有用到 docker 与 k8s,对他们的基本命令与配置文件编写都比较熟悉,但一直没有对它们的架构与技术细节有系统性学习,上周看了 YouTube 上『TechWorld with Nana』频道的一些讲解,补齐了很多知识盲点。
但是因为 k8s 涉及到的组件和操作太多,稍一阵子不用就会忘记,而且不上手练习也不利于记忆,然后自己也对 Devops 这一块很感兴趣,经常折腾一些自动化工具和 Serverless 应用。于是打算更系统地学习一下,考一个 Certified Kubernetes Application Developer (CKAD)认证,一个由 CNCF 与 Linux 基金会共同开发的认证项目。这个项目主要面向开发者,涉及了很多知识点:
比较特殊的是这个认证考试最后是 19 道上机实操题,也可以查看 k8s 官方文档,没有什么需要死记硬背的部分,很适合作为学习成果的检验。买了 Udemy 平台的『Kubernetes Certified Application Developer (CKAD) with Tests』,最近就一直沉浸在刷它附带的 Lab,因为是一个在线环境就很方便,找回了当时读书的时候写作业赶 due 的心境。
其实我大学时候好像莫名地考过不少证,印象比较深的是一个软考中级(软件设计师)证书,因为上午考理论综合,下午考实务,通过率也只有 30%不到,刚报考时很紧张,早早地买了书和各种资料,但是一直拖延,直到只剩半个月了才开始紧急预习和刷题,最后压分通过了。因为大学时候是非科班 CS,那次考试最深的体验就是在备考过程对软件工程、操作系统、计算机组成原理以及各个编程语言都有了比较系统的认识,也给后面跨专业学习提供了很多帮助。
后来因为本科主修的是英语专业,也考了英语专业四级、英语专业八级、雅思等,越来越感知到学习目标与计划对于了解一个新领域或掌握一个新知识的重要性,跟之前提到的面向周报或面向博客学习的模式也类似,有一个产出标准会会让自己在学习的过程中能更体系化,思路也会更清晰。最近的应该就是 CKAD 和日语 N2 了吧,其他的可以再探索一下(不过有的认证真的好贵)。
工作与状态调整
这周和两个朋友聊了一下工作相关的事宜,一位正在换工作,来了解一些 web3 相关的资讯,另一位近几个月刚进入 web3 团队工作,采访了他们的一些对于工作的想法,很羡慕,也觉得很有意思:
“可以认识更多有热情/有趣的人”
“我现在也不午睡了,更愿意去把工作的事情做好,甚至感觉这不是工作”
“讲究主动性,同时也有挑战”
“开会也少,自由度也够,写代码有时不知不觉写到凌晨一两点,久违的感觉”
可以从字里行间感受到他们的热爱与期待,除了作为谋生赚钱的工具外,他们对工作氛围、模式与内容也有自己的追求与想法,这也很大程度影响到了我对日后工作的一些定义与标准。
这几天的学习和工作状态有所缓解,但睡眠依旧有些糟糕,常常有断断续续的梦境,夹杂着不少过去的记忆,真实到醒来后依然很难缓过来。体检要开始预约了,想在八月完成。
其他
这个部分会记录一下自己的输入输出以及其他觉得有意思的东西。
学习
如上文所述,这周主要是在学习 Devops 这一块以及备考 CKAD,同时对 GitLab CI/CD、GitHub Action、Ansible 等自动部署、运维工具做了一些学习记录,还在整理。
另外把修图(Adobe Photoshop + Affinity Photo)和剪辑(Final Cut Pro X + Davince Resolve)这一些技能点重新捡起来,开始慢慢重新计划自己的一些生活记录了。
博客相关
在拖了我的少数派编辑一个多月的稿(并且还已读不回)后,我终于良心发现,把之前约稿的那篇 Stablecoin(稳定币)相关的文章写好初稿发过去了,再根据反馈进行一些修改补充就可以了,感觉心里一块大石头放下了。
之前写的那篇『基于 frp 内网穿透的瘦客户端开发工作流』终于在这周发布了,被收录在会员专享内容中,也是一个小小成就了。
剩下这周继续完成以下几篇博文(可能更多是对实践的笔记吧):
- Cosmos 原理与架构
- Docker 基础与实践
- k8s 基础与实践
输入
书籍
- 蒂姆库克传,快看完了,感觉也更深入了解到了苹果产品背后的一些理念和哲学
剧集
- 非常律师禹英禑,开始虐了,也有了一些剧情冲突点,小鲸鱼也是真的可爱
- 石子和羽男-这种事情也好告么?,一个新日剧,也是律政题材的,其实对男主人设比较无感,但因为女主是有村架纯,有想看的理由
电影
- 分手的决心,镜头语言和整体节奏感很舒服,对犯罪和心理的描述占据了绝大部分,但剧情发展和心态变化上缺少了一些呈现,乐趣就是在其中找苹果设备的各种用法了
动漫
- 夏日重现,继续蹲后面的剧情发展
- 继母的拖油瓶是我的前女友,我是还挺喜欢这种恋爱番的
周报 #06 - 真诚、游戏与自我调整
前言
本篇是对 2022-08-01
到 2022-08-07
这周生活的记录与思考。就工作节奏而言远远算不上忙碌,甚至有几天久违地 7 点多就到了家,空出来的闲暇时间让我有了更多时间思考自己的人格与生活状态,也能够将之前很多细碎的思绪好好梳理一下。
真诚
周末得知一位挚友遭遇了人际关系的困境,也共同回顾分析了其中涉及人格、个人气质、沟通、思维方式等各个方面的缘由,而『真诚』这一特质则是贯穿其中的核心因素,加上前几周对与人际和沟通方面的梳理,浅谈一下自己的思考。
人际关系的困境
随着年岁的增长和自己内化在性格中的特质影响,我挺乐于为他人、尤其是亲近的人付出,也自认为自己在过去的经历中践行了这一点。但后来发生的一些事让自己渐渐意识到,我似乎一直以来把人际关系的界限划分得很明白,家人、爱人、挚友、其他朋友、不会深交的人、陌生人等等,尽管可能并没有那么多主观意识或功利考虑,但总是有潜藏其中的优先级存在。在绝大多数与他人的沟通中我可能也仅仅是做到了真实或是不虚伪逢迎,而真诚这一步常常难以迈出。
从所谓的社交标准或是从他人身上获取的正反馈来看,似乎已经很足够,让我常常质疑是不是人与人相识之初可能就是有这样固有的一条线,想达到并不难,友善似乎就已经符合了几乎所有关系建立的基础,而想要跨过则需要成倍的付出,而自己则往往止步于此,似乎到了某个临界之时,就会有个声音告诉自己,需要为这段关系所做的也就只此而已,够了。
自我
后来一次与挚友的争吵让自己意识到了这种思维方式背后隐藏的自以为是与自我满足的部分,甚至会很潜移默化地影响了自己的行为方式与思考优先级。意识到这一点后,自己也经历了一些调整与变化,逐渐不那么在意互相付出的比重,开始更多在与他人的相处中对于他人所需要的与自己所能做到的部分作下意识地思考,不管是在沟通还是相处上,都在之前的习惯之余上多走一步,也收到了一些真诚的反馈,但是依然觉得在自己内心真诚的部分还是很难做到很好。
对真诚的思考
可能是出于不安全感与内心的防备,我常常觉得自己别人对于自己友好的部分很大程度是对自己友好姿态的一种等价回馈。而我自己内心其实也是有很多冷漠的因素存在的,并不是能一直充满热情地全心全意付出,有时候会觉得自己像是一个置身事外的观察家,看着自己的所作所为与其得到的对应反馈,并且在过程中实现自己在与他人相处过程中的“优化”。
要说有什么恶意或是功利性的目的倒也不至于,只是在审视自己时总有一些奇奇怪怪的想法,但时间久了有些难以感受到对方言谈或是反馈中的真诚的部分,也先入为主地很难区分究竟是出去感谢还是纯粹的情绪。
慢慢地,自己变得只会对这些对象才能放下心防:
- 一直陪伴着自己的以家人相待的挚友
- 感情中自己毫无防备付出的对象
- 共同度过艰难时刻的朋友(可能是糟糕的状态、崩溃的情绪等)
其实共性就是自己都曾主动在他们面前展现过极度脆弱敏感或是糟糕的一面,却被信任与接纳,并让自己在某个阶段意识到了自己依赖于这样的真诚陪伴。也许是对于这一点太过苛刻,抑或是自己已经并不那么习惯于在一段新的关系中倾注太多真诚,总觉得自己在情感上变得越来越消极和迟钝,也常常不再有更多期待,这也是我目前面临的最大困境。关于真诚与相处的思考与探讨仍在继续,希望能有所缓和。
游戏
这周其实并没有玩游戏,但想谈谈“游戏”。
游戏于我而言是既熟悉又陌生的一个事物。小时候的我是任天堂的死忠粉,一个 GameBoy,几盘宝可梦(当时还叫口袋妖怪)卡带几乎陪我度过了整个童年,各个版本都通关过无数次,对各种游戏内的收藏如数家珍;即使到了初高中依然常常通过模拟器重温那些经典,玩了古早版本的塞尔达与火焰纹章系列。
到了大学之后反而完全对游戏提不起兴趣,经久不衰的英雄联盟似乎只打了一局人机后再也没登录过,没去赶守望先锋的热潮,后来的炉石、王者也仅仅是浅试了几局后再也没开过,聚会时邀请王者开黑时我的一句“不太会”总是让对面一愣。
大概自己总是觉得有更重要的事去做,或是害怕自己沉浸游戏之后的愧疚感,我一直有些可以避免接触,久而久之也就丧失了兴趣,直到 17 年 Nintendo Switch 的出现。我似乎重拾了对于游戏世界的热情,囤了很多游戏,沉浸在海拉鲁大陆里完全不记得塞尔达林克的使命,为了培育自己的战队没日没夜地在宝可梦剑盾里孵蛋,为火焰纹章风花雪月里的一个限定道具思考一晚上战略...
其实游戏带给了很多,因为一次猜测她在剑三里究竟是长歌还是万花输了一杯星巴克,也算是就此结缘;每天一起在 Pokémon Go 抓伊布,刷日常任务和道馆,收获了很多快乐;后来的日常也是她玩剑三,我打宝可梦,也都一起玩成了养成与换装游戏。渐渐地,游戏的乐趣也不仅仅囿于游戏设计本身,而是寄托在其中的日常。
现在自己常常有想重新拿起手柄玩点什么,一直在切换游戏,却再难有勇气打开,也失去了那份心境。
状态调整
这周的工作还是在做前一个项目的筹备,因为之前也已经很熟悉这部分架构和代码了,工作量很可控,所以都能比较早地完成。
但即便时间有了一些自由,依然觉得内耗有些严重。其实最近也开始慢慢思考关于工作的性质与收获,也跟一个刚认识的很有缘的本科学弟聊到这一点,虽然工作初期得到了很多提升,也是必要的阶段,但因为并不是自己真正想做和感兴趣的东西,而是一个接着一个的外部需求,缺少了成就感所带来的正反馈,反而只能从自己的博文或是其他的学习输出中去弥补这一部分。
这几天基本 7 点多就能到家,多了很多自己可以支配的时间,但是前几天到家后有些无所适从,也没能好好利用或是休闲。Humura 在我上篇周报后提了很多建议,尤其是运动与睡眠上,但这周的调整空间很有限,甚至在脱离了褪黑素(已经吃完两罐),睡眠状况更加恶化了。
后面几天的时间安排上好了许多,但睡眠依然没有改善。感觉自己需要更多的自律来进行状态调整。这里所提到的自律倒不是专注于工作或是学习,而且更严格地划分自己的时间,以规律化的方式来保障自己工作学习中的劳逸结合、娱乐、运动,而不是一段时间的积极 + 一段时间的颓败,甚至会需要自己为自己每天找一些细微的动力或是期待,比如拍一些日常的视频或是培养一些简单的习惯。
学习与输入
这个部分会记录一下自己觉得有意思的东西以及工作学习的一些进展。
技术学习
这一周看了不少的工作之外的书与教程。之前在工作中用到了很多 Docker 与 k8s 的操作,对基本的操作有了一些了解,但是并没有很系统了解它们的原理和进阶用法,发现了一个很棒的『TechWorld with Nana』频道,讲得很清晰实用。
对于 Cosmos 的架构与核心机制部分已经完整学了一遍,正在画一些图做一些整理。工作后的第一个项目就基于 Cosmos 开发了接近半年,却一直对其底层有些一知半解,终于填了自己当时的一些坑,好好学习了一下。
博客相关
之前看到一种基于博客或是教学的学习观念,即学习一个新的知识点时以能够教会他人或是让读者更好理解为标准,以此为前提能够更明确自己的学习目标。出于这一点,我规划了几篇博文:
- Cosmos 原理与架构
- Docker 基础与实践
- k8s 基础与实践
下周需要更多时间放在写作上了。
输入
书籍
- 蒂姆库克传,对 Tim 的童年和一些观念还挺意外的
- 区块链架构与实现:Cosmos 详解,工作用到所以看了下,前四章挺不错的,对整个架构尤其是共识算法这一块讲得很细,后面详细的章节打算看看源码当作参考资料用到的时候看了
剧集
- 天才基本法,雷佳音的演技很好,张子枫也有些惊喜,看到后面发现平行世界的设定和《想见你》类似,但是逻辑和世界观差远了,剧情和人设变化有点无语
- 非常律师禹英禑,每周期待更新
动漫
- 夏日重现,越来越精彩了
- 继母的拖油瓶是我的前女友,连续看了几集,挺休闲的
周报 #05 - 工作、时间的掌控感与新朋友
前言
本篇是对 2022-07-25
到 2022-07-31
这周生活的记录与思考,也是休假回来后恢复工作的第一周。
经历了一个久违的“小暑假”后还未来得及作状态调整就马上投入了紧张的新项目筹备中,也推动着自己更多思考工作与生活的平衡。
工作与时间的掌控感
之前的一篇也有讲到过自己结束学生生涯踏入职场已经一年了,得益于第一个项目极端压力下的锻炼,我工作职责上的事务大多已经上手,即使遇到很临时的会议或是技术方案讲解也能比较从容应对。
工作中被信任的最大好处是有了不错的自由度,只要自己能够协调安排好整个任务的进度,获得一个不错的结果,就不需要屈从于无意义的卷;上下班时间还算正常,大部分项目的工作压力也并不会长期很大(因为是 to B 业务为主,所以大多赶一些交付节点),也可以在省下来的时间里学习一些其他东西。
原先一直觉得这种模式还不错,但最近的状态慢慢出了一些问题,感觉就像是自己的生活慢慢被吞噬了。
我对原先预想的下班后闲暇时间并没有办法做到那么好的掌控,随着日子一点点过去,下班时间有时候会更多做一些比较无脑的休闲活动,比如追剧或是刷刷 B 站上的一些微电影(偶尔刷到跟感情相关的又开始 emo)。
有时候莫名地几个小时过去了,因为第二天还需要上班,不得不吃点褪黑素睡了;更有几天回来就已经快 10 点了,想着躺下歇一会儿,再次睁眼就已经 1 点多了,起来打开电脑,却也没干什么事。
下班时间的生产力因此也就很难保证,甚至有时候是在强迫自己做一些事,对一位群友的描述很有同感:
“我现在有点面向周报学习的意思,每次想彻底躺了的时候,就想着,彻底躺了周报没写的咋办,然后就垂死病中惊坐起了。”
我反思了一下产生这种状态的原因,觉得还是自己还是很难从工作中得到自己的想要的提升,反而常常是在消耗自己的精神,下班后的时间也不足够恢复,致使自己的生产力完全被破坏了。虽然确实是没有什么任务量规定或是来自外部的 Deadline,但还是常常有些自我谴责,这与自己所追求的理想生活状态相去甚远。
好像是从某个播客中听到这样一个概念,我们都需要找到隐藏在 A 面之后的 B 面。如果把工作项目当作一个 A 面,B 面就是隐藏在其中找到一些点,不论是创新还是一些新的技术尝试都能够让自己有更多的主观意愿去完成;而如果把工作本身当作一个 A 面,那就需要去思考如何去填补这占据了我们绝大多数时间的工作另一面,可以是学习提升,也可以是一个简单的爱好培养。
当然,这种状态的改变并没有一个标准的解决方案,也从来不是一件可以轻易解决的事,但总归是需要去慢慢梳理。但目前是想着自己的下一份工作会更多考虑远程工作的模式,能够更好地平衡自己的节奏,最近也在了解一些相关资讯。
新朋友
这周的惊喜就是认识了几个 Twitter 上一直有在关注的朋友们,起因只是和 STRRL 讨论了一下 cloudflare pages 并且互加了友链,后来又进了小群认识了 Homura、Manjusaka、新一 和 Xuanwo 等大佬们,偶尔也会对于生活和技术有一些日常的交流。
自己在毕业之后好像就很少去主动社交了,现实生活中也不愿意参加有陌生人的聚会,再加上朋友圈入口已经关闭了四五年,也并不了解曾经的同学们现状,更加难以有什么交流的契机,一直处于封闭的状态。反倒是在 Twitter 上倒是从 5 月开始碎碎念很多,也常常惊叹于很多推友的有趣生活与思考深度,但一直也都是默默看着,极少有什么直接的互动。这一次认识了那么多新朋友,还是很开心和惊喜的,也希望之后能够多多交流,人都很 nice。
学习与输入
这个部分会记录一下自己觉得有意思的东西以及工作学习的一些进展。
技术学习
这一周先加入了一个新的项目,进行了一些环境搭建,牵扯到了不少和 docker 相关的一些操作,不过因为之前做过类似的,整体还比较顺利。然后因为涉及了 Cosmos 区块链,所以开始看 《区块链架构与实现:Cosmos 详解》,并且做了一些笔记,慢慢看。
但是没几天后就去指派到另一个项目的前期筹备,有很多繁琐的工作,连续加班了几天,但是开发进展不多,希望项目顺利。
这一周没进行太多其他的技术学习,CSAPP、合约开发和新到的 Go 语言相关的书都需要按照进度推进了。
输入
书籍
- 蒂姆库克传,虽然听说大多是一些报道和信息汇总,不过对苹果这家公司很感兴趣但是却一直对 Tim 很陌生,大概乔布斯的光环太重,所以也想了解一下
剧集
- The Most Hated Man on the Internet,Netflix 新出的纪录片,事件中的妈妈强大、自信且有趣,比起之前关于 N 号房的纪录片少了些沉重,多了一些悬疑节奏感。但是深夜看完依然觉得无奈(或者说是无力),只希望这个世界能多点善意和人性吧,哪怕只是变好一点点
- 非常律师禹英禑,女主还是很可爱,男女主也挺好磕
电影
- 独行月球,中规中矩的院线喜剧片,配乐和气氛渲染还是挺到位的,剧情的话有些低配版火星救援的感觉,并且结局有些过于核心价值观
动漫
- 夏日重现,每周都会期待更新的番剧
折腾小记
软件折腾
- Arc,一个新晋网红浏览器,尝试了一下,体验很不一样,目前还没发现什么硬伤,但还是更多只会作为一个辅助浏览器,毕竟 Safari 用得太习惯了
- Arctype,从某个推荐文章里看到的数据库管理工具,界面很好看,可以分多个工作区,也有一个内置可视化面板功能,还没详细玩,目前主力还是 TablePlus
看了 STRRL 上周的周报,也把自己的博客彻底迁移到了 Cloudflare Pages,迁移体验很无缝,后续使用感觉也很棒,至此我的 Serverless 博客系统为:
- Github 作为 Hugo 博客源文件和运行一些 Github Actions 来自动更新 About 页面
- Cloudflare Pages 托管博客,并且用在 Cloudflare 托管的域名进行解析
- 在 Railway 和 Vercel 托管了 Cusdis 评论系统和 Umami 数据统计系统
博客相关
这周没写什么文章,不过数据上有了一些小小的里程碑,首先是 Google 搜索达到了 1000 次点击。
然后也第一次月浏览量达到了 1 万左右,访客 3 千多。
需要继续加油多写一些了。
周报 #04 - 休假、亲情与城市的归属感
前言
本篇是对 2022-07-11
到 2022-07-24
这两周生活的记录与思考。至于延迟的理由 —— 我休假了!!!
休假
算上实习工作已经一年有余了,但因为项目一直在持续进行中,除了春节几乎没有完整的假期,也攒了不少调休。恰逢第二个项目圆满收尾,我向 leader 申请了休假,7 个工作日 + 2 个周末,有一种久违的放暑假的感觉。
我与家人
虽然疫情时而有反复,最后还是决定回杭州,回家。感觉自 20 年中离家之后,每次回来总是匆匆的,上一次还是国庆了,大约也就待了 3 天,除去亲戚之间的聚会,真正陪伴在家人身边的时间折下来大概也就凑不满完整的一天,只够将自己的近况和想法简单聊聊,似乎就踏上了归途。这次大概也是因为这大半年自己身上发生了不少事,有些疲倦了,只想好好地待在家里休息调整下,同时想多陪陪家人(主要是带我妹妹出去玩)。
其实自己没有那么显著地意识到自己的长大,但在家庭聚餐的饭桌上似乎已经成为带头向各个长辈敬酒的主力,小辈们出去聚会玩耍时也已经是自己在安排了,就连印象里一直都很小的妹妹过了暑假也要步入初中学堂了。就好像从某个时间起,时间就在加速流逝了,在匆忙的学业和工作中并没有什么感知,而只有当自己回到家体会慢下来的时光或是偶尔想起深藏在记忆里的零星小事时,才会感慨两句。
我与妹妹
我有一个小我 13 岁的妹妹,每每提及都会让同学朋友羡慕。这个年龄差不至于会有什么争吵冲突,而随着自己长大也能多照顾一些。高中时因为住校和备战高考,也算不上有很多陪伴,而大学之后更是四处奔波,大概只有寒暑假会稍完整一些。而工作后更是聚少离多,只有每天微信群里的闲谈和偶尔的电话,不知道她对我这个哥哥的角色如何评价,希望能合格吧。
所以这次回家带妹妹去拍了一些照、逛了步行街、做了手工、去了海洋馆以及一起去单向空间书店看书。有很多事似乎很稀松平常,但大概因为之前自己也还是太宅了而缺席,所以都还是挺新奇的体验,每次出游或是玩耍结束后手牵着手回家时能从中感受到一种静谧的美好。
这次还带了相机回来,又琢磨了下新买的大疆 RS3 稳定器(真的很好用!!!),拍了很多照片和视频,也算是为她接近尾声的童年留下了一些记忆碎片。
我与老师
初中毕业虽然也已经近十年了,但每次寒暑假或是这样休假的时候都会约初中班主任春哥出来吃饭、聊天,只是以往都有倪和占一起,而如今都已经四散在海外,之后的时间恐怕也比较难聚齐。大概是因为见面得很频繁,这么多年过去的竟也没感觉彼此有太多变化,也都像是朋友一样从学业、工作聊到感情、想法,常常不知不觉就四五个小时,也常常感慨竟然相识已经 13 年之久。
城市的归属感
说来有趣,因为高中毕业后前往武汉读了大学,后续又在上海、厦门等城市进行过为期不短的实习,没多久就赴香港读研,结束后又很快去北京实习工作了,也算是待了不少城市,但不论就环境还是对城市中人的感情来说,都很难承认自己属于哪里。
待得最长的杭州因为大学时期的缺席,有联系的初高中同学已经少之又少,最亲近的几个朋友也都纷纷离开杭州,大多在海外,这次回来后发现竟然连可以出来吃个饭喝点东西的人都一时难以想到,只好作罢;毕业后因为自己当时的学生创业还回去过几次武汉,毕业后尚有联系的也就几个导师、舍友和原本经常一起玩的四人组,然而也都分布在各地,只有出差才能见上一两面,而后续因为疫情爆发,也有两年多没有再回去;香港这一年则充满了紧迫感,除了感情外自己似乎也没有结识太多人,相处时间短暂,毕业后也渐渐没了联系;反倒是在北京因为本来就有几个好友,也因为工作项目与同事和一些工作伙伴结下了不错的友谊。
我一直比较宅,对城市气候或是风貌其实感知并不明显,对环境的适应力也还算不错,所以从来没有把城市作为自己考虑各种事情的重要因素,但这次回去后的很多想法也有所变化了。
只身一人在北京时虽然不至于会感觉有多苦,但总感觉一草一木都少了一些牵挂,似乎这些都与自己无关。而回到杭州哪怕只是河边走走,也能感觉到一些亲切;也会去自己常去的店看看,或是坐上 30 分钟的公交去吃心心念了很久的新丰小吃,抑或是在单向空间的书店里坐上几个小时重温以前在书店一坐一下午的惬意时光。
这可能就是一个城市所给人带来的温度与归属感吧,年纪越大对这些也更为在意。
学习、输入与输出
这个部分会记录一下自己觉得有意思东西以及工作学习的一些进展。
技术学习
第一周主要是在进行项目的一些收尾工作以及新项目的筹备,没有太多需要开发的部分,不过买了一些技术的书,准备休假回来好好沉淀一下。
技术类的主要是《用 Go 语言自制编译器》、《用 Go 语言自制解释器》、《Go 语言精进之路》这几本新书和一个自己计划很久但一直没读的《重构:改善既有代码的设计》,有了一些项目经验之后再读这些书感觉会更加深刻。
非技术的则买了一套思维相关的《金字塔原理》,作为一些思维方式的培养,后续都会做一些笔记。
休假前两天参加了之前所说的技术分享,主要讲了自己区块链学习的一些经历和经验,整体感觉还可以,后续也会将讲稿重新编排成博文发布。本来讲完就想整理了,但是马上休假了,虽然带了电脑,但基本没有工作或是学习,纯粹的放松了。
输入
书籍
书籍方面,继续在看『房思琪的初恋乐园』,应该这周能看完。然后也同时打算看几本偏向于信息的书:
- Working in Public,讲开源软件相关的
- 蒂姆库克传,虽然听说大多是一些报道和信息汇总,不过对苹果这家公司很感兴趣但是却一直对 Tim 很陌生,大概乔布斯的光环太重,所以也想了解一下
除了这些外,在单向空间看到一本自己好几年前看过的《斯通纳》,翻了一下,突然很想重温一下,感觉在自我寻找这一块会有新的感触。
剧集
- Normal People,普通人,之前看了一半多,后来莫名搁置了,Normal People,讲述了来自同一个小镇男女主及他们周边的一些故事,不知道是不是因为男主是英语专业或者是有同样的脆弱敏感的特质,感觉看到了很多自己的影子
- 非常律师禹英禑,一个律政题材的韩剧,主要是看了一点简介觉得女主人设比较可爱所以看了下
- The Bear,熊家餐厅,讲一个大厨回来经验家庭餐厅的故事,不长,节奏很不错,回程的高铁上看的
电影
- 新奇,对现在社会的感情、社交相关进行了一些思考,主要讲约炮文化的,但是感觉表达和转折都很奇怪,不推荐
- 灰影人,动作片,最近挺火的,据说是奈飞投入最高的电影,看下来有点 john Wick 的感觉
动漫
- 鬼灭之刃,第一季很喜欢,后来一直没追了,这次把无限列车篇和游郭篇都补了,很喜欢
- 天气之子,之前一直想看,剪辑和翻拍都看了好多版本了,正片一直没看,补上了,很新海诚
- 夏日重现,还在追,剧情越来越紧凑和想象不到后续发展,很惊喜了
其他
最后发色选择了灰绿色,漂了两次染了一次,自己感觉还挺不错的,虽然略有点点浮夸,但是很动漫,大概自己迟到的叛逆期终于来了,后面也可以多试试其他风格了。
周报 #03 - 健康、目标与生活的节奏感
前言
感觉每次从标题开始似乎就要给过去的这一周定一个主题,有时候也并不那么好概括,但还是坚持那么做了,似乎这样生活就会像是一个个篇章拼凑而成,在很久之后回顾也会像是构成一本书那样的充盈感。
本篇是对 2022-07-04
到 2022-07-10
这一周生活的记录与思考。
健康
不知道是工作疲累还是精神上的一些残留的影响,最近其实感觉到自己的健康状况有下滑的征兆,也算不上很严重,但就是常常能感受到一些虚弱感,有时候甚至感觉身体不是自己的。
似乎这么多年以来一直没有怎么关注过自己的健康,体检虽算不上定期但有在做,都没什么大碍,因此也就没有过多关注,有时还有些小得意自己熬了那么多年的夜,视力和身体都没受到什么影响,但最近的征兆也让自己不得不开始警惕一些身体的变化了。
首先需要注意的就是饮食了,因为有坚持断食(16+8),也就是保持 16 小时不进食,然后将主要的两餐集中在剩下的 8 小时内,所以很久没吃早餐了。由于工作日需要规律地去公司,基本能保障午饭在 12 点左右准点吃,偶尔在下班后和同事一起吃个便餐或回家后随便吃点。然而到了周末就很难控制,有时一天仅仅一餐或是水果,这部分也是需要调整的,也要注意一下营养均衡。
睡眠则是一直以来知道却很难调整的问题,过去的两个月像是被剥夺了睡眠,每天大约都是 4、5 点才入睡,8 点多起来,紧接着通勤,然后进入一天的工作。其实精神状态神奇地没有太多影响,甚至连午睡都不需要,但也已经有了一些隐形的消耗。这周有刻意调整至从凌晨 2 点多至早上 8 点,感觉稍微缓过来一点。
7 月会去进行一次全身体检,说实话还是挺担心结果的,就像大学时创业熬得最狠的那两年也没敢去医院检查,似乎没有一个确定的指数就可以心安理得地继续透支,所幸当时一切都好,希望这次也一样。
目标
两年多之前,在我重构自己博客的时候就在『关于』页写过这样几段话:
生活方面,希望能够和现在的挚友一直相互支持走下去,和家人保持现在这样亦亲亦友的关系,和在意的人一起面对人生的挑战,同时也能认识更多有趣的人。
专业方面,希望一直有所进步,能够在开源世界留下一些痕迹。
经济方面,希望能自主无虞,足够支撑做自己想做的事,探索更多元的未来生活。
社会方面,希望有机会多参与一些公益活动或其他形式的善举,为世界带来一些微小的改变。
很有趣的是,大概是当时自己定的也并不具体,或者是自己这方面一直也没有什么进展,在现在这个节点回顾,也没有什么可以补充的,只是会更加具象化地思考自己想成为一个怎么样的人。
总的来说,我想成为一个有趣的人,想过一些不一样的生活,而自己所追求的不一样也希望不仅仅是依赖于工作内容或是环境的改变,而是想或多或少找到或者在尝试和探索自己想做并且或许也恰巧擅长做的事,哪怕没有能力全职或是全身心投入做,也希望能够找到并且坚持下去吧。
当然,还是想更具体一点,这部分之后也会在周报中作记录了,作为一直探索的记录,至少要多看看一些自己向往的生活方式,并且拆解自己想要做到所需要改变和付出的。
生活的节奏感
本周分别和两个朋友出去吃饭了,这大概是自己这几个月以来除了同事以外在现实中面对面交流最多的时候了,也是我在北京极少的可以交谈的朋友了。
其中一位是我本科学校大我一届的学姐,一直以来都有保持比较亲近的联系,定期会聊聊近况,之前去广州旅游的时候也受了很多照顾,但见面或者聊天也远远算不上频繁。不知道是不是以前因为有大学时『会长->部长』或者是『学姐->学弟』这样的身份加持,似乎一直没有很深入内心的交流,反倒是都工作之后对各自的生活状态有了更深的了解,也能更感同身受一些,给予互相的关心和支持。
另一位也是本科学校的学姐,不过是毕业后我的导师亮亮介绍认识的。当时我正要前往香港,亮亮说她之前也在香港读研并且后续也在香港工作,可以交流一下,也互相有个照应。不过我刚到香港一个月,学姐就因为个人规划离开了,这是当时的一些心绪:
不知不觉也接近两年了,没想到后续自己来了北京工作,也是很巧合。一直以来她的生活状态和态度都是我向往的那种,不论是之前的香港还是现在在北京,即使工作环境和节奏截然不同,她依然能在周末或是平时闲暇的时候去学小提琴、画画,去冲浪、拳击、攀岩、跳舞等。
她有说希望之后的每个周末都能做一些至少自己觉得有意义的事,感觉她一直以来都比较能够践行自己的一些想法。我觉得也不仅仅是执行力的问题,这方面自己可能也算不上差,但能够很明显地感受到她会能够清晰地定义自己的工作、生活与个人想法之间的边界,我将之称为生活的节奏感,也希望自己之后能够做得更好。
很有趣的插曲是在日料店和老板及一众朋友聊了很多,可能有北京人口音的加持和离奇的经历,整个聊天像是脱口秀一样,也第一次觉得自己也挺能接梗的,也是近几个以来很难得的纯粹放松的一次体验了。
学习、输入与输出
这个部分会记录一下自己这边所看的各类影音书籍、折腾的好玩的东西以及工作学习的一些进展。
技术学习
需要承认的是这周不管是工作产出还是闲暇之余自己的学习进度都有些落后。主要是因为项目已经到了尾声,工作任务大多是配合完成一些测试和文档更改,以及讨论一些技术方案,并没有什么实质开发工作;剩下的就是给公司新项目客户讲解我们的产品与实现方案。
即使如此,琐碎的事还是不少,回家常常也 9 点之后了,没有拿出很完整的时间来看课程或是看书,下一周需要有所调整,主要也还是侧重在合约开发和 CSAPP 这两个部分。
受邀作为嘉宾参加一个 7 月 14 日的技术分享,面向还挺有名的一个社区,半小时左右,主题是『web2 工程师如何进入 web3』,我也是第一次参加那么大型的技术分享,而且自己也就是刚入行不算很久,有些紧张,需要好好准备一下。
输入
书籍
书籍方面,这周看完了之前通勤时候一直在看的『洛丽塔』,开始看『房思琪的初恋乐园』,慢慢习惯于在拥挤的地铁上看书了,这样慢慢积累也能看很多。
看了 @yihong0618 的这个 thread,也想重温村上的很多书籍了,记得高中的时候和同学一起看『1Q84』,对其表现形式印象深刻;大学有段时间阅读像是『当我谈跑步时,我谈些什么』也给了我很多生活的思考,也许这个阶段重读一些也会有不一样的体验吧。
剧集
- 黑袍纠察队,很新颖的反超级英雄题材,三季的质量也一直很高,很值得推荐
- 黑客军团,这个几年前看过前几季,不过就重温了以及追了最新的一季,很精彩,许多地方也发人深省
- High Score,在每天吃饭的空档看的一部讲电子游戏发展史的纪录片,算不上出彩但是是个还不错的科普
电影
- 银翼杀手 2049,有些末日题材的加上爱情的元素,可能在科技发展到了现在再看这类题材少了一些惊喜感却有了一些对于未来的担忧甚至是绝望
- 她,同样是科技+爱情的元素,讲的是与人工智能恋爱的故事,说实话倒是有不少感同身受,大概自己也过于以来和沉迷科技,甚至忽略了很多人的情感生活的真实感
- 无依之地,描述了美国一批无家可归的底层人民的生活状态,可以作为另一种视角,但刻意渲染的感觉太重以至于无法真正打动
- 罗马假日,经典就是经典,奥黛丽赫本真的美
- 土拨鼠之日,之前看过一个日本 up 主拍的一个土拨鼠之日风格的微电影,一直想看,补上了
- 波斯语课,记得之前重映过错过了没去看,也是补一下,但没有很惊喜,同类型的战争题材里我可能还是更喜欢『美丽人生』
- 起风了,也是一个战争题材,高中时就有被推荐发现自己一直没看,补上了,挺喜欢的
动漫
- 辉夜大小姐想让我告白 第三季,恋爱喜剧,很喜欢,每一季都挺惊艳的,结局真的甜到了
- 间谍过家家,也是偏喜剧,前几集比较惊喜,后面就有些过于夸张,有些人设也不太一致,不过总体来说很欢乐
- 夏日重现,最惊喜的一部新番了,世界观和节奏感都很惊艳,还是个半年番,继续追
- 继母的拖油瓶是我的前女友,感觉好像自己的二次元属性突然就觉醒了,开始继续追一些番,名字奇奇怪怪但是看了一集还不错的新番
输出
这周还是写了有两篇挺满意的文章:
惊喜的是第一篇入选了少数派的会员精选,也是解锁了新成就;后一篇刚完成发给了编辑,等待反馈意见;倒是很早之前的那篇区块链相关的约稿自己还没开始动,可能也要提上日程了。
慢慢也有了自己写这类文章的风格、行文逻辑,也能有一些自己的写作节奏和固定频率了,之后继续积累一些想写的选题。
习惯、兴趣与改变
这周在习惯和兴趣培养上也没什么进展。后面至少健身环大冒险要有一个固定频率开始了,以及想学的一些东西也要开始了,需要克服对于生活的倦怠感了。
然后有想染一下头发,目前有考虑奶奶灰或是亚麻绿,还没选好。
其他
最值得一提的就是我现在 6 年级的妹妹开始写网络连载小说了,是仙侠相关题材的。每天晚睡一小时用 iPad 码字一个小时,大概坚持了一周日更了,发布在网络小说平台上,得到了挺多阅读和曝光的,还有很多人催更,我们现在还经常互相卷,经常问问对方是不是在写文章。
下周打算开始调休假,陪陪父母家人,上次回去也已经是去年国庆了,然后也想找机会出去旅游,但是疫情实在是带来了很多变数。
Warp,iTerm2 还是 Alacritty?我的终端折腾小记
前言
作为一个开发者,不论是本地代码运行调试还是在远程服务器上进行项目的部署运维,都离不开下图所示的终端,也就是科技电影中常出现的黑窗口。
各个操作系统一般都有自己默认的 Shell,如 Windows 操作系统下的“Powershell”、macOS 与 Linux 系统的 bash、zsh 等;带图形版界面的系统也都会预置终端仿真器(Terminal Emulator),如 macOS 平台下的“终端.app”以及 Linux 各发行版自带的终端程序等。
作为一个生产力工具爱好者与颜控,我对终端配置美化的折腾从未停止过,也几经迭代。可能与大多数开发者不同的是,我并不是某种特定方案的拥趸,而是会去尝试各种工具,依照自己的习惯进行配置降低各个方案之间的操作差异,在日常开发过程中根据用途无缝切换使用,有时甚至是随机选一个使用以切换心情。
本文主要讲述了我的终端方案选择及配置细节。
终端配置方案需求
终端配置分为几个方面:
- 工具配置。在使用 macOS 或 Window 系统进行开发时,我们往往需要一个终端仿真器(Terminal Emulator)连接到本机开发环境或远程服务器。这通常是我们开发过程中的常驻应用,其颜值、响应速度与快捷键等也会很大程度影响我们的开发体验,因此是我们配置与美化的重点。
- 功能配置。我们在使用命令行对系统服务/文件进行一些操作时,需要使用 Shell,如 bash、zsh 等,对其进行一些命令提示、自动补全等配置能有效提升我们的使用体验。
- 集成配置。除了运行 git 等常用命令行工具外,终端往往还需要满足文本编辑、多任务管理等进阶需求。因此,通过终端配置实现 vim、tmux 等工具的深度集成也是我们开发体验优化的重要一环。
我梳理了自己的终端使用需求,列出了以下几个核心要点:
- 风格简约。作为一个每天都需要长时间面对的软件,再 fancy 的主题也会看腻,甚至影响自己的注意力。因此,我对终端工具外观与操作逻辑配置的基本思路为 Minimal Distraction,简约而不单调。
- 响应速度快。最开始我对终端的配置侧重在美观与功能,安装了很多插件配置,但也出现了每次软件开启会有几秒延迟的不良体验。因此,使用过程的响应速度也是我方案选择与优化的重点。
- 可定制性。因为我的代码编辑器与窗口管理使用的都是 Vim 『HJKL』 特殊键位,因此我也希望能够进行比较灵活的快捷键配置,降低自己在各个软件直接切换的成本。
- 可移植性。我时常需要在不同的设备上进行操作,偶尔也会有设备的迭代,会希望自己的配置能比较方便地移植到新设备/服务器等,最好是可以复用同一个配置文件。
- 可拓展性。我希望能够根据自己的需求拓展一些功能与插件,如使用 fzf 对文件或命令历史记录进行检索,通过命令跳转至指定目录,使用 waka-time 记录自己的编程时间等。
我的终端配置说明
即使需求已经比较明确,找到合适的工具与配置方案依旧是一件困难但充满乐趣的事。接下来我将逐个对我仍在使用并且比较满意的方案进行描述,并提供我的配置文件供大家参考。
此外,因为我大多数时间都在 macOS 系统上进行开发,所以我的终端工具配置主要是基于 macOS 平台的,但有些工具或插件(如 Alacritty、ohmyzsh、Neovim 等)是跨平台的,配置方式大同小异,可以根据实际情况进行参照与配置。
Warp
我本身是一个折腾流,会希望能自己能够对各类配置有足够的定制化空间。然而,如果要我只推荐一款工具给刚使用终端不久的新手,我会毫不犹豫地选择『Warp』。
Warp 是一个基于 Rust 开发的速度极快、功能强大且开箱即用的现代化终端工具。不需要额外配置就支持智能提示、AI 命令智能搜索、命令历史查询、自定义 workflow 等功能。
我是很早参与 Warp 内测的那一批用户,即使是在功能还很不完善的早期,我也被它精致的外观和顺滑的使用体验所惊艳到了。因为基于 Rust 语言开发,Warp 的命令执行与响应速度很快,并且它还内置了很多常用功能,我们无需在 Shell 层配置使用历史记录搜索、命令提示等各类插件就能获得强大的功能支持。
它还有很多传统终端不具备的特色功能,如“block”的概念,每一条命令的执行都以一种“命令块”的形式呈现,可以通过上下左右键在各个 block 之间移动,避免了有些命令输出结果太长导致需要一直拉动滚动条阅览;并且我们可以通过右上角对特定 block 进行书签收藏、命令复制、内容检索甚至在线分享等。
与常规终端工具体验不同的是,Warp 的命令输入窗口长期固定在底部(更接近于 IDE),将我们命令输入与结果反馈进行了视觉上的分离;并且它的输入模式接近于文本编辑器,我们可以通过鼠标或是键盘任意移动光标编辑、修改命令或是输入多行命令依序执行,这也是我所认为的 Warp 的 killer feature。
我们仅需在输入框使用对应的快捷键即可唤出历史记录检索、自定义 workflow 等功能,并且可以使用鼠标滚轮或是方向键进行选择,十分灵活。更强大的是,当我们使用 Warp 通过 SSH 连接到远程终端时,这些快捷键依然有效,如历史记录搜索等,而无需在目标服务器进行配置。
另外值得一提的是我们可以通过内置快捷键 Command+D
与 Command+Shift+D
来水平或垂直拆分终端,无需集成其他工具或进行额外配置。
随着技术的发展,文本编辑器不断迭代更新,增加了丰富的功能并提供了更好的使用体验,然而与我们开发人员朝夕相处的终端却一直发展迟缓,Warp 正是在这个阶段应运而生,也正如它官网所描述的那样:
The terminal for the 21st century.
iTerm2
在使用 Warp 之前,我的主力终端工具为 iTerm2,相信这也是很多开发者刚入手 Mac 时的必装软件(毕竟默认终端的颜值和可玩性都不太行)。iTerm2 是一个集美观与功能性为一体的老牌终端工具,即使是默认配置也已经很好的满足了我们的需求。
外观与配色
我对一位 YouTuber 『Takuya Matsuyama』的配置加以改造,定制了一个性冷淡风外观方案。
首先在 偏好设置 - Appearance 部分对主题、Tab 栏与状态栏进行如下配置,保持较为简洁的布局。
完成主题配置后,右键底部状态栏可进行详细配置。我选取了部分状态栏组件实时显示设备状态,这部分可根据自己的偏好进行选择。
在 Profile - Colors 面板选取自己的主题配色或导入其他配色方案。可以点击这里下载我的配置文件,导入并根据自己的需求进行调整。
完成配色方案选择后,我通过调整 Transparency 和 Blur 来实现背景透明与毛玻璃效果(即窗口模糊),此处可以根据具体设备的视觉效果进行调整。
完成了终端工具的配置后,我们还需要对 Shell 进行配置,以集成一些定制主题、智能提示、搜索历史记录等拓展模块,我使用的是 zsh + ohmyzsh + starship 方案,因这些配置各个方案通用,详见下述 Alacritty 配置说明部分。
多服务器管理
目前我主要使用 iTerm2 来连接我的各个远程主机/服务器,它提供了方便的多配置管理功能,可以通过设置不同的 Profiles 实现不同服务器或配置环境的快速切换,并且可以用醒目的 Badge 来作为标识。
当我们在工作或个人使用中需要连接到多台开发机时,可以通过 Command+O
或通过右键 Dock 栏 iTerm2 图标选择对应 Profile 打开服务器,同时也可以通过内置快捷键 Command+D
与 Command+Shift+D
来水平或垂直拆分终端,便于多服务器同时操作,无需不断切换窗口。
Alacritty
iTerm2 已经是 macOS 平台上颜值与功能都非常平衡的终端工具了,但综合使用下来它的响应速度与配置的自由度还是不那么完美,因此我现在主要将其用于连接远程服务器,本地常用终端后续更换为了 Alacritty。
Alacritty 也是一款使用 Rust 编写的跨平台终端工具,提供了一些基础默认配置,并通过 ~/.config/alacritty/alacritty.yml
文件进行各项自定义配置,可以点击这里访问我的完整配置。
外观配置
外观部分我主要通过如下配置进行窗口与字体配置,实现了一种半透明的极简配置,甚至都没有任何边框与按钮,其他配置可自行查看,如选中即复制等在 iTerm2 上惯用的功能均可通过几个简单的配置项实现。
window:
opacity: 0.85
padding:
x: 18
y: 16
dynamic_padding: false
decorations: buttonless
font:
normal:
family: "MesloLGSDZ Nerd Font Mono"
style: Regular
size: 13.0
use_thin_strokes: true
ohmyzsh + starship
我使用 zsh 作为默认终端,通过 ohmyzsh 来拓展插件功能。zsh + ohmyzsh 是目前非常流行的 Shell 配置方案,其具备了丰富的插件系统,可以通过几行配置轻松实现各项拓展功能。首先,我们按照其官方说明进行安装。
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装完成后,通过在 ~/.zshrc
中添加如下配置来启用 ohmyzsh:
export ZSH="$HOME/.oh-my-zsh"
source $ZSH/oh-my-zsh.sh
我配置了 starship 来美化 Shell 提示。同样,我们根据官方说明进行安装配置:
curl -sS https://starship.rs/install.sh | sh
完成后在 ~/.zshrc
中添加如下配置即可:
eval "$(starship init zsh)"
此外,我们还可以通过在 ~/.zshrc
的 plugin 部分添加插件配置,例如我配置了如下插件支持,实现了智能提示、语法高亮、Ctrl + R
搜索命令历史记录以及 j + <path>
实现快捷跳转等。
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
zsh-history-substring-search
autojump
zsh-wakatime
fzf-zsh-plugin
)
我的完整配置可点击这里进行查看,各插件安装说明详见官方文档。
tmux
因为 Alacritty 本身不提供窗口拆分、Session 管理等功能,所以我们需要集成 tmux 这一强大的跨平台窗口管理工具。
macOS 平台用户用过 brew install tmux
安装即可,其他平台可根据官方说明进行安装。
其通过 ~/.tmux.conf
进行配置,点击这里查看我的配置,因其配置使用需要一定学习与记忆成本,本文不做详述,建议通过官方文档或其他完整教程进行学习。
Neovim
我们的日常开发的代码编写一般在 VS Code 或 Jetbrains 家的 IDE 中进行,而调试则需要使用终端,如果不想频繁切换于各个软件之间,我们可以选择 vim 这一可用于命令行的编辑工具。
然而,原生 vim 就是一个简单的窗口,与我们的配置好的终端显得格格不入,因此,我们也将对 vim 进行美化配置。限于篇幅,本文不会涵盖 vim 的具体配置使用相关内容,仅对我的配置方案进行描述。
我使用的是 neovim 这一 vim 的衍生版本,其高版本采用 lua 进行配置与插件管理。我使用的我的一个朋友 Cluas 定制的方案,并在其基础上进行了一些修改调整,可点击这里查看,仅需将 nvim/
目录 clone 或下载后复制到 ~/.config
即可。
其显示效果如下:
快捷键配置
tmux 是一个强大的窗口管理工具,然而每次都需要使用 <Ctrl+b> + %
或 <Ctrl+b> + :
来进行水平或垂直分屏,或是使用 <Ctrl+b> + c
来新建窗口等操作十分繁琐。
那么,有没有能够通过 macOS 自带的例如其他终端编辑器使用的 Command+D
、Command+Shift+D
或 Command+T
来实现分屏或新建窗口等配置呢?
经过了一番调研与折腾,我参照着 Josh Medeski 的这篇『macOS Keyboard Shortcuts for tmux』完美实现了这一需求。
其基本实现方式为,在终端输入 xxd -psd
命令后,键入所需要映射的 tmux 快捷键,如 <Ctrl+b> + c
,其会显示该输入的 hex codes 为:
^Bc
02630a
其中,02
代表 <Ctrl+b>
,63
代表 c
,而 0a
代表回车键,因此,在 tmux 中新建窗口的快捷键对应 hex code 为 \x02\x63
。我们在 ~/.config/alacritty/alacritty.yml
中的 key_bindings 部分配置如下选项即可:
key_bindings:
- { key: T, mods: Command, chars: "\x02\x63" }
其他快捷键配置实现原理一致,可点击这里查看我的所有快捷键配置并自行修改调整。
总结
至此,我对我目前所使用的三种终端工具进行了介绍与配置说明,开箱即用的 Warp 有其强大之处,iTerm2 在易用性与定制化上实现了不错的平衡,而 Alacritty 也自有折腾的乐趣。
如我前文所述,有时候换一个终端就是一种全新的心情,闲暇时不断优化折腾也不失为一种放松。当然,每个人的终端配置都各有自己的偏好与特点,本文只是对我的方案进行了介绍,更多满足了自己的审美追求与功能需求,希望能够为你的终端配置提供一个参考,如你在配置中遇到问题或有了更好的优化建议,也欢迎交流。
参考资料
基于 frp 内网穿透的瘦客户端开发工作流
前言
在之前的『GitHub - 个人工具箱』项目中,我提到家里放置了一台长期开机的 Mac Studio 和一个装了 Ubuntu 系统的 Raspberry Pi 3b+ 微型树莓派设备,在家时我通常是将 Mac Studio 连接显示器进行操作或通过 Chromebook 终端 SSH 连接访问。
结束居家办公后,需要每天往返于公司与家里。因为不想每天背着电脑通勤,我将之前的 16 寸 MacBook Pro 主力开发机(真的很重)留在了公司用于工作项目开发使用。虽然可以通过 GitHub 与 GitLab 同步代码,以及通过 OneDrive 与 iCloud 同步文件,每天总还是觉得是在维护两套桌面开发环境,有些配置环境的变更需要双倍的工作量,带来了很大的心智负担。
此外,家里的 M1 Max 芯片机器性能远好于老 Intel MacBook Pro 笔记本,于是,我开始琢磨公网远程访问家庭设备的方案,并实践一种瘦客户端工作流,本文是对这套工作流的一个记录与总结。
瘦客户端(thin client)工作流
被『Teahour』Podcast 的这期『#95 - 用 Chromebook 做开发是什么样的体验?』种草,第一次了解到了瘦客户端(thin client)开发这种模式。
基本概念
瘦客户端开发是一种日渐流行的开发模式,它的主要理念是自己所使用的开发输入设备(如笔记本、平板电脑等)上并不安装各种开发环境,而是通过终端、VS Code Remote 或 Jetbrains Client 等客户端程序作为入口来连接自己的远程主机或服务器。这种方式有如下好处:
- 可以最大程度简化自己的开发环境,只需要一个终端和一个浏览器即可完成大部分开发工作,可以降低设备成本,甚至使用 Chromebook 或 iPad 即可完成日常开发工作
- 减少办公场所的限制,可以携带便携设备在咖啡厅或其他场合自由使用,比起本机运行各种开发环境,这种方式也拥有更久的续航
- 不论从哪个设备上进行开发访问,都能确保自己的开发环境与进度保持一致,降低环境同步与维护成本
- 往往我们的开发环境为 macOS 或 Window 操作系统,有时本地开发环境会与实际项目运行环境存在一定差异,而在 Linux 系统进行远程开发可以有效降低这种差异,提高开发效率
- 我们可以将大多数的成本集中在一台性能较为强劲的设备,满足长期开发需求
- 在有临时的开发需求时,我们可以随开随停一些云服务器,节约成本并提升开发效率
- 像 Deep Learning 等领域需要使用 GPU 等特定设备进行运算,无法在本地机器进行开发
我的瘦客户端工作流
为了降低成本,我的瘦客户端工作流主要基于我自己所搭建的一套内网穿透方案(下文会详细讲述方案原理及搭建方法),在公网中从各个 Client 访问家里性能较强的主机与 Server,完成主要开发工作。
我目前 Client 端的主要设备为:
- 16 寸 MacBook Pro,长期放在公司,作为工作机使用,主要用于浏览网页、文档以及通过 iTerm2 终端工具连接到各个远程主机或 Server 进行开发工作,并通过 Git 管理代码与项目
- Google Pixelbook Go,主要是在咖啡店、家中沙发或其他地方进行一些技术学习、博客撰写或个人项目开发
而我的 Server 端分以下几类:
- Mac Studio 主机,连接电源长期开机,是我的主力 Server,通过内网穿透供客户端从公网连接访问,在家办公或学习时连接显示器与键鼠也可以作为客户端连接其他服务器主机
- Raspberry Pi,装了 Ubuntu 系统作为主要服务运行与调试环境,主要运行一些服务,通过内网穿透供客户端从公网连接访问
- 个人阿里云 ECS、腾讯云轻量级服务器或其他公司提供的项目开发环境,主要用于一些项目服务的运行与调试,如链环境等
- GitHub Codespaces,参加了内测,GitHub 为个人项目提供多达 10 个项目的运行环境,我主要用于 Solidity、Rust 或前端学习项目的开发,这样可以保障在不同机器甚至浏览器连接时保持一致的环境,不需要自己重新配置搭建,不过出于安全性考虑我不会运行工作项目或一些涉及个人敏感信息的项目
我的瘦客户端开发工作体验
瘦客户端并不仅仅是一种工具技巧上的优化,其初衷本就是一种工作模式的“极简主义”。践行了几个月这样的开发模式,能明显感觉到自己用于开发环境调试与维护的时间减少了,而将更多的注意力放在代码与服务本身,“即开即用”与“随开随停”两种模式的无缝切换也让自己可以时刻切换工作状态与项目,极大减少了环境冷启动、配置等时间成本。
虽然我对软硬件有着自己的使用体验追求,但并不是一个方方面面都追求极致的人,而是遵循着一种“Just Enough”的理念,满足我的当下使用需求即可。例如网络环境方面,我家中就是普通的 100M 宽带网络环境,也并未在带宽与路由器上有刻意折腾。整体体验下来,不管是打字输入还是获取实时显示,操作过程中的网络延迟几乎可以忽略不计(我的主要使用场景为使用 macOS 系统下的 VS Code Remote 或 iTerm2 终端工具,通过 SSH 连接至远程主机或服务器进行开发,以及偶尔使用 Termius 的 SFTP 功能进行文件传输,可供参考),也几乎没有因网络环境而断连的情况。
我仅在配置树莓派时使用过 VNC 进行远程桌面控制,并未进行其他高度依赖于图形界面的操作,网络延迟尚可接受但并不是很建议。
网络远程访问需求分析
关于异地网络访问的方案与原理,少数派的这篇『异地网络远程访问指北』中已经对各个方案进行了详细的叙述与评估,我仅仅按照个人需求从方案易用性、费用等维度进行考虑,大家可自行阅读选取适合的方案。
首先,我整理了一下网络条件与需求。
网络条件:
- 租房随便办的短期宽带,没有提供公网 ip,申请估计也很麻烦
- 家庭无线路由器好像也是小米一个普通的,没有怎么折腾
- 因为工作和个人开发需要,在阿里云和腾讯云都有服务器长期续费,有公网 ip
远程连接需求:
- 通过公网 SSH 访问 Mac Studio 主机,并能够在有需求的时候开放特定端口
- 通过公网 SSH 访问树莓派,并能够在有需求的时候开放特定端口
- 要求连接稳定快速,且尽量复用已有软件与服务,避免额外开支
- 易于拓展新设备(如购入新的树莓派)与配置新端口映射(开放新的服务)
- 因为家里的网络完全由 Surge 作为软路由托管,已经进行了关闭 DHCP 等配置,因此尽量不要在光猫与路由器层作配置
- 能够对家庭网络环境连接情况与树莓派 Server 资源情况进行实时监控
frp 内网穿透方案
经过一番调研,我选择了开源项目『GitHub - fatedier/frp』,根据其官方文档描述:
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性。
这完美满足了我的需求,我仅仅需要复用自己购置的具有公网 ip 的阿里云服务器作为中转服务器,部署 frp 服务端,暴露对应端口,在需要从公网访问的家庭设备中部署 frp 客户端并进行端口映射,即可实现内网穿透。
方案架构
首先,我在自己有公网 ip 的服务器上部署了 frp 服务端并暴露了对应的端口。
我家中的内网环境下主要有两台长期连接电源开机的设备,一台 Mac Studio 主机,一台装了 Ubuntu 操作系统的树莓派 Server,主要通过网线/Wifi 连接至无线路由器。我在两台机器分别按照官方说明安装了运行了 frp 客户端,通过配置连接至 frp 服务端,并对 SSH 等需要开启的服务端口映射(如将树莓派的 SSH 服务端口 22 映射到阿里云服务器的 6002)。值得一提的是,因为 frp 客户端会主动发送请求服务端,因此即使更换了网络环境也无需重新配置,仅需要保证其网络环境能访问到安装了 frp 服务端的中转服务器即可。
此时,我的阿里云中转服务器已经可以将我们的内网环境与服务暴露在公网环境中了。当我在公司时,就可以使用笔记本、平板或手机通过阿里云服务器的公网+对应服务的端口进行访问了,如通过终端远程 SSH 连接至 Mac Studio 进行开发工作。
同时,我们会想对家里的网络环境以及两台主机的状态进行实时监控,以便于维护。我使用了 Surge macOS 端作为软路由托管了家中所有设备的网络,并使用了 Surge iOS 端的云通知功能,对家庭的网络状态进行实时监控。此外,我使用了 ServerCat 软件对家中的树莓派 Server 进行资源监控,甚至可以精确到温度等,与云服务器体验无异。
frp 的配置比较简单,按照官方文档进行配置即可,我的配置流程如下。
frp 服务端配置
我的阿里云装了 CentOS 操作系统,其他 Linux 发行版也大同小异。
服务安装与配置
首先登录阿里云服务器的终端,通过以下命令安装下载 frp 程序(注意,需要根据自己的操作系统从『GitHub - fatedier/frp』项目的 releases 页面下载自己操作系统对应的版本、解压并进入目录。
wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz
tar -zxvf frp_0.43.0_linux_amd64.tar.gz
cd frp_0.43.0_linux_amd64/
其中的 frps
与 frps.ini
是我们需要关注的文件。frps
即服务端程序,而 frps.ini
则为对应的配置文件。我们使用 vi frps.ini
编辑配置文件:
[common]
bind_port = 7000
dashboard_port = 7002
token = password
dashboard_user = admin
dashboard_pwd = 123456
vhost_http_port = 8080
因为我想通过控制台可视化我们的 frp 服务的运行状况,因此同时还配置了 dashboard 相关参数,可以根据自己的需要进行选择,保存或记住本配置,后续使用 frp 客户端连接服务端时需要与之对应。保存配置后即可通过 ./frps -c frps.ini
启动服务端。
当然,我们需要配置其开启自启与后台运行,以免每次重启服务器都需要重新配置。
vi /lib/systemd/system/frps.service
添加如下内容并保存,注意需要将 frps
与 frps.ini
的路径改为自己的实际路径。
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/path/to/frps -c /path/to/frps.ini
[Install]
WantedBy=multi-user.target
服务启动与开机自启配置
完成配置后,即可通过 systemctl start frps
启动服务端。
我们在命令行键入以下命令配置服务开机自启:
systemctl enable frps
至此,我们的服务端配置完毕。
frp 客户端配置
服务安装与配置
frp 客户端配置和服务端配置类似,通过 wget
命令下载对应版本的 frp 程序,解压并进入目录。
wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz
tar -zxvf frp_0.43.0_linux_amd64.tar.gz
cd frp_0.43.0_linux_amd64/
其中的 frpc
与 frpc.ini
是我们需要关注的文件。frpc
即客户端程序,而 frpc.ini
则为对应的配置文件。我们使用 vi frpc.ini
编辑配置文件:
[common]
server_addr = 114.114.114.114
server_port = 7000
token = password
[pi]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001
此处的 server_addr
和 server_port
需填写实际的中转服务器的公网 ip 与端口,token
需填写之前配置的 token;下面为自己的需要连接的服务配置端口映射,local_ip
与 local_port
需填写客户端的本地 ip 与端口,如需要开启 SSH 服务则为 127.0.0.1
与 22
,而最后的 remote_port
则为该端口在中转服务器中的端口映射。
服务启动与开机自启配置
Ubuntu
在树莓派的 Ubuntu 系统中,我们通过 vi /etc/systemd/system/frpc.service
新建或编辑 fprc 服务配置文件,添加如下内容并保存,同样,需要将 fprc
与 fprc.ini
修改为自己的实际路径。
[Unit]
Description=frpc daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/path/to/frpc -c /path/to/frpc.ini
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall frpc
[Install]
WantedBy=multi-user.target
完成配置后,通过 sudo systemctl enable frpc.service
开启服务自启,通过 sudo systemctl start frpc.service
启动客户端服务。
macOS
而在 macOS 系统中,我们则通过 vi ~/Library/LaunchAgents/frpc.plist
编辑 plist 来添加服务自启,同样需要将 fprc
与 fprc.ini
修改为自己的实际路径。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>frpc</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/frpc</string>
<string>-c</string>
<string>/path/to/frpc.ini</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
至此,我们就可以在公网环境下通过中转服务器的对应端口了解到我们的内网服务了,且不论是服务端还是客户端,服务都会开机自启。我们可以通过 <公网 ip>
+ 刚在服务端配置的 dashboard_port
端口访问 frp 控制台,查看各服务流量情况。
总结
以上就是我对公网远程访问家庭设备与瘦客户端工作流的实践与总结,这带来了一种很有趣的、有别于传统模式的开发体验,有兴趣的同学可以自行尝试。希望本文对你有所帮助。
参考资料
周报 #02 - 工作、焦虑与成长
前言
从实习开始,来到北京开始工作已经满一周年了。
自己一直是一个有着莫名仪式感的人,在这个节点也会频繁回顾这一年的所思所想与所得,当然,也包括那些焦虑与遗憾。我常常想,一年前的今天,那个带着紧张与期待的自己,会想从未来这一年得到些什么?
于是,本篇就来聊聊工作、焦虑与成长。
关于工作
入职
自己其实并不是一个很认真对待求职这件事的人,大概也因为即使是北京,可选的区块链公司也并不多,从香港回深圳隔离的酒店里一共也只参加了大概五六场面试,不过有些印象还比较深。
其中一家没有什么常规流程,第一轮就与一位美国的面试官共享屏幕,两个小时完成一个 ERC20 Token 智能合约的编写、测试与发布,而第二轮则也是通过 Shell 脚本完成一个系统级定时任务的编写;另一家则是问了许多关于 EVM 底层优化及如何避免合约中的无限循环相关的问题。
而最终选择的这家则是由两个技术 leader 共同参与的,一位问了一些 Go 语言相关问题,而另一位则问了许多 Hyperledger Fabric 与 Ethereum 相关的问题(后来知道他是之前 IBM Fabric 团队的开发者),后来还聊了许多和之后发展方向有关的事,一共大概持续了近一个半小时外加一场半小时的算法笔试。
我其实挺享受并珍惜这种能够从面试中获得一些从未接触过的工程相关知识,或是能与面试官相对平等沟通的机会的,也会让自己在其中快速学习,或至少能稍明确一些方向。
到了北京后又参加了一场 HR 面后就正式作为实习生入职了,就这样开始了自己的第一份正式技术实习。
实习
初接触技术岗,前期的忐忑多于新奇,对于从学校的理论走向企业工程实践这一部分自己并没有太多信心,Go 语言也只是应对面试学了几个月的大概,甚至也没有参与编写过一个用于生产的应用。
作为一个刚入行的 CRUD Boy,最开始也是 leader 成哥带着我从写业务接口开始熟悉的。主要是一个 BaaS 平台的研发,七个接口写了两周,有的复杂 sql 反复测试优化;也完整体验了 git 提交规范、Code Review 和代码合并流程。其实还是一个挺有乐趣的过程,自己写的代码运行在生产项目中,自己所学的各种知识能够很快应用在工作中获取一些实时的反馈,以及一个团队共同为了一个目标和节点向前推进。
这个项目的主要开发工作完成后,我想去做一些链相关的开发,于是申请了参与另一个组的自研链智能合约执行引擎性能优化项目,不过因为并不熟悉 java,只能边对理论做一些学习研究边尝试写一些测试,这是当时做的博文记录,『Ethereum MPT(Merkle Patricia Tries)详解』,也是这段时间经历才意识到原来刷 LeetCode 时那些枯燥的算法原理真的会那么快用上。
可能因为是实习,工作节奏并不是很快,还有很多时间可以自己对感兴趣的领域或技术进行了解,写了如下博文进行记录:
很有意思的是,因为公司内部并没有一个内容发布平台,我这段时间常常给我们友商的区块链技术博客平台投稿并且获取他们技术核心人员的一些学习反馈,在跨链这一块受益良多,也让我感觉到技术的开放性。
其实这个时候还没决定是否要留下来,也与其他心仪的一些公司有一些联系。不过紧接着,跟着另一个 leader 涛哥参与了另一个跨链项目,随着和他接触越来越多,我看到了一个技术人的热忱与无限可能性。我们同样爱折腾各种新奇的工具和技术,时常互相分享;他知道我时常焦虑于缺乏足够的工程经验和能力,于是让我参与到各个项目实战,有时在周末还会带着我 Pair Programming。
他是 Hyperledger Cello 的核心开发者,会鼓励我参与开源,当时说过的一句话我依然记忆犹新,大意是,作为一个技术人,除了完成自己一项项工作任务外,总需要在自己的技术生涯中有几个标签,比如“某某开源项目核心贡献者”等等,我也需要不断努力去找到自己的标签。这一点对我影响很深,在后续的工作学习中,我也开始持续关注开源社区并且慢慢参与其中。
一个可遇不可求的 leader 在影响我选择的因素中占据了更大的比重,所以其实没有太多犹豫,我留下了。
工作
紧接着就参与了我严格意义上的第一个完整的、也几乎贯穿了我工作第一年大部分时光的项目,是一个底层跨链项目。
大概是得益之前工作之余对跨链的学习了解,我在刚实习转试用之际就莫名地担任了项目负责人,参与技术方案探讨、前期系统设计、底层链部分的开发改造、开发流程的规范化、Devops 环境的使用、讲解演示以及项目交付相关的文档与沟通相关工作。这带来了工作之初我未曾设想的压力和焦虑,同时,也带来了我的快速成长。
白天的各种会议一开就是大半天,几乎只有晚上才能沉下心写几行代码;为了赶一个个项目节点,熬夜甚至通宵都已经成为了常态;遇到许多技术难点可能一卡就是几天,却也不得不同时兼顾其他部分的开发任务进度;与之相伴的还有很多很多情绪的压抑与生活节奏的失控。
但当自己真正和团队一起完成了这个项目的最终交付时,那种喜悦感与成就感也是从未体验到的,可能这对于我的意义尤其特别,从本科的英语专业、到去留学转至计算机,在很多课程学习中常常有受挫的时候,期间也不止一次质疑过自己能否在这条路走下去。而这个项目虽然过程磕磕绊绊,我们终究还是做到了,这也给了我莫大的信心。
相处
值得一提的是工作之后人与人的相处模式,我似乎一直没有褪去身上那一份学生气,不论是面对 leader、同事还是项目合作伙伴,似乎都是以一种比较直接与坦诚的方式进行交流的。在五月自己的生活经历了一些变故时,团队的小伙伴承担了更多工作职责让我可以自己有所调整;刚结束的项目的一个客户负责人会打电话给我聊三四个小时安慰我;而另一个在建项目的负责人也在帮我申请能否去出差以稍缓一下心情。工作其实也并没有那些贩卖焦虑的推文描述的那般沉闷,我也始终觉得不论处于什么环境或是场合,关系与相处都是互相的,真诚相待其实也能够同样收获一些信任与真心。
收获、困境与改变
一年过去了,第二个项目也即将结束了,我从这一年里学到了很多,也想以自己的方式为部门留下些什么,于是决定写了一份技术指南。除了开发规范外,还包括了这几年我对区块链的一些学习记录,以及一些从工作中学到的实战记录,这些都是我刚步入这份工作时希望能学到的,也希望能够告诉新加入的成员。
尽管工作才过去了一年,技术与经验上还有很多想提升与成长的,但对于方向却多少有了一些迷茫。想钻研一下区块链底层技术,打磨公司或个人的产品,以及更多参与到开源建设中,但工作之中也常常疲于一个个项目交付时间节点,很难有完整的时间学习研究,这也是后续的工作生涯中我需要克服与调整的难题。
所幸另一个 leader 楷哥很关注开源和技术底层这一部分,偶尔的交流也都为我指明了一些方向,还有很多需要去学习提升的,技术之路漫漫,任重而道远。
总结
以上就是我在现在这个时间节点对于工作的一些总结,现在也渐渐享受于以这样的方式梳理、记录自己的生活、工作与心境,也希望在下一年回望正在经历的这一年时,能够看到自己更多改变与成长,共勉。
通过状态锁在 Solidity 智能合约中实现两阶段提交
前言
在一些牵扯到多个系统或合约交互的智能合约应用场景中,尤其是一些资产/数据准确性较为敏感的业务中,我们需要保证在整个业务流程中数据的原子性。因此,我们需要在合约层面实现类似多阶段提交的机制,即将合约中的状态更改过程分解为预提交和正式提交两个阶段。
本文通过状态锁的机制实现了一个最小化的两阶段提交模型,完整合约代码参见 TwoPhaseCommit.sol,下文将对本合约核心逻辑进行讲解,并尽量遵循风格指南与最佳实践。
注:本合约因初始场景主要考虑的是联盟链中的业务用途,未对 Gas fee 等进行特定优化,仅供学习参考。
合约逻辑
合约结构
两阶段提交场景包含以下方法:
- set: 两阶段 - 预提交
- commit: 两阶段 - 正式提交
- rollback: 两阶段 - 回滚
因 Solidity 语言对于字符串长度判断/比较等有一些限制,为了提升合约代码的可读性,本合约提供了部分辅助方法,主要包含以下方法:
- isValidKey: 检查 key 是否合法
- isValidValue: 检查 value 是否合法
- isEqualString: 比较两个字符串是否相等
两阶段提交核心逻辑
在两阶段提交场景中,本合约提供了一套简易的 set
, commit
, rollback
方法实现,实现了将合约调用传入的 key-value 键值对存储到链上。我们通过状态锁的机制来实现跨链交易的原子性。我们定义了如下数据结构:
enum State {
UNLOCKED,
LOCKED
}
struct Payload {
State state;
string value;
string lockValue;
}
其中,State
为枚举类型,记录了链上 key 值的锁定状态,而 Payload
结构则会对锁定状态、当前值与正在锁定的值进行存储,并通过如下 mapping
结构与 key 进行绑定:
mapping (string => Payload) keyToPayload;
因此,我们可以根据 keyToPaylaod
对合约调用中的每一个 key 进行状态跟踪,并在下述 set
, commit
, rollback
方法中对 key 的状态进行检查,进行一些异常处理。
set()
在 set()
方法中,我们会检查 key 的状态,如为 State.LOCKED
,则不会进行存储并抛出异常:
if (keyToPayload[_key].state == State.LOCKED) {
revert TwoPhaseCommit__DataIsLocked();
}
如为 State.UNLOCKED
,则会将合约调用传入的值存储至 lockValue 中,并将其状态设置为 LOCKED
,等待后续 commit
或 rollback
进行解锁。
keyToPayload[_key].state = State.LOCKED;
keyToPayload[_key].lockValue = _value;
commit()
在 commit()
方法中,我们会检查 key 的状态,如为 State.UNLOCKED
,则不会对该 key 进行操作,并抛出异常:
if (keyToPayload[_key].state == State.UNLOCKED) {
revert TwoPhaseCommit__DataIsNotLocked();
}
如为 State.LOCKED
,我们检查合约调用传入的值是否与 lockValue 相等,如不相等,则抛出异常:
if (!isEqualString(keyToPayload[_key].lockValue, _value)) {
revert TwoPhaseCommit__DataIsInconsistent();
}
如值相等,则会将该 key 所对应的 value 存储上链,将 key 的状态设置为 UNLOCKED
,更新当前值 value
,同时将 lockValue
置空:
store[_key] = _value;
keyToPayload[_key].state = State.UNLOCKED;
keyToPayload[_key].value = _value;
keyToPayload[_key].lockValue = "";
rollback()
在 rollback()
方法中,我们会检查 key 的状态,如为 State.UNLOCKED
,则不会对该 key 进行操作,并抛出异常:
if (keyToPayload[_key].state == State.UNLOCKED) {
revert TwoPhaseCommit__DataIsNotLocked();
}
如为 State.LOCKED
,我们检查合约调用传入的值是否与 lockValue 相等,如不相等,则抛出异常:
if (!isEqualString(keyToPayload[_key].lockValue, _value)) {
revert TwoPhaseCommit__DataIsInconsistent();
}
如值相等,则会将该 key 所对应的 value 存储上链,将 key 的状态设置为 UNLOCKED
,并将 lockValue
置空:
keyToPayload[_key].state = State.UNLOCKED;
keyToPayload[_key].lockValue = "";
错误处理逻辑
在合约执行异常场景中,我们会抛出错误并进行回滚。为了更好地提升错误消息的可读性并方便上层应用人员进行错误捕获与处理,我们采用了错误类型定义的方式,定义了各类异常场景,因为我在错误命名中已经包含了大部分信息,所以未定义错误类型额外参数值,可以根据需求自行定制。
error TwoPhaseCommit__DataKeyIsNull();
error TwoPhaseCommit__DataValueIsNull();
error TwoPhaseCommit__DataIsNotExist();
error TwoPhaseCommit__DataIsLocked();
error TwoPhaseCommit__DataIsNotLocked();
error TwoPhaseCommit__DataIsInconsistent();
在具体合约逻辑中,我们通过 revert
方法抛出异常,如:
if (!isValidKey(bytes(_key))) {
revert TwoPhaseCommit__DataKeyIsNull();
}
if (!isValidValue(bytes(_value))) {
revert TwoPhaseCommit__DataValueIsNull();
}
if (keyToPayload[_key].state == State.UNLOCKED) {
revert TwoPhaseCommit__DataIsNotLocked();
}
if (!isEqualString(keyToPayload[_key].lockValue, _value)) {
revert TwoPhaseCommit__DataIsInconsistent();
}
通用参数校验
我们会对传入参数进行一些合法性校验,为了提供拓展性,我们通过 isValidKey()
与 isValidValue()
方法对 key 与 value 进行独立校验:
/**
* @notice 数据键格式校验
* @param _key 数据 - 键
*/
function isValidKey(bytes memory _key) private pure returns (bool)
{
bytes memory key = _key;
if (key.length == 0) {
return false;
}
return true;
}
/**
* @notice 数据值格式校验
* @param _value 数据 - 值
*/
function isValidValue(bytes memory _value) private pure returns (bool)
{
bytes memory value = _value;
if (value.length == 0) {
return false;
}
return true;
}
本合约只进行了非空校验,可根据业务需要自行定制业务逻辑,在需要校验的地方调用即可,如:
if (!isValidKey(bytes(_key))) {
revert TwoPhaseCommit__DataKeyIsNull();
}
if (!isValidValue(bytes(_value))) {
revert TwoPhaseCommit__DataValueIsNull();
}
if (!isValidValue(bytes(store[_key]))) {
revert TwoPhaseCommit__DataIsNotExist();
}
事件机制
此外,我们定义了核心方法对应的 event,并为事件设置了 indexed 以方便上层应用进行监听和处理。
event setEvent(string indexed key, string indexed value);
event getEvent(string indexed key, string indexed value);
event commitEvent(string indexed key, string indexed value);
event rollbackEvent(string indexed key, string indexed value);
在合约方法中通过 emit()
方法抛出 event,如:
emit setEvent(_key, _value);
emit getEvent(_key, _value);
emit commitEvent(_key, _value);
emit rollbackEvent(_key, _value);
总结
以上就是我两阶段提交合约的一个最佳实践,关于 Solidity 基础语法可参看『Solidity 智能合约开发 - 基础』,后续我还会对更多合约场景进行实践与讲解,敬请关注。
参考资料
周报 #01 - 情感、安全感与认真生活
前言
写周报的心思从生日前就有了,最早吸引我的是 Xuanwo 大佬的开源周报,一方面是憧憬这样能每周有所产出有所贡献的状态,而另一方面也是对以周为一个尺度观察与衡量自己的生活、工作与学习这样的形式很感兴趣。
放弃思考总是一件再容易不过又最心安理得的事,生活早已充斥着无数的琐事、噪音以及各种“高优先级”的事,有时候即使难得空出一片完整的时间,似乎也会选择发呆放空,这大概就是生活的惯性吧。即使是作为本系列的开始,新鲜感和尚有余温的 flag 也没能抵挡过惰性,在预定之期的两天后才缓缓动笔。
虽然这定位是一个周报,我依然想采用每篇涵盖特定主题的完整文章这种形式,而不仅仅是条目的堆砌。也许在目前这样的生活阶段我会更多专注在感情与生活的思考,在之后的一些阶段可能也会在意生活方式与对个人发展的观察,可能不必每篇都需要站在一个高度来为自己指明方向或口号式激励,我更愿意将其视为一种对话。
本篇我们就来聊聊情感、安全感与认真生活。
从零开始的生活
五月虽然称不上是浑浑噩噩,但也远远算不上积极,以各种理由逃避着面对生活的种种变动。从某个痛苦的深夜下定决心要以生日为期,做一些生活环境与习惯的调整,重新开始一个人认真生活。
其实这个短句于我而言有着多重意义,『重新』、『一个人』、『认真』以及『生活』。
似乎已经很久很久没有以个人的角度来经营自己的生活了,久到自己已经丧失了这种“技能”或是“习惯”。自大学起的六七年可以自由支配的时光里,自己似乎就是一个倾向于从自己所在做的事中获取“注意力”的人,再加上还算温和的性格,身边也不并不缺乏社交。所以很长很长的时间里我只需要专注在自己身上,而并没有将过多的目光投向以我的生活为轴辐射出来的我们称之为“生活”的元素集合。
而经过了从学生到步入职场的生活转变,当自由的时间与可支配的注意力被来自工作与似乎到了这个年纪自然而然会去在意的一些相处与社交所侵占,我似乎更难从中找到属于自己的那部分了。
被生活裹挟着前进像是一种随着年龄增长而培养起来的被动技能。大多数人会称赞于“前进”这一部分,似乎在这样的阶段能够依然保留前行的动力就已经难能可贵,但这也是一种思维陷阱,一种由满足感构成的舒适区,也许我们需要克服的并不是被挤压的时间精力,而是在这样的状态下我们如何与焦虑感进行对抗,以维持初衷。
也许是人类天性,即使没有刻意与身边的人进行比较,也总还是在担心或是恐惧一种我称之为『Left Behind』的感觉。自己在学习上似乎总是倾向于不断获取新的资讯或了解新的技术,总是害怕自己的关注点偏移带来的机会成本,投资圈中有个缩写很贴合这一点,『FOMO(Fear of Missing Out)』,总是害怕自己是错过机会的那个,甚至不计成本不加筛选。值得庆幸的是我有不错的自由度能争取到避免工作上无意义的卷,当工作职责完成后自己会将更多的时间精力投入一些自己的事之中。
自己其实是一个不那么依赖社交的人,将自己为数不多愿意外显的情感都倾注于身边最亲近的人,但不知是由于到了一个新的环境还是到了年纪,自己现在似乎会慢慢开始担心自己会不会太过于特立独行而少了新认识朋友的机会,也会害怕自己在同事圈里是那个插不上话的人,虽然算不上功利,但也开始慢慢会以一种更积极更经雕琢的姿态去面对他人。
没有方向与初衷的前进会减轻自己的焦虑感,却可能会带来长期以来的停滞甚至是轨道的偏离,这部分的界限很难去把握,自己似乎也一直是不那么擅长处理这些的人,但想要重新掌握自己的生活就需要与这些不断进行对抗,而人的天性也总是会倾向于选择轻松的方式。所以,最大的敌人依旧是自我。
感情中的『Illustion』与『Reality』
其实现在提起感情还是难以避免痛苦与失落,但也渐渐到了可以 Look back 的时候了,之前看到过这样一句话:
之前谈论感情的『25 岁的自白:花束般的恋爱』中有提到:
有的时候生活只有拼了命的去改变、去适应,才能勉强的,维持现状。
其实后来想想这也是一件很奢望且不可能维持的事,感情会衰退是一件像是“人会变老”这样一件虽然是常识但终究要切身体会了才能真正理解的概念。像是很多生活中在发生的事,家里洗手间的下水道堵了,每次洗完澡会漫出一点,可能一周前就这样了,也许更久。因为也不会漫太多影响房间,只是稍微湿一下脚,没多久也就退了,所以一直没太在意,也没去修;或是自己每次关门是还总是很小心翼翼地虚掩和回头看一下,生怕猫乱跑出去,过了好一会儿才意识到已经离开这个家很久了,只是习惯了。可能很多事就是这样,在怔怔地看着一个既定结果时候恍然,原来它一直在发生,只是自己没注意到。
可能关于感情目前越来越认识到的是记忆并没有那么坚固,习惯与过去那些最美好的瞬间也会因为时间流逝而一点点变得陌生,而现实也很多时候在加速这个过程。而自己有些太过于依赖这些美好的感受了,觉得这些重过一切。其实自己也不知道怎么去形容感情中幻想与现实重叠后的种种,只是各种记忆碎片似乎也以各种方式提醒着我这些事和情绪真真切切地发生过。就像很多曾经说过的记住的话或是因为相处久了共同养成的习惯总会在某些瞬间像是恶作剧般出现,甚至有的部分像是已经成为了一种症状。
比如,每到傍晚大概六点多时,我总是会想起当时她说的当她小憩到日暮看着窗外时,会感到尤其孤独与难受,似乎这个世界上只有自己一个人。可能我一直自诩是一个坚强的人,当时也并没有完全做到感同身受,只是希望每次这样的时候醒来的时候能陪着她。而现在似乎自己也陷入了这样的状态,甚至连周遭太安静或是太吵闹都会感受到这种孤独感,当然,这是另外的话题了。
孤独感与安全感
如前文所述,自己似乎曾经并不是一个那么害怕孤独的人,或者至少没有很敏感。而随着生活状态的改变,我对孤独的感知也愈加显著。现在不论做什么,似乎都需要放着 Podcast 或是白噪音才能略平复一些,而音乐又似乎有些太过吵闹,以至于没办法集中注意力去享受旋律,而只是带来烦躁感。也许自己把太多对于安全感的追求寄托于情感,当这一部分缺失时,被过度保护的安全感也就消散了,而与其相生相伴的孤独感却迅速侵袭了我的生活。也许在之后很久的时光里,孤独感都会像是一个朋友一样如影随形,我尚未学会如何与它相处,但也逐渐在习惯它的存在。
也许渐渐地,我会将这些寄托放置在亲近的朋友、家人或是其他的关系上,这样稀松平常的事其实对于过去的我来说并不是一件容易的事。不知是出于害怕麻烦他人还是所谓的自我坚持,似乎自己即使在面对亲人或是最信任的挚友身上也有一种自我保护,也有一些“报喜不报忧”的倾向,总是不愿意主动承认自己的弱点或是分担自己的情绪。这无关熟悉程度,只是我似乎只习惯于在一段亲密关系中表现自己的一切,而可悲的是,爱情的很多阶段依赖与幻想与感受,往往无法承受彻底的真实感所带来的副作用。这也并非是说感情需要隐瞒或是扮演,而是感情并不是一个适合寄托安全感的完美载体,其所依赖的感性与氛围感的部分是需要一定的距离与想象才能构筑的,同样是需要把握其界限与平衡。
学习、输入与输出
这个部分会记录一下自己这边所看的各类影音书籍、折腾的好玩的东西以及工作学习的一些进展,所幸根据『使用自动化工作流聚合信息摄入和输出』这一篇搭建了自己的『Yu's Life 频道』,会自动化采集自己的一些主动输出与输入,如 Twitter、Blog、书签以及 GitHub 动态等,很方便自己进行每周复盘。
技术学习
这周开始恢复去公司上班了,居家快两个月还有些不太习惯,不过能出门对情绪状态也是一种好事。因为项目快要结束了,本身工作量不是很大,不过本周要把 fabric 环境以及一些操作部分熟悉一下,即使不算感兴趣但毕竟也是工作很重要的一环。
最近主要在学 Soldiity 和 Rust 开发,不过这周因为去公司上班了,完整的时间很少,进度一般,需要重新计划一下了。然后打算把 CSAPP 开始重新学习记录一下了,是时候好好沉淀下来补自己的一些技术和底层知识了。
这周和一个 Leader 有了对于区块链和技术的一些有趣的讨论,也对我之后的学习方向提供了一些参照,技术路还很遥远呀,继续加油了。
输入
整理了一下自己的 GitHub Star 列表与项目,把一些部分做了分类,以及用 tag 的形式记录到了 Pinboard 中进行管理,把一些稍后读转移到了 Instapaper,目前是一个比较闭环的输入流了。实践下来,这种还是看了不少有价值和营养的内容的,后续需要更专精一些领域深入学习。
影音这一块这周主要在补『黑客军团』,很久之前看过的一部美剧,觉得挺有意思的所以重温了一下前几季并且把最新的一季看了一下;书的话之前的『洛丽塔』还没看完,通勤的时候缓慢在看,因为居家反而搁置了很久。
输出
写作也是目前坚持了最久也最有成效的一个兴趣了,还赚到了一些意料之外的稿费。这周工作之余在少数派发了一篇『2022 年了,聊聊我为什么还在写博客』,反响不错,结识了很多同样在写博客的人,一起交流了下,顺便把博客数据统计系统也再完善了一下。另外又接到了一篇关于区块链的约稿,不过是自己不太熟悉的 stablecoin 相关内容,可以先做一些调研学习。
软硬件优化
这周主要是把 n8n 服务通过 docker 转移部署到了 Railway 上,这样就不用担心服务异常问题了,会是一个更加稳定的系统。
使用 frp 实现了家里的内网穿透,可以从公司或者外出的时候只带一台 Chromebook 直接 ssh 远程连接到家里长期开机的 Mac Studio 上进行开发了,之后也打算把树莓派也搭建一下,可以省不少云服务器的成本,也想配合一些温度湿度传感器这些折腾一些好玩的东西。
DJI RS3 相机稳定器到了,折腾了一下学习了基础操作,不过关于调平这一块不太熟悉,之后慢慢学习使用,可以多拍一些。
新键盘 Leoplod FC660C 到了,外观和手感都很喜欢,换为家里的主力键盘了,把 HHKB 带去公司。
习惯、兴趣与改变
我很难界定自己是不是一个喜欢改变的人,我很乐于接受新事物,也能比较快地适应一个新环境,但对于很多熟悉的日常或是尚有眷恋与情感倾注的部分,我又很努力地将其保持原状。家里的布局、穿衣的风格甚至是衣柜里时色系的顺序我都像是强迫症似的保留了原样。甚至是自己一些生活的上的行为模式与习惯,似乎也都不愿意去改变。我很难去界定自己的这些行为,或许是对于过去的眷恋或是自己不愿意接受的改变的偏执吧。
但其实有时候做一些改变与尝试也是一件很有趣的事,也很适合作为新的生活方式或兴趣的探索。这部分也会记录一下自己所做的一些尝试与兴趣培养的进展。
- 输入法。尝转换到了很久之前就感兴趣却一直没耐下心练习的小鹤双拼,其实也不是为了打字速度有多少提升,只是感觉将自己(被动)坚持了十几年的习惯做一个转换是一种很有趣的体验,大概也有三周了,速度还没有回到全拼时,但打字节奏感好了很多,不过更重要的是似乎从打字这件事也体会到了乐趣与提升所带来的喜悦,这很难想象是能从一件自己做了十几年的事上所能获得的感受。
- 视频剪辑。一直很想做一些拍摄和剪辑,虽然因为之前的工作和日常的一些兴趣,不过一直没能完整做些什么创作,可能更多都是技能的培养,打算开始进行一些拍摄与剪辑,顺便好好学习一下稳定器的使用。
- 运动。感觉自己宅家太久了,很久没做运动,打算开始用健身环开始做一些日常运动,以及天气好一些可以去滑滑板,至少保持一个相对稳定的频率。
- 语言。英语的阅读和写作在日常工作学习用到了很多,但我想更多在口语上多一些提升,也需要有一个稳定的练习频率;而日语也是学完新标日初级后就没再继续,同样的要开始做一些复习和筹备。
- 音乐。把家里的吉他寄过来了,自大一学过一阵子后就搁置了许久,之后打算做一些练习,至少音乐是一种能让人放松与平静的艺术,但需要练习与坚持,也会以视频的方式记录一些练习的流程与小作品。
2022 年了,聊聊我为什么还在写博客
前言
前段时间发了几篇文章介绍了一下自己的博客搭建流程及组件,有很多朋友跟着我的教程也搭建了自己的博客。同时,也有一些朋友提出了疑问,在 2022 年这个时间节点,已经有那么多成熟的写作与发布平台,为什么我们还要那么大费周章,搭建与更新自己的博客呢?
我从大一(2015 年)开始写公众号,分享一些关于书、电影与个人生活的文章;2018 年开始使用 Wordpress 搭建了一个自己的个人博客,并于 2019 年迁移到了 Hugo + Github Pages 并维护至今
。
在这两年时间里,我共计更新了 70 篇文章,主要包含课程笔记、技术与效率相关主题,自搭建了网站数据统计系统以来有近万名访客。本文想从我个人经历的角度跟大家讲讲我在写博客过程中的所思所想,也许能够为正在犹豫的你提供一些参考。
写博客的初衷与价值
学习笔记发布
可能是因为初高中对语文学科的热忱以及大学时英语专业的耳濡目染,我一直很享受于阅读与分享,很早之前也和故友一起维护过个人公众号,写了一些有关书籍、电影、音乐与个人生活相关的文章。这是我第一次通过文字传达自己的情绪,也体会到了外界反馈带来的欣喜与感动。
后来因为一些原因公众号停止更新了,我也很久没再公开发布文章。不过因为当时有转专业的想法,一直在自己学一些新的知识,会定期把笔记与学习心得记在自己的笔记软件中,逐渐也养成了记录的习惯。
尤其是在香港留学期间,因为是全英授课,课后需要花很多时间来整理回顾,也会分享给很多同学,于是捡起了断更很久的博客,陆续发布了很多学习笔记,收到了很多同学的积极反馈与感谢。后来还加上了网站访问统计、评论等组件,偶尔查看会很惊喜地发现有很多来自搜索引擎的访问者,也给我继续更新提供了很多动力。
博客文章与零散记录的知识点不同,需要有着特定的主题、一定的行文结构与完整的内容。这促使着我在构思与写作时对自己的知识体系进行梳理总结,有时还需要用一些思维导图与流程图来辅助理解,这个过程让我不断巩固所学知识点,帮助我度过了很多作业与考试。
尽管前期阅读的人并不多,但我视其为自己的一个表达渠道,也是自己获取认同感与价值的窗口。因此,一篇文章需要花很多心血来写,让我更自律地放弃了很多无意义的消遣,投入更多时间打磨自己的文章。此外,时间上的紧迫也促进了我对学习方式与效率的思考,在听课或阅读资料时就会自然地从整个知识结构的维度来进行理解与思考。
工作心得记录
工作后,因为我从事的区块链行业是一个新兴的领域,有时候一个小小的知识点需要查阅很多零散的资料才能理解,而且大多是来自于同行业大佬的博文,有时候会追着一位博主的文章时间线从头开始看,获益良多。这时,我便也萌生了自己将这些工作学习中踩过的坑记录并分享出来的想法。
我发现网上区块链相关的资料大多都比较简略、偏底层,没有很详细的步骤讲解,对于入门学习者来说可复现性不强。于是,我开始定期把自己的学习心得与工作经验分主题组织成文在自己的博客上发布,并将区块链相关的单独抽出来为一个入门指南,以便大家学习交流。
发布后得到了很多反馈,也因此结识了不少志同道合的人,建立了自己的关系网络,对自己的学习与工作发展有了更深的认识,甚至也能获得一些有趣的机会。
工作一段时间后,做了一些项目的技术负责人,需要带团队快速接入项目。这时,我的这些博文就可以作为与团队成员共享的培训资料,极大减少了重复工作量,也推动着自己保持稳定的输出节奏。此外,因为这种乐于分享的态度,我还被指派与团队 leader 一起搭建技术团队的文档库,这推动了部门乃至公司内的信息传播与业务发展,对自己的职业发展也有一些帮助。
效率技巧分享
工作之余,我还是一个效率控,很喜欢折腾各类工具应用,还维护了一个『pseudoyu/yu-tool 个人工具箱』项目。久而久之,很多朋友遇到软硬件相关的问题都会来问我,例如“我想实现这个功能有什么好的软件可以做到?”、“这个要怎么下载安装?”等等,我也会一一给他们解答,但因为有些软件自己使用已经不那么频繁,对细节记忆会有偏差。因此,我会将自己软件系统的搭建、使用过程作详细的记录,组织为博文并发布,以便之后自己查阅或直接分享给需要的朋友。
我一直觉得记录软硬件与这些折腾的过程并不是一些冷冰冰的条目与截图的堆砌,而是我个人价值观、生活方式以及思维方式的传导,正如我在另一篇文章中的有感而发:
但当我在日常工作学习中使用自己当初花了很多心思调研和优化的系统后,或当一个突发的需求使用到了我之前的一个折腾过的软件/配置时,会莫名地很开心、很有成就感,这大概就是折腾的意义吧。
个人思考与成长
经过了学业与工作的各个时期,我发现自己在不同阶段与角色可能会有着截然不同的思考与成长,有时回顾起来也会很有感触。因此,我设立了一个『思考』板块,之前会以每年生日为期记录一下自己的成长,也会在一些特定的时间节点记录自己的所思所想,后续也将以周报/月报的形式记录自己的一些阶段性感悟。
相信几个月甚至几年后的自己也能从这点点滴滴的记录中找到自己当时的心境。当自己逐渐培养起记录生活的习惯,也会让自己能关注与感受到生活的美好,也能更积极地面对来自未来的挑战。
个人博客就像自己的一个树洞,在记录与表达自己情绪的同时,也许也会收获一些来自陌生人的温暖。
如何坚持写作
克服心理障碍
写作并不是一件很容易的事,当我很长时间没动笔之后,常常也会觉得“没有手感”,之前没有写作习惯的朋友们可能会更容易感觉“不知道写什么”、“自己写的东西没有意义”或“会不会没人看”。
这其实是一个误区,有句话叫“达人须悦己”,写作(尤其是个人博客写作)不应该是一个目的性很强的事,而应该是一个自我记录、自我发现、自我探索与自我表达的过程。我们每个人都处于不同的角色,都有着自己的独特角度与看待事物的眼光。只要多多关注自己所在或感兴趣的领域,收集碎片化的想法,积极思考,对一些有意思的想法用导图等方式进行挖掘,将这些想法组织成文后,仔细打磨自己的文章,以真诚的态度表达出来,就能创作出有价值的内容。
积极分享传播
文章完成后我们可以选择在各个平台发布与传播,积极获取正反馈,也会促进自己更有动力坚持下去。除了个人博客外,我们可以选择简书、知乎、微博这样的内容社区,少数派、即刻等相对垂类的一些内容平台等。
好的内容也会自然地传播,被更多人看到,我们需要做的就是坚持与持续输出,前期可以给自己制定一个固定频率,如半个月/一个月,给自己一些小小的物质激励,后期再慢慢根据自己的情况与意愿调整。
个人博客
为什么选择个人博客
上文着重讲了我们如何写有价值的博客文章,现在,我们回到最开始的问题:
既然已经有了那么多平台了,为什么我们还要选择搭建个人博客呢?
移动互联网与智能手机普及之后,“blogger” 一词似乎已经成为了时代的眼泪,前段时间我还被加入了一个“致敬仍然在写博客的朋友”的列表,有些哭笑不得。
随着互联网的迅速发展,我们有了更多的表达渠道,却又似乎丧失了表达的欲望。朋友圈、微博等似乎是适合情绪表达的第一阵地,但字数限制与太多的社交关联又让我们望而却步;而知乎、简书这样的平台又似乎太过“专业”,并不适合所有内容,也容易被网络舆论所左右。
个人博客则是一个更完美的选择。我们可以随心所欲地按自己的喜好定制博客的各个模块,而折腾与优化的过程就像装修自己的一个小屋一样,很有成就感。配合个性域名也能打造自己的个人品牌,不管是在个人社交平台还是求职简历上放上自己的个人网站链接都是一个不错的加分项。
还有很重要的一点是,我们在博客上发布的内容与数据都属于我们自己,不会随着平台的消亡而丧失所有数据或经历大规模迁移的痛苦,经历过『虾米音乐』消亡的惨痛教训,我对这一点尤其关注,也会定期备份我的文章数据。
此外,我们可以对个人博客做一些 SEO 优化而无需被内容平台的算法所左右,读者也许会从一篇文章链接到自己的其他想法与态度的表达,让他们感觉文字背后是一个真实的、有趣的人,而不仅仅是互联网同质化知识的一个分子。
如何搭建个人博客
我的个人博客最早使用 WordPress 搭建在自己的 Vultr vps 上,因为网络访问比较慢所以迁移到了腾讯云服务器上并且进行备案,虽然访问速度有提升,但是发布博客的流程很繁琐,服务器的维护长期也是一笔不小的开支。
因此,我也一直在探索能够既能保障国内外访问体验,又能够托管在一些平台上,实现部署和发布流程的最优化体验。后来也一直不断在改善博客系统搭建和发布流程,迄今为止对自己的全流程解决方案还是比较满意的,虽然部署和搭建上需要进行一些配置,但后续更新维护都很方便,我对博客搭建流程写了一系列文章。
博客搭建与自动发布系统
我通过 Hugo 这个静态网站生成器来搭建我的个人博客。Hugo 是用 Go 实现的博客工具,采用 Markdown 进行文章编辑,自动生成静态站点文件,支持丰富的主题配置,也可以通过 js 嵌入像是评论系统等插件,高度定制化。
此外,我还对博客配置及所有文章的源文件进行版本管理,配合 GitHub Action 进行自动化部署,自动生成静态站点推送到 GitHub Pages 博客发布仓库。搭建教程请参看:
博客评论系统
一个完整的博客当然需要评论系统,像 WordPress 这种系统自身具备了评论插件,而静态博客则需要自己对接评论系统。我最开始选择的是第三方的 Disqus,简单易用,但是会自带很多广告推广,也不够简约。因此,我选择了 Randy 的 Cusdis,一个注重数据隐私的开源的评论系统,并通过 Railway 进行自部署,搭建教程请参看:
博客数据统计系统
作为一个持续更新运营的博客平台,我们一定很好奇哪篇文章阅读量最高、哪个关键词检索最频繁等,数据统计能帮助我们专注在更有价值的内容创作与分享上。
类似的工具也很多,我选择了 splitbee 与 Google Console 来统计分析我的访客信息与搜索权重。
Cloudflare 也能够对网络流量进行分析,不过因为有很多网络无关流量,如爬虫等,所以参考性不强。
此外,我选择了一个可代替 Google Analytics 的开源服务 umami,并通过 Vercel 与 Heroku 进行部署,实现了访客数据的实时监控,搭建教程请参看:
总结
2022 年了,我依然在写博客,并且会继续坚持写下去。博客就像是我的一个私人空间,一篇篇笔记记录了我的变化与成长,也承载了我人生的几段最重要的时光。希望屏幕前的你们也能体会到博客的魅力,让更多的朋友加入我们仍在坚守的“blogger”阵地。
参考资料
Solidity 智能合约开发 - Hardhat 框架使用
前言
经过了前几篇对智能合约基础、Web3.py、ethers.js 的学习,我们已经掌握了通过程序与区块链网络直接交互的基础知识,不熟悉的同学可以回顾一下:
但是在真正的复杂业务场景中,我们往往会使用一些进一步封装的框架,如 HardHat、Brownie、Truffle 等,HardHat 是其中应用最广泛、插件拓展最为强大的。本系列将从这篇开始专注于 Hardhat 框架的使用与最佳实践,而本篇则会通过一个简单的例子完成其安装、配置与使用。
本文是对 Patrick Collins 的 『Learn Blockchain, Solidity, and Full Stack Web3 Development with JavaScript』 教程的学习整理,强烈建议看原教程视频了解更多细节。
可以点击这里访问本测试 Demo 代码仓库。
Hardhat 介绍
Hardhat 是一个基于 JavaScript 的智能合约开发环境,可以用于灵活地编译、部署、测试和调试基于 EVM 的智能合约,并且提供了一系列工具链来整合代码与外部工具,还提供了丰富的插件生态,提升开发效率。此外,它还提供了模拟以太坊的本地 Hardhat 网络节点,提供强大的本地调试功能。
其 GitHub 地址为 NomicFoundation/hardhat,可以访问其官方文档了解更多。
Hardhat 使用
初始化项目
从零开始搭建一个 Hardhat 项目,我们需要预先安装好 node.js
与 yarn
环境,这部份参照官方说明根据自己的系统环境按照即可。
首先,我们需要初始化项目并安装 hardhat
依赖包。
yarn init
yarn add --dev hardhat
初始化 Hardhat
然后需要运行 yarn hardhat
,通过交互式命令来进行初始化,根据项目需要进行配置,我们的测试 Demo 选择默认值。
优化代码格式化
VS Code 配置
我本地是通过 VS Code 进行代码开发的,可以通过安装 Solidity + Hardhat
与 Prettier
两个插件来进行代码格式化,可以使用打开 VS Code 设置,在 settings.json
中增加如下格式化配置:
{
//...
"[solidity]": {
"editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
}
}
项目配置
为了统一各个使用项目的开发人员的代码格式化样式,我们还可以为项目配置 prettier
与 prettier-plugin-solidity
插件支持:
yarn add --dev prettier prettier-plugin-solidity
添加依赖后,可以在项目目录增加 .prettierrc
与 .prettierignore
配置文件来进行格式化统一:
我的 .prettierrc
配置为:
{
"tabWidth": 4,
"useTabs": false,
"semi": false,
"singleQuote": false
}
我的 .prettierignore
配置为:
node_modules
package.json
img
artifacts
cache
coverage
.env
.*
README.md
coverage.json
编译合约
无需像 ethers.js
一样自定义 compile
命令,HardHat 预置了 compile
命令,可以将合约放在 contracts
目录下,然后通过 yarn hardhat compile
命令来编译合约:
添加 dotenv
支持
在开始编写部署脚本之前,我们先配置一下 dotenv
插件,这样我们就可以使用 dotenv
来获取环境变量。我们在开发过程中,会牵扯到很多隐私信息,如私钥等,我们会希望将其存储在 .env
文件或直接设置在终端中,比如我们的 RINKEBY_PRIVATE_TOKEN
,这样我们就可以在部署脚本中使用 process.env.RINKEBY_PRIVATE_TOKEN
获取到值,无需在代码中显式写入,减少隐私泄漏风险。
安装 dotenv
yarn add --dev dotenv
设置环境变量
在 .env
文件中,我们可以设置环境变量,比如:
RINKEBY_RPC_URL=url
RINKEBY_PRIVATE_KEY=0xkey
ETHERSCAN_API_KEY=key
COINMARKETCAP_API_KEY=key
我们就可以在 hardhat.config.js
中读取环境变量了:
require("dotenv").config()
const RINKEBY_RPC_URL =
process.env.RINKEBY_RPC_URL || "https://eth-rinkeby/example"
const RINKEBY_PRIVATE_KEY = process.env.RINKEBY_PRIVATE_KEY || "0xkey"
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || "key"
const COINMARKETCAP_API_KEY = process.env.COINMARKETCAP_API_KEY || "key"
配置网络环境
往往我们的合约需要运行在不同的区块链网络上,如本地测试、开发、上线环境等等,Hardhat 也提供了便捷的方式来配置网络环境。
启动网络
我们可以直接运行脚本来启动一个 Hardhat 自带的网络,但该网络仅仅存活于脚本运行期间,想要启动一个本地可持续的网络,需要运行 yarn hardhat node
命令:
执行完成后,就生成了测试网络与测试账户,供后续开发调试使用。
我们还可以通过 Alchemy 或 Infura 等平台生成自己的测试网节点,记录其 RPC_URL
供程序连接使用。
定义网络
完成网络环境准备后,我们可以在项目配置 hardhat.config.js
中定义网络:
const RINKEBY_RPC_URL =
process.env.RINKEBY_RPC_URL || "https://eth-rinkeby/example"
const RINKEBY_PRIVATE_KEY = process.env.RINKEBY_PRIVATE_KEY || "0xkey"
module.exports = {
defaultNetwork: "hardhat",
networks: {
locakhost: {
url: "http://localhost:8545",
chainId: 31337,
},
rinkeby: {
url: RINKEBY_RPC_URL,
accounts: [RINKEBY_PRIVATE_KEY],
chainId: 4,
},
},
// ...,
}
脚本
在 Hardhat 项目中,我们可以通过在 scripts
目录中编写脚本来实现部署等功能,并且通过便捷的命令执行脚本。
编写部署脚本
接下来我们开始编写 deploy.js
脚本。
首先,我们需要从 hardhat
中导入必要包:
const { ethers, run, network } = require("hardhat")
接着则编写 main
方法,包含我们的部署核心逻辑:
async function main() {
const SimpleStorageFactory = await ethers.getContractFactory(
"SimpleStorage"
)
console.log("Deploying SimpleStorage Contract...")
const simpleStorage = await SimpleStorageFactory.deploy()
await simpleStorage.deployed()
console.log("SimpleStorage Contract deployed at:", simpleStorage.address)
// 获取当前值
const currentValue = await simpleStorage.retrieve()
console.log("Current value:", currentValue)
// 设置值
const transactionResponse = await simpleStorage.store(7)
await transactionResponse.wait(1)
// 获取更新后的值
const updatedValue = await await simpleStorage.retrieve()
console.log("Updated value:", updatedValue)
}
最后运行我们的 main
方法:
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})
运行脚本
完成脚本编写后,可以通过 Hardhat 提供的 run
命令来运行脚本。
如不加网络参数,则默认使用 hardhat
网络,可以通过 --network
参数指定网络:
yarn hardhat run scripts/deploy.js --network rinkeby
增加 etherscan 合约验证支持
将合约部署至 Rinkeby 测试网络后可在 Etherscan 上查看合约的地址,并且进行验证。我们可以通过网站进行操作,但 Hardhat 提供了插件支持,更方便进行验证操作。
安装 hardhat-etherscan 插件
我们通过 yarn add --dev @nomiclabs/hardhat-etherscan
命令安装插件。
启用 etherscan 合约验证支持
完成安装后,我们需要在 hardhat.config.js
中进行配置:
require("@nomiclabs/hardhat-etherscan")
module.exports = {
// ...,
etherscan: {
apiKey: ETHERSCAN_API_KEY,
},
// ...,
}
定义 verify 方法
接下来我们需要在部署脚本 deploy.js
中添加 verify
方法。
const { ethers, run, network } = require("hardhat")
async function verify(contractAddress, args) {
console.log("Verifying SimpleStorage Contract...")
try {
await run("verify:verify", {
address: contractAddress,
constructorArguements: args,
})
} catch (e) {
if (e.message.toLowerCase().includes("already verified!")) {
console.log("Already Verified!")
} else {
console.log(e)
}
}
}
这个方法我们调用了 hardhat
包中的 run
方法,并且传递了一个 verify
命令,并且传递了一个参数 { address: contractAddress, constructorArguements: args }
。因为可能我们的合约已经在 Etherscan 上验证过,所以我们做了一个 try...catch...
错误处理,如果验证过,则会抛出一个错误,并且输出一个提示信息,而不影响我们的部署流程。
设置部署后调用
定义好我们的 verify
方法后,我们可以在部署脚本中调用它:
async function main() {
//...
if (network.config.chainId === 4 && process.env.ETHERSCAN_API_KEY) {
await simpleStorage.deployTransaction.wait(6)
await verify(simpleStorage.address, [])
}
// ...
}
在这里我们做了两个特殊处理。
首先,我们仅需要在 rinkeby
网络上验证合约,而不需要在本地或其他网络环境验证,因此,我们对 network.config.chainId
进行判断,如果是 4
,则执行验证操作;否则,不执行验证操作,此外仅在有 ETHERSCAN_API_KEY
环境变量时执行验证操作。
另外,Etherscan 可能需要在部署后一段时间才能获取到合约地址,因此我们配置了 .wait(6)
等待 6 个区块后再进行验证。
执行效果如下:
我们通过 Etherscan 验证后访问后可以直接查看合约源码并进行交互。
合约测试
对于智能合约来说,其大多数操作都需要部署上链,与资产交互,消耗 gas,且一旦有安全隐患会造成严重的后果。因此,我们需要对智能合约进行详细的测试。
Hardhat 提供了完备的测试调试工具,可以在 tests
目录中编写测试脚本,通过 yarn hardhat test
命令运行测试。
编写测试脚本
为我们的部署脚本编写 test-deploy.js
测试程序,首先需要导入必要包:
const { assert } = require("chai")
const { ethers } = require("hardhat")
然后编写测试逻辑:
describe("SimpleStorage", () => {
let simpleStorageFactory, simpleStorage
beforeEach(async () => {
simpleStorageFactory = await ethers.getContractFactory("SimpleStorage")
simpleStorage = await simpleStorageFactory.deploy()
})
it("Should start with a favorite number of 0", async () => {
const currentValue = await simpleStorage.retrieve()
const expectedValue = "0"
assert.equal(currentValue.toString(), expectedValue)
// expect(currentValue.toString()).to.equal(expectedValue)
})
it("Should update when we call store", async () => {
const expectedValue = "7"
const transactionRespense = await simpleStorage.store(expectedValue)
await transactionRespense.wait(1)
const currentValue = await simpleStorage.retrieve()
assert.equal(currentValue.toString(), expectedValue)
// expect(currentValue.toString()).to.equal(expectedValue)
})
在 Hardhat 的测试脚本中,我们使用 describe
包裹测试类,并且使用 it
包裹测试方法。我们需要保证测试前合约已经部署,因此,我们通过 beforeEach
方法在每个测试方法执行前都会调用 simpleStorageFactory.deploy()
,并且将返回的 simpleStorage
对象赋值给 simpleStorage
变量。
我们使用 assert.equal(currentValue.toString(), expectedValue)
来对执行结果与预期结果进行比照,可以用 expect(currentValue.toString()).to.equal(expectedValue)
替代,效果一样。
此外,我们还可以通过 it.only()
来指定仅执行其中一个测试方法。
执行测试脚本
我们通过 yarn hardhat test
运行测试,且可以通过 yarn hardhat test --grep store
来指定测试方法。
添加 gas-reporter
支持
如上文所述,gas 是我们在开发过程中需要特别关注的资源,尤其在 Ethereum 主网上尤其昂贵。因此,我们需要在测试过程中查看 gas 消耗情况。HardHat 也有一个 gas-reporter
插件,可以很方便地输出 gas 消耗情况。
安装 gas-reporter
插件
我们通过 yarn add --dev hardhat-gas-reporter
命令来安装插件:
启用 gas-reporter
支持
我们通过在 hardhat.config.js
中添加 gasReporter: true
及额外配置项来启用插件:
require("hardhat-gas-reporter")
const COINMARKETCAP_API_KEY = process.env.COINMARKETCAP_API_KEY || "key"
module.exports = {
// ...,
gasReporter: {
enabled: true,
outputFile: "gas-reporter.txt",
noColors: true,
currency: "USD",
coinmarketcap: COINMARKETCAP_API_KEY,
token: "MATIC",
},
}
我们可以指定输出文件、是否开启颜色、指定币种、指定代币名称,以及指定代币的 CoinMarketCap API 密钥来根据项目进一步控制输出。
按照以上配置,运行 yarn hardhat test
输出效果如下:
添加 solidity-coverage
支持
合约测试对于保障业务逻辑正确性与安全防范至关重要,因此,我们需要对合约进行覆盖率测试。HardHat 也有一个 solidity-coverage
插件,可以很方便地输出覆盖率情况。
安装 solidity-coverage
插件
我们通过 yarn add --dev solidity-coverage
命令来安装插件:
启用 solidity-coverage
支持
我们仅需在 hardhat.config.js
中导入包即可添加覆盖率测试支持:
require("solidity-coverage")
运行覆盖率测试
通过 yarn hardhat coverage
即可运行覆盖率测试:
Task
上文我们对 hardhat
库的基础功能与脚本进行了一些使用。除此之外,我们还可以自定义一些任务供开发调试使用。
编写 Task
Hardhat 中,我们将任务定义在 tasks
目录下,我们将编写一个 block-number.js
的 Task 来获取区块高度:
const { task } = require("hardhat/config")
task("block-number", "Prints the current block number").setAction(
async (taskArgs, hre) => {
const blockNumber = await hre.ethers.provider.getBlockNumber()
console.log(`Current Block Number: ${blockNumber}`)
}
)
Task 通过 task()
方法来创建,并通过 setAction()
方法来设置任务的执行函数。其中,taskArgs
是一个包含所有参数的对象,hre
是一个 HardhatRuntimeEnvironment
对象,可以用来获取其他的资源。
运行 Task
定义完成后,在项目命令的 AVAILABLE TASKS
中就有了我们刚定义好的 block-number
任务,可以通过 yarn hardhat block-number
命令来运行任务,同样的,我们可以指定特定网络运行:
yarn hardhat block-number --network rinkeby
Hardhat Console
最后,除了通过代码与链/合约进行交互外,我们还可以通过 Hardhat Console
来调试项目,查看链状态,合约的输入、输出等。我们可以通过 yarn hardhat console
命令来打开 Hardhat Console,并进行交互。
总结
以上就是我对 Hardhat 框架的基础配置与使用,它是一个很强大的开发框架,我后续还将会继续深入了解它的更多特性与使用技巧,如果有兴趣,可以继续关注,希望对大家有所帮助。
参考资料
Solidity 智能合约开发 - 玩转 ethers.js
前言
在之前的《Solidity 智能合约开发 - 基础》中,我们学习了 Solidity 的基本语法,并且了解了可以通过 Brownie 与 HardHat 等框架进行调试。而另一篇《Solidity 智能合约开发 - 玩转 Web3.py》中我们也通过 Web3.py 直接与我们本地的 Ganache 节点进行交互了。
原本因为之前比较熟悉 Python 的使用,所以想使用 Brownie 框架进行后续开发。然而经过了一番调研,业界还是使用 HardHat 框架居多,也有更多拓展,且我关注的 Solidity 教程也更新了 Javascript 版本,于是还是打算学习一下。
为了更好了解其原理,也为我们后续更好使用框架打好基础,我们这次通过 ethers.js 来与我们部署在 Alchemy 平台上的 Rinkeby 测试网络进行交互。实现了基础的合约编译、部署至 Rinkeby 网络、与合约交互等功能。
可以点击这里访问本测试 Demo 代码仓库。
ethers.js
ethers.js 是 Javascript 的一个开源库,可以与以太坊网络进行交互,其 GitHub 地址为 ethers.io/ethers.js,可以访问其官方文档进行使用。
安装
我们可以通过 yarn 安装 ethers.js
,如下:
yarn add ethers
使用
使用 require
导入库即可使用
const ethers = require('ethers');
Solidity 合约编译
合约源码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract SimpleStorage {
uint256 favoriteNumber;
bool favoriteBool;
struct People {
uint256 favoriteNumber;
string name;
}
People public person = People({favoriteNumber: 2, name: "Arthur"});
People[] public people;
mapping(string => uint256) public nameToFavoriteNumber;
function store(uint256 _favoriteNumber) public returns (uint256) {
favoriteNumber = _favoriteNumber;
return favoriteNumber;
}
function retrieve() public view returns (uint256) {
return favoriteNumber;
}
function addPerson(string memory _name, uint256 _favoriteNumber) public {
people.push(People({favoriteNumber: _favoriteNumber, name: _name}));
nameToFavoriteNumber[_name] = _favoriteNumber;
}
}
这是一个简单的存储合约,通过一个 People 结构体对象来存储人名和他喜欢数字,通过一个数组来存储多个人的信息,并提供了添加、查找方法。
读取合约源文件
当我们通过 VSCode 或其他编辑器完成 Solidity 合约编写与语法检查后,需要编译合约为 abi 文件与 bytecode。
我们可以通过 yarn
安装 solc
命令行工具进行编辑,并且可以选择对应版本,命令如下:
yarn add solc@0.8.7-fixed
安装完成后,,我们可以通过 solcjs
命令来进行编译,命令如下:
yarn solcjs --bin --abi --include-path node_modules/ --base-path . -o . SimpleStorage.sol
因为编译合约是一个高频操作,我们可以在 package.json
中配置 compile
脚本命令,如下:
"scripts": {
"compile": "yarn solcjs --bin --abi --include-path node_modules/ --base-path . -o . SimpleStorage.sol"
}
之后仅需执行 yarn compile
即可生成合约编译文件。
获取编译结果
编译完成后会生成 abi 和 bytecode 文件,分别以 .bin
和 .abi
为后缀。
获取 bytecode 与 abi
Solidity 合约的部署与交互需要 bytecode 与 abi 两个部分,我们可以通过通过以下代码将其写入对应变量供后续操作使用。
const fs = require('fs-extra');
const abi = fs.readFileSync("./SimpleStorage_sol_SimpleStorage.abi", "utf-8");
const binary = fs.readFileSync("./SimpleStorage_sol_SimpleStorage.bin", "utf-8");
创建 Rinkeby 测试网络环境(Alchemy)
智能合约的调试需要将合约部署到实际的链上,我们选择部署到 Alchemy 平台的 Rinkeby 测试网进行后续调试开发,
Alchemy 平台
首先我们访问 Alchemy 官网,注册并登录,会看到其 Dashboard,会展示所有已创建的应用。
安装完成后选择 Create App 即可快速创建一个 Rinkeby 测试网络节点。
创建完成后,点击 View Details,可以看到我们刚创建的 App 详细信息,点击右上角 View Key,可以查询我们的节点信息,我们需要记录下 HTTP URL,供后续连接使用。
创建 Rinkeby 测试账户(MetaMask)
MetaMask
完成了 Rinkeby 测试网络环境的创建,我们需要通过 MetaMask 创建账户,获取一些测试 Token,并且将账户私钥记录下来,以便后续使用。
获取测试 Token
创建账户后,我们需要一些测试 Token 来进行后续开发调试,我们可以通过以下网址获取:
连接测试节点与钱包
连接节点
ethers.js
提供了库可以方便地连接到我们的测试节点,其中 process.env.ALCHEMY_RPC_URL
为我们在 Alchemy 平台创建 App 的 HTTP URL:
const ethers = require('ethers');
const provider = new ethers.providers.JsonRpcProvider(process.env.ALCHEMY_RPC_URL);
连接钱包
ethers.js
也提供了方法可以连接到我们的测试钱包,其中 process.env.RINKEBY_PRIVATE_KEY
为我们从 MetaMask 复制的私钥。
const ethers = require('ethers');
const wallet = new ethers.Wallet(
process.env.RINKEBY_PRIVATE_KEY,
provider
);
Solidity 合约部署
创建合约
我们可以通过 ethers.js
库创建合约。
const contractFactory = new ethers.ContractFactory(abi, binary, wallet);
部署合约
下面我们介绍一下如何通过 ethers.js
库部署合约,其中 SimpleStorage
合约的 ABI 和 BIN 文件已经在上面的代码中读取过了。
创建合约
const contractFactory = new ethers.ContractFactory(abi, binary, wallet);
部署合约
const contract = await contractFactory.deploy();
await contract.deployTransaction.wait(1);
与合约交互
我们也可以通过 ethers.js
来与合约进行交互。
retrieve()
const currentFavoriteNumber = await contract.retrieve();
store()
const transactionResponse = await contract.store("7")
const transactionReceipt = await transactionResponse.wait(1);
从 raw data 构造交易
除了直接调用部署合约方法等,我们也可以自己构造交易。
构造交易
const nonce = await wallet.getTransactionCount();
const tx = {
nonce: nonce,
gasPrice: 20000000000,
gasLimit: 1000000,
to: null,
value: 0,
data: "0x" + binary,
chainId: 1337,
};
签名交易
const signedTx = await wallet.signTransaction(tx);
发送交易
const sentTxResponse = await wallet.sendTransaction(tx);
await sentTxResponse.wait(1);
总结
以上就是我们通过 ethers.js
库与 Alchemy 的 Rinkeby 测试网络进行交互的步骤,在真正的生产项目开发中我们一般不会直接使用 ethers.js
这样的库,而是会使用 Brownie、HardHat 这样进一步封装的框架,但了解 Web3.py
或 ethers.js
等库的使用方法也非常重要。后续我还会对 HardHat 框架的使用作进一步讲解。
参考资料
25 岁的自白:花束般的恋爱
前言
现在是 2022 年 6 月 6 日,我 25 岁了。其实自两年前的今天发的那篇 『23 岁的自白:去追寻意义』之后,有打算每年都写一篇,算是对自己过去这或许精彩或许碌碌的一年作一个交代。
23 岁确实发生了很多事,但每次打开空白文档时都不知如何下笔。跟高中或是大学不同,这一年经历了很多变动,两个亲近的家人相继离世、感情变动、跨专业读研的压力、求职的焦虑...
已经很难用一个明确的主题或是几个关键词来概括这些经历,挣扎了几次,最终还是放弃了。也安慰自己说,还有跨年,等工作与未来一段时间的生活状态有更多确定性了,自己想说的一定更多吧。却一直拖到了现在。
那刚刚过去的 24 岁这一年呢?
关于爱情
想来也挺有意思,这一年也发生了很多事,而在回忆的时候,却可以用『花束般的恋爱』这一个词来概括。
扪心自问,自己并不是一个面对感情很成熟的人,追求自我、常常害怕承诺、人际界限也处理得并不明白,这些可以称之为“渣男”品质的 buff 一个没少。但我又似乎是一个幸运的人,遇到了遇到过愿意包容并陪着我慢慢成长的她。
这段感情是充满着期待与美好开始的,两个很像的人,有着共同的目标,有着自己热爱的东西,作为同路人携手向前。有很长一段时间我都沉浸在这种幸福的状态中,甚至怀疑自己值不值得这种幸运,毕竟自己曾经真的是一个很烂的人,也做了一些糟糕的事,得到原谅已经是万幸,怎么敢奢求更多。
在过去的这一年里,我变了很多,开始变得愿意去思考未来,期待未来,也开始给出一些承诺,不再害怕改变自己的生活。两个人一起来到北京,养猫、存钱、努力工作,装点着忙碌却充实的生活,期待着能一起回杭州的新阶段,勾画着属于两个人的未来。我常常想,这可能就是我的完美爱情了吧。
可是,感情最忌讳的就是自我满足的付出与理所应当的惯性吧。可能自己一直自认为是一个还算合格的男朋友吧,时间空间上做到了陪伴,还算努力工作,她想要的东西也会尽量满足,但可能也就仅此而已了。仔细回想了一下,有多久没有两个人敞开心扉聊聊了,有多久没有在某个特定的节日精心准备惊喜了,又有多久没有两个人一起出去好好地约会了,甚至在最重要的生日,都忘了吹蜡烛许愿,拖到了第二天来弥补,还有很多很多没有做到的。
也许有很多理由吧,可以用来让自己稍“心安”一点。比如两个人约好了不整什么虚的,甚至提前列好了未来一年互相送的对方想要的礼物;比如连续两个月每周末都加班,实在是没有心力筹划那么多出去玩的行程;比如两个人都已经从朝夕相处的同专业同学转向了新的工作阶段,已经没有那么多共同话题了;比如,...
当这段感情真的以一种戛然而止的方式结束后,我才后知后觉地明白,也许她并没有从中得到属于她的爱情。当爱情的幻想与现实慢慢重叠,当距离冲淡了热恋期的滤镜,当我将自己的情绪与分享欲都寄托在感情上时,也许感情已经慢慢背离了原本的轨道了,只是,我是那个一直被保护的幸福的人罢了。
我一直以来都自认为不属于一个典型的浪漫主义者,从没期待着自己的生活能够像书籍电影那样精彩,只是尽可能依从着自己的情感和意愿继续走下去。未曾想我会从这样一部电影里看到这么多自己生活的影子,甚至看到了结局。
但是,事业刚起步的生活阶段和感情真的没办法共存么?
时至今日,我依然不这么觉得,借用 『小鹿 Lawrence』某个视频里的一句话:
她其实是一个很容易满足的人,喂到了小熊猫,就能开心个好几天,甚至是我不用加班剪片子,也可以高兴到手舞足蹈,也会在看完『花束般的恋爱』后,哭得像个傻子。而我共情的点和米老师不太一样,是他们去书店,男主角一直在看『成功学』的书,因为我最近在看管理学。我理解他是因为,我们不是不喜欢文学了,而是真的有的时候生活只有拼了命的去改变、去适应,才能勉强的,维持现状。
有时候觉得,“维持现状”这个词真美好呀。在有的阶段我们可以惬意地感受、享受爱情的美好,而在有的阶段,仅仅是维持就已经需要拼了命地改变了。
总是觉得两个人的喜欢是基于互相的仰慕,对两个人的个性、所做的事、所热爱的东西出自内心的认可。被仰慕的人内心会被填满,而仰慕者眼神和举止都是在发光。也许自己将更少的关注放在对方作为独立个体的一举一动上了,也许自己曾经的很多吸引的点已经被淹没在生活工作琐事中,不再值得了。有很多的也许,但无论接受与否,至少这个阶段的缘分已经结束了。
不知不觉已经一个月过去了,令我自己都惊讶的是自己并没有那么理所应当地自暴自弃,就像最近刚看完的一部挺喜欢的剧,『我的解放日志』中的一句话:
“但我很想挣脱,我希望我的人生,可以真正幸福快乐起来。所以你来仰慕我吧,这样到了春天,你我都会蜕变。”
其实自己很少会公开讲述自己的感情,没想到以这样的方式碎碎念了那么多。这段感情于我的意义很重大,很遗憾没有在合适的时机分享出来。到了现在,大概已经是过期的糖了。
我依然在找寻这段感情或是这段人生的救赎,我的内心依然会保留或是重新燃起这份仰慕,直到没有办法继续前进吧,大概吧,无所谓结局,被爱的人内心会被填充,会感受到幸福吧。
关于其他
过去一年的工作历程中,从步入工作的忐忑,到临危受命地负责了一个项目的痛苦挣扎,再到一切渐渐步入正轨。在工作中得到了很多学习成长,遇到了一个很契合的 leader 和一个很有趣的项目团队,另一位 leader 还常常在 Twitter 上鼓励我沉淀成长,很感谢自己的第一份工作遇到了他们。
很感慨,虽然也有不少起起伏伏,但现在回想起来却大多无足轻重了,自己却为了这些忽视了生活和情感中真正重要的部分,大概这就是人生吧,永远也不可能在上帝视角下看待自己的一举一动。但至少,自己还在坚持选择的行业里做着喜欢的事,这已经是最大的幸运了吧。
有开始重新好好写博客,这一年里发布了 22 篇博文,虽然有一半都是上个月更新的。填了自己一直想写的博客搭建的坑,收到了不少关注和评论,也认识了不少志同道合的朋友。因这几篇文章还入驻了『少数派』成为了作者,文章被其创始人转了,还收到了约稿邀请,很有意思的体验。
新的一年里也还是要继续坚持输出吧。
一直想好好做开源,但是没想到却是上个月重新整理了自己的各类工具发布的一个 GitHub 项目『pseudoyu/yu-tools 个人工具箱』,让我收获了第一个 100 star,意外之喜。
之后新的一年能沉下心多输入和沉淀,对开源项目能有更多代码贡献吧。
大概自己还有着英语专业的魂,在『GoCN 翻译小组』完成了 8 篇 Go 语言相关的技术文章的翻译,参与区块链安全余弦大佬牵头的『区块链黑暗森林自救手册』,参与完成了英文版本的翻译和全球发布,也算是为区块链行业做了一些微小的贡献。
大概在技术之路上这些也仅仅是微不足道,但至少有在好好前进吧。
总结
这就是我的 24 岁,平凡却又难忘的一年岁月。
对于即将来到的 25 岁,我说不上有太多期待。引用一下我对『小鹿 Lawrence』一个视频转发评论中所说的话作为结束吧。
人生就是有这样的时候,需要勉强努力一个人生活下去。
感谢他作为我最爱的博主在动态下的评论,很受鼓舞。也感谢身边所有关心我的亲人朋友,新的一年,也请多多关照。
让窗口管理也能自动化,基于 yabai+skhd 的 macOS 窗口管理系统
前言
从 2017 年暑假攒钱买了第一台 MacBook Pro 开始,我使用 macOS 已经五年了。随着工作学习需要,也逐渐开始使用多屏工作流。因为随时都需要开很多窗口,如 IDE、文本编辑工具、终端、IM 软件、邮件客户端等,稍没注意就很乱,得不停地切换来找到需要的窗口,很不方便,于是我开始了自己的窗口管理方案探索之路。
窗口管理方案需求
首先,我梳理了一下自己的窗口管理需求,列出了以下几个核心要点:
- 每次打开一个新窗口后会在当前桌面自动进行智能分屏,如只有单窗口就全屏,两个窗口就二等分,以此类推
- 通过快捷键对分屏布局进行调整或恢复初始化布局
- 通过快捷键在不同窗口之间跳转
- 通过快捷键移动/交换不同窗口位置
- 通过快捷键便捷地对当前窗口作一些操作,如全屏、居中、发送到某个特定的桌面等
- 切换速度快
针对这些需求,我开始调研目前比较流行的几款窗口管理工具。
窗口管理工具
市面上已经有很多相对成熟的窗口管理工具解决方案,比如 Magnet、BetterTouchTool 附带的窗口吸附功能等,我都有购买使用,总体来说还是觉得不太适合自己的工作流。
Magnet 主要依赖于快捷键,尽管可以自己定制符合习惯的快捷键,但记忆成本很高,且如果有多台设备也需要用自己的帐号下载后重新配置才可以继续使用,并不方便。
BetterTouchTool 则是依赖于鼠标移动到窗口各个触发角,优势是不需要自己设置快捷键,仅需将鼠标移动到窗口边缘即可实现分屏。但与 Magnet 有着同样的弊端是,每次打开一个新窗口后还是需要自己手动去实现分屏,在很忙或者窗口很多的时候也常常会忘记,不便于管理。
既然现有的软件都无法完全满足我的需求,作为一个爱折腾的程序员,目标转向了开源社区一些可高度定制化的解决方案。
开源解决方案
Hammerspoon
Hammerspoon 是一个强大的 macOS 自动化工具,可以通过自己编写一些 lua 脚本实现窗口管理功能,并且可以自定义快捷键,除了窗口管理外,还可以实现例如休眠控制、剪贴板工具等丰富的功能。我配置使用了一阵子后,发现和 Magnet 类似,也没办法很好地实现智能分屏(或许有写好的脚本,但需要对很多软件进行单独配置,实现起来比较麻烦),于是也弃用了。
yabai + skhd
经过一番调研,从 YouTuber Josh Medeski 的 <Blazing Fast Window Management on macOS> 视频中找到了一个解决方案,开源、免费、定制化强,仅需一个配置文件就可以完美实现我的所有需求。
yabai
yabai 是 macOS 内置窗口管理工具的一个开源拓展,可以通过命令行工具实现自由控制窗口和多显示器。它最主要的特色是使用 binary space partitioning
算法自动修改窗口布局,使我们能够专注于窗口内容,不需要主动进行管理,仅需打开对应软件窗口,实现自动编排,工作流不会受到干扰。
skhd
skhd 是一个 macOS 快捷键管理工具,能够通过配置文件来调用绑定其他程序/命令,如 yabai 的窗口管理命令,实现高度定制化的窗口操作。skhd 的实现很注重性能,响应速度很快。
我的窗口管理配置
yabai
安装与基础配置
yabai 的安装很容易,按照其官方 wiki 说明安装即可。
个人推荐通过 brew 进行安装,如果没有安装过 brew
可以先通过官方一键脚本进行安装。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装完 brew
后,即可继续通过命令进行安装与基本配置。打开终端,输入以下命令:
brew install koekeishiya/formulae/yabai
安装脚本插件:
sudo yabai --install-sa
sudo yabai --load-sa
启动 yabai 服务:
brew services start yabai
注:如果是 macOS Big Sur 或 Monterey 系统,因为需要通过 API 注入的方式来调用脚本,需要配置一下 root
权限与开机自启,官方也提供了详细的操作方法:
编辑 /private/etc/sudoers.d/yabai
文件:
sudo visudo -f /private/etc/sudoers.d/yabai
在打开的文件中添加以下内容:
<user> ALL = (root) NOPASSWD: <path> --load-sa
上述 <>
内的 user
和 path
可以通过 whoami
和 which yabai
命令获取。
完成以上配置后,后续在 yabai 的 .yabairc
配置文件中加入下述两行:
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
自定义配置
yabai 的配置文件由用户在 $HOME
目录下的 .yabairc
文件进行管理,通过编辑器或命令行工具进行编辑:
vi ~/.yabairc
以下是我的个人配置,可以复制之后自己进行定制化修改。我已经将我的个人配置放在了 GitHub 代码托管平台,可以点击这里查看。
# !/usr/bin/env sh
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
# 全局配置
yabai -m config mouse_follows_focus off
yabai -m config focus_follows_mouse off
yabai -m config window_origin_display default
yabai -m config window_placement second_child
yabai -m config window_topmost off
yabai -m config window_shadow on
yabai -m config window_opacity off
yabai -m config active_window_opacity 1.0
yabai -m config normal_window_opacity 0.90
yabai -m config window_border off
yabai -m config window_border_width 6
yabai -m config active_window_border_color 0xff775759
yabai -m config normal_window_border_color 0xff555555
yabai -m config insert_feedback_color 0xffd75f5f
yabai -m config split_ratio 0.50
yabai -m config auto_balance off
yabai -m config mouse_modifier fn
yabai -m config mouse_action1 move
yabai -m config mouse_action2 resize
yabai -m config mouse_drop_action swap
# space 配置
yabai -m config layout bsp
yabai -m config top_padding 15
yabai -m config bottom_padding 15
yabai -m config left_padding 15
yabai -m config right_padding 15
yabai -m config window_gap 15
# 忽略的 app
yabai -m rule --add app="^System Preferences$" manage=off
yabai -m rule --add app="^Archive Utility$" manage=off
yabai -m rule --add app="^Logi Options+$" manage=off
yabai -m rule --add app="^Alfred Preferences$" manage=off
我的配置基本仅在官方提供的示例上进行了部分修改,使用 bsp
算法智能分屏,并调整了 space 为 15,这样的间距更舒服。
我还添加了一些自定义的规则,可以在打开系统配置、解压工具等无法自定义窗口的应用时候忽略。
整体呈现如下(以下效果为打开应用窗口后算法自动编排,且新增窗口会自动重排):
skhd
配置好了 yabai 后,我们已经实现了智能分屏,但是有时候算法提供的窗口位置不满足我们的需求,或是我们需要频繁在各个窗口之间切换/调整,那就需要用到 skhd 工具来定制一些快捷键配置。
安装
skhd 也可以通过 brew
包管理工具进行安装,很方便:
brew install koekeishiya/formulae/skhd
安装完成后启动即可:
brew services start skhd
自定义配置
与 yabai 类似,skhd 的配置是通过 $HOME/.skhdrc
配置文件进行管理的,通过编辑器或命令行工具进行编辑即可。
vi ~/.skhdrc
以下是我的个人配置,可以复制之后自己进行定制化修改。我已经将我的个人配置放在了 GitHub 代码托管平台,可以点击这里查看。
# 窗口聚焦
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east
# 交换窗口
shift + alt - h : yabai -m window --swap west
shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north
shift + alt - l : yabai -m window --swap east
# 移动窗口
shift + alt + ctrl - h : yabai -m window --warp west
shift + alt + ctrl - h : yabai -m window --warp south
shift + alt + ctrl - h : yabai -m window --warp north
shift + alt + ctrl - h : yabai -m window --warp east
# 旋转窗口布局
alt - r : yabai -m space --rotate 90
# 全屏
alt -f : yabai -m window --toggle zoom-fullscreen
# 设置/取消窗口 space
alt - g : yabai -m space --toggle padding; yabai -m space --toggle gap
# 挂起窗口至屏幕中央/取消挂起窗口
alt - t : yabai -m window --toggle float;\
yabai -m window --grid 4:4:1:1:2:2
# 修改窗口切分方式
alt - e : yabai -m window --toggle split
# 重置窗口布局
shift + alt - 0 : yabai -m space --balance
# 移动窗口至特定桌面
shift + alt - 1 : yabai -m window --space 1; yabai -m space --focus 1
shift + alt - 2 : yabai -m window --space 2; yabai -m space --focus 2
shift + alt - 3 : yabai -m window --space 3; yabai -m space --focus 3
shift + alt - 4 : yabai -m window --space 4; yabai -m space --focus 4
shift + alt - 5 : yabai -m window --space 5; yabai -m space --focus 5
shift + alt - 6 : yabai -m window --space 6; yabai -m space --focus 6
shift + alt - 7 : yabai -m window --space 7; yabai -m space --focus 7
shift + alt - 8 : yabai -m window --space 8; yabai -m space --focus 8
shift + alt - 9 : yabai -m window --space 9; yabai -m space --focus 9
# 增加窗口大小
shift + alt - w : yabai -m window --resize top:0:-20
shift + alt - d : yabai -m window --resize left:-20:0
# 减少窗口大小
shift + alt - s : yabai -m window --resize bottom:0:-20
shift + alt - a : yabai -m window --resize top:0:20
简单来说,我配置了与 vim 快捷键操作逻辑类似的配置,实现了以下常用功能:
<Option> + hjkl
在不同的窗口之间聚焦<Option> + <Shift> + hjkl
交换不同窗口<Option> + <Shift> + 0
重置窗口布局<Option> + <Shift> + <1~9>
快速将当前窗口移动到特定桌面<Option> + f
全屏<Option> + t
挂起窗口至屏幕中央/取消挂起窗口<Option> + g
设置/取消窗口 space<Option> + r
旋转窗口布局<Option> + e
修改窗口切分方式
其中 hjkl
是 vim 编辑器常用的操作,大家也可以修改为上下左右或其他自己喜欢的键位。
完成以上配置后,我们就实现了 yabai 智能窗口管理以及通过简单的快捷键进行窗口操作,接下来我们对 macOS 系统进行一些配置,来优化一下我们的窗口管理系统吧。
macOS 桌面管理
macOS 提供了多桌面管理的强大功能,可以理解为每个桌面区域都是一个工作区,可以独立摆放不同的窗口,如下图所示:
我们可以通过桌面来区分自己的工作区,如桌面 1 作为自己开发 IDE、终端,桌面 2 作为浏览器查询、写文档,桌面 3 用于处理微信、邮件等通讯工具,桌面 4 作为休闲娱乐、视频播放等,这样我们仅需在几个桌面间切换,实现自己的工作流逻辑,而不需要担心窗口聚焦问题。
为了进一步优化,更快速地完成桌面之间的切换,我们可以通过 Alfred、Raycast 等启动器来快速启动/聚焦应用,也可以通过 AltTab 或 Manico 等窗口切换软件提供的快捷键对已开启的应用进行快速切换。
除此之外,macOS 系统设置里也提供了自定义切换的快捷方式,我把 <Option> + <1~9>
修改为了特定的桌面,这样平时工作的时候按对应快捷键就可以迅速到对应的工作区,很快就能形成肌肉记忆。
打开 系统偏好设置 - 键盘 - 快捷键 - 调度中心,我们可以为不同的桌面设置对应快捷键,如果没有显示,则可以先打开 9 个空桌面进行配置,之后关闭桌面后仍会保留配置。
除此之外,还有一个我喜欢的小设置,打开 系统偏好设置 - 辅助功能 - 显示 - 显示器 - 减弱动态效果,这样会把不同桌面之间的窗口切换动画效果减弱,提高切换速度,配合我们的自动分屏和快捷键,实现快速强大的多工作区切换。我是速度效率优先,喜欢 macOS 动效的这一步可以不进行设置。
总结
以上就是我当前的 macOS 窗口管理解决方案,我是一个很爱折腾软件和各项配置的人,有时候常常为了一个小小的需求折腾好几天,一直追求自己的最佳实践。
也许很多配置并不能为我在之后的工作中节省非常多的时间,窗口整理切换也就是几秒钟的差异,但当我在日常工作学习中使用自己当初花了很多心思调研和优化的系统后,或当一个突发的需求使用到了我之前的一个折腾过的软件/配置时,会莫名地很开心、很有成就感,这大概就是折腾的意义吧,也希望大家都能享受到这样的快乐。
我在 GitHub 上维护了一个工具箱项目 『GitHub - pseudoyu/yu-tools』,记录了很多其他软硬件的选择,也在不断更新优化,有感兴趣的也欢迎交流,我也会逐步出一些对应的配置/使用教程。
注:本文由本人授权首发于『少数派』,原文地址为:『让窗口管理也能自动化,基于 yabai+skhd 的 macOS 窗口管理系统』。
参考资料
Solidity 智能合约开发 - 玩转 Web3.py
前言
在前文《Solidity 智能合约开发 - 基础》中,我们学习了 Solidity 的基本语法,并且了解了可以通过 Brownie 与 HardHat 等框架进行调试。但在使用这些封装好的框架之前,我们可以通过 Web3.py 直接与我们本地的 Ganache 节点进行交互,以便更好了解其原理,也为我们后续更好使用框架打好基础。
本文以 Web3.py 为例,实现了基础的合约编译、部署至本地 Ganache 网络、与合约交互等功能。
可以点击这里访问本测试 Demo 代码仓库。
Web3.py
Web3.py 是 Python 的一个开源库,它提供了一个简单的 API,可以让我们通过 Python 程序与以太坊网络进行交互。其 GitHub 地址为 ethereum/web3.py,可以访问其官方文档进行使用。
安装
我们可以通过 Python 包管理工具 pip 安装 Web3.py,如下:
pip3 install web3
使用
使用 import
导入所需方法即可使用
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("HTTP://127.0.0.1:7545"))
Solidity 合约编译
合约源码
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract SimpleStorage {
uint256 favoriteNumber;
bool favoriteBool;
struct People {
uint256 favoriteNumber;
string name;
}
People public person = People({favoriteNumber: 2, name: "Arthur"});
People[] public people;
mapping(string => uint256) public nameToFavoriteNumber;
function store(uint256 _favoriteNumber) public returns (uint256) {
favoriteNumber = _favoriteNumber;
return favoriteNumber;
}
function retrieve() public view returns (uint256) {
return favoriteNumber;
}
function addPerson(string memory _name, uint256 _favoriteNumber) public {
people.push(People({favoriteNumber: _favoriteNumber, name: _name}));
nameToFavoriteNumber[_name] = _favoriteNumber;
}
}
这是一个简单的存储合约,通过一个 People 结构体对象来存储人名和他喜欢数字,通过一个数组来存储多个人的信息,并提供了添加、查找方法。
读取合约源文件
当我们通过 VSCode 或其他编辑器完成 Solidity 合约编写与语法检查后,需要读取合约源文件并存入变量,供后续编译使用。
import os
with open("./SimpleStorage.sol", "r") as file:
simple_storage_file = file.read()
上述代码将 SimpleStorage.sol
文件内容读取到变量 simple_storage_file
中。
编译合约
安装 solcx
合约编译需要预先安装 solcx
工具。
pip3 install py-solc-x
导入 solcx
使用 import
导入所需方法即可使用
from solcx import compile_standard, install_solc
编译
install_solc("0.6.0")
compiled_sol = compile_standard(
{
"language": "Solidity",
"sources": {"SimpleStorage.sol": {"content": simple_storage_file}},
"settings": {
"outputSelection": {
"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}
}
},
},
solc_version="0.6.0",
)
上述代码我们安装了 0.6.0 版本的 Solidity 编译程序,使用 solcx
库中的compile_standard
方法对上文读取的合约源文件进行编译,并将编译结果存入变量 compiled_sol
中。
获取编译结果
编译成功后,使用以下代码将编译好的合约写入文件
import json
with open("compiled_code.json", "w") as file:
json.dump(compiled_sol, file)
获取 bytecode 与 abi
Solidity 合约的部署与交互需要 bytecode 与 abi 两个部分,我们可以通过通过以下代码将其写入对应变量供后续操作使用。
# get bytecode
bytecode = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["evm"][
"bytecode"
]["object"]
# get abi
abi = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["abi"]
本地 Ganache 环境
智能合约的调试需要将合约部署到实际的链上,而部署到 Ethereum 主网络或 Rinkeby/Koven 等测试网等也不方便调试,因此,我们需要一个本地的区块链环境,Ganache 就给我们提供了一个这样的本地调试环境。Ganache 主要分为 GUI 和 CLI 两种安装方式。
Ganache GUI
在自己的本地环境,如 Mac/Windows 等系统,我们可以选择带图形界面的 Ganache 客户端,安装与使用都十分便捷,在 Ganache 官网选择对应版本即可。
安装完成后选择 Quick Start 即可快速启动一条本地运行的区块链网络,并初始化了十个拥有 100 ETH 的账户,开发调试过程中可使用。
Ganache CLI 安装
如果您的系统不支持 GUI 安装,我们可以使用 CLI 安装,安装方式如下:
npm install --global yarn
yarn global add ganache-cli
等待其安装完成后即可启动本地测试网络,与 Ganache GUI 一致,也包含初始化账户与余额。
通过 web3 连接本地 Ganache 环境
web3 提供了库可以方便地连接到本地 Ganache 环境:
w3 = Web3(Web3.HTTPProvider("HTTP://127.0.0.1:7545"))
chain_id = 5777
my_address = "0x2F490e1eA91DF6d3cC856e7AC391a20b1eceD6A5"
private_key = "0fa88bf96b526a955a6126ae4cca0e72c9c82144ae9af37b497eb6afbe8a9711"
Solidity 合约部署
创建合约
我们可以通过 web3 库创建合约。
SimpleStorage = w3.eth.contract(abi=abi, bytecode=bytecode)
部署合约
部署合约分为三个主要步骤:
- 构造交易
- 签名交易
- 发送交易
构造交易
nonce = w3.eth.getTransactionCount(my_address)
transaction = SimpleStorage.constructor().buildTransaction(
{
"chainId": chain_id,
"gasPrice": w3.eth.gas_price,
"from": my_address,
"nonce": nonce,
}
)
签名交易
signed_txn = w3.eth.account.sign_transaction(transaction, private_key=private_key)
发送交易
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
与合约交互
与部署合约步骤类似,我们可以通过 web3 库与合约交互,也分为构造交易、签名交易和发送交易三个步骤。
构造交易
simple_storage = w3.eth.contract(address=tx_receipt.contractAddress, abi=abi)
store_transaction = simple_storage.functions.store(67).buildTransaction(
{
"chainId": chain_id,
"gasPrice": w3.eth.gas_price,
"from": my_address,
"nonce": nonce + 1,
}
)
签名交易
signed_store_txn = w3.eth.account.sign_transaction(
store_transaction, private_key=private_key
)
发送交易
send_store_tx = w3.eth.send_raw_transaction(signed_store_txn.rawTransaction)
tx_receipt = w3.eth.wait_for_transaction_receipt(send_store_tx)
总结
以上就是我们通过 Web3.py 库与本地 Ganache 测试网络进行交互的步骤,在真正的生产项目开发中我们一般不会直接使用 Web3.py 这样的库,而是会使用 Brownie、HardHat 等进一步封装的库,但了解 Web3.py 或 Web3.js 等库的使用方法也非常重要。
参考资料
Hugo + GitHub Action,搭建你的博客自动发布系统
前言
在之前的一篇《免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)》中,我提到了自己通过 Hugo 这个静态网站生成器来真正搭建我的个人博客,并在 Hugo 开源社区中 hugo-theme-den 这个主题基础上进行了一些个人定制化改造和配置,满足了自己的需求。
我的方案主要分为以下几个核心部分:
- 个人博客源仓库,对博客配置及所有文章
.md
源文件进行版本管理,配合 GitHub Action 进行自动化部署,自动生成静态站点推送到 GitHub Pages 博客发布仓库。 - (可选)GitHub Pages 博客发布仓库,以
username.github.io
形式命名的仓库,使用 GitHub Pages 实现网站部署,可以通过配置域名 CNAME 解析使用自定义域名。 - (可选)Cloudflare 账户与 Cloudflare Pages 项目,
- Hugo 主题仓库,fork 喜欢的主题,并对自己的个人定制化改造配置进行版本管理,通过
git submodule
的方式链接到个人博客源仓库。 - 其他组件源仓库,如 umami 网站数据统计及 Cusdis 网站评论系统等。
下文会对搭建、本地测试、自动化部署维护等过程进行详细讲解,希望对大家所有帮助。
使用 Hugo 搭建博客
Hugo 是用 Go 实现的博客工具,采用 Markdown 进行文章编辑,自动生成静态站点文件,支持丰富的主题配置,也可以通过 js 嵌入像是评论系统等插件,高度定制化。除了 Hugo 外, 还有 Gatsby、Jekyll、Hexo、Ghost 等选择,实现和使用都差不多,可以根据自己的偏好进行选择。
安装 Hugo
我使用的是 macOS,所以使用官方推荐的 homebrew 方式进行 hugo 程序的安装,其他系统也类似。
brew install hugo
完成后,使用以下命令进行验证:
hugo version
创建 Hugo 网站
通过上述命令安装 hugo 程序后,就可以通过 hugo new site
命令进行网站创建、配置与本地调试了。
hugo new site blog-test
配置主题
当通过上文命令创建我们的站点后,需要进行主题配置,Hugo 社区有了很丰富的主题,可以通过官网 Themes 菜单选择自己喜欢的风格,查看预览效果,选择后可以进入主题项目仓库,一般都会有很详细的安装及配置说明。下面我就以我目前在使用的 hugo-theme-den 这个主题为例,演示一下配置流程。
关联主题仓库
我们可以将主题仓库直接 git clone
下来进行使用,但这种方式有一些弊端,当之后自己对主题进行修改后,可能会与原主题产生一些冲突,不方便版本管理与后续更新。我采用的是将原主题仓库 fork
到自己的账户,并使用 git submodule
方式进行仓库链接,这样后续可以对主题的修改进行单独维护。
cd blog-test/
git init
git submodule add https://github.com/pseudoyu/hugo-theme-den themes/hugo-theme-den
更新主题
如果是 clone 了其他人的博客项目进行修改,则需要用以下命令进行初始化:
git submodule update --init --recursive
如果需要同步主题仓库的最新修改,需要运行以下命令:
git submodule update --remote
初始化主题配置及发布
每个主题一般都会提供一些实例配置与初始页面,开始使用主题时可以将其 exampleSite/
目录下的文件复制到站点目录下,在此基础上进行调整配置。
cp -rf themes/hugo-theme-den/exampleSite/* ./
初始化主题基础配置后,我们可以在 config.toml
文件中进行站点细节配置,具体配置项参考各主题说明文档。
完成后,可以通过 hugo new
命令发布新文章。
hugo new posts/blog-test.md
本地调试站点
Hugo 会生成静态网页,我们在本地编辑调试时可以通过 hugo server
命令进行本地实时调试预览,无须每次都重新生成。
hugo server
运行服务后,我们可以通过浏览器 http://localhost:1313
地址访问我们的本地预览网页。
购买域名
作为一个对外发布的网站,我们需要购买一个域名并配置解析,指向我们网站所在的服务器,才能让外界以比较方便的方式访问。域名购买平台很多,我用过的有 Cloudflare、NameSilo、GoDaddy 等,我最后常用的还是 Cloudflare,因为其同时还提供了 CDN、网站数据分析、定制规则等强大功能。
首先我们需要注册一个 Cloudflare 账户,登录后选择左侧边栏的“注册域”,并搜索自己想注册的域名。
选择了心仪的域名后,点击并选择购买时限并填写个人信息。
选择付款方式,建议可以选择自动续订,以免忘记续费。
类型选择 Personal 即可,并点击完成购买。
等待 Cloudflare 处理后即可查看信息。
Cloudflare Pages 发布博客(推荐)
[2024-06-30 更新]
Cloudflare Pages 介绍
GitHub Pages 已经是一个免费且强大的静态网站托管平台了,且可以和 GitHub 代码仓库无缝对接,但国内的访问速度不是很理想,又由于我的域名本身托管在 Cloudflare,于是我尝试了 Cloudflare Pages,这是 Cloudflare 推出的静态网站托管服务,完全免费(至少我至今没有超过免费额度),且可以直接连接 GitHub 代码仓库,可以实现和 GitHub Pages 一样的自动化部署功能并且提供更优的访问线路,是目前更好的解决方案。
创建 Cloudflare Pages 项目
首先我们需要注册 Cloudflare 账号,并且在左侧选择「Worker 和 Pages」菜单,点击创建项目。
下一步会有两个选项,一个是直接把静态文件上传,还有一个是连接 git,第一种通常是适用于一些单页面或者非常低频更新从而不需要 GitHub 托管代码的项目,如一些单 html 页面的网站等;而连接 git 则能够更好地针对我们每一次的博客提交自动构建新的网页,也是我们采用的方式。
构建 Hugo
由于 Cloudflare Pages 提供了几乎市面上所有常用的网站构建工具,如 Next.js、Astro、Hugo 等,我们可以选择两种方式来进行部署:
- 直接使用 Cloudflare Pages 提供的构建工具,直接根据仓库代码生成静态网页并部署上线
- 以与上文 GitHub Pages 类似的方式生成静态网页的仓库或分支,通过 Cloudflare Page 直接进行部署上线
第一种方式可以大大简化我们的部署流程,因此我们要做的只有将上文所创建的博客源仓库(如我的仓库为 pseudoyu/yu-blog)进行链接,每次提交就会自动构建并部署,只需要等待几十秒即可完成,而无须像 GitHub Pages 那样自己写各种构建 GitHub Actions 命令,很方便,也是最为推荐的方式。
而第二种方式其实跟 GitHub Pages 的方式类似,比较适用于对于构建过程有一些特殊需求的网站,如我在构建我的个人博客网站时同时在 GitHub Actions 执行了一些 Python 在自动更新我的 About 页面,这些复杂操作就无法直接使用 Cloudflare Pages 提供的构建工具,因此我选择了第二种方式。
可以在自己的博客源仓库中直接使用如下简化版的 GitHub Actions:
name: deploy
on:
push:
workflow_dispatch:
schedule:
# Runs everyday at 8:00 AM
- cron: "0 0 * * *"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
fetch-depth: 0
// Other steps you want to add
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
- name: Build Web
run: hugo
- name: Deploy Web
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: cf-pages
on
表示 GitHub Action 触发条件,我设置了 push
、workflow_dispatch
和 schedule
三个条件:
push
,当这个项目仓库发生推送动作后,执行 GitHub Actionworkflow_dispatch
,可以在 GitHub 项目仓库的 Action 工具栏进行手动调用schedule
,定时执行 GitHub Action,如我的设置为北京时间每天早上执行,主要是使用一些自动化统计 CI 来自动更新我博客的关于页面,如本周编码时间,影音记录等,如果你不需要定时功能,可以删除这个条件
jobs
表示 GitHub Action 中的任务,我们设置了一个 build
任务,runs-on
表示 GitHub Action 运行环境,我们选择了 ubuntu-latest
。我们的 build
任务包含了 Checkout
、Setup Hugo
、Build Web
和 Deploy Web
四个主要步骤,其中 run
是执行的命令,uses
是 GitHub Action 中的一个插件,我们使用了 peaceiris/actions-hugo@v2
和 peaceiris/actions-gh-pages@v3
这两个插件。其中 Checkout
步骤中 with
中配置 submodules
值为 true
可以同步博客源仓库的子模块,即我们的主题模块。
以上 GitHub Actions 会将博客生成的静态文件推送到 cf-pages
分支,因为我们在 Cloudflare Pages 中选择该分支进行部署即可,因为如我们需要添加一些额外的步骤,可以在构建之前添加一些自定义的步骤,很灵活,具体应用可以看「GitHub - yu-blog/.github/workflows/deploy.yml」示例。
配置自定义域名
自定义域名也非常简单,直接在导航栏中选中自定义域,并添加想要绑定的域名。
如果是在 Cloudflare 中注册/托管的域名,可以直接选择「激活域」,会自动添加 DNS 解析,如果是其他平台的域名,则手动添加 CNAME 解析即可。
配置 DNS 完成后,等待生效即可。
GitHub Pages 发布博客
创建仓库
GitHub Pages 项目需要符合 username.github.io
的特殊命名格式,仓库建立完成后,可以在设置中配置自己注册的自定义域名来指向 GitHub Pages 生成的网址。此外,需要将博客站点配置文件 config.toml
中的 baseURL
改为自己的自定义域名,格式为 "https://www.pseudoyu.com/"
,这样博客站点才能正常访问 GitHub Pages 生成的网站服务。
域名解析
按照上文步骤注册好后,需要在域名托管商进行 DNS 解析,在这里我们需要选择 CNAME,指向我们的 GitHub Pages 网址。
因为 CNAME 解析没办法设置 root 域名,即只能设置 www.pseudoyu.com
或其他子域名,而不是 pseudoyu.com
,因此,我们可以通过 Cloudflare 上自定义规则设置域名重定向,具体配置如下,仅需将我的域名替换成自己的域名即可。即使你是通过 NameSilo 注册的域名,也可以通过 Cloudflare 来添加站点以实现功能,或者其他托管平台也有类似的功能,按照说明配置即可。
完成上述准备工作后,我们现在已经可以通过自定义域名来访问我们的 GitHub Pages 页面了,目前因为项目仓库是空的,访问后会报 404
页面。
我们希望 Hugo 生成的静态网站能通过 GitHub Pages 服务进行托管,而无需自己维护服务,更稳定、安全,因此我们需要上传 Hugo 生成的静态网页文件至 GitHub Page 项目仓库。
手动发布
当我们编辑博客内容并通过 hugo server
本地调试后,就可以通过 hugo
命令生成静态网页文件了。
hugo
cd public/
Hugo 默认会将生成的静态网页文件存放在 public/
目录下,我们可以通过将 public/
目录初始化为 git 仓库并关联我们的 pseudoyu/pseudoyu.github.io
远程仓库来推送我们的网页静态文件。
git init
git remote add origin git@github.com:pseudoyu/pseudoyu.github.io
git add .
git commit -m "add test"
核对文件修改后,即可通过 git push origin master
推送到 GitHub Pages 仓库,稍等几分钟即可通过我们的自定义域名来访问我们的博客站点了,和我们 hugo server
本地调试完全一致。
自动发布
通过上述命令我们可以手动发布我们的静态文件,但还是有以下弊端:
- 发布步骤还是比较繁琐,本地调试后还需要切换到
public/
目录进行上传 - 无法对博客
.md
源文件进行备份与版本管理
因此,我们需要简单顺滑的方式来进行博客发布,首先我们初始化博客源文件的仓库,如我的仓库为 pseudoyu/yu-blog。
因为我们的博客基于 GitHub 与 GitHub Pages,可以通过官方提供的 GitHub Action 进行 CI 自动发布,下面我会进行详细讲解。GitHub Action 是一个持续集成和持续交付(CI/CD) 平台,可用于自动执行构建、测试和部署管道,目前已经有很多开发好的工作流,可以通过简单的配置即可直接使用。
配置在仓库目录 .github/workflows
下,以 .yml
为后缀。我的 GitHub Action 配置为 pseudoyu/yu-blog deploy.yml,自动发布示例配置如下:
name: deploy
on:
push:
workflow_dispatch:
schedule:
# Runs everyday at 8:00 AM
- cron: "0 0 * * *"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
- name: Build Web
run: hugo
- name: Deploy Web
uses: peaceiris/actions-gh-pages@v3
with:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
EXTERNAL_REPOSITORY: pseudoyu/pseudoyu.github.io
PUBLISH_BRANCH: master
PUBLISH_DIR: ./public
commit_message: ${{ github.event.head_commit.message }}
首先需要将上述 deploy.yml
中的 EXTERNAL_REPOSITORY
改为自己的 GitHub Pages 仓库,如我的设置为 pseudoyu/pseudoyu.github.io
。
因为我们需要从博客仓库推送到外部 GitHub Pages 仓库,需要特定权限,要在 GitHub 账户下 Setting - Developer setting - Personal access tokens
下创建一个 Token。
权限需要开启 repo
与 workflow
。
配置后复制生成的 Token(注:只会出现一次),然后在我们博客源仓库的 Settings - Secrets - Actions
中添加 PERSONAL_TOKEN
环境变量为刚才的 Token,这样 GitHub Action 就可以获取到 Token 了。
完成上述配置后,推送代码至仓库,即可触发 GitHub Action,自动生成博客页面并推送至 GitHub Pages 仓库。
而 GitHub Pages 仓库更新后,又会自动触发官方页面部署 CI,实现我们的网站发布。
经过上述配置,我们已经实现了 Hugo 博客本地搭建及版本管理、GitHub Pages 部署网站发布,Hugp 主题管理及更新等功能,实现了完整的系统。现在每当我们本地通过熟悉的 Markdown 语法完成博客内容编辑后,只需要推送代码,等待几分钟,即可通过我们的自定义域名访问更新后的网站。
组件拓展
一个完整的博客系统还需要一些组件,如网站数据统计、评论系统等,我针对这两个核心需求也写了完整的 Serverless 搭建教程,可根据需求进行部署配置。
总结
以上就是我通过 Hugo 与 GitHub Action 实现的免费博客自动部署系统,我自己的实现仓库在 pseudoyu/yu-blog 仓库中,我定制化的主题仓库在 pseudoyu/hugo-theme-den 中。
我使用 GitHub Action 还实现了很多好玩的自动化个人统计功能,自动更新我的GitHub Profile,项目仓库为 pseudoyu/pseudoyu,可以进入 .github/workflows
中自行探索。这些系统还在不断完善中,欢迎大家参与贡献与交流。
参考资料
Solidity 智能合约开发 - 基础
前言
去年读研的时候上的 HKU 的 <COMP7408 Distributed Ledger and Blockchain Technology>
,课程中学习了以太坊智能合约的开发,做了一个简单的图书管理 ÐApp,然后毕业设计也选择了基于 Ethereum 做了一个音乐版权应用,详见 Uright - 区块链音乐版权管理ÐApp,对 Solidity 开发有一些基础了解。
后来工作后主要做联盟链和业务开发这一块,很久没有碰过合约,对于语法和底层一些概念都已经一知半解,正好最近做的项目是基于 EVM 的一条链,涉及了一些基本的存证、回检和迁移相关合约的开发,调试起来有些吃力,于是打算系统学习一下,梳理一下笔记成文章,敦促自己好好思考总结。
这系列文章也会收录在我的个人知识库项目 《区块链入门指南》中,希望在学习过程中不断完善。有兴趣的朋友也可以访问项目仓库参与贡献或提出建议。
本文为系列第一篇,主要涉及 Solidity 基础知识。
智能合约 与 Solidity 语言
智能合约是运行在链上的程序,合约开发者可以通过智能合约实现与链上资产/数据进行交互,用户可以通过自己的链上账户来调用合约,访问资产与数据。因为区块链保留区块历史记录的链式结构、去中心化、不可篡改等特征,智能合约相比传统应用来说能更公正、透明。
然而,因为智能合约需要与链进行交互,部署、数据写入等操作都会消耗一定费用,数据存储与变更成本也比较高,因此在设计合约时需要着重考虑资源的消耗。此外,常规智能合约一经部署就无法进行修改,因此,合约设计时也需要多考虑其安全性、可升级性与拓展性。
Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言,在 EVM 虚拟机上运行,语法整体类似于 Javascript,是目前最流行的智能合约语言,也是入门区块链与 Web3 所必须掌握的语言。针对上述的一些合约编写的问题,Solidity 也都有相对完善的解决方案支持,后续会详细讲解。
开发/调试工具
与常规编程语言不同,Solidity 智能合约的开发往往无法直接通过一个 IDE 或本地环境进行方便的调试,而是需要与一个链上节点进行交互。开发调试往往也不会直接与主网(即真实资产、数据与业务所在的链)进行交互,否则需要承担高额手续费。目前开发调试主要有以下几种方式与框架:
- Truffle。Truffle 是一个非常流行的 Javascript 的 Solidity 合约开发框架,提供了完整的开发、测试、调试工具链,可以与本地或远程网络进行交互。
- Brownie。Brownie 是一个基于 Python 的 Solidity 合约开发框架,以简洁的 Python 语法为调试和测试提供了便捷的工具链。
- Hardhat。Hardhat 是另一个基于 Javascript 的开发框架,提供了非常丰富的插件系统,适合开发复杂的合约项目。
除了开发框架外,更好地进行 Solidity 还需要熟悉一些工具:
- Remix IDE。通过 Ethereum 官方提供的基于浏览器的 Remix 开发工具进行调试,Remix 会提供完整的 IDE、编译工具、部署调试的测试节点环境、账户等,可以很方便地进行测试,这是我学习使用时用的最多的工具。Remix 还可以通过 MetaMask 插件与测试网、主网进行直接交互,部分生产环境也会使用它进行编译部署。
- Remix IDE 对于语法提示等并不完善,因此,可以使用 Visual Studio Code 配合 Solidity 进行编写,有更好的体验。
- MetaMask。一个常用的钱包应用,开发过程中可以通过浏览器插件与测试网、主网进行交互,方便开发者进行调试。
- Ganache。Ganache 是一个开源的虚拟本地节点,提供了一个虚拟链网络,可以通过各类 Web3.js、Remix 或一些框架工具与之交互,适合有一定规模的项目进行本地调试与测试。
- Infura。Infura 是一个 IaaS(Infrastructure as a Service)产品,我们可以申请自己的 Ethereum 节点,通过 Infura 提供的 API 进行交互,可以很方便地进行调试,也更接近生产环境。
- OpenZeppelin。OpenZeppelin 提供了非常多的合约开发库与应用,能兼顾安全、稳定的同时给予开发者更好的开发体验,降低合约开发成本。
合约编译/部署
Solidity 合约是以 .sol
为后缀的文件,无法直接执行,需要编译为 EVM(Ethereum Virtual Machine)可识别的字节码才能在链上运行。
编译完成后,由合约账户进行部署到链上,其他账户可通过钱包与合约进行交互,实现链上业务逻辑。
核心语法
经过上文,我们对 Solidity 的开发、调试与部署有了一定了解。接下来我们就具体学习一下 Solidity 的核心语法。
数据类型
与我们常见的编程语言类似,Solidity 有一些内置数据类型。
基本数据类型
boolean
,布尔类型有true
和false
两种类型,可以通过bool public boo = true;
来定义,默认值为false
int
,整数类型,可以指定int8
到int256
,默认为int256
,通过int public int = 0;
来定义,默认值为0
,还可以通过type(int).min
和type(int).max
来查看类型最小和最大值uint
,非负整数类型,可以指定uint8
、uint16
、uint256
,默认为uint256
,通过uint8 public u8 = 1;
来定义,默认值为0
address
,地址类型,可以通过address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
来定义,默认值为0x0000000000000000000000000000000000000000
bytes
,byte[]
的缩写,分为固定大小数组和可变数组,通过bytes1 a = 0xb5;
来定义
还有一些相对复杂的数据类型,我们单独进行讲解。
Enum
Enum
是枚举类型,可以通过以下语法来定义
enum Status {
Unknown,
Start,
End,
Pause
}
并通过以下语法来进行更新与初始化
// 实例化枚举类型
Status public status;
// 更新枚举值
function pause() public {
status = Status.Pause;
}
// 初始化枚举值
function reset() public {
delete status;
}
数组
数组是一种存储同类元素的有序集合,通过 uint[] public arr;
来进行定义,在定义时可以预先指定数组大小,如 uint[10] public myFixedSizeArr;
。
需要注意的是,我们可以在内存中创建数组(关于 memory
与 storage
等差异后续会详细讲解),但是必须固定大小,如 uint[] memory a = new uint[](5);
。
数组类型有一些基本操作方法,如下:
// 定义数组类型
uint[7] public arr;
// 添加数据
arr.push(7);
// 删除最后一个数据
arr.pop();
// 删除某个索引值数据
delete arr[1];
// 获取数组长度
uint len = arr.length;
mapping
mapping
是一种映射类型,使用 mapping(keyType => valueType)
来定义,其中键需要是内置类型,如 bytes
、int
、string
或合约类型,而值可以是任何类型,如嵌套 mapping
类型。需要注意的是,mapping
类型是不能被迭代遍历的,需要遍历则需要自行实现对应索引。
下面说明一下各类操作:
// 定义嵌套 mapping 类型
mapping(string => mapping(string => string)) nestedMap;
// 设置值
nestedMap[id][key] = "0707";
// 读取值
string value = nestedMap[id][key];
// 删除值
delete nestedMap[id][key];
Struct
struct
是结构类型,对于复杂业务,我们经常需要定义自己的结构,将关联的数据组合起来,可以在合约内进行定义
contract Struct {
struct Data {
string id;
string hash;
}
Data public data;
// 添加数据
function create(string calldata _id) public {
data = Data{id: _id, hash: "111222"};
}
// 更新数据
function update(string _id) public {
// 查询数据
string id = data.id;
// 更新
data.hash = "222333"
}
}
也可以单独文件定义所有需要的结构类型,由合约按需导入
// 'StructDeclaration.sol'
struct Data {
string id;
string hash;
}
// 'Struct.sol'
import "./StructDeclaration.sol"
contract Struct {
Data public data;
}
变量/常量/Immutable
变量是 Solidity 中可改变值的一种数据结构,分为以下三种:
local
变量state
变量global
变量
其中, local
变量定义在方法中,而不会存储在链上,如 string var = "Hello";
;而 state
变量在方法之外定义,会存储在链上,通过 string public var;
定义变量,写入值时会发送交易,而读取值则不会;global
变量则是提供了链信息的全局变量,如当前区块时间戳变量,uint timestamp = block.timestamp;
,合约调用者地址变量,address sender = msg.sender;
等。
变量可以通过不同关键字进行声明,表示不同的存储位置。
storage
,会存储在链上memory
,在内存中,只有方法被调用的时候才存在calldata
,作为调用方法传入参数时存在
而常量是一种不可以改变值的变量,使用常量可以节约 gas 费用,我们可以通过 string public constant MY_CONSTANT = "0707";
来进行定义。immutable
则是一种特殊的类型,它的值可以在 constructor
中初始化,但不可以再次改变。灵活使用这几种类型可以有效节省 gas 费并保障数据安全。
函数
在 Solidity 中,函数用来定义一些特定业务逻辑。
权限声明
函数分为不同的可见性,用户不同的关键字进行声明:
public
,任何合约都可调用private
,只有定义了该方法的合约内部可调用internal
,只有在继承合约可调用external
,只有其他合约和账户可调用
查询数据的合约函数也有不同的声明方式:
view
可以读取变量,但不能更改pure
不可以读也不可以修改
函数修饰符
modifier
函数修饰符可以在函数运行前/后被调用,主要用来进行权限控制、对输入参数进行校验以及防止重入攻击等。这三种功能修饰符可以通过以下语法定义:
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
modifier validAddress(address _addr) {
require(_addr != address(0), "Not valid address");
_;
}
modifier noReentrancy() {
require(!locked, "No reentrancy");
locked = true;
_;
locked = false;
}
使用函数修饰符则是需要在函数声明时添加对应修饰符,如:
function changeOwner(address _newOwner) public onlyOwner validAddress(_newOwner) {
owner = _newOwner;
}
function decrement(uint i) public noReentrancy {
x -= i;
if (i > 1) {
decrement(i - 1);
}
}
函数选择器
当函数被调用时,calldata
的前四个字节要指定以确认调用哪个函数,被称为函数选择器。
addr.call(abi.encodeWithSignature("transfer(address,uint256)", 0xSomeAddress, 123))
上述代码 abi.encodeWithSignature()
返回值的前四个字节就是函数选择器。我们如果在执行前预先计算函数选择器的话可以节约一些 gas
费。
contract FunctionSelector {
function getSelector(string calldata _func) external pure returns (bytes4) {
return bytes4(keccak256(bytes(_func)));
}
}
条件/循环结构
条件
Solidity 使用 if
、else if
、else
关键字来实现条件逻辑:
if (x < 10) {
return 0;
} else if (x < 20) {
return 1;
} else {
return 2;
}
也可以使用简写形式:
x < 20 ? 1 : 2;
循环
Solidity 使用 for
、while
、do while
关键字来实现循环逻辑,但是因为后两者容易达到 gas limit
边界值,所以基本上不用。
for (uint i = 0; i < 10; i++) {
// 业务逻辑
}
uint j;
while (j < 10) {
j++;
}
合约
构造器
Solidity 的 constructor
可以在创建合约的时候执行,主要用来初始化
constructor(string memory _name) {
name = _name;
}
如果合约之间存在继承关系,constructor
也会按照继承顺序。
接口
Interface
,通过声明接口来进行合约交互,有以下要求:
- 不能实现任何方法
- 可以继承其他接口
- 所有方法都必须声明为
external
- 不能声明构造方法
- 不能声明状态变量
接口用如下语法进行定义:
contract Counter {
uint public count;
function increment() external {
count += 1;
}
}
interface ICounter {
function count() external view returns (uint);
function increment() external;
}
调用则是通过
contract MyContract {
function incrementCounter(address _counter) external {
ICounter(_counter).increment();
}
function getCount(address _counter) external view returns (uint) {
return ICounter(_counter).count();
}
}
继承
Solidity 合约支持继承,且可以同时继承多个,使用 is
关键字。
函数可以进行重写,需要被继承的合约方法需要声明为 virtual
,重写方法需要使用 override
关键字。
// 定义父合约 A
contract A {
function foo() public pure virtual returns (string memory) {
return "A";
}
}
// B 合约继承 A 合约并重写函数
contract B is A {
function foo() public pure virtual override returns (string memory) {
return "B";
}
}
// D 合约继承 B、C 合约并重写函数
contract D is B, C {
function foo() public pure override(B, C) returns (string memory) {
return super.foo();
}
}
有几点需要注意的是,继承顺序会影响业务逻辑,state
状态变量是不可以被继承的。
如果子合约想调用父合约,除了直接调用外,还可以通过 super
关键字来调用,如下:
contract B is A {
function foo() public virtual override {
// 直接调用
A.foo();
}
function bar() public virtual override {
// 通过 super 关键字调用
super.bar();
}
}
合约创建
Solidity 中可以从另一个合约中使用 new
关键字来创建另一个合约
function create(address _owner, string memory _model) public {
Car car = new Car(_owner, _model);
cars.push(car);
}
而 solidity 0.8.0
后支持 create2
特性创建合约
function create2(address _owner, string memory _model, bytes32 _salt) public {
Car car = (new Car){salt: _salt}(_owner, _model);
cars.push(car);
}
导入合约/外部库
复杂业务中,我们往往需要多个合约之间进行配合,这时候可以使用 import
关键字来导入合约,分为本地导入 import "./Foo.sol";
与外部导入 import "https://github.com/owner/repo/blob/branch/path/to/Contract.sol";
两种方式。
外部库和合约类似,但不能声明状态变量,也不能发送资产。如果库的所有方法都是 internal
的话会被嵌入合约,如果非 internal
,需要提前部署库并且链接起来。
library SafeMath {
function add(uint x, uint y) internal pure returns (uint) {
uint z = x + y;
require(z >= x, "uint overflow");
return z;
}
}
contract TestSafeMath {
using SafeMath for uint;
}
事件
事件机制是合约中非常重要的一个设计。事件允许将信息记录到区块链上,DApp 等应用可以通过监听事件数据来实现业务逻辑,存储成本很低。以下是一个简单的日志抛出机制:
// 定义事件
event Log(address indexed sender, string message);
event AnotherLog();
// 抛出事件
emit Log(msg.sender, "Hello World!");
emit Log(msg.sender, "Hello EVM!");
emit AnotherLog();
定义事件时可以传入 indexed
属性,但最多三个,加了后可以对这个属性的参数进行过滤,var event = myContract.transfer({value: ["99","100","101"]});
。
错误处理
链上错误处理也是合约编写的重要环节。Solidity 可以通过以下几种方式抛出错误。
require
都是在执行前验证条件,不满足则抛出异常。
function testRequire(uint _i) public pure {
require(_i > 10, "Input must be greater than 10");
}
revert
用来标记错误与进行回滚。
function testRevert(uint _i) public pure {
if (_i <= 10) {
revert("Input must be greater than 10");
}
}
assert
要求一定要满足条件。
function testAssert() public view {
assert(num == 0);
}
注意,在 Solidity 中,当出现错误时会回滚交易中发生的所有状态改变,包括所有的资产,账户,合约等。
try / catch
也可以捕捉错误,但只能捕捉来自外部函数调用和合约创建的错误。
event Log(string message);
event LogBytes(bytes data);
function tryCatchNewContract(address _owner) public {
try new Foo(_owner) returns (Foo foo) {
emit Log("Foo created");
} catch Error(string memory reason) {
emit Log(reason);
} catch (bytes memory reason) {
emit LogBytes(reason);
}
}
payable
关键字
我们可以通过声明 payable
关键字设置方法可从合约中接收 ether
。
// 地址类型可以声明 payable
address payable public owner;
constructor() payable {
owner = payable(msg.sender);
}
// 方法声明 payable 来接收 Ether
function deposit() public payable {}
与 Ether
交互
与 Ether
交互是智能合约的重要应用场景,主要分为发送和接收两部分,分别有不同的方法实现。
发送
主要通过 transfer
、send
与 call
方法实现,其中 call
优化了对重入攻击的防范,在实际应用场景中建议使用(但一般不用来调用其他函数)。
contract SendEther {
function sendViaCall(address payable _to) public payable {
(bool sent, bytes memory data) = _to.call{value: msg.value}("");
require(sent, "Failed to send Ether");
}
}
而如果需要调用另一个函数,则一般使用 delegatecall
。
contract B {
uint public num;
address public sender;
uint public value;
function setVars(uint _num) public payable {
num = _num;
sender = msg.sender;
value = msg.value;
}
}
contract A {
uint public num;
address public sender;
uint public value;
function setVars(address _contract, uint _num) public payable {
(bool success, bytes memory data) = _contract.delegatecall(
abi.encodeWithSignature("setVars(uint256)", _num)
);
}
}
接收
接收 Ether
主要用 receive() external payable
与 fallback() external payable
两种。
当一个不接受任何参数也不返回任何参数的函数、当 Ether
被发送至某个合约但 receive()
方法未实现或 msg.data
非空时,会调用 fallback()
方法。
contract ReceiveEther {
// 当 msg.data 为空时
receive() external payable {}
// 当 msg.data 非空时
fallback() external payable {}
function getBalance() public view returns (uint) {
return address(this).balance;
}
}
Gas 费
在 EVM 中执行交易需要耗费 gas 费,gas spent
表示需要多少 gas 量,gas price
为 gas 的单位价格,Ether
和 Wei
是价格单位,1 ether == 1e18 wei。
合约会对 Gas 进行限制,gas limit
由发起交易的用户设置,最多花多少 gas,block gas limit
,由区块链网络决定,这个区块中最多允许多少 gas。
我们在合约开发中要尤其考虑尽量节约 gas 费,有以下几个常用技巧:
- 使用
calldata
来替换memory
- 将状态变量载入内存
- 使用
i++
而不是++i
- 缓存数组元素
function sumIfEvenAndLessThan99(uint[] calldata nums) external {
uint _total = total;
uint len = nums.length;
for (uint i = 0; i < len; ++i) {
uint num = nums[i];
if (num % 2 == 0 && num < 99) {
_total += num;
}
}
total = _total;
}
总结
以上就是我们系列第一篇,Solidity 基础知识,后续文章会对其常见应用和实用编码技巧进行学习总结,欢迎大家持续关注。
参考资料
轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)
前言
之前写了一篇《免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)》,讲述了一下我使用 Serverless 和一些开源项目搭建的博客系统,也开了个系列来记录搭建过程。
本篇是关于博客评论系统的解决方案,我最早使用的博客评论系统是万恶的 Disqus,一个笨重且会收集用户隐私的知名评论系统,因为加载比较慢,且免费版本经常会附带一些广告,实在难以忍受,于是换成了另一个基于 GitHub issues 的评论系统 utterances,它会为每篇文章生成一个 issue,将,用户通过授权 GitHub 登录来对 issue 发表评论。这种方式的好处是只需要授权一个 utterances-bot 来进行管理,无需自己部署服务,维护数据库等。但是用了一段时间后,觉得有几点不足:
- 基于 GitHub API 进行评论管理,如之后接口变动或对这类利用 issue 进行评论的方式进行限制,会不太稳定
- 读者必须要授权 GitHub 登录,非技术人员或使用移动端阅读的读者使用起来很不方便
- 会将 GitHub 仓库弄得较乱,也不方便后续迁移到其他系统
经过一番调研 Randy 的 Cusdis 很合我的心意。Cusdis 是一个注重数据隐私的开源的评论系统,十分轻量,经过 gzipped 后大约只有 5kb,从名字来看也知道开发者也是难以忍受 Disqus,自己做了一个替代版,因此它也是支持 Disqus 历史数据导入的,很贴心。
虽然这是一个开发早期的项目,但是已经提供了电子邮件通知以及通过 Webhook 联动 Telegram 等方式进行评论提醒,对使用者来说很方便进行管理。Cusdis 提供了免费托管服务与自行部署两种方式,如果不想折腾可以直接用作者提供的服务。自行部署则需要服务器与一个 Postgre SQL 实例,我们主要示范一下自行部署方式。
因为在上一篇 《从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)》 中我使用的是 Vercel 和 Heroku 进行搭建的,作为一个爱折腾的人,这个评论系统我们就用 Railway 来搭建部署。
Railway 和 Vercel 类似,也是一个 PaaS 平台,能够支持多种语言项目的部署。对于个人项目来说,它每月提供的 5 美元免费额度非常够用,实测了一下,把之前的 umami 网站数据统计系统 连同 Postgre SQL 数据库实例部署在 Railway 平台,大约一个月 0.7 美元,对于个人使用来说完全足够。
比起 Vercel,它同时支持部署数据库实例,可以将数据库与实例一起部署在单个项目中,减少搭建维护成本。下文会对具体搭建部署流程做个记录,因为官方支持 Railway 一键部署方式,整个搭建流程很顺畅。
[2024-06-30 更新]
鉴于 Railway 从去年 8 月起已经取消了 Free Plan,如果依然想完全免费使用,可以使用 Vercel/Netlify/Zeabur 免费部署主项目,并在 Supabase 上部署一个免费的 PostgreSQL 数据库实例,把链接作为环境变量传入 Cusdis 服务中即可,其他流程大同小异。
搭建部署说明
使用 Railway 一键部署服务与数据库实例
首先注册一个 Railway 账号,可以用我的邀请链接。注册登录完成后,点击右上角 New Project 新建项目。
然后输入 Cusdis 进行搜索,点击出现的项目即可开始部署。前几步也可以通过点击 Cusdis 项目仓库 中的 Deploy on Railway
按钮进行一键部署。
开始部署前,需要手动填入三个环境变量:
- USERNAME: 用来登录的账户
- PASSWORD: 用来登录的密码
- JWT_SECRET: 一个随机字符串
其他一些环境变量已经预先设置默认值,请不要自行修改。
- NEXTAUTH_URL:
${{ RAILWAY_STATIC_URL }}
- DB_TYPE:
pgsql
- DB_URL:
${{ DATABASE_URL }}
- PORT:
3000
点击部署后,等待完成即可,会自动部署服务并初始化数据库。
配置 Cusdis 脚本至个人博客
部署完成后,点击 cusdis 服务生成的链接,点击访问服务 Dashboard。
此处输入部署前配置的用户名与密码,点击登录。登录完成后,点击 Dashboard,进入项目配置页面。
初次登录会弹窗提示需要配置第一个网站,输入网站名称即可完成添加。后续当我们需要添加网站时,点击侧边栏 New Website,填写网站名称即可完成添加。
因为我已经配置了自己的网站,所以界面会有之前的评论记录。
下面我们点击上方 Embed Code,复制弹窗中的代码。
这部份代码需要根据你所用的博客网站类型不同进行部分修改,具体可参考官方文档 的 Integration 模块进行配置。
我所用的是 Hugo,配置如下:
<div
id="cusdis_thread"
data-host="xxx"
data-app-id="xxx"
data-page-id="{{ .File.UniqueID }}"
data-page-url="{{ .Permalink }}"
data-page-title="{{ .Title }}"
></div>
<script defer src="https://cusdis.com/js/widget/lang/zh-cn.js"></script>
<script async defer src="xxx"></script>
其中的 data-host
,data-app-id
等都需要以刚复制出的 Embed Code 内容为准。其中 <script defer src="https://cusdis.com/js/widget/lang/zh-cn.js"></script>
主要实现了汉化,不同语言支持详见文档 i18n 模块。
修改后,将其添加到博客的相应位置(一般在最下方),配置部署后,即可看到评论框,呈现效果如下:
配置自定义域名
Railway 部署自动生成的域名比较长,且有一些字符,不方便记忆。我们可以在 Railway 中为项目配置自定义域名。
填入想要配置的域名/二级域名后,根据官方提示添加 DNS 解析。
例如,我使用的是 Cloudflare 托管的域名,需要先添加一下域名 CNAME 解析。
至此,我们的部署已经完成,可以通过域名访问管理后台,进行评论审核管理等。
更新项目
如前文所述,Cusdis 还是一个正在开发成长的项目,我们想第一时间更新作者发布的新功能。Railway 提供了十分便捷的上游分支管理功能,可以设置项目的父项目,点击即可拉取最新更新,很方便。
总结
以上就是我们为网站添加 Cusdis 评论系统的全流程,配置完成后无需后续维护,可以便捷地通过看板来进行网站管理与评论审核,且数据存储在 Postgre SQL 数据库实例中,方便导出备份与迁移。这是我的博客搭建部署系列教程之一,请持续关注,希望能对大家有所参考。
参考资料
从零开始搭建一个免费的个人博客数据统计系统(umami)
前言
之前写了一篇《免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)》,讲述了一下我使用 Serverless 和一些开源项目搭建的博客系统,也开了个系列来记录搭建过程。
前几天看到 Reorx 写的一篇 《搭建 umami 收集个人网站统计数据》,他介绍了 umami 这个项目,并使用 Railway 进行无服务搭建部署。
只不过我因为之前部署 Cusdis 的时候使用的是 Heroku 提供的免费 Postgres 数据库服务并用 Vercel 进行部署,于是在部署 umami 的时候还是想沿用原来的平台,减少搭建和维护成本。
下文会对具体搭建部署流程做个记录,因为官方支持一键部署方式,整个搭建流程很顺畅。
[2024-06-30 更新]
后来由于 Heroku 取消了免费 Plan,如果依然想完全免费使用,可以使用 Vercel/Netlify/Zeabur 免费部署主项目 + Supabase 部署 PostgreSQL 数据库实例部署的方式,把链接作为环境变量传入 Umami 服务中即可,其余流程依然适用。
搭建部署说明
使用 Heroku 创建 Postgres 数据库
创建 Postgres 数据库
首先注册一个 Heroku 账号,登录成功后,点击右上角按钮创建一个新的应用。
输入实例名称,地区可以自行选择,我选择的是 United States,点击创建。
创建完成后,在 Resources Tab 的 Adds-on 中搜索选择 Postgres 数据库。
选择 Free Plan 即可,Heroku 中的 Postgres 数据库是免费的,可以持续使用,免去了搭建维护成本。
创建完成后,在 Setting 中查看 DATABASE_URL
,后面部署要用到。
点击新增的 Postgres add-on 跳转进行设置。
进入后,选择 Setting 页面的 View Credentials,并且记录配置参数。
初始化 Postgres 数据库
因为需要初始化数据库,我使用的是 DataGrip 数据库管理工具进行连接,比较方便,也可以通过 Heroku CLI 进行连接和配置。
umami 需要通过官方提供的 umami/sql/schema.postgresql.sql 脚本进行初始化。
执行完成后,数据库有了五张表与初始化数据,可以进行后续部署工作。
使用 Vercel 一键部署 umami 服务
部署 umami 服务
创建好数据库实例之后,可以通过 Vercel 一键部署 umami 服务了。
访问 umami 官方文档 的 Running on Vercel 模块,有操作说明与一键部署脚本。
点击一键部署按钮后,会跳转至 Vercel 的一键部署页面,创建 umami 的 Github 仓库。
接下来需要填入之前在部署 Heroku Postgres 实例时记录到 DATABASE_URL
参数地址,并且需要填写一个自定义字符串 HASH_SLAT
。
点击 Deploy 进行部署,等待几分钟后部署完成即可。
访问 umami 服务
部署完成后,点击 Dashboard 或分配的 Vercel 域名访问服务,可以看到 umami 的登录界面。
初次登录输入默认用户名 admin
与默认密码 umami
,登录成功后,会跳转至 umami 的管理页面,登录后可以点击右上角头像自行修改密码。
配置个人网站至 umami 服务
完成基础帐号配置后,点击侧边栏网站 Tab,点击添加网站。
填写网站基本信息,如果勾选共享链接可以生成一个可公开访问的网址,我把它添加了一个书签放在 iPad 主屏幕上,作为一个数据看板也很不错。
配置 umami 脚本至个人博客网站
网站创建完成,获取 umami 脚本。
获取后,在个人网站添加 umami 脚本。我使用的是静态博客 Hugo,在主题中的 <head>
标签内添加。
配置完成部署,即可开始追踪网站数据。
配置自定义脚本名称
使用官方的 umami.js
脚本名称,可能会被一些过滤规则拦截,因此我们可以自定义脚本名称,实现更准确地网站数据追踪。
官方也提供了便捷的修改方式,可以在 Vercel 中已经部署的 umami 服务中增加 TRACKER_SCRIPT_NAME
环境变量,配置为自定义名称。
配置完成后重新部署,再在个人网站脚本中更改脚本名称即可。
配置自定义域名
如果不想要使用 Vercel 提供的 vercel.app
域名,可以在 Vercel 中添加自定义域名,按照 Vercel 官方指引对域名提供商进行 CANME
等配置。
例如,我使用的是 Cloudflare 托管的域名,需要先添加一下域名解析。
根据官方说明,Cloudflare 还需要添加一个页面规则,配置完成后即可完成自定义域名配置。
总结
以上就是我们为网站添加 umami 网站统计服务的全流程,配置完成后无需后续维护,可以便捷地通过看板来进行网站数据追踪。这是我的博客搭建部署系列教程之一,请持续关注,希望能对大家有所参考。
参考资料
个人工具箱(2022 年 5 月)
前言
自己一直是个工具控,也一直信奉着“工欲善其事,必先利其器”的理念,总是不断折腾和优化自己的硬件与软件,针对自己的一个特定需求会试图找到最优解,现在也慢慢找到了最适合自己使用习惯的解决方案。因为工作、学习和个人兴趣,设备经过很多次迭代,在这个时间节点作一下记录,后续也会不断更新,希望能够对其他人有所参考。
本文仅为 2022 年 5 月所整理的软硬件工具箱,最新版本请访问我在 GitHub 上维护的个人工具箱项目 『GitHub - pseudoyu/yu-tools』。
注:下文所提及的所有软件服务均为本人购买/订阅或学生资格所享有的教育授权,请支持正版!
主要设备
:computer: 电脑及配件
- Apple Mac Studio (2022),M1 Max,64GB RAM,1T SSD,家里主力电脑,疫情在家很提升工作学习幸福感
- Apple MacBook Pro (16-inch,2019) 银色,2.4 GHz 八核 Intel Core i9,32GB RAM,2T SSD,高频使用,基本走哪都会背着,在公司外接显示屏使用
- 明基(BenQ)EW3270U 4K 显示器,配合 Mac Studio 使用,在这个价位的 4K 里已经很不错了
- 明基(BenQ)ScreenBar Halo 屏幕挂灯,有了这个后基本上家里没开过主光源了,可以无线控制调节,很有氛围感
- HHKB Professional Hybrid Type-S 双模静音版键盘,白色有刻,目前最爱的键盘
- RealForce PFU 联名版 87 键,黑色,备用键盘,也是静电容经典了,但是没有很习惯,可能后面玩游戏会用,毕竟 HHKB 键位特殊
MM-Studio Class65 V2 客制化双模机械键盘,复古白(原本想通过这把入坑客制化,但是没心情折腾了,等了三个月发团,刚到手就原价转卖了)- Apple Magic Keyboard 键盘,白色,开始用 HHKB 后就基本上不用了
- Logitech MX Master 3 鼠标,灰色,主力鼠标,手感和侧键功能都很棒,配合剪视频也很棒
- Apple Magic Mouse 2 鼠标,白色,手感不太行,基本上不用了
- Apple Magic Trackpad 触控板,白色,在家配合着鼠标使用,体验感不错
- 闪极 100W Pro 氮化镓 GaN 充电器,黄色,外出携带,终于摆脱了苹果 96w 的大块头充电器
:iphone: 手机及平板
- Apple iPhone 13 蓝色,256GB,主力手机,配合苹果全家桶体验很好,不过手机基本上戒了,主要就用作沟通和看看资讯,应该很久都不会换了
- OnePlus 7 Pro,6.67",Snapdragon 855,256GB,之前在香港的时候刷机 Root 了,配合 Google 全家桶很适合留学用,而且拍照风格很自然,不过现在也很少用了
- Apple iPad Air (第三代),256GB,主要用来作拓展屏或者放视频了,很少作什么生产力工具使用,大部分电脑能做的都不会放到 iPad 上做
:movie_camera: 相机及配件
- Sony A7M3 微单相机,黑色,大学攒了好久才买的第一台微单,摄影和视频都很全能,跟着我好多年了,到现在依然很够用
- Sony 24-105mm F4 相机镜头,跟相机一起买的,出门基本上这一只大师镜头就足够应对绝大多数场景,虽然光圈只有 F4,但是成像品质真的高
- Sony 55mm F1.8 蔡司相机镜头,收到的礼物,也是最喜欢的定焦镜头,主要用来拍人像
- 罗德 Wireless Go 无线麦克风,之前录视频用得比较多,便携易用,声音也很不错,后面会考虑多录一些视频
:headphones: 音箱及耳机
- Apple Airpods Pro 降噪耳机,原本不太习惯入耳式,后来体验了降噪后就离不开了
- Apple HomePod mini 音箱,家里电脑主要输出设备,家里 Mac Studio 和显示器自带音质都不太行
- Divoom Ditoo 像素复古音箱,收到的礼物,现在放在桌面作装饰,基本上没放过音乐
- 小爱智能音箱,联动家里的各类智能家居
:package: 存储设备
- 三星 T5 SSD,1TB,主要用来存储摄影和视频素材,很小,传输速度很快
- 希捷移动硬盘,1TB,Mac Studio 用来 Time Machine 备份使用的
🎮 休闲娱乐
- Kindle Oasis 2 电子书阅读器,以前看得比较多,现在基本上看实体书以及手机 Books 上看
- Nintendo Switch 主机,动物森友会特别版,主要用来玩宝可梦,从 18 年开始陆陆续续也买了不少游戏,很多都还没来得及玩,卡带收藏爱好者
- Nintendo Switch Pro 手柄,任天堂明星大乱斗特别版,体验感比自带的 Joy-Con 好多了
软件工具
🛠 系统拓展
- CleanMyMac X,电脑管家,主要用来清理缓存和软件卸载
- AppCleaner,功能很单一的应用卸载工具
- One Switch,菜单栏快捷工具,主要用来组织电脑休眠使用的
- Alfred 4,快捷启动工具,配合一些 Workflow 功能很丰富,现在主要还用了它的剪贴板历史功能
- Hammperspoon,主要用来通过
Option + hjkl
组合键来弥补 HHKB 没有上下左右键的一些场景 - Bartender 4,菜单栏管理工具,主要隐藏一些软件服务菜单栏图标
- BetterTouchTool,触控板及 Touchbar 管理,主要给 Macbook Pro 配置触控版用的
- Magnet,分屏工具
- iStat Menus,系统状态显示,主要显示 CPU、内存和网络等状态
- AirBuddy,耳机管理工具,感觉连接耳机更顺滑了一些
- HazeOver,桌面效果工具,显示效果很不错
- Plash,动态桌面拓展,在主屏幕放了一个简约的动态时间显示,也几乎不耗资源
- DaisyDisk,磁盘管理,偶尔用来追踪大文件
- Menubar X,菜单栏网页拓展,之前偶尔挂一些小工具,现在用得也少了
- Logi Options+,罗技配置工具,配置鼠标功能按键用的,不过基本上用的默认值
📁 文件管理
- OneDrive,5TB 空间,存储大部分个人数据,通过客户端挂载本地目录来同步,速度不错
- iCloud,200GB 空间,主要用于照片备份与软件数据同步
- Dropbox,2GB 空间,主要配合 Cryptomator 对敏感数据加密备份
Google Drive,1TB 空间(因学校从 Google 服务转向 Microsoft 服务,已弃用)百度网盘,存储影音及备份工具(以前存储大量视频剪辑文件用,已弃用)
🔐 安全工具
- ElPass,密码管理工具,界面很喜欢,OTP 以及 Server 管理功能很惊艳,现在所有帐号、密码、证件和银行卡都在这里管理了,用 iCloud 和 Dropbox 进行同步和备份
- GPG Keychain,macOS GPG 加密工具客户端,主要用来为 Git 提交进行签名
- Cryptomator,文件目录加密工具,用于加密备份证件等隐私数据,配合网盘使用
- DAMA,图片隐私打码工具,通过 TestFlight 尝鲜了测试版
🌏 网络工具
- Surge,网络代理、调试工具,家里的 Mac Studio 通过 Surge 来作为家里 Wifi 的 DHCP 服务器,接管家里的网络实现全网代理,主要给 iPad 访问外网以及 Switch 下载游戏加速用
- AdGuard Home,通过网络流量过滤与 DNS 实现去广告,很强大
- ClashX,网络代理工具,买 Surge 前主力用的,现在留了一个备用线路
- OpenVPN Connect,openvpn 客户端,连接公司内网服务器使用
Tunnelblick,上一个项目在用,不过界面没有上面的好,已弃用- Safari,主力浏览器,通过 iCloud 多设备同步
- AdGuard Home,去广告插件
- Elpass,自动填充密码
- Downie,下载插件,一键识别媒体并下载
- NetNewsWire,自动抓取网站订阅链接
- Vinegar+Baking Soda,把 YouTube 以及其他一些视频网站的视频播放器转回 HTML5 播放器,简约,体验感很不错
- Brave
- MetaMask,钱包插件
- Elpass,自动填充密码
- 豆伴,备份和查看豆瓣数据
- YouTube Dual Subtitles,支持多语言字幕
- YouTubeEnhancer,增强 YouTube 播放器功能
Chrome(迁移至 Brave,已弃用)
🧰 实用工具
- Bob,划词/截图翻译工具,配合 DeepL X 拓展插件和 zu1k 大佬发布的 DeepL Free Api Docker 镜像,完美体验,后面还更新了独立的 OCR 功能,更强大了
- Tern-Subtitle File Translator,我配合了 IBM 提供的 API,进行字幕自动中英翻译
- qBittorrent,通过 RSS 管理器来订阅特定 PT 站的番剧等媒体资源,自动更新下载
- Downie,视频源下载工具,下载 YouTube 或者 B 站的一些视频,作剪辑素材用
- PicGo,图床管理工具,主要写博客的时候上传图片到 GitHub 图床并且生成自定义的 Markdown 格式,可以直接嵌入文章
- BetterZip,压缩/解压工具,基本上装机必备了,目前遇到的格式都支持了
- PDF Expert,PDF 查看编辑工具,主要用来做一些合并和编辑,查看的话经常还是用自带的 Preview
- PDF Squeezer,PDF 压缩工具,压缩效果很不错,使用也很方便
- Image Smith,图片压缩工具,刚尝试的一个新工具,很不错,之后作主力压缩了
- TinyPNG4Mac,之前博客图片上传前都会压一些,功能很简单,现在作为备用了
- Rime 鼠须管,定制化输入法,体验很好且数据本地保存,安全稳定
- Time Machine,备份工具,主要给 Mac Studio 作实时备份用
- brew,Homebrew 安装工具,基本上开发有关的都用 brew 装了,方便管理升级
- TestFlight,尝鲜一些测试版软件用
📝 记录工具
- Logseq,现在主力的生活记录、任务管理和笔记工具,基于双向链接打造了自己的信息管理系统,而且通过 Journal 以文本条目的形式记录没有心智负担,建议可以看一下 Randy 的 <我如何使用 Logseq 管理我的生活和笔记>,很有启发
- Notion,原本作笔记和任务管理,后来都迁移到了 Logseq,所以就只作为软件订阅管理、游戏记录的一些工具,数据库还是很强大的
- Hook,文件资源双向链接工具,目前主要用来追踪本地的一些视频之类的大文件,可以以链接的形式嵌入到 Logseq 里
- Office 365,主要文档/PPT/表格处理工具,其实工作后已经主要都是 Markdown 写为主了,但是最后还是得通过 Word 来排版
- iWork 全家桶,Apple 自带文档处理工具
- Typora,主要 Markdown 编辑器,最完美的 Markdown 编辑器了,偶尔要转存一些文本的时候也会通过 Alfred 唤出来
- MarginNote 3,用来阅读一些论文、书籍的工具,用得不算很多
- XMind8 Pro,主要思维导图工具,之前在学校的时候做笔记用的比较多,工作后反而系统性学习整理得少了,需要保持习惯
👨🏻💻 开发工具
- 编辑器
- JetBrains GoLand,主力工作 Go 开发 IDE,很强大,目前用 Edu 身份订阅着全家桶,希望后面能通过开源项目续着
- Material Theme UI + Atom Material Icons,很美观的主题
- GitHub Copilot,代码 AI 补全,很智能
- GitToolBox,提示一些 Git 状态信息
- IdeaVim,配置 Vim 键位
- PlantUML Integration,用来画 UML 图,目前感觉写和预览体验最好的平台了
- WakaTime,用来记录编码项目、语言和所用时间
- VS Code,代码编辑工具,辅助开发
- Serendipity,新尝试的一个很喜欢的主题
- GitHub Copilot,代码 AI 补全,重度依赖
- Beancount,用来复式记账,配合 fava 工具进行可视化
- Markdown All in One,用来增强对 Markdown 的支持,主要用来写博客
- Rainbow Brackets,给配对的括号加上颜色
- go,Go 语言环境支持
- solidity,智能合约编写支持
- WakaTime,用来记录编码项目、语言和所用时间
- Atom
- go-plus,Go 语言环境支持
- fabric-go,用来调试 fabric 1.4 版本的链码,可以自动通过镜像部署,很方便,这也是我 Atom 编辑器的唯一用途了
- wakatime,用来记录编码项目、语言和所用时间
- JetBrains PyCharm Professional Edition,Python 编辑器
- Material Theme UI + Atom Material Icons,很美观的主题
- GitHub Copilot,代码 AI 补全,很智能
- GitToolBox,提示一些 Git 状态信息
- IdeaVim,配置 Vim 键位
- WakaTime,用来记录编码项目、语言和所用时间
- Xcode,macOS 及 iOS 开发 IDE
- JetBrains GoLand,主力工作 Go 开发 IDE,很强大,目前用 Edu 身份订阅着全家桶,希望后面能通过开源项目续着
- 终端
- Warp,新尝试的 Rust 编写的终端,体验感很棒,完全作为主力终端了
- iTerm2,之前一直用,现在主要用来切多个服务器
- 服务器管理
- ssh,配合 Warp 和 iTerm2 的 Profile 来连接服务器用
- Termius,服务器管理工具,主要是可以云端同步配置,跟公司同事调试测试的时候都不需要自己再配本地环境,比较方便,然后也使用 SFTP 来传文件
- ServerCat,服务器状态监控,界面很不错
- Fetch,备用远程文件传输工具,很老牌了
- 数据库管理
- Sequel Ace,主力数据库管理工具,是之前开源版本 Sequel Pro 的一个维护版本,界面简约但是功能很强大
- JetBrains DataGrip,主要通过 Groovy 脚本来自动导出数据库的 Markdown 文件,很方便写文档
- 接口调试
- Paw,主力接口调试工具,限免的时候注册的,速度很快,多环境以及分支管理很强大
Postman,以前用的接口调试工具,但是界面太繁杂了,而且反应有点慢,弃用了
- 文档查看: Dash,配合 Alfred 查文档很方便
- 容器: Docker Desktop,虽然占资源很高,但是确实方便
- 绘图工具
- PlantUML,配合 GoLand 里插件通过语法画流程图,修改和版本维护很方便
- Draw.io,一些很复杂的架构图和部署图通过这个客户端画,有点简陋但是够用
- 版本控制
- git,版本管理工具
- git-cz,交互式规范化提交信息
- git-chglog,用来自动生成格式化 CHANGELOG
Fork,git 客户端工具(已弃用,改为命令行配合 alias)- GitHub,我的个人博客、图床以及开发项目都通过 GitHub 管理
- GitLab,工作项目通过公司 GitLab 进行管理
- git,版本管理工具
📹 视频剪辑
- Final Cut Pro X,当时优惠价买了全家桶,从 PR 转到了 FCPX 作为主力剪辑工具,在 macOS 上比 PR 体验好多了
- 剪映专业版,语音识别智能匹配字幕的功能很强大,3.0 版本还支持导出
.srt
格式了,再通过一个开源的 srt2fcpxml 工具转回 FCPX 兼容的的字幕格式导入回 FCPX,简化字幕制作工作流,再也不用自己一点点对时间轴了 - Compressor,主力压制工具,配合 FCPX 一些预设可以很便捷联动导出
- HandBrake,备用开源视频压制工具,作一些简单压缩转码使用了
- 大拍档剪辑助手,用来清理 FCPX 的缓存,也有一些无版权音乐下载、素材管理的小工具
IINA,之前的主力视频播放器,订阅了 Infuse 后弃用了
📷 图片处理
- Affinity Photo,替代 Photoshop 的修图和调色工具,我拍完照后会用来处理和套 Luts
- Pixelmator Pro,黑五半价买的,据说很强大,不过还没怎么用
- Luminar 4,做一些简单的效果处理会比 Affinity Photo 这些便捷一些
📮 邮件管理
- Spark,电子邮件聚合工具,多端同步也很快,现在所有邮箱都通过 Spark 来管理了
- Alimail,工作用邮箱
- Outlook,主要用来管理 Office365 开发者帐号
- Mail,Apple 自带邮件客户端
📨 信息管理
- NetNewsWire,RSS 订阅工具,多端同步很方便,慢慢转向 RSS 为自己的主要信息输入了
- TweetBot,在电脑端用来发布和刷 Twitter 的客户端,主要是可以通过时间轴排列
- Books,Apple 自带图书应用,可导入 epub 或 pdf 文件阅读
- 域名及个人网站
- GitHub Pages,配合 GitHub Action 实现自动部署
- Cloudflare,管理域名,以及对网站进行 CDN 加速
- Vercel,配合 Heroku 的数据库部署了博客的 Cusdis 评论系统
- 豆瓣,通过 GitHub Action 每天抓取豆瓣提供的 RSS,统计我的影音和书籍并更新到 GitHub 主页和个人网站介绍页里,也通过 Brave 的一个叫“豆伴”的插件来定时备份和导出
💬 通讯社交
- 微信,生活和工作大部分都还是会通过微信沟通
- 腾讯会议,工作用,主要会议工具
- Microsoft Teams,偶尔参加一些线上研讨会使用
- Gather,有趣的线上交流,正在推荐身边的朋友用,像宝可梦一样,能减轻疫情带来的距离感
- 钉钉,工作沟通以及偶尔处理我妹妹学校的一些信息用
- Telegram,主要加了一些科技资讯、软件技巧的群,偶尔看看
- Discord,主要参加一些项目获取资讯用的
QQ,大学时学校常用,已弃用
🎸 影音娱乐
- Infuse,视频播放及媒体管理工具,全平台可用且支持格式很多,配合 Plex 这些媒体服务器可以建立自己本地的动漫、电影和剧集库
- Plex Media Server,流媒体管理服务器,可以指定本地目录自动获取元数据进行媒体库管理
- Apple Music,主要听歌软件,配合 iOS 上的 Music Mate 慢慢建立自己的音乐库
- Apple Podcasts,主要用来听一些博客
- 爱奇艺,送的会员,偶尔用来追一些热门自制剧
- Netflix,用来追一些最新剧集,新加坡订阅
- Disney+,用来看一些迪士尼动画、漫威剧集和电影,不过用得也不多了,也是新加坡订阅
📲 手机 App
- 🛠 系统拓展
- 熊猫吃短信,过滤垃圾短信,很好用
- AdGuard,浏览网页去广告工具
- AT,重要日期纪念日/倒计时
- OffScreen,使用手机时间追踪
- 谜底时钟,个性化时钟组件
- 谜底黑胶,个性化音乐播放组件
- 谜底空白,在屏幕中设置空白位置
- Vinegar+Baking Soda,浏览器看视频使用 HTML5 播放器插件
- 📁 文件管理
- 文件,Apple 自带本地及 iCloud 文件管理
- OneDrive,iOS 端
- 🔐 安全工具
- Elpass,密码管理工具 iOS 端,支持双重验证
- Google Authenticator,Google 双重验证工具
- Microsoft Authenticator,Microsoft 双重验证工具
- DAMA,图片隐私打码工具
- 🌏 网络工具
- Surge,Surge 代理工具 iOS 端
- Shadowrocket,备用代理工具
- Speedtest,网络测速工具
- 小米 WIFI,管理家庭 Wifi 及设备
- 🧰 实用工具
- 欧陆词典,字典应用,可导入不同源
- 翻译,苹果自带翻译工具
- ServerCat,服务器状态检测工具移动端
- 快捷指令,进行各类自动化操作
- TestFlight,尝鲜一些测试版应用
- 📝 记录工具
- Logseq,iOS 端,主要用来查看
- Office 365,iOS 端,通过 Office365 帐号和 OneDrive 进行同步
- iWork 全家桶,iOS 端
- Notability,笔记工具
- 🪙 数字资产
- imToken,iOS 数字钱包
- TokenPocket,iOS 数字钱包
- 币安,Binance 交易所 iOS 客户端
- 欧易,OKEX 交易所 iOS 客户端
- 火币,Huobi 交易所 iOS 客户端
- 🏚 家庭管理
- Home,苹果自带家庭应用,目前主要用来管 HomePod mini
- 米家,管理小米智能家居设备
- 小爱音箱,连接和管理小爱智能音箱,语音控制智能家居
- 点音,Divoom 像素音箱管理
- Yeelight,控制氛围灯模式
- 小佩宠物,控制宠物智能家居
- Health,苹果自带健康数据记录应用,主要用来记录睡眠
- Grow,联动健康应用,生成健康数据
- Zepp Life,联动小米体重秤等,记录健康数据
- 📨 信息管理
- Spark,iOS 端
- NetNewsWire,iOS 端
- Apple Books,电子书阅读器,主要导入 epub 格式看
- Patreon,订阅及赞助支持某些技术大佬的平台
- Twitter,iOS 端,主要国外资讯获取与发布平台
- Instagram,iOS 端,主要用来发布摄影和日常照片
- Facebook,iOS 端,个人状态更新平台,离开香港后用得比较少
- 微博,官方客户端,主要股票内资讯获取与发布平台
- 豆瓣,iOS 端
- 少数派,用来看一些工具类资讯
- Outlook,iOS 端
- Mail,苹果自带邮件应用
- 👨🏻💻 工作求职
- LinkedIn,看一些外企的机会
- BOSS 直骋,国内找工作主要用
- 脉脉,查询一些公司资讯用
- 💰 支付工具
- 支付宝,日常最主要支付工具
- 招商银行,招行卡管理
- 掌上生活,招行信用卡管理
- 中国工商银行,工行卡管理
- AlipayHK,香港支付宝账户
- 🚆 交通出行
- Maps,苹果自带地图应用,主要用来搜路线
- 高德地图,公司加班打车用这个
- 携程旅行,用来定机票和酒店
- 铁路 12306,用来定高铁票,不过后面大多在携程里直接定了
- 航旅纵横 Pro,用来查询航班信息、值机以及统计自己的出行,很好用
- 🛍 生活工具
- 饿了么,点外卖和水果
- 淘宝,买一些日常用品
- 京东,主要买数码产品和小家电
- 大众点评,查询一些店的评价
- 大麦,看一些演出展览
- 闲鱼,偶尔会看下一些二手
- 当当,买纸质书,大多技术为主
- 个人所得税,年度汇算用的
- 💬 通讯社交
- 微信,iOS 端
- 腾讯会议,iOS 端
- 钉钉,iOS 端
- Telegram,iOS 端
- Discord,iOS 端
- Clubhouse,语音聊天室工具,热度过去了现在用得也比较少了
QQ,iOS 客户端,已弃用
- 🎸 影音娱乐
- Infuse,iOS 端,可以局域网连接 Mac Studio 的 Plex 媒体库服务器
- YouTube,用来看各类国外博主与技术视频
- 哔哩哔哩,主要用来看关注的各类博主更新
- 爱奇艺,iOS 客户端
- Apple Music,iOS 端
- Music Mate,探索新音乐,慢慢建立自己的音乐库
- Apple Podcasts,主要通过 iOS 端收听播客
- Pokémon Go,最爱的游戏了,在香港留下了很多记忆,可惜回来后玩不了了
总结
以上就是我在 2022 年 5 月所自用的工具箱,花了好几天,把电脑和手机的 App 都彻底整理分类了一遍,随着使用时间越来越长,一直在做减法,也在不断优化自己的使用,希望能够对大家有所参考。
参考资料
免费的个人博客系统搭建及部署解决方案(Hugo + Cusdis)
前言
Pseudoyu 是我的个人博客网站,最早使用 WordPress 搭建在自己的 Vultr vps 上,因为网络访问比较慢所以迁移到了腾讯云服务器上并且进行备案,虽然访问速度有提升,但是发布博客的流程很繁琐,服务器的维护长期也是一笔不小的开支。
因此,一直在探索能够既能保障国内外访问体验,又能够托管在一些平台上,实现部署和发布流程的最优化体验。后来也一直不断在改善博客系统搭建和发布流程,迄今为止对自己的全流程解决方案还是比较满意的,虽然部署和搭建上需要进行一些配置,但后续更新维护都很方便,因此,本文将这套免费、开源的个人博客系统搭建及部署解决方案进行全流程记录,希望对大家有所帮助。
[2024-06-30 更新]
时隔两年,文章中许多方案已经过时(但依然可用),我更新了系列新的文章,阐述了我与 2024 年 6 月的最新博客解决方案,可供大家参考。
解决方案
博客平台
目前已经有很多比较成熟的博客平台,如前文所提到的 WordPress,虽然功能强大,但对于个人博客站点来说有些太重了,也不够酷,经过一番调研,最后选择了 Hugo 这个静态网站生成器。
Hugo 是用 Go 实现的博客工具,采用 Markdown 进行文章编辑,自动生成静态站点文件,支持丰富的主题配置,也可以通过 js 嵌入像是评论系统等插件,高度定制化。除了 Hugo 外, 还有 Gatsby、Jekyll、Hexo、Ghost 等选择,实现和使用都差不多,可以根据自己的偏好进行选择。
因为 Hugo 开源社区中 hugo-theme-den 完全在我的审美上,所以我选择了 Hugo 并在这个主题基础上进行了一些个人定制化改造和配置,满足了自己的需求。
博客托管
静态博客需要托管在一个平台上才能够实现外部访问,可以是自己的 vps 主机,也可以是 Cloudflare Pages,GitHub Pages,或者是 Vercel 这样的 Serverless 平台,后两者都可以通过 GitHub 仓库进行关联。
我选择了 GitHub Pages 这种方式,完全免费且和 GitHub 代码仓库无缝对接,能够满足我博客源文件备份和版本管理的需求,还可以通过强大且同样免费的 GitHub Action 实现各种 CI/CD 的功能,如提交/更新博客源文件后自动构建生成博客静态文件并推送到 GitHub Pages 仓库进行部署,还可以配合一些定时任务实现自我介绍页面更新等功能。
[2024-06-30 更新]
由于我的域名本身托管在 Cloudflare,于是我尝试了 Cloudflare Pages,这是 Cloudflare 推出的静态网站托管服务,完全免费(至少我至今没有超过免费额度),且可以直接连接 GitHub 代码仓库,并提供了市面上主流的网站构建工具,如 Next.js、Astro、Hugo 等,可以实现和 GitHub Pages 一样的自动化部署功能并且提供更优的访问线路,是目前更好的解决方案。
博客域名
我们可以通过域名解析配置自己的域名,如我的网站就是解析了 pseudoyu.com 这个域名。
我的域名是在 NameSilo 购买的,并通过 Cloudflare 平台进行 CDN 加速,提升访问体验,并实现了域名重定向等功能,关于博客访问优化这一点后续会单独讲解。
[2022-05-29 更新]
我后来为了方便管理,把 NameSilo 域名迁移到了 Cloudflare,大家可以直接在 Cloudflare 上购买,教程包含在《Hugo + GitHub Action,搭建你的博客自动发布系统》中。
访客分析
作为一个持续更新运营的博客平台,我们一定很好奇我们哪篇文章阅读量最高、哪个关键词检索最频繁等,帮助我们专注在更有价值的内容创作与分享上,类似的工具也很多,我选择了 splitbee 与 Google Console 来统计分析我的访客信息与搜索权重,此外,Cloudflare 也能够对网络流量进行分析,不过因为有很多网络无关流量,如爬虫等,所以参考性没有前两者强。
[2022-05-21 更新]
除了上述直接服务的平台外,我还部署了一个可代替 Google Analytics 的开源服务 umami,实现了访客数据的实时监控,教程为:《从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)》。
[2024-06-30 更新]
后来改为了自部署「goatcounter」这一新的数据统计服务。
评论系统
一个博客系统当然需要评论系统,像 WordPress 这种自身具备了评论插件,而静态博客则需要自己对接一些评论系统,我最开始选择的是第三方的 Disqus,简单易用,但是会自带很多广告推广,也不够简约,后来选择了 Randy 的 Cusdis,一个轻量级的开源评论系统解决方案(从名字看也是深受 Disqus 其害忍不住自己开坑了哈哈),我通过 Vercel 自建,并链接了 Heroku 的免费 PostgreSQL 数据库进行评论数据存储,实现了免费、稳定的评论系统,还支持邮件推送、Telegram Bot 提醒/快捷回复等功能。
[2022-05-24 更新]
Cusdis 部署在 Railway 平台教程已更新:《轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)》。
[2024-06-30 更新]
后来改为了自部署「Remark42」这一新的评论系统。
图片管理
日常发布的文章中可能会涉及很多图片,将图片存储在静态博客源项目仓库中的话会使项目过于庞大,并且很难二次使用和管理,因此,我同样选择了 GitHub 作为图床工具,并使用 PicGo 客户端进行图床管理,在上传前使用 TinyPNG 进行压缩,并使用 jsDelivr 服务为 GitHub 图床进行加速,这样就可以将所有图片存储在 GitHub 图床仓库,文章中以外链的方式嵌入图片。
[2024-06-30 更新]
后来使用了 Cloudflare R2 + WebP Cloud 代理优化 + PicGo 这一套图床解决方案。
发布流程
通常 GitHub Pages 发布博客需要本地 hugo
命令生成静态站点文件目录,cd
到 public
目录,并使用 git add
、git commit
、git push
等命令提交到 GitHub Pages 仓库,实现博客的发布,因为每次更新都需要进行重复操作,且博客源 Markdown 文件无法进行很好的备份和版本管理。
因此,我建立了一个博客源文件仓库,通过 GitHub Action 实现了一套自动化发布流程,仅需将 Hugo 博客源文件上传至 GitHub 仓库,会自动触发 CI 生成静态站点文件并推送到 GitHub Pages 仓库。
[2022-05-29 更新]
Hugo 搭建与 GitHub Action 配置教程已更新:《Hugo + GitHub Action,搭建你的博客自动发布系统》
[2024-06-30 更新]
新增了 Cloudflare Pages 部署方案:《Hugo + GitHub Action,搭建你的博客自动发布系统》
发布流程
总结
以上就是我的个人博客解决方案,前期搭建有些繁琐,但一番折腾后,完美实现了我的需求,关于整个过程的详细步骤,我将会分多篇文章进行讲解,请持续关注,希望能够对大家有所帮助。
[2022-06-02 更新]
系列教程核心部分已完成:
- 从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)
- 轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)
- Hugo + GitHub Action,搭建你的博客自动发布系统
除此之外,如果不想使用 Hugo 这类静态博客,还可以通过 Ghost 来比较方便地搭建一下:
参考资料
分布式系统与区块链共识机制
前言
随着互联网系统日益复杂,大多数系统都从单体架构转向分布式架构,而在区块链这样以分布式技术为基础的技术更是高度依赖数据一致性和共识机制。
本文将介绍分布式系统一致性、共识的概念与其在区块链中的实际应用与发展。
分布式系统
一致性问题
随着业务场景的复杂化,同一个业务往往也由多台服务器组成集群提供服务,但如何在这些物理位置和运行状态都不同的系统中达成一致成为了分布式领域的重要问题。
一般而言,分布式系统达成一致有以下三点规范:
- 可终止性
- 约同性
- 合法性
分布式事务需要保障能在有限的时间内达成一致的结果,该结果必须是由某个节点提出的提案且不同节点必须完成相同的决策。
强一致性
想在单体应用或者各个节点的性能、网络带宽等配置在理想状况下做到这一点很容易,然而,在真实的业务场景中,要实现这样的强一致性成本非常高,需要保障系统的绝对稳定性、系统与系统之间的通讯没有延迟,此外,强一致性也会降低系统的性能和拓展性。
在强一致性情况下,任何时刻所有节点中的数据都是一样的。强一致性通常又包括顺序一致性和线性一致性两种。
顺序一致性
顺序一致性要求所有进程的全局执行顺序和各个进程自身的顺序保持一致,但并不要求物理时间上对各个进程保持全局的顺序。因此,这也是一种相对实践性较强的做法。
线性一致性
线性一致性在顺序一致增加了需要对进程间进行全局排序的规则,要求所有时刻所有进程的操作都是实时同步的。这种绝对一致性往往在实践中很难实现,需要通过全局锁或者一些复杂的同步算法实现,且往往以牺牲性能为代价。
弱一致性
而在真实的业务场景里,往往并不需要实时同步这样的绝对一致状态,因此可以容忍部分访问或在一段时间后最终达成一致。这些在某些方面弱化了的一致性称为弱一致性。
共识机制
共识机制是指在分布式系统中多个节点对某个事务达成一致的机制,关于共识的达成,有以下几种理论和原则:
- FLP 不可能原理
- CAP 原则
- ACID 原则
- BASE 理论
- 多阶段提交
FLP 不可能原理
FLP 不可能原理是 Fischer、Lynch 和 Patterson 三位科学家提出的一种理论,即在一个网络可靠但允许节点失效(如停机)的异步系统中,不可能在有限时间内完成共识。
异步是指系统各个节点之间的时间等存在差异性,导致无法判断消息未响应是由于节点故障还是传输过程中的故障,因此无法判断消息是否丢失。
CAP 原则
而在工程实践中,往往会弱化某一部分的需求以满足真实业务场景的需求。CAP 原则就是来解决这一问题,CAP 是指:
- Consistency,一致性
- Availability,可用性
- Partition,分区容错性
分布式系统无法同时保障这三点,最多能保障其中两个特性,那这个原理有哪些实际应用呢?
- AP 系统,在静态网站、非实时性数据库等业务场景下,可以弱化其一致性,如新版本上线后一段时间才达成一致。
- CP 系统,在银行转账等对一致性要求绝对敏感的场景下,可以弱化其可用性,如当系统故障或失败时拒绝服务。
- AC 系统,两阶段提交和一些关系性数据库则弱化网络分区,如 ZooKeeper 等。
ACID 原则
分布式数据库的事务需要牺牲部分可用性来达到一致性,需要遵循 ACID 原则,具体如下:
- Atomicity,原子性。事务的所有操作要么全部执行,要么全部不执行,失败则全部回退。
- Consistency,一致性。事务执行前后状态需要一致,不存在中间状态。
- Isolation,隔离性。多个事务可以并发执行但彼此之间相互独立。
- Durability,持久性。状态改变是永久的。
BASE 原则
BASE 原则是指:
- Basically Available,基本可用
- Soft State,软状态
- Eventual Consistency,最终一致
这是一种牺牲强一致性来实现整个系统的方案,即只保障最终一致性。
多阶段提交
两阶段提交是将事务提交过程分解为预提交和正式提交两个阶段以避免冲突,但仍然存在同步阻塞、单点故障、数据一致性等问题。
TCC 事务机制则主要分为:
- Try 阶段
- Confirm 阶段
- Cancel 阶段
在 Try 阶段对业务进行检查并预留业务资源,在 Confirm 阶段使用资源执行业务,Cancel 阶段取消执行并释放资源。这种方式是对两阶段提交多作了一些业务上的处理,但因为拆分成了三个接口进行,代码复杂性提升了。
三阶段提交引入了超时机制,并在两阶段提交的第一阶段加入了一个尝试预提交环节,主要解决了单点故障和阻塞问题。
共识算法
根据容错类型(是否会有恶意节点),我们把共识算法分为非拜占庭容错(Crash Fault Tolerance, CFT)和拜占庭容错(BFT, Byzantine Fault Tolerance)两种。
CFT (Crash Fault Tolerance)
分布式系统中存在故障节点但不存在错误节点的场景称为 CFT,在这种场景下,消息可能丢失或者重复,但不会错误,在这种条件下如何达成共识是真实世界中非常常见的需求。
Paxos
Paxos 算法原理类似于两阶段提交,设定了三种逻辑节点,提案者、接受者和学习者。由提案者提出提案,接受者对提案进行投票并接受提案,而学习者获取提案结果并广播。
只有提案者提出的提案才可能会批准,而所有节点都可以竞选成为提案者,但每一轮共识只有唯一的一个提案者提提案,这种机制保障了一定的公平性。
然而,Paxos 只能保障一定条件下的共识,当超过半数的节点参与时才会正常运作。
Raft
由于 Paxos 算法实现起来比较困难,出现了许多变体,如 Fast Paxos、Multi-Paxos 等,其中比较有代表性的就是 Raft 算法。
Raft 将一致性过程拆分为领导者选举、日志复制和安全性三个子问题,设定了领导者、候选者和跟随者三种逻辑节点。
所有节点的初始状态都是跟随者,想参与领导者竞选则转变为候选者并提出选举请求,如超过一半票数则成功在本次任期称为领导者。
领导者会处理所有请求并将日志同步至跟随者,并且会定期给所有跟随者发送心跳消息,如果出现故障,心跳消息超时未收到,则会发起新的选举过程。
BFT (Byzantine Fault Tolerance)
Byzantine Fault Tolerance, BFT
拜占庭容错算法则主要是用来处理网络中存在恶意节点的场景,主要是对拜占庭问题的解决,在恶意节点不超过 1/3 的情况下可以有效达成共识,但复杂度非常高(指数级)。
Practical Byzantine Fault Tolerance, PBFT
PBFT 是对 BFT 算法的优化,采用了 RSA 签名算法、消息验证、摘要等密码学技术,结合 Paxos 等相关算法,最后将算法复杂度降到了平方级。
在 PBFT 算法实现中,首先选取(随机/轮换)某个节点,设定其逻辑节点为主节点。主节点在自己的 View 内接收客户端的请求并广播(使用三阶段提交机制,见上文)至其他节点,当所有节点完成处理请求后将结果返回给客户端,如果收到了至少来自 2f + 1 个不同节点的相同结果,则共识完成。
- 尝试预提交:主节点收到消息后进行签名并向其他节点广播
- 预提交:其他节点收到消息后进行核对,合法则向签名并向其他节点广播,其他节点也进行核对
- 正式提交:对消息签名并广播提交状态,如经过 2f + 1 个验证,则系统完成共识
其他
除了 PBFT 外,PoW、PoS、HotStuff 等也广泛应用于比特币、以太坊、Libra 等区块链项目,并在不断优化中,拜占庭容错类算法因为效率不高,大多用于公有链环境,而联盟链则多采用 非拜占庭容错的方式,辅之以权限控制等方式来平衡性能和安全性。
总结
以上就是对分布式系统与区块链共识机制的概念和实际应用总结,之后也会对各类业界投入使用的共识算法作更深入的剖析。
参考资料
23 岁的自白:去追寻意义
现在是 2020 年 6 月 6 日,我 23 岁了,这个年纪似乎是一个尴尬的存在,若按照人生阶段来界定,本科毕业已经是一年之前,而离两个本命年也还为时尚早,人生阅历远不足以去给予他人什么忠告,却也想写点东西对自己过去的几年有个交代。
高中三年的人生很容易概括,不断学习取得更好的成绩就已经足以填满生活的大部分意义,也幸而收获一个挚友,以及一份并不圆满的单恋。而高考更像是一个休止符,在打破原有的生活平衡后却并未给自己多少喘息的机会,就似乎一切都戛然而止。很害怕,那之后生活的意义是什么呢?
高考结束后的暑假和挚友加入了一个国际支教团赴湖南支教,期间萌生读新闻系的想法,但刚刚过线的分数仅仅允许我在武理的英语和社会工作两个专业之中祈祷前者,在一个新的阶段还未到来之时就已经陷入茫然。
九月,一个人带着行李前往武汉 —— 一个过去十几年未有过任何交集的城市,陌生感与新鲜感在最初的几周后也都渐渐化为迷茫与恐慌,不知道自己是在寻找什么,人在没有找到自己追求的事物时,往往会去寻求一个替代性的简单目标。那时的我,选择了学生工作。
说实话就谈吐与性格而言我远不及很多同届的部员,上个舞台都紧张到自己绊自己,开个会都磕磕巴巴,而交个新朋友也会脸红。所幸在几次例行的活动后也模模糊糊地发现这是一件可以花精力和时间去做好的事,于是开始学修图、设计海报、制作 PPT 和剪辑视频,对于有机会发挥作用的任务都尽量去争取,最终也都取得了不错的结果。
转眼就到了转专业申请的时间,却又犹豫了,如果新闻系只是自己的一时之念,努力去争取的这个选择并不是最终想要的,而只是一种逃避,那还有意义吗?最终放弃了申请,现在想想这其实也是一种对未知的逃避。
大二大三渐渐在学校与学院的各个学生组织中担任重要角色,校易班副站长、院心协会长、学生会学习部部长也成为了身上醒目的标签。一周三四个会议,审不完的推送,熬夜肝视频、策划是常态,苦是真的苦,但与之相伴的是认识了很多有趣的伙伴以及很崇拜的指导老师。至今都仍觉得那段经历是自己大学的高光时刻。
当课程渐渐变得乏味,学生工作也渐渐趋于稳定,内心又开始陷入极重的焦虑和恐慌,对英语的兴趣和付出也就仅仅能够支撑我到本科结束,对于工作岗位却也毫无头绪,想更多探索未来的可能性,但在各个赛道上都难以具备足够的竞争力,甚至也不知道该为了什么目标前进。
当时有在各个互联网平台写文章的习惯,机缘巧合认识了一些区块链企业的从业者,其中一位邀请我面谈,惊讶却也害怕。犹豫再三后还是决定飞往厦门,又开启了一段新的旅程。自此,借由实习去各地企业考察、参加会议,慢慢也参与了一些项目的筹备与决策。现在跟许多当时的 Boss 和同事仍是很好的朋友,即使大多都已经是我父辈的年纪。站在现在的视角回看,对“单刀赴会”之举心有余悸,却也暗自庆幸当时的冲动能带来这些经历与改变。
期间买了相机,记录下沿途的风景与心境,有很短暂的一段时间我觉得这就是自己理想的生活状态 —— 足够的自由,足够的成长。但当自己逐渐迈入大四,来自未来不确定性的强烈压力又让自己回到对一切都充满质疑的状态,周围的一切都在告诉自己应该快去找一份不错的工作,要拥有一个令旁人称道的生活,然而,自己依然不知道该前往哪里。于是,着手组建了自己在线教育的创业公司,有很支持创业的老师,有协同完成录制剪辑等事宜的学妹,一切比预想的顺利许多。于是又陷入忙碌而逃避的状态,也常常自嘲,这样大小也算是个创业者了,是不是可以不用再去面对来自就业和不确定性的压力。过去的经历以及自己还值得一提的自律习惯让我能够摒弃一些浮躁的念头,避免去急功近利,但仍然没能告诉我该往哪前进。
毕业前的三个月,猛然发觉自己所在做的这些其实也不过是躲进自己的世界里自得其乐罢了,还有很多不一样的生活方式,终究缺少了体验所带来的思考过程。辞职,回武汉,申请台湾计算机专业的硕士,其实这些决定也并没有自己所想象的那样艰难。五月底,当收到台大一位教授提前的实验室邀请时,是真的很开心,有些心虚地开心着,似乎自己总是会被运气眷顾,哪怕走了很多弯路。正式结果是在旅途中出的,打开申请系统,“未录取”三个字有些扎眼,我对当时的具体心绪已经有些模糊,但大概就是高点坠落的绝望感吧。发邮件问教授,未回复。
对毕业其实也没有什么实感,就似乎离别一些人,不知道是否能再见到。其实自己也无法免俗,未就业,未入学,似乎是被打上了失败者的标签,消沉地过了两个月。回归原本的工作,继续开始工作室的业务,备考雅思,反复修改文书,申请香港留学。收到港大计算机学院的 offer 时,有些百感交集,却多了份笃定,原来自己真的值得啊。
我仍然不觉得自己触碰到了一直在找寻的意义,如今的一切成败是非也仅仅是妥协所形成的答案,也许永远找不到了,但这个过程却给了前进的勇气,也许思考本身就是建构意义的过程,让我不再期待某个瞬间能够顿悟,只是希望继续向前,体验和追寻着自己的人生。
祝 23 岁的自己,快乐。
哈佛蒋女士
说说:房子卖掉了,月底差不多就全部完成了
房子卖掉了,月底差不多就全部完成了😑~重新成为租房中的一员~
《暗黑破坏神3》第35赛季开荒指南
《暗黑破坏神III》第35赛季“永恒之战”将于2025年6月6日正式开启,庇护之地再次迎来了新的挑战。本赛季不仅引入了全新的连杀奖励机制,还带来了丰富的赛季旅程奖励和国服专属福利。以下我们将详细介绍一下,在暗黑破坏神3第35赛季更高效完成开荒的详细教程和详细解析,助你在新赛季中快人一步。
第35赛季的开荒相比之前的赛季更简单一些。主要原因在于赛季增益“混沌魔域”可以在前期提供大量伤害并协助击杀怪物。前期触发这个增益非常简单,只需要找到怪物密集的地图,击杀一定数量的怪物后,就可以依靠这个增益自己滚雪球。玩家在击杀敌人时会逐步叠加该增益,每层提供0.05%的移动速度和0.1%的伤害加成,最多可叠加至1000层,分别获得50%的移动速度和100%的伤害提升。
此外,达到特定的连杀数量还会触发强大的场景效果:
15连杀:爆炸小鸡自动追踪并摧毁目标
30连杀:大范围冰霜新星冻结敌人
50连杀:尸体从天而降
100连杀:释放五道巨大能量旋风
150连杀:敌人脚下出现黑暗之泉
200连杀:天降宝箱
300连杀:烈焰之环席卷战场
400连杀:流星火雨从天而降
500连杀:天使降临战场为你而战
1000连杀:?????
开荒的目标是凑出一套可以效率速刷的打工玩法,并以此为基础去凑其他职业的主流玩法。
以下是更高效完成开荒的步骤和技巧:
先建立一个赛季角色,赛季角色可以选择喜欢的职业, 第35赛季的开荒职业建议用猎魔人或野蛮人,可以领到邪秽之精和废土之怒两个套装,适合新手速刷。
建立角色后,打挑战秘境模式,获得一个挑战秘境宝箱,里面有大量金币和材料,可以先将铁匠宝石附魔升满级。
进入游戏后,找佣兵,把佣兵的武器拿到自己身上用,因为佣兵武器比自身武器攻击高,拿了佣兵武器后,伤害会提升不少。另外2个佣兵的白色武器分解掉,得到万用材料用于解锁仪式祭坛的BUFF。分解的操作很简单,只需要在铁匠铺里,物品栏中分解点击不需要的装备即可。
之后访问仪式祭坛,解锁2个重要的BUFF,一个是连杀持续时间和奖励翻倍,一个是移除所有装备等级要求,这两个BUFF对开荒帮助极大,先解锁第一个BUFF。第一个BUFF可以大幅提高打怪时能获得的经验值,连杀越多,奖励越丰富。这个BUFF会在屏幕出现一个计数器,显示当前连杀数量,保持连杀不中断很重要,尽量不要让计数器归零,连杀数字越高,获得的经验值越高。
仪式祭坛在第一章的城镇里很好找,就在传送点附近。
之后从初始任务里去找卡奈魔盒,卡奈魔盒是游戏里的关键道具,有多种不同的功能(例如提取装备的特效和传奇能力,以及重铸游戏装备属性、在游戏中更换套装等等),初始任务里,NPC会告知线索,之后前往赛斯切隆遗迹,找到长老神殿,因为卡奈魔盒就在长老神殿里面,点击即可获得卡奈魔盒。
通过卡奈魔盒,可以提取游戏中装备特效和传奇能力,包括重铸一件传奇物品,一旦卡奈魔方的传奇能力被提取出来,就可以为游戏中的角色进行配置,不需要额外装备该物品。
获得卡奈魔盒后,用挑战秘境宝箱里的材料升级一个70级武器,提取其BUFF,再做绿色贤者套装。
之后升级到18级后,解锁仪式祭坛第2个BUFF,可以提前使用70级装备和武器,第2个BUFF需要无暇宝石,18级以后,可以去击杀骷髅王、佐敦库勒的悬赏任务来获得宝箱,有悬赏任务就打,没有的话就刷新地图。
访问铁匠铺,制作一整套70级的全身装备和武器,70级装备和武器威力超大,可以轻松击杀低级怪物,18级穿上70级装备,拿上70级武器之后,就可以去刷怪升级了,难度可以直接选择苦痛6,建议刷怪地点是先民神殿,先民神殿怪物密度高,地图结构简单不容易迷路。由于装备等级的碾压,升级速度快到飞起。手持70级武器在这里横扫非常爽快,一刀一个小怪,几刀解决精英,升级速度飞快,记得全程保持连杀不断,这样经验值翻倍效果拉满。神殿里还可能掉落一些有用的低级传奇装备,运气好的话能捡到不少好东西。
70级是等级上限,达到70级后游戏才算真正开始。这时候需要刷巅峰等级来提升角色属性,巅峰等级没有上限,可以无限提升,每提升一级巅峰等级,角色主属性增加5点,巅峰等级提升速度随等级增长而变慢,需要大量经验值。
升到70级之后,优先做赛季任务,完成赛季旅程的第2、3、4章节后,即可获得三个“黑德里格的礼物”。这些礼物中会包含你的职业套装中的几个部分。玩家每个赛季只能以这种方式解锁一个职业套装(无论是否是专家模式),所以请明智选择!你收到的套装取决于你打开每个“黑德里格的礼物”时所选角色的职业。如果你想要收集全套职业套装,则需要以相同角色打开全部三个礼物。以下是第35赛季中奖励的“黑德里格的礼物”套装内容:
武僧 - 千风飓
猎魔人 - 邪秽之精
圣教军 - 罗兰的传世甲
魔法师 - 塔·拉夏的法理
野蛮人 - 废土之怒
巫医 - 魔牙战装
死灵法师 - 拉斯玛的骨甲
建议选择猎魔人的邪秽之精或者野蛮人的废土之怒,这两个套装都相当简单,新手可以轻松刷怪。
获得赛季奖励的绿色套装之后,伤害量就立刻再上一个大台阶,这时候可以尝试挑战高难度的大秘境。通过不停地刷大秘境,可以获得大量巅峰等级。
完成赛季旅程的“征服者”阶段,可解锁额外的储藏箱空间(最多5个)。本赛季的征服挑战包括:
守财奴 / 吝啬鬼:在不间断的情况下获得5000万金币
速度之魔 / 极品飞车:在2分钟内完成一个折磨X难度以上的奈非天秘境
首领模式 / 天壤之别:在20分钟内击败所有首领
有如神助 / 狮心虎胆:单人完成75层大秘境
宇宙洞察者 / 套装精通者:精通8个套装地下城
这些挑战不仅考验玩家的操作技巧,也需要合理的装备搭配和策略安排。
为了在新赛季中快速起步,建议按照以下步骤进行资源规划:
完成挑战秘境,获取初始资源
利用血岩碎片在卡达拉处赌博,获取关键装备
使用卡奈魔盒升级稀有装备,获取传奇装备
完成悬赏任务,获取材料用于祭坛解锁和装备制作
合理分配技能点和装备属性,提高刷图效率
通过以上步骤,玩家可以在短时间内完成70级升级,并解锁大部分祭坛节点。
希望以上内容能帮助你在《暗黑破坏神III》第35赛季中取得佳绩,享受游戏的乐趣。
赛季玩法丰富多样,基本上把赛季旅程任务完成,就可以获得大量奖励,之后就可以AFK了。
端午苏州寒山寺、虎丘和七里山塘随性游
地铁怪谈
Focalboard 开源项目管理的有力工具
在当今数字化协作的时代,高效的项目管理工具对于团队的成功至关重要。Focalboard 作为一款开源的项目管理软件,正逐渐崭露头角,受到了众多团队和个人的青睐。
简介
Focalboard 是由 Mattermost 开发的功能强大的开源项目管理和协作工具,能够以看板的形式灵活地组织任务,创建详细的笔记,并方便地共享文件。它支持创建各种类型的笔记页面,记录数字、链接、文字等多种类型的信息,且内置了多种模板供用户直接套用编辑。
Focalboard 具有以下特点:一是开源免费,数据自托管,用户可将其部署在自己的本地服务器上,确保数据安全可靠;二是支持多平台,包括 Windows、macOS、Linux、iOS 和 Android 等,方便用户随时随地接入项目;三是具备丰富的功能,如拖放卡、进出口板、按状态或截止日期等过滤板和任务,以及支持多人协作、文件共享、团队和直接消息等;四是界面简洁易用,操作便捷,易于上手。
安装
Focalboard 的安装方式主要有以下几种:
- 使用 Docker 安装
这是在 Windows 系统上较为便捷的安装方式。首先需要在 Windows 中安装 Docker,然后打开 cmd 命令行,输入命令 docker run -it -p 80:8000 mattermost/focalboard
,等待安装完成。安装成功后,在 Docker Desktop 中可以看到 Focalboard 的 web 界面地址为 https://localhost:8000
,点击该地址或在浏览器输入 localhost:8000
即可进入 Focalboard 登录界面。
- 在 Ubuntu 系统上安装
以 Ubuntu 22.04 为例,安装步骤如下:首先是安装和配置 PostgreSQL 数据库,使用命令 apt-get install curl wget gnupg2 -y
和 apt-get install postgresql postgresql-contrib -y
进行安装,然后创建数据库和用户。接着安装 Focalboard,可从官网下载适用于 Ubuntu 的安装包,再通过命令进行安装。安装完成后,需为 Focalboard 创建系统服务文件,并将 Nginx 配置为反向代理,最后访问 Focalboard 网络界面并启用 SSL。
- 直接下载安装包安装
可前往 Focalboard 的官方网站(https://focalboard.com/)下载适用于不同操作系统的个人桌面版或个人服务器版的安装包,按照提示完成安装。
使用
- 创建团队和看板
在 Focalboard 的欢迎屏幕上,用户可选择创建新的团队并设置团队名称。进入团队页面后,点击 创建看板
按钮,根据需要选择看板类型,如项目任务、内容日历、公司目标与 OKR、路线图等模板创建看板,也可创建空白看板自行设计。还可设置看板的名称、描述和背景色等信息。
- 添加任务和卡片
在看板上,通过点击 添加卡片
按钮来创建新的任务卡片。可在卡片中输入任务描述,并为卡片添加标签、截止日期、优先级等属性,以便更好地对任务进行分类和管理。同时,可以将任务卡片分配给团队中的不同成员,明确责任分工。
- 进行协作和沟通
团队成员可以在看板上实时查看和编辑任务卡片,共同推进项目进度。在卡片中添加评论和讨论,@提及队友以引起他们的注意,分享想法和意见,实现高效的协作沟通。此外,还可通过 Focalboard 的团队和直接消息功能,进一步加强团队成员之间的交流。
- 利用其他功能
Focalboard 支持文件共享,用户可在任务卡片中上传相关文件,方便团队成员查阅和下载。可对看板进行筛选、分组和排序,快速找到所需的任务和信息。还能查看历史记录、备份快照等,确保数据的安全性和可恢复性。
Oryx 助力音视频服务开源利器
Oryx 是一个开源的音视频服务解决方案,具有多种特点和应用场景。
简介
特点 :
- 多协议支持 :支持 RTMP、HLS、HTTP-FLV 等多种流媒体协议,满足不同设备和场景下的音视频传输需求。
- 高扩展性 :基于插件的架构,便于用户根据自身需求进行功能扩展,如添加新的推流协议、录制存储等功能。
- 高性能 :支持多进程,能充分利用多核 CPU 和高速网络优势,还支持 HTTP2 和 Quic 协议,提供高性能的流媒体服务。
- 便捷管理 :提供丰富的 HTTP API,便于远程管理和操作,还支持 JSON 风格的配置文件,方便配置和管理。
应用场景 :
- 推拉流场景 :支持各种不同协议的推拉流,可轻松实现音视频的传输和分发。
- 录制场景 :支持合并多次推流,可设置过滤器只录制特定的流,满足对音视频录制的需求。
- 转发和虚拟直播 :可以将文件和其他流转发到不同的平台,或者转发到 Oryx 自身,实现虚拟直播等功能。
- AI 自动字幕 :利用 OpenAI 等能力,自动识别字幕并将字幕嵌入到视频流中,提升音视频内容的可理解性和可访问性。
安装
环境准备 :Oryx 基于 Go 语言开发,需先安装 Go 语言环境。同时,还需确保服务器有可用的网络连接,以便下载所需的依赖包和 Oryx 代码。
安装步骤 :
- 通过宝塔面板安装 :在宝塔面板的软件商店中搜索 Oryx,找到对应的插件后点击安装按钮,按照提示完成安装。如果宝塔商店的版本较老,可在Oryx Releases 页面下载最新版本的
bt-oryx.zip
,然后在宝塔软件商店 > 第三方应用 > 导入插件
处上传该文件进行安装。 - 通过命令行安装 :在 Unix-like 系统中,使用
go get github.com/ossrs/go-oryx
命令获取源代码,然后进入$GOPATH/src/github.com/ossrs/go-oryx
目录,使用$GOPATH/bin/go-oryx -c conf/oryx.json
命令启动 Oryx 服务。在 Windows 系统中,命令稍有不同,为go get github.com/ossrs/go-oryx
,然后进入%GOPATH%\src\github.com\ossrs\go-oryx
目录,使用%GOPATH%\bin\go-oryx.exe -c conf\oryx.json
命令启动服务。
- 通过宝塔面板安装 :在宝塔面板的软件商店中搜索 Oryx,找到对应的插件后点击安装按钮,按照提示完成安装。如果宝塔商店的版本较老,可在Oryx Releases 页面下载最新版本的
使用
- 基本使用 :安装完成后,可通过 Oryx 提供的 HTTP API 进行各种操作,如推流、拉流、录制、转发等。例如,使用
curl -X POST http://localhost:1935/api/v1/streams/start
命令可启动推流,使用curl -X GET http://localhost:1935/api/v1/streams
命令可获取当前正在推流的列表。 - 配置优化 :根据实际需求,可对 Oryx 的配置文件进行修改,以优化其性能和功能。例如,可调整最大连接数、缓冲区大小等参数,以提高服务的并发能力和传输效率。
- 与其他服务结合使用 :Oryx 可与云厂商的镜像、DDNS 服务、VPS 等结合使用,实现更强大的音视频服务功能。如通过 DDNS 和 VPS,可将摄像头 24/7 实时流式传输到 YouTube,无需使用 PC 或 OBS。
探索网络实验的神器 Mininet
在计算机网络的学习与研究领域,Mininet 是一款极具价值的工具。它就像是一个迷你网络世界的构建者,为我们提供了便捷的网络实验环境。本文将带你深入了解 Mininet 的魅力所在,并手把手教你安装与使用它。
简介
Mininet 是一个用于创建虚拟化网络环境的平台。
它能够在一台计算机上快速构建出包含多个主机、交换机、路由器等网络设备的网络拓扑结构。
对于网络研究人员、开发者以及网络课程的学生来说,Mininet 是一个理想的实验平台。
通过它可以模拟大规模网络环境,进行各种网络协议的研究、网络应用的开发测试以及网络教学演示等。
例如,如果你想研究一种新的网络路由算法,借助 Mininet 就能轻松搭建出实验所需的网络场景,无需搭建实体网络设备,大大节省了成本和时间。
它的核心优势在于轻量级和灵活性。Mininet 是基于 Linux 的用户模式 Linux 网络命名空间技术实现的,这使得它可以很方便地在各种 Linux 系统上运行。
而且,Mininet 的网络拓扑结构可以灵活定制,无论是简单的链式拓扑、树形拓扑,还是复杂的自定义拓扑,都能通过简单的配置文件或命令行参数来实现。
同时,Mininet 还支持多种网络仿真工具的集成,如 Wireshark 等,方便对网络流量进行分析。
安装
安装 Mininet 的过程相对简便,但需要确保你的系统满足一定的前提条件。以下是基于 Ubuntu 系统的安装步骤:
- 首先,需要更新系统的软件包列表。在终端中输入命令
sudo apt-get update
,让系统获取最新的软件包信息。 - 然后安装必要的依赖库。通过运行
sudo apt-get install -y build-essential autoconf automake libtool pkg-config gawk git python python-pip python-dev tcpdump wireshark sqlite3 curl bzip2 openvswitch-datapath-dkms openvswitch-switch openvswitch-common
命令,可以一次性安装这些依赖,它们是 Mininet 正常运行和后续功能扩展的基础。 - 接下来就是安装 Mininet 本身。可以从 Mininet 的官方仓库克隆代码,使用命令
git clone git://github.com/mininet/mininet
,然后进入 Mininet 目录,运行mininet/util/install.sh -a
命令进行安装。这个安装脚本会自动完成编译和安装过程,安装完成后,系统会提示安装成功的相关信息。
如果是在其他 Linux 发行版上,安装步骤可能会略有差异,但大体思路是相似的,就是要先安装依赖,再获取并安装 Mininet 代码。同时,也可以选择使用虚拟机软件,如 VirtualBox 或 VMware 等,安装一个 Ubuntu 虚拟机,然后在虚拟机中进行上述安装过程,这样可以避免对宿主机系统产生影响,方便实验环境的管理和维护。
使用
安装完 Mininet 后,就可以开始体验它强大的功能了。最基本的使用方式是通过命令行来创建和操作网络拓扑。
创建网络拓扑
- Mininet 提供了简单的命令行参数来快速创建常见的网络拓扑。例如,运行命令
sudo mn
,就会自动创建一个包含两个主机、一个交换机和一个控制器的简单网络拓扑。主机之间通过交换机进行通信,控制器用于管理交换机的行为。 - 如果想要创建更复杂的拓扑,可以使用
--topo
参数。比如,使用命令sudo mn --topo linear,4
,就会创建一个 4 个主机呈线性连接的拓扑,主机 1 连接到交换机 1,交换机 1 连接到主机 2,依此类推,形成一条链式结构。
- Mininet 提供了简单的命令行参数来快速创建常见的网络拓扑。例如,运行命令
操作网络设备
- 在创建好网络拓扑后,Mininet 会进入交互式命令行界面。在这个界面中,可以对网络设备进行各种操作。例如,可以通过
h1
命令进入主机 1 的命令行界面,在主机 1 上执行网络相关的命令,如ping h2
来测试主机 1 和主机 2 之间的连通性。如果网络配置正确,应该可以看到主机 1 向主机 2 发送 ICMP 请求并收到回复的信息,这表明网络通信是正常的。 - 对于交换机,可以使用
ovs-vsctl
命令来查看和配置交换机的端口信息、流表等。例如,ovs-vsctl show
命令可以显示交换机的详细信息,包括交换机的名称、端口号、连接的主机等。
- 在创建好网络拓扑后,Mininet 会进入交互式命令行界面。在这个界面中,可以对网络设备进行各种操作。例如,可以通过
自定义脚本
- 当然,Mininet 也支持使用 Python 脚本来自定义更复杂的网络行为和实验场景。你可以编写自己的 Python 脚本来定义网络拓扑、配置网络设备参数以及实现特定的网络功能。例如,你可以通过继承 Mininet 的拓扑类,创建一个包含多个子网络、不同带宽和延迟设置的复杂拓扑,并在脚本中对交换机的流表进行编程,实现特定的流量转发策略,如负载均衡、流量过滤等。这种方式为用户提供了极大的自由度,能够满足各种个性化的网络实验需求。
新增评论置顶功能
我对评论模块进行了优化,增加了置顶功能。具体逻辑是将文章页评论列表的排序改为三段序列:主评论被置顶的提升到最上方,主评论下有子评论被置顶的整体提升到次上方,其他的保持不变。
在合法合规的前提下,每个人有平等的话语权,所以评论没有优劣之分——不论文笔,不论意义,应当自然排序。不过写《老婆给我转发了一个腹肌》这篇文章,我预感到老婆会评论,那就产生了一个需求——文章涉及的当事人发声,一般有必要置顶。另外需要置顶的场景包括评论者对文章进行了勘误,或者提出了很有价值的补充解释。故此我开发了评论置顶功能。
自己动手包包子的一天
这个端午不一般!我与8万人在鸟巢,被凤凰传奇的草原风吹“上头”!
光吞万象,挺好,挺好
契约之下的自由:社会契约论
在现代社会中,我们习以为常的安全、秩序、司法和公共服务,其实都建立在一个古老而深刻的哲学命题之上:社会契约。它并非法律文本上的字句,而是一种政治制度赖以存在的逻辑前提。尤其是在国家权力膨胀、公共信任滑坡的时代背景下,回到社会契约论的原点,重新理解政府与公民之间的边界与义务,是一项极为现实的任务。
自然状态的风险与自由的再定义
社会契约论的核心,是一种对自由的重新诠释。在自然状态中,人类虽然享有绝对的自由,但这种自由是脆弱的、不稳定的——你拥有刀,我有枪,谁都可能成为谁的威胁。为了摆脱这种“弱肉强食”的原始无序状态,人们选择以让渡部分天然自由为代价,换取制度化的秩序和权利保障。
这种让渡不是对自由的否定,而是一种更高阶的自由形态——契约自由。它建立在法律与制度的基础之上,使得自由从暴力的任性转化为公平的共享。虽然形式上受到了限制,但实质上更可靠、更平等。
洛克的社会契约:让渡手段而非权利
在约翰·洛克的理论中,社会契约是一种“权利委托契约”,其核心前提是:政府是人民的工具,而不是主宰。他认为人类进入社会,并不意味着放弃全部的自由,而是将部分执行自由的“手段”——比如私力救济、私人惩罚——交由政府代为执行。
这意味着,公民保留了生命、财产和自由这三项不可让渡的基本权利,而仅将立法权、司法权和执法权委托给政府,由它来构建更有效率的秩序体系。权力的让渡,必须基于公民的明示或默示同意——如通过选举制度,或长期遵守法律体系本身。
最关键的是,洛克留给社会一个“安全阀”:当政府违背契约、侵犯基本权利时,公民有权收回被委托的权力,重建政治秩序。
社会分工下的政治正当性
从治理结构的角度看,这种契约本质上是一种社会分工:公民专注于生产与生活,政府专注于维持秩序与保障权利。就像人们将金钱交给银行托管,是为了获得更高的安全性和便利性;权利的“外包”也是为了追求更高的保障效率。
但这种分工必须建立在契约精神之上。如果政府脱离了保障者的角色,变成了利益掠夺者,那么这种分工就会失去正当性。正因如此,权力的来源、边界与责任,必须始终受到公民的监督和制约。
结语:契约社会不是理想主义,而是现实主义
今天我们谈论自由、法治与国家权力时,不能只停留在抽象概念上。社会契约论告诉我们,所有权力都不是天授的,而是人民基于现实需要所“授权”的临时工具。政府的合法性,不在于它有多强,而在于它是否始终在为公民服务。
自由,不意味着无拘无束,而是意味着你在遵守规则的前提下,拥有不被任意剥夺的权利。制度,不是用来压制自由的工具,而是为了让更多人更长久地享有自由的手段。
社会契约,从来都不是空洞的哲学思辨,而是一种关乎每个人现实生活的制度基石。在这个契约之上,我们建构法律、投票选举、表达抗议,也在关键时刻,保留了拒绝不公的权利。
搭乘C919
《破地狱》《九龙城寨之围城》观后感
去发现更大的世界
五一假期九江之行
博客这片自留地,情怀不老!
老婆给我转发了一个腹肌
老婆在抖音上给我转发了一个腹肌帅哥,令我猝不及防。相识不过二十年,就不拿我当外人了。
平时老婆跟我打趣,口头禅是喜欢有腹肌的帅哥。简单一句话——“有腹肌的”、“帅”、“哥”——我竟然一个字都不符合,伤害极大。跟老婆刚认识的时候,我110斤,有结实平坦的小腹;现在我160斤,大腹便便、其貌不扬、中年大叔。
有一段时间我不知道是不是触发了“肌肉”这个关键词,刷到大量擦边男视频。然后在评论区看到各种女性口吻发言,跟下半身男人别无二致。而我仍然认为这些评论是反串或者玩梗——我好像本能忽视了这种自欺欺人的心态,就是在我自己看到大胸、长腿挪不开眼的情况下,我竟然认为女性不会真心喜欢有肌肉的擦边帅哥。
直到我半玩笑半认真地跟老婆讨论这个问题,对照发现她跟我看擦边视频的心理状态是相似的。当然,这本就是不言自明的事情——异性相吸的基因设计是对称的。
人会用唯心的视角粉饰世界的运转,使人生看起来理想一些。
上面这句话的例证就是我相信老婆爱我胜过爱有腹肌的帅哥。
原视频:
基于信任的顾问合作模式
离开字节以后,我的很大一部分收入来自于外包项目的开发。不过,和过去大家熟悉的外包的不同的是,我并非传统的外包模式,我称之为「基于信任的顾问合作模式」。
传统的外包模式是什么样?
传统的外包模式往往是人力外包,或者项目外包,在项目的一开始确定一个项目的报价,然后进行 50% 的款项结算。随着后续的项目进展,往往会因为项目前期评估不足、需求变动、初期评估不够而导致成本超出报价,最终导致项目最终的结算困难。抑或者是在一开始报一个拥有足够利润空间的价格,从而让项目有足够的安全边际,以支撑不同场景下的交付。
这两种方式其实都略微有一些问题
前者正常报价的,会因为项目本身的不确定性、迭代过程中的种种问题,导致最终结尾;对于项目方来说,需求没有解决,反而损失了项目的初始基金。对于开发者来说,要么是支付成本,完成一个 ROI 很低甚至为负的项目,要么是项目完成了,但没有收到款。
后者虽然对于开发者来说,更加的安全,但对于项目方来说,支出了极高的成本,来对冲项目开发过程中的不确定性。
我的做事方式是什么样的?
我做事的方式更接近于传统咨询公司的策略 —— 计算工作时长,并为工作时长付费,而且可以接受后付费。
这里有几个前置条件:
- 我的客户往往是介绍而来,很少有纯粹的冷启动客户;所以我们存在一定的基础信任;
- 我的时间的价格很高,基本上持平我在字节的时薪;
- 我会记录我在这个项目的时间花费,从而让项目方拥有更明确的支付预期,知道「我花钱买了什么」。
接下来我们一个个说 ——
- 我自己很少主动去找客户。实际上大多数时候,我的客户希望我分配更多的时间给他们。而我需要的是更多的是时间分配个客户。所以我基本上接触到的往往都是朋友转介绍过来的客户,而非主动去找的。这保证来找我的客户往往是有一定的基础信任的。不仅如此,往往他们找我时,我可能还在手头忙一些事情,随后就会被我暂时拒绝掉,让他们去找别的开发者。
- 我给自己的时间价格相对比较高,这保证了我可以筛选值得的客户,也可以规避掉一部分低价敏感型客户(实际上找我的 ROI 应该是更高的,但不一定是最便宜的)。同时,也给客户更好的服务。我不太喜欢低价的竞争,只会让大家都陷入无尽的价格战里。相比之下, 我更多提供的是结合 AI 的理解能力,和 AI 辅助的能力,用更短的时间完成更多的工作,提升自己的人效。
- 因为前面基于信任,所以我会给客户说1. 我不需要你预付费,但我会给你一个 credit。在这个 credit 内,我会先干,后让你支付;2. 到了某个支付的节点,我会给你一个账单,你需要为这个账单付费。账单里包含了详细的项目、活动和所消耗的时间。以及每个时间的具体的工作描述,从而让客户支付的放心。

通过这样的方式,我构建了一个相对更加互信的协作模式 —— 我认为也是更好的。我们拥有相同的目标,一起迭代,将整个项目做大做强,并赚到自己应得的钱。
最后,说一下我目前的报价: ¥400 元/小时。价格会根据客户的数量进行持续的更新。不过已经在服务的存量项目,则会保持支付的费率。仅对新客户 or 新项目生效。
2025.05.28: ¥375/小时 -> ¥400/小时
武汉采摘树莓-黄陂七颗莓生态园
HBO电视剧《最后生还者》第二季影评
看完了HBO的《最后生还者》第二季的第六集,剧情终于又回顾了第一季结尾的那个令人窒息的道德困境,终于又来了,如果说第一季结尾乔尔血洗医院的行为已经让观众吵翻了天,那么第二季简直是把伦理学教材撕碎了扔进末日废墟里,还踩了几脚。
记得第一季结尾那个令人窒息的时刻吗?火萤组织准备用艾莉的大脑做实验寻找疫苗,实验的过程将杀死艾莉,而乔尔选择大开杀戒救出艾莉,乔尔的行为到底是不是自私让人争论不休,而我,完全理解乔尔的每一个选择。
火萤的行为简直可以写入医学伦理学反面教材。他们对待艾莉的方式,就像对待一个装着解药的容器,而非一个有思想有感情的人。这让我想起康德那句著名的话:"人应该作为目的本身而存在,而不仅仅是手段",火萤恰恰把艾莉当成了手段——一个可能拯救人类的手段。他们甚至懒得询问这个15岁女孩的意愿,就直接准备开颅手术。这种"杀死一个人,拯救千万人"的极端功利主义逻辑,在哲学课本上恐怕都难以自圆其说。
道德的底线是对人的尊重,火萤通过手术杀死艾莉的行为,艾莉完全不知情,也没有做出选择,糊里糊涂就被麻醉上了手术室,火萤如果事先争取艾莉的意见,艾莉同意牺牲自己的生命,那么火萤再做手术,至少符合程序上的合法性。但从剧情上看,即使艾莉不同意手术,火萤也会强行做手术。
强迫一个人牺牲自己来拯救其他人,即不道德,也不合法。火萤的行为符合"牺牲少数拯救多数"的功利主义逻辑,但忽视了个体权利的绝对性。
乔尔不能帮助艾莉做选择,选择她是否牺牲,乔尔去拯救艾莉,维护了艾莉做为一个人最基本的个体权利:生命权,这才是符合最基本的伦理学的道德标准,乔尔将艾莉视为女儿,保护家人的义务高于针对陌生人的义务,乔尔得知火萤计划立即对艾莉进行致命手术(未经其知情同意),且时间紧迫,火萤士兵也试图阻止乔尔,并直接开枪攻击,乔尔随时存在生命危险,因此,在拯救艾莉过程中乔尔杀死全副武装的火萤士兵,是完全必要的,并且不存在任何道德上的问题,在手术室里,主治医生手持手术刀(可算为致命武器)进行阻挡,乔尔杀死医生的行为略有一点点不妥,算是超微超出了一点必要限度,实际上将医生击伤即可。
总的来说,艾莉的险情源于火萤的决定(未经同意进行手术),而不是乔尔的过错,乔尔的行为基本符合紧急避险的规则。
不过,乔尔最后杀死马琳的行为存在较大争议,主要动机是为了确保火萤不会追杀,属于乔尔人性的黑暗面,但鉴于马琳是制造险情的元凶,因此简单判断对错也是非常困难的。
第二季最精彩的地方在于它没有简单地评判对错,艾比的故事线让观众被迫站在"另一边"思考:如果你的父亲是被乔尔杀死的医生,你会怎么做?这种视角转换简直是对观众道德观的一次"压力测试",尼采说"当你凝视深渊时,深渊也在凝视着你",这部剧完美诠释了这句话——我们越是深入每个角色的动机,就越难做出简单的道德判断。
特别打动我的是艾莉和乔尔之间逐渐修复的关系,那些安静的瞬间——一起弹吉他、看长颈鹿、讲蹩脚笑话——比任何枪战戏都更有力量,在这个道德模糊的世界里,他们之间的爱是少数几件确定无疑的美好事物。这让我想起自己和子女的关系:青春期时我们吵得天翻地覆,但子女大学毕业了,我们反而能像朋友一样相处。人类关系的韧性,或许才是对抗这个荒谬世界的最佳武器。
《最后生还者》第二季最伟大的地方在于,它拒绝给出简单答案。在这个后末日世界里,每个人都在为自己的生存和所爱之人战斗,每个人的选择都有其合理性,但又都沾满鲜血。萨特说"他人即地狱",但这部剧告诉我们:没有他人,我们也终将成为自己的地狱。当乔尔抱着受伤的艾莉穿过医院走廊时,他选择了一个具体的人而非抽象的人类——而这,或许就是混乱世界中我们能做的最人性的选择。
播客自动化更新分发教程
摘要:自动更新和多平台同步播客的方法:找到一些特定材料,分批导入notebooklm,输入提示词,生成音频文件。在喜马拉雅(国内)或spotify(国外)上创建播客,将音频文件上传,并生成RSS Feed。在iTunes、Youtube、网易云音乐等平台创建播客,选择使用RSS,并将其导入。之后,只需要更新喜马拉雅或spotify,即可同步将播客发布到多个平台。
今天我将介绍一下怎么用 AI + 自动化工具,实现播客内容的“一次制作、多平台分发”。
播客是啥?现在谁还在听?
播客(英文:Podcast)是指的是通过数字广播技术制作的,在互联网上传播的音频内容。简单来说,播客就是“可以订阅的音频节目”,你可以把它理解成“音频版的专栏文章”或者“随时能听的电台节目”。它不像直播那样需要你盯着屏幕,也不像视频那样吃流量,适合开车、做饭、散步的时候听。
在内容泛滥的今天,播客反而成了注意力稀缺下的“净土”——节奏慢、干货多、听众粘性强。
目前主流播客平台包括:
国内平台: 喜马拉雅、网易云音乐、小宇宙
海外平台: Apple Podcasts、Spotify、YouTube Music、Pocket Casts
大部分平台都支持用 RSS Feed 自动订阅内容更新——这就是我们可以“自动同步”的关键点。
根据《PodFest China2020中文播客听众与消费调研》显示,中文播客听众最常使用的5个收听渠道是:Apple Podcasts(49.7%)、喜马拉雅(37.9%)、网易云音乐 (35.0%)、微信公众号内嵌音频 (21.9%)和Pocket Casts(19.5%)。
为什么要自动更新播客?
我们做内容的都知道,最大的问题不仅仅是创作,而且发布太繁琐也是个大问题。你要一条条上传音频、写描述、同步封面,光是把一集播客发到5个平台,就能让人劝退。
但如果有个方法,可以让我只上传一次,就能全平台同步更新,是不是省时省力又体面?于是就有了这套玩法:AI生成播客 + 多平台同步。
第一步:用AI批量生成播客内容
先说最核心的一步——播客内容从哪来?
我的方法是:找一些结构化或主题清晰的素材(比如电子书章节、技术文章合集、行业报告等),然后分批导入 NotebookLM 这个工具。
这个工具的牛点在于,它能理解资料内容,然后你可以通过提示词让它生成一段质量不错的,类似播客主持人口吻的音频。通过对提示词的调整,可以从不同角度来优化和调整输出的播客音频。
第二步:在主平台创建播客并上传音频
内容搞定之后,得找个“主阵地”上传音频文件。我试了两家:
Spotify for Podcasters(海外)
喜马拉雅(国内)
这两家都有一个共同特点:能生成 RSS Feed,用户量大。
这个 RSS Feed 非常关键,它就像播客的“分发中枢”,有了它,其他平台就可以自动订阅并更新你的播客内容。
这里重点讲一下喜马拉雅的RSS Feed,隐藏的非常深,不容易找到,登录喜马拉雅创作中心后台,点击“创作实验室”,选择“Apple 播客托管服务”,即可生成一个RSS Feed,这个RSS Feed不仅仅可以同步到Apple Podcasts,同步到其他播客平台也没问题。
Spotify的RSS Feed就好找多了,登录spotify for creators的后台,点击“设置”-“Availability”,即可看到RSS Distribution里面的链接。
你上传好音频,设置好标题、描述、封面,播客就上线了,同时也自动生成了对应的 RSS 链接。
第三步:把RSS同步到其他平台
拿着刚才生成的 RSS 链接,我们可以去以下平台注册并导入:iTunes Podcasts(Apple)、YouTube Music、网易云音乐、小宇宙、Pocket Casts等等。
这些平台在创建播客时一般都有“使用RSS导入”选项,只要粘贴你的链接,它们就能自动抓取更新。
这样一来,你只需要维护喜马拉雅或者Spotify的那一个源头,其余平台会自动同步更新,不用你操心。
后续更新流程就是“一次上传,全网同步”。
从第二期音频开始,你就爽了。流程如下:
把新内容丢进 NotebookLM,设计一个提示词,生成音频。
上传音频到你的主平台(比如喜马拉雅)。
所有绑定RSS的平台都会自动更新。
这不就是我们程序员最爱的“自动化工作流”吗?
一些实用小贴士
素材限制: NotebookLM 对处理的文本长度(包括中文)有以下限制:1、按来源文件限制:每个上传到 NotebookLM 的来源文件(例如 PDF、Google 文档、文本文件等)的字数上限为 50 万字。同时,上传的本地文件大小上限为 200MB。2、按笔记本限制:一个笔记本中可以包含的来源数量,普通用户上限为 50个。
节奏控制: AI生成内容最好控制在10~20分钟,既不累也容易被听完。
配图和封面: ChatGPT出图非常快,图片质量高,顺手还能给社媒配套宣传图。
结语:别等完美,先上车
很多人总觉得做播客门槛高,其实现在有了AI工具和自动化同步工具,真的不难。重要的不是一开始多完美,而是先跑起来,优化可以慢慢来。
如果你也想做知识型播客,这套方法值得一试:轻量、自动化、省心、可扩展。
我的播客地址
下面是我自己创建的各个平台的播客地址:
YouTube:https://www.youtube.com/@williamlong
Apple Podcasts:https://podcasts.apple.com/podcast/%E6%9C%88%E5%85%89%E6%92%AD%E5%AE%A2/id1816103541
Spotify:https://open.spotify.com/show/4iGoK7x88ul8V8MdibQy9C
喜马拉雅:https://www.ximalaya.com/album/92461056
网易云音乐:https://music.163.com/#/djradio?id=1224404483
小宇宙:https://www.xiaoyuzhoufm.com/podcast/68302549457b22ce0d25dc08
新春成都周游记
拼多多三十元电动牙刷实测
产品说明
购买原因
事教人,一次就会。经历拔智齿之痛,我恨不得吃一点东西就刷一次牙。富阳家里老婆给每人准备了电动牙刷,但余杭不常住,只有普通牙刷,我决定立即再为自己买一个。
产品选择
老婆买的是几百元的品牌电动牙刷,我感觉自己没这么精贵,打算试一下拼多多几十的产品。当然这么想也是因为可视挖耳勺都来到几十的价位了,我觉得电动牙刷技术含量更低,品牌溢价严重。
产品展示
产品参数 | |
---|---|
品牌 | 福派 |
刷毛 | 杜邦软刷 |
防水等级 | IPX8级防水 |
净重 | 108G |
电压 | 直流3.7/功率2W |
充电时间 | 约3个小时 |
震动频率 | 42000次/分钟 |
购买价格
2025年5月11日购于拼多多福派个护官方旗舰店。黑白色,送5个刷头,发好评可再送3个刷头。实付30.97元。
产品实测
产品包装
产品外观
做工比我想的要好。我贵的那个牙刷是光面设计,这款多边形防滑机身手感反而更舒适。
配件只有 5 个刷头和 1 根 USB 线,没有底座。我从认识电动牙刷开始,就有个刻板印象是竖立充电的,所以没有底座稍感奇怪。不过考虑到价格,一切都合理,要啥自行车。
动态展示
有五种震动模式,动力强劲,表现令我很满意。
个人感受
第一,日常使用电动牙刷是非常有必要的,清洁力强。比如电动牙刷可以把牙膏打成泡沫,有助于充分利用,这是手动刷牙做不到的。
第二,几十块的电动牙刷完全够用,没必要追求高价品牌牙刷。本质上核心就是电动马达,其他天花乱坠的高科技话术都是扯淡。
后记
测试结果仅针对当前样本,不保证同款商品表现一致。
阿猫、阿狗、阿Q
《三体》读后感
宽带提速
缘于某次上门推销,华数宽带给的价格低到无法拒绝,从此几处房子都惯性用华数。余杭的宽带这周到期了,我拒绝了销售的续费邀约。一方面因为华数断过几次网令我不满,另一方面我想研究一下其他运营商的新客户优惠。
换宽带,最好把之前的注销,于是我打 96371 询问。与猜想的一样,开通的时候在线办理,注销的时候要带身份证去线下营业厅办理。我决定折腾一下,也问来了最近的营业厅地址。其实到此时,我还没认真了解过其他运营商,在前往营业厅之前我开始做功课。然后我就发现了不愿意承认的事实——华数宽带是最优惠的。其他宽带不仅价格没优势,甚至还要收安装费和机器押金——华数这两项免费。
换宽带计划尚未行动就败北,悻悻然改成了续费。不过我没再找之前的销售——说出的拒绝怎么收得回——而是直接找华数官方,结果发现小程序报价比销售给的更低……最终我选择了 350M 两年 517 元,赠送路由器(标价188元)或摄像头(标价149元)二选一,以及一袋东北大米(5斤,标价36元)。
完成续费之后,我遇到了另一个问题——测速发现实际速率不到100M。我立即联系客服,被告知在系统里查到新的速率已经生效了。我怀疑有延迟,等到第二天再次测试,仍然不到100M。又向客服求证,对方还是声称新速率已在系统生效。此时我只能怀疑是设备的原因。路由器是华为千兆的没问题,那么就可能是网线的问题。这套房子是毛坯全包装修,我不记得当时有没有让我选择网线的价位。当年家用的还是 20M 的宽带,彼时的眼界很可能想象不到百兆以上的预期。
我主路由器放在主卧,具体走线是——入户线从储藏间穿出,通过预埋管线接到主卧电视墙,再有线连接到路由器。我在网上认真研究了几类线的区别,自以为有把握了,实际到储藏间看着一堆线完全没头绪,连标记都找不到。但是此时我已经充分怀疑家里装的是百兆网线,导致速度上不去。后来跟obaby聊起这个事,她说她原来就是百兆网线,然后自己换成千兆了。至此我就完全相信是家里的网线不行。花 350M 的钱用 100M 的网,我不能当这个冤大头,于是发愁怎么解决这个问题。我开始胡思乱想,越想越复杂,甚至在想更换预埋的网线要不要动装修,要花多少钱。
什么都会的obaby是自己更换的,我没这个自信,于是先找客服安排师傅上门检查。然后这个问题以出乎意料的简单方式解决了。师傅将连接路由器的网线插入仪器,随后出门了。等待的过程中我准备着说辞,想请师傅帮忙看一下能否更换网线,或者帮我介绍做这个的人。然后师傅就回来了,跟我说了一句再测一下,就自顾自开始收拾工具包。我懵了一下,赶紧打开 APP 测速,终于看到了飞一样跳动的数字——
随后师傅简单跟我说明了原因,小区终端原来将我接在百兆端口上,他给我切换过来就好了。我再三向师傅表达了感谢。没想到问题原因如此简单,宽带提速了,同时也证明当时装修并非粗制滥造,让我心情舒畅不少。
回过头来想,如今网络跟水电煤一样是生活必需品,但是运营商逐年提速、增费,定价远不如水电煤稳定。而且这个过程不可逆,低速便宜的套餐不断被移除。以余杭为例,初装是 50M 三年 666元(222元/年),第一次续费是 100M 两年半 588 元(约256元/年),这次续费是350M 两年 517 元(约259元/年)。
就我个人而言,如今宽带速率完全是过剩的。我常用的网络服务很固定,瓶颈在于网络平台(服务器带宽),而不是终端(家庭带宽)。如果可以选择,我宁可维持低速便宜的网络套餐。
开源实例之dash.
前言
dash. (or dashdot) is a modern server dashboard, running on the latest tech, designed with glassmorphism in mind. It is intended to be used for smaller VPS and private servers.
实例地址
实例配置
配置 | 描述 |
---|---|
系统 | Debian |
服务端 | Node.js 22 |
程序 | dashdot 6.0.0 |
实例部署
权限要求
- 具有系统读写权限
- 已安装 Node.js
安装程序
官网地址:https://getdashdot.com
仓库地址:https://github.com/MauriceNino/dashdot
Docker 部署
docker container run -itd \
-p 3001:3001 \
-v /:/mnt/host:ro \
--privileged \
mauricenino/dashdot
本地部署
#克隆代码
git clone https://github.com/MauriceNino/dashdot
cd dashdot/
#构建
yarn
yarn build:prod
#启动
yarn start
实例体验
后记
本实例仅供参考,不定期重置数据。
开源实例之Ward
前言
Ward is a simple and minimalistic server monitoring tool. Ward supports adaptive design system. Also, it supports dark theme. It shows only principal information and can be used, if you want to see nice looking dashboard instead looking on bunch of numbers and graphs. Ward works nice on all popular operating systems, because it uses OSHI (Native Operating System and Hardware Information).
Ward是一款简约的服务器监控工具。它支持自适应设计系统,还支持暗色主题。它仅显示关键信息,如果您不想看到一堆数字和图表,而是想看到一个美观的仪表盘,那么它将是一个不错的选择。Ward能够在所有主流操作系统上良好运行,因为它使用了OSHI。
实例地址
实例配置
配置 | 描述 |
---|---|
系统 | Debian |
服务端 | Java 1.8 |
程序 | Ward 1.8.8 |
实例部署
权限要求
- 具有系统读写权限
- 已安装 Java
安装程序
仓库地址:https://github.com/Rudolf-Barbu/Ward
#克隆代码
git clone https://github.com/Rudolf-Barbu/Ward
cd Ward/
#编译
mvn clean package
#运行
java -jar ward-1.8.8.jar
默认运行在 4000 端口。
实例体验
后记
本实例仅供参考,不定期重置数据。
千年深埋功与名,一朝出土天下惊
互联网之下没有新鲜事
程序员失业回老家的这段日子
开源实例之Beszel
前言
Beszel 是一个轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能。
它拥有友好的 Web 界面、简单的配置,并且开箱即用。它支持自动备份、多用户、OAuth 身份验证和 API 访问。
实例地址
实例配置
配置 | 描述 |
---|---|
系统 | Debian |
主控程序 | beszel 0.11.1 |
被控程序 | beszel-agent 0.11.1 |
实例部署
官网地址:https://beszel.dev/zh/
仓库地址:https://github.com/henrygd/beszel
主控端部署
Docker 部署
docker run -d --restart=unless-stopped -p 8090:8090 henrygd/beszel
本地部署
从仓库中下载 release 包,解压后执行。
./beszel serve --http "0.0.0.0:8090"
被控端部署
登录主控端后台,点击右上角“添加新客户端”,复制命令到待监控服务器完成被控端部署。
实例体验
后记
本实例仅供参考,不定期重置数据。
角度
那些年,我偷偷喜欢的她
成都武侯祠
开源实例之哪吒监控
前言
开源、轻量、易用的服务器监控与运维工具
一键安装
支持一键安装面板和监控服务,操作便捷。兼容主流系统,包括 Linux、Windows、macOS、OpenWRT 以及群晖。
实时监控
支持同时监控多个服务器的状态,提供历史网络状态和延迟图表,监控网页、端口可用性和 SSL 证书状态。支持故障和流量等状态告警,可通过 Telegram、邮件、微信等多种方式提醒。
轻松运维
提供 API 获取服务器状态,支持WebSSH、DDNS 和流量监控。可设置定时和触发任务,并批量执行服务器任务。
实例地址
实例配置
配置 | 描述 |
---|---|
系统 | Debian |
服务器 | Nginx |
主控程序 | dashboard 1.12.4 |
被控程序 | nezha-agent 1.12.2 |
实例部署
权限要求
- 具有系统读写权限
- 已安装 Nginx
安装程序
官网地址:https://nezha.wiki
仓库地址:https://github.com/nezhahq/nezha
主控端部署
curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
按照提示执行安装。
被控端部署
登录后台,进入服务器选项,点击右侧“安装命令”,粘贴到待监控的服务器执行安装。
实例体验
后记
本实例仅供参考,不定期重置数据。
📍 一场说走就走的旅行 - 北京
碾转
阳新县百洞峡半日游
如何理解人生是旷野?
当我离职后,我越发的理解「人生是旷野」这句话的含义。
对于上班族来说,一个很大的好处是 —— 你的前进的轨道是明确的,也是我们常说的,「人生是轨道」。对于打工的人来说,你前进的轨道是相对更加明确且清晰的。你只需要遵循整个组织的晋升规则,努力往前跑,就有可能达到你的目标(或者是组织的目标)。

而当你离开了企业和组织,成为一个自由模式的人(或者是个体户模式),你的问题会出现在 —— 你的眼前会有很多条路,你不止有一条轨道,你可能有两条、三条,无数条轨道和可能性,唯一需要的便是你自己做出选择,去走哪条路(这也是绝大多数人觉得 —— 自由是旷野的好处,你有了无数种可能性)。
但,这种可能性也有一定的问题。作为一个自由人,你会看到无数种可能性,但同时 —— 绝大多数的可能性都是不明确的,都是虚线,你不知道到底哪个可能性能够真正走到终点,甚至有可能你看到的所有可能性都无法走到终点。你努力半生,可能归来仍是一场空。而这,可能是绝大多数人从未关注的旷野的另一面—— 虽然都是轨道,但可能每个的胜率都不是 100%,你如何找到那个胜率最大的选项,成为了新的问题。
众生牛马
拼多多16元折叠磁吸支架手机壳实测
产品说明
购买原因
为新买的iPhone 14配套购买此手机壳。
产品选择
手机壳带指环是我的刚需,但有个弊端是不能无线充。而这款手机壳同时满足指环、支架、磁吸充电,简直把我的期望拉满。
产品介绍
商品参数 | |
---|---|
品牌 | Nohon/诺希 |
保护套质地 | 液态硅胶 |
款式 | 全包式 |
流行元素 | 磁吸、支架、磨砂 |
风格 | 简约 |
购买价格
2025年5月13日购于拼多多。适配 iPhone 14,梅粉色,实付15.6元。
产品实测
包装
这种快递就没那么小心了,不过商品本身没有受损。
外观
包裹性
包裹严丝合缝,比一般的硅胶套要更用力地套进去。
支架
这个支架比想象的更薄,但是也比想象的更牢固。
无线充
满足了带壳无线充电。
指环
在某些掉落危险场景,指环给我极大安全感,所以我很看重。这款产品未言明,但是支架旋转、折叠很轻松,我觉得当指环用完全没问题。
后记
测试结果仅针对当前样本,不保证同款商品表现一致。
京东国补三千元 iPhone 14 实测
产品说明
购买原因
我爸手机坏了,我妈准备把她的 iPhone XR 给我爸,然后自己换个新手机。当然这个事情是我来办。
产品选择
我们都习惯用苹果手机,如果换安卓,爸妈在老家手机出问题,我就无法亲自验证,所以品牌只能选苹果。至于型号,我研究了一番,认为现在 iPhone 14 最具性价比。
接下来选择平台。我第一想法还是转转,因为我妈的 XR 就是转转买的,没问题。但这次在转转筛选了好几天,能够满足无维修记录,屏幕、电池未更换过的,价格也都在 2600 以上。而我发现京东国补之后,新机价格是 2999 元。没有过多犹豫,我决定在京东买新机。
产品展示
图中显示的是合约版价格,非合约版国补后价格是 2999 元。
购买价格
2025年5月13日购于Apple产品京东自营旗舰店。iPhone 14 128G 星光色,原价 3499 元,国补减 500 元,实付2999元。
产品实测
在京东购买电子产品最看重两方面,一是正品保证,二是物流超快。而只要确保 iPhone 是正品,就无需过多检查了,有问题找 Apple Store 兜底。
物流
发货地是上海,次日到达。因为国补的要求,签收时必须拆开包装,开机,拍照记录序列号。
正品
我不怀疑京东自营店,不过为了文章的严谨性我还是到苹果官网查询了,正品无疑。
包装
京东快递送货上门,包装完好,无磕碰。
配件只有一根数据线(不带充电头)和卡针。
外观
后记
测试结果仅针对当前样本,不保证同款商品表现一致。