2025-08 跑步日记

2025-08 运动次数: 18 运动距离: 141.09 km 运动时长: 14:49:13 平均距离: 7.84 km 平均心率: 144 bpm 平均配速: 6:18 / km 2025-08-01 时间: 2025-08-01 06:34:48 距离: 8.01 km 时长: 47:40 配速: 5:57 / km 心率: 153 bpm ...

八月 31, 2025 · 2 分钟 · 306 字 · Jogger ·  跑步

半拿铁《硅谷神话》太有意思啦

最近听了半拿铁 | 商业沉浮录《硅谷神话》内容专辑,总共18期,讲到惠普、英特尔、IBM、甲骨文、谷歌、苹果等,听完每一期都觉得既有意思又有收获。想到前段时间罗振宇老师在访谈节目大致是说,他在写每一期的文字稿的时候,需要考虑与大众了解不一样的角度来分享,让大家听完会觉得有深度。刘飞和潇磊两个分享的故事,能够从一大推公开的资料,找到我们没有关注的点👍。 听完在想硅谷为什么能够持续半个世纪后对全世界产生深刻的影响。硅谷,这片位于美国加州北部、旧金山湾区南部的狭长谷地,在短短几十年间从一片果园蜕变为全球科技创新的心脏。它的崛起并非偶然,而是技术、人才、资本和独特文化等多重因素交织共振的结果。其精神内核,则在于对创新近乎偏执的追求、对失败的高度容忍以及开放协作的生态。 硬件基础:天时地利与早期产业布局 硅谷的成功,首先得益于其独特的“硬件”基础。在地理上,宜人的气候吸引了大量人才的涌入和定居。而从历史发展来看,其前身是二战后美国海军的研发基地,为该地区奠定了早期的技术和人才基础。 斯坦福大学的“催化剂”作用 尤为关键。斯坦福大学教授弗雷德里克·特曼(Frederick Terman)被誉为“硅谷之父”,他鼓励师生创业,并将学校的土地租给高科技公司,开创了“大学-政府-产业”合作的模式。著名的惠普公司便是在特曼的鼓励下,由两名斯坦福学生在一间车库里创立的,这间车库至今仍被视为硅谷发展的起点。斯坦福大学及其周边名校,如加州大学伯克利分校,为硅谷源源不断地输送着顶尖的工程师和科学家。 半导体产业的奠基 则是硅谷得名“硅”的由来。以仙童半导体公司为代表的一批企业,不仅开创了半导体行业,更重要的是其“裂变”效应。从仙童公司出走的人才,在硅谷创办了英特尔、AMD等一系列举足轻重的公司,形成了“仙童系”企业群,奠定了硅谷在半导体领域的霸主地位。 软件驱动:风险投资与创新生态 如果说优越的硬件是硅谷发展的骨架,那么独特的“软件”——风险投资和创新文化——则是其蓬勃发展的血肉。 风险投资的燃料:硅谷拥有全球最活跃的风险投资体系。风险投资家们不仅提供资金,更带来专业的管理经验和广泛的社会关系,帮助初创企业快速成长。 这种模式极大地激发了创业热情,使得无数颠覆性的想法得以落地生根,并创造了惊人的财富神话。 创新与容错的文化:硅谷的核心精神在于鼓励创新和拥抱失败。在这里,人们推崇“快速失败,快速学习”,失败并不被视为耻辱,而是通往成功的必经之路。这种文化氛围极大地降低了创业的心理门槛,吸引了全球最富冒险精神的头脑。 精神内核:反叛、开放与协作 硅谷的精神内核是一种复杂而独特的混合体,可以概括为以下几个方面: 反叛与挑战权威:从诞生之初,硅谷就带有一种反主流的色彩。它挑战东海岸老牌企业的等级制度和保守文化,鼓励打破常规、挑战现状。这种精神在苹果公司的“1984”广告中得到了淋漓尽致的体现。 开放与多元:硅谷是一个移民聚集地,汇聚了来自世界各地的顶尖人才。不同的文化背景和思维方式在这里碰撞、融合,激发了源源不断的创新活力。这种开放性也体现在知识和信息的自由流动上,促进了跨公司、跨领域的合作。 协作与共享:尽管企业之间存在激烈的竞争,但硅谷也形成了独特的协作网络。工程师们在咖啡馆、行业会议上自由交流,分享想法和经验,共同推动着技术的进步。 对未来的极致追求:硅谷的创业者们往往不满足于解决眼前的问题,他们着眼于未来,致力于用技术改变世界。从个人电脑到互联网,再到人工智能,硅谷始终站在科技浪潮的最前沿,引领着人类社会的发展方向。 总而言之,硅谷的成功并非单一因素的产物,而是其独特的历史机遇、人才储备、资本支持和创新文化协同作用的结果。其挑战权威、拥抱失败、开放协作的精神内核,是其能够不断自我革新、持续引领全球科技潮流的根本原因。 附件整理了一下计算机发展的父亲们: 时间 姓名 国家 贡献 1703 戈特弗里德·莱布尼茨 法国 发明二进制, 《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》 1854 乔治·布尔 英国 布尔代数,发表《思维规律研究》 1860 赫尔曼·霍勒瑞斯 美国 打孔卡片制表机,也成为早起IBM的根基 1941 康拉德·楚泽 德国 世界上第一个有图灵完全性程控功能的图灵计算机和高级编程语言 1939 乔治·斯蒂比茨 美国 采用电磁继电器二进制电路进行运算的计算器 1939 霍华德·艾肯 美国 制造了自动顺序控制计算机(哈佛马克一号) 1939 约翰·文森特·阿塔纳索夫 美国 ABC计算机中引入的关键思想包括二进制数学以及布尔逻辑 1946 約翰·皮斯普·埃克特&约翰·莫奇利 美国 第一个通用电子数字计算机以及后来的EDVAC、BINAC 1945 冯·诺伊曼 美国 冯·诺伊曼结构,计算机史上著名的“101页报告” 1936 艾伦·图灵 英国 图灵机是一种能够模拟任何计算机算法的抽象计算模型,被认为是现代计算机的理论基础之一。 timeline title 计算机发展的父亲们 1703 : 戈特弗里德·莱布尼茨[法国], 发明二进制,《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》 1854 : 乔治·布尔[英国], 布尔代数,《思维规律研究》 1860 : 赫尔曼·霍勒瑞斯[美国], 打孔卡片制表机, 也是最早的IBM根基 1941 : 康拉德·楚泽[德国], 世界上第一个有图灵完全性程控功能的图灵计算机和高级编程语言 1939 : 乔治·斯蒂比茨[美国], 采用电磁继电器二进制电路进行运算的计算器 : 霍华德·艾肯[美国], 制造了自动顺序控制计算机(哈佛马克一号)大型计算机 : 约翰·文森特·阿塔纳索夫[美国], ABC计算机中引入的关键思想包括二进制数学以及布尔逻辑 1946 : 約翰·皮斯普·埃克特&约翰·莫奇利[美国], 第一个通用电子数字计算机以及后来的EDVAC、BINAC 1945 : 冯·诺伊曼[美国], 冯·诺伊曼结构,计算机史上著名的“101页报告” 1936 : 艾伦·图灵[英国], 图灵机是一种能够模拟任何计算机算法的抽象计算模型,被认为是现代计算机的理论基础之一

