This commit is contained in:
2026-09-11 06:20:11 +08:00
parent 8065f42563
commit e80aa747e5
12 changed files with 396 additions and 1259 deletions

View File

@@ -0,0 +1,87 @@
---
title: "What SREs Should Automate — and Never Automate — with AI"
source: "https://hackernoon.com/what-sres-should-automate-and-never-automate-with-ai"
author:
- "[[Sai Joshitha Kathari]]"
published: 2026-08-27
created: 2026-09-10
description: "Automate based on impact and recoverability, not on whether the AI is technically capable of doing the task."
tags:
- "clippings"
---
**Five key takeaways:**
1. Automate based on impact and recoverability, not on whether the AI is technically capable of doing the task.
2. Alert triage, anomaly detection, incident summaries, capacity forecasting — these are the easy wins. Low risk, high value.
3. Production changes, incident command, security response, severity calls — keep a human's name on these. Always.
4. Reversibility and blast radius are better questions than "can the AI do this."
5. The goal isn't AI replacing engineers. It's AI clearing enough noise that engineers can actually think.
---
I've sat through the version of this conversation that sounds like a vendor pitch — AI triages everything, drafts your runbooks, predicts outages before they happen, and nobody gets paged at 2 a.m. anymore. I've also watched the other version happen in real time: an automated remediation script restarts the wrong service, confidently, at 11 p.m., and a 20-minute blip turns into a four-hour outage while everyone tries to figure out why the "fix" made things worse.
Both of those are real. AI is already inside SRE workflows whether or not anyone signed off on it — the question that actually matters is where it belongs, and where a human still needs to be the one holding the decision.
None of what follows comes from a whitepaper. It's from watching what breaks when teams move too fast with this stuff, and what quietly gets better when they don't.
## Reversibility and blast radius
Here's the mental model I keep coming back to before automating anything: can you undo it, and how bad is it if you're wrong?
Restarting a pod — reversible, low stakes. Deleting a database backup — not reversible, at all. Scaling a service up is easy to walk back. Silencing an alert for six hours is technically reversible too, except the six hours where something real happened and nobody saw it isn't something you get back.
Blast radius is the other half of it, and it's not the same thing as severity. A misclassified low-priority alert costs a few wasted minutes. A misrouted sev-1 costs an hour of response time during an active outage, while the right team sits there not knowing they should be paged. And blast radius scales with what the action touches — one service versus a shared piece of infrastructure everything depends on, even when both look equally "minor" on paper.
Anything with low reversibility and a wide blast radius shouldn't be running on autopilot. Anything reversible and contained is fair game. The stuff in between is where you actually need judgment — specifically, judgment from the people who'll be the ones on call when it goes sideways.
Notice this framing never asks whether the AI *can* do something. It asks what happens if it's wrong. That's the more useful question, and it's the one most teams skip.
## Where this actually works well
**Alert noise.** This is the least controversial win there is. Somewhere between 30 and 60% of production alerts are noise by the time a human sees them — duplicates, transients, things that resolved themselves three minutes ago. AI grouping related alerts, suppressing known-flapping signals, correlating spikes with recent deploys — worst case, something gets mislabeled and a human still catches it. Low blast radius, fully reversible. This is exactly the profile you want.
One catch: it only works well tuned to your environment, not a generic model. An alert that always fires right before a nightly batch job and clears itself a minute later is trivial to suppress — but only if the model actually knows about your batch schedule. Skip that step and you've just added a second layer of noise on top of the first.
**First drafts of runbooks and postmortems.** Runbook rot is one of the oldest problems in this field. The doc that was accurate in 2022 is a landmine now — nobody updates it, an incident hits, someone follows it anyway, and step four references a service that got decommissioned eight months ago. AI is genuinely good at pulling together a first draft from past incidents, change logs, whatever documentation exists. Same for postmortems — a draft that someone who actually lived through the incident reviews before it goes out saves real hours.
**Forecasting and anomaly detection.** This is pattern matching, and models are good at pattern matching. A holiday traffic spike that happens once a year gives engineers almost no reps to build intuition about — but a model trained across several years of that same spike has plenty. The important part: keep this as a recommendation a human acts on, not something that auto-provisions infrastructure on its own. The moment it stops informing a decision and starts making one, the blast radius changes.
**Narrow, well-understood auto-remediation.** This one comes with real caveats, but it earns its place. A specific service that needs a restart when it hits a known stuck state, a queue that needs draining past a defined threshold — fine, if the failure class is precisely defined, tested, and low-blast-radius by design. And there has to be a circuit breaker. If the fix doesn't work within a set window, it stops and escalates instead of retrying forever on a wrong diagnosis. Automation that keeps trying the same broken fix is worse than doing nothing.
## Where it doesn't belong
**Severity calls.** Get this wrong either direction and it costs you. A real sev-1 marked as low pulls in the wrong people at the wrong urgency while an SLA clock runs. A minor issue marked critical drags a response team into something that didn't need them at 3 a.m. AI can surface context and flag patterns worth escalating — but the actual call needs a name attached, someone accountable for it. "The model said it was low severity" doesn't hold up in a postmortem.
**Production changes without sign-off.** Config changes, scaling decisions, anything touching a database directly, restarts outside that narrow bounded case above — a human authorizes these. AI can prep the change, check it against known-good patterns, even simulate the blast radius. What it shouldn't do is decide the moment is right and pull the trigger itself.
**Security incidents.** Different risk shape entirely. Miss something real and an active compromise sits there while the system waits for more confirmation. False-positive and you've locked out legitimate engineers mid-response. AI correlating logs to surface signal fast — genuinely useful. Containment and escalation decisions — that needs someone who can weigh legal and business context a model was never trained on.
**Root cause, as a stated fact.** AI narrowing the search space by correlating deploy timing with metric shifts is useful groundwork. But writing "root cause: X" in a postmortem is a claim that shapes what the org fixes next and what it decides to ignore. Get that wrong because a correlation looked convincing, and the actual bug ships again next quarter.
**Who to escalate to.** This is context a model just doesn't have — who's already underwater tonight, what else is on fire across the org, whether the responding engineer's confidence is real or performed. Escalation is a trust call as much as a technical one.
## The thing nobody's measuring
There's a slower cost that never shows up in a single incident review: engineers stop building intuition when AI absorbs all the routine reps. The edge cases are exactly where judgment matters most — and they're exactly the cases you need practice on the boring stuff to be ready for. A team leaning hard on automation can look great for a long stretch, right up until something shows up that doesn't match anything the model — or the team — has seen before.
This isn't an argument against automating things. It's an argument for being honest about which reps you're willing to give away.
## A few practices worth adopting
- Decide, as a team, which categories of action AI can take alone versus which need a sign-off — decide this before an incident forces the question at 2 a.m.
- Keep an actual human accountable for anything irreversible. Not nominally "in the loop" — actually reviewing before it executes.
- Build in a circuit breaker for anything automated. If it doesn't work within a defined window, it escalates instead of retrying.
- Rotate people through the routine cases sometimes, even when AI could handle it, so the skill doesn't quietly disappear.
- Revisit the boundary as systems change. A failure class that was well-understood six months ago might not be anymore after an architecture shift.
Skip this and you end up with automation debt, eroded skills, and a production system nobody fully understands anymore — which is a worse place to be than where you started.
## Where this leaves things
It's not really a question of whether to use AI. It's whether you're using it somewhere judgment genuinely isn't needed, or somewhere it is and you've just decided waiting for a human is too slow.
One of those is a real force multiplier. The other is a liability with a delay timer on it.
---

View File

@@ -27,7 +27,7 @@ Product Trial/PoC Procedure
## **Deployment & Configuration**
[[ITOM Cloud AWS Account Overview]]
[[ITOM ESM Cloud Farm Information]]
[[Cloud DevOps/ITOM APM AppPluse Cloud Farm Information]]
[[ITOM APM AppPluse Cloud Farm Information]]
Cloud Deployment Automation
Product Provision Automation
@@ -57,6 +57,7 @@ Audit Compliance
Incident Management
Change Management
Service Health Page
Cloud DevOps
## **Customer Support**

View File

@@ -0,0 +1,280 @@
#sla #uptime #downtime
# SLA Downtime 计算详解
## 99.9% 与 99.99% 的区别和实际应用
---
## 一、SLA 基本概念
**SLA(Service Level Agreement,服务级别协议)** 是指服务提供商与客户之间约定的服务可用性标准。
### SLA 的计算公式
```
SLA % = (总时间 - 宕机时间) / 总时间 × 100%
反推宕机时间:
宕机时间 = 总时间 × (1 - SLA%)
```
**关键点:** SLA 99.9% 意味着允许 0.1% 的宕机时间,99.99% 意味着允许 0.01% 的宕机时间。
---
## 二、按月计算的 Downtime 时间
### 1. 月度总时长(以30天为例)
|单位|数值|
|---|---|
|总天数|30天|
|总小时数|30 × 24 = 720小时|
|总分钟数|30 × 24 × 60 = 43,200分钟|
|总秒数|30 × 24 × 60 × 60 = 2,592,000秒|
> 注:实际应用中,有些公司按月份天数计算(28-31天),此处以30天为标准示例。
---
## 三、SLA 99.9% 详解
### 计算公式
```
月度允许宕机时间 = 总时间 × (1 - 99.9%)
= 总时间 × 0.1%
= 总时间 × 0.001
```
### 具体数值
| | |
|---|---|
|Daily|1m 26s|
|Weekly|10m 4.8s|
|Monthly|43m 50s|
|Quarterly|2h 11m 29s|
|Yearly|8h 45m 57s|
### 月度详细计算示例
```
99.9% SLA 月度允许宕机时间:
方法一(按分钟):
宕机时间 = 43,200分钟 × 0.001 = 43.2 分钟
方法二(按秒钟):
宕机时间 = 2,592,000秒 × 0.001 = 2,592 秒 = 43分12秒
结论:一个月内最多可允许约 43分钟的宕机时间
```
### 99.9% 的通俗理解
- **"三个九"** 是常见的说法
- 一年内最长可宕机约 **8.76小时**(相当于一个工作日)
- 一月内最长可宕机约 **43分钟**
- 一周内最长可宕机约 **1分钟**
---
## 四、SLA 99.99% 详解
### 计算公式
```
月度允许宕机时间 = 总时间 × (1 - 99.99%)
= 总时间 × 0.01%
= 总时间 × 0.0001
```
### 具体数值
| | |
|---|---|
|Daily|8.6s|
|Weekly|1m 0.48s|
|Monthly|4m 23s|
|Quarterly|13m 8.9s|
|Yearly|52m 36s|
### 月度详细计算示例
```
99.99% SLA 月度允许宕机时间:
方法一(按分钟):
宕机时间 = 43,200分钟 × 0.0001 = 4.32 分钟 = 4分19秒
方法二(按秒钟):
宕机时间 = 2,592,000秒 × 0.0001 = 259.2 秒 ≈ 4分19秒
结论:一个月内最多可允许约 26秒的宕机时间
```
### 99.99% 的通俗理解
- **"四个九"** 是高端服务的标准
- 一年内最长可宕机约 **52.6分钟**(接近1小时)
- 一月内最长可宕机约 **4分23秒**(几乎不允许停机)
- 一周内最长可宕机约 **1分钟**
- 对于银行、支付系统等核心业务系统通常要求此级别
---
---
## 六、Downtime 的统计方法
### 1. 宕机时间的计算
#### **定义**
宕机时间 = 服务不可用的时间段
#### **统计方式**
```
开始宕机时间:用户首次无法访问服务的时刻(UTC时间戳)
结束恢复时间:服务完全恢复可用的时刻(UTC时间戳)
宕机时长 = 结束恢复时间 - 开始宕机时间
```
#### **实际例子**
```
2024年9月5日 14:30:00 - 服务开始故障
2024年9月5日 14:45:30 - 服务完全恢复
宕机时长 = 15分30秒
```
### 2. 月度 SLA 计算
```
月度SLA% = (总时间 - 月度累计宕机时长) / 总时间 × 100%
例:
总时间 = 43,200分钟(30天)
月度累计宕机时长 = 65分钟(多次故障累加)
月度SLA% = (43,200 - 65) / 43,200 × 100%
= 43,135 / 43,200 × 100%
= 99.85%
结论:该月SLA未达到99.9%的要求
```
### 3. 需要注意的统计细节
#### ✅ **应该计入宕机时间**
- 完全不可用的时间段
- 部分功能不可用且影响主要业务的时间段
- 包括故障发现到完全恢复的全部时间
#### ❌ **通常不计入宕机时间**
- 计划内维护时间(如提前通知的升级)
- 客户端问题导致的无法访问
- 客户网络问题导致的连接失败
- 用户操作错误导致的故障
### 4. 宕机统计的数据来源
```
主要来源:
├─ 服务器日志(访问日志、错误日志)
├─ 监控告警(Prometheus、Datadog等)
├─ 负载均衡器日志
├─ CDN日志
├─ 用户反馈/投诉
└─ 自动化探测(Ping、健康检查)
```
---
## 七、实际应用案例
### 案例1:电商平台(需要99.9%)
```
月度时间:43,200分钟
允许宕机:43分钟
场景:
- 8月发生2次故障
第一次:15分钟
第二次:28分钟
累计:43分钟
评估:刚好达到99.9% SLA,但已是极限
```
### 案例2:支付系统(需要99.99%)
```
月度时间:2,592,000秒
允许宕机:259秒(约4分钟)
场景:
- 一整月运行无任何宕机事件
- 部分时间段响应缓慢但服务可用
- 计划维护避开业务高峰
评估:完全满足99.99% SLA要求
```
### 案例3:内部系统(需要99.5%)
```
月度时间:43,200分钟
允许宕机:216分钟(3.6小时)
场景:
- 一个月内宕机3小时
- 仍在容许范围内
评估:满足99.5% SLA要求
```
---
## 九、最佳实践
### 💡 监控和告警
- 使用专业监控工具(Prometheus、Grafana等)
- 设置实时告警机制
- 记录所有故障时间和原因
### 💡 故障恢复
- 制定明确的恢复流程(RTO/RPO)
- 设置自动故障转移(如主备切换)
- 定期进行故障演习
### 💡 数据统计
- 使用UTC时间戳,避免时区混淆
- 保存完整的历史日志(建议至少保留1年)
- 定期生成SLA报告,对外透明化
### 💡 承诺管理
- 清楚标注哪些维护不计入SLA
- 对客户设定合理预期
- 提供赔偿机制(宕机补偿)
---
**更新日期:** 2024年 **适用范围:** SLA管理、性能评估、架构设计

