包含关键字 typecho 的文章

行情 API 的正确使用方式

常见问题

在行情系统开发中,常见以下问题:

  • 首页行情列表每秒轮询 K 线接口获取最新价
  • 所有页面都建立 WebSocket 连接以实现"实时更新"
  • 系统启动时直接订阅 WebSocket,但未获取可用品种列表
  • 页面切换时旧的 WebSocket 连接未关闭

这些问题的根源在于缺乏正确的使用心智模型。
即不清楚在什么阶段该使用什么接口。

大多数 API 文档会说明接口返回的数据结构。
但不会说明接口的适用场景和使用时机。


行情 API 的本质:数据分层

行情 API 不是接口的集合,而是一套数据分层系统。

构建行情系统时,系统在不同阶段对数据的需求完全不同:

1. 数据使用阶段

  • 启动阶段:系统需要获取可交易品种列表
  • 展示阶段:页面需要显示当前价格
  • 实时阶段:需要在价格变化时主动推送

2. 数据类型

  • 快照:当前时刻的价格、涨跌幅(适合列表、首页)
  • 历史:过去一段时间的价格走势(适合图表、回测)
  • 持续流:价格变化时主动推送(适合实时盯盘、交易执行)

3. 系统复杂度

  • REST API:简单、稳定、易维护,需要主动轮询
  • WebSocket:实时、高效,但需要处理连接管理、重连、心跳

理解这三个维度,可以明确每个接口的适用场景。


行情 API 的分层设计

1. 可用交易品种(Symbols)

系统启动的第一步是获取可用品种列表。

硬编码品种代码会导致以下问题:

  • 退市品种无法及时移除
  • 新上市品种无法及时添加

建议在系统启动时调用品种列表接口,并缓存结果。

多市场统一命名的价值

统一的命名规则可以用同一套代码逻辑处理不同市场的数据:

  • 港股:700.HK9988.HK
  • 美股:AAPL.USTSLA.US
  • 外汇:EURUSDGBPUSD

这避免了为每个市场编写适配层。

接口示例

GET /v1/symbols/available?market=HK&limit=10

使用建议

  • 系统启动时调用一次,缓存结果
  • 不要在每次查询行情前调用此接口
  • 定期更新建议频率为每天一次

多市场统一 symbol 示意图


2. Ticker(实时快照)

Ticker 接口适用于大部分"显示当前价格"的场景。
行情列表页、首页概览、定时刷新的看板。

使用 K 线接口获取最新价存在以下问题:

  • K 线接口返回的数据结构更复杂
  • 需要处理时间对齐问题
  • 无法一次查询多个品种

Ticker 接口的优势:

  • 返回数据轻量
  • 一次请求可查询多个品种(通常支持 50 个左右)
  • 不需要处理时间对齐问题

接口示例

GET /v1/market/ticker?symbols=700.HK,AAPL.US

返回数据

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "symbol": "700.HK",
      "last_price": "602.5",
      "volume_24h": "16003431",
      "high_24h": "606",
      "low_24h": "598",
      "timestamp": 1768982936000
    }
  ]
}

使用建议

只要不是需要实时价格跳动的场景。
Ticker + 定时刷新(5-10 秒)即可满足需求。

Ticker 适用场景示意图

3. K 线(结构化历史)

K 线接口的核心参数是 interval(时间间隔)。
决定了数据的颗粒度。

不同的分析场景对数据颗粒度的要求不同:

  • 1m:1 分钟 K 线,适合短线交易、实时图表
  • 1h:1 小时 K 线,适合日内分析
  • 1d:日 K 线,适合中长期分析、回测

接口示例

GET /v1/market/kline?symbol=AAPL.US&interval=1d&limit=30

使用建议

  • 图表展示:使用 limit 参数(如"显示最近 30 天")
  • 历史回测:使用时间范围参数(如"2023 年 1 月到 3 月的数据")

K线 vs 实时数据对比图

4. WebSocket(实时流)

WebSocket 的代价包括:

  • 维护长连接(心跳、重连、异常处理)
  • 处理订阅管理
  • 处理消息队列
  • 处理网络波动

适用场景

  • 实时盯盘(延迟要求在秒级以内)
  • 价格预警(价格触发阈值时需要立即通知)
  • 高频数据监控(需要毫秒级数据更新)

不适用场景

  • 行情列表页
  • 历史图表
  • 低频监控

以上场景使用 REST API + 定时刷新即可。

接口示例

const ws = new WebSocket('wss://api.example.com/v1/realtime?api_key=YOUR_API_KEY');

ws.onopen = () => {
  ws.send(JSON.stringify({
    cmd: 'subscribe',
    data: { channel: 'ticker', symbols: ['700.HK'] }
  }));
};

设计限制

外汇品种通常仅支持 ticker 频道(不支持 depth 和 trade)。
因为外汇市场是 OTC 市场,没有集中的订单簿。
股票和加密货币支持 ticker、depth、trade 三种频道。

REST vs WebSocket 使用边界图

完整使用路径示例

以港股行情监控系统为例:

Step 1:启动时拉取可用品种

GET /v1/symbols/available?market=HK&limit=100

目的:获取系统支持的港股品种,缓存到本地。


Step 2:页面展示用 Ticker + K 线

首页行情列表

GET /v1/market/ticker?symbols=700.HK,9988.HK,3690.HK

图表展示

GET /v1/market/kline?symbol=700.HK&interval=1d&limit=30

刷新策略:每 5-10 秒刷新一次 Ticker。
K 线按需加载(用户切换图表时才加载)。

刷新频率建议:

  • 太快(如每秒刷新)会增加服务器压力
  • 太慢(如 30 秒)数据实时性不足
  • 5-10 秒是平衡点

Step 3:关键模块用 WebSocket

仅在需要实时推送的场景建立 WebSocket 连接:

ws.send(JSON.stringify({
  cmd: 'subscribe',
  data: { channel: 'ticker', symbols: ['700.HK'] }
}));

退出实时监控页面时,必须取消订阅并关闭连接。
否则会导致连接数超限,影响新用户建立连接。

完整使用路径流程图

常见错误

1. 过度使用 WebSocket

错误做法:系统启动就建立 WebSocket,订阅所有品种。

问题:首页显示 50 个品种的行情。
订阅所有品种会导致用户量上升时服务器连接数超限。

正确做法:大部分场景使用 REST API。
仅在需要实时推送的模块使用 WebSocket。


2. K 线接口滥用

错误做法:每秒调用 K 线接口获取最新价。

问题:K 线接口是为历史数据设计的。
不是为实时价格设计的。
频繁调用浪费资源,且可能因时间对齐问题导致数据不准确。

正确做法:K 线用于历史数据和图表。
实时价格使用 Ticker 或 WebSocket。


3. Symbol 不缓存

错误做法:每次查询行情前都调用 /v1/symbols/available

问题:可用品种列表通常不会频繁变化。
每次都查询是浪费。

正确做法:启动时调用一次,缓存结果。
定期(如每天)更新。


4. Interval 选择不当

错误做法:不管什么场景都使用 1m(1 分钟 K 线)。

问题:1 分钟 K 线数据量大。
如果只是查看"最近一个月的走势",使用日 K 线即可。
使用 1 分钟 K 线浪费带宽,增加前端渲染压力。

