<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zongsoft on Zongsoft · Blog</title><link>https://zongsoft.com/blog/</link><description>Recent content in Zongsoft on Zongsoft · Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 14 Sep 2026 07:49:27 +0800</lastBuildDate><atom:link href="https://zongsoft.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 Hugo 与 GitHub Actions 搭建博客站点</title><link>https://zongsoft.com/blog/zh-cn/misc/hugo-github-actions/</link><pubDate>Mon, 14 Sep 2026 07:49:27 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/misc/hugo-github-actions/</guid><description>&lt;h2 id="写作与发布分开"&gt;写作与发布分开&lt;/h2&gt;&#10;&lt;p&gt;这个博客使用 &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; 生成静态页面，通过 &lt;a href="https://github.com/features/actions"&gt;GitHub Actions&lt;/a&gt; 自动构建，最后发布到 &lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;。官网和博客共用一个仓库、一个自定义域名。&lt;/p&gt;&#10;&lt;p&gt;日常写作只需要编辑 Markdown 和图片，然后提交到 GitHub。构建工具的版本、主题和配置都在仓库中，家里和公司的电脑使用同一套文件。只改文字时，可以直接使用 GitHub 网页编辑器；需要查看完整排版时，再启动本地预览。&lt;/p&gt;</description></item><item><title>模型只是 CPU，插件运行时才是 Agent 的操作系统：从 DeepSeek Harness 到 Zongsoft</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/agent-os-everything-is-a-plugin/</link><pubDate>Sat, 15 Aug 2026 23:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/agent-os-everything-is-a-plugin/</guid><description>&lt;p&gt;&lt;img src="https://zongsoft.com/blog/images/agent-os-hero.png" alt="由可插拔模块组成的 Agent 运行时"&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;导读&lt;/strong&gt;：DeepSeek Harness（DSH）开源后，“一切皆插件”成了 AI Agent 圈最热的口号。但口号人人会说，机制决定生死。本文不写“DSH 很厉害”的观后感，而是翻开它的真实组合清单与源码，把“一切皆插件”拆成插件运行时必须回答的&lt;strong&gt;五个底层问题&lt;/strong&gt;——能力坐标、依赖激活、效果撤回、组合形态、自省演化。&lt;/p&gt;</description></item><item><title>平滑的加权轮询均衡算法</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/smooth-weighted-round-robin-balancing/</link><pubDate>Thu, 15 Sep 2022 00:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/smooth-weighted-round-robin-balancing/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;在反向代理、路由、分布式应用调度等场景中通常都需要用到负载均衡算法，负载均衡的关键要点是“&lt;strong&gt;均衡&lt;/strong&gt;”，即确保调用请求能均衡的落到多个处理节点上，负载均衡算法一般使用随机或轮询都可以保证均衡性。&lt;/p&gt;</description></item><item><title>Zongsoft.Data 发布公告</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/announcing-data-engine/</link><pubDate>Tue, 19 Nov 2019 00:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/announcing-data-engine/</guid><description>&lt;h1 id="zongsoftdata-发布公告"&gt;Zongsoft.Data 发布公告&lt;/h1&gt;&#10;&lt;p&gt;很高兴我们的 &lt;strong&gt;ORM&lt;/strong&gt; 数据访问框架(&lt;a href="https://github.com/Zongsoft/framework/tree/main/Zongsoft.Data"&gt;&lt;strong&gt;&lt;em&gt;Zongsoft.Data&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;)在历经两个 &lt;strong&gt;SaaS&lt;/strong&gt; 产品的应用之后，今天正式宣布对外推广！&#10;这是一个类 &lt;a href="https://graphql.cn/"&gt;&lt;strong&gt;GraphQL&lt;/strong&gt;&lt;/a&gt; 风格的 &lt;strong&gt;ORM&lt;/strong&gt;(&lt;strong&gt;O&lt;/strong&gt;bject/&lt;strong&gt;R&lt;/strong&gt;elational &lt;strong&gt;M&lt;/strong&gt;apping) 数据访问框架。&lt;/p&gt;&#10;&lt;p&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="又一个轮子"&gt;又一个轮子？&lt;/h2&gt;&#10;&lt;p&gt;在很长时间里，&lt;strong&gt;.NET&lt;/strong&gt; 阵营似乎一直缺乏一个被普遍使用的 &lt;strong&gt;ORM&lt;/strong&gt; 数据访问框架，从最早的原生 &lt;strong&gt;ADO.NET&lt;/strong&gt; 到舶来品 &lt;strong&gt;iBatis.NET&lt;/strong&gt; 和 &lt;strong&gt;Hibernate.NET&lt;/strong&gt;，后来又经历了 &lt;strong&gt;Linq for SQL&lt;/strong&gt; 与 &lt;strong&gt;E&lt;/strong&gt;ntity &lt;strong&gt;F&lt;/strong&gt;ramework 的混战，可能是因为 &lt;strong&gt;E&lt;/strong&gt;ntity &lt;strong&gt;F&lt;/strong&gt;ramework 早期版本的模糊定位和反复变更的设计导致了它失之霸主之位，进而造就了一段百舸争流、群雄共逐的战国时代。在历经漫长而反复的期待、失望、纠结和痛苦之后，我终于决定动手造一个轮子。&lt;/p&gt;</description></item><item><title>关于 IIS Express 常用设置</title><link>https://zongsoft.com/blog/zh-cn/misc/iis-express/</link><pubDate>Wed, 01 May 2019 19:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/misc/iis-express/</guid><description>&lt;h1 id="关于-iis-express-常用设置"&gt;关于 IIS Express 常用设置&lt;/h1&gt;&#10;&lt;p&gt;&lt;a name="site-binding"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="站点绑定"&gt;站点绑定&lt;/h2&gt;&#10;&lt;p&gt;IIS Express Web 服务器默认只绑定了 &lt;code&gt;localhost&lt;/code&gt; 的主机名，这就意味着无法通过内网或其他自定义域名进行访问，可通过如下操作添加其他绑定。&lt;br /&gt;&#10;&lt;br /&gt;在Web宿主项目中的 &lt;strong&gt;.vs&lt;/strong&gt; 目录中的 &lt;strong&gt;config&lt;/strong&gt; 子目录中，有名为“&lt;strong&gt;applicationhost.config&lt;/strong&gt;”配置文件，打开它后，找到如下节点：&lt;/p&gt;</description></item><item><title>代码失控与状态机（下）</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/coding-outcontrol-statemachine-2/</link><pubDate>Mon, 03 Sep 2018 18:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/coding-outcontrol-statemachine-2/</guid><description>&lt;h2 id="序言"&gt;序言&lt;/h2&gt;&#10;&lt;p&gt;在&lt;a href="https://zongsoft.github.io/blog/zh-cn/zongsoft/coding-outcontrol-statemachine-1"&gt;《代码失控与状态机（上）》&lt;/a&gt;的文末，我们留了一个解析「成员访问表达式」的“作业”，那么，通过本文我们一起来完成这个作业。&lt;/p&gt;&#10;&lt;p&gt;首先，为什么要苦哈哈的写一个这样看上去没什么用的解析器？因为在某些 IoC 或 AOP 容器中*（不幸的是我需要实现一个这样的* IoC &lt;em&gt;容器）&lt;/em&gt;，常需要动态求解成员访问表达式的值，而解析表达式就是第一步。其实这个“作业”正是编译器技术中词法解析的简化版，自己手动撸一遍，对理解《编译原理》的前端处理技巧是一个很好的入门练手。&lt;/p&gt;</description></item><item><title>代码失控与状态机（上）</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/coding-outcontrol-statemachine-1/</link><pubDate>Sun, 05 Aug 2018 19:20:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/coding-outcontrol-statemachine-1/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;前几天和某某同学吃饭席间，他聊到每当要修改老项目中自己写的代码时就痛苦不堪，问我是不是也有同感。我觉得这应该是不少程序猿的心声，之所以会这样，大致有两个主因：&lt;/p&gt;</description></item><item><title>实体类的动态生成（三）</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-3/</link><pubDate>Tue, 17 Jul 2018 00:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-3/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;在 .NET 中主要有两种动态生成并编译的方式，一种是通过 &lt;code&gt;System.Linq.Expressions&lt;/code&gt; 命名空间中的 &lt;code&gt;LambdaExpression&lt;/code&gt; 类的 &lt;code&gt;CompileToMethod(...)&lt;/code&gt; 方法，但是这种方法只支持动态编译到静态方法，因为这个限制我们只能放弃它而采用 Emitting 生成编译方案，虽然 Emitting 方案强大但是实现起来麻烦不少，必须要手动处理底层 IL 的各种细节，脑补一些 C# 编译器的实现机理，同时还要了解一些基本的 &lt;strong&gt;IL&lt;/strong&gt;(&lt;span data-type="color" style="color:rgb(51, 51, 51)"&gt;&lt;span data-type="background" style="background-color:rgb(255, 255, 255)"&gt;&lt;strong&gt;I&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-type="color" style="color:rgb(51, 51, 51)"&gt;&lt;span data-type="background" style="background-color:rgb(255, 255, 255)"&gt;ntermediate &lt;/span&gt;&lt;/span&gt;&lt;span data-type="color" style="color:rgb(51, 51, 51)"&gt;&lt;span data-type="background" style="background-color:rgb(255, 255, 255)"&gt;&lt;strong&gt;L&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-type="color" style="color:rgb(51, 51, 51)"&gt;&lt;span data-type="background" style="background-color:rgb(255, 255, 255)"&gt;anguage&lt;/span&gt;&lt;/span&gt;) 和 &lt;strong&gt;CLR&lt;/strong&gt;(JVM) 执行方面的知识。&lt;/p&gt;</description></item><item><title>实体类的动态生成（二）</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-2/</link><pubDate>Mon, 16 Jul 2018 00:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-2/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;由于采用字典的方式来保存属性变更值的底层设计思想，导致了性能问题，虽然.NET的字典实现已经很高效了，但相对于直接读写字段的方式而言依然有巨大的性能差距，同时也会导致对属性的读写过程中产生不必要的装箱和拆箱。&#10;那么这次我们就来彻底解决这个问题，同时还要解决“&lt;strong&gt;哪些属性发生过变更&lt;/strong&gt;”、“&lt;strong&gt;获取变更的属性集&lt;/strong&gt;”这些功能特性，所以我们先把接口定义出来，以便后续问题讲解。&lt;/p&gt;</description></item><item><title>实体类的动态生成（一）</title><link>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-1/</link><pubDate>Sun, 15 Jul 2018 00:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/zongsoft/entity-dynamic-generation-1/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;在应用开发中，通常都会涉及各种 POJO/POCO 实体类（DO, DTO, BO, VO）的编写，有时这些实体类还需要实现 &lt;code&gt;INotifyPropertyChanged&lt;/code&gt; 接口以支持属性变更通知，一般我们都会手写这些代码或者通过工具根据数据库表定义抑或别的什么模板、映射文件之类的来静态生成它们。&#10;但是，在业务实现中往往伴随着诸如“&lt;strong&gt;如何简单且高效的获取某个实体实例有哪些属性发生过变更？&lt;/strong&gt;”、“&lt;strong&gt;变更后的值是什么？&lt;/strong&gt;”这样的问题，而大致的解决方法有：&lt;/p&gt;</description></item><item><title>使用 Hexo 与 Archer 主题搭建 GitHub Pages 博客</title><link>https://zongsoft.com/blog/zh-cn/misc/hexo-archer-github-pages/</link><pubDate>Tue, 10 Jul 2018 18:00:00 +0800</pubDate><guid>https://zongsoft.com/blog/zh-cn/misc/hexo-archer-github-pages/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;本文保留 2018 年的 Hexo 建站记录，涉及的目录和配置为当时版本。本站现已改用 Hugo，当前流程请参阅&lt;a href="https://zongsoft.com/blog/zh-cn/misc/hugo-github-actions/"&gt;《使用 Hugo 与 GitHub Actions 搭建博客站点》&lt;/a&gt;。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="前言"&gt;前言&lt;/h2&gt;&#10;&lt;p&gt;很多人都有搭建博客或知识库站点的想法，可自己买云服务器太不划算，部署管理也是个问题；基于免费又热门的 &lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt; 来搭建博客站点倒是省钱省力省事的好办法，于是上网一搜，满屏都是关于使用 Jekyll 来搭建站点的文章，这个 Jekyll 是基于 Ruby 开发的，上手得先装一大坨东西、各种啰嗦各种坑，看的一点欲望都没有了。&lt;/p&gt;</description></item><item><title>文章归档</title><link>https://zongsoft.com/blog/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://zongsoft.com/blog/archives/</guid><description/></item></channel></rss>