2026年4月

本金 9w,后续网贷 17w 拉低成本,买的*ST 股昨天突然发退市公告了, 不知道该怎么和老婆说,本金没了然后还要还网贷(需要和老婆要存款),哈哈哈哈哈 感觉自己很畜,对家庭不负责任 😮‍💨

先说结果,做了 A 股、黄金、货币(加密货币)的跟踪插件,痛点是安装一个就全解决。

今天很忙,都没顾上来回大本(2 站)摸鱼,不过昨天比较闲,想起来之前发贴问 Grok 浏览器插件的事,Joe 佬提到可以让 LLM 告诉我怎么弄,不过那个事解决了,最后用的 NousSave 这个插件(好用、推荐)。

然后最近不是在尝试 WorkBuddy 和 QClaw 嘛,就想着用他们弄插件吧,下手的就是股票监控插件,因为平时会追踪 A 股、黄金以及货币价格,目前浏览器插件都是单一功能的,所以地址栏后面的区域就挺拥挤。(下图倒数 2、3 分别是之前安装的 A 股和黄金的)

image

然后就开始用 WorkBuddy 开始搞,第一版很快,试了一下发现太拉了,添加不了代码,货币也不能自定义等等问题。不过经过 2-3 个版本的迭代,就已经很可用了,然后我们又加上了徽章外显示数据的功能,并增加了昨日价格以及黄金 7 日均价等等,还精简了布局。效果不错吧。

image

作为小白,我对于龙虾能做到这种程度挺震惊的,于是准备上架插件商店,经过一番鼓捣(微软的【Partner Center】 bug 可真多),还好搞定了,目前在审核中,等审核过了,要让 2 友们测试测试,看看还有哪些问题,有哪些优化空间。

啊,真有趣。

DNS 服务器是什么(通俗版)

DNS 服务器 = 互联网的 “电话本 / 地址翻译器”

核心作用

我们上网用的是域名(比如 baidu.com),但电脑真正通信靠的是 IP 地址(一串数字,如 180.101.49.11)。DNS 服务器的工作就是:把你输入的域名 → 翻译成对应的 IP 地址,让浏览器能找到目标服务器。

简单流程

  1. 你在浏览器输入网址
  2. 电脑问 DNS 服务器:这个域名对应的 IP 是多少?
  3. DNS 查完告诉你
  4. 电脑拿着 IP 去连接网站

常见 DNS 举例

  • 公共 DNS:114.114.114.114223.5.5.58.8.8.8
  • 路由器 / 光猫通常会自动分配当地运营商 DNS

一句话总结:没有 DNS,你就只能记 IP 数字上网,没法用好记的域名。

域名是 “门牌号”,服务器是 “房子”,DNS 是帮你按门牌号找到房子的向导。

    • *

1. 它们到底是什么关系?

  • 服务器:真实存在的一台电脑,有固定 IP 地址,存放网站、APP 数据。
  • 域名:好记的名字(比如 baidu.com),用来代替难记的 IP。
  • 关联方式:在域名后台做解析,把域名指向服务器的 IP。

这样别人输入域名,就能访问到你的服务器。

    • *

2. 完整流程(超通俗)

  1. 你买了一台服务器,得到一个 IP:1.2.3.4
  2. 你注册一个域名abc.com
  3. 去域名管理页,设置解析:abc.com → 指向 1.2.3.4
  4. 用户输入 abc.com
  5. DNS 查到 IP,连接到你的服务器
  6. 看到网站内容
    • *

3. 几个关键知识点

  • 一个域名可以指向一个或多个服务器(负载均衡)
  • 一个服务器可以绑定很多个域名(虚拟主机)
  • 只有解析生效,域名和服务器才算真正连上
  • 域名本身不存放内容,内容都在服务器里
    • *

简单记:域名负责 “好找”,服务器负责 “存放内容”,解析负责把它们绑在一起。

Lifecycle中出现的监听器

(老的版本中是LifecycleSupport接口)

public interface Lifecycle {
    /** 第1类:针对监听器 **/
    // 添加监听器
    public void addLifecycleListener(LifecycleListener listener);
    // 获取所以监听器
    public LifecycleListener[] findLifecycleListeners();
    // 移除某个监听器
    public void removeLifecycleListener(LifecycleListener listener);
    ...
}
  • 多个组件中出现监听器

