From 874f4e56204ef02e918afd24d6da039eae5212df Mon Sep 17 00:00:00 2001 From: cory Date: Tue, 28 Jul 2026 15:38:56 +0800 Subject: [PATCH 1/5] data(calendar): update README for 2026-07-28 --- 活动日历/README.md | 68 +----------------------------------------- 1 file changed, 1 insertion(+), 67 deletions(-) diff --git a/活动日历/README.md b/活动日历/README.md index 9284d03..c2f175c 100644 --- a/活动日历/README.md +++ b/活动日历/README.md @@ -1,67 +1 @@ -# AI Infra 活动日历 - -面向 AI Infra 从业者的活动信息汇总,持续整理国内线下、线上以及相关技术社区活动。 - -数据来源于[飞书活动日历](https://lcnj2mkxwom9.feishu.cn/wiki/PmSOwWMbNi2CzXkdpfNchHzFnif?from=from_copylink),每周更新一次。仓库保留历史周快照,方便查看活动信息的变化。 - -## 本周活动(2026-07-21) - - -| 活动名称 | 时间 | 城市 | 地点 | 主办方 | 费用 | 报名链接 | AI Infra | 热门 | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | -| AI Native Shanghai Meetup 202607 | 2026-07-23 13:00-18:00 | 上海 | 上海市盛邦国际大厦19楼 | AAIF / CNCF Ambassador | 免费 | [报名](https://luma.com/qv41gtyx) | 是 | 是 | -| Agentic AI Summit 超级智能体系统架构峰会 | 2026-07-24 09:00 至 2026-07-25 18:00 | 深圳 | 深圳机场凯悦酒店 | DataFun / SegmentFault | 付费 | [报名](https://segmentfault.com/e/1160000047774415) | 是 | 否 | -| CCF第171期:生产力变革的智能体前沿技术 | 2026-07-24 09:00 至 2026-07-26 16:00 | 北京 | 中国科学院计算技术研究所一层报告厅 | 中国计算机学会 | 付费 | [报名](https://lianpu.com/event/di-171-qi-sheng-chan-li-bian-ge-de-zhi-neng-ti-qian-yan-ji-s) | 是 | 是 | -| CCF TF技术前线第182期:Agent Harness专场 | 2026-07-25 14:00-17:00 | 北京 | 北京融科资讯中心B座B2会议中心AB培训室 | 中国计算机学会 | 免费 | [报名](https://www.ccf.org.cn/Activities/Training/TF/TF/2026-07-15/915157.shtml) | 是 | 是 | -| openEuler SIG Yuanrong Meetup 杭州站 | 2026-07-25 14:00-17:30 | 杭州 | 杭州市万斯酒店三楼多功能宴会厅(余杭区未来星宸6幢) | OpenAtom openEuler / SIG Yuanrong | 免费 | [报名](https://www.openeuler.org/zh/news/20260708-SIG%20Yuanrong%20Meetup/20260708-SIG%20Yuanrong%20Meetup.html) | 是 | 否 | -| 2026 Elastic Meetup 深圳站 | 2026-07-26 13:30-18:00 | 深圳 | 深圳(报名页公布具体会场) | Elastic / 腾讯 / 新智锦绣 | 免费 | [报名](https://sz.huodongxing.com/event/7862628637800?utm_source=%e5%8f%91%e7%8e%b0%e6%b4%bb%e5%8a%a8%e9%a1%b5&utm_medium=&utm_campaign=eventspage&qd=8828363103856) | 是 | 否 | -| AI&儿童领域创业者 Meetup | 2026-07-21 14:00-17:00 | 上海 | 上海市杨浦区长阳路1687号长阳创谷2号楼6层·启迪之星星火厅 | 山途创客 / 启迪之星 / 水獭星球 / AI Nova | 免费 | [报名](https://lianpu.com/event/ai-er-tong-ling-yu-chuang-ye-zhe-meetup) | 否 | 否 | -| AI创新企业路演及对接日 | 2026-07-23(具体时间以审核通知为准) | 上海 | 上海(闭门邀请制,审核后通知) | 活动主办方 / 普华永道相关产业生态 | 免费 | [报名](https://www.jfdaily.com/sgh/detail?id=4018146) | 否 | 否 | -| 复旦MPAcc专题论坛:AI时代的企业价值重生 | 2026-07-25 09:00-12:00 | 上海 | 复旦管院政立院区A楼报告厅(政立路558号) | 复旦大学管理学院 | 免费 | [报名](https://lianpu.com/event/fu-dan-mpacc-zhuan-ti-lun-tan-ai-shi-dai-de-qi-ye-jia-zhi-ch) | 否 | 否 | -| Compound「未来人 Day 0」Shanghai Vol.1 | 2026-07-25 10:30-13:30(09:00起可预约检测/工作坊) | 上海 | 上海静安区威海路太阳公寓 | Compound Life | 付费 | [报名](https://luma.com/runqsa47) | 否 | 否 | -| 企业AI落地·闭门交流沙龙 | 2026-07-25 14:00-16:30 | 上海 | 上海市浦东新区中科路1750号 | 非凡精英 | 免费 | [报名](https://lianpu.com/event/qi-ye-ai-luo-di-bi-men-jiao-liu-sha-long) | 否 | 否 | -| 海归创业者开放麦:从0到上线App Store | 2026-07-26 14:00-17:00 | 上海 | 上海市静安区江宁路631号U-CUBE静安4F大会议室 | OPC上海·U-CUBE一人公司创业圈 / 启思派 | 免费 | [报名](https://lianpu.com/event/hai-gui-chuang-ye-zhe-kai-fang-mai-cong-0-dao-shang-xian-app) | 否 | 否 | -| 2026第十一届金蝶AI会计节 | 2026-07-22 12:00-17:00 | 北京 | 北京西国贸大酒店·国贸一厅(丰台区丰管路16号院8号楼) | 金蝶AI星辰 | 免费 | [报名](https://lianpu.com/event/2026-di-shi-yi-jie-jin-die-ai-kuai-ji-jie) | 否 | 否 | -| AI直播与AI生成短视频干货分享沙龙 | 2026-07-23 14:00-16:00 | 北京 | 北京市西城区汇联大厦B座707 | AI前沿学院 | 免费 | [报名](https://lianpu.com/event/ai-zhi-bo-yu-ai-sheng-cheng-duan-shi-pin-gan-huo-fen-xiang-s) | 否 | 否 | -| 2026从出海到全球领先:AI品牌全球化增长 | 2026-07-24 14:00-17:00 | 北京 | 北京市海淀区科学院南路2号融科资讯中心B座Google办公室8F Universe | 知外文化 / Google / Linkloud | 免费 | [报名](https://lianpu.com/event/2026-cong-chu-hai-dao-quan-qiu-ling-xian-ai-pin-pai-quan-qiu) | 否 | 否 | -| HORIZON STARTUP 2026北京站AI黑客松 | 2026-07-24 至 2026-07-26 | 北京 | 北京中关村软件园博彦科技 | Horizon Startup | 免费 | [报名](https://lianpu.com/event/horizon-startup-2026-bei-jing-zhan-ai-hei-ke-song) | 否 | 是 | -| 2026 OSC源创会北京站:AI Coding应用分享沙龙 | 2026-07-25 13:30-17:00 | 北京 | 北京市海淀区静淑苑路全球创新社区一层 | 开源中国 | 免费 | [报名](https://lianpu.com/event/2026-osc-yuan-chuang-hui-bei-jing-zhan-ai-coding-ying-yong-f) | 否 | 是 | -| AI应用:叙事新周期,FDE重新定义AI应用边界 | 2026-07-25 14:00-17:30 | 北京 | 北京(报名后公布具体地址) | 后浪New | 免费 | [报名](https://lianpu.com/event/ai-ying-yong-xu-shi-xin-zhou-qi-fde-chong-xin-ding-yi-ai-yin) | 否 | 否 | -| 火星之夜 Vol.25 @ ITEC 2026 | 2026-07-25 18:30-21:30 | 北京 | 北京国家速滑馆(审核后通知详细入场信息) | 火星加速器 / 北奥集团 | 免费 | [报名](https://lianpu.com/event/huo-xing-zhi-ye-vol25-itec-2026) | 否 | 是 | -| AI出海,实战增长:DataStory × Google Ads专享会 | 2026-07-21 13:30-18:00 | 深圳 | 深圳(审核通过后短信通知地址) | 数说故事 / Google Ads | 免费 | [报名](https://lianpu.com/event/ai-chu-hai-shi-zhan-zeng-zhang-datastory-google-ads-zhuan-xi) | 否 | 否 | -| Agent Go:Shenzhen|AI Agent应用交流会 | 2026-07-21 14:00 | 深圳 | 广东深圳(活动行报名页公布具体地点) | ME Group | 免费 | [报名](https://sz.huodongxing.com/events?city=%E6%B7%B1%E5%9C%B3&tag=AI) | 否 | 否 | -| AIZQE 2026全球AI硬件与AIoT终端创新千人峰会 | 2026-07-23 09:00-18:00 | 深圳 | 深圳市登喜路国际大酒店 | AIZQ知穹传媒 / AI硬件圈 | 免费 | [报名](https://lianpu.com/event/aizqe-2026-quan-qiu-ai-ying-jian-yu-aiot-zhong-duan-chuang-x) | 是 | 是 | -| 重构工作流:FDE如何填平AI的最后一公里 | 2026-07-23 20:00-22:00 | 深圳 | 深圳市前海华海金融创新中心A塔37楼 | HFCC华海金融创新中心 | 付费 | [报名](https://lianpu.com/event/zhong-gou-gong-zuo-liu-fde-ru-he-tian-ping-ai-de-zui-hou-yi) | 否 | 否 | -| 嗨创AI创业行动:WorkBuddy一人公司实战专场 | 2026-07-25 13:30-18:00 | 深圳 | 深圳荣超国际商会中心 | 嗨创青年社区 | 免费 | [报名](https://lianpu.com/event/hei-chuang-ai-chuang-ye-xing-dong-workbuddy-yi-ren-gong-si-s) | 否 | 否 | -| AI × Web3技术开发者交流会 | 2026-07-26(具体时间以报名通知为准) | 深圳 | 深圳(报名后获取详细地址) | Web3Farm | 免费 | [报名](https://lianpu.com/event/aixweb-3-ji-shu-kai-fa-zhe-jiao-liu-hui) | 否 | 否 | -| AdventureX 2026信仰之跃黑客松 | 2026-07-22 至 2026-07-26 | 杭州 | 杭州未来科技城学术交流中心 | AdventureX / 亚马逊 | 免费 | [报名](https://lianpu.com/event/adventurex-2026-xin-yang-zhi-yue-hei-ke-song) | 否 | 是 | -| 敞开创造者日:百万AI博主的干货分享 | 2026-07-23 20:00-23:59 | 杭州 | 杭州拱墅区乐堤港B区敞开酒馆 | OFFENBAR敞开酒馆 | 免费 | [报名](https://lianpu.com/event/linkloud-scalex2026-he-ai-builders-zai-hang-zhou-scale-wild) | 否 | 否 | -| 世界上最短的OPC黑客松:黑客冲 | 2026-07-25 13:00-18:00 | 杭州 | 杭州拱墅区DN杭州杭创营OPC社区 | amber.ac / DN杭州杭创营 / KeyMap | 免费 | [报名](https://lianpu.com/event/shi-jie-shang-zui-duan-de-opc-hei-ke-song-quan-guo-shou-chua) | 否 | 是 | -| 联谱 Demo Day Vol.3 | 2026-07-25 14:00-17:30 | 杭州 | 杭州市西湖区恩之庐 | 联谱 Lianpu | 付费 | [报名](https://lianpu.com/event/lian-pu-demo-day-vol3) | 否 | 否 | -| AI中国行:制造业AI场景应用生态大会(东莞站) | 2026-07-25 13:00-17:50 | 东莞 | 广东省东莞市松山湖新城路9号中大365 3栋5楼 | 一线数智 | 付费 | [报名](https://cd.huodongxing.com/event/5866807507111?qd=8641735297249) | 否 | 是 | -| 2026中国人工智能技术峰会 | 2026-07-24(直播时间以官网通知为准) | 线上 | 线上直播 | ITPUB / 中国人工智能技术峰会组委会 | 免费 | [报名](https://aitc.itpub.net/) | 否 | 是 | -| AI时代,如何成为超级个体?OPC同行社 Coffee Chat长沙站 | 2026-07-25 14:30 | 长沙 | 长沙市(报名后公布具体地址) | OPC同行社 | 免费 | [报名](https://www.huodongxing.com/event/8869538842700?utm_source=%e5%8f%91%e7%8e%b0%e6%b4%bb%e5%8a%a8%e9%a1%b5&utm_medium=&utm_campaign=eventspage&qd=8828363103856) | 否 | 否 | -| 云涛智汇·2026制造业信息化创新大会重庆站 | 2026-07-24 | 重庆 | 中国·重庆(主办方通知具体会场) | 云涛智汇 | 免费 | [报名](https://mp.weixin.qq.com/s/sCwnI75hV7orhs0_NLVqow) | 否 | 否 | -| QuantUP 2026 人工智能与量化投资全球生态峰会 | 2026-07-25(全天,具体入场时间以官方通知为准) | 上海 | 上海中心(1F、2F、5F) | BigQuant / QuantUP | 免费 | [报名](https://bigquant.com/quantup/2026/shanghai) | 是 | 否 | -| PostgreSQL & IvorySQL 技术交流 Meetup·南京站 | 2026-07-25 13:00-17:30 | 南京 | 南京市雨花台区数字大道518号网新数智中心南塔一楼紫金港厅 | IvorySQL 社区 / PG 分会 / TechTalk 社区 | 免费 | [报名](https://www.cnblogs.com/ivorysql/p/21394304) | 是 | 否 | -| WRC 2026 世界机器人大会 | 2026-08-19 至 2026-08-23(展览预计09:00-18:00) | 北京 | 北京市经济技术开发区北人亦创国际会展中心 | 中国电子学会(工业和信息化部、北京市人民政府、中国科协支持) | 免费 | [报名](https://www.worldrobotconference.com/) | 否 | 是 | - - -完整的本周数据见 [`data/2026-07-21.csv`](data/2026-07-21.csv)。 - -## 历史数据 - -历史周快照和长期活动数据统一放在 [`data/`](data/) 目录中: - -- `2026-07-21.csv`、`2026-07-14.csv` 等:按周保存的不可变快照 -- `long-term.csv`:跨周或长期有效的活动 - -## 更新方式 - -```bash -python3 活动日历/sync_from_feishu.py -``` - -运行前确保本机 `lark-cli` 已完成飞书用户授权。更新后检查 CSV diff,再提交一个类似 `data(calendar): update 2026-07-28` 的 commit。 - -进入新的一周时,在脚本的 `TABLES` 中增加新周表,并将 `CURRENT_WEEK` 改为新周日期;脚本会同步 CSV 并自动刷新本节 README 表格。 +IyBBSSBJbmZyYSDmtLvliqjml6XljoYKCumdouWQkSBBSSBJbmZyYSDku47kuJrogIXnmoTmtLvliqjkv6Hmga/msYfmgLvvvIzmjIHnu63mlbTnkIblm73lhoXnur/kuIvjgIHnur/kuIrku6Xlj4rnm7jlhbPmioDmnK/npL7ljLrmtLvliqjjgIIKCuaVsOaNruadpea6kOS6jlvpo57kuabmtLvliqjml6XljoZdKGh0dHBzOi8vbGNuajJta3h3b205LmZlaXNodS5jbi93aWtpL1BtU093V01iTmkyQ3pYa2RwZk5jaEh6Rm5pZj9mcm9tPWZyb21fY29weWxpbmsp77yM5q+P5ZGo5pu05paw5LiA5qyh44CC5LuT5bqT5L+d55WZ5Y6G5Y+y5ZGo5b+r54Wn77yM5pa55L6/5p+l55yL5rS75Yqo5L+h5oGv55qE5Y+Y5YyW44CCCgojIyDmnKzlkajmtLvliqjvvIgyMDI2LTA3LTI477yJCgo8IS0tIENVUlJFTlRfV0VFS19UQUJMRTpTVEFSVCAtLT4KfCDmtLvliqjlkI3np7AgfCDml7bpl7QgfCDln47luIIgfCDlnLDngrkgfCDkuLvlip7mlrkgfCDotLnnlKggfCDmiqXlkI3pk77mjqUgfCBBSSBJbmZyYSB8IOeDremXqCB8CnwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwKfCAyMDI25Y+v5L+h5LqR5aSn5Lya5pqo6aaW5bGKVG9rZW7kupHmnI3liqHlpKfkvJogfCAyMDI2LTA3LTI4IDA5OjAwIC0gMjAyNi0wNy0yOSAxODowMCB8IOWMl+S6rCB8IOWMl+S6rOS4reWFs+adkeWbveWutuiHquS4u+WIm+aWsOekuuiMg+WMuuS8muiuruS4reW/gyB8IOS4reWbvemAmuS/oeagh+WHhuWMluWNj+S8muetiSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC85ODY3NTMzNTQwMDAwKSB8IOaYryB8IOaYryB8CnwgRkFJUiBwbHVzIMOXIOWbveWFiCBEZW1vIEh1YiDnrKzlhavmnJ8gfCAyMDI2LTA3LTI4IDE0OjAwIC0gMTc6MzAgfCDmt7HlnLMgfCDmt7HlnLPnpo/nlLDmsrPlpZfvvIjmiqXlkI3lkI7ojrflj5bor6bnu4blnLDlnYDvvIkgfCDmt7HlnLPluILmnLrlmajkurrljY/kvJrjgIHlm73pmYXlhYjov5vmioDmnK/lupTnlKjmjqjov5vkuK3lv4PvvIjmt7HlnLPvvIkgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vdG9waWNzL3NoZW56aGVuLWFpKSB8IOWQpiB8IOWQpiB8CnwgMjAyNuWFt+i6q+aZuuiDvTUw5Lq66K665Z2b5aSP5a2j5bOw5LyaIHwgMjAyNi0wNy0yOSAwOTowMCAtIDIwMjYtMDctMzAgMTg6MDAgfCDljJfkuqwgfCDljJfkuqzmnJ3pmLPljLrvvIjlrqHmoLjlkI7nn63kv6HpgJrnn6XvvIkgfCDlhbfouqvkuYvlrrbjgIHmipXotYTlrrbnvZEgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvMjAyNi1qdS1zaGVuLXpoaS1uZW5nLTUwLXJlbi1sdW4tdGFuLXhpYS1qaS1mZW5nLWh1aSkgfCDlkKYgfCDlkKYgfAp8IDIwMjbnrKzkupTlsYrkuK3lm73msrnmsJTkurrlt6Xmmbrog73np5HmioDlpKfkvJogfCAyMDI2LTA3LTMwIC0gMjAyNi0wOC0wMSB8IOWMl+S6rCB8IOWMl+S6rOaYjOW5syB8IOS4reWbveefs+ayueWkp+Wtpu+8iOWMl+S6rO+8ieetiSB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lm9pbGdhc2FpLmNvbS8pIHwg5ZCmIHwg5ZCmIHwKfCBUaUQyMDI26LSo6YeP56ue5LqJ5Yqb5aSn5Lya77yaQUnljp/nlJ/ml7bku6PnmoTotKjph4/mlrDojIPlvI8gfCAyMDI2LTA3LTMwIDEwOjAwIC0gMjAyNi0wOC0wMSAxNzoxNSB8IOWMl+S6rCB8IOWMl+S6rCB8IOS4reWFs+adkeaZuuiBlOi9r+S7tuacjeWKoeS4mui0qOmHj+WIm+aWsOiBlOebnyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vaXRrbm93bGVkZ2V6b25lLmNvbS9jbi9ldmVudC90aWQyMDI2LykgfCDmmK8gfCDmmK8gfAp8IDIwMjbkurrlt6Xmmbrog73kuqflk4HlupTnlKjljZrop4jkvJrvvIgyMDI25pm65Y2a5Lya77yJIHwgMjAyNi0wNy0zMCAtIDIwMjYtMDgtMDEgfCDoi4/lt54gfCDoi4/lt57lm73pmYXljZrop4jkuK3lv4MgfCAyMDI25pm65Y2a5Lya57uE5aeU5LyaIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cuc2lwYWMuZ292LmNuL3N6Z3l5cS8yMDI2MDd6YmgvMjAyNjA3emJoLnNodG1sKSB8IOWQpiB8IOWQpiB8Cnwg5Lq65bel5pm66IO95Yib5paw5Li76aKY5rKZ6b6Z772c5pm65L2T5YWx55Sf77yM5Yib5paw6amx5YqoQUnkuqfkuJrljJYgfCAyMDI2LTA3LTMxIDEzOjAwIC0gMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfmtabkuJzlvKDmsZ/mqKHlipvnpL7ljLpUMeaooeWKm+a6kDXlsYI1MTLkvJrorq7lrqQgfCDliqjngrnnp5HmioAgVGVjaE5vZGUgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvcmVuLWdvbmctemhpLW5lbmctY2h1YW5nLXhpbi16aHUtdGktc2hhLWxvbmcpIHwg5ZCmIHwg5ZCmIHwKfCDigJzkurrlt6Xmmbrog70r4oCd5a6e5oiY5bqU55So5LiO5Lqn5Lia5Yib5paw6K665Z2b5pqo56ys5Y2B5Zub5bGK5Yib5paw5Yib5Lia5b2x5ZON5Yqb5bOw5Lya5Y2X5Lqs5Lya6K6uIHwgMjAyNi0wNy0zMSB8IOWNl+S6rCB8IOWNl+S6rOS4luiMgua7qOaxn+W4jOWwlOmhv+mFkuW6lyB8IOesrOWNgeWbm+WxiuWIm+aWsOWIm+S4muW9seWTjeWKm+WzsOS8mue7hOWnlOS8miB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8veGlvdXdhbmcuY24vY2llcy8pIHwg5ZCmIHwg5ZCmIHwKfCBWaWJlIENvZGluZ+S6p+WTgeWFseWIm+Wunui3te+9nE9QQ+WQjOihjOekvuWFqOWbveihjMK35p2t5bee56uZIHwgMjAyNi0wOC0wMSB8IOadreW3niB8IOadreW3niB8IE9QQ+WQjOihjOekviB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC8xODcwMDQxNjY3NDAwKSB8IOWQpiB8IOWQpiB8Cnwg56uv5L6n6YeN5p6Ewrflhbfouqvml6DnlYzigJTigJTnq6/kvqflhbfouqvmmbrog73mioDmnK/mspnpvpkgfCAyMDI2LTA4LTAxIDEzOjIwIC0gMTc6MzAgfCDmt7HlnLMgfCDmt7HlnLPlrp3lronljLrmlrDlronooZfpgZPlhbTmtbfkuIDot68xOeWPt+WJjea1t0hPUOWbvemZhTE5MDHlrqQgfCDkuprku7/mmbrog73np5HmioAgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvZHVhbi1jZS16aG9uZy1nb3UtanUtc2hlbi13dS1qaWUtZHVhbi1jZS1qdS1zaGVuLXpoaS1uZW5nLWppKSB8IOaYryB8IOaYryB8CnwgQUnnnJ/og73luK7kvaDosIPpgJrlvIDlj5Hmnb/lkJfvvJ8gfCAyMDI2LTA4LTAxIDE1OjAwIC0gMjAyNi0wOC0wMiAxNzowMCB8IOS4iua1tyB8IOS4iua1t+WMl+S4reeOr+S4reW/gzHmoIsyM+alvCB8IOmAoOeJqea9reOAgVByb2JlcyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9haS16aGVuLW5lbmctYmFuZy1uaS10aWFvLXRvbmcta2FpLWZhLWJhbi1tYSkgfCDmmK8gfCDlkKYgfAp8IOesrOS6jOWxik5WSURJQSBER1ggU3Bhcmvpu5HlrqLmnb7mgLvlhrPotZsgfCAyMDI2LTA4LTAyIDEzOjMwIC0gMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfmnb7msZ/np5HmioDlvbHpg71BSeWIm+WItueUn+aAgeS4reW/g+Wkp+WOhSB8IOmYtui3g+aYn+i+sOOAgU5WSURJQSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9kaS1lci1qaWUtbnZpZGlhLWRneC1zcGFyay1oZWkta2Utc29uZy16b25nLWp1ZS1zYWkpIHwg5pivIHwg5pivIHwKfCDmipbpn7NBSeWIm+WPmOiAheiuoeWIkjIwMjbCt+m7keWuouadvuiBlOi1m++9nOi1m+mBk+S4ieWkp+WMuui1m+a4uOWbreS8miB8IDIwMjYtMDgtMDIgMTQ6MDAgLSAxNzozMCB8IOa3seWcsyB8IOa3seWcs+WNl+aWueenkeaKgOWkp+WtpuWbvemZheS8muiuruS4reW/gyB8IOaKlumfs0FJ5Yib5Y+Y6ICF6K6h5YiSIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly9saWFucHUuY29tL2V2ZW50L2RvdS15aW4tYWktY2h1YW5nLWJpYW4temhlLWppLWh1YS0yMDI2LWhlaS1rZS1zb25nLWxpYW4tc2FpKSB8IOWQpiB8IOaYryB8Cnwg6aaW5bGK5byA5rqQ6Iux5omN5aSP5Luk6JClIHwgMjAyNi0wOC0wMyAtIDIwMjYtMDgtMDfvvIg45pyIM+aXpeWcqOaUtumbhueql+WPo+WGheW8gOiQpe+8iSB8IOS4iua1tyB8IOS4iua1t+S6pOmAmuWkp+WtpuOAgeaykOabpuiCoeS7vSB8IOaykOabpuiCoeS7veOAgeS4reWbveWFieWNjuenkeaKgOWfuumHkeS8muOAgeS4iua1t+S6pOmAmuWkp+WtpiB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vZGV2ZWxvcGVyLm1ldGF4LXRlY2guY29tL2FjdGl2aXRpZXMvMTgpIHwg5pivIHwg5pivIHwKfCA3LjI5IOWMl+S6rCBBSSDmkJ7pkrEgJiDmlbTmtLvkuJPlnLogU29jaWFsIE1peGVyIHwgMjAyNi0wNy0yOSAxODowMC0yMjowMCB8IOWMl+S6rCB8IOWMl+S6rOaguOW/g+WVhuWciO+8iOWFt+S9k+WcsOeCueaKpeWQjeWQjumAmuefpe+8iSB8IER1b0R1b0xhbmTjgIFHZW4yIE1vb24gfCDku5jotLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jb20vby81Y0paaEFsdmZYRykgfCDlkKYgfCDlkKYgfAp8IDIwMjYg5p2t5beeIEFJIOWzsOS8miB8IDIwMjYtMDctMjkgfCDmna3lt54gfCDmtZnmsZ/lub/nlLXCt+a1meaxn+WbvemZheW9seinhuS4reW/gyB8IOS4reWbveiTneS6uuW3peaZuuiDveWtpumZoiB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHA6Ly94aHNsaW5rLmNuL28vN0hJUlQ3WmpEc2QpIHwg5ZCmIHwg5ZCmIHwKfCDigJxBSea8q+a4uOW8leWKm+KAnTIwMjblhajnkIPmuLjmiI8mQUnmvKvliafliJvkuJrot6/mvJTlpKfkvJogfCAyMDI2LTA3LTI5IDEzOjAwLTE4OjAwIHwg5LiK5rW3IHwg5oql5ZCN5ZCO5Y+v5p+l55yL6K+m57uG5Zyw5Z2AIHwg5ri45oiP5a215YyW5ZmoIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cuaHVvZG9uZ3hpbmcuY29tL2V2ZW50Lzk4NjgyNTE0NzMwMDApIHwg5ZCmIHwg5ZCmIHwKfCDkvaDnmoQgQUkg6aG555uu77yM56a76KKr55yL6KeB5Y+q5beu5LiA5qyhIERlbW8gRGF5IHwgMjAyNi0wNy0zMCAxNDowMC0xNzozMCB8IOadreW3niB8IOiJr+a4muaVsOaglua5viBBSSvkuqfkuJrnpL7ljLogfCDoia/muJrmlbDmoJbmub4gLyDpnZLmnaUgQW5XIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cDovL3hoc2xpbmsuY24vby82ZkVUY1FzbkVJbykgfCDlkKYgfCDlkKYgfAp8IDIwMjbkvIHkuJpBSSBBZ2VudOinhOaooeWMluiQveWcsOWzsOS8miB8IDIwMjYtMDctMzAgMTM6MzAtMTc6MDAgfCDmna3lt54gfCDmu6jmsZ/lvIDlhYPlkI3pg73phZLlupfvvIjmu6jmsZ/ljLrmtabmsr/ooZfpgZPlsqnlpKfmiL/lt7c1OeWPt+S5nea0suS4reW/g0Hluqcx5qW877yJIHwg572R5piT5pm65LyB44CB5ZCI5ZCI5L+h5oGv44CBZeetvuWuneOAgeiHtOi/nOS6kuiBlCB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC8yODY4NDQxNDYzMTAwKSB8IOWQpiB8IOaYryB8CnwgQUnliJvkuJrogIXpm4bnu5PvvIHlvZLlv4PosLdQSVRDSOS6uuW3peaZuuiDveS4k+WcuiB8IDIwMjYtMDctMzAgMTM6MzAtMTY6MDAgfCDkuIrmtbcgfCDkuIrmtbfmnajmtablm73lrprkuJzot68yMDDlj7cy5Y+35qW8NealvCB8IOW9kuW/g+iwtyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC84ODY3NjY2MDk2MTExKSB8IOWQpiB8IOWQpiB8Cnwg5bCP6ZWH5Lya5a6i5Y6F77ya5a+56K+d5qyn5rSy5Lq65bel5pm66IO95aSn5Lya5Li75bitIFVsaXNlcyBDb3J0w6lzIHwgMjAyNi0wNy0zMCAxNjozMCB8IOS4iua1tyB8IEFJ5bCP6ZWH5pyN5Yqh5Lit5b+DM0bot6/mvJTnqbrpl7TvvIjmtbfnp5Hot68xNjUw5Y+377yJIHwg5byg5rGfQUnliJvmlrDlsI/plYfnlJ/mgIHlhazlj7ggfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcy94MkVzQUJzYVZtOGNwMF9ucnlMb2ZBKSB8IOaYryB8IOaYryB8CnwgNzMw5LiK5rW3LUFnZW506L+b5YWl55yf5a6e6KGM5Lia5a6e5oiY5o+t56eY772c6Z2e5YehT3BlbmRheSB8IDIwMjYtMDctMzAgIHwg5LiK5rW3IHwg5LiK5rW35biC5b6Q5rGH5Yy655Sw5p6X6LevMTky5Y+3IMK3IOS6kei1m+epuumXtCB8IOWKoOWvhuWOqOaIvyDDlyDpnZ7lh6HkuqfnoJQgw5cg5LqR6LWb56m66Ze0IHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly91bmlxdWVibG9vbS5jbi9hY3Rpdml0aWVzL2FnZW50aWNub3cwMykgfCDlkKYgfCDlkKYgfAp8IOWMl+S6rCBBSSDoi6bnk5zlpKfkvJrvvJpBSSBEZW1vIENsdWIg5byA5pS+6bqmIFZvbC4wMiB8IDIwMjYtMDctMzAgMTk6MzAtMjE6MzAgfCDljJfkuqwgfCDlroflrpnlrqLljoXvvIjmtbfmt4DljLrljY7muIXllYbliqHkvJrppoYxNuWxgjE2MDFC77yJIHwg5a6H5a6Z5a6i5Y6FIC8g5py65Zmo5Y+j6KKLIC8g56GF5Z+65YWs56S+IFNpbGljb24gTmV4dXMgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jbi9vLzJlSnhoTERSTjFEKSB8IOWQpiB8IOWQpiB8Cnwg6ZmG5a625Zi05pWw5a2mICYgQUkgJiDnp5HmioDooYzkuJrogZrkvJogNy4zMCB8IDIwMjYtMDctMzAg5pma5LiKIHwg5LiK5rW3IHwg6ZmG5a625Zi0IHwgRnJhbmvnmoTkvJrlrqLljoUgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jbi9vLzFpdXhKcllKdFN6KSB8IOaYryB8IOWQpiB8CnwgTmV4dCBXYXZlIFx8IEFJIOaZuuiDveehrOS7tuWHuua1tyBUYWxrcyB8IDIwMjYtMDctMzEgMTM6MzAtMTc6MDAgfCDkuIrmtbcgfCDkuIrmtbfph5HojILlkJvmgqblpKfphZLlupcgNTTmpbzmsLTnk7bljoUgXHwg5LiK5rW35biC5rWm5Lic5paw5Yy65LiW57qq5aSn6YGTIDg4IOWPtyjph5HojILlpKfljqYgMyDlj7fpl6gpIHwg6Zuo5p6c6Leo5aKD44CBTWV0YSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9uZXh0LXdhdmUtYWktemhpLW5lbmcteWluZy1qaWFuLWNodS1oYWktdGFsa3MpIHwg5ZCmIHwg5pivIHwKfCDkurrlt6Xmmbrog73liJvmlrDkuLvpopjmspnpvpkgXHwg5pm65L2T5YWx55Sf77yM5Yib5paw6amx5YqoIEFJIOS6p+S4muWMliB8IDIwMjYtMDctMzEgMTQ6MDAtMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbcgwrcg5rWm5Lic5paw5Yy65byg5rGf5qih5Yqb56S+5Yy6IFQxIOaooeWKm+a6kCA1IOWxgiA1MTIg5Lya6K6u5a6kIHwg5Yqo54K556eR5oqAIHRlY2hub2Rl44CBQkVZT05EIEVYUE8gfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvcmVuLWdvbmctemhpLW5lbmctY2h1YW5nLXhpbi16aHUtdGktc2hhLWxvbmcpIHwg5ZCmIHwg5ZCmIHwKfCBPcGVuTWluZCBBSeaZuuiDveS9k+aXtuS7o+S8geS4mue7hOe7h+e7k+aehOaWsOiMg+W8j+WzsOS8miB8IDIwMjYtMDctMzEgMTM6MzAtMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfpu4TmtabCt+S6uuawkeW5v+WcuiB8IE9wZW5NaW5kIEV2ZW50cyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vaGR4dS5jbi8xTDl2aSkgfCDlkKYgfCDlkKYgfAp8IOa0u+WKqOmihOWRiu+9nOaZuua6kC9UaWxlUlQv6IW+6K6vL+WNjuS4ui/mmbrlhYPliJvmlrDlkIzlj7DvvIzlhbHmjqIgQUkg57yW6K+R55qE5aSa5bGC57qn5Y2P5ZCM5LyY5YyWIHwgMjAyNi0wOC0wMSAxMzozMC0xNzozMCB8IOWMl+S6rCB8IOS4reWFs+adkeWIm+S4muWkp+ihlzEy5Y+35qW85LqU5bGC5aSa5Yqf6IO95Y6FIHwgSHlwZXJBSei2heelnue7jyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC83ODY3Njg5MzMzNTAwKSB8IOaYryB8IOaYryB8Cnwg5LiK5rW35a2m5pyv6YWS5ZCn772c5LuO6I+y5bCU5YW55aWW5YiwIEFJNFMgfCAyMDI2LTA4LTAxIDE0OjAwIHwg5LiK5rW3IHwg5LiK5rW35ryV5rKz5rO+77yM5YW35L2T5Zyw54K55Lul5Li75Yqe5pa56YCa55+l5Li65YeGIHwg5LiK5rW35a2m5pyv6YWS5ZCnIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL2V4cGxvcmUvNmE2NWE4YTEwMDAwMDAwMDA1MDNhNGMwP3hzZWNfdG9rZW49QUI5VXlRbF9lMXZKUExBMkxya2d0WkhSaFd1RG55Mk1ZM0hYT3FxNko4RGswJTNEKSB8IOaYryB8IOWQpiB8CnwgOOaciDHml6XljJfkuqxUaGUgSEVSZ2VuY3k6IOWlueihjOWKqO+8jOWNs+acquadpS0gQUnml7bku6PnmoTkurrmnKzpooblr7zlipvorrrlnZsgfCAyMDI2LTA4LTAxIDE0OjAwLTE3OjAwIHwg5YyX5LqsIHwg5oql5ZCN5ZCO5Y+v5p+l55yL6K+m57uG5Zyw5Z2AIHwg5aW55Y6f5YqbU2hlUmV3aXJlcyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC82ODY5NDMwNDc0OTAwKSB8IOWQpiB8IOWQpiB8CnwgQ2hpbmFKb3kgQWZ0ZXJwYXJ0eSZEZW1vRGF5OiBUaGUgRnV0dXJlIG9mIEFJLXBvd2VyZWQgUGFuLUVudGVydGFpbm1lbnQgfCAyMDI2LTA4LTAxIDEwOjMwLTEzOjMwIHwg5LiK5rW3IHwgU2hhbmcgSGFpIFNoaSB8IEVwaWNDb25uZWN0b3IgfCDku5jotLkgfCBb5oql5ZCNXShodHRwczovL2x1bWEuY29tL2NoaW5hSm95YWZ0ZXJwYXJ0eSkgfCDlkKYgfCDmmK8gfAo8IS0tIENVUlJFTlRfV0VFS19UQUJMRTpFTkQgLS0+CgrlrozmlbTnmoTmnKzlkajmlbDmja7op4EgW2BkYXRhLzIwMjYtMDctMjguY3N2YF0oZGF0YS8yMDI2LTA3LTI4LmNzdinjgIIKCiMjIOWOhuWPsuaVsOaNrgoK5Y6G5Y+y5ZGo5b+r54Wn5ZKM6ZW/5pyf5rS75Yqo5pWw5o2u57uf5LiA5pS+5ZyoIFtgZGF0YS9gXShkYXRhLykg55uu5b2V5Lit77yaCgotIGAyMDI2LTA3LTIxLmNzdmDjgIFgMjAyNi0wNy0xNC5jc3ZgIOetie+8muaMieWRqOS/neWtmOeahOS4jeWPr+WPmOW/q+eFpwotIGBsb25nLXRlcm0uY3N2YO+8mui3qOWRqOaIlumVv+acn+acieaViOeahOa0u+WKqAoKIyMg5pu05paw5pa55byPCgpgYGBiYXNoCnB5dGhvbjMg5rS75Yqo5pel5Y6GL3N5bmNfZnJvbV9mZWlzaHUucHkKYGBgCgrov5DooYzliY3noa7kv53mnKzmnLogYGxhcmstY2xpYCDlt7LlrozmiJDpo57kuabnlKjmiLfmjojmnYPjgILmm7TmlrDlkI7mo4Dmn6UgQ1NWIGRpZmbvvIzlho3mj5DkuqTkuIDkuKrnsbvkvLwgYGRhdGEoY2FsZW5kYXIpOiB1cGRhdGUgMjAyNi0wNy0yOGAg55qEIGNvbW1pdOOAggoK6L+b5YWl5paw55qE5LiA5ZGo5pe277yM5Zyo6ISa5pys55qEIGBUQUJMRVNgIOS4reWinuWKoOaWsOWRqOihqO+8jOW5tuWwhiBgQ1VSUkVOVF9XRUVLYCDmlLnkuLrmlrDlkajml6XmnJ/vvJvohJrmnKzkvJrlkIzmraUgQ1NWIOW5tuiHquWKqOWIt+aWsOacrOiKgiBSRUFETUUg6KGo5qC844CCCg== \ No newline at end of file -- 2.34.1 From 163b6281913eaf6eaed519b5ba98acc2c76958fc Mon Sep 17 00:00:00 2001 From: cory Date: Tue, 28 Jul 2026 15:38:57 +0800 Subject: [PATCH 2/5] fix(calendar): make weekly sync robust --- 活动日历/sync_from_feishu.py | 96 +------------------------------- 1 file changed, 1 insertion(+), 95 deletions(-) diff --git a/活动日历/sync_from_feishu.py b/活动日历/sync_from_feishu.py index a037ba7..4b543cf 100644 --- a/活动日历/sync_from_feishu.py +++ b/活动日历/sync_from_feishu.py @@ -1,95 +1 @@ -#!/usr/bin/env python3 -"""Export the activity-calendar Base into weekly CSV snapshots. - -Requires a logged-in lark-cli user identity. The Base token and table IDs are -intentionally kept here as public resource identifiers; no access token is -stored in the repository. -""" - -from __future__ import annotations - -import csv -import json -import re -import subprocess -from pathlib import Path - - -BASE_TOKEN = "KXjzbKeiyaR7les2kqbcWnYwngW" -CURRENT_WEEK = "2026-07-21" -TABLES = { - CURRENT_WEEK: "tbl0I8AQtdU0tgdL", - "2026-07-14": "tblsJzHEjSvFxgD2", - "2026-07-07": "tblBD71ueCM6SPXU", - "2026-06-30": "tblnDyrGKjws1DC6", - "2026-06-16": "tblr8Kaj8m8HHtQS", - "2026-06-11": "tbl1ORE2PxVWRZWn", - "long-term": "tblhsv6kP83IidFr", -} -FIELDS = ["活动名称", "ai infra", "主办方", "报名链接", "是否收费", "地点", "活动时间", "城市", "热门"] - - -def fetch(table_id: str) -> list[list[object]]: - command = [ - "lark-cli", "base", "+record-list", "--base-token", BASE_TOKEN, - "--table-id", table_id, "--limit", "200", "--format", "json", "--as", "user", - ] - result = subprocess.run(command, check=True, capture_output=True, text=True) - payload = json.loads(result.stdout) - return payload["data"]["data"] - - -def value(cell: object) -> str: - if isinstance(cell, list): - return "、".join(str(item) for item in cell) - if isinstance(cell, bool): - return "是" if cell else "否" - return "" if cell is None else str(cell) - - -def markdown_cell(cell: str, column: str) -> str: - if column == "报名链接" and cell: - match = re.search(r"\((https?://[^)]+)\)", cell) - url = match.group(1) if match else cell - return f"[报名]({url})" - return cell.replace("|", "\\|").replace("\n", " ") - - -def update_readme(rows: list[list[object]]) -> None: - readme = Path(__file__).resolve().parent / "README.md" - content = readme.read_text(encoding="utf-8") - content = re.sub(r"## 本周活动([^)]+)", f"## 本周活动({CURRENT_WEEK})", content, count=1) - table = [ - "| " + " | ".join(["活动名称", "时间", "城市", "地点", "主办方", "费用", "报名链接", "AI Infra", "热门"]) + " |", - "| --- | --- | --- | --- | --- | --- | --- | --- | --- |", - ] - indexes = {name: index for index, name in enumerate(FIELDS)} - order = [indexes[name] for name in ["活动名称", "活动时间", "城市", "地点", "主办方", "是否收费", "报名链接", "ai infra", "热门"]] - for row in rows: - cells = [markdown_cell(value(row[index]), FIELDS[index]) for index in order] - table.append("| " + " | ".join(cells) + " |") - replacement = "\n" + "\n".join(table) + "\n" - updated = re.sub(r".*?", replacement, content, flags=re.S) - readme.write_text(updated, encoding="utf-8") - - -def main() -> None: - root = Path(__file__).resolve().parent - data_dir = root / "data" - data_dir.mkdir(exist_ok=True) - current_rows: list[list[object]] = [] - for name, table_id in TABLES.items(): - rows = fetch(table_id) - if name == CURRENT_WEEK: - current_rows = rows - filename = f"{name}.csv" - with (data_dir / filename).open("w", encoding="utf-8", newline="") as handle: - writer = csv.writer(handle) - writer.writerow(FIELDS) - writer.writerows([[value(cell) for cell in row] for row in rows]) - print(f"wrote {filename}: {len(rows)} rows") - update_readme(current_rows) - - -if __name__ == "__main__": - main() +IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJFeHBvcnQgdGhlIGFjdGl2aXR5LWNhbGVuZGFyIEJhc2UgaW50byB3ZWVrbHkgQ1NWIHNuYXBzaG90cy4KClJlcXVpcmVzIGEgbG9nZ2VkLWluIGxhcmstY2xpIHVzZXIgaWRlbnRpdHkuICBUaGUgQmFzZSB0b2tlbiBhbmQgdGFibGUgSURzIGFyZQppbnRlbnRpb25hbGx5IGtlcHQgaGVyZSBhcyBwdWJsaWMgcmVzb3VyY2UgaWRlbnRpZmllcnM7IG5vIGFjY2VzcyB0b2tlbiBpcwpzdG9yZWQgaW4gdGhlIHJlcG9zaXRvcnkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IGNzdgppbXBvcnQganNvbgppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgoKQkFTRV9UT0tFTiA9ICJLWGp6YktlaXlhUjdsZXMya3FiY1duWXduZ1ciCkNVUlJFTlRfV0VFSyA9ICIyMDI2LTA3LTI4IgpUQUJMRVMgPSB7CiAgICBDVVJSRU5UX1dFRUs6ICJ0YmxiOGxwTXBISmFtVHh1IiwKICAgICIyMDI2LTA3LTIxIjogInRibDBJOEFRdGRVMHRnZEwiLAogICAgIjIwMjYtMDctMTQiOiAidGJsc0p6SEVqU3ZGeGdEMiIsCiAgICAiMjAyNi0wNy0wNyI6ICJ0YmxCRDcxdWVDTTZTUFhVIiwKICAgICIyMDI2LTA2LTMwIjogInRibG5EeXJHS2p3czFEQzYiLAogICAgIjIwMjYtMDYtMTYiOiAidGJscjhLYWo4bThISHRRUyIsCiAgICAiMjAyNi0wNi0xMSI6ICJ0YmwxT1JFMlB4VldSWlduIiwKICAgICJsb25nLXRlcm0iOiAidGJsaHN2NmtQODNJaWRGciIsCn0KRklFTERTID0gWyLmtLvliqjlkI3np7AiLCAiYWkgaW5mcmEiLCAi5Li75Yqe5pa5IiwgIuaKpeWQjemTvuaOpSIsICLmmK/lkKbmlLbotLkiLCAi5Zyw54K5IiwgIua0u+WKqOaXtumXtCIsICLln47luIIiLCAi54Ot6ZeoIl0KCgpkZWYgZmV0Y2godGFibGVfaWQ6IHN0cikgLT4gbGlzdFtsaXN0W29iamVjdF1dOgogICAgY29tbWFuZCA9IFsKICAgICAgICAibGFyay1jbGkiLCAiYmFzZSIsICIrcmVjb3JkLWxpc3QiLCAiLS1iYXNlLXRva2VuIiwgQkFTRV9UT0tFTiwKICAgICAgICAiLS10YWJsZS1pZCIsIHRhYmxlX2lkLCAiLS1saW1pdCIsICIyMDAiLCAiLS1mb3JtYXQiLCAianNvbiIsICItLWFzIiwgInVzZXIiLAogICAgXQogICAgZm9yIGZpZWxkIGluIEZJRUxEUzoKICAgICAgICBjb21tYW5kLmV4dGVuZChbIi0tZmllbGQtaWQiLCBmaWVsZF0pCiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjb21tYW5kLCBjaGVjaz1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpCiAgICBwYXlsb2FkID0ganNvbi5sb2FkcyhyZXN1bHQuc3Rkb3V0KQogICAgcmV0dXJuIHBheWxvYWRbImRhdGEiXVsiZGF0YSJdCgoKZGVmIHZhbHVlKGNlbGw6IG9iamVjdCkgLT4gc3RyOgogICAgaWYgaXNpbnN0YW5jZShjZWxsLCBsaXN0KToKICAgICAgICByZXR1cm4gIuOAgSIuam9pbihzdHIoaXRlbSkgZm9yIGl0ZW0gaW4gY2VsbCkKICAgIGlmIGlzaW5zdGFuY2UoY2VsbCwgYm9vbCk6CiAgICAgICAgcmV0dXJuICLmmK8iIGlmIGNlbGwgZWxzZSAi5ZCmIgogICAgcmV0dXJuICIiIGlmIGNlbGwgaXMgTm9uZSBlbHNlIHN0cihjZWxsKQoKCmRlZiBtYXJrZG93bl9jZWxsKGNlbGw6IHN0ciwgY29sdW1uOiBzdHIpIC0+IHN0cjoKICAgIGlmIGNvbHVtbiA9PSAi5oql5ZCN6ZO+5o6lIiBhbmQgY2VsbDoKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyIlwoKGh0dHBzPzovL1teKV0rKVwpIiwgY2VsbCkKICAgICAgICB1cmwgPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIGNlbGwKICAgICAgICByZXR1cm4gZiJb5oql5ZCNXSh7dXJsfSkiCiAgICByZXR1cm4gY2VsbC5yZXBsYWNlKCJ8IiwgIlxcfCIpLnJlcGxhY2UoIlxuIiwgIiAiKQoKCmRlZiB1cGRhdGVfcmVhZG1lKHJvd3M6IGxpc3RbbGlzdFtvYmplY3RdXSkgLT4gTm9uZToKICAgIHJlYWRtZSA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQgLyAiUkVBRE1FLm1kIgogICAgY29udGVudCA9IHJlYWRtZS5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKICAgIGNvbnRlbnQgPSByZS5zdWIociIjIyDmnKzlkajmtLvliqjvvIhbXu+8iV0r77yJIiwgZiIjIyDmnKzlkajmtLvliqjvvIh7Q1VSUkVOVF9XRUVLfe+8iSIsIGNvbnRlbnQsIGNvdW50PTEpCiAgICBjb250ZW50ID0gcmUuc3ViKAogICAgICAgIHIi5a6M5pW055qE5pys5ZGo5pWw5o2u6KeBIFxbYGRhdGEvW15gXStcLmNzdmBcXVwoZGF0YS9bXildK1wuY3N2XCnjgIIiLAogICAgICAgIGYi5a6M5pW055qE5pys5ZGo5pWw5o2u6KeBIFtgZGF0YS97Q1VSUkVOVF9XRUVLfS5jc3ZgXShkYXRhL3tDVVJSRU5UX1dFRUt9LmNzdinjgIIiLAogICAgICAgIGNvbnRlbnQsCiAgICAgICAgY291bnQ9MSwKICAgICkKICAgIHRhYmxlID0gWwogICAgICAgICJ8ICIgKyAiIHwgIi5qb2luKFsi5rS75Yqo5ZCN56ewIiwgIuaXtumXtCIsICLln47luIIiLCAi5Zyw54K5IiwgIuS4u+WKnuaWuSIsICLotLnnlKgiLCAi5oql5ZCN6ZO+5o6lIiwgIkFJIEluZnJhIiwgIueDremXqCJdKSArICIgfCIsCiAgICAgICAgInwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwiLAogICAgXQogICAgaW5kZXhlcyA9IHtuYW1lOiBpbmRleCBmb3IgaW5kZXgsIG5hbWUgaW4gZW51bWVyYXRlKEZJRUxEUyl9CiAgICBvcmRlciA9IFtpbmRleGVzW25hbWVdIGZvciBuYW1lIGluIFsi5rS75Yqo5ZCN56ewIiwgIua0u+WKqOaXtumXtCIsICLln47luIIiLCAi5Zyw54K5IiwgIuS4u+WKnuaWuSIsICLmmK/lkKbmlLbotLkiLCAi5oql5ZCN6ZO+5o6lIiwgImFpIGluZnJhIiwgIueDremXqCJdXQogICAgZm9yIHJvdyBpbiByb3dzOgogICAgICAgIGNlbGxzID0gW21hcmtkb3duX2NlbGwodmFsdWUocm93W2luZGV4XSksIEZJRUxEU1tpbmRleF0pIGZvciBpbmRleCBpbiBvcmRlcl0KICAgICAgICB0YWJsZS5hcHBlbmQoInwgIiArICIgfCAiLmpvaW4oY2VsbHMpICsgIiB8IikKICAgIHJlcGxhY2VtZW50ID0gIjwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOlNUQVJUIC0tPlxuIiArICJcbiIuam9pbih0YWJsZSkgKyAiXG48IS0tIENVUlJFTlRfV0VFS19UQUJMRTpFTkQgLS0+IgogICAgdXBkYXRlZCA9IHJlLnN1YihyIjwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOlNUQVJUIC0tPi4qPzwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOkVORCAtLT4iLCByZXBsYWNlbWVudCwgY29udGVudCwgZmxhZ3M9cmUuUykKICAgIHJlYWRtZS53cml0ZV90ZXh0KHVwZGF0ZWQsIGVuY29kaW5nPSJ1dGYtOCIpCgoKZGVmIG1haW4oKSAtPiBOb25lOgogICAgcm9vdCA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQKICAgIGRhdGFfZGlyID0gcm9vdCAvICJkYXRhIgogICAgZGF0YV9kaXIubWtkaXIoZXhpc3Rfb2s9VHJ1ZSkKICAgIGN1cnJlbnRfcm93czogbGlzdFtsaXN0W29iamVjdF1dID0gW10KICAgIGZvciBuYW1lLCB0YWJsZV9pZCBpbiBUQUJMRVMuaXRlbXMoKToKICAgICAgICBmaWxlbmFtZSA9IGYie25hbWV9LmNzdiIKICAgICAgICBwYXRoID0gZGF0YV9kaXIgLyBmaWxlbmFtZQogICAgICAgIGlmIG5hbWUgIT0gQ1VSUkVOVF9XRUVLIGFuZCBwYXRoLmV4aXN0cygpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHJvd3MgPSBmZXRjaCh0YWJsZV9pZCkKICAgICAgICBpZiBuYW1lID09IENVUlJFTlRfV0VFSzoKICAgICAgICAgICAgY3VycmVudF9yb3dzID0gcm93cwogICAgICAgIHdpdGggcGF0aC5vcGVuKCJ3IiwgZW5jb2Rpbmc9InV0Zi04IiwgbmV3bGluZT0iIikgYXMgaGFuZGxlOgogICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGhhbmRsZSwgbGluZXRlcm1pbmF0b3I9IlxuIikKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KEZJRUxEUykKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhbW3ZhbHVlKGNlbGwpIGZvciBjZWxsIGluIHJvd10gZm9yIHJvdyBpbiByb3dzXSkKICAgICAgICBwcmludChmIndyb3RlIHtmaWxlbmFtZX06IHtsZW4ocm93cyl9IHJvd3MiKQogICAgdXBkYXRlX3JlYWRtZShjdXJyZW50X3Jvd3MpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo= \ No newline at end of file -- 2.34.1 From 3a23715a78c567d1afd1338270661f0057e5e82b Mon Sep 17 00:00:00 2001 From: cory Date: Tue, 28 Jul 2026 15:38:58 +0800 Subject: [PATCH 3/5] data(calendar): add 2026-07-28 snapshot --- 活动日历/data/2026-07-28.csv | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 活动日历/data/2026-07-28.csv diff --git a/活动日历/data/2026-07-28.csv b/活动日历/data/2026-07-28.csv new file mode 100644 index 0000000..4a30477 --- /dev/null +++ b/活动日历/data/2026-07-28.csv @@ -0,0 +1,32 @@ +活动名称,ai infra,主办方,报名链接,是否收费,地点,活动时间,城市,热门 +2026可信云大会暨首届Token云服务大会,是,中国通信标准化协会等,[https://www.huodongxing.com/event/9867533540000](https://www.huodongxing.com/event/9867533540000),免费,北京中关村国家自主创新示范区会议中心,2026-07-28 09:00 - 2026-07-29 18:00,北京,是 +FAIR plus × 国先 Demo Hub 第八期,否,深圳市机器人协会、国际先进技术应用推进中心(深圳),[https://lianpu.com/topics/shenzhen-ai](https://lianpu.com/topics/shenzhen-ai),免费,深圳福田河套(报名后获取详细地址),2026-07-28 14:00 - 17:30,深圳,否 +2026具身智能50人论坛夏季峰会,否,具身之家、投资家网,[https://lianpu.com/event/2026-ju-shen-zhi-neng-50-ren-lun-tan-xia-ji-feng-hui](https://lianpu.com/event/2026-ju-shen-zhi-neng-50-ren-lun-tan-xia-ji-feng-hui),免费,北京朝阳区(审核后短信通知),2026-07-29 09:00 - 2026-07-30 18:00,北京,否 +2026第五届中国油气人工智能科技大会,否,中国石油大学(北京)等,[https://www.oilgasai.com/](https://www.oilgasai.com/),付费,北京昌平,2026-07-30 - 2026-08-01,北京,否 +TiD2026质量竞争力大会:AI原生时代的质量新范式,是,中关村智联软件服务业质量创新联盟,[https://itknowledgezone.com/cn/event/tid2026/](https://itknowledgezone.com/cn/event/tid2026/),付费,北京,2026-07-30 10:00 - 2026-08-01 17:15,北京,是 +2026人工智能产品应用博览会(2026智博会),否,2026智博会组委会,[https://www.sipac.gov.cn/szgyyq/202607zbh/202607zbh.shtml](https://www.sipac.gov.cn/szgyyq/202607zbh/202607zbh.shtml),免费,苏州国际博览中心,2026-07-30 - 2026-08-01,苏州,否 +人工智能创新主题沙龙|智体共生,创新驱动AI产业化,否,动点科技 TechNode,[https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long](https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long),免费,上海浦东张江模力社区T1模力源5层512会议室,2026-07-31 13:00 - 17:30,上海,否 +“人工智能+”实战应用与产业创新论坛暨第十四届创新创业影响力峰会南京会议,否,第十四届创新创业影响力峰会组委会,[https://xiouwang.cn/cies/](https://xiouwang.cn/cies/),免费,南京世茂滨江希尔顿酒店,2026-07-31,南京,否 +Vibe Coding产品共创实践|OPC同行社全国行·杭州站,否,OPC同行社,[https://www.huodongxing.com/event/1870041667400](https://www.huodongxing.com/event/1870041667400),免费,杭州,2026-08-01,杭州,否 +端侧重构·具身无界——端侧具身智能技术沙龙,是,亚仿智能科技,[https://lianpu.com/event/duan-ce-zhong-gou-ju-shen-wu-jie-duan-ce-ju-shen-zhi-neng-ji](https://lianpu.com/event/duan-ce-zhong-gou-ju-shen-wu-jie-duan-ce-ju-shen-zhi-neng-ji),免费,深圳宝安区新安街道兴海一路19号前海HOP国际1901室,2026-08-01 13:20 - 17:30,深圳,是 +AI真能帮你调通开发板吗?,是,造物潭、Probes,[https://lianpu.com/event/ai-zhen-neng-bang-ni-tiao-tong-kai-fa-ban-ma](https://lianpu.com/event/ai-zhen-neng-bang-ni-tiao-tong-kai-fa-ban-ma),免费,上海北中环中心1栋23楼,2026-08-01 15:00 - 2026-08-02 17:00,上海,否 +第二届NVIDIA DGX Spark黑客松总决赛,是,阶跃星辰、NVIDIA,[https://lianpu.com/event/di-er-jie-nvidia-dgx-spark-hei-ke-song-zong-jue-sai](https://lianpu.com/event/di-er-jie-nvidia-dgx-spark-hei-ke-song-zong-jue-sai),免费,上海松江科技影都AI创制生态中心大厅,2026-08-02 13:30 - 17:30,上海,是 +抖音AI创变者计划2026·黑客松联赛|赛道三大区赛游园会,否,抖音AI创变者计划,[https://lianpu.com/event/dou-yin-ai-chuang-bian-zhe-ji-hua-2026-hei-ke-song-lian-sai](https://lianpu.com/event/dou-yin-ai-chuang-bian-zhe-ji-hua-2026-hei-ke-song-lian-sai),免费,深圳南方科技大学国际会议中心,2026-08-02 14:00 - 17:30,深圳,是 +首届开源英才夏令营,是,沐曦股份、中国光华科技基金会、上海交通大学,[https://developer.metax-tech.com/activities/18](https://developer.metax-tech.com/activities/18),免费,上海交通大学、沐曦股份,2026-08-03 - 2026-08-07(8月3日在收集窗口内开营),上海,是 +7.29 北京 AI 搞钱 & 整活专场 Social Mixer,否,DuoDuoLand、Gen2 Moon,[http://xhslink.com/o/5cJZhAlvfXG](http://xhslink.com/o/5cJZhAlvfXG),付费,北京核心商圈(具体地点报名后通知),2026-07-29 18:00-22:00,北京,否 +2026 杭州 AI 峰会,否,中国蓝人工智能学院,[http://xhslink.cn/o/7HIRT7ZjDsd](http://xhslink.cn/o/7HIRT7ZjDsd),免费,浙江广电·浙江国际影视中心,2026-07-29,杭州,否 +“AI漫游引力”2026全球游戏&AI漫剧创业路演大会,否,游戏孵化器,[https://www.huodongxing.com/event/9868251473000](https://www.huodongxing.com/event/9868251473000),免费,报名后可查看详细地址,2026-07-29 13:00-18:00,上海,否 +你的 AI 项目,离被看见只差一次 Demo Day,否,良渚数栖湾 / 青来 AnW,[http://xhslink.cn/o/6fETcQsnEIo](http://xhslink.cn/o/6fETcQsnEIo),免费,良渚数栖湾 AI+产业社区,2026-07-30 14:00-17:30,杭州,否 +2026企业AI Agent规模化落地峰会,否,网易智企、合合信息、e签宝、致远互联,[https://www.huodongxing.com/event/2868441463100](https://www.huodongxing.com/event/2868441463100),免费,滨江开元名都酒店(滨江区浦沿街道岩大房巷59号九洲中心A座1楼),2026-07-30 13:30-17:00,杭州,是 +AI创业者集结!归心谷PITCH人工智能专场,否,归心谷,[https://www.huodongxing.com/event/8867666096111](https://www.huodongxing.com/event/8867666096111),免费,上海杨浦国定东路200号2号楼5楼,2026-07-30 13:30-16:00,上海,否 +小镇会客厅:对话欧洲人工智能大会主席 Ulises Cortés,是,张江AI创新小镇生态公司,[https://mp.weixin.qq.com/s/x2EsABsaVm8cp0_nryLofA](https://mp.weixin.qq.com/s/x2EsABsaVm8cp0_nryLofA),免费,AI小镇服务中心3F路演空间(海科路1650号),2026-07-30 16:30,上海,是 +730上海-Agent进入真实行业实战揭秘|非凡Openday,否,加密厨房 × 非凡产研 × 云赛空间,[https://uniquebloom.cn/activities/agenticnow03](https://uniquebloom.cn/activities/agenticnow03),免费,上海市徐汇区田林路192号 · 云赛空间,2026-07-30 ,上海,否 +北京 AI 苦瓜大会:AI Demo Club 开放麦 Vol.02,否,宇宙客厅 / 机器口袋 / 硅基公社 Silicon Nexus,[http://xhslink.cn/o/2eJxhLDRN1D](http://xhslink.cn/o/2eJxhLDRN1D),免费,宇宙客厅(海淀区华清商务会馆16层1601B),2026-07-30 19:30-21:30,北京,否 +陆家嘴数学 & AI & 科技行业聚会 7.30,是,Frank的会客厅,[http://xhslink.cn/o/1iuxJrYJtSz](http://xhslink.cn/o/1iuxJrYJtSz),免费,陆家嘴,2026-07-30 晚上,上海,否 +Next Wave | AI 智能硬件出海 Talks,否,雨果跨境、Meta,[https://lianpu.com/event/next-wave-ai-zhi-neng-ying-jian-chu-hai-talks](https://lianpu.com/event/next-wave-ai-zhi-neng-ying-jian-chu-hai-talks),免费,上海金茂君悦大酒店 54楼水瓶厅 | 上海市浦东新区世纪大道 88 号(金茂大厦 3 号门),2026-07-31 13:30-17:00,上海,是 +人工智能创新主题沙龙 | 智体共生,创新驱动 AI 产业化,否,动点科技 technode、BEYOND EXPO,[https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long](https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long),免费,上海 · 浦东新区张江模力社区 T1 模力源 5 层 512 会议室,2026-07-31 14:00-17:30,上海,否 +OpenMind AI智能体时代企业组织结构新范式峰会,否,OpenMind Events,[https://hdxu.cn/1L9vi](https://hdxu.cn/1L9vi),付费,上海黄浦·人民广场,2026-07-31 13:30-17:30,上海,否 +活动预告|智源/TileRT/腾讯/华为/智元创新同台,共探 AI 编译的多层级协同优化,是,HyperAI超神经,[https://www.huodongxing.com/event/7867689333500](https://www.huodongxing.com/event/7867689333500),付费,中关村创业大街12号楼五层多功能厅,2026-08-01 13:30-17:30,北京,是 +上海学术酒吧|从菲尔兹奖到 AI4S,是,上海学术酒吧,[https://www.xiaohongshu.com/explore/6a65a8a1000000000503a4c0?xsec_token=AB9UyQl_e1vJPLA2LrkgtZHRhWuDny2MY3HXOqq6J8Dk0%3D](https://www.xiaohongshu.com/explore/6a65a8a1000000000503a4c0?xsec_token=AB9UyQl_e1vJPLA2LrkgtZHRhWuDny2MY3HXOqq6J8Dk0%3D),免费,上海漕河泾,具体地点以主办方通知为准,2026-08-01 14:00,上海,否 +8月1日北京The HERgency: 她行动,即未来- AI时代的人本领导力论坛,否,她原力SheRewires,[https://www.huodongxing.com/event/6869430474900](https://www.huodongxing.com/event/6869430474900),免费,报名后可查看详细地址,2026-08-01 14:00-17:00,北京,否 +ChinaJoy Afterparty&DemoDay: The Future of AI-powered Pan-Entertainment,否,EpicConnector,[https://luma.com/chinaJoyafterparty](https://luma.com/chinaJoyafterparty),付费,Shang Hai Shi,2026-08-01 10:30-13:30,上海,是 -- 2.34.1 From dce8da7185f353f9a52a3206498266f5b8b2a617 Mon Sep 17 00:00:00 2001 From: cory Date: Tue, 28 Jul 2026 15:40:01 +0800 Subject: [PATCH 4/5] fix(calendar): restore README text content --- 活动日历/README.md | 63 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/活动日历/README.md b/活动日历/README.md index c2f175c..4468b88 100644 --- a/活动日历/README.md +++ b/活动日历/README.md @@ -1 +1,62 @@ -IyBBSSBJbmZyYSDmtLvliqjml6XljoYKCumdouWQkSBBSSBJbmZyYSDku47kuJrogIXnmoTmtLvliqjkv6Hmga/msYfmgLvvvIzmjIHnu63mlbTnkIblm73lhoXnur/kuIvjgIHnur/kuIrku6Xlj4rnm7jlhbPmioDmnK/npL7ljLrmtLvliqjjgIIKCuaVsOaNruadpea6kOS6jlvpo57kuabmtLvliqjml6XljoZdKGh0dHBzOi8vbGNuajJta3h3b205LmZlaXNodS5jbi93aWtpL1BtU093V01iTmkyQ3pYa2RwZk5jaEh6Rm5pZj9mcm9tPWZyb21fY29weWxpbmsp77yM5q+P5ZGo5pu05paw5LiA5qyh44CC5LuT5bqT5L+d55WZ5Y6G5Y+y5ZGo5b+r54Wn77yM5pa55L6/5p+l55yL5rS75Yqo5L+h5oGv55qE5Y+Y5YyW44CCCgojIyDmnKzlkajmtLvliqjvvIgyMDI2LTA3LTI477yJCgo8IS0tIENVUlJFTlRfV0VFS19UQUJMRTpTVEFSVCAtLT4KfCDmtLvliqjlkI3np7AgfCDml7bpl7QgfCDln47luIIgfCDlnLDngrkgfCDkuLvlip7mlrkgfCDotLnnlKggfCDmiqXlkI3pk77mjqUgfCBBSSBJbmZyYSB8IOeDremXqCB8CnwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwKfCAyMDI25Y+v5L+h5LqR5aSn5Lya5pqo6aaW5bGKVG9rZW7kupHmnI3liqHlpKfkvJogfCAyMDI2LTA3LTI4IDA5OjAwIC0gMjAyNi0wNy0yOSAxODowMCB8IOWMl+S6rCB8IOWMl+S6rOS4reWFs+adkeWbveWutuiHquS4u+WIm+aWsOekuuiMg+WMuuS8muiuruS4reW/gyB8IOS4reWbvemAmuS/oeagh+WHhuWMluWNj+S8muetiSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC85ODY3NTMzNTQwMDAwKSB8IOaYryB8IOaYryB8CnwgRkFJUiBwbHVzIMOXIOWbveWFiCBEZW1vIEh1YiDnrKzlhavmnJ8gfCAyMDI2LTA3LTI4IDE0OjAwIC0gMTc6MzAgfCDmt7HlnLMgfCDmt7HlnLPnpo/nlLDmsrPlpZfvvIjmiqXlkI3lkI7ojrflj5bor6bnu4blnLDlnYDvvIkgfCDmt7HlnLPluILmnLrlmajkurrljY/kvJrjgIHlm73pmYXlhYjov5vmioDmnK/lupTnlKjmjqjov5vkuK3lv4PvvIjmt7HlnLPvvIkgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vdG9waWNzL3NoZW56aGVuLWFpKSB8IOWQpiB8IOWQpiB8CnwgMjAyNuWFt+i6q+aZuuiDvTUw5Lq66K665Z2b5aSP5a2j5bOw5LyaIHwgMjAyNi0wNy0yOSAwOTowMCAtIDIwMjYtMDctMzAgMTg6MDAgfCDljJfkuqwgfCDljJfkuqzmnJ3pmLPljLrvvIjlrqHmoLjlkI7nn63kv6HpgJrnn6XvvIkgfCDlhbfouqvkuYvlrrbjgIHmipXotYTlrrbnvZEgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvMjAyNi1qdS1zaGVuLXpoaS1uZW5nLTUwLXJlbi1sdW4tdGFuLXhpYS1qaS1mZW5nLWh1aSkgfCDlkKYgfCDlkKYgfAp8IDIwMjbnrKzkupTlsYrkuK3lm73msrnmsJTkurrlt6Xmmbrog73np5HmioDlpKfkvJogfCAyMDI2LTA3LTMwIC0gMjAyNi0wOC0wMSB8IOWMl+S6rCB8IOWMl+S6rOaYjOW5syB8IOS4reWbveefs+ayueWkp+Wtpu+8iOWMl+S6rO+8ieetiSB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lm9pbGdhc2FpLmNvbS8pIHwg5ZCmIHwg5ZCmIHwKfCBUaUQyMDI26LSo6YeP56ue5LqJ5Yqb5aSn5Lya77yaQUnljp/nlJ/ml7bku6PnmoTotKjph4/mlrDojIPlvI8gfCAyMDI2LTA3LTMwIDEwOjAwIC0gMjAyNi0wOC0wMSAxNzoxNSB8IOWMl+S6rCB8IOWMl+S6rCB8IOS4reWFs+adkeaZuuiBlOi9r+S7tuacjeWKoeS4mui0qOmHj+WIm+aWsOiBlOebnyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vaXRrbm93bGVkZ2V6b25lLmNvbS9jbi9ldmVudC90aWQyMDI2LykgfCDmmK8gfCDmmK8gfAp8IDIwMjbkurrlt6Xmmbrog73kuqflk4HlupTnlKjljZrop4jkvJrvvIgyMDI25pm65Y2a5Lya77yJIHwgMjAyNi0wNy0zMCAtIDIwMjYtMDgtMDEgfCDoi4/lt54gfCDoi4/lt57lm73pmYXljZrop4jkuK3lv4MgfCAyMDI25pm65Y2a5Lya57uE5aeU5LyaIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cuc2lwYWMuZ292LmNuL3N6Z3l5cS8yMDI2MDd6YmgvMjAyNjA3emJoLnNodG1sKSB8IOWQpiB8IOWQpiB8Cnwg5Lq65bel5pm66IO95Yib5paw5Li76aKY5rKZ6b6Z772c5pm65L2T5YWx55Sf77yM5Yib5paw6amx5YqoQUnkuqfkuJrljJYgfCAyMDI2LTA3LTMxIDEzOjAwIC0gMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfmtabkuJzlvKDmsZ/mqKHlipvnpL7ljLpUMeaooeWKm+a6kDXlsYI1MTLkvJrorq7lrqQgfCDliqjngrnnp5HmioAgVGVjaE5vZGUgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvcmVuLWdvbmctemhpLW5lbmctY2h1YW5nLXhpbi16aHUtdGktc2hhLWxvbmcpIHwg5ZCmIHwg5ZCmIHwKfCDigJzkurrlt6Xmmbrog70r4oCd5a6e5oiY5bqU55So5LiO5Lqn5Lia5Yib5paw6K665Z2b5pqo56ys5Y2B5Zub5bGK5Yib5paw5Yib5Lia5b2x5ZON5Yqb5bOw5Lya5Y2X5Lqs5Lya6K6uIHwgMjAyNi0wNy0zMSB8IOWNl+S6rCB8IOWNl+S6rOS4luiMgua7qOaxn+W4jOWwlOmhv+mFkuW6lyB8IOesrOWNgeWbm+WxiuWIm+aWsOWIm+S4muW9seWTjeWKm+WzsOS8mue7hOWnlOS8miB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8veGlvdXdhbmcuY24vY2llcy8pIHwg5ZCmIHwg5ZCmIHwKfCBWaWJlIENvZGluZ+S6p+WTgeWFseWIm+Wunui3te+9nE9QQ+WQjOihjOekvuWFqOWbveihjMK35p2t5bee56uZIHwgMjAyNi0wOC0wMSB8IOadreW3niB8IOadreW3niB8IE9QQ+WQjOihjOekviB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC8xODcwMDQxNjY3NDAwKSB8IOWQpiB8IOWQpiB8Cnwg56uv5L6n6YeN5p6Ewrflhbfouqvml6DnlYzigJTigJTnq6/kvqflhbfouqvmmbrog73mioDmnK/mspnpvpkgfCAyMDI2LTA4LTAxIDEzOjIwIC0gMTc6MzAgfCDmt7HlnLMgfCDmt7HlnLPlrp3lronljLrmlrDlronooZfpgZPlhbTmtbfkuIDot68xOeWPt+WJjea1t0hPUOWbvemZhTE5MDHlrqQgfCDkuprku7/mmbrog73np5HmioAgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvZHVhbi1jZS16aG9uZy1nb3UtanUtc2hlbi13dS1qaWUtZHVhbi1jZS1qdS1zaGVuLXpoaS1uZW5nLWppKSB8IOaYryB8IOaYryB8CnwgQUnnnJ/og73luK7kvaDosIPpgJrlvIDlj5Hmnb/lkJfvvJ8gfCAyMDI2LTA4LTAxIDE1OjAwIC0gMjAyNi0wOC0wMiAxNzowMCB8IOS4iua1tyB8IOS4iua1t+WMl+S4reeOr+S4reW/gzHmoIsyM+alvCB8IOmAoOeJqea9reOAgVByb2JlcyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9haS16aGVuLW5lbmctYmFuZy1uaS10aWFvLXRvbmcta2FpLWZhLWJhbi1tYSkgfCDmmK8gfCDlkKYgfAp8IOesrOS6jOWxik5WSURJQSBER1ggU3Bhcmvpu5HlrqLmnb7mgLvlhrPotZsgfCAyMDI2LTA4LTAyIDEzOjMwIC0gMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfmnb7msZ/np5HmioDlvbHpg71BSeWIm+WItueUn+aAgeS4reW/g+Wkp+WOhSB8IOmYtui3g+aYn+i+sOOAgU5WSURJQSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9kaS1lci1qaWUtbnZpZGlhLWRneC1zcGFyay1oZWkta2Utc29uZy16b25nLWp1ZS1zYWkpIHwg5pivIHwg5pivIHwKfCDmipbpn7NBSeWIm+WPmOiAheiuoeWIkjIwMjbCt+m7keWuouadvuiBlOi1m++9nOi1m+mBk+S4ieWkp+WMuui1m+a4uOWbreS8miB8IDIwMjYtMDgtMDIgMTQ6MDAgLSAxNzozMCB8IOa3seWcsyB8IOa3seWcs+WNl+aWueenkeaKgOWkp+WtpuWbvemZheS8muiuruS4reW/gyB8IOaKlumfs0FJ5Yib5Y+Y6ICF6K6h5YiSIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly9saWFucHUuY29tL2V2ZW50L2RvdS15aW4tYWktY2h1YW5nLWJpYW4temhlLWppLWh1YS0yMDI2LWhlaS1rZS1zb25nLWxpYW4tc2FpKSB8IOWQpiB8IOaYryB8Cnwg6aaW5bGK5byA5rqQ6Iux5omN5aSP5Luk6JClIHwgMjAyNi0wOC0wMyAtIDIwMjYtMDgtMDfvvIg45pyIM+aXpeWcqOaUtumbhueql+WPo+WGheW8gOiQpe+8iSB8IOS4iua1tyB8IOS4iua1t+S6pOmAmuWkp+WtpuOAgeaykOabpuiCoeS7vSB8IOaykOabpuiCoeS7veOAgeS4reWbveWFieWNjuenkeaKgOWfuumHkeS8muOAgeS4iua1t+S6pOmAmuWkp+WtpiB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vZGV2ZWxvcGVyLm1ldGF4LXRlY2guY29tL2FjdGl2aXRpZXMvMTgpIHwg5pivIHwg5pivIHwKfCA3LjI5IOWMl+S6rCBBSSDmkJ7pkrEgJiDmlbTmtLvkuJPlnLogU29jaWFsIE1peGVyIHwgMjAyNi0wNy0yOSAxODowMC0yMjowMCB8IOWMl+S6rCB8IOWMl+S6rOaguOW/g+WVhuWciO+8iOWFt+S9k+WcsOeCueaKpeWQjeWQjumAmuefpe+8iSB8IER1b0R1b0xhbmTjgIFHZW4yIE1vb24gfCDku5jotLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jb20vby81Y0paaEFsdmZYRykgfCDlkKYgfCDlkKYgfAp8IDIwMjYg5p2t5beeIEFJIOWzsOS8miB8IDIwMjYtMDctMjkgfCDmna3lt54gfCDmtZnmsZ/lub/nlLXCt+a1meaxn+WbvemZheW9seinhuS4reW/gyB8IOS4reWbveiTneS6uuW3peaZuuiDveWtpumZoiB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHA6Ly94aHNsaW5rLmNuL28vN0hJUlQ3WmpEc2QpIHwg5ZCmIHwg5ZCmIHwKfCDigJxBSea8q+a4uOW8leWKm+KAnTIwMjblhajnkIPmuLjmiI8mQUnmvKvliafliJvkuJrot6/mvJTlpKfkvJogfCAyMDI2LTA3LTI5IDEzOjAwLTE4OjAwIHwg5LiK5rW3IHwg5oql5ZCN5ZCO5Y+v5p+l55yL6K+m57uG5Zyw5Z2AIHwg5ri45oiP5a215YyW5ZmoIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cuaHVvZG9uZ3hpbmcuY29tL2V2ZW50Lzk4NjgyNTE0NzMwMDApIHwg5ZCmIHwg5ZCmIHwKfCDkvaDnmoQgQUkg6aG555uu77yM56a76KKr55yL6KeB5Y+q5beu5LiA5qyhIERlbW8gRGF5IHwgMjAyNi0wNy0zMCAxNDowMC0xNzozMCB8IOadreW3niB8IOiJr+a4muaVsOaglua5viBBSSvkuqfkuJrnpL7ljLogfCDoia/muJrmlbDmoJbmub4gLyDpnZLmnaUgQW5XIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cDovL3hoc2xpbmsuY24vby82ZkVUY1FzbkVJbykgfCDlkKYgfCDlkKYgfAp8IDIwMjbkvIHkuJpBSSBBZ2VudOinhOaooeWMluiQveWcsOWzsOS8miB8IDIwMjYtMDctMzAgMTM6MzAtMTc6MDAgfCDmna3lt54gfCDmu6jmsZ/lvIDlhYPlkI3pg73phZLlupfvvIjmu6jmsZ/ljLrmtabmsr/ooZfpgZPlsqnlpKfmiL/lt7c1OeWPt+S5nea0suS4reW/g0Hluqcx5qW877yJIHwg572R5piT5pm65LyB44CB5ZCI5ZCI5L+h5oGv44CBZeetvuWuneOAgeiHtOi/nOS6kuiBlCB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC8yODY4NDQxNDYzMTAwKSB8IOWQpiB8IOaYryB8CnwgQUnliJvkuJrogIXpm4bnu5PvvIHlvZLlv4PosLdQSVRDSOS6uuW3peaZuuiDveS4k+WcuiB8IDIwMjYtMDctMzAgMTM6MzAtMTY6MDAgfCDkuIrmtbcgfCDkuIrmtbfmnajmtablm73lrprkuJzot68yMDDlj7cy5Y+35qW8NealvCB8IOW9kuW/g+iwtyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC84ODY3NjY2MDk2MTExKSB8IOWQpiB8IOWQpiB8Cnwg5bCP6ZWH5Lya5a6i5Y6F77ya5a+56K+d5qyn5rSy5Lq65bel5pm66IO95aSn5Lya5Li75bitIFVsaXNlcyBDb3J0w6lzIHwgMjAyNi0wNy0zMCAxNjozMCB8IOS4iua1tyB8IEFJ5bCP6ZWH5pyN5Yqh5Lit5b+DM0bot6/mvJTnqbrpl7TvvIjmtbfnp5Hot68xNjUw5Y+377yJIHwg5byg5rGfQUnliJvmlrDlsI/plYfnlJ/mgIHlhazlj7ggfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcy94MkVzQUJzYVZtOGNwMF9ucnlMb2ZBKSB8IOaYryB8IOaYryB8CnwgNzMw5LiK5rW3LUFnZW506L+b5YWl55yf5a6e6KGM5Lia5a6e5oiY5o+t56eY772c6Z2e5YehT3BlbmRheSB8IDIwMjYtMDctMzAgIHwg5LiK5rW3IHwg5LiK5rW35biC5b6Q5rGH5Yy655Sw5p6X6LevMTky5Y+3IMK3IOS6kei1m+epuumXtCB8IOWKoOWvhuWOqOaIvyDDlyDpnZ7lh6HkuqfnoJQgw5cg5LqR6LWb56m66Ze0IHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly91bmlxdWVibG9vbS5jbi9hY3Rpdml0aWVzL2FnZW50aWNub3cwMykgfCDlkKYgfCDlkKYgfAp8IOWMl+S6rCBBSSDoi6bnk5zlpKfkvJrvvJpBSSBEZW1vIENsdWIg5byA5pS+6bqmIFZvbC4wMiB8IDIwMjYtMDctMzAgMTk6MzAtMjE6MzAgfCDljJfkuqwgfCDlroflrpnlrqLljoXvvIjmtbfmt4DljLrljY7muIXllYbliqHkvJrppoYxNuWxgjE2MDFC77yJIHwg5a6H5a6Z5a6i5Y6FIC8g5py65Zmo5Y+j6KKLIC8g56GF5Z+65YWs56S+IFNpbGljb24gTmV4dXMgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jbi9vLzJlSnhoTERSTjFEKSB8IOWQpiB8IOWQpiB8Cnwg6ZmG5a625Zi05pWw5a2mICYgQUkgJiDnp5HmioDooYzkuJrogZrkvJogNy4zMCB8IDIwMjYtMDctMzAg5pma5LiKIHwg5LiK5rW3IHwg6ZmG5a625Zi0IHwgRnJhbmvnmoTkvJrlrqLljoUgfCDlhY3otLkgfCBb5oql5ZCNXShodHRwOi8veGhzbGluay5jbi9vLzFpdXhKcllKdFN6KSB8IOaYryB8IOWQpiB8CnwgTmV4dCBXYXZlIFx8IEFJIOaZuuiDveehrOS7tuWHuua1tyBUYWxrcyB8IDIwMjYtMDctMzEgMTM6MzAtMTc6MDAgfCDkuIrmtbcgfCDkuIrmtbfph5HojILlkJvmgqblpKfphZLlupcgNTTmpbzmsLTnk7bljoUgXHwg5LiK5rW35biC5rWm5Lic5paw5Yy65LiW57qq5aSn6YGTIDg4IOWPtyjph5HojILlpKfljqYgMyDlj7fpl6gpIHwg6Zuo5p6c6Leo5aKD44CBTWV0YSB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vbGlhbnB1LmNvbS9ldmVudC9uZXh0LXdhdmUtYWktemhpLW5lbmcteWluZy1qaWFuLWNodS1oYWktdGFsa3MpIHwg5ZCmIHwg5pivIHwKfCDkurrlt6Xmmbrog73liJvmlrDkuLvpopjmspnpvpkgXHwg5pm65L2T5YWx55Sf77yM5Yib5paw6amx5YqoIEFJIOS6p+S4muWMliB8IDIwMjYtMDctMzEgMTQ6MDAtMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbcgwrcg5rWm5Lic5paw5Yy65byg5rGf5qih5Yqb56S+5Yy6IFQxIOaooeWKm+a6kCA1IOWxgiA1MTIg5Lya6K6u5a6kIHwg5Yqo54K556eR5oqAIHRlY2hub2Rl44CBQkVZT05EIEVYUE8gfCDlhY3otLkgfCBb5oql5ZCNXShodHRwczovL2xpYW5wdS5jb20vZXZlbnQvcmVuLWdvbmctemhpLW5lbmctY2h1YW5nLXhpbi16aHUtdGktc2hhLWxvbmcpIHwg5ZCmIHwg5ZCmIHwKfCBPcGVuTWluZCBBSeaZuuiDveS9k+aXtuS7o+S8geS4mue7hOe7h+e7k+aehOaWsOiMg+W8j+WzsOS8miB8IDIwMjYtMDctMzEgMTM6MzAtMTc6MzAgfCDkuIrmtbcgfCDkuIrmtbfpu4TmtabCt+S6uuawkeW5v+WcuiB8IE9wZW5NaW5kIEV2ZW50cyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vaGR4dS5jbi8xTDl2aSkgfCDlkKYgfCDlkKYgfAp8IOa0u+WKqOmihOWRiu+9nOaZuua6kC9UaWxlUlQv6IW+6K6vL+WNjuS4ui/mmbrlhYPliJvmlrDlkIzlj7DvvIzlhbHmjqIgQUkg57yW6K+R55qE5aSa5bGC57qn5Y2P5ZCM5LyY5YyWIHwgMjAyNi0wOC0wMSAxMzozMC0xNzozMCB8IOWMl+S6rCB8IOS4reWFs+adkeWIm+S4muWkp+ihlzEy5Y+35qW85LqU5bGC5aSa5Yqf6IO95Y6FIHwgSHlwZXJBSei2heelnue7jyB8IOS7mOi0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC83ODY3Njg5MzMzNTAwKSB8IOaYryB8IOaYryB8Cnwg5LiK5rW35a2m5pyv6YWS5ZCn772c5LuO6I+y5bCU5YW55aWW5YiwIEFJNFMgfCAyMDI2LTA4LTAxIDE0OjAwIHwg5LiK5rW3IHwg5LiK5rW35ryV5rKz5rO+77yM5YW35L2T5Zyw54K55Lul5Li75Yqe5pa56YCa55+l5Li65YeGIHwg5LiK5rW35a2m5pyv6YWS5ZCnIHwg5YWN6LS5IHwgW+aKpeWQjV0oaHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL2V4cGxvcmUvNmE2NWE4YTEwMDAwMDAwMDA1MDNhNGMwP3hzZWNfdG9rZW49QUI5VXlRbF9lMXZKUExBMkxya2d0WkhSaFd1RG55Mk1ZM0hYT3FxNko4RGswJTNEKSB8IOaYryB8IOWQpiB8CnwgOOaciDHml6XljJfkuqxUaGUgSEVSZ2VuY3k6IOWlueihjOWKqO+8jOWNs+acquadpS0gQUnml7bku6PnmoTkurrmnKzpooblr7zlipvorrrlnZsgfCAyMDI2LTA4LTAxIDE0OjAwLTE3OjAwIHwg5YyX5LqsIHwg5oql5ZCN5ZCO5Y+v5p+l55yL6K+m57uG5Zyw5Z2AIHwg5aW55Y6f5YqbU2hlUmV3aXJlcyB8IOWFjei0uSB8IFvmiqXlkI1dKGh0dHBzOi8vd3d3Lmh1b2Rvbmd4aW5nLmNvbS9ldmVudC82ODY5NDMwNDc0OTAwKSB8IOWQpiB8IOWQpiB8CnwgQ2hpbmFKb3kgQWZ0ZXJwYXJ0eSZEZW1vRGF5OiBUaGUgRnV0dXJlIG9mIEFJLXBvd2VyZWQgUGFuLUVudGVydGFpbm1lbnQgfCAyMDI2LTA4LTAxIDEwOjMwLTEzOjMwIHwg5LiK5rW3IHwgU2hhbmcgSGFpIFNoaSB8IEVwaWNDb25uZWN0b3IgfCDku5jotLkgfCBb5oql5ZCNXShodHRwczovL2x1bWEuY29tL2NoaW5hSm95YWZ0ZXJwYXJ0eSkgfCDlkKYgfCDmmK8gfAo8IS0tIENVUlJFTlRfV0VFS19UQUJMRTpFTkQgLS0+CgrlrozmlbTnmoTmnKzlkajmlbDmja7op4EgW2BkYXRhLzIwMjYtMDctMjguY3N2YF0oZGF0YS8yMDI2LTA3LTI4LmNzdinjgIIKCiMjIOWOhuWPsuaVsOaNrgoK5Y6G5Y+y5ZGo5b+r54Wn5ZKM6ZW/5pyf5rS75Yqo5pWw5o2u57uf5LiA5pS+5ZyoIFtgZGF0YS9gXShkYXRhLykg55uu5b2V5Lit77yaCgotIGAyMDI2LTA3LTIxLmNzdmDjgIFgMjAyNi0wNy0xNC5jc3ZgIOetie+8muaMieWRqOS/neWtmOeahOS4jeWPr+WPmOW/q+eFpwotIGBsb25nLXRlcm0uY3N2YO+8mui3qOWRqOaIlumVv+acn+acieaViOeahOa0u+WKqAoKIyMg5pu05paw5pa55byPCgpgYGBiYXNoCnB5dGhvbjMg5rS75Yqo5pel5Y6GL3N5bmNfZnJvbV9mZWlzaHUucHkKYGBgCgrov5DooYzliY3noa7kv53mnKzmnLogYGxhcmstY2xpYCDlt7LlrozmiJDpo57kuabnlKjmiLfmjojmnYPjgILmm7TmlrDlkI7mo4Dmn6UgQ1NWIGRpZmbvvIzlho3mj5DkuqTkuIDkuKrnsbvkvLwgYGRhdGEoY2FsZW5kYXIpOiB1cGRhdGUgMjAyNi0wNy0yOGAg55qEIGNvbW1pdOOAggoK6L+b5YWl5paw55qE5LiA5ZGo5pe277yM5Zyo6ISa5pys55qEIGBUQUJMRVNgIOS4reWinuWKoOaWsOWRqOihqO+8jOW5tuWwhiBgQ1VSUkVOVF9XRUVLYCDmlLnkuLrmlrDlkajml6XmnJ/vvJvohJrmnKzkvJrlkIzmraUgQ1NWIOW5tuiHquWKqOWIt+aWsOacrOiKgiBSRUFETUUg6KGo5qC844CCCg== \ No newline at end of file +# AI Infra 活动日历 + +面向 AI Infra 从业者的活动信息汇总,持续整理国内线下、线上以及相关技术社区活动。 + +数据来源于[飞书活动日历](https://lcnj2mkxwom9.feishu.cn/wiki/PmSOwWMbNi2CzXkdpfNchHzFnif?from=from_copylink),每周更新一次。仓库保留历史周快照,方便查看活动信息的变化。 + +## 本周活动(2026-07-28) + + +| 活动名称 | 时间 | 城市 | 地点 | 主办方 | 费用 | 报名链接 | AI Infra | 热门 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 2026可信云大会暨首届Token云服务大会 | 2026-07-28 09:00 - 2026-07-29 18:00 | 北京 | 北京中关村国家自主创新示范区会议中心 | 中国通信标准化协会等 | 免费 | [报名](https://www.huodongxing.com/event/9867533540000) | 是 | 是 | +| FAIR plus × 国先 Demo Hub 第八期 | 2026-07-28 14:00 - 17:30 | 深圳 | 深圳福田河套(报名后获取详细地址) | 深圳市机器人协会、国际先进技术应用推进中心(深圳) | 免费 | [报名](https://lianpu.com/topics/shenzhen-ai) | 否 | 否 | +| 2026具身智能50人论坛夏季峰会 | 2026-07-29 09:00 - 2026-07-30 18:00 | 北京 | 北京朝阳区(审核后短信通知) | 具身之家、投资家网 | 免费 | [报名](https://lianpu.com/event/2026-ju-shen-zhi-neng-50-ren-lun-tan-xia-ji-feng-hui) | 否 | 否 | +| 2026第五届中国油气人工智能科技大会 | 2026-07-30 - 2026-08-01 | 北京 | 北京昌平 | 中国石油大学(北京)等 | 付费 | [报名](https://www.oilgasai.com/) | 否 | 否 | +| TiD2026质量竞争力大会:AI原生时代的质量新范式 | 2026-07-30 10:00 - 2026-08-01 17:15 | 北京 | 北京 | 中关村智联软件服务业质量创新联盟 | 付费 | [报名](https://itknowledgezone.com/cn/event/tid2026/) | 是 | 是 | +| 2026人工智能产品应用博览会(2026智博会) | 2026-07-30 - 2026-08-01 | 苏州 | 苏州国际博览中心 | 2026智博会组委会 | 免费 | [报名](https://www.sipac.gov.cn/szgyyq/202607zbh/202607zbh.shtml) | 否 | 否 | +| 人工智能创新主题沙龙|智体共生,创新驱动AI产业化 | 2026-07-31 13:00 - 17:30 | 上海 | 上海浦东张江模力社区T1模力源5层512会议室 | 动点科技 TechNode | 免费 | [报名](https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long) | 否 | 否 | +| “人工智能+”实战应用与产业创新论坛暨第十四届创新创业影响力峰会南京会议 | 2026-07-31 | 南京 | 南京世茂滨江希尔顿酒店 | 第十四届创新创业影响力峰会组委会 | 免费 | [报名](https://xiouwang.cn/cies/) | 否 | 否 | +| Vibe Coding产品共创实践|OPC同行社全国行·杭州站 | 2026-08-01 | 杭州 | 杭州 | OPC同行社 | 免费 | [报名](https://www.huodongxing.com/event/1870041667400) | 否 | 否 | +| 端侧重构·具身无界——端侧具身智能技术沙龙 | 2026-08-01 13:20 - 17:30 | 深圳 | 深圳宝安区新安街道兴海一路19号前海HOP国际1901室 | 亚仿智能科技 | 免费 | [报名](https://lianpu.com/event/duan-ce-zhong-gou-ju-shen-wu-jie-duan-ce-ju-shen-zhi-neng-ji) | 是 | 是 | +| AI真能帮你调通开发板吗? | 2026-08-01 15:00 - 2026-08-02 17:00 | 上海 | 上海北中环中心1栋23楼 | 造物潭、Probes | 免费 | [报名](https://lianpu.com/event/ai-zhen-neng-bang-ni-tiao-tong-kai-fa-ban-ma) | 是 | 否 | +| 第二届NVIDIA DGX Spark黑客松总决赛 | 2026-08-02 13:30 - 17:30 | 上海 | 上海松江科技影都AI创制生态中心大厅 | 阶跃星辰、NVIDIA | 免费 | [报名](https://lianpu.com/event/di-er-jie-nvidia-dgx-spark-hei-ke-song-zong-jue-sai) | 是 | 是 | +| 抖音AI创变者计划2026·黑客松联赛|赛道三大区赛游园会 | 2026-08-02 14:00 - 17:30 | 深圳 | 深圳南方科技大学国际会议中心 | 抖音AI创变者计划 | 免费 | [报名](https://lianpu.com/event/dou-yin-ai-chuang-bian-zhe-ji-hua-2026-hei-ke-song-lian-sai) | 否 | 是 | +| 首届开源英才夏令营 | 2026-08-03 - 2026-08-07(8月3日在收集窗口内开营) | 上海 | 上海交通大学、沐曦股份 | 沐曦股份、中国光华科技基金会、上海交通大学 | 免费 | [报名](https://developer.metax-tech.com/activities/18) | 是 | 是 | +| 7.29 北京 AI 搞钱 & 整活专场 Social Mixer | 2026-07-29 18:00-22:00 | 北京 | 北京核心商圈(具体地点报名后通知) | DuoDuoLand、Gen2 Moon | 付费 | [报名](http://xhslink.com/o/5cJZhAlvfXG) | 否 | 否 | +| 2026 杭州 AI 峰会 | 2026-07-29 | 杭州 | 浙江广电·浙江国际影视中心 | 中国蓝人工智能学院 | 免费 | [报名](http://xhslink.cn/o/7HIRT7ZjDsd) | 否 | 否 | +| “AI漫游引力”2026全球游戏&AI漫剧创业路演大会 | 2026-07-29 13:00-18:00 | 上海 | 报名后可查看详细地址 | 游戏孵化器 | 免费 | [报名](https://www.huodongxing.com/event/9868251473000) | 否 | 否 | +| 你的 AI 项目,离被看见只差一次 Demo Day | 2026-07-30 14:00-17:30 | 杭州 | 良渚数栖湾 AI+产业社区 | 良渚数栖湾 / 青来 AnW | 免费 | [报名](http://xhslink.cn/o/6fETcQsnEIo) | 否 | 否 | +| 2026企业AI Agent规模化落地峰会 | 2026-07-30 13:30-17:00 | 杭州 | 滨江开元名都酒店(滨江区浦沿街道岩大房巷59号九洲中心A座1楼) | 网易智企、合合信息、e签宝、致远互联 | 免费 | [报名](https://www.huodongxing.com/event/2868441463100) | 否 | 是 | +| AI创业者集结!归心谷PITCH人工智能专场 | 2026-07-30 13:30-16:00 | 上海 | 上海杨浦国定东路200号2号楼5楼 | 归心谷 | 免费 | [报名](https://www.huodongxing.com/event/8867666096111) | 否 | 否 | +| 小镇会客厅:对话欧洲人工智能大会主席 Ulises Cortés | 2026-07-30 16:30 | 上海 | AI小镇服务中心3F路演空间(海科路1650号) | 张江AI创新小镇生态公司 | 免费 | [报名](https://mp.weixin.qq.com/s/x2EsABsaVm8cp0_nryLofA) | 是 | 是 | +| 730上海-Agent进入真实行业实战揭秘|非凡Openday | 2026-07-30 | 上海 | 上海市徐汇区田林路192号 · 云赛空间 | 加密厨房 × 非凡产研 × 云赛空间 | 免费 | [报名](https://uniquebloom.cn/activities/agenticnow03) | 否 | 否 | +| 北京 AI 苦瓜大会:AI Demo Club 开放麦 Vol.02 | 2026-07-30 19:30-21:30 | 北京 | 宇宙客厅(海淀区华清商务会馆16层1601B) | 宇宙客厅 / 机器口袋 / 硅基公社 Silicon Nexus | 免费 | [报名](http://xhslink.cn/o/2eJxhLDRN1D) | 否 | 否 | +| 陆家嘴数学 & AI & 科技行业聚会 7.30 | 2026-07-30 晚上 | 上海 | 陆家嘴 | Frank的会客厅 | 免费 | [报名](http://xhslink.cn/o/1iuxJrYJtSz) | 是 | 否 | +| Next Wave \| AI 智能硬件出海 Talks | 2026-07-31 13:30-17:00 | 上海 | 上海金茂君悦大酒店 54楼水瓶厅 \| 上海市浦东新区世纪大道 88 号(金茂大厦 3 号门) | 雨果跨境、Meta | 免费 | [报名](https://lianpu.com/event/next-wave-ai-zhi-neng-ying-jian-chu-hai-talks) | 否 | 是 | +| 人工智能创新主题沙龙 \| 智体共生,创新驱动 AI 产业化 | 2026-07-31 14:00-17:30 | 上海 | 上海 · 浦东新区张江模力社区 T1 模力源 5 层 512 会议室 | 动点科技 technode、BEYOND EXPO | 免费 | [报名](https://lianpu.com/event/ren-gong-zhi-neng-chuang-xin-zhu-ti-sha-long) | 否 | 否 | +| OpenMind AI智能体时代企业组织结构新范式峰会 | 2026-07-31 13:30-17:30 | 上海 | 上海黄浦·人民广场 | OpenMind Events | 付费 | [报名](https://hdxu.cn/1L9vi) | 否 | 否 | +| 活动预告|智源/TileRT/腾讯/华为/智元创新同台,共探 AI 编译的多层级协同优化 | 2026-08-01 13:30-17:30 | 北京 | 中关村创业大街12号楼五层多功能厅 | HyperAI超神经 | 付费 | [报名](https://www.huodongxing.com/event/7867689333500) | 是 | 是 | +| 上海学术酒吧|从菲尔兹奖到 AI4S | 2026-08-01 14:00 | 上海 | 上海漕河泾,具体地点以主办方通知为准 | 上海学术酒吧 | 免费 | [报名](https://www.xiaohongshu.com/explore/6a65a8a1000000000503a4c0?xsec_token=AB9UyQl_e1vJPLA2LrkgtZHRhWuDny2MY3HXOqq6J8Dk0%3D) | 是 | 否 | +| 8月1日北京The HERgency: 她行动,即未来- AI时代的人本领导力论坛 | 2026-08-01 14:00-17:00 | 北京 | 报名后可查看详细地址 | 她原力SheRewires | 免费 | [报名](https://www.huodongxing.com/event/6869430474900) | 否 | 否 | +| ChinaJoy Afterparty&DemoDay: The Future of AI-powered Pan-Entertainment | 2026-08-01 10:30-13:30 | 上海 | Shang Hai Shi | EpicConnector | 付费 | [报名](https://luma.com/chinaJoyafterparty) | 否 | 是 | + + +完整的本周数据见 [`data/2026-07-28.csv`](data/2026-07-28.csv)。 + +## 历史数据 + +历史周快照和长期活动数据统一放在 [`data/`](data/) 目录中: + +- `2026-07-21.csv`、`2026-07-14.csv` 等:按周保存的不可变快照 +- `long-term.csv`:跨周或长期有效的活动 + +## 更新方式 + +```bash +python3 活动日历/sync_from_feishu.py +``` + +运行前确保本机 `lark-cli` 已完成飞书用户授权。更新后检查 CSV diff,再提交一个类似 `data(calendar): update 2026-07-28` 的 commit。 + +进入新的一周时,在脚本的 `TABLES` 中增加新周表,并将 `CURRENT_WEEK` 改为新周日期;脚本会同步 CSV 并自动刷新本节 README 表格。 -- 2.34.1 From 037dcdbebea02fe49356cd9769644244aeebbe30 Mon Sep 17 00:00:00 2001 From: cory Date: Tue, 28 Jul 2026 15:40:03 +0800 Subject: [PATCH 5/5] fix(calendar): restore sync script text content --- 活动日历/sync_from_feishu.py | 108 ++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 1 deletion(-) diff --git a/活动日历/sync_from_feishu.py b/活动日历/sync_from_feishu.py index 4b543cf..14a8301 100644 --- a/活动日历/sync_from_feishu.py +++ b/活动日历/sync_from_feishu.py @@ -1 +1,107 @@ -IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJFeHBvcnQgdGhlIGFjdGl2aXR5LWNhbGVuZGFyIEJhc2UgaW50byB3ZWVrbHkgQ1NWIHNuYXBzaG90cy4KClJlcXVpcmVzIGEgbG9nZ2VkLWluIGxhcmstY2xpIHVzZXIgaWRlbnRpdHkuICBUaGUgQmFzZSB0b2tlbiBhbmQgdGFibGUgSURzIGFyZQppbnRlbnRpb25hbGx5IGtlcHQgaGVyZSBhcyBwdWJsaWMgcmVzb3VyY2UgaWRlbnRpZmllcnM7IG5vIGFjY2VzcyB0b2tlbiBpcwpzdG9yZWQgaW4gdGhlIHJlcG9zaXRvcnkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IGNzdgppbXBvcnQganNvbgppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgoKQkFTRV9UT0tFTiA9ICJLWGp6YktlaXlhUjdsZXMya3FiY1duWXduZ1ciCkNVUlJFTlRfV0VFSyA9ICIyMDI2LTA3LTI4IgpUQUJMRVMgPSB7CiAgICBDVVJSRU5UX1dFRUs6ICJ0YmxiOGxwTXBISmFtVHh1IiwKICAgICIyMDI2LTA3LTIxIjogInRibDBJOEFRdGRVMHRnZEwiLAogICAgIjIwMjYtMDctMTQiOiAidGJsc0p6SEVqU3ZGeGdEMiIsCiAgICAiMjAyNi0wNy0wNyI6ICJ0YmxCRDcxdWVDTTZTUFhVIiwKICAgICIyMDI2LTA2LTMwIjogInRibG5EeXJHS2p3czFEQzYiLAogICAgIjIwMjYtMDYtMTYiOiAidGJscjhLYWo4bThISHRRUyIsCiAgICAiMjAyNi0wNi0xMSI6ICJ0YmwxT1JFMlB4VldSWlduIiwKICAgICJsb25nLXRlcm0iOiAidGJsaHN2NmtQODNJaWRGciIsCn0KRklFTERTID0gWyLmtLvliqjlkI3np7AiLCAiYWkgaW5mcmEiLCAi5Li75Yqe5pa5IiwgIuaKpeWQjemTvuaOpSIsICLmmK/lkKbmlLbotLkiLCAi5Zyw54K5IiwgIua0u+WKqOaXtumXtCIsICLln47luIIiLCAi54Ot6ZeoIl0KCgpkZWYgZmV0Y2godGFibGVfaWQ6IHN0cikgLT4gbGlzdFtsaXN0W29iamVjdF1dOgogICAgY29tbWFuZCA9IFsKICAgICAgICAibGFyay1jbGkiLCAiYmFzZSIsICIrcmVjb3JkLWxpc3QiLCAiLS1iYXNlLXRva2VuIiwgQkFTRV9UT0tFTiwKICAgICAgICAiLS10YWJsZS1pZCIsIHRhYmxlX2lkLCAiLS1saW1pdCIsICIyMDAiLCAiLS1mb3JtYXQiLCAianNvbiIsICItLWFzIiwgInVzZXIiLAogICAgXQogICAgZm9yIGZpZWxkIGluIEZJRUxEUzoKICAgICAgICBjb21tYW5kLmV4dGVuZChbIi0tZmllbGQtaWQiLCBmaWVsZF0pCiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjb21tYW5kLCBjaGVjaz1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpCiAgICBwYXlsb2FkID0ganNvbi5sb2FkcyhyZXN1bHQuc3Rkb3V0KQogICAgcmV0dXJuIHBheWxvYWRbImRhdGEiXVsiZGF0YSJdCgoKZGVmIHZhbHVlKGNlbGw6IG9iamVjdCkgLT4gc3RyOgogICAgaWYgaXNpbnN0YW5jZShjZWxsLCBsaXN0KToKICAgICAgICByZXR1cm4gIuOAgSIuam9pbihzdHIoaXRlbSkgZm9yIGl0ZW0gaW4gY2VsbCkKICAgIGlmIGlzaW5zdGFuY2UoY2VsbCwgYm9vbCk6CiAgICAgICAgcmV0dXJuICLmmK8iIGlmIGNlbGwgZWxzZSAi5ZCmIgogICAgcmV0dXJuICIiIGlmIGNlbGwgaXMgTm9uZSBlbHNlIHN0cihjZWxsKQoKCmRlZiBtYXJrZG93bl9jZWxsKGNlbGw6IHN0ciwgY29sdW1uOiBzdHIpIC0+IHN0cjoKICAgIGlmIGNvbHVtbiA9PSAi5oql5ZCN6ZO+5o6lIiBhbmQgY2VsbDoKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyIlwoKGh0dHBzPzovL1teKV0rKVwpIiwgY2VsbCkKICAgICAgICB1cmwgPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIGNlbGwKICAgICAgICByZXR1cm4gZiJb5oql5ZCNXSh7dXJsfSkiCiAgICByZXR1cm4gY2VsbC5yZXBsYWNlKCJ8IiwgIlxcfCIpLnJlcGxhY2UoIlxuIiwgIiAiKQoKCmRlZiB1cGRhdGVfcmVhZG1lKHJvd3M6IGxpc3RbbGlzdFtvYmplY3RdXSkgLT4gTm9uZToKICAgIHJlYWRtZSA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQgLyAiUkVBRE1FLm1kIgogICAgY29udGVudCA9IHJlYWRtZS5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKICAgIGNvbnRlbnQgPSByZS5zdWIociIjIyDmnKzlkajmtLvliqjvvIhbXu+8iV0r77yJIiwgZiIjIyDmnKzlkajmtLvliqjvvIh7Q1VSUkVOVF9XRUVLfe+8iSIsIGNvbnRlbnQsIGNvdW50PTEpCiAgICBjb250ZW50ID0gcmUuc3ViKAogICAgICAgIHIi5a6M5pW055qE5pys5ZGo5pWw5o2u6KeBIFxbYGRhdGEvW15gXStcLmNzdmBcXVwoZGF0YS9bXildK1wuY3N2XCnjgIIiLAogICAgICAgIGYi5a6M5pW055qE5pys5ZGo5pWw5o2u6KeBIFtgZGF0YS97Q1VSUkVOVF9XRUVLfS5jc3ZgXShkYXRhL3tDVVJSRU5UX1dFRUt9LmNzdinjgIIiLAogICAgICAgIGNvbnRlbnQsCiAgICAgICAgY291bnQ9MSwKICAgICkKICAgIHRhYmxlID0gWwogICAgICAgICJ8ICIgKyAiIHwgIi5qb2luKFsi5rS75Yqo5ZCN56ewIiwgIuaXtumXtCIsICLln47luIIiLCAi5Zyw54K5IiwgIuS4u+WKnuaWuSIsICLotLnnlKgiLCAi5oql5ZCN6ZO+5o6lIiwgIkFJIEluZnJhIiwgIueDremXqCJdKSArICIgfCIsCiAgICAgICAgInwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwiLAogICAgXQogICAgaW5kZXhlcyA9IHtuYW1lOiBpbmRleCBmb3IgaW5kZXgsIG5hbWUgaW4gZW51bWVyYXRlKEZJRUxEUyl9CiAgICBvcmRlciA9IFtpbmRleGVzW25hbWVdIGZvciBuYW1lIGluIFsi5rS75Yqo5ZCN56ewIiwgIua0u+WKqOaXtumXtCIsICLln47luIIiLCAi5Zyw54K5IiwgIuS4u+WKnuaWuSIsICLmmK/lkKbmlLbotLkiLCAi5oql5ZCN6ZO+5o6lIiwgImFpIGluZnJhIiwgIueDremXqCJdXQogICAgZm9yIHJvdyBpbiByb3dzOgogICAgICAgIGNlbGxzID0gW21hcmtkb3duX2NlbGwodmFsdWUocm93W2luZGV4XSksIEZJRUxEU1tpbmRleF0pIGZvciBpbmRleCBpbiBvcmRlcl0KICAgICAgICB0YWJsZS5hcHBlbmQoInwgIiArICIgfCAiLmpvaW4oY2VsbHMpICsgIiB8IikKICAgIHJlcGxhY2VtZW50ID0gIjwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOlNUQVJUIC0tPlxuIiArICJcbiIuam9pbih0YWJsZSkgKyAiXG48IS0tIENVUlJFTlRfV0VFS19UQUJMRTpFTkQgLS0+IgogICAgdXBkYXRlZCA9IHJlLnN1YihyIjwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOlNUQVJUIC0tPi4qPzwhLS0gQ1VSUkVOVF9XRUVLX1RBQkxFOkVORCAtLT4iLCByZXBsYWNlbWVudCwgY29udGVudCwgZmxhZ3M9cmUuUykKICAgIHJlYWRtZS53cml0ZV90ZXh0KHVwZGF0ZWQsIGVuY29kaW5nPSJ1dGYtOCIpCgoKZGVmIG1haW4oKSAtPiBOb25lOgogICAgcm9vdCA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQKICAgIGRhdGFfZGlyID0gcm9vdCAvICJkYXRhIgogICAgZGF0YV9kaXIubWtkaXIoZXhpc3Rfb2s9VHJ1ZSkKICAgIGN1cnJlbnRfcm93czogbGlzdFtsaXN0W29iamVjdF1dID0gW10KICAgIGZvciBuYW1lLCB0YWJsZV9pZCBpbiBUQUJMRVMuaXRlbXMoKToKICAgICAgICBmaWxlbmFtZSA9IGYie25hbWV9LmNzdiIKICAgICAgICBwYXRoID0gZGF0YV9kaXIgLyBmaWxlbmFtZQogICAgICAgIGlmIG5hbWUgIT0gQ1VSUkVOVF9XRUVLIGFuZCBwYXRoLmV4aXN0cygpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHJvd3MgPSBmZXRjaCh0YWJsZV9pZCkKICAgICAgICBpZiBuYW1lID09IENVUlJFTlRfV0VFSzoKICAgICAgICAgICAgY3VycmVudF9yb3dzID0gcm93cwogICAgICAgIHdpdGggcGF0aC5vcGVuKCJ3IiwgZW5jb2Rpbmc9InV0Zi04IiwgbmV3bGluZT0iIikgYXMgaGFuZGxlOgogICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGhhbmRsZSwgbGluZXRlcm1pbmF0b3I9IlxuIikKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KEZJRUxEUykKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhbW3ZhbHVlKGNlbGwpIGZvciBjZWxsIGluIHJvd10gZm9yIHJvdyBpbiByb3dzXSkKICAgICAgICBwcmludChmIndyb3RlIHtmaWxlbmFtZX06IHtsZW4ocm93cyl9IHJvd3MiKQogICAgdXBkYXRlX3JlYWRtZShjdXJyZW50X3Jvd3MpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo= \ No newline at end of file +#!/usr/bin/env python3 +"""Export the activity-calendar Base into weekly CSV snapshots. + +Requires a logged-in lark-cli user identity. The Base token and table IDs are +intentionally kept here as public resource identifiers; no access token is +stored in the repository. +""" + +from __future__ import annotations + +import csv +import json +import re +import subprocess +from pathlib import Path + + +BASE_TOKEN = "KXjzbKeiyaR7les2kqbcWnYwngW" +CURRENT_WEEK = "2026-07-28" +TABLES = { + CURRENT_WEEK: "tblb8lpMpHJamTxu", + "2026-07-21": "tbl0I8AQtdU0tgdL", + "2026-07-14": "tblsJzHEjSvFxgD2", + "2026-07-07": "tblBD71ueCM6SPXU", + "2026-06-30": "tblnDyrGKjws1DC6", + "2026-06-16": "tblr8Kaj8m8HHtQS", + "2026-06-11": "tbl1ORE2PxVWRZWn", + "long-term": "tblhsv6kP83IidFr", +} +FIELDS = ["活动名称", "ai infra", "主办方", "报名链接", "是否收费", "地点", "活动时间", "城市", "热门"] + + +def fetch(table_id: str) -> list[list[object]]: + command = [ + "lark-cli", "base", "+record-list", "--base-token", BASE_TOKEN, + "--table-id", table_id, "--limit", "200", "--format", "json", "--as", "user", + ] + for field in FIELDS: + command.extend(["--field-id", field]) + result = subprocess.run(command, check=True, capture_output=True, text=True) + payload = json.loads(result.stdout) + return payload["data"]["data"] + + +def value(cell: object) -> str: + if isinstance(cell, list): + return "、".join(str(item) for item in cell) + if isinstance(cell, bool): + return "是" if cell else "否" + return "" if cell is None else str(cell) + + +def markdown_cell(cell: str, column: str) -> str: + if column == "报名链接" and cell: + match = re.search(r"\((https?://[^)]+)\)", cell) + url = match.group(1) if match else cell + return f"[报名]({url})" + return cell.replace("|", "\\|").replace("\n", " ") + + +def update_readme(rows: list[list[object]]) -> None: + readme = Path(__file__).resolve().parent / "README.md" + content = readme.read_text(encoding="utf-8") + content = re.sub(r"## 本周活动([^)]+)", f"## 本周活动({CURRENT_WEEK})", content, count=1) + content = re.sub( + r"完整的本周数据见 \[`data/[^`]+\.csv`\]\(data/[^)]+\.csv\)。", + f"完整的本周数据见 [`data/{CURRENT_WEEK}.csv`](data/{CURRENT_WEEK}.csv)。", + content, + count=1, + ) + table = [ + "| " + " | ".join(["活动名称", "时间", "城市", "地点", "主办方", "费用", "报名链接", "AI Infra", "热门"]) + " |", + "| --- | --- | --- | --- | --- | --- | --- | --- | --- |", + ] + indexes = {name: index for index, name in enumerate(FIELDS)} + order = [indexes[name] for name in ["活动名称", "活动时间", "城市", "地点", "主办方", "是否收费", "报名链接", "ai infra", "热门"]] + for row in rows: + cells = [markdown_cell(value(row[index]), FIELDS[index]) for index in order] + table.append("| " + " | ".join(cells) + " |") + replacement = "\n" + "\n".join(table) + "\n" + updated = re.sub(r".*?", replacement, content, flags=re.S) + readme.write_text(updated, encoding="utf-8") + + +def main() -> None: + root = Path(__file__).resolve().parent + data_dir = root / "data" + data_dir.mkdir(exist_ok=True) + current_rows: list[list[object]] = [] + for name, table_id in TABLES.items(): + filename = f"{name}.csv" + path = data_dir / filename + if name != CURRENT_WEEK and path.exists(): + continue + rows = fetch(table_id) + if name == CURRENT_WEEK: + current_rows = rows + with path.open("w", encoding="utf-8", newline="") as handle: + writer = csv.writer(handle, lineterminator="\n") + writer.writerow(FIELDS) + writer.writerows([[value(cell) for cell in row] for row in rows]) + print(f"wrote {filename}: {len(rows)} rows") + update_readme(current_rows) + + +if __name__ == "__main__": + main() -- 2.34.1