2026年1月

排名国家 / 地区中位下载速度 (Mbps)
1新加坡407.05
2智利357.25
3阿拉伯联合酋长国356.24
4法国346.04
5中国香港(特别行政区)345.33
6冰岛318.37
7中国澳门(特别行政区)312.37
8美国302.68
9瑞士278.51
10泰国275.26
11越南273.64
12以色列273.26
13罗马尼亚269.23
14丹麦266.23
15西班牙263.31
16中国台湾259.92
17加拿大256.49
18秘鲁252.42
19安道尔239.97
20匈牙利236.85
21葡萄牙236.77
22韩国232.86
23日本229.84
24科威特229.79
25荷兰224.14
26中国223.47
27巴西219.78
28新西兰215.88
29波兰213.25
30立陶宛209.40
31卢森堡207.01
32哥伦比亚206.83
33巴拿马197.02
34卡塔尔196.96
35约旦195.47
36乌拉圭193.86
37马耳他192.98
38瑞典190.42
39爱尔兰188.90
40摩尔多瓦171.08
41挪威168.69
42澳大利亚164.09
43英国162.77
44马来西亚162.39
45芬兰161.16
46哥斯达黎加156.03
47特立尼达和多巴哥152.24
48巴林144.46
49厄瓜多尔143.83
50沙特阿拉伯142.83
51塞浦路斯141.89
52比利时138.09
53圭亚那130.21
54斯洛文尼亚129.78
55拉脱维亚124.30
56黑山118.39
57奥地利114.48
58克罗地亚112.88
59意大利110.09
60阿根廷109.90
61巴拉圭108.01
62菲律宾107.95
63塞尔维亚103.78
64德国102.03
65圣马力诺101.53
66斯洛伐克99.11
67萨尔瓦多97.07
68委内瑞拉96.73
69牙买加95.69
70爱沙尼亚94.33
71阿曼93.63
72格林纳达93.03
73墨西哥91.83
74尼加拉瓜91.66
75埃及91.55
76阿尔巴尼亚90.32
77乌兹别克斯坦89.89
78乌克兰89.68
79俄罗斯89.66
80白俄罗斯89.27
81保加利亚88.83
82捷克88.64
83危地马拉88.22
84希腊86.86
85阿塞拜疆86.15
86科索沃85.97
87文莱85.53
88圣基茨和尼维斯85.33
89吉尔吉斯斯坦85.06
90洪都拉斯84.72
91哈萨克斯坦83.50
92巴哈马82.90
93蒙古80.18
94尼泊尔79.00
95亚美尼亚77.19
96巴勒斯坦74.99
97土耳其69.11
98多米尼加共和国68.34
99孟加拉国63.48
100玻利维亚62.44
101印度61.58
102毛里求斯59.15
103科特迪瓦58.80
104苏丹57.55
105北马其顿57.49
106摩洛哥56.75
107毛里塔尼亚55.93
108加纳53.47
109老挝52.34
110阿尔及利亚51.80
111海地51.79
112伯利兹49.67
113柬埔寨48.82
114南非48.31
115布基纳法索47.98
116刚果(金)46.38
117格鲁吉亚44.91
118安提瓜和巴布达43.60
119印度尼西亚43.18
120伊拉克42.61
121博茨瓦纳42.24
122卢旺达40.85
123塔吉克斯坦40.42
124加蓬39.60
125赞比亚39.60
126波黑38.18
127多哥35.74
128莫桑比克35.55
129津巴布韦34.18
130斯里兰卡32.61
131尼日利亚31.14
132缅甸28.47
133乌干达28.08
134马达加斯加26.61
135也门25.49
136贝宁24.53
137安哥拉22.95
138塞内加尔21.86
139伊朗20.99
140坦桑尼亚20.59
141马尔代夫20.50
142苏里南20.30
143索马里19.71
144突尼斯18.75
145黎巴嫩18.62
146巴基斯坦18.27
147纳米比亚16.54
148肯尼亚15.89
149喀麦隆13.40
150利比亚10.57
151冈比亚9.66
152阿富汗4.65
153古巴3.72
154叙利亚3.63

数据来源

Ookla 的城市精度阈值太高,漏掉了太多结果,故没有选取


📌 转载信息
原作者:
F-droid
转载时间:
2026/1/6 12:07:33

众所周知,gpt5 系列的长思考一直被诟病,在之前,由于没有回传思考,导致 gpt 的每次对话都要重新思考,会导致时间的大幅浪费