对应到整体架构图中

对应到代码中

知识准备

理解上述监听器的需要你有些知识储备,一是设计模式中的观察者模式,另一个是事件监听机制。

观察者模式

观察者模式(observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新

主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。

观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。

详情请参考 设计模式:行为型 - 观察者(Observer)

事件监听机制

JDK 1.0及更早版本的事件模型基于职责链模式,但是这种模型不适用于复杂的系统,因此在JDK 1.1及以后的各个版本中,事件处理模型采用基于观察者模式的委派事件模型(DelegationEvent Model, DEM),即一个Java组件所引发的事件并不由引发事件的对象自己来负责处理,而是委派给独立的事件处理对象负责。这并不是说事件模型是基于Observer和Observable的,事件模型与Observer和Observable没有任何关系,Observer和Observable只是观察者模式的一种实现而已。

java中的事件机制的参与者有3种角色

  • Event Eource:事件源,发起事件的主体。
  • Event Object:事件状态对象,传递的信息载体,就好比Watcher的update方法的参数,可以是事件源本身,一般作为参数存在于listerner 的方法之中。
  • Event Listener:事件监听器,当它监听到event object产生的时候,它就调用相应的方法,进行处理。

其实还有个东西比较重要:事件环境,在这个环境中,可以添加事件监听器,可以产生事件,可以触发事件监听器。

这个和观察者模式大同小异,但要比观察者模式复杂一些。一些逻辑需要手动实现,比如注册监听器,删除监听器,获取监听器数量等等,这里的eventObject也是你自己实现的。

下面我们看下Java中事件机制的实现,理解下面的类结构将帮助你Tomcat中监听机制的实现。
  • 监听器
public interface EventListener extends java.util.EventListener {
    void handleEvent(EventObject event);
}
  • 监听事件
public class EventObject extends java.util.EventObject{
    private static final long serialVersionUID = 1L;
    public EventObject(Object source){
        super(source);
    }
    public void doEvent(){
        System.out.println("通知一个事件源 source :"+ this.getSource());
    }
}
  • 事件源:
public class EventSource {
    //监听器列表,监听器的注册则加入此列表
    private Vector<EventListener> ListenerList = new Vector<>();
 
    //注册监听器
    public void addListener(EventListener eventListener) {
        ListenerList.add(eventListener);
    }
 
    //撤销注册
    public void removeListener(EventListener eventListener) {
        ListenerList.remove(eventListener);
    }
 
    //接受外部事件
    public void notifyListenerEvents(EventObject event) {
        for (EventListener eventListener : ListenerList) {
            eventListener.handleEvent(event);
        }
    }

}
  • 测试
public static void main(String[] args) {
    EventSource eventSource = new EventSource();
    eventSource.addListener(new EventListener() {
        @Override
        public void handleEvent(EventObject event) {
            event.doEvent();
            if (event.getSource().equals("closeWindows")) {
                System.out.println("doClose");
            }
        }
    });
    eventSource.addListener(new EventListener() {
        @Override
        public void handleEvent(EventObject event) {
            System.out.println("gogogo");
        }
    });
    /*
      * 传入openWindows事件,通知listener,事件监听器,
      对open事件感兴趣的listener将会执行
      **/
    eventSource.notifyListenerEvents(new EventObject("openWindows"));
}

Tomcat中监听机制(Server部分)

基于上面的事件监听的代码结构,你就能知道Tomcat中事件监听的类结构了。
  • 首先要定义一个监听器,它有一个监听方法,用来接受一个监听事件
public interface LifecycleListener {
    /**
     * Acknowledge the occurrence of the specified event.
     *
     * @param event LifecycleEvent that has occurred
     */
    public void lifecycleEvent(LifecycleEvent event);
}
  • 监听事件, 由于它是lifecycle的监听器,所以它握有一个lifecycle实例
/**
 * General event for notifying listeners of significant changes on a component
 * that implements the Lifecycle interface.
 *
 * @author Craig R. McClanahan
 */
public final class LifecycleEvent extends EventObject {

    private static final long serialVersionUID = 1L;


    /**
     * Construct a new LifecycleEvent with the specified parameters.
     *
     * @param lifecycle Component on which this event occurred
     * @param type Event type (required)
     * @param data Event data (if any)
     */
    public LifecycleEvent(Lifecycle lifecycle, String type, Object data) {
        super(lifecycle);
        this.type = type;
        this.data = data;
    }


    /**
     * The event data associated with this event.
     */
    private final Object data;


    /**
     * The event type this instance represents.
     */
    private final String type;


    /**
     * @return the event data of this event.
     */
    public Object getData() {
        return data;
    }


    /**
     * @return the Lifecycle on which this event occurred.
     */
    public Lifecycle getLifecycle() {
        return (Lifecycle) getSource();
    }


    /**
     * @return the event type of this event.
     */
    public String getType() {
        return this.type;
    }
}
  • 事件源的接口和实现

事件源的接口:在Lifecycle中

public interface Lifecycle {
    /** 第1类:针对监听器 **/
    // 添加监听器
    public void addLifecycleListener(LifecycleListener listener);
    // 获取所以监听器
    public LifecycleListener[] findLifecycleListeners();
    // 移除某个监听器
    public void removeLifecycleListener(LifecycleListener listener);
    ...
}

事件源的实现: 在 LifecycleBase 中

 /**
  * The list of registered LifecycleListeners for event notifications.
  */
private final List<LifecycleListener> lifecycleListeners = new CopyOnWriteArrayList<>();

/**
  * {@inheritDoc}
  */
@Override
public void addLifecycleListener(LifecycleListener listener) {
    lifecycleListeners.add(listener);
}


/**
  * {@inheritDoc}
  */
@Override
public LifecycleListener[] findLifecycleListeners() {
    return lifecycleListeners.toArray(new LifecycleListener[0]);
}


/**
  * {@inheritDoc}
  */
@Override
public void removeLifecycleListener(LifecycleListener listener) {
    lifecycleListeners.remove(listener);
}


/**
  * Allow sub classes to fire {@link Lifecycle} events.
  *
  * @param type  Event type
  * @param data  Data associated with event.
  */
protected void fireLifecycleEvent(String type, Object data) {
    LifecycleEvent event = new LifecycleEvent(this, type, data);
    for (LifecycleListener listener : lifecycleListeners) {
        listener.lifecycleEvent(event);
    }
}
  • 接下来是调用了

比如在LifecycleBase, 停止方法是基于LifecycleState状态改变来触发上面的fireLifecycleEvent方法:

@Override
public final synchronized void stop() throws LifecycleException {

    if (LifecycleState.STOPPING_PREP.equals(state) || LifecycleState.STOPPING.equals(state) ||
            LifecycleState.STOPPED.equals(state)) {

        if (log.isDebugEnabled()) {
            Exception e = new LifecycleException();
            log.debug(sm.getString("lifecycleBase.alreadyStopped", toString()), e);
        } else if (log.isInfoEnabled()) {
            log.info(sm.getString("lifecycleBase.alreadyStopped", toString()));
        }

        return;
    }

    if (state.equals(LifecycleState.NEW)) {
        state = LifecycleState.STOPPED;
        return;
    }

    if (!state.equals(LifecycleState.STARTED) && !state.equals(LifecycleState.FAILED)) {
        invalidTransition(Lifecycle.BEFORE_STOP_EVENT);
    }

    try {
        if (state.equals(LifecycleState.FAILED)) {
            // 看这里
            fireLifecycleEvent(BEFORE_STOP_EVENT, null);
        } else {
            setStateInternal(LifecycleState.STOPPING_PREP, null, false);
        }

        stopInternal();

        // Shouldn't be necessary but acts as a check that sub-classes are
        // doing what they are supposed to.
        if (!state.equals(LifecycleState.STOPPING) && !state.equals(LifecycleState.FAILED)) {
            invalidTransition(Lifecycle.AFTER_STOP_EVENT);
        }

        setStateInternal(LifecycleState.STOPPED, null, false);
    } catch (Throwable t) {
        handleSubClassException(t, "lifecycleBase.stopFail", toString());
    } finally {
        if (this instanceof Lifecycle.SingleUse) {
            // Complete stop process first
            setStateInternal(LifecycleState.STOPPED, null, false);
            destroy();
        }
    }
}

绝了,大嘴发布会宣传雪地遇白羊,问界 AEB 正常触发,应该是想给激光雷达吹牛逼,
但是... 漏洞一大堆,羊的影子从左前方突然变正右方,太阳方位不可能在几秒内转 90 度,只能是两段不同时间的素材硬拼。
车头 “充电枪” 穿帮:视频里车头侧面一直插着运动相机支架,正常路测不可能带这东西,纯摆拍痕迹。
画面 AI 感过重:雪地太干净、车痕不连贯、羊的边缘糊边,符合生成式 AI 合成特征,不是真实拍摄。
车过雪地不留痕,论坛干净不沾雪,服了

这里记录每周值得分享的科技内容,周五发布。([通知] 下周五一假期,周刊休息。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系[email protected])。

封面图

我见过的最酷广告牌,只有一行命令,推广一个 AI 工具包。普通人看不懂也没关系,反正不是给他们用的。(via

第二次 API 开放浪潮

如果你在互联网行业足够久,大概会记得,以前有过一次 API 开放的浪潮。

那是15年前的2011年,云服务刚兴起不久,各种平台纷纷开放自己的 API。

那时,Facebook 和 Twitter 都发布了自己的 API,开放了平台数据。GitHub 的 API 设计简直是艺术品,几乎可以获得任何想要的功能。

平台的想法是,开放的 API 有助于用户和第三方加入,来开发各种插件和扩展程序,从而推动平台的增长,提高用户留存率和满意度。

那时还有一个叫做 ProgrammableWeb 的网站(现已关闭),它的名字就代表了当时人们的信念:互联网可以通过 API 编程,把各种平台的数据连接在一起。

但是,事情的发展跟预想完全相反。

平台发现,API 很难盈利,因为无法插入广告,而且自家的数据会帮助其他公司的生意,造成用户流失。

于是,它们纷纷改变做法,限制和关闭 API,不再分享数据,将用户留在自家的"围墙花园"。

如今,Facebook 和 Twitter 的 API 已经形同虚设,第三方客户端遭到彻底禁用。GitHub 虽然还保持开放的 API,但也采取了管控,增加了身份验证和速率限制,要想构建全功能的第三方应用也很困难。

正当人们觉得这将是常态,转变出现了。

就在2025年的下半年,大模型达到了临界点,变得真正强大,可用于生产环境了。

人们很快意识到,如果大模型只会思考,不能执行代码,用处就不大。AI 的最大价值不是内容生成,而是内容生成 + 自动化,这样才能最大限度解放人力、创造价值。AI 自动化,自己执行代码的典型代表就是"龙虾"(OpenClaw)。

自动化意味着 AI 必须能够调用其他平台,进而意味着,其他平台必须先开放自己的 API。

突然之间,API 不再是累赘,而是接入 AI 的必须条件。没有 API,你的平台就进入不了 AI 工作流,各种 Agent 也就不能代表用户在你的平台上工作。

同样两个平台,一家有 API,另一家没有,后者就很可能被市场放弃,因为大模型无法接入它,也就无法对它自动化,AI 用户只能转向它的竞品。

平台意识到了,谁尽快开放 API,谁就抢占了先机。所以,强如腾讯也会在龙虾爆红后,以最快的速度开放了微信接口,让龙虾可以向微信发消息。

腾讯也害怕,在龙虾的世界里没有自己的一席之地。其他平台就更不用说了,抢着通过 MCP 和 Skill 开放自家的操作接口。

这表明,第二次 API 开放浪潮正在到来。这一次将比上一次开放得更彻底,更易用。

(1)这次开放的不仅是云服务,还有很多日常生活服务:外卖、电商、银行......甚至还有很多原本根本不会有 API 的服务,比如餐馆和球馆的预订。

(2)这次的 API 不需要手动编程,你只需使用自然语言,由大模型翻译后调用。

(3)这次的 API 是消费者通过 AI 调用,使用目的是代表用户行事。以前 API 是由应用程序调用,使用目的是获取数据。

机器人半马

上周末,北京亦庄举行了第二次人形机器人的半马比赛

超过100个人形机器人参加比赛,看谁最快跑完21.0975公里。最终,冠军成绩是50分26秒,超过了人类最快的选手(半马的人类世界纪录是1小时02分52秒)。

根据网友拍摄的现场视频,机器人跑到一定距离就要进入补给站,由工作人员更换电池,并加入冰块(或者干冰)防止过热。

这就是说,机器人的内置电池支持不了一小时的运行时间。

宇树公开发售的 H2 人形机器人,续航时间是3小时。在长跑这种剧烈运动时,续航应该会大打折扣。而且,功率相同时,体重较轻的机器人在赛跑中有优势,也就意味着不能多携带电池。

这样看上去,人形机器人目前的实用性还是很有限。不插电时,一到两个小时就要充电,那样的话,很多事情就不适合做了。

GPT Images 2.0

本周,OpenAI 发布 GPT Image 2.0 模型,据说是目前最强的图像模型,性能超过了谷歌的 Nano Banana 2 Pro。

根据 OpenAI 的介绍,它的文字渲染有较大进步,很好地支持汉字,可以生成复杂的解释性图片。

大家可以去 ChatGPT.com 免费试用。

我做了一个比较,生成一张小狗在古镇屋檐下午睡的图片。这是 GPT Images 1 的结果。

这是 GPT Images 2.0 的结果。

我还看到一个有趣的项目 Flipbook。它是一个解释性图片浏览器,用户输入一个主题,它会自动生成详细解释的图片。

上图是输入"汽水"生成的解释图片,点击局部,还能生成进一步的解释。

网上已经有收集提示词的 Awesome 仓库@DophinL 投稿),大家可以看看别人的优秀例子。

另有一个同类的提示词仓库@ZeroLu 投稿)。

