普通视图

WordPress 如何让 RSS feed 输出全文?

WordPress 如何让 RSS feed 输出全文? WordPress RSS 设置全文输出教程 教你让 WordPress 的 RSS 订阅显示全文 WordPress:让 RSS 订阅源输出完整内容的三种方法 修改 WordPress /feed 输出全文的完整指南 RSS 只显示摘要?教你改成全文(WordPress 设置/代码/插件) WordPress RSS 全文输出配置:设置、代码与插件方案 如何强制 WordPress RSS 显示完整内容(含 functions.php 方法) 提升订阅体验:WordPress RSS 输出全文的解决方案 WordPress RSS 订阅优化:开启全文输出的最佳实践
WordPress 中,/feed(RSS 订阅源)是输出完整内容还是仅输出摘要,可以在 管理后台 → 设置 → 阅读 中控制,也可以通过代码或插件自定义。下面是逐步指南:

通过 WordPress 设置修改

  1. 进入 WordPress 管理后台 → 设置 → 阅读。
  2. 查找 “For each article in a feed, show”(每篇文章在订阅源中显示)。
  3. 你会看到两个选项:Full text(完整内容)和 Summary(摘要)。
  4. 选择 Full text 以确保 /feed 输出文章的完整内容。
  5. 点击 保存更改(Save Changes)。
[caption id="attachment_70578" align="alignnone" width="961"]WordPress — 在 管理后台 → 设置 → 阅读 中更改为输出完整内容 WordPress — 在 管理后台 → 设置 → 阅读 中更改为输出完整内容[/caption] 此设置影响默认的 WordPress RSS 订阅源(/feed)。

通过主题修改(当设置被覆盖时)

某些主题会覆盖订阅源输出。要强制显示完整内容:
  • 打开你主题的 functions.php 文件。
  • 添加以下 PHP 代码
// 强制 RSS 订阅源显示完整内容
function my_full_feed_content($content) {
    return get_the_content();
}

add_filter('the_excerpt_rss', 'my_full_feed_content');
add_filter('the_content_feed', 'my_full_feed_content');
这可确保 RSS 摘要和内容订阅源都使用完整文章内容。

通过插件修改

如果不想修改代码:像 “RSS Feed Control” 或 “WP RSS Aggregator” 这样的插件可以让你自定义订阅源的内容长度、是否为全文以及格式。 提示:修改后在 /feed/feed/rss2/ 测试你的订阅源以确认输出为全文。一些缓存插件可能需要清除缓存。 附注:本博客的订阅源已切换为输出全文。 [show_file file="/var/www/wp-post-common/justyy.com/wordpress.php"] 英文:Wordpress: How to Output Full Text in the Feed?

相关文章:

  1. 微信公众号(justyyuk)机器人支持 STEEM 查询啦 The wechat bot (justyyuk) now supports Inquiry for Steem Accounts. 之前把API给放出来, 能做的事情就很多了. 比如我就在我的公众号上加上了STEEM 查询. 查询的时候只需要给公众号发...
  2. 2025年10月10号币圈黑天鹅: 要想一直在牌桌前就不要玩杠杆/合约 只要不加杠杆,你就是安全的:除非你有能力承担损失,否则任何人都不应该使用杠杆。即使没有杠杆,加密货币的波动性也已经足够大了。 You are safe as long as you don’t do leveraging: No one should be...
  3. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  4. 笔记本电脑电池电量耗尽但无法启动休眠 早上发现我的笔记本电脑关机了, 挺奇怪的. 通常情况下, Windows 会自动更新并在更新安装完成后重新启动电脑, 这有点烦人. 但这次显然不是由 Windows 更新引起的. 启动电脑后我发现笔记本电脑(Microsoft Surface Studio Pro)是因为电池耗尽而关机的. 然后我就发现(系统 –...
  5. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  6. 第一次私校家长会: 原来家长比孩子还卷 前几天参加了娃的第一次家长会,和几位家长聊下来,真是个个都很厉害。不光孩子们卷,家长也一样卷,一眼望去基本都是 Dr/博士。娃还调侃我一句:“这有什么的,你不也是 Dr 吗?” 我心里默默想:还好没写学校名字,不然我这野鸡大学的头衔真拿不出手 😂。 私校里真是人才济济,乐器过 8 级的太常见了,卷得不得了。我还问过娃,是想当 big fish in a small pond...
  7. 返璞归真, 重新成为小鱼 – 祭奠逝去的1万SP 前两天, 租来的1万SP就这么静悄悄的被收回了(没有任何消息通知), 我是通过点赞价值变化才知道的. @dapeng 说我的有效SP排名从第10名直线下滑到第20名. 有点小落差, 还好 @tvb 安慰我说: “@justyy 但你在大家心中, 已经是技术大鲸了” 不过她也没忘记调侃: “瞬间变身林妹妹” 这28天租来的1万SP...
  8. 翻出一支钢笔 收拾桌面, 翻出一支钢笔,已经不记得从何而来.推测应该是出国那年朋友送的. 好奇的打开钢笔后盖, 发现竟然是可以拆的移动式的墨水盒.然后就在EBAY上搜,竟然发现有卖,就花了1镑75买了25个.这玩意真方便,用完了就再换一个墨盒,这些还能回收. 这年头写字的机会越来越少了,这钢笔看起来质量不错, 以后我就随身携带了, 碰到签名什么的就用它签了.不知道钢笔是什么牌子,上面印有一只钱鳄鱼,姑且就叫鳄鱼牌钢笔. 本文一共 170 个汉字, 你数一下对不对. 翻出一支钢笔. (AMP 移动加速版本) 赞赏我的几个理由....

WordPress 利用 PHP Exif 扩展实现图片元信息展示

2025年10月26日 09:51

作为一个摄影爱好者(伪),我一直希望能在博客上方便、快速地展示照片的 EXIF 信息。EXIF(Exchangeable Image File Format)是嵌入在数码照片文件中的一组元数据,它记录了拍摄时的关键信息,例如快门速度、光圈值、ISO、镜头型号、拍摄时间、相机机型等。这些信息不仅能让人回顾拍摄时的状态,也能帮助摄影爱好者更好地分析和改进拍摄技巧。对我而言,它更像是一种“照片的指纹”,让作品多了一层可回味的技术味道。

早些年,我的图片和其他静态文件都托管在七牛云上,当时利用它提供的 EXIF 接口实现信息展示,简单、方便,而且完全没有性能压力(代码附后)。但随着网站访问量逐渐上升,外链流量的费用也水涨船高。考虑到成本和可控性,我最终还是决定停用七牛云,改回自托管的方式,也因此萌生了直接在主题中实现 EXIF 展示的想法。

其实早在这之前,我写过一篇《用 WP Simple EXIF 让博客图片展示更多细节信息》,介绍过一个博友开发的开源插件。那款插件功能相当完善,配置项也非常丰富,本质上同样是基于 PHP 的 EXIF 扩展实现的。不过,它的样式相对花哨,不太符合我博客简洁的视觉风格。于是,这次我借助 AI 的帮助,从零开始按照自己的需求重新调整了一套方案,在保持简洁的同时加入了缓存机制,进一步优化性能。本文就是对这次改造的记录与分享,如果你也想在博客中展示照片的 EXIF ..... [ 阅读全文 ]


原文链接: https://www.shephe.com/tutorial/wordpress-php-exif-image-meta-display/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

使用 Cloudflare R2 + Pages 搭建免费图床,并集成到 WordPress 评论系统

2025年10月19日 14:20

在去年的博客年度更新日志中,我提到本站的评论框功能过于单薄,只能输入纯文本,我一直希望能为它加入更丰富的交互体验——比如支持加粗、斜体、删除线,能上传图片、添加 Emoji 符号等。

一年后的这个国庆假期,我终于抽时间把它完善了。最终实现的效果比我最初设想的更优雅,也更具可维护性、可扩展性。本文将记录我为 WordPress 评论框增加 Emoji 弹层、以及利用 Cloudflare R2 + Pages 搭建免费图床并无缝集成到评论系统 的完整过程。

当然,除了这两个主要功能,我还在前台增加了评论的删除、编辑和点赞功能。点赞其实更像是“排序工具”——当一些文章下的评论数量过多、质量参差时,我可以通过点赞将优质评论手动置顶。至于这一部分的实现细节,后面再说~

1. 最终效果展示

各位可以先看看下面这个视频的实际展示。当然,如果你愿意的话,也推荐直接在评论区亲手试一试,并欢迎提出建议或改进意见。这次改造,我把 Emoji 弹层图床上传功能 所依赖的 JavaScript 脚本全部拆分成了一个独立模块文件。
这样做的好处是:页面在初始加载时几乎不受任何额外脚本影响,保持简洁与快速。

当访客点击评论框上方的表情按钮 😊[ 阅读全文 ]


原文链接: https://www.shephe.com/tutorial/wordpress-comment-image-upload-cloudflare/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

💾

在Lua中循环Require是如何处理的?

2025年8月7日 11:38

在 Lua 中,当多个脚本文件循环 require 时(例如 A 依赖 B,B 又依赖 A),最后 require 的值为 true 是由于 Lua 的 模块加载机制避免无限循环 的设计导致的:

  1. 模块加载状态跟踪:Lua 使用 package.loaded 表跟踪已加载的模块。
  2. 占位符机制:当开始加载模块 A 时,会先在 package.loaded 中设置 A = true(临时占位符)。
  3. 循环检测:若在加载 A 的过程中遇到 require B,而 B 又尝试 require A
    • 此时 package.loaded[A] 已存在(值为 true)。
    • Lua 会直接返回这个占位符值 true,避免无限循环。
  4. 最终值替换:当 A 完全加载后,其返回值会替换占位符(但循环依赖的模块已获取了占位值 true)。

在lua5.1中,出现循环require会直接报错(这边我们不讨论在5.1下的情况),如果报错是非常容易排查的,如下图:

lua5dot1error

代码案例演示

假设有两个文件互相依赖:
test_script

执行结果:
1
2
3
4
5
Start loading A
Start loading B
In B, a = true <-- 循环 require 导致值为 true
In A, b = Module B <-- B 正常加载完成
In main, a = Module A

关键点说明

  1. 加载流程
    • main.lua 执行 require "a",开始加载 A。
    • A 执行 require "b",开始加载 B。
    • B 执行 require "a",此时 A 正在加载中(package.loaded[a] = true),直接返回 true
  2. 值的变化
    • B 中的 a 获取到占位符 true
    • A 加载完成后,package.loaded["a"] 被替换为 "Module A"
    • 但 B 中已获取的 a 值不会更新(仍是 true)。

Lua 源码分析(以 Lua 5.4 为例)

关键函数在 loadlib.c 中的 ll_require 函数:

核心逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static int ll_require (lua_State *L) {
const char *name = luaL_checkstring(L, 1);

// 1. 检查模块是否已加载
lua_settop(L, 1);
lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE);
if (lua_getfield(L, 2, name) != LUA_TNIL) { // 已存在
if (lua_toboolean(L, -1) == 0) // 值为 false 表示加载失败
luaL_error(L, "module '%s' not found", name);
return 1;
}

// 2. 设置临时占位符 true
lua_pushboolean(L, 1);
lua_setfield(L, 2, name); // package.loaded[name] = true

// 3. 加载模块代码...
// ...(此处调用加载器执行文件内容)

// 4. 如果模块未返回值,则保持 true 不变
if (lua_getfield(L, 2, name) == LUA_TNIL) {
lua_pushboolean(L, 1);
lua_pushvalue(L, -1);
lua_setfield(L, 2, name); // 无返回值时设为 true
}
return 1;
}