正确做法

  • 实时图表:1m5m
  • 日内分析:1h
  • 中长期分析:1d

5. 混淆行情 API 与交易 API

错误做法:直接使用行情数据做下单决策。
不考虑延迟和数据完整性。

问题:行情 API 提供的是市场数据。
主要用于展示和分析。
交易操作(下单、撤单)需要对接交易所的交易 API。

正确做法:行情 API 用于数据展示和策略分析。
交易操作使用交易 API。

常见错误示意图

总结

使用行情 API 时,首先明确当前处于哪个阶段:

  • 启动系统
  • 展示页面
  • 实时监控

根据阶段选择合适的接口。
可以避免系统设计不合理导致的性能问题和维护困难。


系列说明

本文是「行情 API 的工程化使用方式」系列的第一篇。
后续将继续讲解:

  • WebSocket 实战:连接管理、心跳机制、数据补偿
  • K 线数据的正确使用方式:interval 选择、时间对齐、数据缓存策略
  • 行情系统的性能优化实践:从接口调用到前端渲染的完整优化方案
  • 多市场行情数据的统一处理:如何用一套代码处理港股、美股、外汇的差异

参考资料

本文基于 TickDB API v1.0.0 撰写。
完整接口参数说明、错误码处理、API 参考:


为什么标准化要把均值设为0、方差设为1?

先说均值。均值就是平均数,所有观测值加起来除以个数。

μ是均值,n是数据点总数,xᵢ是每个数据点,所以均值就是数据的重心位置。比如均值是20,那20就是平衡点。这不是说所有点到20的距离相等而是说两边的"重量"刚好在20这个位置抵消掉。

而方差衡量的是数据有多分散,定义是每个值与均值偏差的平方的平均值。

n是数据点总数,xᵢ是每个数据点,μ是均值。

那均值为0有什么用?

可以把数据想象成坐标系里的一团“点云”。每个值减去均值(x — μ)之后,整团云就被平移到了原点位置。数据不再飘在某个角落而是以原点为中心分布。

这对很多机器学习算法都有好处,尤其是用梯度下降的时候。数据居中之后优化过程更平衡、收敛也更快。因为特征要是一开始就偏离原点很远,训练起来会麻烦不少。

那方差为1呢?

这是为了防止某个特征"欺负"其他特征。

举个例子:年龄和薪资两个特征,年龄范围10-70,薪资范围10,000-70,000。直接喂给模型的话,模型会觉得薪资比年龄重要1000倍(数字大嘛)。但这两个特征本来是独立的,凭什么薪资就更重要?

所以标准化就是除以标准差,让所有特征的方差都变成1。这样年龄和薪资就在同一个量级上了,变化幅度差不多。年龄有个小波动,不会因为薪资数字大就被模型无视掉。

可视化效果:

标准化之前,特征1(红色,小尺度)和特征2(蓝色,大尺度)放一起,红色那条几乎看不见。标准化之后,两个特征尺度一致,都能清晰显示出来。模型终于可以公平对待它们了。

什么时候需要标准化?逻辑回归、神经网络、KNN这类用梯度下降的算法,标准化影响最大。

总结一下:

均值为0让数据居中,方差为1让特征尺度统一。两者配合,算法学得更快,也不会偏心某个特征。至于什么时候该用标准化、什么时候该用MinMaxScaler,老实说我也还在摸索。

https://avoid.overfit.cn/post/957b1b35bc1047e185dab369ae8d84ed

作者:vaishnavi

如果你是把 Dokploy 装在自己的服务器上,用了一段时间,大概率会遇到一个问题:
它要怎么升级,才不折腾?

答案其实很简单。

Dokploy 官方已经把升级流程写进了安装脚本里,不用拉代码,也不用自己停服务。一行命令就够了:

curl -sSL https://dokploy.com/install.sh | sh -s update

image.png

我自己升级时的体验是:配置没丢,服务照常起来,过程也没什么存在感。对已经在跑项目的机器来说,这点很重要。

当然,有个前提。
如果你和当前版本差得太远,或者这次升级涉及结构性改动,最好先扫一眼文档,看看有没有明确提到需要手动处理的地方。否则大多数情况下,直接跑就行。

官方对这个升级方式的说明在这里:
https://docs.dokploy.com/docs/core/manual-installation#manual-upgrade

自部署用 Dokploy,本来就是图一个省心。升级这件事,它现在确实做到了,越来越喜欢 Dokploy 了,哈哈哈。

image.png

【Unity Shader Graph 使用与特效实现】专栏-直达

在Unity的Shader Graph中,NormalVector节点是一个基础且重要的工具,它允许着色器访问网格的法线矢量信息。法线矢量在计算机图形学中扮演着关键角色,它定义了表面的朝向,是光照计算、材质表现和各种视觉效果的基础。

节点概述

NormalVector节点为着色器编写者提供了获取网格法线数据的便捷途径。无论是顶点法线还是片元法线,这个节点都能让开发者轻松地在不同的坐标空间中操作这些数据。通过简单的参数设置,就可以将法线矢量转换到所需的坐标空间,大大简化了复杂着色器的开发过程。

法线矢量的本质是垂直于表面的单位向量,在三维空间中表示为(x, y, z)坐标。在Shader Graph中,这些数据通常来自3D模型的顶点数据,或者通过法线贴图等技术进行修改和增强。

参数详解

Space参数

Space参数决定了法线矢量输出的坐标空间,这是NormalVector节点最核心的功能。不同的坐标空间适用于不同的着色场景和计算需求。

  • Object空间:也称为模型空间,这是法线数据最原始的存储空间。在Object空间中,法线相对于模型本身的坐标系定义,不考虑模型的旋转、缩放或平移变换。当模型发生变换时,Object空间中的法线不会自动更新,需要手动进行相应的变换计算。
  • View空间:也称为相机空间或眼睛空间,在这个空间中,所有坐标都是相对于相机的位置和方向定义的。View空间的原点通常是相机的位置,Z轴指向相机的观察方向。这个空间特别适合与视角相关的效果,如边缘光、反射和折射。
  • World空间:World空间中的坐标是相对于场景的世界坐标系定义的。无论模型如何移动或旋转,World空间提供了统一的参考框架。这个空间常用于光照计算、阴影生成和全局效果。
  • Tangent空间:这是一个特殊的局部空间,主要用于法线贴图。在Tangent空间中,法线是相对于表面本身定义的,Z轴与表面法线对齐,X轴与切向量对齐,Y轴与副法线对齐。这种表示方法使得法线贴图可以在不同朝向的表面上重复使用。

选择正确的坐标空间对着色器的正确性和性能至关重要。错误的空间选择可能导致光照计算错误、视觉效果异常或性能下降。

端口信息

NormalVector节点只有一个输出端口:

  • Out:输出类型为Vector 3,表示三维矢量。这个端口输出的是根据Space参数选择在对应坐标空间中的法线矢量。输出值通常是归一化的单位矢量,但在某些情况下(如使用非统一缩放时)可能需要重新归一化。

使用场景与示例

基础光照计算

法线矢量的一个主要应用是光照计算。在Lambert光照模型中,表面亮度取决于光线方向与表面法线之间的夹角。

HLSL