AI 是扩展神器

AI 有一个特点,不仅能够压缩信息,更善于扩展信息。它会推断出模糊不清的部分,更能生成缺失的部分,填补上看似合理的细节。

这意味着,AI 是扩展神器。有人设想了这样的场景:

  • 公司 CEO 开会时口述了一个设想。
  • AI 将其扩展成一份战略文件。
  • AI 将战略文件转化为产品规格。
  • AI 用氛围编程生成代码原型。
  • AI 根据代码原型,撰写出发布文案和公关稿。

看到了吗,AI 可以把脑子里的一个想法,不断扩展出文档、代码、产品、发布会、就业......

人们总是说,将来的世界是物质产品极大丰富的世界,AI 看上去就是这一类工具:凡是它能生成的东西,都将变得极大丰富

小轿车的车载厕所

赛力斯申请了一个小轿车的"车载厕所"专利。

座椅装在一个滑轨上,向后滑动就会露出下方的坐便器。

这个马桶配备了加热元件,用于蒸发尿液并烘干其他污物,但还是需要定期手动清空。同时,车内配备风扇和排气管,用于换气。

这个装置对于小轿车,使用场景有限,只适合高速公路大堵车的情况。但是,对于跑长途的大货车,倒是很实用。

文章

1、不要使用 Ollama(英文)