关键步骤:

  1. **检查 package.loaded**:若模块已存在,直接返回其值。
  2. 设置占位符:在加载前设置 package.loaded[name] = true,标记模块正在加载。
  3. 处理循环依赖:当依赖模块尝试 require 当前模块时,直接返回占位符 true
  4. 替换最终值:模块加载完成后,用返回值替换占位符(若未返回值,则保持 true)。

解决方案:避免循环依赖

  1. 重构代码:解耦模块间的双向依赖。
  2. 延迟加载:在需要时再 require(例如在函数内部调用)。
    1
    2
    3
    4
    5
    6
    -- b.lua 修复版
    local a
    function get_a()
    if not a then a = require "a" end
    return a
    end
  3. 显式传递依赖:通过参数传递避免 require

最佳实践:模块设计应遵循 单向依赖 原则,避免循环 require。若无法避免,需明确处理占位值 true 的情况。

差点忽略的 Cursor 扣款,被我成功退款了!

2025年7月9日 23:32

Timeline:
June 16: Original post released, changes made to Pro plan and Ultra introduced, Teams plans unchanged.
June 30: We updated the original post and our pricing page to improve their clarity.
July 4: We want to apologize and provide more details in this post.
https://cursor.com/cn/blog/june-2025-pricing

最近 Cursor 发布了一个新公告,说如果你在 6 月份使用过程中被额外收费了,是可以申请退款的。我本来还没在意,结果一查账单,嘿,还真被多扣了点。

最后不但退款成功了,客服还挺快!心情美滋滋~
所以来分享下我的经历,顺便附上我的邮件模版,给需要的朋友参考。

💰发现多扣钱了

我是 Cursor Pro 用户,平时用它写代码、写文档都挺顺手。

某天我无意间去查了下付款记录,发现——

在我 Pro 订阅还在有效期内,竟然又被额外扣了 $20 多刀!

心里顿时一个大问号:
不是都包月了吗?怎么还额外收钱?

✉️写了封邮件问问看(模板附下方)

于是我很认真地写了一封英文邮件,主要表达了三点:

  1. 我是 Pro 用户,不太明白为啥会被额外收费;
  2. 希望他们能查一下这笔 $20 是怎么来的;
  3. 如果是误收,能不能退点钱回来。

邮件语气尽量礼貌,顺带还建议他们把定价写得更透明点。

📌 (邮件模板放在文末,复制粘贴就能用)

✅结果:退款到账!

WX20250709-221636

第二天就收到客服回复了,效率还挺高!

客服表示:

“已经帮你处理了 $27.53 的退款,涵盖的是 6 月 16 日到 7 月 4 日之间的使用费用。”

并且说明:

  • 是 usage 部分产生的额外费用;
  • 退款会在 5–10 个工作日内原路返回;
  • 如果还有问题随时可以回复他们。

我查了下账户,确实 usage dashboard 那一栏也显示了这些扣款——只不过我之前压根没注意 😅

🔍一些小建议 & 使用提醒

给也在用 Cursor 的朋友们几点小提示:

  • Pro 订阅 ≠ 全部免费:某些功能(比如高强度使用、团队协作等)可能仍然走 usage 计费;
  • 记得看看 usage 页面,dashboard 里其实有详细用量记录;
  • 有问题就发邮件,客服态度真的不错,处理也很快;
  • **别错过退款窗口!**官方说是最近这段时间有异常收费,早点申请更保险

