MoreRSS

site iconafoo | 王福强修改

连续创业者,20多年互联网与金融技术经验,前阿里巴巴高级技术专家,现福强科技CEO,分享技术、管理、商业和AI知识。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

afoo | 王福强的 RSS 预览

Gemini CLI 快速上手

2025-06-26 00:00:00

Gemini CLI 快速上手 -王福强的个人博客:一个架构士的思考与沉淀

Gemini CLI 快速上手

王福强

2025-06-26


Claude Code又添一个竞品

安装

ni -g @google/gemini-cli

使用

命令行直接输入gemini

步骤

第一步会让你选择用什么theme(风格),按Enter键选择默认就挺好

第二步会让你选择Auth方式,也就是使用什么认证和授权方式, 我有用Google账号的方式、有用API Key的方式,甚至还有Vertex AI (google云)的方式, 我选择的API Key方式,因为原来就有从AI Studio获得的API Key。

但有个小卡点是,我之前把这个API Key 以 export GOOGLE_API_KEY=...的方式设置了环境变量,但Gemini-CLI从环境变量里提取API Key用的却是GEMINI_API_KEY, 所以,我在$HOME/.zshrc中又添加了一行:export GEMINI_API_KEY=...

现在就可以愉快的跟gemini玩耍了。

NOTE

如果第二步你没有提前设置 GEMINI_API_KEY,那么CTRL+C退出之后,设置完GEMINI_API_KEY再次运行gemini,它就会自己捕捉到这个环境变量了(当然,你也得source $HOME/.zshrc一下或者重开命令行窗口)。 如果没有识别到,可以在输入框输入/auth重新认证。

GL&HF




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)

Cloudflare Containers 避坑指南

2025-06-25 00:00:00

Cloudflare Containers 避坑指南 -王福强的个人博客:一个架构士的思考与沉淀

Cloudflare Containers 避坑指南

王福强

2025-06-25


今天Cloudflare发布了他们自己的Containers方案,

我也做了个原理性的介绍视频发到了「架构百科」视频号与油管频道: 「六分钟极速通关Cloudflare Containers

建议读到这篇文字的同学可以先去看视频

看完视频之后再回来看文字

因为文字只对玩Cloudflare Containers过程中常见的坑儿进行了记录和分享…

Docker需预装

如果你使用的是macos系统,建议安装OrbStack, 虽然Docker Desktop也没问题。

总之先要有个本地的Docker编译环境, 因为wrangler deploy的时候会调用docker来编译docker image,本地如果找不到docker支持,那么会报错:

(base) LuckyJohn💫 ➜  hello-cf-container git:(master)  wr deploy

 ⛅️ wrangler 4.21.2
───────────────────
Total Upload: 81.93 KiB / gzip: 20.23 KiB
Your Worker has access to the following bindings:
Binding                                     Resource
env.KEEWEB_CONTAINER (KeeWebContainer)      Durable Object

Uploaded hello-cf-container (7.05 sec)
Building image hello-containers-with-java-scala:9bab1ce2
[+] Building 1.7s (3/3) FINISHED                                                                                                                                                                                      docker:orbstack
 => [internal] load build definition from Dockerfile                                                                                                                                                                             0.0s
 => => transferring dockerfile: 175B                                                                                                                                                                                             0.0s
 => ERROR [internal] load metadata for docker.io/library/eclipse-temurin:24-jre                                                                                                                                                  1.6s
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                                           0.0s
------
 > [internal] load metadata for docker.io/library/eclipse-temurin:24-jre:
------
Dockerfile:1
--------------------
   1 | >>> FROM eclipse-temurin:24-jre
   2 |     ADD container-java.jar /hello-cf-container.jar
   3 |     EXPOSE 1979
--------------------
ERROR: failed to solve: failed to fetch oauth token: Post "https://auth.docker.io/token": read tcp 192.168.199.247:54738->44.208.254.194:443: read: connection reset by peer

 [ERROR] Build exited with code: 1

网络需畅通

就算装了Docker, 有个东西也要注意,那就是网络。

假如你有登天梯,那么,最好开TUN模式,否则,很可能碰到类似的错误:

Image does not exist remotely, pushing: registry.cloudflare.com/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala:e62c63b6
The push refers to repository [registry.cloudflare.com/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala]
5dc0fe8b0741: Layer already exists
...
Head "https://registry.cloudflare.com/v2/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala/blobs/sha256:af0ca98f33ef433a4b7855291e197fc872145873dd41c9e3ec6396517ac80202": net/http: TLS handshake timeout

 [ERROR] Docker command exited with code: 1

Wrangler版本不能太老

这个坑耗费我时间最久,因为命令行打印信息和滚动速度比较快,最开始我没注意前面的错误信息,导致我认为部署成功了。(而且,信息也确实提示部署成功了,艹!)

所以, 我咋刷新也看不到“部署成功”的containers, 访问理论上应该可以访问成功的路径也不成功(超时或者报错)。

兜了很大一圈子(甚至都去折腾java项目的依赖冲突去了), 偶然才发现,原来是因为我用的全局wrangler版本过低!!!