// 简化的Lambert光照计算
float3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
float3 worldNormal = NormalVector节点输出(World空间);
float NdotL = max(0, dot(worldNormal, lightDir));
float3 diffuse = _LightColor0 * NdotL;

在这个示例中,我们首先获取世界空间中的法线矢量和光线方向,然后计算它们的点积。点积结果决定了表面接收到的光照强度,这是大多数基础光照模型的核心计算。

法线贴图应用

法线贴图是现代实时渲染中增强表面细节的关键技术。NormalVector节点在应用法线贴图时起着桥梁作用。

HLSL

// 法线贴图应用流程
float3 tangentNormal = tex2D(_NormalMap, uv).xyz * 2 - 1; // 从[0,1]转换到[-1,1]
float3 worldNormal = NormalVector节点输出(World空间);
// 使用TBN矩阵将切线空间法线转换到世界空间
float3x3 TBN = float3x3(
    IN.tangent.xyz,
    cross(IN.normal, IN.tangent.xyz) * IN.tangent.w,
    IN.normal
);
float3 mappedNormal = mul(TBN, tangentNormal);

这个示例展示了如何将切线空间中的法线贴图数据转换到世界空间。首先从法线贴图中采样并调整数值范围,然后使用TBN(切线-副切线-法线)矩阵进行空间转换。

边缘检测与轮廓光

利用View空间中的法线可以创建各种与视角相关的效果,如边缘光和轮廓检测。

HLSL

// 边缘光效果
float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_V, NormalVector节点输出(World空间)));
float3 viewDir = normalize(UnityWorldToViewPos(IN.worldPos));
float rim = 1 - abs(dot(viewNormal, viewDir));
float rimLight = pow(rim, _RimPower) * _RimIntensity;

在这个示例中,我们首先将世界空间法线转换到View空间,然后计算法线与视角方向的点积。当表面几乎垂直于视角方向时(即边缘处),点积接近0,从而产生边缘光效果。

环境遮挡与全局光照

法线信息对于环境遮挡和全局光照计算也至关重要。

HLSL

// 简化的环境遮挡
float3 worldNormal = NormalVector节点输出(World空间);
float ambientOcclusion = 1.0;

// 基于法线方向的简单环境光遮蔽
// 这里可以使用更复杂的算法,如SSAO或烘焙的AO贴图
ambientOcclusion *= (worldNormal.y * 0.5 + 0.5); // 模拟顶部光照更多

// 应用环境光
float3 ambient = UNITY_LIGHTMODEL_AMBIENT * ambientOcclusion;

这个简单的示例展示了如何用法线方向来模拟环境光遮蔽效果。在实际项目中,通常会结合更复杂的算法或预计算的数据。

高级应用技巧

法线重定向与混合

在某些情况下,需要将法线从一个表面重定向到另一个表面,或者在不同法线源之间进行混合。

HLSL

// 法线混合示例
float3 normalA = tex2D(_NormalMapA, uv).xyz;
float3 normalB = tex2D(_NormalMapB, uv).xyz;
float blendFactor = _BlendFactor;

// 使用线性插值混合法线
float3 blendedNormal = lerp(normalA, normalB, blendFactor);

// 或者使用更精确的球面线性插值
// float3 blendedNormal = normalize(lerp(normalA, normalB, blendFactor));

法线混合是一个复杂的话题,因为简单的线性插值可能不会保持法线的单位长度。在实际应用中,可能需要重新归一化或使用更高级的插值方法。

法线空间转换优化

在性能关键的场景中,法线空间转换可能需要优化。

HLSL

// 优化的世界空间法线计算
// 传统方法
float3 worldNormal = normalize(mul(IN.normal, (float3x3)unity_WorldToObject));

// 优化方法 - 使用逆转置矩阵(处理非统一缩放)
float3 worldNormal = normalize(mul(transpose((float3x3)unity_WorldToObject), IN.normal));

当模型应用了非统一缩放时,直接使用模型矩阵变换法线会导致错误的结果。在这种情况下,需要使用模型矩阵的逆转置矩阵来正确变换法线。

法线可视化与调试

在开发过程中,可视化法线矢量对于调试着色器非常有用。

HLSL

// 法线可视化
float3 worldNormal = NormalVector节点输出(World空间);
// 将法线从[-1,1]范围映射到[0,1]范围以便可视化
float3 normalColor = worldNormal * 0.5 + 0.5;
return float4(normalColor, 1.0);

这个简单的着色器将法线矢量的各个分量映射到颜色通道,从而可以直观地查看法线的方向和分布。

常见问题与解决方案

法线不连续问题

当使用低多边形模型或不当的UV展开时,可能会遇到法线不连续的问题。

  • 问题表现:表面出现不自然的硬边或接缝
  • 解决方案

    • 确保模型有适当的平滑组设置
    • 检查UV展开是否导致法线贴图采样错误
    • 考虑使用更高精度的模型或细分表面

性能考量

法线计算可能会成为性能瓶颈,特别是在移动设备或复杂场景中。

  • 优化策略

    • 在顶点着色器中计算法线,而不是片元着色器
    • 使用更简单的法线计算,如省略归一化步骤(如果对视觉效果影响不大)
    • 考虑使用法线贴图的压缩格式以减少内存带宽

法线精度问题

在特定情况下,法线计算可能会遇到精度问题,导致视觉瑕疵。

  • 问题表现:闪烁的表面、带状伪影或不准确的光照
  • 解决方案

    • 使用更高精度的数据类型(如half改为float)
    • 确保法线贴图使用适当的格式和压缩
    • 检查法线变换矩阵的精度和正确性

与其他节点的配合使用

NormalVector节点很少单独使用,通常与其他Shader Graph节点结合以实现复杂的效果。

  • 与Dot Product节点结合:用于计算光照强度、菲涅尔效应等
  • 与Transform节点结合:在不同坐标空间之间转换法线
  • 与Normalize节点结合:确保法线保持单位长度
  • 与Sample Texture 2D节点结合:应用法线贴图
  • 与Fresnel Effect节点结合:创建基于视角的效果

最佳实践

为了确保NormalVector节点的正确使用和最佳性能,建议遵循以下最佳实践:

  • 始终考虑法线是否需要归一化,特别是在进行数学运算或空间变换后
  • 选择最适合当前计算任务的坐标空间,避免不必要的空间转换
  • 在性能敏感的场景中,尽可能在顶点着色器中计算法线相关数据
  • 使用适当的数据类型平衡精度和性能
  • 定期验证法线计算的正确性,特别是在使用复杂变换或混合时

【Unity Shader Graph 使用与特效实现】专栏-直达
(欢迎

点赞留言

探讨,更多人加入进来能更加完善这个探索的过程,🙏)

今日速览

  1. Humans in the Loop:免费社区,AI 编程爱好者一起加速交付。
  2. BrainLoom:PDF 秒变闪卡,本地优先的学习操作系统。
  3. GetThis:说话或截图就能生成任务,AI 帮你整理清单。
  4. Sometimes: A Poem Arrives:不期而遇的诗意,根据时间天气匹配心情。
  5. Youtube Custom Playback:轻量扩展,原生控制最高 16 倍速播放。
  6. Meal Planner:饮食计划模板,告别心算卡路里的混乱。
  7. TrendEdge:零售交易者也能用上对冲基金级别的数据信号。
  8. PainPoints.fast:用真实痛点验证 SaaS 创意,避免盲目投入。
  9. Contractso:现代电子签名平台,互动合同提升签署效率。
  10. Whisk Automation:批量 AI 图像生成,让 Google Whisk 变高速生产线。