📬邮件模板(自己填下日期和邮箱即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Subject: Question About Unexpected Usage Charges and Refund Request

Dear Cursor Support Team,

Hello,

I am a loyal user of Cursor and writing to seek clarification regarding a recent charge on my account.

I confirmed I have an active Pro subscription, but noticed a $20+ charge between [Start Date] and [End Date]. It appeared while my subscription was active, and I couldn't find clear information on the pricing page to explain this.

Could you kindly investigate this charge (Account Email: [Your Email]) and let me know if it was valid? If not, I’d appreciate a refund.

Thanks in advance, and also a small suggestion: please consider making usage charges more visible or easier to understand from the dashboard.

Looking forward to your reply!

✨总结:多看账单没坏处!

这波白嫖(咳)退款体验还是挺好的,也更了解了 Cursor 的计费逻辑。

用 AI 工具还是得“勤查账 + 多沟通”~
如果你也最近被扣了点莫名其妙的钱,别犹豫,发个邮件要回来就对了!

👋你也成功退款了吗?欢迎留言分享~

组合数学: 简介一(帕斯卡三角/二项式系数)

组合简介(组合数学入门)

视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书 | Facebook 组合计数是在顺序不重要时选择项目的方式。我们从一个简单的格子行走示例出发建立直觉,介绍二项式记号,推导公式,解释递推关系 [math]C(n,m)=C(n-1,m-1)+C(n-1,m)[/math],并把所有内容联系到帕斯卡三角。

格子行走示例 — 从左下到右上路径

想象你只能向右(R)或向上(U)移动。要从左下走到需要三次向右和两次向上的点,每一条最短路径都是由五步组成的序列,其中包含三个 R 和两个 U。 [caption id="attachment_70414" align="alignnone" width="512"]走格子: 排列组合 走格子: 排列组合[/caption] 每条有效路径只是从五个位置中选择两个放 U(其余为 R)。所以这样的路径数就是“从 5 中选 2”,记作 [math]C(5,2)[/math](等于 [math]C(5,3)[/math])。 示例序列:
R R U R U U R R R U R U R R U R R R U U U U R R R 

二项式系数(组合)表示法

从 [math]n[/math] 个项目中选出 [math]m[/math] 个(顺序不重要)的方式数记为 [math]C(n,m)[/math] 或 [math]\binom{n}{m}[/math] 两者都表示“从 n 中选 m”。

组合公式 — 基于阶乘的推导

先计算有序选择(排列):从 n 个不同项目中取出长度为 [math]m[/math] 的有序列表的数量为 [math] n\times(n-1)\times\cdots\times(n-m+1)=\dfrac{n!}{(n-m)!} [/math] 每一个无序的 [math] m [/math] 项集合对应 [math] m! [/math] 个有序列表(即这 m 项的排列)。除以 [math] m! [/math] 得到组合数: [math]C(n,m)=\dfrac{n!}{m!(n-m)!}.[/math]

把公式应用到格子示例

对于总步数 [math]n=5[/math] 和向上步数 [math]m=2[/math]: [math]C(5,2)=\dfrac{5!}{2!,3!}=\dfrac{120}{2\times 6}=10 [/math] 因此共有 10 条不同的最短路径。

为什么这个公式直观上合理

  • 视角一 — 选择位置:从 [math]n[/math] 个位置中选择放置 U 的 [math]m[/math] 个位置;这就是 [math]C(n,m)[/math]。
  • 视角二 — 用排列除以顺序:先计算 n 步的所有排列,然后除去相同步序的重排(比如相同类型步的交换)。

帕斯卡三角与递推关系

把 [math]C(n,k)[/math] 写成行可以形成帕斯卡三角:
 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 
[caption id="attachment_70413" align="alignnone" width="847"]Pascal/帕斯卡三角形 Pascal/帕斯卡三角形[/caption] 这些项满足递推关系 [math] C(n,m)=C(n-1,m-1)+C(n-1,m) [/math] 然后,我们可以很容易的写出至顶向下的动态规划算法实现(用@cache实现记忆化式的递归搜索):
from functools import cache

@cache
def C(n, m):
    if m == 0:
        return 1  # C(n, 0) = 1
    if m == n:
        return 1  # C(n, n) = 1
    return C(n-1, m-1) + C(n-1, m)
当然,也可以用自底向上的方式实现:
def C_bottom_up(n, m):
    dp = [[0]*(m+1) for _ in range(n+1)]
    for i in range(n+1):
        dp[i][0] = 1  # C(i, 0) = 1
        for j in range(1, min(i, m)+1):
            if j == i:
                dp[i][j] = 1  # C(i, i) = 1
            else:
                dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
    return dp[n][m]
这个自底向上的实现直接从小问题累加到大问题,避免了递归开销,同时也很容易扩展到计算整个帕斯卡三角。 组合数的自底向上 DP 可以用 一维数组优化,利用 滚动数组 原理,因为每一行的计算只依赖上一行。重点是从 右往左更新,这样不会覆盖还没用到的数据。 下面是实现示例:
def C_one_dim(n, m):
    dp = [0] * (m+1)
    dp[0] = 1  # C(i, 0) = 1

    for i in range(1, n+1):
        # 从右往左更新,避免覆盖上一行数据
        for j in range(min(i, m), 0, -1):
            dp[j] = dp[j] + dp[j-1]
    
    return dp[m]
示例:
print(C_one_dim(5, 2))  # 输出 10
✅ 优点:
  • 空间复杂度 O(m)
  • 时间复杂度 O(n*m)
  • 可以方便扩展计算整行或整列组合数

组合证明 — 采苹果

想要从 [math]n[/math] 个苹果中选 [math]m[/math] 个。考虑最后一个苹果(编号为 n): 如果你选了它,那就必须从前面的 [math]n-1[/math] 个中选剩下的 [math]m-1[/math] 个:有 [math]C(n-1,m-1)[/math] 种方法。 如果你不选它,那就必须从前面的 [math]n-1[/math] 个中选出全部 [math]m[/math] 个:有 [math]C(n-1,m) [/math] 种方法。 这两个互不相交的情况覆盖了所有可能,因此 [math] C(n,m)=C(n-1,m-1)+C(n-1,m) [/math] (该恒等式正是构造帕斯卡三角的规则。)

递推关系的格子解释

在格子上,观察到达某点的任意路径的最后一步:要么是 R,要么是 U。以 R 结尾的路径来自某个前一点,以 U 结尾的路径来自另一个前一点。把这两组路径分别计数并相加就得到相同的加法规则。

常见的小值与说明

[math]C(n,0)=1[/math](选择零个)。 [math]C(n,1)=n[/math](选择一个)。 [math]C(n,n)=1[/math](选择全部)。 当 [math]n=5[/math] 时的小表:
 C(5,0)=1 C(5,1)=5 C(5,2)=10 C(5,3)=10 C(5,4)=5 C(5,5)=1 

结语

组合出现在路径计数、二项式展开(系数)、概率与选择问题中。阶乘公式提供直接计算方法,而帕斯卡三角与递推关系则提供归纳直觉和高效构造数值的方式。格子行走示例是将“选择位置”等同于“选择步序”这一组合核心思想可视化的具体方法。 英文:Teaching Kids Programming - Introduction to Combinatorial Mathematics 1

相关文章:

  1. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  4. 第一次私校家长会: 原来家长比孩子还卷 前几天参加了娃的第一次家长会,和几位家长聊下来,真是个个都很厉害。不光孩子们卷,家长也一样卷,一眼望去基本都是 Dr/博士。娃还调侃我一句:“这有什么的,你不也是 Dr 吗?” 我心里默默想:还好没写学校名字,不然我这野鸡大学的头衔真拿不出手 😂。 私校里真是人才济济,乐器过 8 级的太常见了,卷得不得了。我还问过娃,是想当 big fish in a small pond...
  5. 拔牙后的注意事项(图, 慎入) Care of Mouth after Extraction 昨天又拔了两颗牙, 初步定在5月4号装牙套. 这是牙医诊所给的术后注意事项: 拔完后需要等3-4小时麻醉失效后才能吃喝. 稍微流点血是很正常的. 但是请不要漱口吐出, 因为这会加速流血. 你只要轻轻的含着口水并咽下即可. 如果一直流血, 请拿着纱布(并不是纸巾)放在拔牙处20分钟. 24小时内请不要运动, 术后几小时内回家静静坐着. 12小时内不要吸烟, 喝酒或者喝热饮, 因为这会让伤口流血....
  6. WP中检查白名单的用户是否登陆? WordPress 提供了一个方法 is_user_logged_in() 用于检查用户是否是登陆状态. 但是很可惜 这个方法在 pluggable.php 中定义. 也就是说如果你需要在插件中使用, 那么这个函数是没有被定义的. 我们来看一下 is_user_logged_in() 的实现: function is_user_logged_in()...
  7. 北爱尔兰的黑暗树篱 Dark Hedges 是摄影的取景之地 老实说, 去北爱尔兰当天我才了解到黑暗树篱这个地方(Dark Hedges), 因为都是媳妇做的功课, 日程安排上了, 我当上司机, 然后被普及了知识. 北爱尔兰的黑暗树篱是我们访问北爱尔兰的第一站, 从机场开车过去大概50分钟(黑暗树篱在机场的北面40英里左右). 黑暗树篱 Dark Hedges地址: Bregagh Rd, Stranocum,...
  8. 比特币最近波动有点大: 一天牛市一天熊 比特币10万美金以内都是最后上车的机会! 比特币近期的价格波动可以归因于多个关键因素,包括地缘政治动态、监管变化以及加密行业内的重大安全事件。其中一个主要影响因素是美国前总统唐纳德·特朗普对乌克兰和加密货币监管的立场变化。据报道,特朗普再次当选,他可能会推动减少美国对乌克兰的支持,这可能会影响全球金融市场和风险偏好。同时,特朗普正在将自己塑造为亲加密货币的候选人,表示有意让美国成为一个更加友好的加密货币环境。这一立场引发了市场对监管政策可能发生变化的猜测,导致市场情绪在乐观和不确定性之间波动。 特朗普对俄乌战争的态度 美国第43届总统唐纳德·特朗普已经在2025年1月当选并正式上任(第二次),那么他的政策可能会对比特币价格的波动产生更加直接和显著的影响。他政府对乌克兰和加密货币监管的立场已经不再是猜测,而是正在实际塑造市场的关键力量。 特朗普(Donald Trump)减少美国对乌克兰的支持,全球投资者可能会预期地缘政治稳定性发生变化,从而增加对比特币作为避险资产的需求。同时,他的亲加密货币立场可能正在推动市场的乐观情绪。如果他的政府推出有利于加密行业的监管政策,例如明确的合规指南或减少监管审查,可能会吸引更多机构投资者进入市场,并促进更广泛的加密货币采用。然而,政策的快速变化也可能导致短期市场剧烈波动,因为市场需要时间来消化新的政策动向。 朝鲜黑客盗取Bybit交易所15亿美元的ETH 另一个显著影响比特币价格的事件是近期涉及朝鲜黑客组织“Lazarus”的15亿美元以太坊被盗案件。据报道,Bybit交易所(全球第二)这些被盗的ETH已经被清洗,此次大规模黑客攻击引发了人们对加密行业安全性的担忧。此类安全事件不仅会削弱投资者信心,还可能引发更严格的监管审查,导致短期市场动荡。此外,被盗资金的大规模流动和出售可能对市场流动性造成冲击,进一步加大价格波动。随着这些事件的持续发酵,比特币价格正受到政治决策、监管预期以及安全挑战等多重因素的影响。 与此同时,与朝鲜黑客组织 Lazarus 相关的 15 亿美元以太坊被盗事件仍在影响加密市场。由于这些被盗 ETH 已被清洗,人们对加密行业安全漏洞的担忧持续存在,同时也可能引发更严格的监管审查。政治、监管和安全等多重因素交织在一起,共同导致了比特币近期的剧烈价格波动。...

C++中检测编译时与运行时: if consteval 与 std::is_constant_evaluated()

C++ 一直在不断增加新特性,以便程序员能够区分在编译时运行的代码和在运行时执行的代码。其中两个重要工具是函数 std::is_constant_evaluated()(C++20)和语言级别的 if consteval(C++23)。本文将解释这两者,展示实际示例,比较它们的保证和权衡,并建议在何时使用各自的方法。 这两种技术都允许你编写分支,根据当前的求值是在常量求值(编译时)上下文中还是运行时上下文中而表现不同。差异虽然细微,但非常重要:一个是返回布尔值的函数,另一个是编译器视为仅在编译时检查的特殊 if 语句,编译器会进行特殊处理。

std::is_constant_evaluated() (C++20)

这是一个在 <type_traits> 中声明的函数:
#include <type_traits>
constexpr bool std::is_constant_evaluated() noexcept;
当当前表达式在常量表达式(编译时)上下文中求值时,该函数返回 true,否则返回 false。 示例:
#include <iostream>
#include <type_traits>

constexpr int f() {
    if (std::is_constant_evaluated()) {
        return 42; // 编译时
    } else {
        return 0; // 运行时 
    }
}

int main() {
constexpr int a = f(); // 编译时求值 -> 42
    int b = f(); // 运行时求值 -> 0
    std::cout << a << ", " << b << "\n"; // 打印 "42, 0"
}

if consteval (C++23)

if consteval 是一个语言级别的 if 条件语句,编译器用它来判断当前求值上下文是否为常量求值。它提供了更强的编译时保证:编译器知道 consteval 分支在常量求值中必须可用,并且会拒绝不能在该上下文中出现的代码。 语法:
if consteval {
    // 仅编译时代码
} else {
    // 仅运行时代码
}
示例:
#include <iostream>

constexpr int f() {
    if consteval {
        return 42; // 编译时版本
    } else {
        return 0; // 运行时版本
    }
}

int main() {
    constexpr int a = f(); // 编译时上下文 -> 返回 42
    int b = f(); // 运行时上下文 -> 返回 0
    std::cout << a << ", " << b << "\n"; // 打印 "42, 0"
}

主要区别(总结)

  • 形式: std::is_constant_evaluated() 是一个函数;if consteval 是一个语言级条件语句。
  • 标准: std::is_constant_evaluated() 出现在 C++20 中;if consteval 出现在 C++23 中。
  • 保证: if consteval 为编译器提供编译时保证,并拒绝编译时无法使用的 consteval 分支中的代码。 std::is_constant_evaluated() 的执行环境更为宽松:它返回布尔值,但不会强制编译器拒绝其他分支中无效的编译时构造。
  • 在表达式内部使用: std::is_constant_evaluated() 可以在语句形式的 if 无法使用的表达式内部使用(例如,在三元运算符内部)。if consteval 需要语句级上下文。

具体比较示例

两个函数看起来相似,但在执行方面表现不同:
// if-consteval 示例
constexpr int f() {
    if consteval {
        return 1; // 仅在编译时
    } else {
        return 2; // 仅限运行时
    }
}

// std::is_constant_evaluated() 示例
#include <type_traits>
constexpr int g() {
    if (std::is_constant_evaluated()) {
        return 1; // 可能仍会编译运行时路径
    } else {
    return 2;
    }
}
以下场景中,差异至关重要:
// 使用 if consteval 时,编译器将拒绝无效的仅限编译时构造
constexpr int bad() {
    if consteval {
        std::cout << "compile-time"; // ❌ 错误 — 常量求值中不允许 I/O
    }
    return 0;
}

// 使用 std::is_constant_evaluated() 时,编译器会更加宽容,可能会编译通过,直到代码
// 实际用于常量表达式上下文。
#include <type_traits>
constexpr int perhaps_bad() {
    if (std::is_constant_evaluated()) {
        std::cout << "compile-time"; // 可能会编译通过;只有在 const-expr 中求值时才会出现错误
    }
    return 0;
}

使用场景

  • 如果您的目标是 C++23(或更高版本),并且想要清晰的、编译时强制的分支:请优先使用 if consteval
  • 如果您必须仅支持 C++20 环境:请使用 std::is_constant_evaluated()
  • 如果您需要在表达式(而非语句)中进行检查,请使用 std::is_constant_evaluated(),因为 if consteval 是语句级的。
  • 如果您希望编译器拒绝编译时无法使用的代码,if consteval 可以提供更强的保证。

实际用例

  • 为编译时和运行时(快速预计算 vs 较慢的运行时)编写不同的实现逻辑)。
  • 保护仅运行时操作(例如 I/O、动态分配或系统调用),以免它们被意外地用于常量求值路径。
  • 在编写可在 constexpr 上下文和正常运行时上下文中使用的库时,提供更清晰、更能揭示意图的代码。