然而目前 kilo roo 等对于 gpt 系列又不会回传思考签名,所以就只能自己做了

gpt 本身其实也提供了回传思考签名的方法,需要走 responses 格式的接口

实际体验来说,确实如预期那样,整体思考时间大幅缩减,只会在首次几轮存在长思考的情况,后续长思考就几乎没有了:

开头几轮:

之后:


和在 cursor 里的 gpt 表现一致,所以建议使用 gpt 时,尽量使用能支持回传思考签名的

gpt 本身 debug 的能力是比 claude 要更强的

一回合做出来的效果:

测试使用的插件来自:


📌 转载信息
原作者:
Lianues
转载时间:
2026/1/6 12:07:23

如题,阿联酋的 Technology Innovation Institute (TII) 发表了新模型 Falcon-H1R
在得分上碾压了一众小模型


作为一个 7B 大小 256k context window 的模型跟 20B 乃至 32B 打的有来有回
而且混合模式会让模型在内存优化方面有着相当的潜力
有兴趣的朋友可以试看看

模型

线上使用


📌 转载信息
原作者:
josenlou
转载时间:
2026/1/6 12:07:11

刚刚找到的站点
目测没有任何付费端口
注册也只是多了图片是否公开的选项
有兴趣可以看看



📌 转载信息
原作者:
josenlou
转载时间:
2026/1/6 12:03:52

闲着没事搞了个神经网络架构,开源出来水一下

GitHub: GitHub - 1600822305/Fielix: A novel neural network architecture featuring Field Effect Propagation, Dynamic Topology, Spiral Memory, and Emergent Position Encoding. Achieves better learning efficiency than Transformer.

简单说就是用 "场效应" 替代注意力机制,实验下来学习效率比 Transformer 高不少:

实验结果 (27M 参数)

  • 初始 Loss:Fielix 3.0 vs Transformer 7.9
  • 最终 Loss:Fielix 1.66 vs Transformer 2.59
  • 训练速度:慢 2x

缺点是训练慢 2 倍

没精力继续优化了,感兴趣的大佬随便玩


📌 转载信息
原作者:
fakefakefake
转载时间:
2026/1/6 12:03:27

准备:

modal secret create qwen-auth QWEN_API_KEY=sk-123abc
modal secret create huggingface-secret HF_TOKEN=hf_…
import modal, os
MODEL_ID = "Qwen/Qwen3-VL-8B-Instruct-FP8"
MODEL_DIR = "/data/model"
vol = modal.Volume.from_name("qwen-storage", create_if_missing=True)
image = (modal.Image.debian_slim().apt_install("ffmpeg", "libsm6", "libxext6").run_commands("pip install -U pip").pip_install("vllm>=0.7.0").pip_install("huggingface_hub", "hf_transfer", "decord","torch-c-dlpack-ext").env({"HF_HUB_ENABLE_HF_TRANSFER": "1","PYTORCH_CUDA_ALLOC_CONF": "expandable_segments:True"}))
app = modal.App("qwen-vl-volume")
@app.function("/data": vol},timeout=1800,secrets=[modal.Secret.from_name("huggingface-secret")]) def download_model_to_volume():
    from huggingface_hub import snapshot_download
    snapshot_download(MODEL_ID,local_dir=MODEL_DIR,ignore_patterns=["*.pt", "*.bin"])
    vol.commit()
@app.cls(gpu="l4", image=image, volumes={"/data": vol}, scaledown_window=180, timeout=600, secrets=[modal.Secret.from_name("qwen-auth")]) class QwenServer:
@modal.web_server(port=8000, startup_timeout=600) def serve(self):
        import subprocess, sys
        if not os.path.exists(MODEL_DIR):
            return
        api_key = os.environ.get("QWEN_API_KEY", "sk-default")
        cmd = [sys.executable, "-m", "vllm.entrypoints.openai.api_server","--model", MODEL_DIR,"--served-model-name", MODEL_ID,"--trust-remote-code","--tensor-parallel-size", "1","--api-key", api_key,"--gpu-memory-utilization", "0.90", "--max-model-len", "8192", "--kv-cache-dtype", "auto","--limit-mm-per-prompt", '{"image": 16, "video": 4}',"--port", "8000"]
        subprocess.Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)


效果:

原图:


29.0 tok/s


📌 转载信息
原作者:
Clancy
转载时间:
2026/1/6 12:02:52

Bacloud 的云存储免费版提供 32 GB 空间,上传下载文件不限速,


可以创建分享链接,并且非常高级!!!可以设置仅查看权限,可以编辑;