View File

@@ -36,6 +36,33 @@ source ~/.bashrc # 如果使用 zsh,改为 source ~/.zshrc
hermes --version
```
## 配置环境变量
将 `OPENAI_API_KEY` 环境变量设置为 Token Plan 个人版专属 API Key。
1. 在终端中执行以下命令,查看默认 Shell 类型。
```bash
echo $SHELL
```
2. 根据 Shell 类型设置环境变量:
```bash
# 将 YOUR_API_KEY 替换为 Token Plan 个人版 API Key
echo 'export OPENAI_API_KEY="YOUR_API_KEY"' >> ~/.zshrc
```
```bash
# 将 YOUR_API_KEY 替换为 Token Plan 个人版 API Key
echo 'export OPENAI_API_KEY="YOUR_API_KEY"' >> ~/.bash_profile
```
3. 执行以下命令使环境变量生效。
```bash
source ~/.zshrc
```
```bash
source ~/.bash_profile
```
## 配置接入凭证
通过 `hermes config set` 命令配置接入参数,根据所选方案填入对应的 Base URL 和 API Key:

View File

@@ -1,91 +0,0 @@
# SRE Weekly Digest
抓取 [SRE Weekly](https://sreweekly.com) 每期内容,把其中分享的文章逐篇导出为 Markdown,
供后续阅读/筛选/邮件分发使用。脚本由 **n8n 定时调用**,通过不同参数驱动;脚本自身**不发送邮件**。
- 脚本: `scripts/sreweekly.py`(单文件,仅依赖 `feedparser`)
- 依赖: `pip3 install feedparser`
## 目录结构
```
sreweekly/
├── manifest.json # 每期状态:html 是否保存、文章是否已提取、文章数
├── html/<期号>-<日期>.html # 每期原始 HTML(feed 的 content:encoded 原样保存)
└── markdown/<期号>/ # 每篇文章一个 .md 文件
├── 01-<标题>.md
└── ...
```
## 命令一览
```bash
python3 scripts/sreweekly.py # 扫描 feed,新增期保存 HTML + 登记 manifest
python3 scripts/sreweekly.py --check # 检查有无新期 → 输出 NEW:533,532 或 NONE
python3 scripts/sreweekly.py --extract 533 # 提取指定期文章 → markdown/533/
python3 scripts/sreweekly.py --extract latest # 提取最新一期
python3 scripts/sreweekly.py --extract pending # 提取所有尚未提取的期(每日流程推荐)
python3 scripts/sreweekly.py --extract all # 提取全部(已提取过需加 --force 覆盖)
python3 scripts/sreweekly.py --status # 打印状态表
python3 scripts/sreweekly.py --issues # 列出所有已登记期
# 可选参数
--feed <URL> # RSS 地址(默认 https://sreweekly.com/feed/)
--dir <PATH> # 工作目录(默认本目录)
--force # 强制重新提取
```
所有命令**幂等**:重复扫描不重复入库,重复提取自动跳过已提取的期。
## n8n 每日流程(推荐 3 步)
该刊每周一更新,建议每天定时跑一次,有新期才继续:
1. **Execute Command(扫描)**
```
python3 /Users/weishen/Workspace/nexus/Hermes/xingzhi/sreweekly/scripts/sreweekly.py --dir /Users/weishen/Workspace/nexus/Hermes/xingzhi/sreweekly
```
2. **Execute Command(提取未处理期)**
```
python3 .../sreweekly.py --dir ... --extract pending
```
(或先用 `--check` 判断 `NEW:`/`NONE` 再分支,`--extract pending` 本身也天然幂等,空跑无害)
3. **后续节点(邮件)**:读取 `markdown/<新期号>/` 下的 .md 文件,
用 n8n 的 Email / 自定义 AgentMail 节点发送(示例发件收件:star-agent@agentmail.to → billyshen@163.com)。
参考输出(`--check`,可直接作为 n8n IF 条件):
```
NEW:533,532 ← 有新期
NONE ← 无更新
```
## manifest.json 示例
```json
{
"feed": "https://sreweekly.com/feed/",
"last_scanned": "2026-09-10T07:40:50",
"issues": {
"533": {
"id": "533",
"title": "SRE Weekly Issue #533",
"url": "https://sreweekly.com/sre-weekly-issue-533/",
"pub_date": "2026-09-07",
"html_file": "html/533-2026-09-07.html",
"fetched_at": "2026-09-10T07:40:50",
"extracted": true,
"article_count": 8,
"markdown_dir": "markdown/533",
"extracted_at": "2026-09-10T07:41:10"
}
}
}
```
## 说明
- SRE Weekly 的 feed 已在 `content:encoded` 字段携带每期完整 HTML,无需再抓每期页面。
- 页面结构:每篇分享文章是 `<div class="sreweekly-entry">`(标题链接 + 简介 + 作者),
赞助商段落(`sreweekly-sponsor-message`)自动跳过。
- 提取后每篇 md 内容:标题、期号/日期、作者、原文链接、简介(含 blockquote 引用)。

View File

@@ -1,96 +0,0 @@
<p><a class="email_only" href="https://sreweekly.com/sre-weekly-issue-529/">View on sreweekly.com</a></p>
<div class="sreweekly-sponsor-message" style="border: 1px solid #b0b0b0; width: 80%;">
<h2 style="text-align: center; font-size: 80%; color: #909090;">A message from our sponsor, <a href="https://sreweekly.com/link/529">Planetscale</a>:</h2>
<p>Your on-call rotation shouldn&#8217;t double as your database&#8217;s HA strategy. PlanetScale databases ship with a primary and two replicas across three AZs, automated failover, and a 99.999% multi-region SLA. Postgres and Vitess available in AWS and GCP.</p>
<p><a href="https://sreweekly.com/link/529">→ Get started with PlanetScale for just $5/mo</a></p>
</div>
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://greatcircle.com/blog/2026/07/14/incident-management-process-versus-program/" rel="noopener" target="_blank">Without a program to support them, incident management processes wither</a></div>
<div class="sreweekly-description">
<p>It&#8217;s not enough to define an incident process. You have to spin up <em>and maintain</em> an entire incident management program.</p>
<p>&nbsp;&nbsp;<small>Brent Chapman</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.honeycomb.io/blog/what-comes-after-observability" rel="noopener" target="_blank">What Comes After Observability?</a></div>
<div class="sreweekly-description">
<p>Honeycomb pulls back the curtain a bit to delve into how LLM agents change the way their product is used, and how their query patterns differ from humans&#8217;. It&#8217;s especially interesting that increasing agent usage has not correlated with decreasing human usage.</p>
<p>&nbsp;&nbsp;<small>Austin Parker &mdash; Honeycomb</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://dzone.com/articles/rise-of-agentic-sre" rel="noopener" target="_blank">The Rise of Agentic SRE: Humans, Agents, and Reliability</a></div>
<div class="sreweekly-description">
<p>I like the approach here, especially measuring both the positive and negative outcomes.</p>
<blockquote>
<p>Good SRE practice is about evidence, not enthusiasm.</p>
</blockquote>
<p>&nbsp;&nbsp;<small> Neel Shah &mdash; DZone</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://blog.railway.com/p/incident-report-july-2-2026-us-east-services-outage" rel="noopener" target="_blank">Incident Report: July 2, 2026 — US East Services Outage</a></div>
<div class="sreweekly-description">
<p>The kernel&#8217;s route cache: a hidden reliability killer. This is a really intriguing case of self-sustaining impact.</p>
<p>&nbsp;&nbsp;<small>Ray Chen &mdash; Railway</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://antithesis.com/blog/2026/finding-bugs-in-raft-implementations/" rel="noopener" target="_blank">Finding bugs in Raft implementations</a></div>
<div class="sreweekly-description">
<blockquote>
<p>&#8230;we rely on formal verification, and this is how consensus algorithms are built today. We define a model that we can mathematically prove to be correct, and then we… translate this perfect, platonic thing into code.</p>
</blockquote>
<p>&nbsp;&nbsp;<small>TW Lim &mdash; Antithesis</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://omarghader.github.io/monitoring-infrastructure-guide-2026/" rel="noopener" target="_blank">How to Build Your Infrastructure Monitoring in 2026 ·</a></div>
<div class="sreweekly-description">
<p>I love that this starts with the user. Monitor what matters to your users, and alert on what you can action.</p>
<p>&nbsp;&nbsp;<small>Omar Ghader</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://utcc.utoronto.ca/~cks/space/blog/linux/SystemdPrivateTmpWhere" rel="noopener" target="_blank">Getting access to the /tmp of a systemd service with PrivateTmp=yes</a></div>
<div class="sreweekly-description">
<p>First time I&#8217;ve heard of systemd&#8217;s PrivateTmp feature. Neat!</p>
<p>&nbsp;&nbsp;<small>Chris Siebenmann</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://surfingcomplexity.blog/2026/08/02/traditional-versus-resilience-engineering-views/" rel="noopener" target="_blank">Traditional versus resilience engineering views</a></div>
<div class="sreweekly-description">
<blockquote>
<p>I thought it would be a useful exercise to brainstorm some of the differences in focus between what I’ll call the traditional view of reliability, and the resilience engineering view.</p>
</blockquote>
<p>It&#8217;s short (just a table), but it definitely made me think.</p>
<p>&nbsp;&nbsp;<small>Lorin Hochstein</small></p>
</div>
</div>
</div></div>

View File

@@ -1,94 +0,0 @@
<p><a class="email_only" href="https://sreweekly.com/sre-weekly-issue-530/">View on sreweekly.com</a></p>
<div class="sreweekly-sponsor-message" style="border: 1px solid #b0b0b0; width: 80%;">
<h2 style="text-align: center; font-size: 80%; color: #909090;">A message from our sponsor, <a href="https://sreweekly.com/link/530">Planetscale</a>:</h2>
<p>Your on-call rotation shouldn&#8217;t double as your database&#8217;s HA strategy. PlanetScale databases ship with a primary and two replicas across three AZs, automated failover, and a 99.999% multi-region SLA. Postgres and Vitess available in AWS and GCP.</p>
<p><a href="https://sreweekly.com/link/530">→ Get started with PlanetScale for just $5/mo</a></p>
</div>
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://resilienceinsoftware.org/news/11560646" rel="noopener" target="_blank">Expertise Can&#8217;t Be Automated: Why Resilience Still Needs Humans</a></div>
<div class="sreweekly-description">
<p>We may improve velocity by handing off tasks to LLM agents, but can that impact resilience? </p>
<p>&nbsp;&nbsp;<small>Courtney Nash &mdash; Resilience in Software Foundation</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://greatcircle.com/blog/2026/07/28/respecting-fatigue-isnt-coddling/" rel="noopener" target="_blank">Respecting fatigue isn’t coddling</a></div>
<div class="sreweekly-description">
<p>Fatigue and burn-out are reliability risks. <strong>Fatigue and burn-out are reliability risks.</strong> I champion this idea in my SRE practice constantly, and I hope you do too.</p>
<p>  <small>Brent Chapman</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.allthingsdistributed.com/2026/08/on-building-scalable-control-planes.html" rel="noopener" target="_blank">On building scalable control planes</a></div>
<div class="sreweekly-description">
<p>A fun read on how to build control planes for large-scale systems, with some great tidbits on the inner workings of EC2 and Aurora DSQL.</p>
<p>  <small>Zak van der Merw</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.uptimelabs.io/articles/hamed-2012-outage-reflections" rel="noopener" target="_blank">Mario Saved the EU but Broke My System</a></div>
<div class="sreweekly-description">
<p>A harrowing incident story underlining the importance of expertise and experience.</p>
<p>&nbsp;&nbsp;<small>Hamed Silatani &mdash; Uptime Labs</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://billduncan.org/ai-and-sre/" rel="noopener" target="_blank">AI and SRE</a></div>
<div class="sreweekly-description">
<p>An SRE comes to terms with the way LLM agents are changing our field: what works well, what still requires human involvement, and what the future may look like.</p>
<p>&nbsp;&nbsp;<small>Bill Duncan</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://tokentimer.ch/blog/tls-certificate-expiry-outages" rel="noopener" target="_blank">Certificate Expiry Is Still Taking Down Major Platforms</a></div>
<div class="sreweekly-description">
<blockquote>
<p>Recent outages at Tailscale, jsDelivr, ServiceNow, and IPinfo show the same failure pattern: certificate automation broke quietly, while the expiry date kept moving closer.</p>
</blockquote>
<p>Bonus: they include links to several write-ups of related incidents.</p>
<p>  <small>TokenTimer</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://stripe.dev/blog/how-stripe-uses-graph-search-and-state-machines-to-auto-remediate-a-global-database-fleet" rel="noopener" target="_blank">How Stripe uses graph search and state machines to auto-remediate a global database fleet</a></div>
<div class="sreweekly-description">
<blockquote>
<p>Our solution treats infrastructure state as a traversable graph and lets a pathfinding algorithm discover recovery sequences at runtime.</p>
</blockquote>
<p>Whoa, cool trick!</p>
<p>  <small>Pragya Mehta and Sai Samant — Stripe</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://incident.io/blog/we-turned-off-pub-sub-and-nobody-noticed" rel="noopener" target="_blank">We turned off Pub/Sub and nobody noticed</a></div>
<div class="sreweekly-description">
<p>Their event-oriented system was based on Google Pub/Sub with its 99.95% SLA, but their own SLA was 99.99%. To resolve that, they moved toward an active-active architecture, load-balancing across 2 message brokers.</p>
<p>There&#8217;s an interactive simulation of their algorithm midway through that&#8217;s fun to play with!</p>
<p>  <small>Patrick Hamann and Mike Fisher — incident.io</small></p>
</div>
</div>
</div></div>

View File

@@ -1,96 +0,0 @@
<p><a class="email_only" href="https://sreweekly.com/sre-weekly-issue-531/">View on sreweekly.com</a></p>
<div class="sreweekly-sponsor-message" style="border: 1px solid #b0b0b0; width: 80%;">
<h2 style="text-align: center; font-size: 80%; color: #909090;">A message from our sponsor, <a href="https://sreweekly.com/link/531">Planetscale</a>:</h2>
<p>PlanetScale Metal runs Postgres and Vitess on dedicated NVMe inside AWS and GCP. Get data center speed next to your app, with unlimited IOPS and no throttling. Teams routinely see a 70% drop in p99 and p95 latency after migrating.</p>
<p><a href="https://sreweekly.com/link/531">→ See the benchmarks</a></p>
</div>
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://greatcircle.com/blog/2026/07/21/heroic-saves-are-near-misses/" target="_blank">Heroic saves are near misses</a></div>
<div class="sreweekly-description">
<p>Celebrating heroes in incident response can incentivize further heroics. That can prevent the kind of growth that will improve incident response overall.</p>
<p>&nbsp;&nbsp;<small>Brent Chapman</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://ferd.ca/control-and-complexity-tension-in-systems-design.html" target="_blank">Control and complexity: tension in systems design</a></div>
<div class="sreweekly-description">
<p>What might happen when we quickly adopt LLMs and make sweeping changes in our complex systems?</p>
<p>&nbsp;&nbsp;<small>Fred Hebert</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://dzone.com/articles/structured-logging-in-distributed-systems" target="_blank">Structured Logging in Distributed Systems: What Most Teams Get Wrong and How to Fix It</a></div>
<div class="sreweekly-description">
<blockquote>
<p>Most teams log, but log badly: wrong severity levels, no trace IDs, inconsistent fields, and logs siloed from traces.</p>
</blockquote>
<p>&nbsp;&nbsp;<small>Ashwini Dave &mdash; DZone</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://humanisticsystems.com/2025/10/14/seeing-the-people-in-control/" target="_blank">Seeing the People In Control</a></div>
<div class="sreweekly-description">
<blockquote>
<p>If you had to explain to a neighbour why your organisation is so safe, and generally works well, what would you say?</p>
</blockquote>
<p>It&#8217;s all about people. I really enjoyed the quote from Charles Billings on principles for automation.</p>
<p>&nbsp;&nbsp;<small>Steven Shorrock</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://billduncan.org/type-conversion/" target="_blank">Type Conversion</a></div>
<div class="sreweekly-description">
<p>Type conversion in aviation involves an experienced pilot training on a new kind of aircraft. This article draws a parallel to transitioning to a new job as an SRE.</p>
<p>&nbsp;&nbsp;<small>Bill Duncan</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.uptimelabs.io/articles/incident-response-ai-qa" target="_blank">&#8216;My Boss Wants Me to Pick an AI SRE Tool&#8217;: Q&#038;A at Incident Fest (Adaptive Capacity Labs)</a></div>
<div class="sreweekly-description">
<p>Some big names in this Q&amp;A, and they share a couple of delicious morsels.</p>
<p>&nbsp;&nbsp;<small>Sam Salter &mdash; Uptime Labs, with John Allspaw and Beth Adele Long</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://tailscale.com/blog/sqlite-wal-reset-bug" target="_blank">How Tailscale helped find the SQLite WAL-Reset bug</a></div>
<div class="sreweekly-description">
<p>A super-engaging deep-dive.</p>
<blockquote>
<p>This investigation is a useful reminder: <strong>running boring technology in a non-standard way is a risk.</strong></p>
</blockquote>
<p>&nbsp;&nbsp;<small>Alex Chan &mdash; Tailscale</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.gremlin.com/blog/optimizing-kubernetes-pod-deployments-for-reliability-with-topology-spread-constraints" target="_blank">Optimizing Kubernetes pods for reliability with topology spread constraints</a></div>
<div class="sreweekly-description">
<p>A handy guide on topology constraints in Kubernetes, with a worked example.</p>
<p>&nbsp;&nbsp;<small>Andre Newman &mdash; Gremlin</small></p>
</div>
</div>
</div></div>

View File

@@ -1,82 +0,0 @@
<p><a class="email_only" href="https://sreweekly.com/sre-weekly-issue-532/">View on sreweekly.com</a></p>
<div class="sreweekly-sponsor-message" style="border: 1px solid #b0b0b0; width: 80%;">
<h2 style="text-align: center; font-size: 80%; color: #909090;">A message from our sponsor, <a href="https://sreweekly.com/link/532">Planetscale</a>:</h2>
<p>PlanetScale Metal runs Postgres and Vitess on dedicated NVMe inside AWS and GCP. Get data center speed next to your app, with unlimited IOPS and no throttling. Teams routinely see a 70% drop in p99 and p95 latency after migrating.</p>
<p><a href="https://sreweekly.com/link/532">→ See the benchmarks</a></p>
</div>
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://greatcircle.com/blog/2026/08/11/declaring-incidents-for-side-effects/" target="_blank">When declaring an incident becomes everyone’s favorite workaround</a></div>
<div class="sreweekly-description">
<p>Need another team to do something fast? Just use this one weird trick: declare an incident! This article explains why the obvious solution (gating incident declaration) isn&#8217;t a good idea.</p>
<p>&nbsp;&nbsp;<small>Brent Chapman</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://queue.acm.org/detail.cfm?ref=rss&#038;id=3830399" target="_blank">Unethical Ways to Manage Technical Debt</a></div>
<div class="sreweekly-description">
<p>Ethics are relative, right? This article is full of genuinely useful tips and framings.</p>
<p>&nbsp;&nbsp;<small>Thomas A. Limoncelli &mdash; ACM Queue</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.adyen.com/knowledge-hub/inside-cilium-cni-solving-kubernetes-pod-setup-timeouts" target="_blank">Solving mysterious Kubernetes pod setup timeouts by tuning conntrack garbage collection</a></div>
<div class="sreweekly-description">
<p>Whoa. It&#8217;s been quite a few years since my last run-in with an overfull conntrack table, and this is a fun new twist.</p>
<p>&nbsp;&nbsp;<small>Jorrick Sleijster &mdash; Adyen</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://sridharrajarao.com/blog/storage-at-scale/" target="_blank">Storage at scale: what I actually watched</a></div>
<div class="sreweekly-description">
<blockquote>
<p>For eight years I ran SRE for a storage system measured in exabytes. The dashboard I checked every morning shrank to seven numbers. Here they are.</p>
</blockquote>
<p>&nbsp;&nbsp;<small>Sridhar Rajarao</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://pub.towardsai.net/the-rise-of-cognitive-observability-a77e33250037" target="_blank">The Rise of Cognitive Observability</a></div>
<div class="sreweekly-description">
<blockquote>
<p><i>Traditional observability monitors execution. LLM observability must monitor behavior.</i></p>
</blockquote>
<p>&nbsp;&nbsp;<small>Barnadeep Bhowmik</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.uber.com/us/en/blog/from-static-rate-limiting-to-intelligent-load-management/" rel="noopener" target="_blank">How Uber Conquered Database Overload: The Journey from Static Rate-Limiting to Intelligent Load Management</a></div>
<div class="sreweekly-description">
<p>This one has a lot of great detail on how their approaches to quota management failed and how they iterated.</p>
<p>  <small>Dhyanam Vaidya, Prathamesh Deshpande, and Mike Ma — Uber</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.flyingbarron.com/2026/04/voyager-and-art-of-graceful-degradation.html" target="_blank">Voyager and the Art of Graceful Degradation</a></div>
<div class="sreweekly-description">
<p>This article uses Voyager 1, whose engineers just shut down another instrument to conserve its steadily-decaying power, as an extended analogy for graceful degradation.</p>
<p>&nbsp;&nbsp;<small>Robert Barron</small></p>
</div>
</div>
</div></div>

View File

@@ -1,97 +0,0 @@
<p><a class="email_only" href="https://sreweekly.com/sre-weekly-issue-533/">View on sreweekly.com</a></p>
<div class="sreweekly-sponsor-message" style="border: 1px solid #b0b0b0; width: 80%;">
<h2 style="text-align: center; font-size: 80%; color: #909090;">A message from our sponsor, <a href="https://sreweekly.com/link/533">Planetscale</a>:</h2>
<p>Most database incidents start with one expensive query, not the database being down. PlanetScale gives SRE teams high-availability Postgres and MySQL with automated failover, query insights, and Database Traffic Control to stop runaway queries before they page you.</p>
<p><a href="https://sreweekly.com/link/533">→ Explore PlanetScale</a></p>
</div>
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://greatcircle.com/blog/2026/08/04/detection-gap/" target="_blank">Incidents start before the response does</a></div>
<div class="sreweekly-description">
<p>What can you do to shorten the time to detect an incident? Some great ideas in here, especially monitoring your company&#8217;s main web page for a sudden uptick in traffic.</p>
<p>&nbsp;&nbsp;<small>Brent Chapman</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://surfingcomplexity.blog/2026/08/16/quick-thoughts-on-azure-regional-outage-from-july-23-26/" target="_blank">Quick thoughts on Azure Regional Outage from July 23, ’26</a></div>
<div class="sreweekly-description">
<p>What an interesting incident! I recommend reading Azure&#8217;s write-up before reading Lorin&#8217;s excellent analysis.</p>
<p>&nbsp;&nbsp;<small>Lorin Hochstein</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://dzone.com/articles/distributed-databases-coordination" target="_blank">Why Distributed Databases Fail at Coordination Boundaries</a></div>
<div class="sreweekly-description">
<blockquote>
<p>Distributed databases rarely fail in the clean, isolated ways described by component diagrams. They fail through timing gaps, stale metadata, ambiguous ownership, retry storms, incompatible health decisions, and overlapping maintenance activity.</p>
</blockquote>
<p>&nbsp;&nbsp;<small> Varsha Ganesh &mdash; DZone</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://read.zerosevzero.com/p/the-record-says" target="_blank">The Record Says</a></div>
<div class="sreweekly-description">
<p>I love this concept of a &#8220;political incident&#8221;:</p>
<blockquote>
<p>The subject was political incidents, by which I mean the ones where the severity arrives before the impact assessment does.</p>
</blockquote>
<p>And ouch, I felt this bit:</p>
<blockquote>
<p>You have spent forty minutes of the incident on the severity field.</p>
</blockquote>
<p>&nbsp;&nbsp;<small>Tim Irving</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://hackernoon.com/what-sres-should-automate-and-never-automate-with-ai" target="_blank">What SREs Should Automate — and Never Automate — with AI</a></div>
<div class="sreweekly-description">
<p>Where can you safely use LLM agents, versus when you should keep things in human hands? This one has some good criteria to consider.</p>
<p>&nbsp;&nbsp;<small>Sai Joshitha Kathari &mdash; HackerNoon</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.datadoghq.com/blog/engineering/gitretriever/" target="_blank">20× the CI traffic without getting slower: How we rebuilt Git serving at Datadog</a></div>
<div class="sreweekly-description">
<p>I learned a lot about Git while reading this one. Speeding up Git clones in CI may not seem important, but it will when you&#8217;re trying to roll out a fix during an incident.</p>
<p>&nbsp;&nbsp;<small>Mike Thompson and Daniel Esponda &mdash; Datadog</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://netflixtechblog.com/a-tale-of-two-flink-autoscalers-e9f6a1b1492b" target="_blank">A Tale of Two Flink Autoscalers</a></div>
<div class="sreweekly-description">
<p>Switching from their custom-written autoscaler to the new off-the-shelf option made sense, but it wasn&#8217;t a simple drop-in replacement.</p>
<p>&nbsp;&nbsp;<small>Samuel Yeboah, Francesco Di Chiara and Mingliang Liu &mdash; Netflix</small></p>
</div>
</div>
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="https://www.adaptivecapacitylabs.com/2026/08/24/there-is-more-to-code-review-than-automatable-detection/" target="_blank">There is more to code review than (automatable) detection</a></div>
<div class="sreweekly-description">
<p>Can we replace human code review with LLM-based reviews? This article lays out what an LLM can&#8217;t replicate, and I&#8217;d argue that these are the pieces that matter most for reliability.</p>
<p>&nbsp;&nbsp;<small>John Allspaw &mdash; Adaptive Capacity Labs</small></p>
</div>
</div>
</div></div>

View File

@@ -1,391 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SRE Weekly 抓取与文章提取脚本
模仿 blogwatcher-daily 的单文件风格:feedparser 抓取 → HTML 落盘 → 逐篇文章导出 Markdown,
并用 manifest.json 记录每期的状态(是否已存 HTML / 是否已提取文章)。
设计给 n8n 定时任务调用,通过不同参数驱动,脚本自身不发送邮件。
目录结构(默认工作目录 ~/Workspace/nexus/Hermes/xingzhi/sreweekly/):
sreweekly/
├── manifest.json # 状态记录(每期: html 是否保存、文章是否提取、文章数)
├── html/<id>-<日期>.html # 每期原始 HTML(feed 的 content:encoded 原样保存)
└── markdown/<id>/ # 每期文章的 markdown 目录(每篇一个文件)
├── 01-<标题slug>.md
└── 02-<标题slug>.md
用法:
python3 sreweekly.py # 扫描 feed,新增期保存为 HTML 并登记 manifest
python3 sreweekly.py --check # 只检查有无新期,输出 NEW:533,532 或 NONE(供 n8n 分支)
python3 sreweekly.py --extract ID # 提取指定期(如 533)的文章 → markdown
python3 sreweekly.py --extract latest # 提取最新一期
python3 sreweekly.py --extract pending # 提取所有尚未提取的期(n8n 每日流程推荐)
python3 sreweekly.py --extract all # 提取全部(含已提取的,需配合 --force 覆盖)
python3 sreweekly.py --status # 打印 manifest 状态表
python3 sreweekly.py --issues # 列出已登记的所有期
选项:
--feed URL RSS 地址(默认 https://sreweekly.com/feed/)
--dir PATH 工作目录(默认 ~/Workspace/nexus/Hermes/xingzhi/sreweekly/)
--force 重新提取已提取过的期(覆盖旧文件)
"""
from html.parser import HTMLParser
import argparse, html, json, os, re, sys, time, urllib.request
try:
import feedparser
except ImportError:
sys.exit("缺少依赖: 请先执行 pip3 install feedparser")
DEFAULT_FEED = "https://sreweekly.com/feed/"
DEFAULT_DIR = os.path.expanduser("~/Workspace/nexus/Hermes/xingzhi/sreweekly")
# ---------------------------------------------------------------- manifest
def load_manifest(base_dir):
path = os.path.join(base_dir, "manifest.json")
if os.path.exists(path):
try:
with open(path, "r", encoding="utf-8") as f:
return json.load(f)
except (json.JSONDecodeError, OSError) as e:
print(f"⚠️ manifest.json 读取失败({e}),按空库处理", file=sys.stderr)
return {"feed": DEFAULT_FEED, "last_scanned": None, "issues": {}}
def save_manifest(base_dir, manifest):
path = os.path.join(base_dir, "manifest.json")
with open(path, "w", encoding="utf-8") as f:
json.dump(manifest, f, ensure_ascii=False, indent=2)
return path
def issue_id_from_link(link):
"""从文章链接提取期号: sre-weekly-issue-533 → 533;失败则用最后一段路径。"""
m = re.search(r"sre-weekly-issue-(\d+)", link or "")
if m:
return int(m.group(1))
m = re.search(r"/([^/]+?)/?$", (link or "").rstrip("/"))
return m.group(1) if m else "unknown"
def format_pubdate(entry):
"""优先用 feed 自带发布日期(YYYY-MM-DD),没有则用当天。"""
if getattr(entry, "published_parsed", None):
return time.strftime("%Y-%m-%d", entry.published_parsed)
return time.strftime("%Y-%m-%d")
def now_iso():
return time.strftime("%Y-%m-%dT%H:%M:%S")
# ---------------------------------------------------------------- feed 扫描
def fetch_feed(feed_url):
d = feedparser.parse(feed_url)
if not d.entries:
sys.exit(f"❌ feed 抓取失败或为空: {feed_url}(bozo={d.bozo})")
return d.entries
def cmd_scan(args, manifest, base_dir):
html_dir = os.path.join(base_dir, "html")
os.makedirs(html_dir, exist_ok=True)
entries = fetch_feed(args.feed)
new_ids = []
for e in entries:
iid = str(issue_id_from_link(e.link))
if iid in manifest["issues"]:
continue # 已登记,跳过(去重)
content_html = e.content[0].value if getattr(e, "content", None) else ""
pubdate = format_pubdate(e)
fname = f"{iid}-{pubdate}.html"
fpath = os.path.join(html_dir, fname)
with open(fpath, "w", encoding="utf-8") as f:
f.write(content_html)
manifest["issues"][iid] = {
"id": iid,
"title": e.title,
"url": e.link,
"pub_date": pubdate,
"html_file": f"html/{fname}",
"fetched_at": now_iso(),
"extracted": False,
"article_count": 0,
"markdown_dir": None,
}
new_ids.append(iid)
print(f"🆕 新期 #{iid} {e.title} → {fname}({len(content_html)} bytes)", file=sys.stderr)
manifest["last_scanned"] = now_iso()
save_manifest(base_dir, manifest)
print(f"📊 扫描完成:新增 {len(new_ids)} 期,共 {len(manifest['issues'])} 期", file=sys.stderr)
return new_ids
def cmd_check(args, manifest):
entries = fetch_feed(args.feed)
known = set(manifest["issues"].keys())
new_ids = []
for e in entries:
iid = str(issue_id_from_link(e.link))
if iid not in known:
new_ids.append(iid)
if new_ids:
print("NEW:" + ",".join(new_ids))
else:
print("NONE")
return 0
# ---------------------------------------------------------------- HTML → 文章
class SREEntryParser(HTMLParser):
"""解析每期的 content:encoded HTML,提取所有 sreweekly-entry 文章条目。
页面结构(见实测):
<div class="sreweekly-sponsor-message">…赞助商…</div> ← 跳过
<div class="sreweekly-entry">
<div class="sreweekly-title"><a href="文章URL">标题</a></div>
<div class="sreweekly-description">
<p>简介…</p>
<blockquote><p>引用…</p></blockquote>
<p>&nbsp;&nbsp;<small>作者</small></p>
</div>
</div>
"""
def __init__(self):
super().__init__(convert_charrefs=True)
self.div_stack = [] # 当前打开中的 div class 栈
self.tag_stack = [] # 当前打开中的标签栈(用于识别 a/blockquote/small)
self.entries = [] # 提取结果: [{title, url, body, author}, ...]
self.cur = None
self.in_title = False
self.in_desc = False
self.in_small = False
self.quote_depth = 0
def _cur_div_class(self):
return self.div_stack[-1] if self.div_stack else None
def handle_starttag(self, tag, attrs):
attrs = dict(attrs)
self.tag_stack.append(tag)
cls = attrs.get("class", "")
if tag == "div":
self.div_stack.append(cls)
if "sreweekly-entry" in cls:
self.cur = {"title": "", "url": "", "body": [], "author": None}
elif "sreweekly-title" in cls and self.cur is not None:
self.in_title = True
elif "sreweekly-description" in cls and self.cur is not None:
self.in_desc = True
return
if self.cur is None:
return
if tag == "a" and self.in_title:
self.cur["url"] = attrs.get("href", "")
elif tag == "blockquote" and self.in_desc:
self.quote_depth += 1
if self.cur["body"] and self.cur["body"][-1] not in ("\n\n", "\n> ", "\n"):
self.cur["body"].append("\n\n")
self.cur["body"].append("\n> ")
elif tag == "small" and self.in_desc:
self.in_small = True
elif tag == "p" and self.in_desc and self.cur["body"] and self.quote_depth == 0:
# 段落间空行(避免在开头及 blockquote 内部加多余空行)
self.cur["body"].append("\n\n")
def handle_endtag(self, tag):
if self.tag_stack:
pop_idx = None
for i in range(len(self.tag_stack) - 1, -1, -1):
if self.tag_stack[i] == tag:
pop_idx = i
break
if pop_idx is not None:
del self.tag_stack[pop_idx:]
if tag == "small" and self.in_small:
self.in_small = False
if tag == "blockquote" and self.quote_depth > 0:
self.quote_depth -= 1
if self.cur is not None and self.in_desc:
self.cur["body"].append("\n")
if tag == "div":
if self.div_stack:
cls = self.div_stack.pop()
if "sreweekly-title" in cls:
self.in_title = False
elif "sreweekly-description" in cls:
self.in_desc = False
elif "sreweekly-entry" in cls:
self._finalize()
def handle_data(self, data):
if self.cur is None:
return
if self.in_title:
self.cur["title"] += data
elif self.in_desc:
if self.in_small:
self.cur["author"] = (self.cur["author"] or "") + data
else:
if not data.strip():
return # 标签间的纯空白(换行/缩进)跳过,段落结构由 p/blockquote 标记生成
if self.cur["body"] and self.cur["body"][-1] in ("\n> ", "\n\n", "\n"):
data = data.lstrip("\n\t \xa0")
self.cur["body"].append(data)
def _finalize(self):
if self.cur is None:
return
title = html.unescape(self.cur["title"]).strip()
body = "".join(self.cur["body"])
body = body.replace("\xa0", " ")
# 压缩多余的连续空行
body = re.sub(r"\n{3,}", "\n\n", body)
# 每行去掉首尾空白,但保留引用行前缀 ">"
lines = []
for ln in body.split("\n"):
stripped = ln.strip()
if stripped.startswith(">"):
lines.append("> " + stripped[1:].strip())
elif stripped:
lines.append(stripped)
else:
lines.append("")
body = "\n".join(lines).strip("\n")
author = html.unescape((self.cur["author"] or "").strip()) or None
self.entries.append({"title": title, "url": self.cur["url"], "body": body, "author": author})
self.cur = None
def parse_issue_html(html_path):
with open(html_path, "r", encoding="utf-8") as f:
p = SREEntryParser()
p.feed(f.read())
return p.entries
def slugify(title, max_len=70):
"""标题 → 文件名 slug:保留字母数字与 CJK,其余转连字符。"""
s = re.sub(r"[^\w\u4e00-\u9fff]+", "-", title.lower(), flags=re.UNICODE).strip("-")
s = re.sub(r"-{2,}", "-", s)
return s[:max_len].strip("-") or "untitled"
def extract_one(iid, entry, base_dir, force=False):
"""把某一期 HTML 解析为每篇文章一个 markdown 文件。返回 (文章数, 输出目录)。"""
md_root = os.path.join(base_dir, "markdown")
os.makedirs(md_root, exist_ok=True)
html_rel = entry.get("html_file")
if not html_rel:
sys.exit(f"❌ 期 #{iid} 没有 html_file 记录,请先扫描")
html_path = os.path.join(base_dir, html_rel)
if not os.path.exists(html_path):
sys.exit(f"❌ HTML 文件不存在: {html_path}")
if entry.get("extracted") and entry.get("article_count", 0) > 0 and not force:
print(f"⏭️ 期 #{iid} 已提取过({entry['article_count']} 篇),跳过(--force 可覆盖)", file=sys.stderr)
return entry.get("article_count", 0), entry.get("markdown_dir"), False
articles = parse_issue_html(html_path)
out_dir = os.path.join(md_root, str(iid))
os.makedirs(out_dir, exist_ok=True)
for idx, a in enumerate(articles, 1):
fname = f"{idx:02d}-{slugify(a['title'])}.md"
fpath = os.path.join(out_dir, fname)
content = render_markdown(a, entry)
with open(fpath, "w", encoding="utf-8") as f:
f.write(content)
entry["extracted"] = True
entry["article_count"] = len(articles)
entry["markdown_dir"] = f"markdown/{iid}"
entry["extracted_at"] = now_iso()
print(f"📄 期 #{iid} → {len(articles)} 篇文章 → {out_dir}", file=sys.stderr)
return len(articles), out_dir, True
def render_markdown(article, entry):
"""文章 → markdown 文件内容。"""
pub = entry.get("pub_date", "")
issue_label = entry.get("title", f"SRE Weekly Issue #{entry.get('id')}")
out = [f"# {article['title']}", ""]
out.append(f"- **期号**: {issue_label}({pub})")
out.append(f"- **作者**: {article['author'] or '—'}")
out.append(f"- **链接**: {article['url']}")
if article["body"]:
out += ["", "## 简介", "", article["body"]]
return "\n".join(out) + "\n"
def resolve_targets(target, manifest):
"""解析 --extract 的目标: ID / latest / pending / all → 期号列表。"""
issues = manifest["issues"]
if target == "latest":
ids = sorted(issues.keys(), key=lambda x: (isinstance(x, str), x))
# 数字优先按数值排,latest 取最大
nums = [i for i in issues if str(i).isdigit()]
return [str(max(int(n) for n in nums))] if nums else [ids[-1]]
if target == "pending":
return [str(i) for i, v in issues.items() if not v.get("extracted") or v.get("article_count", 0) == 0]
if target == "all":
return list(issues.keys())
t = str(target)
if t not in issues:
sys.exit(f"❌ 期 #{t} 不在 manifest 中,请先扫描")
return [t]
def cmd_extract(args, manifest, base_dir):
ids = resolve_targets(args.extract, manifest)
if not ids:
print("✅ 无待提取的期", file=sys.stderr)
return
for iid in ids:
extract_one(iid, manifest["issues"][str(iid)], base_dir, force=args.force)
save_manifest(base_dir, manifest)
# ---------------------------------------------------------------- 展示
def cmd_status(manifest):
issues = manifest["issues"]
print(f"📡 SRE Weekly 共 {len(issues)} 期(最后扫描: {manifest['last_scanned']})")
print()
header = f"{'期号':>6} {'日期':<12} {'HTML':<6} {'提取':<5} {'文章数':<6} 标题"
print(header)
print("-" * len(header))
for iid in sorted(issues.keys(), key=lambda x: int(x) if str(x).isdigit() else 0):
v = issues[iid]
html_ok = "✅" if v.get("html_file") else "—"
ext_ok = "✅" if v.get("extracted") and v.get("article_count", 0) > 0 else "—"
print(f"{iid:>6} {v.get('pub_date',''):<12} {html_ok:<6} {ext_ok:<5} {v.get('article_count',0):<6} {v.get('title','')}")
def cmd_issues(manifest):
for iid in sorted(manifest["issues"].keys(), key=lambda x: int(x) if str(x).isdigit() else 0):
v = manifest["issues"][iid]
print(f"{iid}\t{v.get('pub_date','')}\t{v.get('title','')}\t{v.get('url','')}")
# ---------------------------------------------------------------- main
def main():
ap = argparse.ArgumentParser(description="SRE Weekly 抓取 + 文章提取(供 n8n 定时调用)")
ap.add_argument("--feed", default=DEFAULT_FEED, help=f"RSS 地址(默认 {DEFAULT_FEED})")
ap.add_argument("--dir", default=DEFAULT_DIR, help=f"工作目录(默认 {DEFAULT_DIR})")
ap.add_argument("--check", action="store_true", help="只检查有无新期,输出 NEW:id,id 或 NONE")
ap.add_argument("--extract", metavar="ID|latest|pending|all", help="提取文章 → markdown")
ap.add_argument("--status", action="store_true", help="打印 manifest 状态表")
ap.add_argument("--issues", action="store_true", help="列出已登记的所有期")
ap.add_argument("--force", action="store_true", help="强制重新提取已提取过的期")
args = ap.parse_args()
base_dir = os.path.abspath(os.path.expanduser(args.dir))
os.makedirs(base_dir, exist_ok=True)
if args.extract or args.status or args.issues:
manifest = load_manifest(base_dir)
if args.extract:
cmd_extract(args, manifest, base_dir)
if args.status:
cmd_status(manifest)
if args.issues:
cmd_issues(manifest)
elif args.check:
manifest = load_manifest(base_dir)
cmd_check(args, manifest)
else:
manifest = load_manifest(base_dir)
cmd_scan(args, manifest, base_dir)
return 0
if __name__ == "__main__":
sys.exit(main())

View File

@@ -1,311 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8">
<title>Blogwatcher Daily — 2026-09-01</title>
<style>body{font-family:-apple-system,sans-serif;max-width:800px;margin:2em auto;padding:0 1em;line-height:1.5}h2{border-bottom:1px solid #ddd;padding-bottom:0.3em;margin-top:2em}blockquote{color:#555;border-left:3px solid #ccc;margin:0.3em 0 0.6em;padding:0.2em 1em}li{margin-bottom:0.5em}</style>
</head><body>
<h1>Blogwatcher Daily — 2026-09-01</h1>
<p>共 <strong>83</strong> 篇文章。</p><hr>
<h2>【Engadget - Technology News &amp; Expert Reviews】</h2>
<ul>
<li><a href="https://www.engadget.com/2248329/google-tv-streamer-150-50-percent-price-hike/">The Google TV Streamer now costs $150 after a 50 percent price hike</a>
<blockquote>Google&#x27;s streaming device used to cost $100. Now, it&#x27;ll set you back $150.</blockquote>
</li>
<li><a href="https://www.engadget.com/2248309/samsung-galaxy-book-6-model-budget-friendly-799-laptop/">Samsung&#x27;s new Galaxy Book 6 model is a budget-friendly $799 laptop</a>
<blockquote>Samsung has released a more accessible and affordable Galaxy Book 6 laptop.</blockquote>
</li>
<li><a href="https://www.engadget.com/2247954/jbl-just-introduced-a-trio-of-wi-fi-speakers-for-whole-home-audio/">JBL just introduced a trio of Wi-Fi speakers for whole-home audio</a>
<blockquote>The Cove series is a major departure for JBL.</blockquote>
</li>
<li><a href="https://www.engadget.com/2243954/how-to-make-sure-android-phone-secure/">How to make sure your Android phone is secure</a>
<blockquote>Android can help you keep your phone safe from malicious apps, scam calls, invasions of privacy, and much more. You just need the right settings.</blockquote>
</li>
<li><a href="https://www.engadget.com/2246412/starlink-mini-x-comes-with-extra-router-do-you-need-it/">The Starlink Mini X kit comes with an extra router, but do you really need it?</a>
<blockquote>Starlink&#x27;s extra router can be useful, but getting your main satellite dish positioned properly is more important.</blockquote>
</li>
<li><a href="https://www.engadget.com/2248199/apple-adds-more-allegations-to-its-trade-secrets-lawsuit-against-openai/">Apple adds more allegations to its trade secrets lawsuit against OpenAI</a>
<blockquote>It claims a laptop proves that a former employee accessed and used proprietary files for the AI company.</blockquote>
</li>
<li><a href="https://www.engadget.com/2243923/how-nintendo-missed-mark-with-gamecube-console/">Here&#x27;s how Nintendo missed the mark with the GameCube console</a>
<blockquote>The GameCube had some things going for it, and it even has a cult following these days, but at its release, it was a flop.</blockquote>
</li>
<li><a href="https://www.engadget.com/2244162/the-slate-truck-is-affordable-because-you-have-to-bring-your-own-tech/">The Slate Truck is affordable because you have to &#x27;bring your own tech&#x27;</a>
<blockquote>The Slate Truck is affordable because you have to &#x27;bring your own tech&#x27;.</blockquote>
</li>
<li><a href="https://www.engadget.com/2248170/amazon-is-sued-by-the-ftc-and-22-states-for-secretly-overcharging-advertisers-since-2019/">Amazon is sued by the FTC and 22 states for &#x27;secretly&#x27; overcharging advertisers since 2019</a>
<blockquote>The company&#x27;s &quot;deception continues to this day,&quot; the lawsuit says.</blockquote>
</li>
<li><a href="https://www.engadget.com/2246406/how-modders-installed-windows-nt-operating-system-nintendo-gamecube/">How Enterprising Modders Installed Windows NT On Nintendo GameCubes</a>
<blockquote>Modders often find purpose for old tech that&#x27;s collecting dust, like adding an antiquated version of Windows onto a 25-year-old console with this process.</blockquote>
</li>
<li><a href="https://www.engadget.com/2247924/phil-schiller-reportedly-steps-down-as-apple-app-store-and-product-event-chief/">Phil Schiller reportedly steps down as Apple&#x27;s App Store and product event chief</a>
<blockquote>Phil Schiller will remain an Apple Fellow and focus on &quot;unspecified initiatives,&quot; according to Bloomberg.</blockquote>
</li>
</ul>
<h2>【Reuters - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=QslGg1G0EDI">Penguins get special suits to help recover from surgery</a>
<blockquote>Chilean researchers have designed a therapeutic suit from copper and zinc to speed the recovery of penguins after surgery for wounds often sustained when they become trapped in fishing nets.#News #Reu</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=zCVskvziHmM">Nepal school head says flood alert saved lives of 900 students</a>
<blockquote>Headmaster Rajendra Dawadi was in his school in Nepal when his accountant entered, shouting ‘the ‌flood is coming, the flood is coming,’ giving an early warning that helped save the lives of 900 stude</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=weuOXEihkYg">Search and rescue continues in Nepal as flood recovery efforts grow</a>
<blockquote>Nepal&#x27;s flood disaster deepened as video released by the Nepali Army showed rescuers crawling through tunnels at the Langtang Hydropower Project to reach hundreds feared trapped. Authorities also buri</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=eqhlcwtlDuA">Tupac collaborator calls Keffe D case ‘clout chasing gone bad’</a>
<blockquote>Oakland-born rapper Sean Cole calls the situation with Duane &#x27;Keffe D&#x27; Davis, who prosecutors say orchestrated the shooting of Tupac Shakur, &#x27;clout chasing gone bad&#x27;.#News #Reuters #Newsfeed #legal #m</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=_0XaULOUZ4k">Explosions heard in Ukraine&#x27;s Kyiv, four people injured</a>
<blockquote>Explosions were heard in Ukraine&#x27;s capital Kyiv, a Reuters witness said. Local authorities said on the Telegram messaging app that four people were injured and urged residents to seek shelter.#News #R</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=Zo4dJnAJeC0">Mamdani says one victim, suspect dead after Times Square stabbings</a>
<blockquote>New York City Mayor Zohran Mamdani said that a woman carrying multiple knives stabbed two people in Times Square before police used a taser and fired their weapons.#News #Reuters #Newsfeed #newyork #t</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=Tn18TxLYPks">US irks G20 ministers by bringing back Russia, bars journalists</a>
<blockquote>The United States&#x27; move to welcome Russia back to a meeting of G20 countries, while denying some journalists access to the gathering, dismayed some finance leaders present, deflecting from its bid to</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=0FwlB2hCDZk">World leaders attend colorful Nomad Games opening ceremony</a>
<blockquote>World leaders including Russian President Vladimir Putin and Indian PM Narendra Modi were in the Kyrgyz capital of Bishkek for the World Nomad Games. The opening ceremony took place on the eve of the</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=2nEm9-HMu7w">Jury finds ex-gang leader guilty in Tupac killing case</a>
<blockquote>A Las Vegas jury found an ex-gang leader guilty of murder in a case accusing him of masterminding the drive-by killing of legendary hip-hop artist Tupac Shakur, bringing a decades-old cold case to a c</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=0iuVfxYS8fQ">Trump announces new round of drug-pricing deals</a>
<blockquote>President Trump announced a new round of drug-pricing agreements with international pharmaceutical companies and some smaller biotechs, part of a push to make healthcare more affordable for Americans.</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=fjNthXx5fb4">Fans thank Messi after retiring from international football</a>
<blockquote>Argentine fans thanked Lionel Messi and celebrated his legacy after the 39-year-old announced his retirement from international football.#News #Reuters #Newsfeed #messi #argentina #football #soccer #r</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=XBeB3vD-ggA">Wall Street closes lower as oil prices jump</a>
<blockquote>Stocks weakened with Wall Street turning the page on a volatile month as a war-related jump in crude prices revived inflation fears and raised the likelihood of tighter monetary policy.#News #Reuters</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=IOkOHHl9xUg">How will NASA&#x27;s new telescope unlock mysteries of the universe?</a>
<blockquote>NASA launched the Nancy Grace Roman Space Telescope, which the program’s director said would offer a panoramic view of space and rapid survey speeds.#nasa #space #telescope #science #universe #News #R</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=15Ce93nycds">Princeton economist warns AI could outsmart central banks</a>
<blockquote>A Princeton University economist warned global central bankers at Jackson Hole that AI could soon predict policy moves, urging banks to speak more unpredictably and even hold separate press conference</blockquote>
</li>
</ul>
<h2>【AI懶人報 - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=n5wzZVX84KY">EP398 - Zeabur資安大事件,使用者該如何保護自己,防範未然?AI時代的自保指南!</a>
<blockquote>🚀 特別感謝贊助本集節目由 VoAI 絕好聲創 提供技術支援。🎤 VoAI 提供最有「台灣味」的 AI 聲音,支援情感語音、台式口音,甚至能一鍵生成虛擬人!🎁 AI懶人報聽眾專屬優惠:👉 輸入優惠碼 AILRB26 立享 95 折!立刻體驗:https://www.voai.ai/━━━━━━━━━━━━━━━━━━━━⏱ 章節00:00 有人打開信箱,看到一筆不是他花的帳單01:04 第一段|這</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=XWv2_wqzaFc">EP397 - 依賴 AI 記憶是在埋地雷?Claude Memory 2.0 深度解析,別讓錯誤的自動化毀了你的開發專案!</a>
<blockquote>🚀 特別感謝贊助本集節目由 VoAI 絕好聲創 提供技術支援。🎤 VoAI 提供最有「台灣味」的 AI 聲音,支援情感語音、台式口音,甚至能一鍵生成虛擬人!🎁 AI懶人報聽眾專屬優惠:👉 輸入優惠碼 AILRB26 立享 95 折!立刻體驗:https://www.voai.ai/Claude 的記憶功能升級了!這次我們不只聊它怎麼變聰明,還要提醒大家,在寫程式時過度依賴 AI 記憶,反而可能害你</blockquote>
</li>
</ul>
<h2>【TuTu生活志 - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=H-5ITvSsndI">尼泊尔灾情信息公示差点就满分?!我用AI优化官方通报图,顺手做了个工具...</a>
<blockquote>8月26日,喜马拉雅山区一场严重的跨境冰川灾害席卷尼泊尔与中国边境,造成惨重伤亡。本期我聚焦尼泊尔受灾一侧,深入官方灾情通报,毕竟...我试着用AI优化这些数据呈现,竟意外做出了一套完整工具,衍生出一长串意想不到的内容。真实与美化,在AI时代究竟哪个更重要?看完你会重新思考这个问题。TuTu的网站:https://tutulifestyle.com (聚合了各类信息,包括linktree、哪里买的</blockquote>
</li>
</ul>
<h2>【WSJ.com: World News】</h2>
<ul>
<li><a href="https://www.wsj.com/world/europe/the-ukraine-drones-that-are-carrying-a-bigger-punch-deeper-into-russia-db8a6409?mod=rss_worldnews">The Ukraine Drones That Are Carrying a Bigger Punch, Deeper Into Russia</a>
<blockquote>Kyiv, once dependent on aging Western weaponry, is rapidly increasing the range and firepower of its aerial arsenal.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/middle-east/iran-oil-houthis-shipping-terrorism-bfa4fd9b?mod=rss_worldnews">Washington’s Deadly New Headache: an al Qaeda-Houthi Terrorist Alliance</a>
<blockquote>One man helped broker an arms trade between two militant groups that threatens another key oil-shipping route in the Middle East.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/europe/mine-warfare-with-iran-hampers-u-s-efforts-to-win-control-of-hormuz-45abc6b0?mod=rss_worldnews">Mine Warfare With Iran Hampers U.S. Efforts to Win Control of Hormuz</a>
<blockquote>The U.S. mission to speed traffic through the strait hangs on an unbalanced fight against underwater risks.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/americas/bessent-criticizes-canada-as-global-summit-shows-divisions-483a0b70?mod=rss_worldnews">Bessent Criticizes Canada as Global Summit Shows Divisions</a>
<blockquote>Finance officials from rich and developing countries gathered in the Blue Ridge Mountains amid economic tensions.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/europe/icelands-rejection-of-eu-keeps-it-a-nato-island-straddling-u-s-and-europe-21e133e7?mod=rss_worldnews">Iceland’s Rejection of EU Keeps It a NATO Island Straddling U.S. and Europe</a>
<blockquote>The referendum results highlight the challenges for the European Union in attracting rich democracies.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/russia-turns-to-new-generation-drones-and-all-day-attacks-to-wear-down-ukrainians-b492ec1b?mod=rss_worldnews">Russia Turns to New-Generation Drones and All-Day Attacks to Wear Down Ukrainians</a>
<blockquote>Kyiv is struggling to adapt to continuous attacks using faster drones that are harder to intercept.</blockquote>
</li>
<li><a href="https://www.wsj.com/world/middle-east/u-s-strikes-two-iranian-rocket-launchers-in-first-attack-in-weeks-17602dcf?mod=rss_worldnews">Fighting Flares in Middle East After U.S. Strike on Iranian Rocket Launchers</a>
<blockquote>American forces later defended against missiles launched at Jordan, which hosts nearly 4,000 U.S. troops, U.S. military officials said.</blockquote>
</li>
</ul>
<h2>【SRE WEEKLY】</h2>
<ul>
<li><a href="https://sreweekly.com/sre-weekly-issue-532/">SRE Weekly Issue #532</a>
<blockquote>View on sreweekly.com A message from our sponsor, Planetscale: PlanetScale Metal runs Postgres and Vitess on dedicated NVMe inside AWS and GCP. Get data center speed next to your app, with unlimited I</blockquote>
</li>
</ul>
<h2>【AWS DevOps &amp; Developer Productivity Blog】</h2>
<ul>
<li><a href="https://aws.amazon.com/blogs/devops/optimize-eks-operations-with-agents-reduce-mttr-with-aws-devops-agent-and-a-kubernetes-operator/">Optimize EKS operations with agents: Reduce MTTR with AWS DevOps Agent and a Kubernetes Operator</a>
<blockquote>Introduction Running workloads on Amazon Elastic Kubernetes Service (Amazon EKS) can involve managing failures like OOMKilled or IP exhaustion. Engineers must repeatedly collect pod logs, trace events</blockquote>
</li>
</ul>
<h2>【Slashdot】</h2>
<ul>
<li><a href="https://yro.slashdot.org/story/26/09/01/0034252/trump-tells-fcc-to-punish-journalist-for-calling-his-election-results-mixed?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Trump Tells FCC To Punish Journalist For Calling His Election Results &#x27;Mixed&#x27;</a>
<blockquote>An anonymous reader quotes a report from Ars Technica: President Trump yesterday demanded that the Federal Communications Commission punish or rebuke an NBC journalist for saying he has &quot;mixed results</blockquote>
</li>
<li><a href="https://yro.slashdot.org/story/26/08/31/225238/ftc-sues-amazon-accusing-the-e-commerce-giant-of-misleading-advertisers?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">FTC Sues Amazon, Accusing the E-Commerce Giant of Misleading Advertisers</a>
<blockquote>The FTC and 22 state attorneys general are suing Amazon, accusing the company of secretly inflating advertising prices through undisclosed changes to its auction system that may have extracted more th</blockquote>
</li>
<li><a href="https://hardware.slashdot.org/story/26/08/31/2133202/apple-caught-off-guard-by-ai-demand-for-mac-mini-and-mac-studio?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Apple Caught Off Guard by AI Demand for Mac Mini and Mac Studio</a>
<blockquote>According to The Information (paywalled), Apple reportedly moved up the release of new Mac mini and Mac Studio models after unexpectedly strong enterprise demand for Macs capable of running AI workloa</blockquote>
</li>
<li><a href="https://it.slashdot.org/story/26/08/31/2047247/broadcom-pledges-to-lock-down-open-source-python-java-libraries?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Broadcom Pledges to Lock Down Open Source Python, Java Libraries</a>
<blockquote>Broadcom is launching &quot;TrueSource,&quot; an effort to curate and secure open-source components used with its Tanzu platform, including Spring, RabbitMQ, and libraries across Java, Python, and Node.js. &quot;The</blockquote>
</li>
<li><a href="https://news.slashdot.org/story/26/08/31/1934242/kalshi-dishes-out-its-first-ever-lifetime-ban-to-george-santos?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Kalshi Dishes Out Its First-Ever Lifetime Ban to George Santos</a>
<blockquote>Kalshi has issued its first-ever lifetime ban to former U.S. Rep. George Santos after concluding he failed to fully cooperate with an insider-trading investigation. He is also being fined $71,356, acc</blockquote>
</li>
<li><a href="https://news.slashdot.org/story/26/08/31/1745218/bank-of-england-chief-warns-new-ai-models-threaten-global-financial-stability?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Bank of England Chief Warns New AI Models Threaten Global Financial Stability</a>
<blockquote>Bank of England Governor Andrew Bailey is warning that advanced &quot;frontier&quot; AI models could materially increase cyber risk across the global financial system by making attacks faster, cheaper, and more</blockquote>
</li>
<li><a href="https://apple.slashdot.org/story/26/08/31/1719253/tim-cooks-last-day-as-ceo-of-apple?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Tim Cook&#x27;s Last Day As CEO of Apple</a>
<blockquote>An anonymous reader quotes a report from 9to5Mac: Today is Tim Cook&#x27;s last day as Apple CEO, with John Ternus set to take over tomorrow. To mark his last day in the role, Cook penned an emotional memo</blockquote>
</li>
<li><a href="https://news.slashdot.org/story/26/08/31/1646204/mapquests-app-surges-to-no-1-in-navigation-after-refusing-to-rename-lake-ontario?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">MapQuest&#x27;s App Surges to No. 1 In Navigation After Refusing to Rename Lake Ontario</a>
<blockquote>MapQuest&#x27;s refusal to rename Lake Ontario as &quot;Lake America&quot; has sent its app surging up the charts, making it the No. 1 navigation app in the U.S. and driving &quot;hundreds of thousands&quot; of new downloads.</blockquote>
</li>
<li><a href="https://games.slashdot.org/story/26/08/31/0247220/a-12tb-steam-teraleak-spills-more-than-a-decade-of-lost-pc-gaming-history?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">A 12TB Steam &#x27;Teraleak&#x27; Spills More Than a Decade of Lost PC Gaming History</a>
<blockquote>A massive 12TB archive of old Steam2 content has surfaced online, apparently containing nearly every version of games uploaded to Valve&#x27;s servers between 2003 and 2013, including unreleased prototypes</blockquote>
</li>
<li><a href="https://it.slashdot.org/story/26/08/31/0229251/berlin-is-being-blackmailed-by-hackers?utm_source=rss1.0mainlinkanon&amp;utm_medium=feed">Berlin Is Being Blackmailed By Hackers</a>
<blockquote>An anonymous reader quotes a report from the BBC: Berlin is being blackmailed by hackers who were able to compromise city systems and steal data earlier this month, its mayor has said. Kai Wegner said</blockquote>
</li>
</ul>
<h2>【小众软件】</h2>
<ul>
<li><a href="https://www.appinn.com/openclaw-2-0/">OpenClaw 2.0 正式发布:史上规模最大的一次更新:933 位贡献者,16000 个拉取请求</a>
<blockquote>在停更7周以后,OpenClaw 2.0 终于发布,这次更新被开发者称为「迄今为止 OpenClaw 历史上规模最大的一次更新。此次更新由 933 位贡献者共同完成,其中包括 569 位首次贡献者,并包含了超过 16,000 个 pull request。」 OpenClaw 2.0 就是 Open</blockquote>
</li>
<li><a href="https://www.appinn.com/steam-12tb-game-data-leak/">Steam 12TB 游戏数据泄漏:横跨 10 年,大量未公开内容曝光</a>
<blockquote>Steam 最近爆出了一次规模惊人的游戏数据泄漏:超过 12TB、横跨 2003~2013 年的大量游戏数据被公开。@Appinn 泄漏的内容是 Steam2,里面有《Portal 2》《Left 4 Dead》《CS》等游戏的未公开早期版本,包括废弃地图、模型、对白和游戏机制,甚至还有被取消的 F</blockquote>
</li>
<li><a href="https://www.appinn.com/wangyunchuan-2-2/">内网穿透,本可以不用那么麻烦</a>
<blockquote>很多人都想随时随地地远程控制在家或办公室的电脑,或者出门在外也能访问 NAS 里的文件、公司内部的 OA 系统,甚至小主机、路由器、打印机等设备。但由于没有公网 IP,这些设备都处于内网,无法直接访问。 内网穿透就可以解决这个问题,它能让你不受局域网的限制,在任何地点,用手机或电脑,也能访问家里或公</blockquote>
</li>
<li><a href="https://www.appinn.com/chrome-remove-manifest-v2-26831/">今天,Chrome 应用商店将彻底移除所有 Manifest V2 扩展,趁现在如何备份?</a>
<blockquote>这一天终于到了。 根据 Manifest V2 支持时间表,2026 年 8 月 31 日,谷歌将从 Chrome 应用商店中移除所有剩余的 Manifest V2 扩展程序。 注意:安装在 Chrome 138 或更早版本上的 Manifest V2 扩展程序将保留安装状态,但无法接收任何更新,并</blockquote>
</li>
<li><a href="https://www.appinn.com/xiaomi-17-pro-voice-input-censors-swear-words/">小米17 Pro自带语音输入法会屏蔽脏话</a>
<blockquote>根据酷安网友截图显示,其使用了小米17 Pro自带输入法的语音输入功能,在碰到脏话的时候会提示:已屏蔽敏感内容 该网友还表示:“即使把相关 AI 的模型功能全部关掉,也是无法关闭这个屏蔽功能的。我不知道这个屏蔽功能在这个输入法到底起什么作用。日常口语带一些脏话就会瞬间秒屏蔽。还有一些敏感类的词都会屏</blockquote>
</li>
<li><a href="https://www.appinn.com/faxian-top10-2635/">发现频道:10款大家发现的好评软件[2026年第35期]</a>
<blockquote>最近10日,来自小众软件论坛的发现频道的热门排行榜,由系统自动生成,直接列出来: 序号 主题 1️⃣ 一个双击即用的 Windows 软件管理工具,不仅列出所有已安装软件,还能彻底卸载 + 清空注册表 + 删除残留文件夹/文件,不依赖任何运行时。 2️⃣ 【开发者自荐】AI Story – 一句话一</blockquote>
</li>
<li><a href="https://www.appinn.com/nvidia-windows-10-final-game-ready-driver/">NVIDIA 即将告别 Windows 10:最后一款 Game Ready 驱动 10 月发布</a>
<blockquote>还在用 Windows 10 + NVIDIA 显卡打游戏的同学注意了:按照 NVIDIA 此前公布的支持计划,最后一款支持 Windows 10 的 Game Ready 驱动将在今年 10 月发布。 NVIDIA 早在 2025 年 7 月就公布了这份计划: 10 月之后会怎样? NVIDIA</blockquote>
</li>
</ul>
<h2>【异次元软件世界】</h2>
<ul>
<li><a href="https://www.iplaysoft.com/updf-editor.html">UPDF:AI 加持的全能 PDF 编辑器 (用过才知为啥大家都超级推荐!功能超全)</a>
<blockquote>现在的工作与学习几乎离不开 PDF 文件:论文、发票、合同、课件、方案……但现实是,很多人仍在为“PDF 无法编辑”、“格式转换麻烦”、“批注不方便”而无比头疼。 如果你需要寻找一款 功能强、速度快、支持 AI 的 PDF 编辑器,那「UPDF」很可能就是那个最佳答案!它不仅支持电脑和手机 APP,还提供网页版,功能覆盖学习办公中与 PDF 相关的所有需求。重点是,UPDF 界面非常精美,操作现代</blockquote>
</li>
<li><a href="https://www.iplaysoft.com/p/opensquilla">白嫖 68 元 Token 额度!OpenSquilla 开源 Agent 送羊毛,多款模型随便调</a>
<blockquote>玩过 AI Agent 的朋友应该都有同一个感受:这玩意儿好玩好用,但一个稍微复杂点的任务跑下来,多步规划、工具调用、长记忆加载,每一步都在疯狂吃 token,最要命的是很多人图省事,不管任务简单还是复杂,一股脑全都选旗舰贵模型,结果就是账单爆炸。明明一个摘要、格式整理这种轻量活儿,交…… 「 前往查看原文.... 」异次元首页 | 微信公众号 | 关注微博 | 软件精选 | 软件激活码折扣</blockquote>
</li>
<li><a href="https://www.iplaysoft.com/windows-server-2025.html">微软 Windows Server 2025 LTSC 最新正式版官方 ISO 镜像下载 - 服务器系统 MSDN 原版</a>
<blockquote>随着 Windows 11 新版本发布之后,微软终于也正式推出了 Windows Server 2025 服务器操作系统了!这是一款专门面向企业和服务提供商的先进可靠的服务器系统。 Windows Server 2025 LTSC 是微软迄今为止成功的企业级服务器系统,它继承了 2022 的优点并基于 Win11 作为内核,进一步提升了安全性、性能、稳定性和灵活性,引入了许多服务器相关创新。无论是</blockquote>
</li>
</ul>
<h2>【阿榮福利味 - 免費軟體下載】</h2>
<ul>
<li><a href="https://www.azofreeware.com/2022/06/wondershare-uniconverter.html">[正版購買] Wondershare UniConverter 17.6.0 中文版 - 萬用影片轉檔下載編輯軟體</a>
<blockquote>萬用影片轉檔下載編輯軟體 - Wondershare UniConverter,全能的影片工具組,包含了影片轉檔、影片下載、影片壓縮、影片編輯、影片播放、光碟燒錄、合併轉檔、螢幕錄影等多項基本功能,不只這樣,還有自動剪裁、智慧剪裁、大量刪除片頭片尾、移除或新增浮水印、字幕編輯器、AI 畫像、背景移除器、影片防抖動、圖片轉檔器、GIF 檔案製作等加值功能。(阿榮福利味) ★軟體報價:請「填寫資料」或</blockquote>
</li>
<li><a href="https://www.azofreeware.com/2012/01/supremo-151-teamviewer.html">Supremo 5.0.3.3883 免安裝中文版 - 遠端遙控軟體 類似 Teamviewer</a>
<blockquote>類似「Teamviewer」的遠端遙控軟體 - Supremo,開啟時按「Start」取得一組帳號(ID)跟密碼(Password),如果是要讓人遙控你的電腦,就直接把這組帳號密碼給對方即可,對方連線進來時還會徵求你的同意(Ask for confirmation before allow access),如果是要遙控他人電腦,請切換到「Connect to a remote computer」頁</blockquote>
</li>
<li><a href="https://www.azofreeware.com/2011/01/smplayer-069.html">SMPlayer 26.8.29 免安裝中文版 - 影片播放自由軟體</a>
<blockquote>影片播放軟體 - SMPlayer,是採用MPlayer核心的自由軟體,支援大多數格式的影片及DVD播放,其特色就是會自動記住每個影片的播放位置、字幕、音量...等設定,下次開啟時會依照該影片的記憶設定來播放。(阿榮) 下載連結→ https://www.azofreeware.com/p/smplayer.html 官方網站:SMPlayer 軟體性質:自由軟體(免費) 介面語言:繁體中文(含多</blockquote>
</li>
<li><a href="https://www.azofreeware.com/2020/07/seo-powersuite.html">[正版購買] SEO PowerSuite R103.6 - SEO 輔助工具</a>
<blockquote>SEO 輔助工具 - SEO PowerSuite,內建多種網路搜尋引擎最佳化軟體,足以應付你的 SEO 工作需求,包含:SEO 分析工具、關鍵字研究工具、反向連結檢查器、內容編輯器、PPC 廣告最佳化等功能,憑藉其直觀的使用者界面和豐富的專業級功能,是適合新手和專家的 SEO 工具。(阿榮福利味) ※購買請先填寫報價資料:https://www.azofreeware.com/p/quote.h</blockquote>
</li>
<li><a href="https://www.azofreeware.com/2026/08/risoheditor.html">RisohEditor 6.1.8 免安裝中文版 - 免費的 Windows 資源編輯器</a>
<blockquote>免費的 Win32 資源編輯器 - RisohEditor,類似「ResEdit」、「Resource Hacker」的軟體中文化工具,主要用途是直接編輯 Windows 程式中的資源,例如 RS、RES、EXE、DLL 等檔案內的介面與資源,支援 Unicode 萬國碼。(阿榮福利味) 下載連結→ https://www.azofreeware.com/p/risoheditor.html 官方</blockquote>
</li>
<li><a href="https://www.azofreeware.com/2025/12/nordvpn.html">NordVPN 2026.09.01 中文版 - 支援多平台的 VPN 軟體</a>
<blockquote>支援多平台的 VPN 軟體 - NordVPN,提供安全與速度兼具的服務,針對流量建立加密通道,涵蓋全球將近兩百個位置,提供八千多台伺服器,能夠防範網路監控、網路威脅、危險的無線網路,可以安裝於家中路由器上,做全方位的家庭網路防護。(阿榮福利味) 下載連結→ https://www.azofreeware.com/p/nordvpn.html 官方網站:Nord Security 軟體性質:共享軟</blockquote>
</li>
</ul>
<h2>【BBC News 中文 - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=8tXaMRF9_PU">前線報導:BBC走訪中尼邊境被洪災抹去的小鎮- BBC News 中文 #尼泊爾 #中國 #西藏</a>
<blockquote>尼泊爾上週遭遇毀滅性洪災,死亡人數已達939人,另有3925人失蹤。在重災區拉蘇瓦縣,許多繁榮的城鎮如今面目全非。BBC記者阿扎德·莫希里來到夏布盧貝西,這裡緊鄰中國西藏吉隆,曾經生活在這裡的社區已幾乎不留任何痕跡,取而代之的是大量乾硬的泥土和瓦礫。救援行動仍在持續,隧道內仍有工人受困;而倖存者回憶起洪水來襲的那一天,仍難掩恐懼與悲痛。BBC News 中文: https://www.bbc.co</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=HKunQcLHbrI">尼泊爾與西藏洪災超4200人失蹤 家屬稱「幾天沒有合眼」- BBC News 中文</a>
<blockquote>8月26日,一座災難性泥石流重創尼泊爾北部與中國西藏地區。惡劣天氣和持續上升的水位增加救援難度,兩國救援人員正爭分奪秒搜尋失蹤者。截止週一,尼泊爾的死亡人數已增至903人,另有4200人失蹤。中國方面公佈的西藏死亡人數為16人,另有546人失蹤。BBC News 中文: https://www.bbc.com/zhongwen訂閱BBC News 中文 YouTube:http://bit.ly/</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=aElQFk8FC64">前線報導:尼泊爾洪災逾900人罹難 民眾絕望尋找失蹤親人- BBC News 中文</a>
<blockquote>尼泊爾上周遭遇毀滅性洪災,已有超過900人死亡,仍有4200人失蹤。有許多人在街頭一張張查看尋找到的遺體照片,絕望地尋找失聯的親人;也有數百人被困隧道,至今生死未卜。BBC記者阿扎德·莫希里從加德滿都出發前往受災嚴重的拉蘇瓦地區。她報導說,儘管救援人員持續在瓦礫與泥濘中搜尋生還者,持續降雨和山區道路受阻,讓救援與物資運送面臨巨大挑戰。BBC News 中文: https://www.bbc.com</blockquote>
</li>
</ul>
<h2>【理想生活实验室】</h2>
<ul>
<li><a href="http://www.toodaylab.com/84189">今日消费资讯:《牛来》将延长上映到 10 月 4 日、张凌赫成为巴黎欧莱雅美发代言人</a>
<blockquote>《牛来》将延长上映到 10 月 4 日8 月 31 日消息,从 8 月 5 日开始公映的《牛来》密钥确认延期,影片将延长上映到 10 月 4 日结束。截止到 8 月 31 日,影片累计票房已达 5979.8 万元。% ARABICA 科威特贾贝尔购物中心“得来速”店开业8 月 29 日,% ARABICA 在科威特贾贝尔·艾哈迈德城(Jaber Al Ahmad City)的贾贝尔购物中心(Jab</blockquote>
</li>
<li><a href="http://www.toodaylab.com/84188">我们开箱了 Bose QC 消噪耳机 II,时隔三年的产品更新,它改变了什么?</a>
<blockquote>8 月 14 日,Bose 推出了旗下新款消噪耳机 QuietComfort 消噪耳机 II(以下简称“QC 消噪耳机 II”),这是 2023 年 9 月 21 日在上海发布的 QuietComfort 消噪耳机的续作,这样时隔三年,这款定位主力市场的产品也更新了。延伸阅读:和 QuietComfort 消噪耳机一起发布的另外两款耳机都在 2025 年完成了升级,它们是 QuietComfort</blockquote>
</li>
</ul>
<h2>【零度解说 - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=Mbxj21vwFfk">【送福利】免费领取 1 年 Google AI Pro!学生套餐继续薅,无需实体信用卡,完整开通教程! | 零度解说</a>
<blockquote>【更多资源】▶https://bittly.cc/lingdu【零度博客】▶https://www.freedidi.com【会员提问】▶https://vip.freedidi.com-------------------------------------🔔免费领取 1 年 Google AI Pro 会员:https://www.freedidi.com/25304.html币安虚拟信用卡申</blockquote>
</li>
</ul>
<h2>【Coursera - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=Rrue0_rSFIU">Build a Personal Brand That Gets You Hired</a>
<blockquote>Before an interview even begins, employers may already have an impression based on what&#x27;s online. Learn how to build a professional digital footprint, strengthen a personal brand, and create an online</blockquote>
</li>
</ul>
<h2>【灵姐说AI | Ling Talk AI - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=d_xSz16Mtbw">5000万美元爱情大瓜该不该给?我追问4个AI,答案越问越不一样</a>
<blockquote>假如你有88亿美元,毕生挚爱问你要5000万美元,你给不给?我把这道爱情考题交给Claude、ChatGPT、Gemini和豆包。首问,四家都说给;继续加条件,回答开始分岔。从“孙哥和甜姐”的话题出发,这期把争议抽离成假设题,聊的是AI如何理解爱情、金钱与关系边界,不验证或裁定真人私生活。这一期一起看:• 刚交往三个月、不给就分手,AI会怎样回应?• 同样一笔钱,被理解成交易还是家庭保障,会有什么</blockquote>
</li>
</ul>
<h2>【TEDx Talks - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=t13gJi3dAKc">Why you should date the short guy | Amy Chan | TEDxVancouver</a>
<blockquote>As a leading relationship expert, Amy Chan reveals how our modern dating filters have triggered a &quot;relationship recession.&quot; Discover the three hidden forces sabotaging your dating life and how to repr</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=_HutRlCnfWg">The momentum trap—and how to avoid it | Colleen Pimentel | TEDxMcMasterU</a>
<blockquote>Colleen Pimentel challenges the idea that moving faster always means making progress. Her talk introduces the power of a “Strategic Pause,” encouraging audiences to step back, gain clarity, and ensure</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=ToRsMnc9C2Q">Running towards a life I love | Teesha Roy | TEDxWarwick Salon</a>
<blockquote>Teesha shares her personal journey of living with ADHD and how taking up long-distance running helped her channel restless energy into clarity and discipline. She emphasizes breaking big goals into sm</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=qAshRu25D3Y">When Showing Up Is the Progress | Sahith Rajkumar | TEDxMcMasterU</a>
<blockquote>Sahith Rajkumar challenges traditional ideas of progress by exploring the impact of consistently showing up for others. Drawing on his experiences in community outreach, he discusses how meaningful im</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=Lm7pcXm0Ano">Rising Transport Fares: Fleeced or Milking The System? | Ruihan Ryan Shen | TEDxShahe Street Studio</a>
<blockquote>What does a rising subway fare tell us about fairness, justice, and systems we take for granted? Ryan takes us on a philosophical adventure through the economics of metro systems, contrasting governme</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=a4Z-FgLylbU">从沉默到看见:为什么我们要拍彼此的后脑勺? | 子榆 司徒 | TEDxNanshan Salon</a>
<blockquote>我们看不见自己的后脑勺,就像生活中,我们常常忽略那些“看不见”的事:家人隐藏的关爱,外卖骑手的辛劳,邻里擦肩而过的孤独。现代社会以极致的高效和便捷掩盖了真实生活的粗糙:我们愈发习惯看结果,却遗忘了过程中的情感、牵挂与付出。青年作家司徒子榆,从生活细节出发,通过家人的默契与陌生人的互动提醒我们:学会“看见”生活里不曾被注视的背面,也是在让这个世界多一分深爱和真实。 青年诗人、作家跨媒介文化实践者 T</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=eV_zyLc5np0">٣٠ رصاصة لحماية حياتك المهنية | Ebrahem Anwar | TEDxYouth@TabaryElHegazHS</a>
<blockquote>كم يمكن أن تكلّفك غلطة واحدة في عالم الأعمال؟قد تكون الفكرة رائعة، والحماس في أعلى مستوياته، والطموح بلا حدود… ومع ذلك، قد تخسر سنوات من العمل بسبب قرار واحد لم تستعد له جيدًا.في هذا الحديث، يشارك إبر</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=mXImXBcmNik">用镜头夺回叙事权:谁来决定,我们的人生里什么值得被看见? | 洁云 翁 | TEDxNanshan Salon</a>
<blockquote>在主流叙事中,麻风病康复者常被标签化为可怕的传染者、需要救助的弱者,或是苦难的化身。但如果我们的镜头只聚焦于他们的伤痛,就真的看见了他们的人生吗?何纪文,这位麻风病康复者,用一台普通的数码相机讲述了另一种人生。他的镜头定格的不只是苦难,而是村庄的风景、村民之间温暖的合作,甚至是阳光下盛开的桃花与歌声。从“被记录的对象”到“自己的叙述者”,他用行动夺回了叙事的权利,证明每个人都能决定,什么才是生命中</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=QFetdvsEgtM">カッコいい自分を妄想して、前進するパワーに | Atsushi KURASAKO | TEDxKumamoto</a>
<blockquote>倉迫 諄 : カッコいい自分を妄想して、前進するパワーに大分県内のTOP高校に通う倉迫は、高校3年生の夏に、イタリアへ留学した。本来であれば受験生である時期に、なぜ、彼は留学を決意したのか。そういった難しい決断をする時の指針として、彼はいつも「妄想」をしている。妄想が前に進んでいくパワーになっていることを、体験を通して語る。KURASAKO Atsushi : Visualizing the &quot;C</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=yBJweT3kJ8E">Knowing Precedes Doing: Creative Experiments in Leadership | L.V. Navaneeth | TEDxBITSHyderabad</a>
<blockquote>L.V. Navneeth, CEO of The Hindu Group, shares his leadership philosophy that &quot;knowing precedes doing&quot;. Drawing from over 27 years of diverse professional experience, he outlines four distinct objectiv</blockquote>
</li>
</ul>
<h2>【Tech With Tim - YouTube】</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=edIHPoWgIKU">Local AI Explained: How to Run AI Models on Your Computer</a>
<blockquote>Use the MindsHub Cowork agentic harness for free (open-source): https://mindshub.ai?utm_medium=influencers&amp;utm_source=youtube&amp;utm_campaign=26q3-tech-with-tim&amp;utm_content=integration-2Everyone&#x27;s talkin</blockquote>
</li>
<li><a href="https://www.youtube.com/watch?v=c9AnqCeyxbI">Building AI Agents in Pure Python - Beginner Course</a>
<blockquote>🔹Download the free guide from HubSpot on Your 2026 Guide toAI Agents: https://clickhubspot.com/70c662🔹Code in this video (available inside Skool): https://www.skool.com/ai-agent-builders/classroom/faf</blockquote>
</li>
</ul>
</body></html>