简短实用的检查清单

  • 需要表达式级检查?→ std::is_constant_evaluated()
  • 想要编译器强制执行的仅编译时分支?→ if consteval
  • 仅针对 C++20?→ std::is_constant_evaluated()
  • 针对 C++23+ 并更注重清晰度和安全性? → if consteval.

TL;DR

std::is_constant_evaluated() — C++20:在编译时求值中返回 true 的函数(适用于表达式级检查)。 if consteval — C++23:
  • 编译器将其视为仅编译时分支的语言级条件语句;
  • 更强的编译时执行力和更清晰的意图。

结束语

这两个工具都很有用。如果您可以使用 C++23,则最好使用 if consteval 以获得更清晰的语义和更强的编译时保证,并在与 C++20 兼容或需要表达式级检查时回退到 std::is_constant_evaluated() [show_file file="/var/www/wp-post-common/justyy.com/cpp.php"] 英文:Detecting Compile-time vs Runtime in C++: if consteval vs std::is_constant_evaluated()

相关文章:

  1. 简易教程: C++的智能指针 C++ 智能指针教程 C++ 中的智能指针提供了自动且安全的内存管理。它们通过 RAII(资源获取即初始化)机制,帮助开发者避免内存泄漏和悬空指针的问题,确保对象在生命周期结束时被正确释放。 本教程将介绍 C++ 中三种主要的智能指针: std::unique_ptr:独占式所有权 std::shared_ptr:共享式所有权 std::weak_ptr:非拥有式弱引用 1. std::unique_ptr unique_ptr 拥有独占所有权。一个资源只能被一个...
  2. C++中的 const和constexpr 比较 C++ const 与 constexpr:真正的区别是什么? 一眼看都是定义常量。 为什么这很重要 现代 C++ 鼓励编写不可变、高效且表达力强的代码。两个关键字—const 和 constexpr—是这一理念的核心。它们看起来很相似,但理解它们的不同语义,对于正确利用编译期与运行期行为至关重要。 高层次对比 特性 const constexpr...
  3. 借助AI快速开源了N个小工具: 写代码越来越像做产品了, AI 真把我宠坏了(Vibe Coding) 程序员的未来?Vibe Coding + AI 一起上! 借助 AI 快速开源了三个小工具 最近,我利用 ChatGPT-4o 和 o4-mini 快速开发并开源了几个小工具。起因其实很简单——每次想转换 YAML/JSON 或进行...
  4. 被动收入之: 微博红包 今年开始重新经营我的微博帐号 drlai 收到两笔微信红包,应该是来自于官方的支持,150元(成功提现到支付宝)。虽然这不能持久,也没多少,但毕竟实现了零的突破,意义重大。 如果流量上来,内容创作者可能会接受到比较多的赞赏,这也是一个比较简单的变现方法。这也能作为一种被动收入,不过如果不是头部网红,可能杯水车薪,但如果你有好几个类似这样的,也能积少成多! 在用户中心,微博用户可以每天登陆手机微博APP打卡,获取点数和少量的红包钱(几分钱),积少成多! 微博做些小任务可获得积分和几分钱。聊胜于无。 微博的主要盈利模式 微博的主要盈利模式主要包括以下几个方面: 广告收入:微博的大部分收入来源于广告,尤其是品牌广告和效果广告。广告形式包括信息流广告(类似于推文广告)、热门话题广告、开屏广告和视频广告。品牌和企业可以利用微博庞大的用户群和社交互动来提升曝光率、推广品牌和产品。 会员服务:微博提供的VIP会员服务,用户可以支付订阅费用来享受更多的特权,比如个性化的主题、特有的表情包、私密权限设置等。这些会员服务主要面向个人用户,提升其社交体验。 直播和打赏:微博提供直播平台,用户可以通过购买虚拟礼物来支持主播,微博会从这些打赏中抽取一定比例的分成。此外,微博与内容创作者分成,通过内容付费、知识付费等形式变现。 增值服务:针对企业和大V(拥有大量粉丝的用户),微博还提供增值服务,如账号认证、粉丝数据分析、精准推送、推广和营销工具等。这些服务帮助企业提升营销效果,同时也增加了微博的收入来源。 电商和导流:微博上有大量的电商导流业务,尤其是和明星、网红的合作推广。微博用户在浏览社交内容时,可以直接跳转到商品购买链接,微博通过这种方式赚取导流佣金。 游戏联运:微博也会与一些游戏公司合作推出联合运营的游戏,微博负责推广和流量引入,用户充值或付费时,微博可以获得一部分的分成。 这些模式相结合,使得微博能够在广告市场、内容创作和电商等多个领域获利。...
  5. 豪车的修理费用就是贵一些 去年买了保时捷卡宴SUV(Porsche Cayenne)后,我一直担心将来修车费用会很高。当时购车时,车厂做了一次全面保养,把车里里外外都清洁了一遍。虽然这辆车已经三年车龄,但看上去几乎和新车没区别。 在英国,三年以内的新车通常不需要做MOT年检。而且很多这类新车会通过PCP(个人合同购车)方式出租给车主。简单来说,就是车主每月支付一笔租金,租期通常为三年,期满后可以选择一次性付清尾款买下车辆,也可以继续换租一辆新车。 举个例子,如果一辆新车售价是10万英镑,车厂可能按未来三年折旧后的50%残值来计算每月租金。三年后,如果车主不想买断,车厂就会将车辆作为二手车卖出,回收那5万英镑的残值。这样一来,车厂基本不会亏钱。此外,PCP合同中还有附加条款,比如每年限行1万英里,超出的部分需要额外付费,这些内容都会写在合同里。 车龄到了三年,车辆需要首次做MOT年检,同时车辆的市场价值也会首次出现较大幅度的贬值(一般是50%,甚至更多)。修车厂老板告诉我,相比玛莎拉蒂等其他豪车,保时捷的保值率相对较高。 这一年我开这辆保时捷基本没出什么问题。今年年初做了年检,顺利通过。随后又做了一次常规保养,修车厂老板告诉我,前后刹车片已经磨损了80%–85%。我们住剑桥村里,开车比较多(上班、送娃、家庭旅游都要用车),一年大概能开1-2万英理。 几周后我将车送回去更换刹车片。修完后账单是将近900英镑。我觉得有点贵,车行老板解释说,不仅换了前后刹车片,还有一个前雷达的传感器掉进了车体内部,为了修这个传感器需要拆掉前保险杠等部件,花了6个小时人工费。 我当时质疑说为啥这次修这么贵,他说:“因为这是保时捷。”我说:“那和别的车有什么区别?”他说:“It is not the same.” 我说不都一样么,他说:“It is not...
  6. C++ 教程: 用std::move来移动所有权 📘 C++ 移动语义与 std::move() 教程 C++的std::move用于转移变量/对像的所有权/Ownership。 🔹 什么是移动语义? 在 C++ 中,移动语义通过转移资源所有权/Ownership(如内存或文件句柄)来优化性能,而不是复制它们。 移动语义是在 C++11 中引入的,它允许: 更快速地传递大型或昂贵的对象...
  7. C++ Ranges 教程 C++20 引入了 ranges(范围),这是一个强大且优雅的抽象,用于处理序列(如数组、vector 等)。相比传统的迭代器或旧式循环,Ranges 提高了代码的可读性、可组合性和性能。 什么是 Range? 在 C++20 中,range(范围) 是一种抽象,代表一个可以迭代的元素序列。它与 views(视图) 和 actions(操作) 如过滤、转换等配合使用非常自然。...
  8. 换了个奥迪Q5大灯花了我1000英镑 我那辆奥迪Q5 SUV今年年检没通过,原因是左前车灯坏了,需要更换。车厂告诉我,光是订购零件就要700多英镑,加上人工费,总费用得1000英镑。但没办法,如果不修,车辆年检(MOT)就过不了,车也不能上路。 MOT是英国的机动车强制性安全检测(Ministry of Transport Test)的简称。 近侧前位置灯不工作 drl/位置灯集成(4.2.1(a)(ii)) Nearside Front Position lamp not working drl/position...