Ollama 是一个运行本地大模型的工具,本文提出它有诸多问题,建议改用 llama.cppLM Studio

2、npmx 的功能(英文)

有人为 npmjs.com 做了一个新的前端 npmx.dev,解决了很多开发者要求已久的功能。

3、不要过长的链式调用(英文)

JavaScript 语言可以写出很长的链式调用(上图),有些程序员很喜欢用。本文提出链式调用有一些缺点,不宜过长。

4、异步编程技术的演变和实际成果(英文)

一篇概述,介绍异步编程的由来,如何发展出 async/await 这种普遍接受的解法,以及存在的问题,写得比较深入。

5、被动雷达的工作原理(英文)

雷达可以主动发射电波侦测飞行物,也可以不发射电波,只监听电波变化,这就叫被动雷达。

工具

1、Little Snitch for Linux

著名的网络通信监控软件 Little Snitch,终于推出了 Linux 版,可以用它看到每个应用跟什么网址通信。

2、quien

查询域名信息的终端工具,提供清晰易用的界面。

3、ggsql

可以生成图形的 SQL 查询工具,直接查询数据库,将结果表示成可视化图形,参见介绍文章

4、Himi Recorder

开源的 Mac 录屏应用,可以绕过录屏检测机制,让被录制的应用无法感知正在被录屏。(@jrainlau 投稿)

