普通视图

Received yesterday — 2026年6月15日

有些个人博客屏蔽海外IP访问,是不是懒?

作者崔话记
2026年6月15日 00:00

缘由

  访问一些个人博客网站时,时不时遇到提示禁止访问,或者有些是能够打开第一个页面,再打开另一个页面就提示禁止访问,只因我有时候启用了代理。遇到这种情况时,总会令我感到不适。有时候我回给站长发个邮件反馈一下,有时候就默默关掉网页,拉黑网址。

  我理解个人站长面对爬虫、攻击、垃圾评论和有限预算时的无奈。对很多小站而言,屏蔽境外IP确实是一种成本最低、见效最快的方案。但也让一部分真实读者如海外华人、旅行中的用户、跨境网络环境中的访问者等被一起挡在门外。

  我始终认为,博客就应该注重开放、分享、交流的精神。问题并不在于该不该防,而在于是否存在更细粒度的方式,可能比一刀切更友好。

应对之道

  我所想到的办法,大概有以下几个方面。

1. 用好CDN

  常见的诸如:静态资源缓存、HTML页面缓存、RSS结果缓存。我通过CloudFlare的缓存配置,基本上80%的访问流量都能命中缓存,而不用走到源服务器。

2. 动态页面缓存

  动态博客最怕每次访问都跑数据库,一个优化办法就是生成静态缓存,对服务器压力有很大的改善效果,WP/TP都有这方面的插件。

3. 图片压缩

  我友链里面有些网站,一个LOGO图片就大几百KB,我都惊呆了,所以我一律自己压缩替换了,几乎没有10KB以上的,缩减几倍至几十倍。图床或CDN可能有自动优化图片的功能,如果没有,那就自己后台对图片进行压缩。

4. 限速

  其实你需要的不是封国家和地区,而是封异常行为。例如针对同一IP,1分钟限制100个请求,超过限制,就可以请求机器人验证或者暂停访问一段时间。