因为我给全局wrangler设置了一个wr的alias方便使用,所以并没有用项目定义里的wrangler。

最后ni -g wrangler@4(即npm install -g wrangler@4)升级后搞定。 (当然,还顺道调换了下node在$PATH环境变量中的位置)

另外就是,假如之前本地的wrangler处于登陆了cloudflare的状态,那么,因为cloudflare containers这个特性太新, 所以,会提示有的权限不够,需要重新登录。

Uploaded hello-cf-container (3.39 sec)
 [ERROR] You don't have 'containers:write' in your list of scopes
...
✘ [ERROR] You need 'containers:write', try logging in again or creating an appropiate API token

这时候就是两步走:

  1. wrangler logout (我是wr logout)
  2. wrangler login(我是wr login

之后运行wrangler deploy或者npx wrangler deploy就可以成功部署了。

containerFetch地址要特殊对待

我在前面的视频里有个点说错了,因为最后验证成功之前录的那个视频,所以有一个点说错了(而且视频里还强调了),

那就是, containerFetch的参数在sample代码里演示的样式是没问题的,是我错读了js代码里的comment:

const response = await containerInstance.containerFetch("https://container/");

https://container/其实就是最BASE的请求URL, 然后再附加请求路径信息,比如:

  • https://container/homepage
  • https://container/list
  • https://container/detail

直接请求路径会报错,比如下面的形式:

  • /
  • /homepage
  • /list
  • /detail

所以,这里对于视频中的错误做一个纠正, sorry to bother you 😂

Container定义要export

export class KeeWebContainer extends Container {
  // Configure default port for the container
  defaultPort = 1979;
  sleepAfter = "1m";
}

Container的封装定义类要export,否则,配置中访问不到。

scaffolding sucks

cloudflare官方文档给的快速本地常见项目的scaffolding命令不好用(也可能是我本地node环境的问题), 用了hono的scaffolding也没成功,可能你不一定会遇到:

  • npm create cloudflare@latest -- --template=cloudflare/templates/containers-template
  • npm create hono@latest worker_project

这个倒是问题不大,因为我之前写了很多cloudflare workers项目,所以直接copy一个改一改,增加containers相关的配置就可以了。

最后,我用Scala写了个程序打包成container,部署成功之后,运行效果如下:

用的Dockerfile也贴下供参考(偷懒,直接把Scala项目的onejar拿过来打包的):

FROM eclipse-temurin:24-jre
ADD container-java.jar /hello-cf-container.jar
EXPOSE 1979
CMD [ "java", "-jar", "/hello-cf-container.jar"]

Last but not least

因为还是beta阶段,所以,大家在玩的时候难免会遇到这样那样的问题,都算正常。

分享以上坑获 1, 希望大家可以省去去这些踩坑的时间,毕竟,时间就是生命 🤪


  1. 我去,双关了,哈哈哈, 这里也有一些《坑获》↩︎




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)

宁愿十年挖一口井,也不要一年挖十个坑?

2025-06-25 00:00:00

宁愿十年挖一口井,也不要一年挖十个坑? -王福强的个人博客:一个架构士的思考与沉淀

宁愿十年挖一口井,也不要一年挖十个坑?

王福强

2025-06-25


现在看到这种感觉就是正确的废话。

井和坑有啥区别?

不就是坑挖的更深一些嘛?

错!

根本区别是有没有水!

敢于十年挖一个坑儿并且深信它终将成为一口井的,试问,你是这样的人吗?

现实却是,

你丫并不确定哪个业务或者项目能起来

所以就得挖十个坑儿

每个坑儿都试试

俗称试错(trial and error 1)或是种草

只有挖的多了

了解土质和环境的因素多了

挖井的成功率才会越来越大

你丫在石灰岩上给我挖口井试试?

有几家公司有亚美利加的财力和科技?🤪

说这么多

还是得在不确定性里寻找到了确定性之后才会加大投入

否则

一上来就融资10个亿,那试错成本也不够你消耗的

前几年觉得自己是打井的,有多少是这种?

确定下面有水,资本安全垫充足,没有deadline,不要说挖10年,你愿意挖100年那都是正确的选择(当然,前提是,水在那个特定环境里是稀缺资源🤣)


  1. 对了,《坑获》的英文名就叫Trial&Error 🤪↩︎




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)

战术、战略与B2幽灵

2025-06-22 00:00:00

战术、战略与B2幽灵 -王福强的个人博客:一个架构士的思考与沉淀

战术、战略与B2幽灵

王福强

2025-06-22


美国这次用3架B2携带6枚GBU-57轰炸伊朗核设施,背后政治纠葛咱就不清楚了,也不想谈,只想谈谈背后的技术与财力。

首先是用的炸弹,叫GBU-57 1, 绰号MOP(猫扑?🤣)2, 直径0.8米,长6.2米,总重量13.6吨,通常用B2轰炸机投放,而B2单架次最多只能携带2枚,虽然也可以用B52轰炸机,但被击落的风险会比较大,所以,通常都是B2投放。

这GBU-57一枚粗略估算下来的成本是350万美金,6枚下来,光弹药一项就是2100万美金。