1. Humans in the Loop

一个专为 AI 编程爱好者打造的免费社区,大家聚在一起分享 Claude Code、Cursor 等工具的最佳实践,加速项目交付。

  • 免费加入,讨论代理编程和 AI 相关话题
  • 聚焦 Claude Code、Cursor、MCP 服务器等热门工具
  • 分享 AI 代码审查的见解和实用技巧
  • 社区氛围友好,适合学习和协作

热度:🔺424

Humans in the Loop
访问官网 Product Hunt 详情


2. BrainLoom

别再为学习切换各种应用了,这款本地优先的学习操作系统能统一你的流程,把 PDF 高亮内容瞬间变成关联原文的闪卡。

  • 本地优先设计,保护隐私和数据安全
  • PDF 高亮内容一键转换为闪卡,保持深度上下文
  • 智能粘贴功能,在无限画布上视觉化组织想法
  • 支持 Windows v1.0,Mac 版即将上线
  • 限时优惠:终身许可$29(前 150 名用户)

热度:🔺257

BrainLoom
访问官网 Product Hunt 详情


3. GetThis

懒得打字?直接说话或截个聊天截图,AI 就能帮你整理想法,快速生成购物清单和分类任务。

  • 支持语音、文本或截图输入生成任务
  • AI 自动整理和分类任务内容
  • 简化任务管理流程,提升效率
  • 适合日常购物清单和待办事项规划

热度:🔺223

GetThis
访问官网 Product Hunt 详情


4. Sometimes: A Poem Arrives

最美好的诗意总在不经意间降临,这款 iOS 应用根据时间、天气和季节,为你匹配当下心情的诗歌。

  • 基于时间、天气和季节推荐诗歌
  • 意外时刻发现匹配心情的作品
  • 专为 iOS 设计,体验流畅自然
  • 营造不期而遇的阅读惊喜

热度:🔺179

Sometimes: A Poem Arrives
访问官网 Product Hunt 详情


5. Youtube Custom Playback

学习党或专业分析人士的福音,这个轻量级扩展让你在原生设置菜单中直接选择 0.25 倍到 16 倍的播放速度。

  • 原生风格控制,无缝集成 YouTube 界面
  • 播放速度范围从 0.25 倍到 16 倍
  • 轻量设计,不拖慢浏览器性能
  • 适合观看讲座或逐帧分析视频内容

热度:🔺164

Youtube Custom Playback
访问官网 Product Hunt 详情


6. Meal Planner

坚持健康饮食总是很难?这个模板帮你告别心算卡路里的混乱,无论记录饮食还是设定目标,都能清晰推进。

  • 模板化设计,减少饮食计划的不确定性
  • 支持记录饮食、坚持计划或设定体重目标
  • 简化卡路里追踪,避免长期计算困扰
  • 适合想建立健康习惯的任何人

热度:🔺30

Meal Planner
访问官网 Product Hunt 详情


7. TrendEdge

零售交易者也能用上对冲基金级别的工具,通过替代数据信号、实时提醒和模拟交易,帮你真正做到自律投资。

  • 提供机构级别的替代数据信号和实时提醒
  • 模拟交易功能帮助建立交易纪律
  • 自动记录交易日志,分析输赢原因
  • 完整历史信号支持更明智决策

热度:🔺27

TrendEdge
访问官网 Product Hunt 详情


8. PainPoints.fast

创始人验证 SaaS 创意的利器,分析 Reddit、X 等平台的真实对话,提炼痛点、支付意愿,帮你决定是否投入开发。

  • 输入想法,自动分析公开渠道的客户反馈
  • 提炼反复出现的痛点和紧迫感
  • 报告包含评分、真实引用和竞争对手信号
  • 结论建议:构建、考虑或跳过,避免盲目投入

热度:🔺23

PainPoints.fast
访问官网 Product Hunt 详情


9. Contractso

下一代电子签名平台,把静态文件变成互动合同,嵌入复选框收集数据,让签署过程既快速又安全合规。

  • 互动合同设计,支持嵌入复选框和单选框
  • 银行级审计追踪和短信双重身份验证
  • 自定义界面提升客户信任感
  • 加密二维码验证系统确保文件真实性

热度:🔺17

Contractso
访问官网 Product Hunt 详情


10. Whisk Automation

告别手动点击,这款工具将 Google Whisk AI 变成高速生产线,支持 CSV 批量生成图像,自动下载并导出多种格式。

  • 通过 CSV 批量生成 AI 图像,提升处理效率
  • 自动下载资源,导出为 PNG、JPG 或 WebP
  • 人类模拟时机功能,确保账户安全
  • 后台恢复让工作流程更顺畅,适合电商创作者
  • 30 天免费试用,从 Chrome 应用商店安装

热度:🔺17

Whisk Automation
访问官网 Product Hunt 详情

项目介绍

智能水果图像识别系统,旨在为用户提供快速、准确的水果识别服务。系统集成了深度学习图像识别技术,支持用户上传水果图片进行自动识别,并提供识别历史记录管理功能。

系统主要功能包括:用户注册与登录、个人信息管理、水果图像识别、识别历史查询与删除、公告管理等。用户可以通过简单的操作上传图片,系统将自动分析并返回识别结果,包含水果名称和识别置信度。同时,系统支持分页查询识别历史,并提供公告功能,方便管理员发布系统通知和使用说明。
图片
图片
图片

选题背景与意义

随着人工智能技术的快速发展,图像识别技术在农业、零售业等领域的应用越来越广泛。水果作为人们日常生活中不可或缺的食品,其识别和分类在水果销售、库存管理、营养分析等方面具有重要意义。

传统的水果识别主要依赖人工判断,效率低且容易出错。而基于深度学习的图像识别技术能够快速、准确地识别水果种类,提高工作效率。本项目的选题背景正是基于这一需求,旨在开发一个简单易用的水果图像识别系统,为用户提供便捷的识别服务。

该系统的开发具有以下意义:

  1. 提高水果识别效率,减少人工成本
  2. 为水果销售和库存管理提供技术支持
  3. 促进深度学习技术在农业领域的应用
  4. 为用户提供便捷的水果识别工具,帮助用户更好地了解水果信息

关键技术栈:ResNet50

本项目采用 ResNet50 作为核心图像识别模型。ResNet(Residual Network)是由 Microsoft Research 提出的深度残差网络,ResNet50 是其中包含 50 层卷积层的版本。

ResNet50 的核心创新是引入了残差连接(Residual Connection),解决了深度神经网络中的梯度消失问题,使得训练更深层次的网络成为可能。残差连接通过在网络中添加跨层连接,允许信息直接从一层传递到另一层,从而避免了梯度在反向传播过程中的衰减。

在本项目中,ResNet50 被用作水果图像识别的预训练模型。我们在预训练模型的基础上,根据水果图像数据集进行了微调,使得模型能够更准确地识别水果种类。系统集成了 TensorFlow 深度学习框架,通过加载预训练的 ResNet50 模型,对用户上传的水果图片进行分类识别。