教孩子编程: 证明根号2是个无理数的两种方法(反证法/几何无限下降法)

视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书 | Facebook

如何证明 √2 是无理数 — 两种方法(反证法与几何无限下降)

“√2 是无理数”这一说法的意思是不存在整数 [math]a[/math] 和 [math]b\neq 0[/math] 且 [math]\gcd(a,b)=1[/math],使得 [math]\sqrt{2}=\dfrac{a}{b}[/math]。

方法一 — 反证法

假设相反,认为 [math]\sqrt{2}[/math] 是有理数。则存在整数 [math]a[/math] 和 [math]b[/math],满足 [math]b\neq 0[/math] 且 [math]\gcd(a,b)=1[/math],使得 [math]\sqrt{2}=\dfrac{a}{b}.[/math] 两边平方得: [math]2=\dfrac{a^2}{b^2}\quad\Rightarrow\quad a^2 = 2b^2.[/math] 由 [math]a^2 = 2b^2[/math] 可知 [math]a^2[/math] 为偶数,因此 [math]a[/math] 必为偶数。设 [math]a=2k[/math],其中 [math]k[/math] 为某整数。 代回去: [math] ^2 = 2b^2 \quad\Rightarrow\quad 4k^2 = 2b^2 \quad\Rightarrow\quad b^2 = 2k^2.[/math] 因此 [math]b^2[/math] 为偶数,故 [math]b[/math] 亦为偶数。 于是 [math]a[/math] 和 [math]b[/math] 都为偶数,这与我们假设的 [math]\gcd(a,b)=1[/math] 矛盾(它们至少有公因子 2)。该矛盾说明原假设错误;因此 [math]\sqrt{2}[/math] 为无理数。