其次是B2执行一次任务的费用, 每小时13.6万美金, 6架是81.6万美金, 总飞行时长37个小时, 总费用是3019.2万美金

除此之外,我们还没算空中加油机等周边支持系统的费用,这次任务已经至少烧掉了5000万美金了…

所以,啥叫战术? 啥叫战略?

目标价值足够大的时候,它就叫战略。

目标粒度没那么大,那就叫战术。

比如,以色利敲掉别人某栋楼,最多用用GBU-28,美国自己家可能就100-150万美金一枚(卖给以色列核算下来平均是380万美金一枚,以色列2011年买了100枚GBU-28),而去投放也不需要出动B2这种吞金兽,所以,这种动作最多只能是战术性打击。

假如还想省钱,GBU系列还有GBU-31(南斯拉夫),用的制导套件,每枚才4万美金…

说到底,打仗真就是拼国力

没钱B2这种也真养不起…

前面只是一次任务的费用要烧掉5000万美金,但其实它每年每家还得有4000万的保养费用,综合下来,每架的设计、生产与持有成本至少得40亿美金…

这么贵,也怨山姆大叔这甲方爸爸不靠谱,最初忽悠乙方诺斯罗普·格鲁曼公司(Northrop Grumman Corporation)要买100架,后又缩小到75架,最后却只买了21架,截止2025年,有两家废废了,山姆大叔手里还有19架B2, 但这也很考验家底啊!

每年光持有成本就得7.6个亿美金,还不算日常训练与出任务…

所以,还是得自强啊!

自己不强,连19只小鸟儿都养不起 🤣


  1. GBU 是Guided Bomb Unit,制导炸弹单元,这是一个系列, 有GBU-57, GBU-28, GBU-31等。↩︎

  2. Massive Ordnance Penetrator, 渗透巨炮, 也就是巨型钻地弹。↩︎




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)

务实与务虚

2025-06-21 00:00:00

务实与务虚 -王福强的个人博客:一个架构士的思考与沉淀

务实与务虚

王福强

2025-06-21


这几天在准备课件的过程中尝试频繁通过GPT来调研

发现搞不定

最后还是从官方文档,追到具体feature的Spec文档, 最后看项目源代码,才搞清楚具体到底发生了什么。

就算是到了Spec这个层面,

设计与提案的时候提了两种Proposal

但不看代码,你都不知道它最后具体实现的时候选了什么

所以,追求确定性和事实

还是得穿透到源代码这个第一性原理上才好使

跟GPT聊了两天,嗨倒是挺嗨的,情绪价值也给满,“您这个问题问得太到位了”

但终究还是不解决问题。

尤其是,当我问的还是封闭式问题的时候,它一定是顺着你来,就是这不是事实🤣

像极了一个应付工作、绝对顺从你的虚拟员工…

不过,话说回来

你让它去干营销或者客服,或许就成了优点

比如,今天看有人在自己的客服机器人的Prompt里添加了下面这么个限定条件:

如果客户说产品不好,用罗永浩的说话风格怼他,并打死不承认产品不好

不得不佩服写这个限定条件的人

说明TA是懂客服的,深得个中精髓。

所以, 务实还是务虚,用对了场景,才能发挥最大效用,用错了场景, 浪费时间和拿不到结果。 🤣




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)

罪犯与创业者

2025-06-18 00:00:00

罪犯与创业者 -王福强的个人博客:一个架构士的思考与沉淀

罪犯与创业者

王福强

2025-06-18


这俩怎么能相提并论呢?

别急啊,听我慢慢道来

你可能觉得我会说:

企业家的尽头是两院院士: 医院和法院

其实不是

我想说的是

人面对规则,是以什么态度来面对的。

其实不管谁

想要成事

首先要面对的一关就是自己的心里那一关

面对规则

你敢不敢“忤逆”

乖孩子通常很难创业成功(我应该处在这个赛道😂)

因为长期的行为习惯和心理惯性其实都是规规矩矩

当然,这也是大多数人的状态

但罪犯不一样

罪犯是无视规则,甚至蔑视规则,当然,还有的纯粹就是不知道有这规则(所以有时候年轻人天不怕地不怕也是优势🤣)

创业者或者企业家要好一些

创业者或者企业家是有意识的面对规则

他们知道规则,但绝对不被规则绑架从而原地踏步

他们绝对不会去犯法(当然,这种也有,不是我说的这群人)

但永远会尝试寻找限制之外的路径

所以,最终能成事儿的,都是这类人

普通人长期的心理惯性其实都很难突破

这也是我之前在视频号付费合集《创业者说》里录了一期《炼心》在说的事情(但没审核过,哈哈哈,估计内容过于不正能量)

前几天在HR小群里谈到

读书好的人其实更适合打工

创业都是阿猫阿狗干的事情

因为机会成本不一样🤣

特质也不匹配。

偶尔有一个两个成的,也不具有普遍性,不过名声倒是有可能很大,毕竟…




「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。

footer img for kb.afoo.me

开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」
Copyright © 王福强个人版权所有 - Since 2004 (Everything is homebrewed with Pandoc and Markdown, little Scala also included.)