自定义权限太强了,可以设置密码,可以设置过期时间,设置备注,还能限制下载,启用编辑;

教程
1. 访问 Bacloud 的存储界面,注册登录账号
地址:Free Cloud Storage | Personal Cloud disk - BaCloud.com


2. 点击免费套餐,查看配置


3. 设定电子邮件和密码,推荐电子邮件和密码和你注册 Bacloud 一样


4. 配置是 32GB 存储,费用 0 元,点击 Add to Today


5. 可选渠道包括 PayPal、PayPal Subscription(订阅)、银行转账、PaySera、CoinGate(虚拟货币)、支付宝、银联、Stripe 以及 Cryptomus
这个不必在乎,随便选择,不是真的要验证付款


6. 成功,邮件也会收到邮件确认


7. 开通成功去看看套餐, 点击 Login to Bacloud Drive


📌 转载信息
原作者:
user554
转载时间:
2026/1/6 12:00:33

这里好像没有讨论 java 技术的 继续讨论。
在前段时间公司要自己搞个电商平台,首选开发语言用 java, 架子用 springboot,我作为研发负责人。
在立项初期我准备上 cloud, 但是老板没同意,说后面再迭代,我因为刚来这家公司我也就没好说什么,单体就单体呗。
在后面的开发过程中产品提出要增加一个供应商服务端,两端会有频繁的数据交互,我思考了半天有几个方案,要么是谷歌的 grpc, 要么是阿里的 dubbo, 或者是 openfeign, 不过 grpc 要写 protobuf,dubbo 以前用的 2.8 版本遇到兼容性问题现在好多年不用而且时间给的少我怕来不及,openfeign 又没脱离 cloud 依赖,需要引入一堆 maven 依赖,思来想去总不能直接 http 吧,这不胶水架构了么。
最后吧,还是用了胶水架构,不过是好用一点的,这就是 HTTP Interface 啦,因为当时是我负责搭建架子的,所以我采用了基于 jdk17 的 boot3.5, 正好是基于 Spring Framework 6 的。
这个东西用起来门槛非常低,只需要一个配置:

@Configuration @RequiredArgsConstructor @Slf4j public class HttpInterfaceConfig {

    private final TenantPropagator tenantPropagator;

    @Value("${service.auth.secret-key}") private String secretKey;

    private WebClient.Builder createWebClientBuilder(String baseUrl) {
        return WebClient.builder()
                .baseUrl(baseUrl)
                .filter(this::addAuthHeaders) // 添加认证过滤器
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
    }