ResNet50 的优点包括:

  1. 深度网络结构,具有强大的特征提取能力
  2. 残差连接设计,解决了梯度消失问题
  3. 预训练模型在图像识别任务上表现出色
  4. 可扩展性强,可根据需求进行微调

技术架构图

图片

系统功能模块图(MindMap)

图片

演示视频 and 完整代码 and 安装

地址:https://www.yuque.com/ziwu/qkqzd2/yeehu520t5qyr2qy

在线游玩地址: https://my-sekai-game.netlify.app/

其实我老早就一直想做出一个属于自己的独立游戏来,但是碍于自己没有美术功底,迟迟没能实现。

直到去年年底,我发现了 Gemini 3 ,以及它的图片生成工具,于是我觉得自己好像“真的可以试一把”。

经过不断地试错、迭代,两个月的时间总算把这个 2D 横板像素 ACT 游戏的 Demo V1.0 给打造出来了,以后可能会写一篇开发过程的文章。

在这段时间里,我发现我一个人包揽了代码、美术、策划三座大山,尽管有点累,但看到结果还是觉得这一切是值得的。

放几张游戏的实机图吧,感兴趣的 v 友们可以体验一下:







Windows 系统盘清理利器,专注于释放 AppData 目录占用的巨量空间。
它能扫描出占用空间大的软件数据文件夹,一键迁移到其他磁盘(如 D 盘),
并自动创建目录联接,确保软件无缝运行,就像从未移动过一样。

核心功能

  • 智能扫描: 自动分析 %LOCALAPPDATA%%APPDATA%,快速定位占用超过 10% 空间的“大户”。
  • 无缝迁移: 跨盘移动文件后,自动在原位创建 Junction 链接,软件无需重新配置。
  • 安全可靠:
    • 占用清理: 自动检测文件占用,支持自动结束相关进程(使用 Windows Restart Manager 技术),非底层实现,有些不一定可以清理,但基本不影响空间释放效果。
    • 失败回滚: 迁移过程中若发生错误,自动尝试恢复,保障数据安全。
  • 人性化体验:
    • 极速性能: 基于 Rust 开发,多线程并行扫描,速度飞快。
    • 智能缓存: 二次扫描无变动时秒出结果。
    • 可视化进度: 精确到字节的进度条,实时显示传输速度和剩余时间预估。
    • 中英双语: 界面支持中英文一键切换。
    • 暂停/继续: 大文件传输过程中可随时暂停。

使用方法

  1. 以管理员身份运行 WindowsClear.exe
  2. 点击 “扫描大文件夹”
  3. 在列表中勾选你想要迁移的软件(建议先从不重要的软件开始尝试)。
  4. 选择 目标根目录(例如 D:\AppData)。
  5. 点击 “执行迁移”,等待完成即可。

image
https://github.com/tanaer/WindowsClear

我因为智齿处有点不舒服,所以去药店里买氯己定漱口水,我的就是「氯己( jǐ )定」。
但店员当即就反驳我说是「氯已( yǐ )定」,我当时还以为自己一直都认错字了,就说噢应该就是那个。
结果把漱口水拿到手里一看,明明就是自己的己。
图片
所以我在结账时就跟店员说,这个应该就是氯己( jǐ )定,已( yǐ )是要出头的,这个没出头,所以应该念己( jǐ )。
然后店员又反驳我,说这个就是氯己( jǐ )定,而且非常肯定的语气。把我都搞得怀疑自己了,心想是不是医药学领域就是故意把这个字这样读的?

回来我还查了一下,发现两个写法都有。
已( yǐ ) 国家药品监督管理局 https://www.nmpa.gov.cn/wwwroot/otc2h/x104.htm
己( jǐ ) 维基百科 https://zh.wikipedia.org/zh-hans/%E6%B0%AF%E5%B7%B1%E5%AE%9A

所以有医学药学领域,或者懂这个的朋友吗,到底是氯己( jǐ )定还是氯已( yǐ )定?facepalm

我使用的免费 ChatGpt 和免费的 Gemini ,感觉 chatgpt 水平很差劲,是因为我不是 plus 吗

问题: 剑来小说中的 陈淳安 是谁

Gpt-5 Thingking mini 的回答



Ai Studio 中 Gemini 3 Pro Preview 的回答

VMware vSphere Replication 9.0.5 发布 - 虚拟机复制和数据保护

vSphere Replication 9.0 Update 5

请访问原文链接:https://sysin.org/blog/vmware-vsphere-replication-9/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


产品简介

什么是 vSphere Replication 以及它如何帮助实现虚拟机灾难恢复?

VMware vSphere Replication 是基于 Hypervisor 的异步复制解决方案,适用于 vSphere 虚拟机。它与 VMware vCenter Server 和 vSphere Web Client 全面集成。vSphere Replication 提供灵活、可靠和经济高效的复制功能 (sysin),以支持环境中所有虚拟机的数据保护和灾难恢复。

应用场景

  • 单一站点的本地数据保护
  • 两个站点间的灾难恢复和规避
  • 利用服务提供商的云进行灾难恢复和规避
  • 数据中心迁移

Enhanced vSphere Replication

构建灵活配置

vSphere Replication 提供灵活的恢复选项,确保应用和虚拟机数据保持一致,并与 VMware 产品体系集成。使用 vSphere Replications 能够:

  • 自定义恢复点目标 (RPO),从 5 分钟到 24 小时
  • 使用多时间点 (MPIT) 恢复,还原到上一已知状态
  • 在每个 vCenter Server 环境中保护多达 2,000 个虚拟机
  • 使用 Microsoft 卷影复制服务 (VSS)
  • 使用 Linux 文件系统静默 (sysin)
  • 利用 VMware Site Recovery Manager 实现跨站点灾难恢复的自动化
  • 保护和恢复 VMware vSAN 中的虚拟机
  • 保护和恢复 vSphere Virtual Volumes 数据存储中的虚拟机

消除存储限制

vSphere Replication 是基于 Hypervisor 的复制解决方案,在单个虚拟机磁盘 (VMDK) 级别运行,可以在 vSphere 支持的异构存储类型之间复制单个虚拟机。由于 vSphere Replication 独立于底层存储,因此适用于各种存储类型,包括 VMware vSAN、vSphere Virtual Volumes、传统 SAN、网络连接存储 (NAS) 和直连存储 (DAS)。您能够:

  • 在链接站点使用不同的存储技术,例如 SAN 到 vSAN 和光纤通道 (FC) 到 Internet 小型计算机系统接口 (iSCSI) 安排
  • 在恢复站点改变旧存储的用途,以降低成本
  • 仅对受保护虚拟机,而不是整个环境使用辅助存储

降低网络带宽

vSphere Replication 仅将改动的数据复制到恢复站点,以降低带宽使用,提升网络效率,与手动复制整个系统相比,RPO 时间更短。利用 vSphere Replication,您可以:

  • 利用虚拟机数据的“种子副本”进行最初同步,缩短创建初始副本所需的时间
  • 跟踪发生更改的磁盘区域,仅复制这些改动,确保高效利用网络
  • 还可选择启用数据压缩功能,进一步减少网络带宽消耗