八月 16, 2025 · 1 分钟 · 111 字 · Byter ·  硅谷神话

2025-07 跑步日记

2025-07 运动次数: 14 运动距离: 101.70 km 运动时长: 10:34:16 平均距离: 7.26 km 平均心率: 145 bpm 平均配速: 6:14 / km 2025-07-02 时间: 2025-07-02 06:23:26 距离: 7.77 km 时长: 47:03 配速: 6:03 / km 心率: 144 bpm ...

七月 30, 2025 · 2 分钟 · 242 字 · Jogger ·  跑步

用脚步丈量世界:2025上半年12城跑步笔记

2025上半年结束,跑步距离定格在620公里,离年初制定的全年1500公里目标还有不小的差距。主要原因是3月小腿意外受伤,让我结结实实地休整了一个月才基本恢复。 不过,年初“多跑一些城市”的愿望倒是超额实现了。上半年,我的足迹已经遍布12个城市,超过去年全年的10个,也算是一份意料之外的惊喜。 保定(1月) 北京(2月) 鞍山(4月) 兰州(4月) 南京(4月) 乌鲁木齐(5月) 西宁市(5月) 成都(6月) 广州(6月) 呼和浩特(6月) 济南(6月) 泰安(6月) 每到一个新的城市,我都会习惯性地打开咕咚,寻找一条同城热门路线。跑步,已经成为我感知一座城市最直接的方式。以下便是我对这13座城市,仅限于个人视角的跑步路线感受。 1月 · 保定 1月的保定天寒地冻,在田野中奔跑,别有一番风味。1月底,路边的麦田已经吐出了嫩芽,小麦的地上部分会停止生长,但根系仍在悄悄吸收养分,为春季返青积蓄力量。这正像是跑者的冬训,是为新一年“打造”更强心肺功能的黄金期。 2月 · 北京 2月的北京春意渐浓,体感很舒服。清河两岸的道路一年四季都适合跑步。冬天的清河里,有越冬的候鸟在此停留。去年,一对黑天鹅在河边孵化宝宝,一度成为网红,引来不少周边群众打卡围观。如今,在清河之舟的展厅里,还能欣赏到摄影爱好者们为它们拍摄的嬉戏作品。 4月 · 鞍山 4月的鞍山感受热情,因为宾馆附近没有找到热门路线,就索性绕着宾馆跑了几圈。都说东北近年来人口外流,但亲身体验下来,这里少了些大城市的喧嚣,路面不拥挤,生活节奏很是惬意。而且这里的人们非常热情,东北菜也是名不虚传,嘎嘎香! 4月 · 兰州 4月的兰州依旧凉爽。每次到兰州,基本都会选择住在黄河附近,这样清晨一出门,就可以沿着黄河跑步打卡。跑的这段路,有一部分还是兰州马拉松的赛道。6月初兰马之后一周又去了一趟,跑步时想到有许多跑友为兰马拍摄vlog,跑起来也格外带劲。 4月 · 南京 4月的南京古都之行,南京的跑步圣地,非玄武湖莫属。一圈9.6公里,地处主城区,早上跑步的人非常多。沿途风景美不胜收,目不暇接。最近在网上刷了不少程鸣的vlog,那句“我又不会害你”的口头禅尤其洗脑,跑步的时候我还在想,会不会在这里与他偶遇呢。 5月 · 乌鲁木齐 5月的乌鲁木齐格外凉快,宾馆附近有个植物园,但看起来不大,就没进去跑,选择了路跑画圈。途中有些路段的人行道非常窄,汽车几乎是擦着身子开过,感觉有些危险。加上时差还没完全倒过来,跑得不够尽兴。下次有机会,一定得选个好地方跑个过瘾的长距离。 5月 · 西宁 5月的西宁避暑天堂,下着小雨的时候甚至还得穿件外套。西宁海拔2260米左右,记得去年刚到时还有些高原反应,呼吸略喘,连续几天都没睡好。但现在适应多了,头天晚上到,第二天早上就能开跑。高海拔的跑步感受和内地平原地区还是有明显区别,心率很容易飙高。不过这个季节的西宁,温度和湿度都恰到好处,跑起来非常美。回想3月份的拉伤,就是因为热身不充分,这次可不敢大意了。 6月 · 成都 6月的成都有点热辣。住的地方在金融城附近,早上上班族行色匆匆。于是,选了不远处一圈2公里多的锦城公园跑圈。公园虽然不大,但一路基本都有绿荫遮挡,成都的绿道跑起来,只能用“巴适得板”来形容。跑完步再吃顿成都的美食,更是“安逸喽”! 6月 · 广州 6月的广州潮湿闷热,一落地就感受到了扑面而来的热情。早上出来跑了不到5公里,短裤就已湿透。这条路线途经香雪公园、草莓园和黄埔图书馆,若是在天气凉爽的时候跑,体验感一定会非常棒。这次广州之行还有一个额外收获:解锁了地道的大排档体验,大电风扇呼呼地吹,菜用大盆装着,肉可以大口吃,江湖气十足! 6月 · 呼和浩特 6月的呼和浩特喜逢大雨,穿着短袖感觉还有点冷。好在天公作美,清晨时分短暂放晴,我赶紧出门开跑。在宾馆门口,还偶遇一位跑友询问去哪儿跑,他正准备绕着成吉思汗公园跑两圈。于是我便跟着进了成吉思汗公园。出公园时还有个小插曲:一位老大爷看见我,竟拿着一根会发出叮当声响的棍子追着我跑,吓得我立马大步流星地开溜。跑了一段距离后,看见前面另一位跑友时,才放慢了脚步,跟着前面的跑友继续跑了。 6月 · 济南 6月的济南热辣滚烫,当然是为了看“夏雨荷”。虽然宾馆距离大明湖有点远,济南的夏天也热,但这些都挡不住跑步的脚步。跑了3公里多到达大明湖,绕湖一圈,不虚此行,确实看到了湖中盛开的荷花,以及岸边大大的卡通形象“夏雨荷”。 ...