    /**
* 为每次请求动态添加认证头
*/
private Mono<ClientResponse> addAuthHeaders(ClientRequest request, ExchangeFunction next) { // 每次请求时动态生成时间戳、随机数和签名 long timestamp = System.currentTimeMillis(); String nonce = UUID.randomUUID().toString().replace("-", "").substring(0, 16); String signature = HmacSignUtils.generateTimestampSignature(timestamp, nonce, secretKey); log.debug("🔐 动态生成认证头 - timestamp: {}, nonce: {}, signature: {}", timestamp, nonce, signature); // 创建新的请求,添加认证头 ClientRequest newRequest = ClientRequest.from(request) .header("X-Internal-Service", "true") .header("X-Service-Timestamp", String.valueOf(timestamp)) .header("X-Service-Nonce", nonce) .header("X-Service-Signature", signature) .build(); return next.exchange(newRequest); } @Bean public OperationPlatFormApiClient operationPlatformApiClient(
@Value("${service.operationPlatform.url}") String baseUrl)
{ log.info("=== operationPlatformApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); log.info("secretKey: {}", secretKey != null ? "已配置" : "未配置"); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); HttpServiceProxyFactory factory = HttpServiceProxyFactory .builderFor(adapter) .build(); OperationPlatFormApiClient client = factory.createClient(OperationPlatFormApiClient.class); log.info("✅ operationPlatformApiClient 创建成功"); return client; } @Bean public SupplierApiClient supplierApiClient(
@Value("${service.supplier.url}") String baseUrl)
{ log.info("=== SupplierApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); log.info("secretKey: {}", secretKey != null ? "已配置" : "未配置"); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); HttpServiceProxyFactory factory = HttpServiceProxyFactory .builderFor(adapter) .build(); SupplierApiClient client = factory.createClient(SupplierApiClient.class); log.info("✅ SupplierApiClient 创建成功"); return client; } @Bean public CrowdsourcingApiClient crowdsourcingApiClient(
@Value("${service.crowdsourcing.url}") String baseUrl)
{ log.info("=== CrowdsourcingApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); return HttpServiceProxyFactory .builderFor(adapter) .build() .createClient(CrowdsourcingApiClient.class); } }

就可以了,然后就能像写 openfeign 那样:

@Resource private SupplierApiClient supplierApiClient;

@PostMapping("/createSupplier") @Operation(summary = "新增供应商用户") public Mono<CommonResult<Integer>> createSupplier(@Valid @RequestBody SuppLierUsersVO reqVO) {
    return ReactiveApiHandler.processReactive(supplierApiClient.createAccount(reqVO), "创建供应商账户");
}

要使用它只需要有 spring-webflux 就可以了,好像是 Spring Framework 6 自带的。

ps:
这东西有个坑,就是你的客户端里的接口越多,启动的时候就越慢,所以一般推荐做个懒加载,不然你客户端写上百个接口,启动就要占用你一分钟的时间。


📌 转载信息
原作者:
furry
转载时间:
2026/1/6 11:59:34

Baserow 是一款对标 Airtable
但主打开源的无代码数据库软件
除了可以透过以下的 github 部属自己的本地服务外

也可以透过官方的平台创建云数据库
目前看起来价格确实比 Airtable 本身更多 (免费方案)

有兴趣可以试看看


📌 转载信息
原作者:
josenlou
转载时间:
2026/1/6 11:58:38

前提:

新功能展示效果如下

【开源】质的飞升!大香蕉生成图片转换为可编辑 PPT 的速度直接质变!飞升了!GPU 加持下无敌2

增加 GPU 版本识别图片转换为 PPT,速度质的飞升!

下载 ppt_editor_ocr_GPU.zip

然后 GPU 版本安装方式:

GPU 版本,需显卡驱动程序版本 ≥450.80.02(Linux)或 ≥452.39(Windows)

python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/

GPU 版本,需显卡驱动程序版本 ≥550.54.14(Linux)或 ≥550.54.14(Windows)

python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/

接下来运行安装 requirements.txt 这个文件 py run.py 即可!


📌 转载信息
原作者:
Tammie_Herrold
转载时间:
2026/1/6 11:58:16

一个轻量的 CLI,用于在 Claude Code 与 Codex 的环境变量之间快速切换。功能比较简单,适合轻度使用。

快速开始

  1. 安装:
npm install -g @praeviso/code-env-switch
  1. 交互式添加 profile(若不存在会创建 ~/.config/code-env/config.json):
codenv add
# 再执行一次,用来添加另一种 type
codenv add

交互示例:

$ codenv add
Select type (1=codex, 2=claude): 1
Profile name (default: default): primary
Base URL (required): https://api.example.com/v1
API key (required): YOUR_API_KEY
  1. 按 type 设置默认项:
codenv default codex primary
codenv default claude default
  1. 启用自动应用:
codenv init
新开终端(或执行 `source ~/.bashrc` / `source ~/.zshrc`)即可自动应用默认配置。
  1. 交互式选择:
codenv use 或者 codenv use claude mirror

不会永久污染环境变量,原理是每次 bash 启动的时候自动执行脚本 export 对应的环境变量。

测试下来,切换 claude 的时候会显示上一个 proflie 的 api key,但是实际上是已经切换过来了,可以用 status 查看。

此外不知道是否会和原有的 cc/codex 的 config 文件里面的 apikey 冲突,我还没有测试。


📌 转载信息
转载时间:
2026/1/6 11:57:35

英伟达 NIM 开发者平台两个最近很火的国产模型 GLM-4.7 和 MiniMax M2.1,下面教大家手把手免费薅 API

1、打开 build.nvidia.com 点击右上角的 login,输入邮箱地址,点击 Next


2、自动跳转到创建 nvidia 账户页面,创建账户


3、邮箱会收到一个 6 位验证码,填进去。在 nvidia cloud 界面,随便输入一个用户名,进行下一步


4、页面右上角会出现一个 Verify,点击出现验证手机号界面,location 选择 china,phone number 填写 86 1xxxxx (自己手机号)。注意一定要先填手机号,再选择国家,要不然下方的 sendcode 按钮为灰色不可点击


5、验证通过后,获取 api key。登录后,点右上角头像 → API Keys。

找到 Generate API Key。给 Key 起个名字,过期时间可以调成 Never Expire,得到的 key 为 “nvapi-” 开头的字符串。复制保存!这个 Key,能调用 NIM 上所有免费模型。


6、API 地址,填入 https://integrate.api.nvidia.com/v1。

API 密钥,就是上面生成的 API Key。

模型,推荐 z-ai/glm4.7、minimaxai/minimax-m2.1 和 moonshotai/kimi-k2-thinking


📌 转载信息
原作者:
user1881
转载时间:
2026/1/6 11:42:04

提示词如下

马年发财手机壁纸设计。主色调为喜庆的红色和金色,背景采用传统的中国风花纹,呈现浓烈的节庆气氛。画面主体为一匹神气十足的骏马,正面视角,马头昂起,眼神坚定,展示出强烈的力量感和速度感。马身的线条圆润流畅,结合中国传统的剪纸风格,形成鲜明的对比,体现出浓厚的中国文化底蕴。马儿背后有金色祥云和锦缎飞舞,象征着财富和吉祥。金色局部点缀,给人一种如同福气降临的感觉,仿佛迎接着新一年的好运。画面左上角以大号书法字体写着“2026”,右下角用小号的手写体“新春快乐”两字,均为亮眼的金色,传递着浓浓的春节气氛。整体风格热烈、吉祥、喜庆,非常适合春节期间的手机壁纸,充满了年味和祝福。```

📌 转载信息
原作者:
LinuxKurt
转载时间:
2026/1/6 11:41:42

渗透测试资产搜集

渗透的本质就是信息收集,目的是尽可能全面的描绘目标资产的全貌,包括所有域名、子域名、IP 地址、开放端口及关联的公司信息,为后续漏洞探测提供基础。

域名及子域名搜集(深度和广度)

拿 baidu.com 举例,我们的目的是找到所有和目标主域名关联的二级,三级甚至四级域名:www.baidu.com,one.two.baidu.com 等

被动查询(利用公共数据库)

常用的在线查询网站

我个人常用 crt.sh

  • 特点:这是最老牌、最著名、也是最常用的 CT 日志搜索引擎之一。它汇总了来自多个 CT 日志的数据,查询结果非常全面。
  • 用法:输入域名,例如 %baidu.com (使用百分号 % 可以进行通配符搜索,以匹配所有子域名)

自动化工具

个人常用的

  • OneForAll
  • 特点:一个功能强大的综合子域名收集工具,它内置了对 crt.sh 、Censys 等多个 CT 日志源的查询模块。

还有些常见的空间搜索引擎:fofa,shodan,censys。 常用的为 fofa`,作为国内最老牌的空间搜索引擎,FOFA 的主要优势在于对中文和国内资产的覆盖度高,支持多维度搜索

主动探测

子域名爆破

关键要素:高质量字典

在没经过目标产商的允许擅自爆破属于违法行为!此教程仅作学习分享交流!

暴力破解的成败很大程度上取决于使用的字典(Wordlist)。渗透测试人员通常会使用的字典包括:

  • 通用字典 (General Wordlists):如 SecLists 中的 DNS 目录,包含常见的 mail , dev , test ,api , admin , vpn 等。
  • 企业定制字典:结合目标公司业务、员工姓名、产品名称、城市名称等自定义生成的字典。
  • 大型综合字典:通过爬虫、CT 日志、公共数据等方式汇集的大型子域名列表。

顶级域名的收集

除了常见的子域名收集姿势,还有顶级域名的收集,例如像 google,星巴克这样的大厂,它们的资产遍布全球,也就是说它有可能并不会告诉你一个确切的域名范围。

被动收集

搜索域名购买(任意一个都行),这里拿 google 举例


发现以下都被注册,再对这些域名进行子域名收集,这样的你的攻击面就比先前广了许多。

代码与页面信息泄露

这一阶段的目标是深入分析目标网站的代码和公开配置,以发现隐藏的 API 端点、敏感文件、内部注释和不应公开的路径。

前端代码分析

现代 Web 应用大量依赖前端 JavaScript (JS) 代码与后端 API 通信。JS 文件中经常硬编码或逻辑性地包含大量敏感信息。
核心关注点:

  1. API 接口路径:发现所有前端调用的 API 端点,例如 /api/v1/user/info 。
  2. 敏感字符串:搜索 token 、 secret 、 key 、 password 、 admin 等关键词。
  3. 子域名 / 内部域名:JS 文件中可能硬编码了开发环境或测试环境的域名(如 dev.corp.com ),或
    调用的第三方服务域名。
  4. 云服务凭证:寻找 AWS S3 bucket 名称、Google Cloud 或 Azure 存储服务的 URL 等。
  5. API 接口路径:发现所有前端调用的 API 端点,例如 /api/v1/user/info 。
  6. 敏感字符串:搜索 token 、 secret 、 key 、 password 、 admin 等关键词。
  7. 子域名 / 内部域名:JS 文件中可能硬编码了开发环境或测试环境的域名(如 dev.corp.com ),或
    调用的第三方服务域名。
  8. 云服务凭证:寻找 AWS S3 bucket 名称、Google Cloud 或 Azure 存储服务的 URL 等。

公开文件和配置检查

部分系统默认或管理员疏忽,会导致一些重要的配置或文件被公开访问。
核心检查清单:

  • Dirb / Dirbuster / Gobuster:这些目录爆破工具的字典中通常会包含上述常见的敏感配置文件路径,能够批量扫描并检测这些文件的存在性。
  • 手动浏览器访问:直接在目标域名后拼接 /robots.txt 和 /sitemap.xml 进行检查。

笔记写的有点潦草,希望各位佬友担待一下 ,如果该笔记有什么问题或者什么可以优化的地方,希望佬能在下面回复,我会认真看的


📌 转载信息
原作者:
useruy
转载时间:
2026/1/6 11:41:29

可以将输入的中文或者英文,转换为更地道的语言表达,并且纠正其中的语法错误,我觉得效果还蛮好的,在英文社区交流的时候可以自己手敲英语然后丢给 ai 检查一遍,熟悉语法更快速

提示词

作为一位 local-dialect 粗鲁老编辑和熟练的中英文编辑、资深作家和翻译家,你的任务是按照以下规则进行翻译:

任务:

  • 首先直译英文
  • 最后译成地道美式英语
  • 需要输出原文和译文
  • 如果给你的是英文就翻译成中文
  • 纠正语法错误,给出解释 原则:
  • 请确保翻译准确无误,符合语境并保持流畅自然的语言表达
  • 你需要展现出对中英文的熟练掌握以及地道美式英语的语言风格

📌 转载信息
原作者:
FFattiger
转载时间:
2026/1/6 11:41:06

写代码搭配 Gemini 2.5 Pro 模型使用效果更好(哈基米 3 有点降智)

你是一个高级开发协调者(Development Coordinator),负责通过结构化思考和多代理模拟协作,生成高质量、可直接落地的代码,实现用户请求的新功能或特性。

### 关键强制规则(最高优先级,绝对必须严格遵守!)
- 所有回复必须使用中文。
- 回复必须严格遵守以下Markdown标题格式,不得多不少,不得更改标题名称或顺序。
- 禁止输出任何额外解释、问候或非格式内容,直接开始格式输出。
- 禁止在格式外添加英文或其他语言内容。
- 在 Code Implementation 部分,绝对不允许省略任何代码,也必须确保每个代码块完整包裹。
  - 每个文件必须提供完整、可直接运行的代码内容。
  - 禁止使用 “...” 或 “省略部分代码” 的方式。
  - 每个代码块必须以 ```typescript
  - 每个代码块必须以单独一行的 ``` 结束,不允许缺少闭合标记。
  - 即使文件很长,也必须完整输出并确保代码块正确闭合。
  - 如果内容极长导致响应可能截断,优先拆分成多个独立文件输出,但每个代码块仍需完整包裹。
  - 修改现有文件时,必须提供该文件的完整最新版本代码,并在修改处添加注释说明。

### 用户请求的功能描述
用户会以消息形式提供功能描述(例如:实现XXX功能)。

### 项目上下文注意事项
- 在生成代码时,假设基于常见现代项目风格(干净、可维护、类型安全)。
- 严格遵守良好实践:命名规范、错误处理、模块化、依赖最小化。
- 如果用户提供额外上下文或现有代码,请严格遵循并完整融入。

### 你的思考流程(内部多代理模拟协作)
在回复前,必须内部模拟以下四个专业代理逐步协作:
1. **Architect Agent**:高层次设计,包括API合约、数据模型、模块划分、技术选型。
2. **Implementation Engineer**:编写核心代码,确保干净、可维护、带类型注解和详细注释。
3. **Integration Specialist**:确定修改点、无缝集成、文件列表。
4. **Code Reviewer**:审查质量、安全、性能、一致性,特别是检查所有代码块是否完整包裹、正确闭合、无截断。

通过逐步思考链完成协作(在内部思考中进行,不输出思考过程)。

### 输出格式(必须严格遵守,全程中文,使用Markdown标题)
1. **Implementation Plan**
   详细技术方案,包括组件拆解、关键依赖、新增/修改文件列表、技术选型理由。

2. **Code Implementation**
   完整、可直接落地的代码。
   - 先写文件相对路径说明(例如:src/components/TodoList.vue)。
   - 然后紧接着完整代码块。
   - 使用正确语言标记。
   - 包含必要类型注解和详细注释。
   - 所有文件代码必须完整输出并正确包裹代码块。

3. **Integration Guide**
   一步步集成指导,包括:
   - 新增/修改文件列表。
   - 配置或依赖变更。
   - 迁移注意事项。

4. **Testing Strategy**
   仅提供测试建议和要点,禁止输出完整可运行测试代码。
   - 描述需要覆盖的关键场景和边缘案例。
   - 列出单元测试、集成测试的重点关注项。
   - 可提供简短伪代码骨架(必须用代码块包裹,并注明“示例骨架”)。

5. **Next Actions**
   以编号列表形式明确列出后续行动项。

请根据用户提供的功能描述,直接输出以上格式内容,开始处理请求。

System instructions 内容大概就是这样 名称 填写 code 工程师 (任意的也行

这个也可以稍微改改给 Claude code 作为 commands 使用


📌 转载信息
转载时间:
2026/1/6 11:40:46

在上面的帖子里面领到的



明明领到的是 1.08 元,进卡包一看,变 10 元了,美滋滋。

结果这个券哪都用不了,联通充话费不行,京东微信付款不行,实体店扫商家码付款也不行…… 只能看着过期。。。
不知道有没有一样的情况。


📌 转载信息
原作者:
didi
转载时间:
2026/1/6 11:40:38

省流:support non UTF-8 mingw filesystem by magic-cucumber · Pull Request #1758 · square/okio · GitHub

前情提要

使用 kotlin-native,搭配 cliktokio 写小玩具时,在自己的 mac 上运行的好好的,但是在好盆友的电脑上就报错…

相信各位佬们看到这里一定会会心一笑。毕竟就算是我在看到这种低级错误时的第一反应也是:在程序里转个码不就行了么?

但是如果问题就这么简单的话这个 pr 就不会诞生了…

踩坑记录

一开始以为是编码问题,让好盆友使用 chcp 65001 切换到 utf-8 编码,报错。

然后引入了 fleeksoft-charset 库,并自己编写平台函数实现编码检测,然后将路径字符串转换为正确的编码后再进行处理,依然报错

jvm-windows 环境下执行程序,不报错。于是将怀疑的目光转向了 okio 库本身…

源码窥探


根据报错堆栈,问题出在 commonMetadata() 函数:

@Throws(IOException::class) internal fun FileSystem.commonMetadata(path: Path): FileMetadata {
  return metadataOrNull(path) ?: throw FileNotFoundException("no such file: $path")
}

由于报错仅发生在 windows 平台,而 kotlin-native 在 windows 上使用 minGW,故查看 PosixFileSystem

这里是一层包装方法,为 unix/mingw 提供了不同的实现,我们仅关注 mingw 部分。

 override fun metadataOrNull(path: Path) = variantMetadataOrNull(path)
internal actual fun PosixFileSystem.variantMetadataOrNull(path: Path): FileMetadata? {
  return memScoped {
    val stat = alloc<_stat64>()
    if (_stat64(path.toString(), stat.ptr) != 0) {
      if (errno == ENOENT) return null throw errnoToIOException(errno)
    }
    return@memScoped FileMetadata(
      isRegularFile = stat.st_mode.toInt() and S_IFMT == S_IFREG,
      isDirectory = stat.st_mode.toInt() and S_IFMT == S_IFDIR,
      symlinkTarget = null,
      size = stat.st_size,
      createdAtMillis = stat.st_ctime * 1000L,
      lastModifiedAtMillis = stat.st_mtime * 1000L,
      lastAccessedAtMillis = stat.st_atime * 1000L,
    )
  }
}

可以看到它的底层是调用了 stat64 函数 (尽管它不是那么的标准),而问题在于 stat 系列函数要求传入窄字符,对于 posix-api,有专门的_w 前缀函数提供了宽字符版本。

许多 Windows API 函数具有 “A”(ANSI)和 “W”(宽、Unicode)版本。 “A” 版本基于 Windows 代码页处理文本,而 “W” 版本处理 Unicode 文本。

摘自代码页 - Win32 apps | Microsoft Learn

既然如此,我们只需要将其改写成 宽字符 版本的就可以了

if (_wstat64(path.toString().wcstr, stat.ptr) != 0) {

… 吗?

我单独写了一个测试,在本机提前创建中文字符文件,并调用 metadataOrNull() 函数。完美运行,并且没有任何错误

然而当我将编译的 snapshot 包发布到本地供我的小玩具引用时,它还是报了一模一样的错,,只不过被报错的文件从我输入的文件夹变成了其中的一个子文件。

这只能说明 okio.Path 本身就有问题。


请允许我我贴一下我编写的业务函数:

fun Path.walk(consumer: (Path) -> Unit) {
    if (isFile) {
        consumer(this)
        return
    }
    for (child in list()) {
        child.walk(consumer)
    }
}

val Path.isFile
    get() = metadata().isRegularFile

fun Path.list() = FileSystem.SYSTEM.list(this)

我的程序涉及到递归遍历文件夹,而正好遍历到子文件就报错了,相信佬 u 们一定会将目光聚集到 list() 函数。

private fun list(dir: Path, throwOnFailure: Boolean): List<Path>? {
    val opendir = opendir(dir.toString())
      ?: if (throwOnFailure) throw errnoToIOException(errno) else return null try {
      val result = mutableListOf<Path>()
      val buffer = Buffer()

      set_posix_errno(0) // If readdir() returns null it's either the end or an error. while (true) {
        val dirent: CPointer<dirent> = readdir(opendir) ?: break val childPath = buffer.writeNullTerminated(
          bytes = dirent[0].d_name,
        ).toPath(normalize = true)

        if (childPath == SELF_DIRECTORY_ENTRY || childPath == PARENT_DIRECTORY_ENTRY) {
          continue // exclude '.' and '..' from the results.
        }

        result += dir / childPath
      }

      if (errno != 0) {
        if (throwOnFailure) {
          throw errnoToIOException(errno)
        } else {
          return null
        }
      }

      result.sort()
      return result
    } finally {
      closedir(opendir) // Ignore errno from closedir.
    }
  }

注意到这个 list 函数是直接写在 PosixFileSystem.kt 里的,它没有针对 unix/mingw 的变种,且仍然使用了 窄字符 api。因此要想修复它也很简单,将这个函数仿照其他的函数,根据 unix/mingw 拆分为对应的变种。

受限于篇幅,这里只贴出 windows 部分的函数

internal actual fun PosixFileSystem.variantList(dir: Path, throwOnFailure: Boolean): List<Path>? {
  val opendir = _wopendir(dir.toString().wcstr)
    ?: if (throwOnFailure) throw errnoToIOException(errno) else return null try {
    val result = mutableListOf<Path>()
    set_posix_errno(0) // If readdir() returns null it's either the end or an error. while (true) {
      val dirent: CPointer<_wdirent> = _wreaddir(opendir) ?: break val childPath = dirent[0].d_name.toKString().toPath()

      if (childPath == SELF_DIRECTORY_ENTRY || childPath == PARENT_DIRECTORY_ENTRY) {
        continue // exclude '.' and '..' from the results.
      }

      result += dir / childPath
    }

    if (errno != 0) {
      if (throwOnFailure) {
        throw errnoToIOException(errno)
      } else {
        return null
      }
    }

    result.sort()
    return result
  } finally {
    _wclosedir(opendir) // Ignore errno from closedir.
  }
}


其他的函数是否也存在这个问题呢?答案是有的,这里便不再赘述。
具体参考话题上方的 PR 链接。

彩蛋

我们都知道,在 windows 系统中,如果如果该文件被占用,则删除此文件的操作会失败。

而在我调试我的小玩具中,当删除临时文件失败后,报错信息居然也是乱码?

于是我在这里贴出负责读取 IO 错误 并 抛出异常的代码…

internal fun errnoToIOException(errno: Int): IOException {
  val message = strerror(errno)
  val messageString = if (message != null) {
    Buffer().writeNullTerminated(message).readUtf8()
  } else {
    "errno: $errno"
  }
  return when (errno) {
    ENOENT -> FileNotFoundException(messageString)
    else -> IOException(messageString)
  }
}

internal fun Buffer.writeNullTerminated(bytes: CPointer<ByteVarOf<Byte>>): Buffer = apply {
  var pos = 0 while (true) {
    val byte = bytes[pos++].toInt()
    if (byte == 0) {
      break
    } else {
      writeByte(byte)
    }
  }
}

可以看出来它也是直接调用的窄字符 api。但问题是谁能想到 message 是本地化的文本呢…

至此,本帖正式完结


📌 转载信息
原作者:
kagg886
转载时间:
2026/1/6 11:40:24