新增功能

VMware Live Recovery 9.0.5 | 2026 年 1 月 20 日 | Build 25103105

VMware vSphere Replication 9.0.5 | 2026 年 1 月 20 日 | Build 25103105

VMware Live Recovery Appliance 9.0.5 新增功能

  • VMware Live Recovery 9.0.5 版本提供了多项错误修复。
  • VMware Live Recovery 9.0.5 新增对 VMware Cloud Foundation 9.0.2 的兼容性支持。

已解决的问题

  • 无法启动 vSphere Replication

    在全新部署 VMware Live Recovery Appliance 9.0.4,或在升级 / 合并 vSphere Replication 至 9.0.4 版本后 (sysin),如果使用了链式证书(chained certificates),VMware Live Site Recovery UI 会报告以下错误:

    No connection to VR Server for virtual machine [VM] on host [Host] in cluster [Cluster] in Production: Unknown

    该问题已在 VMware Live Recovery 9.0.5 中修复。

下载地址

VMware vSphere Replication 9.0 Update 5 (9.0.5)

请访问:https://sysin.org/blog/vmware-vsphere-replication-9/

兼容性

一图看懂 vSphere Replication 兼容性

如何选择版本?根据当前 vSphere 版本,下载最新兼容的版本即可。

vSphere Replication 兼容性


上一个版本:VMware vSphere Replication 8.8 Update 3 - 虚拟机复制和数据保护

更多:VMware 产品下载汇总

不少用户于尝试运用即时通讯以及网络工具之际,或许会碰到连接方面的问题或者是支付所遭遇的障碍,这一般跟网络环境、服务提供商的策略以及技术的细节存在关联。
图片
针对于技术层面而言,特定应用于某些区域出现的连接状况,常常是由于网络路由或者本地化服务器节点不稳定造成的 ,用户能够试着改变连接形式 ,像是运用不一样的网络环境 ,或者去查看应用是不是最新版本 ,有时候 ,单纯的重启设备也能够化解临时性的服务中断 。

参考三方版方案
图片
就应用内收费页面出现卡顿情形而言,其常见缘由包含多个层面,其中有支付网关响应延迟,这有可能致使在做支付操作之际,数据传输存有延缓问题,进而引发页面卡顿状况,应用缓存过多同样会引发问题,过多缓存数据占据了系统资源,致使应用在加载收费页面的时候变得迟缓,此外,当前服务器负载过高也不可忽视,当服务器承受过多请求时,处理能力降低,会对应用内收费页面的流畅显示产生影响 。处理这种情形时,能采取一系列举措。首先得清除应用缓存数据,借助清理缓存,给应用腾出更多资源,让其能更顺畅地运行收费页面。与此同时,要确保支付渠道(像绑定的账户)状态正常,要是支付渠道存在异常,像账户余额不足、网络连接问题等,一样会致使收费页面卡顿。另外,检查手机系统权限设置非常关键,要保证应用有充足的网络访问权限,唯有如此,应用才可以在网络环境良好时,稳定且快速地加载收费页面,防止出现卡顿情形。
图片
那种技术问题您有没有碰到过呢,方式是怎样解决的呀,实际经验还有有效的办法欢迎在评论区分享出来哦 ?

说到SRM(供应商关系管理)系统,许多人首先会想到SAP和Oracle这些全球知名的大牌。的确,它们在企业管理软件领域占据着重要地位,尤其在大型企业和跨国公司的应用中深得青睐。然而,如果认为SRM系统的选择仅限于这些巨头,那就有些局限了。

随着企业数字化转型的不断推进,特别是在供应链数字化和采购流程优化的需求日益增长,市场上涌现出许多优秀的SRM软件供应商。这些供应商虽然没有SAP那样的“全能”特性,但在特定行业或场景下,它们提供的解决方案往往更加灵活、契合实际需求,甚至能提供更高的性价比。

因此,选择SRM系统时,不仅仅要看谁的名气大,更要关注是否符合企业的具体需求。尤其是采购组织的结构、供应商的多样性、合规要求以及定制化的需求,都是决定适配度的关键因素。

如果你正在为企业选型SRM系统,而不希望将选择局限于几个大型厂商,那么这篇文章可能会为你提供一些全新的视角与思路。

接下来,我将从五个维度来对市场上的SRM解决方案进行分析,希望能帮助你找到最适合自己企业的选择:

1、供应商全生命周期:准入、资质、分级、绩效、风险、退出是否闭环

2、寻源与协同:询比价、招投标、合同、订单、对账、发票等链路是否顺畅

3、平台能力与可扩展:流程/表单/权限、接口、集成、二开成本高不高

4、全球化与生态:多语言、多币种、多组织、跨区域合规、供应商网络

5、落地现实:实施周期、上线难度、对采购团队成熟度要求、长期运维负担

推荐1:正远科技(更偏“平台型SRM”,适合想把采购流程真正做深的企业)

www.zhengyuansz.com

如果你的企业处在这种状态——采购流程多、审批链长、品类复杂,外部供应商分层明显,还经常要跟ERP、OA、财务、MES、WMS等系统互通——那你会明显更在意两件事:一是流程能不能落得住,二是后续能不能持续迭代。正远科技的思路更像“用一套平台把采购业务的骨架搭起来”,再根据行业和组织差异把肉补齐。

它有何“强项”值得被推:

1、供应商管理闭环意识很强:从注册、准入认证、分类分级、绩效考核到退出的全生命周期管理,是很多企业SRM最核心的那条主线;并且风险控制(黑名单/冻结/预警)这一套也更贴近“采购真实焦虑”。

2、更强调“协同枢纽”:它把SRM定义成连接企业与供应链上下游的协同枢纽,而不是只做供应商档案库,这一点很关键,因为大多数企业采购问题卡在“协同断点”,不是卡在“有没有字段”。

3、平台化+低代码路线:它把流程、表单、视图、权限等做成可配置能力,并且强调低代码平台(ZeroCloud)与SRM结合,目标是把二开成本和迭代门槛压下去。

适合谁:

制造业、工程、集团型企业:尤其是多组织、多基地、多层级审批,且供应商数量大、管理颗粒度要细的场景。

想把SRM当“长期经营系统”:不是一次性上完就算,而是未来还要持续做品类策略、供应商绩效、风险预警、流程优化的企业。

一句话评价:正远科技更像“能陪你把采购做深”的平台型SRM供应商,亮点不在花哨,而在“流程能跑、协同能通、后续能改”。

推荐2:Coupa(更偏“全域支出管理”,供应商协同能力强,全球化成熟)

Coupa在全球市场更常被放在“支出管理平台”语境里讲,它的优势是把间接采购、费用、合同、供应商协同等放到一个统一平台里,适合想把“花钱”这件事管成体系的企业。Coupa官方介绍里强调其基于大规模支出数据并引入智能化能力。

适合谁:

跨国家/跨区域经营,采购与费用合规压力大,希望统一口径的企业

想把SRM与支出治理(Spend)结合起来,做到“少漏、少错、少浪费”的组织

你需要注意的点:

Coupa的价值往往来自“流程纪律+组织治理”,如果企业内部采购规则本身很散、执行也不强,系统上线后容易出现“有人绕开系统走老路”的问题