七月 5, 2025 · 1 分钟 · 65 字 · Byter ·  summary

2025-06 跑步日记

2025-06 运动次数: 24 运动距离: 206.50 km 运动时长: 21:41:06 平均距离: 8.60 km 平均心率: 147 bpm 平均配速: 6:18 / km 2025-06-01 时间: 2025-06-01 06:33:11 距离: 15.09 km 时长: 1:32:01 配速: 5:59 / km 心率: 146 bpm ...

六月 30, 2025 · 2 分钟 · 402 字 · Jogger ·  跑步

同步指定时间的Garmin运动记录到不同账号

最近带着小朋友在运动,小朋友看到运动记录都在我的Garmin Connect活动在一起,还有点不开心,希望有自己的账号,只有他自己的运动记录。于是就有了下面忙活的内容。 现在博客跑步的内容是通过yihong0618大佬的running_page实现跑步记录自动生成博文,详细可以看《跑步记录自动生成Markdown发布博文》。 大致思路就是如下: 申请一个新的Garmin Connect账号; python脚本实现:做一个fit文件的缓存;根据指定的时间找到对应的fit文件;上次fit文件到新注册的Garmin Connect账号; shell脚本实现:接收时间参数;获取Garmin Connect账号密钥;执行python脚本。 Garmin Connect账号注册 账号注册时需要注意,Garmin有国内账号和国际账号的区分,因此如果这方面需求的可以稍微注意一下。 国内账号地址:[[https://connect.garmin.cn/]] 国际账号地址:[[https://connectus.garmin.cn/]] python同步脚本 下面的脚本放在run_page工程下的run_page目录下: import argparse import asyncio import json import os from datetime import datetime import config from garmin_sync import Garmin from gpxtrackposter.track_loader import load_fit_file FIT_FOLDER = os.path.join(config.parent, "FIT_OUT") FIT_CACHE_FILE = os.path.join(config.parent, "fit_cache.json") def save_fit_cache_list(fit_cache_list): with open(FIT_CACHE_FILE, "w") as f: json.dump(fit_cache_list, f) def load_fit_cache_list(): if os.path.exists(FIT_CACHE_FILE): with open(FIT_CACHE_FILE, "r") as f: try: return json.load(f) except Exception as e: print(f"json load {FIT_CACHE_FILE} \nerror {e}") pass return {} def upload_files_to_garmin(options): print("Need to load all fit files maybe take some time") fit_cache_list = load_fit_cache_list() file_names = [] for file_name in os.listdir(FIT_FOLDER): if file_name.endswith('.fit') and file_name not in fit_cache_list: file_names.append(file_name) for file_name in file_names: track = load_fit_file(os.path.join(FIT_FOLDER, file_name)) if track.start_time_local: fit_cache_list[file_name] = datetime.strftime(track.start_time_local, "%Y-%m-%d:%H:%M:%S") save_fit_cache_list(fit_cache_list) to_upload_files = [] if options.dt is not None: dts = options.dt.split(",") for dt in dts: for file_name in fit_cache_list: if fit_cache_list[file_name].startswith(dt): to_upload_files.append(os.path.join(FIT_FOLDER, file_name)) break print("Uploading files to Garmin...") garmin_auth_domain = "CN" if options.is_cn else "" garmin_client = Garmin(options.secret_string, garmin_auth_domain) loop = asyncio.get_event_loop() future = asyncio.ensure_future( garmin_client.upload_activities_files(to_upload_files) ) loop.run_until_complete(future) if __name__ == "__main__": if not os.path.exists(FIT_FOLDER): os.mkdir(FIT_FOLDER) parser = argparse.ArgumentParser() parser.add_argument( "secret_string", nargs="?", help="secret_string fro get_garmin_secret.py" ) parser.add_argument( "--dt", dest="dt", help="if upload to strava all without check last time", ) parser.add_argument( "--is-cn", dest="is_cn", action="store_true", help="if garmin account is cn", ) upload_files_to_garmin(parser.parse_args()) 使用方式,如上传2025-06-22:20,2025-06-22:21两个时间相关的运动记录到新账号。 ...

六月 28, 2025 · 2 分钟 · 274 字 · Byter ·  Garmin

Python中ssl.SSLCertVerificationError处理

在做同步指定时间的Garmin运动记录到不同账号的时候碰到一个诡异的报错,因为重装了系统就出现问题,让我觉得系统出现什么问题。 在编写python脚本的时候,需要提前获取一下Garmin账号密钥,于是执行下面的命令。 python run_page/get_garmin_secret.py 账号 "密码" --is-cn 报错啦。。。 Traceback (most recent call last): File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 464, in _make_request self._validate_conn(conn) ~~~~~~~~~~~~~~~~~~~^^^^^^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 1093, in _validate_conn conn.connect() ~~~~~~~~~~~~^^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connection.py", line 790, in connect sock_and_verified = _ssl_wrap_socket_and_match_hostname( sock=sock, ...<14 lines>... assert_fingerprint=self.assert_fingerprint, ) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connection.py", line 969, in _ssl_wrap_socket_and_match_hostname ssl_sock = ssl_wrap_socket( sock=sock, ...<8 lines>... tls_in_tls=tls_in_tls, ) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/util/ssl_.py", line 480, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/util/ssl_.py", line 524, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/Cellar/[email protected]/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/ssl.py", line 455, in wrap_socket return self.sslsocket_class._create( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ sock=sock, ^^^^^^^^^^ ...<5 lines>... session=session ^^^^^^^^^^^^^^^ ) ^ File "/opt/homebrew/Cellar/[email protected]/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/ssl.py", line 1076, in _create self.do_handshake() ~~~~~~~~~~~~~~~~~^^ File "/opt/homebrew/Cellar/[email protected]/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/ssl.py", line 1372, in do_handshake self._sslobj.do_handshake() ~~~~~~~~~~~~~~~~~~~~~~~~~^^ ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 787, in urlopen response = self._make_request( conn, ...<10 lines>... **response_kw, ) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 488, in _make_request raise new_e urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/requests/adapters.py", line 667, in send resp = conn.urlopen( method=request.method, ...<9 lines>... chunked=chunked, ) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 871, in urlopen return self.urlopen( ~~~~~~~~~~~~^ method, ^^^^^^^ ...<13 lines>... **response_kw, ^^^^^^^^^^^^^^ ) ^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 871, in urlopen return self.urlopen( ~~~~~~~~~~~~^ method, ^^^^^^^ ...<13 lines>... **response_kw, ^^^^^^^^^^^^^^ ) ^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 871, in urlopen return self.urlopen( ~~~~~~~~~~~~^ method, ^^^^^^^ ...<13 lines>... **response_kw, ^^^^^^^^^^^^^^ ) ^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/connectionpool.py", line 841, in urlopen retries = retries.increment( method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2] ) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/urllib3/util/retry.py", line 519, in increment raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='sso.garmin.cn', port=443): Max retries exceeded with url: /sso/embed?id=gauth-widget&embedWidget=true&gauthHost=https%3A%2F%2Fsso.garmin.cn%2Fsso (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/xxx/PycharmProjects/workouts_page/run_page/get_garmin_secret.py", line 18, in <module> garth.login(options.email, options.password) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/garth/http.py", line 167, in login self.oauth1_token, self.oauth2_token = sso.login( ~~~~~~~~~^ *args, **kwargs, client=self ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/garth/sso.py", line 92, in login client.get("sso", "/sso/embed", params=SSO_EMBED_PARAMS) ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/garth/http.py", line 155, in get return self.request("GET", *args, **kwargs) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/garth/http.py", line 138, in request self.last_resp = self.sess.request( ~~~~~~~~~~~~~~~~~^ method, ^^^^^^^ ...<3 lines>... **kwargs, ^^^^^^^^^ ) ^ File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "/Users/xxx/PycharmProjects/workouts_page/venv313/lib/python3.13/site-packages/requests/adapters.py", line 698, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='sso.garmin.cn', port=443): Max retries exceeded with url: /sso/embed?id=gauth-widget&embedWidget=true&gauthHost=https%3A%2F%2Fsso.garmin.cn%2Fsso (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))) 问题扔给GPT,看看解决方法。 ...

六月 28, 2025 · 7 分钟 · 1394 字 · Byter ·  Python

2025-05 跑步日记

2025-05 运动次数: 14 运动距离: 150.43 km 运动时长: 15:22:32 平均距离: 10.75 km 平均心率: 149 bpm 平均配速: 6:07 / km 2025-05-02 时间: 2025-05-02 06:40:34 距离: 5.20 km 时长: 32:16 配速: 6:12 / km 心率: 136 bpm ...

五月 30, 2025 · 2 分钟 · 242 字 · Jogger ·  跑步

如果人生是一场强化学习,我们的奖励函数是什么?

如果人生是一场强化学习 早上跑步听枫言枫语142期《橘子:ListenHub听见好奇心》,嘉宾Orange提到“如果人生是一场强化学习,你的奖励函数是什么?”。想象一下,我们每个人都是一个复杂的、不断学习的智能体。我们生活在一个庞大而动态的环境中,每天都在做出无数的决策和行动。这些行动会带来不同的结果——有时是愉悦、满足,有时是痛苦、遗憾。我们从这些结果中学习,调整自己的行为策略,以便在未来获得更多“好”的结果,避免“坏”的结果。 这听起来是不是很像人工智能领域的一个重要分支——强化学习? 在强化学习中,一个智能体的目标是通过与环境的交互,学习一个最优策略,以最大化其获得的累积奖励。这个奖励信号由一个预先设定的“奖励函数”来定义。智能体并不知道最优策略是什么,它只能通过“试错”和从环境反馈中学习。 如果我们将这个框架套用在人生上,会发现惊人的相似之处: 智能体 (Agent): 就是我们自己——每个人。 环境 (Environment): 我们所处的社会、家庭、工作、自然界,以及我们自身的生理和心理状态。 状态 (State): 我们在特定时刻的处境、知识、感受、拥有的资源等等。 行动 (Actions): 我们做出的选择、说出的话、采取的行动,大到职业规划、婚姻选择,小到今天午饭吃什么、对同事微笑还是板脸。 策略 (Policy): 我们基于经验和认知形成的决策模式、习惯、价值观,它指导我们在特定状态下采取何种行动。 奖励/惩罚 (Reward/Penalty): 行动带来的即时或长远的结果,可能是积极的(奖励)或消极的(惩罚)。 那么,问题来了:如果人生是一个强化学习过程,我们的奖励函数到底是什么? 是什么在驱动我们的学习和行为?是什么构成了我们追求的“奖励”? 这不像训练一个玩游戏的AI那样简单,游戏规则和得分机制是明确的。人生的奖励函数是隐晦的、多样的、甚至是个体化的。以下是一些可能的构成要素: 生存与繁衍的本能奖励: 这是最底层的激励。食物、安全、舒适、性的满足感,这些是生物进化刻在我们基因里的奖励信号,确保个体和物种的延续。饥饿得到满足是奖励,受到伤害是惩罚。 快乐与痛苦的感知: 我们的神经系统对快乐(如愉悦、欣喜、成就感)和痛苦(如疼痛、悲伤、恐惧)有直接的感知。追求快乐、逃避痛苦构成了重要的激励来源。但这往往是即时且主观的。 社会认可与连接: 作为社会性动物,来自他人的认可、赞美、爱、归属感是强大的奖励。被孤立、批评、排斥则是惩罚。这驱动我们去适应社会规范,建立人际关系。 成就与掌控感: 完成一个目标、掌握一项技能、解决一个难题、获得权力或财富,这些都能带来成就感和掌控感,是重要的内在或外在奖励。 意义与价值的追求: 当基本的生存和社交需求得到满足后,许多人开始追求超越个体的小我,为更大的事业、理想或他人做出贡献。这种“意义感”和“价值感”是更高级的奖励,它可能要求我们放弃即时快乐,甚至承受痛苦。 好奇心与成长: 探索未知、学习新事物、实现自我提升,这些过程本身就能带来满足感。对许多人来说,持续的成长和学习是重要的内在激励。 动态变化的奖励函数:人生不同阶段的追求 如果说人生是一个强化学习过程,那么随着我们进入不同的人生阶段,我们的“奖励函数”确实也在发生变化。我们所追求的目标和理想不同了,意味着对不同结果的“奖励”权重也随之调整。 这就像一个智能体在完成一系列连续的任务,每个任务都有其特定的奖励机制。在人生的不同阶段,我们面临的“任务”和环境挑战不同,自然驱动我们去寻求不同的奖励: 童年和青少年时期: 这个阶段的奖励函数可能更侧重于即时满足、来自父母和老师的认可、探索世界带来的好奇心奖励。学习新技能(如走路、说话、骑自行车)本身就是一种奖励,因为能带来掌控感和自由。惩罚可能更多是生理上的不适或直接的批评。 青年时期: 奖励函数开始向来自同伴的认可、成就感(学业、事业的初步成功)、建立亲密关系以及经济独立倾斜。对未来的憧憬和理想也成为重要的激励来源,即使实现过程充满挑战。 成年及中年时期: 奖励函数可能变得更加复杂和多元。事业上的进一步发展(成就)、家庭的稳定与幸福、子女的成长、对社会或行业的贡献成为核心奖励。健康的重要性凸显,对风险的规避(减少惩罚)也变得更重要。 老年时期: 奖励函数可能再次发生转变。健康与舒适、与家人朋友的联系、回顾人生所获、为后代留下遗产或经验可能成为主要的追求。对物质和外部认可的权重可能下降,而内心的宁静和满足感变得更加珍贵。 为什么奖励函数会变化? 这种变化并非随机,而是由多种因素驱动: 生理和心理发展: 随着年龄增长,我们的生理需求、认知能力和情感状态都在变化。 社会角色和责任: 从学生到职员、从单身到为人父母、从工作到退休,社会角色的转变带来了新的责任和期望,这些都影响我们认为“有价值”的事物。 经验的积累: 过去的成功和失败经历会重塑我们对不同结果的预期,从而调整我们对这些结果的“奖励”或“惩罚”评估。 价值观的演变: 随着阅历的增加,我们对人生、幸福、成功的理解可能发生变化,这直接影响我们对内在和外在奖励的优先级排序。 这种奖励函数的动态性,解释了为什么我们在不同年龄会有不同的烦恼和追求,为什么年轻时愿意冒险追求梦想,年长后更倾向于稳定和安逸。它也意味着,人生这个强化学习过程,不仅是学习如何在固定的奖励机制下优化行为,更是学习如何适应甚至主动调整那个不断变化的奖励机制。 人生的奖励函数之所以难以捉摸,在于它往往不是单一的,而是以上各种因素的复杂组合。更重要的是: 奖励信号可能延迟: 很多有价值的奖励(如长期的健康、深厚的感情、事业的成功)需要长期的努力和延迟满足,而短期的行动可能带来即时但有害的奖励(如沉迷游戏、暴饮暴食)。 奖励之间可能冲突: 追求事业上的巨大成功可能意味着牺牲与家人相处的时间;坚持原则可能意味着失去社会认可或物质利益。 奖励函数是动态变化的: 年轻时可能更看重物质和认可,年长后可能更追求健康和内心的平静。人生的不同阶段,我们对奖励的权重会发生变化。 奖励函数是主观且隐性的: 我们可能自己都意识不到真正驱动我们的是什么。有时我们以为自己在追求A,但潜意识里真正想要的是B。 理解奖励函数的重要性 将人生视为一个强化学习过程,并反思自己的奖励函数,具有深刻的意义: ...

五月 24, 2025 · 1 分钟 · 83 字 · Byter ·  随想

2025-04 跑步日记

2025-04 运动次数: 13 运动距离: 106.74 km 运动时长: 10:56:01 平均距离: 8.21 km 平均心率: 154 bpm 平均配速: 6:08 / km 2025-04-08 时间: 2025-04-08 06:56:29 距离: 5.20 km 时长: 31:42 配速: 6:05 / km 心率: 154 bpm ...

四月 30, 2025 · 2 分钟 · 226 字 · Jogger ·  跑步