方法二 — 几何无限下降(等腰直角三角形中线构造)

[caption id="attachment_70110" align="alignnone" width="575"]等腰直角三角形边向斜边作垂线证明根号2不是有理数 等腰直角三角形边向斜边作垂线证明根号2不是有理数[/caption] 设一个等腰直角三角形 [math]\triangle ABC[/math],其中直角在 [math]C[/math],两条直角边 [math]AC=BC=b[/math],斜边 [math]AB=a[/math],因此有 [math]a^2=b^2+b^2=2b^2[/math]。 取 [math]BC[/math] 的中点 [math]E[/math],从 [math]E[/math] 向斜边 [math]AB[/math] 作垂线,垂足为 [math]D[/math]。 则 [math]\triangle BDE[/math] 也是一个等腰直角三角形,并且与原三角形 [math]\triangle ABC[/math] 相似。记小三角形的斜边和直角边分别为 [math]a'=BE[/math] 与 [math]b'=BD[/math]。 有 [math]a'^2=2b'^2[/math],从而验证了 [math]\triangle BDE\sim\triangle ABC[/math]。 关键点在于相似(固定比例缩放),小三角形的尺寸是原三角形的一定比例。 从 [math]BC[/math] 取中点 [math]E[/math],向斜边 [math]AB[/math] 作垂线,交于 [math]D[/math]。 于是 [math]\triangle BDE[/math] 与 [math]\triangle ACB[/math] 相似。我们可以通过“重复减法”来表达边长关系: 因为 [math]\triangle ACE = \triangle ADE[/math],所以 [math]AC = AD[/math],因此 [math]AB - AC = AB - AD = BD[/math]。 进一步有 [math]AC - BD = BC - BD = BC - DE = BC - CE = BE[/math]。 因此 [math]AB - AC [/math] 辗转相减 [math] BE - BD[/math],即 [math]a - b \quad\Rightarrow\quad a' - b'[/math],其中 [math]a' = BE[/math],[math]b' = BD[/math]。 由于 [math]\triangle BED \sim \triangle ABC[/math],我们可以无限次重复这一构造过程。 每次重复相同的操作(取直角边的中点并作垂线到斜边),都会得到一个与原三角形相似的新等腰直角三角形,其边长都按某个固定比例 [math]r[/math] 缩小。 因此,斜边和直角边都会在每一步以几何级数的方式缩小。 这在整数情况下导致“无限下降”矛盾
  • 如果假设存在整数边长满足 [math]a^2=2b^2[/math],则这种几何构造(或等价的、保持整数关系的中点构造)会产生一个更小的正整数解。
  • 无限重复下去会得到一个严格递减的正整数序列,这显然不可能。
因此,不存在这样的整数解,即 [math]\sqrt{2}[/math] 是无理数。 两种方法均证明了 [math]\sqrt{2}[/math] 不能写成两个整数之比。
  • 方法一(反证法)利用奇偶性,说明若假设分数为最简形式则会导致分子和分母都为偶数,从而矛盾。
  • 方法二(几何无限下降)通过在等腰直角三角形中作中线并利用相似性得到更小的整数解,从而与最小性矛盾。
任一方法都给出清晰而严谨的证明,表明 [math]\sqrt{2}[/math] 是无理数。 [show_file file="/var/www/wp-post-common/justyy.com/math.php"] 英文:Teaching Kids Programming - Two Ways to Prove Square Root of Two is Irrational (proof by contradiction and geometric infinite descent)