对本地化深度行业流程(很重的制造、工程类复杂流程)通常需要更细的方案设计

推荐3:Ivalua(更偏“全套源到付平台”,供应商管理很硬核)

Ivalua在供应商管理这块做得非常“正统”:供应商信息、绩效、风险、协同门户,基本都是一套成体系的能力,官方也明确把“管理所有供应商关系、信息、绩效与风险”作为核心卖点。

适合谁:

采购组织成熟、品类管理细、对供应商分层运营有明确方法论的企业

希望把战略寻源、合同、采购执行、供应商绩效/风险串成闭环的集团型公司

你需要注意的点:

Ivalua的强项是“体系化”,落地时对数据治理、供应商主数据、组织流程会更敏感

如果企业只是想先做一个轻量级的供应商档案与准入管理,可能会显得“用大炮打蚊子”

推荐4:JAGGAER(更偏“采购+供应商协同平台”,高校/公共部门与大型组织常见)

JAGGAER在官网对自身定位非常直白:把数据、流程、交易统一到一个“供应商协同平台”里,并且强调Source-to-Pay(从寻源到付款)能力。

适合谁:

组织结构复杂、业务线多、协同链路长的机构型客户(大型企业、公共部门等)

想把采购执行与供应商协同做得更“标准化+可度量”的团队

你需要注意的点:

它的价值更偏“流程与协同效率”,如果你期待的是非常强的本地化行业模板,也要评估实施方与行业方案的能力

作为国际厂商体系,项目管理与变更控制要跟上,否则容易出现“上线慢、变更多、扯皮多”的典型大系统问题

推荐5:GEP(更偏“源到付一体化”,强调统一平台与供应商管理)

GEP SMART在官方介绍里明确写到:它是一套统一的Source-to-Pay平台,包含支出分析、寻源、合同、供应商管理、采购到付款等模块。

适合谁:

希望“一套平台把采购核心链路打穿”,并且对统一入口、统一数据、统一治理有强诉求的企业

对寻源、合同与供应商管理协同要求高,同时希望兼顾分析能力的团队

你需要注意的点:

这种“一体化平台”通常需要企业在流程端也更统一,否则会陷入“系统很完整,但组织不配合”的尴尬

评估时要重点看:你们现有ERP/财务/主数据体系怎么对接,接口治理是不是你们能长期维护的

5款怎么选更快(按“企业画像”直接对号入座):

想把采购流程做深、还要灵活迭代、并且更看重本地落地与私有化/定制能力:优先看正远科技 ()

跨国业务多、支出治理压力大、希望把采购与费用合规一起管:更偏Coupa ()

采购组织成熟、想把供应商绩效与风险运营体系做起来:更偏Ivalua ()

组织复杂、协同链长、希望统一Source-to-Pay并强化供应商协同:JAGGAER可以重点看 ()

追求源到付统一平台、模块齐全、并强调供应商管理与采购全链路一体化:GEP值得放进候选 ()

选型时别只问“功能全不全”,这3个问题更重要:

1、你们采购流程是谁说了算:流程Owner不明确,上什么SRM都容易变成“系统背锅”。

2、供应商主数据谁维护、怎么维护:供应商一多,数据治理就是SRM成败分水岭。

3、集成策略是不是长期可维护:SRM一定会连ERP、OA、财务等,接口不是“连上就完了”,而是“连上之后怎么长期活着”。

结语:除了SAP和Oracle,世界级SRM的“真差别”在落地方式

SAP、Oracle当然强,但SRM并不是“只要上大厂就万事大吉”。有的企业需要全球供应商网络,有的企业更需要平台化深度定制,有的企业要的是源到付闭环统一治理。把这5款放在一起看,你会更容易找到自己的那条路——系统只是工具,采购能力才是核心资产

这个用C++的精灵库画苹果的价值何在呢?任何东西,只要放在了正确的位置,都能发挥出它最大的价值。我们先来看一下代码:

#include "sprites.h"  //包含C++精灵库 
Sprite t;      //建立角色叫t,t就像一只海龟,但它的造型默认是小火箭,因为C++精灵库的目标是培养走向星辰大海孩子

int main(){        //主功能块 
    
    t.bgcolor("black").speed(1).pu().addy(150).pd().left(30);
    //画苹果的轮廓
    t.circle(-400,12).circle(-100,90);
    t.circle(-200,200).circle(-100,90);
    t.circle(-400,12).fill("red",0,-10); //填充为红苹果
    
    t.penup().move(-30,-40); //移到这里开始画苹果的柄
    t.pensize(6).color("#520305").pendown();
    t.circle(100,60).circle(100,-30);    
    t.left(90).circle(100,30);
    t.right(90).color("#0fff33");
    t.pensize(2);    //开始画绿叶
    t.circle(60,90).left(90);
    t.circle(60,90).left(90);
    t.fill("green",5,15);  //填充绿色叶子
    t.left(90).color("#520305");
    t.pensize(6).circle(100,30);    
    
    t.ht().done();
  
   return 0;    //返回0
}

这是上面的程序运行的效果:

这段代码使用C++精灵库(Sprites)来绘制一个红苹果图形。它用类似Python turtle的circle命令来绘制苹果。所以上面的核心代码放到Python IDLE中,修改一下,也可以画出苹果.,我们来描述一下大概的绘画过程。

  1. 准备画布和角色
    包含C++精灵库:首先,代码通过 #include "sprites.h" 引入了精灵库,这是绘制图形的基础。
    创建角色:Sprite t; 创建了一个名为 t 的角色,这个角色就像一只可以画画的海龟,但它默认的造型是一个小火箭。为什么要设计一枚火箭作为角色的默认造型?这里面的讲究就是蕴涵航天科技。
  2. 设置画布背景和初始位置
    通过一定的准备工作,如设置背景色和速度,代码为,t.bgcolor("black").speed(1).pu().addy(150).pd().left(30); 这行代码设置了画布背景为黑色,角色移动速度为1(较慢),然后角色抬起笔(pu()),向上移动150个单位(addy(150)),放下笔(pd()),并向左转30度(left(30))。这样角色就准备好了。
  3. 画苹果的轮廓
    接着角色绘制苹果的轮廓:这几行代码 t.circle(-400,12).circle(-100,90); t.circle(-200,200).circle(-100,90); t.circle(-400,12).fill("red",0,-10); 通过多个 circle 方法绘制了苹果的轮廓。这些 circle 方法通过不同的参数(如半径和角度)来画出苹果的不规则圆形轮廓。最后,fill("red",0,-10); 将苹果的内部填充为红色。
  4. 画苹果的柄
    为了更加形象,画出苹果的其它组织。比如一个小柄,首先移动到柄的位置:t.penup().move(-30,-40);
    绘制柄:t.pensize(6).color("#520305").pendown(); t.circle(100,60).circle(100,-30); t.left(90).circle(100,30); 设置画笔的粗细为6,颜色为深棕色(#520305),然后放下笔开始画苹果的柄。通过几个 circle 方法和 left 方法来画出弯曲的柄。
  5. 画绿叶
    少了绿叶的衬托怎么行呢? 所以要绘制绿色的叶子:t.right(90).color("#0fff33"); t.pensize(2); t.circle(60,90).left(90); t.circle(60,90).left(90); t.fill("green",5,15); 角色右转90度,设置画笔颜色为亮绿色(#0fff33)和粗细为2,然后画两个弧形来形成叶子的形状,并用 fill("green",5,15); 填充为绿色。
  6. 完成柄的绘制
    完成柄的剩余部分:t.left(90).color("#520305"); t.pensize(6).circle(100,30); 角色左转90度,恢复柄的颜色和粗细,完成柄的剩余部分绘制。
  7. 结束绘制
    隐藏角色并完成:最后,t.ht().done(); 隐藏角色(ht())并结束绘制(done())。
    这样,一个红苹果就绘制完成了!这段代码通过一系列精确的移动和绘制命令,逐步构建出了一个形象生动的苹果图形。

总之,代码比较简单,只要灵活动用circle命令即可。它的最大价值在于青少儿C++编程的教育意义。遵循逐层递进的原则,让孩子们首先掌握在这一个层次的代码,以便为以后更加深入的算法等编程树立良好的信心。
https://www.bilibili.com/video/BV1vgz1BDEsv/?aid=115950242302...

大聪明预警

按法定放假时间(2-15 日)回家,路上肯定很堵(飞机、高铁、火车除外),所以做了一个聪明的决定doge,提前一周就出发:2 月 7 号,
跟我想的一样的人有么?

Check Open Port in Linux

在 Linux 中,端口是一个编号的网络连接,它允许设备通过 Internet 或本地网络与其他设备通信。确保端口是开放和可访问的非常重要,它确保网络业务的正常运行。在本文中,我们将讨论五个检查 Linux 中端口是否打开的常用方法。

Check Open Port on Remote Host

首先,检查一个端口是否打开并在远程主机上侦听。

Using nc Command

nc 命令允许您向端口发送数据,并查看是否收到响应。nc 命令基本语法如下:

nc -vz hostname port

例如,要检查主机 example.com 上的 22 端口是否打开,可以使用以下命令:

nc -vz example.com 22

如果端口打开,您将看到消息 "Connection to hostname port [ tcp/ssh ]succeeded"。如果端口关闭,您将看到消息 "Connection to hostname port [ tcp/ssh ] failed: Connection refused"。

Using telnet Command

telnet 命令用于连接到远程主机上的端口,看看是否建立了连接。查询端口是否打开,使用以下语法:

telnet hostname port

例如,要检查主机 www.example.com 上的 80 端口是否打开,可以使用以下命令:

telnet www.example.com 80

如果端口是打开的,您将看到一个空白屏幕。要退出,请按 CTRL + ],然后键入 quit。如果端口关闭,您将看到 "Connected to hostname. Escape character is '^]'. Connection closed by foreign host"

Using nmap Command

nmap 命令是一个执行网络扫描和探测的实用程序,它可以通过端口扫描来检查目标主机端口是否打开。要检查端口是否打开,使用以下语法:

nmap -p port hostname

例如,要检查主机 www.example.com 上的 80 端口是否打开,可以使用以下命令:

nmap -p 80 www.example.com

如果端口是打开的,您将在输出中看到一行,表明端口是打开的。如果端口已关闭,您将看到一行,指示端口已关闭。

Shell Script to Check Port Status

您可以创建一个 bash 脚本检查本地或远程主机上端口是否打开,示例脚本如下:

#!/usr/bin/env bash

HOST=192.168.10.100  #remote host
PORT=22  # Port to check

nc -z ${HOST} ${PORT}
if [ $? -eq 0 ]
then
    echo "Port is open"
else
    echo "Port is closed"
fi

这里 HOST 是远程或本地主机系统的主机名或 IP 地址。PORT 是要检查的端口号。,nc 命令可以连接到主机上的任何端口并返回状态。$? 是一个系统环境变量,包含最后一个命令的退出状态。

Check Script To Check Port Is Open

Check Listening Port on Localhost

很多时候,我们需要检查本地机器上是否有端口正在侦听。

Using lsof Command

lsof 命令是一个实用程序,用于显示有关打开文件的信息。要检查端口是否打开,使用以下语法:

lsof -i :port

例如,要检查 80 端口是否打开,可以使用以下命令:

lsof -i :80

如果端口打开,将看到一行,包含端口号和使用该端口的进程的名称。如果端口关闭,将看不到任何输出。

Using ss Command

ss 命令是一个显示网络套接字信息的实用程序。要检查端口是否打开,使用以下语法:

ss -lnp | grep port

例如,要检查 80 端口是否打开,可以使用以下命令:

ss -lnp | grep 80

如果端口打开,将看到一行,其中包含端口号和状态 LISTEN。如果端口关闭,将看不到任何输出。

注意: 您可能需要使用 sudo 来运行这些命令,这取决于您的系统配置。

关联帖子: 分享一个 V2EX 邀请码给本站活跃用户

每天分享一个 LINUX DO 邀请码给 2 友。
只限 4 级以上且拥有除了种子用户徽章以外其他徽章活跃用户

注意:有邀请码也需要写小作文。

满足条件的可以留下邮箱地址。(邮箱地址请用 Base64 加密功能加密)

screenshot-2026-01-22-22-45-34

每天按顺序给留言的 2 友发邀请码。
如果运气好,中了金币池,会优先给这位发邀请码。

再重申一遍,

只限 4 级以上且拥有除了种子用户徽章以外其他徽章活跃用户

距离上次更新 1.21 差不多应该有 3 年了。
官网只是放出了更新,并没有说更新了啥。
目前已经有了一些问题出现,比如:部分插件失效。原因在于$this->keywords 不能用了,需要改用 $this->getKeywords()。

量子计算技术《糖果游戏》是一款色彩缤纷、画面可爱,自发布以来受到了众多玩家的热爱。挑战精巧的关卡,解锁更多的乐趣。本文将为你揭开这款游戏的神秘面纱,帮助你掌握糖果世界的玩法与规则。

微算法科技( NASDAQ : MLGO ) 提出的量子安全区块链技术,核心在于将后量子委托运气证明(PQ-DPoL )机制融入其中。它把运气证明( PoL )机制与委托方法相结合,同时集成后量子签名方案,尤其是采用 Falcon 签名方案,旨在构建出具备量子抗性、能源效率以及公平性的高效区块链系统。

在游戏中,玩家将置身于一个充满各种形状和颜色糖果的奇幻世界。你的任务是通过解锁组合和消除糖果来完成关卡。每个关卡都有不同的任务和挑战,如在限定的步数或时间内消除特定数量的糖果。完成任务可以进入下一关卡,继续探索甜蜜的旅程。

玩法十分简单,通过交换相邻的糖果来形成三个或更多相同颜色的糖果排列,完成组合消除。某些组合还会产生特殊糖果,具有特别功能,如消除整行或整列的糖果。但要小心关卡中的限制和难关,如冰块、障碍物等,需要特定策略来解决。

后量子签名层:采用NIST 标准化 Falcon 签名方案替代传统 ECDSA ,基于格理论构造抗量子计算难题。 Falcon 通过高斯采样生成短向量私钥,结合哈希函数将交易数据映射至格空间,生成紧凑( 1,296 字节)且快速的签名,满足 NIST 安全级别 3 (抗攻击强度 ≥2^128 )。