5. 人机验证

  就是很多人熟悉的“我不是机器人(I'm not a robot)”页面。主要针对高频访问,奇奇怪怪的User-Agent等。可以使用诸如Cloudflare Turnstile的服务。

6. 妥善配置robots.txt

  现在博客最耗资源的往往不是 Google,而是各种AI爬虫、自动镜像采集程序,妥善配置robots.txt可以防一部分君子爬虫,最好也配置WAF拦截已知Bot。不过一个个配置挺麻烦的,CF提供的一键配置就很方便了。

7. 评论系统防护

  垃圾评论是老问题,也是可以通过技术手段优化,大大减少垃圾评论。比如改变普通的<form>表单提交评论的方式,改为根据交互用js/ajax提交。评论内容的垃圾判断,如果简单的关键字过滤不够用,可以用更高级的ai识别,我记得obaby就发过ai垃圾评论识别插件。我个人不推荐无条件的评论审核,更不赞同关闭评论。

8. 用静态博客

  能够舍弃一部分灵活性,就可以改用静态博客,如果再把静态博客部署与免费平台上(诸如Github),那就省钱又省心了。缺点就是国内这样的赛博菩萨比较稀缺,貌似腾讯有个EdgeOne。静态博客要加入评论功能也不难,有现成的第三方评论服务如Waline、Valine等。

总结

  GeoIP封锁当然有效,因为它简单。但简单不一定是最优解。今天的CDN、WAF、缓存、限流和评论风控等技术手段,已经足以让很多个人博客在不封锁境外访问的情况下,维持可接受的安全与成本。

  与其把问题定义为海外IP风险更高,不如把目标重新定义成如何更精准地识别异常流量,而不误伤正常读者。

  如果一个博客最终只能被正确国家的人看到,那么它也部分失去了互联网分享的意义。我希望站长能够能者多劳,多花一点点精力,给读者多一点点便利。

修理工,修理工!

作者obaby
2026年6月15日 09:44

昨天晚上,对象带着宝子小小区广场跳绳了。我留下来,刷碗收拾下东西。刚收拾好坐到电脑边,一阵急促的手机铃声想起,看了一下是宝子的儿童手表打过来的。

『咋啦?』我问。

『帮我把自行车,跟两轮的滑板车拿下来吧?』

『好的。』挂断电话,去阳台准备搬自行车和滑板车。自行车的轮胎没气了,找出打气筒,吭哧吭哧打好气。刚要拖滑板车,忽然想起来,这一次性带这么多车子干嘛?

再次打电话过去问,得到确切答复之后,把两个车子搬到门口。既然要下去,不如把跳绳一起带上。

一只手提自行车,一只手抓滑板车加跳绳。趁着猫咪还没反应过来,赶紧开门钻出去,以迅雷不及掩耳盗铃响叮当之势关上门。提着东西下楼,这时候忽然想到了苏轼的:左牵黄,右擎苍。虽然意境没苏轼的庞大,但是,力气不见得比苏轼描写的逊色。

下楼之后,就可以骑到小广场了。左手扶住车把,右手扶着滑板车,就这样把车子骑到了小广场。

这时候才知道,原来还滑板车送人了,送给了宝子同学的妹妹,也算是物尽其用了。小朋友很喜欢这个新的滑板车,她妈妈扶着跑了两圈,竟然能自己在上面滑行了。

下楼的时候,换了瑜伽裤。顺便带上了耳机,毕竟,在户外也不能一边跳一边看中央台的美食节目了。把手机放到腰后面的口袋里,尺寸刚刚好,拉上拉链也不会晃动。看了下手机,今天一共就走了2000步,为了完成一万步的目标,至少要跳八千个。

看宝子们在广场上开始玩,退到广场边上,开始跳绳。

五百,一千,一千五,两千……感觉也挺快的,就在这时候,忽然感觉什么东西飞了出去,手上的力道也忽然轻了很多。

这时候才发现,跳绳的球子已经有一个不知踪迹了。宝子同学妈妈,帮忙给捡起递过来,看了一下,里面的塑料完全断掉了。

对象说,你用宝子的跳绳吧。拿过来跳了三百个,速度实在是太慢了。跳了会儿,耳机又掉了一个。对象问,你这啥啊?咋还一直掉装备呢。

稍微走神就打断了,每次最多也就跳一百个,这要跳六千个得跳到猴年马月。

回家拿到另外一套跳绳,回到广场继续跳。等他们准备回家的时候,自己还差两千个才到八千,只好回家继续跳。

终于跳到八千之后,稍微休息一下,准备修理下那个坏掉的跳绳。

此时对象已经跟售后联系了,最终同意补发一套,毕竟这个新的一共用了一个来月,这就坏了,的确有点让人难以接受,毕竟上一个用到不好用了累计跳了90万个。这个,到现在才不过几万个。

至于构造什么的,其实也没那么复杂。上次那个粉色的坏了之后,是对象拆开的,发现竟然真的能修,这个断掉了,仔细观察发现跟那个粉色的区别在于这个不是螺丝固定的。但是,塑料断了,直接打个孔用螺丝固定应该也可以可以的。

说干就干,拆开。

把轴承套上去之后,发现打孔固定完全是可以的。

直接钻孔开干。

直接上螺丝固定:

最后一步就是把那个磁铁粘回去,不然计数就不好用啦。

用壁纸刀修理下后边的热熔胶:

重新装回去,满血复活啦。

姐姐我真特娘的是个人才。

只是每当自己去干点什么是亲哥时候,脑子里总是会不断的出现《帝国时代》里面的那个声音:『伐木工,伐木工。矿工,矿工……』

只是,此时脑袋里的声音变成了:

『修理工,修理工……』

Received before yesterday

LangGraph开篇

2026年3月24日 00:00

持续更新中

1.概述

LangChain就像一条流水线,对于一步接着一步的任务,用LangChain链式调用可以完美实现,但是很多任务很复杂,并不是一条直线完成的,需要根据各种条件走各种分支,这种复杂任务如果使用LangChain来编程实现,步骤就会很复杂,需要很多的if else判断。

当然解决这个问题还可以通过将任务做成多Agent,让Agent多次推理和决策并执行某个分支,但是这样消耗时间和token都很多,而且这个过程中智能体就是一个黑盒,不可控,不知道得推理多少次,也不知道内部是怎么执行的,过程难以监控和干预,这样一来这种复杂任务LangChain就不适用了,就可以使用LangGraph来实现。

LangGraph是基于LangChain构建的,面向智能体的可实现多轮交互、状态持久化和分支并行执行的图结构工作流框架,是LangChain的高级编排工具,LangGraph中,无论图结构有多复杂,单个任务的执行仍然是线性的,单个任务背后依然是依靠LangChain的链式执行实现的。

LangGraph(图) = 状态(State) + 节点(Node) + 边(Edge)

LangGraph将工作流程抽象为一种的有向图结构,LangGraph的图结构比LangChain的链结构,更加适合这种多分支复杂任务,具体表现为:

  1. LangGraph提供了强大的状态管理控制,允许Agent在不同节点之间传递和维护信息,实现长期记忆和多轮对话能力,通过定义节点和边,可以精确控制Agent执行逻辑,包括条件分支,循环等。

  2. LangGraph能够无缝集成各种外部工具(搜索引擎,数据库,API等),让Agent能够实时获取信息,执行特定操作,拓展了LLM的能力边界。

  3. LangGraph使得Agent的运行路径清晰可见,便于理解Agent的决策过程,出现问题易于定位和调试

  4. LangGraph使得模块具有可复用性,各个节点都是独立的,可复用的组件,维护性高,易于拓展,还能通过子图机制将复杂的工作流拆解为多个可独立开发和测试的模块,提高开发测试效率。

2.快速开始

基于Python 3.12.x

pip install -U  langgraph

基于Graph API定义一个流程

from typing import TypedDictfrom langgraph.constants import STARTfrom langgraph.constants import ENDfrom langgraph.graph import StateGraph# 状态类class DemoState(TypedDict):    name: str    greeting: str# 节点def name(state: DemoState) -> dict:    new_name = f"Hello, { state['name'] }"    state['name'] = new_name    print(new_name)    return state# 节点def greeting(state: DemoState) -> dict:    new_greeting = f" Hi { state['greeting'] }"    state['greeting'] = new_greeting    print(new_greeting)    return stateif __name__ == "__main__":    graph = StateGraph(DemoState)    graph.add_node('name', name)    graph.add_node('greeting', greeting)    graph.add_edge(START, 'name')    graph.add_edge('name', 'greeting')    graph.add_edge('greeting', END)    app = graph.compile()    res = app.invoke({'name':'lzj', 'greeting':'hello'})    print(res)
Hello, lzj Hi hello{'name': 'Hello, lzj', 'greeting': ' Hi hello'}

LangGraph可以通过实现可视化

pip install grandalf
#... ...app = graph.compile()app.get_graph().print_ascii()
+-----------+  | __start__ |  +-----------+        *              *              *          +------+       | name |       +------+           *              *              *        +----------+   | greeting |   +----------+         *              *              *         +---------+    | __end__ |    +---------+ 

《给阿嬷的情书》值得细品

作者崔话记
2026年6月13日 00:00

  距离首次观看《给阿嬷的情书》,已近一个月,迟迟没有在博客上写下感受,只因这个片子给我的触动大而复杂,使得我无法聚焦,不知道该从哪一点说起。今天高低写几个字,东拉西扯也罢,算是强制自己写一份作业也好。

  见识多了自己或他人的悲欢离合,就会不以物喜、不以己悲,落泪感动的时刻就越来越少了。今次这个电影却令我几度落泪,泣不成声,出了影院,绕着外面的人行道缓缓踱了十分钟,才平复了情绪。我知道,许多人看了这个电影都哭了,我也只是普通的之一,说明人类的感情都是想通的吧。因为时间过去这么久,已经不完全记得在哪些地方流泪了,大概有:监狱读信、侨批局寄信、南枝失父、南枝认出淑柔、淑柔接过木生灵牌等处。

  虽然片名叫《给阿嬷的情书》,但剧中的书信在严格意义上未必称得上是情书,狭义的情书是男女双方的爱情表达,而该剧里的并不是,或者说大部分不是,更多偏普通家书,道些家长里短,生活近况。剧中书信只是穿起珍珠的细线,把全剧故事完美串起来,让观影者得以循线前行。

  这个片子之所以给我这么触动,除了剧中情节令我感动,更有一些隐约的共鸣,联想到自己的亲历和见闻,没有什么大事件,多是些碎片。

碎片一 木生

  男主名叫木生,而我的一位大学舍友正好也叫木生,听到男主名字,立即就想到了我这位舍友。男主妻子叫淑柔,男主刚问得她名字的时候就夸她名字好听。花草果木、美玉珍宝、品德仪态,都是女性起名常用意象,不过现代女性似乎并不喜欢德行用字了,贤良淑德有时候被视为旧社会教条、对女性的规训压迫,从而不喜欢在自己的名字里用这些字。

碎片二 方言

  片中的语言是潮汕方言,我虽不能听懂,却也颇感亲切。我之前在闽南生活过十来年,对闽南语能听懂一部分词汇,听不懂的也会感到亲切,片中方言与闽南语有许多共同之处,比如都称书信为批,自然会有一种浅浅的熟悉感。

碎片三 书信

  在前电子时代,出远门的人牵挂家中老小,便要定期书信回家,使家人得知自己平安。新到一个地方之后,要立刻写一封家书报平安,也就是影片中的平安批,就像我初到福建上大学,安顿之后也是马上写信回家。车马慢的年代,长期没有音信,家里人会担心可能有什么意外了,便会托熟人代为打听消息,也有不少人一辈子杳无音讯。剧情中只展示了少量几份信件内容,但淑柔阁楼上的箱子里满满的都是信件,可见每年得有好几封。

碎片四 照相

  拍照以前不叫拍照,叫照相,是个大事,得专门去照相馆,郑重程度堪比现在的毕业照和婚纱照。木生让淑柔寄相片,淑柔和孩子在进城照相的前一个晚上激动得睡不着觉,天没亮就出发了。木生舍不得花钱照相,去蹭学生们的合影。我小学毕业前,在家里只见过一张一寸的黑白小照片,大的或者彩色的照片,只在表哥家见过,有个大表哥在外地当兵,拍了好多张在部队的照片寄回家。我最早拍照片就是小学毕业照,下一次拍照是初中毕业照。拍照自由,是大学毕业以后好几年了,这时候手机拍照已经比较普及了。

碎片五 果断

  淑柔这样的人,是我崇拜的人,准确说,我是崇拜这样做事风格的人,多数人做不到,我也做不到。她看准了木生,就果断私奔,遇到抓壮丁,果断支持木生出海,没有哭哭啼啼,误会木生成立新家时,果断搬家断联,得知是误会时,立即决定坐飞机去与对方见面,还要还钱。在她的头脑里,似乎永远不存在选择困难,并且她不是冲动决策、事后懊恼,而是始终有她内心坚定的原则。

碎片六 节俭与大方

  节俭与大方,在老一辈人的身上总是能够融为一体。到暹罗时,木生不舍得多花一分钱在自己的吃喝,却攒下所有的钱寄给老婆。南枝父女的旅馆已被烧毁,木生出狱后的第一大笔钱就全留给了南枝。我想起我自己的父母,也是那种对自己抠每一分钱的人,路上有个纸壳或瓶子也要捡回去,平时也不常买肉吃,不买新衣服,但是遇到子女办事需要用钱,他们二话不说就拿出十万二十万来。

碎片七 淑柔吾妻

  片中最嵌入脑海的四个字,我个人感觉,莫过于“淑柔吾妻”这四个字了,单单这几个字,不需要其他语言,就已经饱含情感了,使我一下子联想起中学读过的“意映卿卿如晤”。以前给喜欢的异性写信,也会在称呼问题上,仔细斟酌,却不明白,其实情谊不到,称呼什么都没多大用,情谊到了,简简单单的称呼也尽显亲密。


  不扯了不扯了,反正我脑子里没有什么宏大的叙事,都是些鸡毛蒜皮。

手机屏幕坏了,体验了一次上门维修

作者崔话记
2026年6月12日 00:00

  我现在的手机,是5年前买的小米11u,半年前换了电池,半个多月前屏幕又出故障了,正中间出现一条亮线,可能是排线老化松脱了吧。这条亮线,使得屏幕指纹也不灵敏了。

  起初想着得找个时间到华强北修,但不够空闲,加上拖拖拉拉懒得动,前阵子经常下雨,有一天周六正准备出门去修了,很快又下了雨,于是作罢。

  到美团搜了那种能够上门修手机的服务,报价都比较高。问的第一家说,不带指纹的屏299,带指纹的屏699,有几家不给当场报价的我就不理会了,有报价的基本上不低于300。好嘛,这旧手机还值得这么贵修吗?不是出不起,就是感觉不值。

  基于省钱的目的,我想先买个二手屏,再自己换或者拿到附近店里换。于是在咸鱼买了个二手屏幕总成,带指纹,100块,符合我的心理价位。问了下公司附近一家维修店,帮我换屏多少钱,老板开价200,拉倒。也看了一下网上的换屏的视频,感觉不是自己能够搞定的。

  又在美团搜上门修手机的,找到一家报价99的,于是达成,约好当天晚上过来。维修师傅是个年轻小伙子,看起来二十几岁,进门马上就开始干活了。但这个11u貌似还不那么好拆,或者小伙子的手艺还不够熟,反正捣鼓了大半个小时才算装完。试了一下,功能都挺正常,再扛一年问题不大。

  维修期间,和维修师傅闲聊了几句,他们这个业务模式,和很多服务到家的模式一样,平台接单,然后派单到个体维修师,平台抽成30%。其中有些头脑活的,就自己做自媒体获客,抽成省下来是一大笔。

  现在各行各业,但凡靠劳动吃饭、靠平台或渠道接单的,都要被平台或渠道大比例抽成,有能力的话,尽量自己有一个获客渠道才好,既然摆摊,就得吆喝。

缘分

作者obaby
2026年6月8日 13:28

周六是对象生日,作为生日礼物购买的mbn,当初自己还怕生日之前到不了。那个粉色的高配版已经断货了,买的时候显示的是采购中,预计6.9号到货。自己甚至都想好了备用方案,那就是直接打印一张彩色订单在生日那天送出去,也算是有个交代。

幸运的是,二手东的采购还是挺快的,竟然提前到了,也避免了生日当天的尴尬。不过由于使用了国补,需要提前开箱验货。

至于产品体验,实际使用的并不多,安装了一些必备的app:微信、qq、wps、xcode、cursor、hbuilder等等。在买之前还怕有很强的塑料感,实际到手之后色泽感觉跟玫瑰金挺像的。

时间的尺寸的话与我现在在用的两个显示器比起来,明显小很多。

周六的安排依然是网球+钢琴,鉴于日子比较特殊,中午下课也十二点多了,也就不准备在家吃饭了。

对象说,最近烤鱼的广告挺疯癫的:『89元,吃烤鱼,吃烤鱼……』(参考《两只老虎》的调调)

89元的烤鱼的确可以考虑下,征求宝子的意见是吃烤鱼,还是老板恋上鱼。如果要吃老板,那就去乐客城,最终宝子选的还是老板。吃完饭,还是照例去楼下的宠物店溜达一圈,只是这次,我靠的有点近,门口的笼子里的两只猫咪趴在架子上睡觉。

『这两只猫咪不错唉』我说到,一边看一边往里走。多数猫咪都安静的趴在那里。

忽然听到对象说:『那只猫咪在看着你唉』,这时候我才注意到那只黄白花纹的小猫,随着我的位置,在移动他的脑袋,紧紧的看着我。

我忍不住伸手过去,小猫咪从上面的缝隙里面伸出爪子想努力的抓住我的手。

在与猫猫的小爪子接触到的瞬间,我忽然就有了把他带回家的想法。我就这么去摸这猫猫带着粉色小肉垫的小爪爪,过了会儿听到宠物店的那个姐妹说到,不要接触猫猫。

此时我也才注意到猫舍位面写的请勿触摸。但是,就在那一瞬间,自己就沦陷了。

我跟对象说:『咱们把他带走吧?』

『这么突然吗?』对象问道:『咱们还啥都没准备呢。』

『从这里买吧,反正这里啥都有。』

在这电光火石之间,就拥有了一只猫咪。宠物店的姐妹给摸了点驱虫的药,剪了剪指甲。

又采购了一堆必需品:猫粮、猫砂、小罐头、猫砂盆、猫包等等。

当然,这只三个月的小奶猫,后面还需要打疫苗,这带回家只是第一步。

回家之后,到这个陌生的环境,多少有点拘束,把电视柜旁边的柜子移走,把猫猫的猫砂盆,饭碗、水碗就安排到了这个地方。下午很长的时间都在移走的柜子附近转悠,那里明显就成了他的根据地了。不管怎么转悠,最后还是会回到那个地方。

随着时间推移,领地也开始慢慢扩大。他喜欢各种线头:电线、小绳子、扎带,每个都能玩上好长时间。

在猫猫到家之后,宝子给他取了个名字叫做饺子,这个名字来源于《如果历史是只喵》中的一个猫咪的名字。

第一天晚上,他可能视在床底下睡了一晚。周日的时候,他的活动区域已经扩大到整个屋子了。能跳上沙发,跳上床,也会在上面跑。

只是一只不怎么喜欢叫的猫猫,但是跑起来特别快,每次都在漂移甩尾,偶尔从化妆镜看到自己的时候,就会弓起身子,怒冲冲的朝镜子里的自己冲过去。冲到镜子面前也不吼不叫,瞬间又变成了温柔可爱的猫猫。

对象说,这只猫猫是不是有问题啊,怎么不会喵喵叫呢?

后来我去逗他的时候,发现也会叫,只是,不怎么喜欢叫。偶尔叫的时候,也不是喵喵的声音,但是,这些我觉得都不是什么大问题。毕竟,那么可爱,那么有缘。

猫猫的东西占了小柜子的空间之后,原来无法下降的投影仪幕布反而可以下降使用了。不过之前开发的原生的场景切换的app,长时间不用签名都过期了。既然如此,不如重新做一个,找到之前的代码,基于uni重构了一个,好处是可以跨平台用了。缺点是uni的tts合成只能走在线的,插件库里的离线tts引擎竟然都是收费的。

问题既然出现了,就要解决,并且等离线tts弄好了,可以直接扔到闺蜜圈里面,刚好解决了目前暂无语音朗读的功能。迁移之所以这么快,也得益于指令的处理逻辑都扔到了服务器上,app本身并没有指令处理逻辑。

前段时间还在等待猫咪,现在已经有了一只猫咪。

宝子说:『这只猫咪的到来,每个人都贡献了1/3。如果我不想要猫咪,我们不会去看;如果不说他在盯着看,不会去逗他;如果不逗他,就不会把他带回来。』

等待,总是有太多的不确定性。

未来,也不知道从何而来。

如果喜欢,那就去追求吧。

缘分,也只能到这里。

❌