相关文章:

  1. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  2. 第一次私校家长会: 原来家长比孩子还卷 前几天参加了娃的第一次家长会,和几位家长聊下来,真是个个都很厉害。不光孩子们卷,家长也一样卷,一眼望去基本都是 Dr/博士。娃还调侃我一句:“这有什么的,你不也是 Dr 吗?” 我心里默默想:还好没写学校名字,不然我这野鸡大学的头衔真拿不出手 😂。 私校里真是人才济济,乐器过 8 级的太常见了,卷得不得了。我还问过娃,是想当 big fish in a small pond...
  3. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  4. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  5. 时间是你的朋友: 延时满足 Time Is Your Friend: The Power of Delayed Gratification” 最近,比特币又创下历史新高,突破 12.5 万美元。美股同样表现强劲——微软的股价已来到 518.81 美元,而我刚入职那会儿,它还在 280...
  6. 比特币最近波动有点大: 一天牛市一天熊 比特币10万美金以内都是最后上车的机会! 比特币近期的价格波动可以归因于多个关键因素,包括地缘政治动态、监管变化以及加密行业内的重大安全事件。其中一个主要影响因素是美国前总统唐纳德·特朗普对乌克兰和加密货币监管的立场变化。据报道,特朗普再次当选,他可能会推动减少美国对乌克兰的支持,这可能会影响全球金融市场和风险偏好。同时,特朗普正在将自己塑造为亲加密货币的候选人,表示有意让美国成为一个更加友好的加密货币环境。这一立场引发了市场对监管政策可能发生变化的猜测,导致市场情绪在乐观和不确定性之间波动。 特朗普对俄乌战争的态度 美国第43届总统唐纳德·特朗普已经在2025年1月当选并正式上任(第二次),那么他的政策可能会对比特币价格的波动产生更加直接和显著的影响。他政府对乌克兰和加密货币监管的立场已经不再是猜测,而是正在实际塑造市场的关键力量。 特朗普(Donald Trump)减少美国对乌克兰的支持,全球投资者可能会预期地缘政治稳定性发生变化,从而增加对比特币作为避险资产的需求。同时,他的亲加密货币立场可能正在推动市场的乐观情绪。如果他的政府推出有利于加密行业的监管政策,例如明确的合规指南或减少监管审查,可能会吸引更多机构投资者进入市场,并促进更广泛的加密货币采用。然而,政策的快速变化也可能导致短期市场剧烈波动,因为市场需要时间来消化新的政策动向。 朝鲜黑客盗取Bybit交易所15亿美元的ETH 另一个显著影响比特币价格的事件是近期涉及朝鲜黑客组织“Lazarus”的15亿美元以太坊被盗案件。据报道,Bybit交易所(全球第二)这些被盗的ETH已经被清洗,此次大规模黑客攻击引发了人们对加密行业安全性的担忧。此类安全事件不仅会削弱投资者信心,还可能引发更严格的监管审查,导致短期市场动荡。此外,被盗资金的大规模流动和出售可能对市场流动性造成冲击,进一步加大价格波动。随着这些事件的持续发酵,比特币价格正受到政治决策、监管预期以及安全挑战等多重因素的影响。 与此同时,与朝鲜黑客组织 Lazarus 相关的 15 亿美元以太坊被盗事件仍在影响加密市场。由于这些被盗 ETH 已被清洗,人们对加密行业安全漏洞的担忧持续存在,同时也可能引发更严格的监管审查。政治、监管和安全等多重因素交织在一起,共同导致了比特币近期的剧烈价格波动。...
  7. 拔牙后的注意事项(图, 慎入) Care of Mouth after Extraction 昨天又拔了两颗牙, 初步定在5月4号装牙套. 这是牙医诊所给的术后注意事项: 拔完后需要等3-4小时麻醉失效后才能吃喝. 稍微流点血是很正常的. 但是请不要漱口吐出, 因为这会加速流血. 你只要轻轻的含着口水并咽下即可. 如果一直流血, 请拿着纱布(并不是纸巾)放在拔牙处20分钟. 24小时内请不要运动, 术后几小时内回家静静坐着. 12小时内不要吸烟, 喝酒或者喝热饮, 因为这会让伤口流血....
  8. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. /** MySQL...

家庭数据中心系列 为什么我从自建 Umami 迁移到 Umami Cloud? ——兼谈自部署和托管服务的取舍

2025年11月24日 08:19

家庭数据中心系列 为什么我从自建 Umami 迁移到 Umami Cloud? ——兼谈自部署和托管服务的取舍 无敌的个人博客 tangwudi

1 前言 在之前的文章中,我有2篇关于自建Umami的文章,一篇是搭建1.33.1版(参见文章:docker系列 搭建基于umami的网站流量监测系统),一篇是搭建2.11.3版(参见文章:家庭数据中心系列 当下最新版umami(2.11.3)详细搭建教程)。虽然我也部署了Google Analytics 4,但 Umami 的确是一个非常好的补充工具——界面简洁、数据直观,非常适合快速查看访客行为和趋势,从个人使用的角度来说,比 GA4 的使用体验还更轻量、友好。 但自建 Umami 也有让我略感“心累”的地方:每次大版本升级(比如从 1.x 到 2.x,或从 2.x 到 3.x),数据结构发声变动,旧数据就不一定能无缝兼容。比如这次推出的 v3 版本,甚至直接移除了对 MySQL 的支持,只保留了 PostgreSQL,这对那些建在 MySQL 上的旧站点来说就很尴尬:要么费劲做全盘迁 […]

<p>The post 家庭数据中心系列 为什么我从自建 Umami 迁移到 Umami Cloud? ——兼谈自部署和托管服务的取舍 first appeared on 无敌的个人博客.</p>

Mac上如何将 flac 导入到 Apple Music?使用快捷指令创建格式转换快捷操作

2025年11月10日 17:32

这篇文章介绍了如何在 macOS 上使用快捷指令结合 shell 命令来进行媒体文件的格式转换。文章首先讲解了安装 Homebrew 和 ffmpeg 的方法,使系统具备音视频处理能力;随后详细介绍了创建快速操作快捷指令的步骤,包括选择媒体类型、添加 shell 脚本、设置参数、创建通知以及修改图标和名称等操作。通过这种方式,用户可以在访达中直接右键执行自定义快捷指令,实现音视频格式转换、压缩或其他文件操作,提高日常工作效率,同时也为学习快捷指令和自动化操作提供了实践案例。

精神食粮系列 声音的觉醒(一):身体里的乐器——重新认识唱歌的本质

2025年11月10日 09:48

精神食粮系列 声音的觉醒(一):身体里的乐器——重新认识唱歌的本质 无敌的个人博客 tangwudi

1 前言 我从小就喜欢唱歌,印象中第一首认真学习的歌是小虎队的”青苹果乐园”,为了记下这首歌的歌词,当时还是在收音机前一句一句的听写到笔记本上的~,比在学校的听写可是自觉多了。 不过,一直以来,我都没有把唱歌当做一个爱好来对待,最多就是以前偶尔有机会去KTV时唱几首,还主要以刘德华、张学友、任贤齐这些老一辈的歌为主。当时的感觉,就算是老刘的歌有些歌都不是那么轻松,更别说张学友的了,很多歌唱起来嗓子都累,高音也很多唱不上去。因此,一直以来我都认为我嗓子条件一般,也没有在唱歌方面太上心。 不过,2年前,一个同学忽然来问我还在研究唱歌没有,恰好我当时也有点无所事事,所以就正式把唱歌当做了一个技术课题来研究。没想到的是,真正开始研究后才发现”唱歌”这事真的是一个巨坑,涉及到好多的专业名词,让我这种习惯了”学习任何事物都从底层原理开始 […]

<p>The post 精神食粮系列 声音的觉醒(一):身体里的乐器——重新认识唱歌的本质 first appeared on 无敌的个人博客.</p>

Final Cut Pro 音频降噪、人声增强插件,优化视频中的人声表现

2025年10月24日 17:53

这篇文章介绍了在 Final Cut Pro 中使用 FxFactory 插件提升音频降噪效果的方法。文章指出 FCP 自带的音频工具操作复杂,推荐安装 FxFactory 并使用其中的 AudioDenoise AI 插件实现智能降噪。该插件基于机器学习,可自动识别人声并去除背景噪音,保留音质自然。文章详细说明了插件的安装步骤、界面功能、主要控制参数(如降噪强度、频段平衡等),并提供了不同场景下的推荐设置和实用技巧,帮助用户在视频剪辑中快速获得清晰纯净的音频效果。

Final Cut Pro 如何给人物抠像?使用 FxFactory 实现人物抠像功能

2025年10月24日 11:55

这篇文章介绍了如何通过FxFactory安装并使用Background Remover插件实现视频背景移除。用户可通过官网或其他网盘链接下载安装并激活FxFactory后,下载Background Remover效果。在视频编辑软件中,将该效果拖拽到视频素材上即可实现抠像。插件提供多个可调参数,包括背景移除程度、边缘平滑及主体选择,方便用户根据需求微调。文章通过“抠图前后”示例展示了插件出色的去背景效果,操作简便且效果自然,非常适合视频制作者进行快速背景处理。

将电热毯通过 Homeassistant 接入 Homekit 并支持调节档位

2025年10月20日 12:20

这篇文章介绍了作者在北京寒冷天气下购买并使用一款支持米家和Homeassistant的电热毯的过程。作者因不满水暖毯噪音改用电热毯,并以米家兼容和分区温控为选购标准。文章重点讲述了如何通过Homeassistant将电热毯接入苹果Homekit系统,实现开关控制和档位调节。具体步骤包括创建模板辅助元素、设置开关动作、档位百分比映射及Homekit集成。最终实现了电热毯在苹果家庭App中的控制,但仍需在米家中操作分区温控。

emby系列 TinyMediaManager 实战指南:从媒体刮削到多版本检测的完整体验

2025年10月20日 09:16

emby系列 TinyMediaManager 实战指南:从媒体刮削到多版本检测的完整体验 无敌的个人博客 tangwudi

1 前言 对于很多像我一样喜欢收集影视资源的人来说,Emby 几乎是家庭媒体中心的不二之选:它的界面美观、分类清晰、功能丰富,能让本地资源秒变流媒体体验。 但当收藏规模一路膨胀到几千、上万部时,你就会发现,Emby 在最底层的那部分工作——也就是媒体文件刮削与元数据整理——其实并不是它最擅长的领域。 Emby 的设计初衷是“展示”和“播放”,而不是“批量管理”。它可以帮你把已经整理好的媒体库变成漂亮的界面,但前提是:这些文件得命名规范、结构清晰、信息完整。否则,它就会频繁出现识别错误、错配封面、元数据混乱、合并错影片、扫描极慢等各种让人头大的情况。 尤其当影片总量超过五千部之后,这个问题会被成倍放大。第一次扫描媒体库往往需要十个小时甚至更久,而过程中任何命名、路径或 nfo 文件的小问题,都会导致 Emby 把几百部电影识别错、漏刮、甚至合并成一个条目。 换句话说,Emby 更像一个“展示 […]

<p>The post emby系列 TinyMediaManager 实战指南:从媒体刮削到多版本检测的完整体验 first appeared on 无敌的个人博客.</p>

Mac空格响应慢?Adobe软件Ps、Ai卡在抓手工具解决方法,临时抓手无法恢复指针

2025年10月9日 19:02

这篇文章介绍了作者在使用Adobe软件时遇到抓手工具无法切换的问题,并记录了排查与解决过程。最初通过“中/英键+空格”临时解除抓手锁定,但问题在多个软件中仍存在。作者逐步排除输入法、系统、账户、键盘等可能原因,最终发现是名为Fastzip的软件引起空格键失灵。卸载后问题解决。作者总结经验,建议遇到类似异常可先关闭可疑程序的输入监控与辅助功能权限,以快速定位问题。

奇技淫巧系列 Obsidian 图片自动上传:PicGo-Core 对接 Chevereto 图床实战

2025年10月6日 09:51

奇技淫巧系列 Obsidian 图片自动上传:PicGo-Core 对接 Chevereto 图床实战 无敌的个人博客 tangwudi

1 前言 我平时主要在 macOS 下使用 Obsidian(Markdown)来写博客,写作过程中不可避免要插入图片,因此图床方案就成了绕不开的问题。 我的博客最终的图床托管在 Cloudflare R2 上,但为了实现 容灾备份,实际流程稍微复杂一些:我在写作时,图片会先被上传到家庭数据中心自建的 Chevereto 图床(参考文章:奇技淫巧系列 chevereto+PicGo+Obsidian实现高效的图床图片上传及图片url获取),然后再通过 rclone 将 Chevereto 图床里的图片同步复制到 R2(参考文章:家庭数据中心系列 使用rclone和cloudflare R2打造chevereto的异地容灾图床)。 换句话说,我本地写作时一直依赖的是 本地网络中的Chevereto 图床,而 如何把 Obsidian 插入的图片顺畅地上传到 Chevereto 并生成链接,就 […]

<p>The post 奇技淫巧系列 Obsidian 图片自动上传:PicGo-Core 对接 Chevereto 图床实战 first appeared on 无敌的个人博客.</p>

如何在Mac上部署indexTTS2,快速语音克隆和情感控制

2025年10月2日 21:59

这篇文章介绍了如何本地部署并运行IndexTTS语音克隆项目。首先需要安装git-lfs以支持大文件下载,然后通过git命令克隆项目并执行git lfs pull拉取资源。接着安装uv包管理器以同步依赖环境,并使用modelscope工具下载IndexTTS-2模型至本地。完成后运行uv run webui.py启动Web界面,首次运行可能稍慢。成功启动后在浏览器访问http://127.0.0.1:7860即可使用,选择模式、输入文本并提供参考音频即可生成语音。作者实测在M1 Pro设备上运行快速,声音克隆效果优秀,推荐体验。

家庭数据中心系列 向量:AI 世界里的通用语言

2025年9月29日 07:57

家庭数据中心系列 向量:AI 世界里的通用语言 无敌的个人博客 tangwudi

1 前言 从我之前关于 RAG、知识库的文章中,经常会出现一个词——向量,可以说,向量是 AI 的核心概念之一。只要对 AI 有所接触的朋友,对这个词可能都不陌生。 其实,就算不是因为 AI,大家对向量也应该不陌生:在学校的时候,老师可能会让你画箭头、写坐标,或者在几何题里算长度和方向。没错,AI 里说的向量,和我们记忆里的那个数学概念其实是一个意思:它本质上是一组数字,只不过维度更多,应用场景更广。 那么,为什么向量在 AI 里如此重要呢?原因很简单——计算机并不能直接理解人类的词汇,它看到的只是数字和符号。比如“苹果”这个词,对我们来说有具体的意义和画面,但对计算机来说,只是一串字符而已。为了让计算机能理解、处理、甚至找到不同对象之间的关系,就需要一个桥梁,而这个桥梁就是向量。 在 AI 的世界里,每一段文字、每一个词,甚至一张图片、一段音乐,都可以用向量来表示。向量把抽象的事物转化为 […]

<p>The post 家庭数据中心系列 向量:AI 世界里的通用语言 first appeared on 无敌的个人博客.</p>

在 Mac 的 Drawthings 中使用 Qwen Image Edit 打造个人IP形象衍生图

2025年9月19日 18:11

这篇文章介绍了Drawthings应用接入Qwen Image Edit模型的体验与使用方法。作者展示了用中文提示词生成动漫风格图像的高质量效果,并强调角色细节和还原度优异。文章详细讲解了快速上手流程:在App Store安装应用、选择社区算力以减轻本地设备压力、粘贴配置文件以调用指定模型和LoRA参数。接着介绍了导入形象图、输入提示词生成作品的步骤,最后说明如何在历史记录中导出图像。整体来看,该工具不仅支持中文提示,还能生成高质量二次元风格作品,适合制作表情包或衍生图像。

❌