5、Tab Harbor

开源的 Chrome 插件,把新打开的标签主页变成标签管理器。(@V-IOLE-T 投稿)

另有一个类似插件 Tab Out。(@Acorn2 投稿)

6、animal-island-ui

《动物森友会》风格的 React UI 组件库。(@guokaigdg 投稿)

7、CUPS Web

网页版打印机管理工具,通过浏览器远程控制打印机,支持多用户、打印记录追踪等功能。(@hanxi 投稿)

8、Blog Helper

开源的访客统计服务,提供 PV/UV 统计、热门文章、趋势图等,一个实例服务多个站点。(@thinkycx 投稿)

9、HiKid

帮助小朋友练习英语口语和听力的桌面应用,完全免费,目前仅支持 macOS。(@Hao4Wang 投稿)

10、Kite Desktop

桌面端的 K8S 多集群管理工具。(@eryajf 投稿)

11、Project River

Git 仓库提交历史的可视化河流图,支持多项目对比、贡献者信息等特性,在线体验。(@Lionad-Morotar 投稿)

AI 相关

1、OpenAI Privacy Filter

如何才能避免把敏感信息(比如姓名、地址、电话、密码)发给大模型?

OpenAI 给出了答案:Privacy Filter。这是一个本地运行的大模型,它先处理后再发给线上大模型。

比如,原文是"产品发布日期是2026年9月18日",处理后就是"产品发布日期是[PRIVATE_DATE]",参见介绍文章

2、LinkAI Gateway

开源的 AI 网关,可以接入主流大模型,然后对外提供统一的 API(OpenAI 兼容)和管理后台。(@star7th 投稿)

3、Nezha(哪吒)

开源的 AI 编程任务管理器,快速切换多任务管理,集成了原生终端、会话管理、代码编辑、Git 等功能,大小不到 10MB。(@hanshuaikang 投稿)

4、WatermarkZero

Gemini 生成图片的可见水印去除工具,图片不需要上传到服务器,直接在本地浏览器处理。(@liuyan-wjy 投稿)

5、mini-cc

开源的 AI 编程 Agent,作用类似于 Claude Code,采用多语言架构,目前已完成 TypeScript 实现。(@RainyNight9 投稿)

资源

1、The Listening Museum

一个有意思的网站,收集键盘打字的声音。你可以先听一下某种键盘的打字声,再确定是否购买它。

2、软件工程定律

这个网站收集各种软件相关的定律,目前有56条。

比如,"帕金森定律"(Parkinson's Law):工作量总是会增加,直至填满所有可用时间。推论就是,不管设置多长的开发时间,项目开发总是会做到最后一刻。

图片

1、5x5 像素的英文字体

最小的英文字体有多小?

1x1 像素(宽1像素,高1像素)就是一个点,当然不可能;2x2 像素也不可能;3x3 像素理论上可以,实际上无法阅读;4x4 像素难以绘制一些多笔画的字符,比如 E、M、W。

因此,英文字体最小就是 5x5 像素,就是下面的效果。

上面字体中,大多数小写字母比大写字母小一个像素,从而使两者可以在视觉上区分。

整个字体仅占用350字节的内存,所以很适合老式设备或低端设备,即使只有 16kB 内存的8位微控制器,也能完成字体渲染。

另外,它的每个字符只需要25个像素就能显示,而即使 384x288 显示屏也有11万像素。

除了 5x5 字体,还有 3x5 字体(宽3像素,高5像素)和 4x5 字体(宽4像素,高5像素),但是它们的辨识效果都不好(下图)。

2、里海石油城

里海是世界最大湖泊,面积相当于云南省。

上个世纪中期,里海发现了石油。当时的苏联就开始在湖面上建设石油平台,距离岸边有60英里,乘坐6个小时的渡轮才能到达。

最多的时候,共有约320个生产基地,包含2,000口井,通过100多英里的桥梁连接起来。

那时,5000多人生活在这些平台上,形成了一个难以置信的水上城市,所有住宅楼都是建在水上。

随着油田的枯竭和油价的波动,这座石油城的产量已经大幅下降,人们大多离开,整个平台年久失修,垮塌就是时间问题。

言论

1、

美国鞋类生产商 Allbirds 宣布转型为 AI 公司,股价一天暴涨了5倍。

这让人想起2017年,美国一家名为"长岛冰茶"的饮料企业,宣布转型为区块链公司,卖柠檬茶的同时,探索区块链的投资机会,股价也是暴涨。后来,它的区块链业务还没建立好,就破产了。

-- 雅虎

2、

Figma 拥有近 2000 名员工(当然并非所有员工都从事产品开发),而 Anthropic 新推出的 Claude Design 的开发团队,我甚至怀疑是否超过10个人。

-- 《Figma 的困境》,本文评论 Claude Design 对 Figma 造成重大打击,在 AI 的开发速度和开发成本面前,传统软件不堪一击。

3、

我对未来世界的憧憬是,她或许不那样充满未来感,反而更像田园牧歌。我们可以回归传统的生活形态,同时又不放弃新技术带来的便利,几乎无需再去看屏幕或触碰屏幕。

-- jsomers.net

4、

每一种文化都会造就反映其最深层焦虑的英雄。

硅谷最焦虑的,就是增长停滞,无法创造出大受市场欢迎的新产品,所以大肆宣传"英雄开发者":他们能在午夜发布新功能,凭借着咖啡因带来的强大意志力,将白板上的涂鸦变成价值数十亿美元的独角兽企业。

-- 《古典维护者的挽歌》

往年回顾

冷启动的破解之道(#347)

饮水鸟玩具(#297)

扎克伯格的裁员信(#247)

如果这个世界有快乐机(#197)

(完)

我感觉大家都在说 coding plan 抢不到,token plan 不够用。
好奇你们都做什么事情需要这么多这么频繁使用,小龙虾都做些什么?敲代码的话每天要调几千次么?

小伙子(我)做了一个 s3 的桌面管理工具, 想问问大家,你们平时有使用 s3 或者兼容的服务吗? 主要用例是什么? 都用的哪家的服务。

本人的工作主要是开发网络协议(各种协议,很多,感兴趣的也可以随便聊聊), 作为程序员,接触的客户比较少,也比较好奇真正的用户都是怎么用的。

1.在一台 vps 刚搭建了 cpa. oauth 认证了一批古法手搓的 free 账号。
2.采用 docker 部署的。
3.看文档找到了一个配置。这个是我后来手动修改过的
auth-dir: "/home/devSoft/cliProxyApi/auth-dir"
4.docker 挂载的目录
image
应该是我修改后没有重启导致的?
但是挂载的目录均没有文件,无论是宿主机还是容器内。刚接触 cpa,有大佬支持下吗?
宿主机 auth 目录
image
容器内 auth 目录
image
另外就是我先前挂载的宿主机的目录
image

cpa 的文件
image

目前我因为需要更新 docker 镜像,担心数据丢失。所以现在全部手动下载了。

本人比较喜欢洗车,大概十天半个月就会洗一次,车买回来几年基本都是自助洗车。
喜欢自己玩水枪、PA 喷泡沫的感觉,而且洗的时候很解压、很放松,还能活动身体,所以就一直自己洗。

洗车最令人烦恼的一般就是天气原因。比如说你正洗的时候要下雨了,或者刮大风了,到处都是灰尘。还有就是刚洗完第二天就又被雨雪、沙尘给搞脏了,这种情况比较烦人。
洗车产品的药剂品牌非常多,工具也非常多,让一开始自己洗车的人都不知道该怎么选择,很怕交智商税。
基于这些原因,我觉得对于爱洗车的人来说,还是需要一个来帮忙查看天气、管理洗车周期,并且有个地方能看洗车产品的口碑情况的小工具。

自己做了一个小程序,叫洗车志,来帮助车友来解决这些小麻烦。

主要功能:

  • 洗车天气:根据天气,计算当天以及未来 7 天是否适合洗车,可以自己设置洗车的周期,到期会提醒你来洗车。
  • 打卡记录:每次洗车可以打卡,记录使用的洗车用品、花费、耗时、日期等信息。
  • 生成分享海报:打卡后可以生成精美海报,海报上会写有你这次打卡时使用的时间、耗时、使用的产品等等信息,让大家都能看到你的靓车,方便分享到社交网络。
  • 洗车产品库:整理了市面上大部分常见的洗车用品品牌,以及他们比较热门的产品。车友可以根据自己的使用情况进行口碑投票,这样大家都能清楚哪些产品好,哪些产品不好。

我用 gpt 设计了几张宣传图,可以更直观地展示功能。希望能帮大家洗车更有计划,也欢迎大家提意见和功能建议!

海报 1

海报 2

海报 3

海报 4

海报 5

海报 6

这是一张打卡海报,有好几个不同的模版,可以根据自己的喜好选择。

打卡海报

扫码体验

二维码

4 小时前

2024 年获批建设的昆明国际通信业务出入口局,将于今年全面投入运营。4 月 23 日,中国电信云南公司党委委员、副总经理黄涛在云南广播电视台《金色热线》节目中透露,云南电信正按照“一通道四中心”规划,高质量推进这一国家级通信枢纽建设。

据黄涛介绍,在数字信息大通道方面,云南电信进一步优化了中老、中缅、中越等 8 条跨境链路,新建腾冲、河口等信道局,通道带宽从 800G 提升至 2T 。同时大幅压低通信时延,昆明到新加坡时延低至 23 毫秒,到缅甸仅 6 毫秒,建成覆盖南亚东南亚的低时延高速网络。

在流量汇聚方面,昆明国际出入口局已与北京、上海、广州、海口四大国际出入口局全面联通,开通至全国 14 个省 22 个主要城市的直达链路,全国通道能力达 25T 。目前已实现西部省份国际流量 100%经昆明疏通、全国访问欧洲流量 10%经昆明疏通,云南正逐步成为南亚东南亚数据流量的核心集散地。

在算力方面,依托“两亚智算中心”及即将在昆明呈贡新建的运营中心,未来可承载上万 P 算力,形成“两亚智算中心+呈贡信息产业园”双核心布局,成为中国电信全球算力的重要支点。

此外,云南电信还与昆明市政府共建跨境数据服务中心,联动中老磨憨—磨丁经济合作区,为企业提供数据出境服务,助力政府开展数据跨境监管。黄涛表示,“一通道四中心”是边建设、边招商、边见效的务实行动,未来将为云南建设面向南亚东南亚数字高地贡献电信力量。(云南网 记者李子楠)

======================================================================================

中国电信提速昆明国际通信业务出入口局建设运营

2026 04/21 17:18:00

新华网云南

近日,全国第四大国际通信枢纽——昆明国际通信业务出入口局网络设施工程已进入全面验收阶段。该项目于 2024 年 7 月获工业和信息化部批复设立,由中国电信独家建设运营,历经 1 年建设,已全面竣工,预计今年将完成流量全面加载。将成为构筑面向南亚东南亚的国家级数字枢纽底座,护航“出海企业”通信安全及畅通。

昆明国际通信业务出入口局位于昆明市西山区的“两亚”智算中心内,4000 架机柜整齐排布、12 万台服务器高速运转,以 30 亿亿次浮点算力强劲赋能“数字经济”发展。它是我国时隔 30 余年,继北京、上海、广州后设立的第四个全业务国际通信出入口局,也是西南地区首个国家级全业务国际通信关口,目前,该局已打通中老、中缅及欧洲、北美、亚洲等多方向网络链路,建成 8 条跨境路缆,开通多方向 1200G 国际链路,网络性能实现跨越式提升。昆明国际通信业务出入口局有效改善国际通信。例如:昆明至曼谷的国际传输时延相较传统路由从 70 毫秒下降至 20 毫秒;国际陆缆故障修复时间缩短至 3-7 天。时延低、维护快、传输稳、就近服务的核心优势十分突出。