<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>文章 on 汉德君的博客</title><link>https://www.handejun.com/posts/</link><description>Recent content in 文章 on 汉德君的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 16 Nov 2026 00:30:00 +0800</lastBuildDate><atom:link href="https://www.handejun.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>我在甘肃做了 14 年信息化，最想说的是「落地」比「先进」难十倍</title><link>https://www.handejun.com/posts/landing-harder-than-advanced/</link><pubDate>Mon, 16 Nov 2026 00:30:00 +0800</pubDate><guid>https://www.handejun.com/posts/landing-harder-than-advanced/</guid><description>先进也许只要三个月，落地往往需要三年。14 年甘肃信息化一线，从资金监管、AI 评标到统一 OA，聊聊技术之外真正难的部分。</description><content:encoded><![CDATA[<p><em>文 / 汉德君</em></p>
<p>前阵子，我受聘为甘肃政法大学电子信息专业的硕士研究生实务导师。在学院的交流会上，有年轻的同学问我：“汉老师，我们在学校学了很多前沿的架构，现在 AI 大模型这么火，如果我们去企业做信息化，是不是直接上最先进的架构就能降维打击？”</p>
<p>我看着他充满期待的眼神，就像看到了 14 年前刚毕业的自己。那天我没有讲什么高深的技术趋势，只回了他一句话：<strong>“在真实的产业环境里，把系统做‘先进’也许只要三个月，但让它真‘落地’，往往需要三年，甚至更久。”</strong></p>
<p>从兰州交大毕业这 14 年，我从写代码的极客，到创业做“陇 e 付”平台，再到后来去甘肃电气装备集团管 15 家子公司的信息化，现在在成兴科技带着百人团队做产品。我在这片黄土地上，主导过千万级的国资监管、资金内控、AI 评标等项目群。</p>
<p>见过了太多“理想很丰满，现实很骨感”的项目后，我最深的体会就是：<strong>技术的上限，往往不是由代码决定的，而是由业务、组织和人性决定的。</strong></p>
<p>今天这篇开篇文章，我不聊微服务，不聊大模型评测跑分，我想聊聊在真实的商业和国企环境里，为什么“落地”这么难。</p>
<h2 id="一所有的技术问题底层都是权力与利益的问题">一、所有的技术问题，底层都是“权力与利益”的问题</h2>
<p>很多年轻人以为，做信息化就是“把线下的流程搬到线上”。大错特错。</p>
<p>2021 年，我们集团要建“三重一大”国资监管平台和资金内控系统。从技术角度看，这难吗？不难。JAVAEE 架构、微服务、Redis 缓存，这些都是非常成熟的技术栈。真正的难点在哪？在于你要把全集团及 15 家子公司的银行账户统一管起来，要求大额资金自动报送。</p>
<p>这意味着什么？意味着集团总部的系统，要能“看透”子公司的钱袋子。</p>
<p>当时阻力极大。有人抱怨系统操作繁琐，有人说银企直连接口不稳定，还有人担心自己公司的资金被集团“抽走”。如果你只懂技术，遇到这些阻力，你会去修 Bug、优化接口；但作为一个信息化负责人，你要做的是“翻译”和“博弈”——你得跟财务部门沟通，让他们明白资金池能拿到更高的存款利率；你得跟高管沟通，解释这是合规监管的硬指标。</p>
<p><strong>先进的技术系统，如果不匹配组织内部的权力分配和利益诉求，最终只会变成一台昂贵的“数据孤岛”服务器。</strong> 落地的第一步，从来不是部署服务器，而是理顺人。</p>
<h2 id="二从实验室-demo到真实生产线的鸿沟">二、从“实验室 Demo”到“真实生产线”的鸿沟</h2>
<p>现在大家都在做 AI。我们团队研发的“AI 大模型辅助评标系统”拿了全国数据要素大赛三等奖，也落地了中油兰州石化、金川集团等大客户，在试点中评标效率提升了 50% 以上。</p>
<p>但在这背后，我们踩过的坑、填过的沟，足以写成一本书。</p>
<p>在实验室里，给大模型喂几千页标准格式的 PDF，它秒读秒懂，准确率 98%。但在真实的招投标现场呢？标书是各地、各行业打印出来的扫描件，有歪的、有糊的、有手写的，甚至还有把关键资质藏在几百页犄角旮旯里的。更别提那些恶意的围标串标，他们甚至会用暗语和同义词来规避检索。</p>
<p>面对这些，你拿什么“先进”的算法去解决？只能靠最笨的“工程化手段”。我们做了大量的数据清洗、版面分析、OCR 纠错，甚至是人工规则的兜底。我们不能只说“AI 认为这有问题”，而是要给出“AI 基于哪一页、哪一条款认为这有问题”的依据，因为最终签字负责的，依然是人类专家。</p>
<p>在复杂的工业界，客户不关心你的模型是用的 DeepSeek 还是文心一言，他们只关心：你这套系统，能不能扛住真实环境的脏数据？能不能不让系统崩溃？出了事，责任怎么界定？</p>
<p>这些“脏活累活”，就是落地的门槛。</p>
<h2 id="三在西北做数字化更需要务实的妥协精神">三、在西北做数字化，更需要“务实”的妥协精神</h2>
<p>北上广深的互联网公司可以做流量、做新概念，可以“小步快跑，试错迭代”。但在西北，在传统国企，这套打法行不通。</p>
<p>我们在建集团统一办公 OA 系统时，要求覆盖 1 万人，并且要集成 SAP、金蝶 EAS、用友 U8 等所有的业务系统。如果追求“先进”，我完全可以搞个全云端、全微服务的重构。但我们没有。我们选择了适配、集成、做统一认证网关。</p>
<p>为什么？因为对于一线员工来说，他不在乎你后台是什么神仙架构，他只在乎点开 OA，能不能一键跳转到财务系统报账，能不能在手机 APP 上批流程。</p>
<p><strong>最好的系统不是最先进的，而是最符合当下环境的。</strong> 我们接手甘肃公共资源交易 3.0 系统建设时，团队 32 个人，要在 3 个月内完成从服务门户到区块链存证的全面升级，还要拿到等保三级和密评报告。面对这种硬指标，没有任何投机取巧的空间，靠的就是技术委员会制定的严苛规范，是强制推行代码评审和 CI/CD 质量门禁。</p>
<p>这听起来一点都不“极客”，甚至有点死板。但正是这种死板的“笨功夫”，让系统在省市县三级平台实现了稳定的互联互通。去年我在招采智能工具研讨会上分享《数智赋能·全链护航》时，底气就来自于这些真实的落地数据，而不是 PPT 上的概念。</p>
<h2 id="四写在最后给青年工程师的一点建议">四、写在最后：给青年工程师的一点建议</h2>
<p>我常跟我的团队（兰州 79 人，杭州 23 人）说：不要做“PPT 架构师”，也不要沉溺于各种炫技的框架。</p>
<p>如果你去到一个企业，发现那里的业务流程一塌糊涂，那里的员工连基本的电脑操作都不熟练，那里的领导只关心“能不能解决眼下的合规问题”……请你不要抱怨。因为那里，才是你发挥技术价值的真实战场。</p>
<p>把最先进的技术，降维到最合适的应用场景里；把复杂的底层逻辑，封装成用户最简单的点按操作；在混乱的脏数据中，建立起一套可靠的系统秩序。这才是你作为一个电子信息工程师最难被 AI 替代的核心竞争力。</p>
<p>14 年过去了，我依然在跟各种系统 Bug、业务扯皮、老旧设备的兼容性打交道。但我很庆幸，我没有变成一个只会谈趋势的“看客”，而是成了一个脚踩在泥里，把代码写进黄土地的“实干家”。</p>
<p>技术永远是手段，解决问题，才是目的。</p>
]]></content:encoded></item><item><title>用 Hugo + Cloudflare Pages 搭建这个博客</title><link>https://www.handejun.com/posts/hugo-cloudflare-pages/</link><pubDate>Sun, 15 Nov 2026 11:30:00 +0800</pubDate><guid>https://www.handejun.com/posts/hugo-cloudflare-pages/</guid><description>从零到上线：Hugo 的目录结构、PaperMod 主题的常用配置，以及如何用 Cloudflare Pages 免费部署并绑定自己的域名。</description><content:encoded><![CDATA[<p>这个博客由 <a href="https://gohugo.io/">Hugo</a> 生成、托管在 <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>。整站是纯静态文件，构建在云端完成，写作和部署的体验都很轻。</p>
<p>下面是我实际使用的流程，供同样想搭个人站点的朋友参考。</p>
<h2 id="为什么选这套组合">为什么选这套组合</h2>
<ul>
<li><strong>Hugo</strong>：单个二进制文件，构建毫秒级，不需要 Node 生态也能跑；</li>
<li><strong>PaperMod</strong>：简洁、支持深色模式、自带站内搜索与目录，中文排版也不错；</li>
<li><strong>Cloudflare Pages</strong>：连上 Git 仓库后自动构建，免费额度对个人博客绰绰有余，还自带全球 CDN 与 HTTPS。</li>
</ul>
<h2 id="目录结构">目录结构</h2>
<p>初始化之后的站点结构大致是这样：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">blog/
</span></span><span class="line"><span class="cl">├── hugo.toml            # 站点配置
</span></span><span class="line"><span class="cl">├── archetypes/          # 新文章模板
</span></span><span class="line"><span class="cl">├── assets/
</span></span><span class="line"><span class="cl">│   └── css/extended/    # 自定义样式
</span></span><span class="line"><span class="cl">├── content/
</span></span><span class="line"><span class="cl">│   ├── posts/           # 文章
</span></span><span class="line"><span class="cl">│   ├── about.md         # 关于页
</span></span><span class="line"><span class="cl">│   ├── archives.md      # 归档页
</span></span><span class="line"><span class="cl">│   └── search.md        # 搜索页
</span></span><span class="line"><span class="cl">├── static/              # 原样拷贝到站点根目录的文件
</span></span><span class="line"><span class="cl">└── themes/PaperMod/     # 主题（直接放在仓库里，无需 submodule）
</span></span></code></pre></div><h2 id="本地写作与预览">本地写作与预览</h2>
<p>新建一篇文章：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/my-new-post.md
</span></span></code></pre></div><p>启动本地预览（包含草稿）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo server -D
</span></span></code></pre></div><p>打开 <code>http://localhost:1313</code> 就能看到效果，改动会实时刷新。</p>
<h2 id="部署到-cloudflare-pages">部署到 Cloudflare Pages</h2>
<h3 id="1-把代码推到-github">1. 把代码推到 GitHub</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git init
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;chore: init hugo blog&#34;</span>
</span></span><span class="line"><span class="cl">git branch -M main
</span></span><span class="line"><span class="cl">git remote add origin https://github.com/&lt;你的用户名&gt;/&lt;仓库名&gt;.git
</span></span><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></div><h3 id="2-在-cloudflare-pages-创建项目">2. 在 Cloudflare Pages 创建项目</h3>
<p>进入 Cloudflare 控制台的 <strong>Workers &amp; Pages → Create → Pages → Connect to Git</strong>，选中刚才的仓库，构建配置填：</p>
<table>
	<thead>
			<tr>
					<th>配置项</th>
					<th>值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Framework preset</td>
					<td>Hugo</td>
			</tr>
			<tr>
					<td>Build command</td>
					<td><code>hugo --gc --minify</code></td>
			</tr>
			<tr>
					<td>Build output directory</td>
					<td><code>public</code></td>
			</tr>
			<tr>
					<td>环境变量</td>
					<td><code>HUGO_VERSION</code> = <code>0.170.0</code></td>
			</tr>
	</tbody>
</table>
<p>保存后，每次 <code>git push</code> 都会自动构建并发布。</p>
<blockquote>
<p>PaperMod 当前版本要求 Hugo ≥ 0.158。<code>HUGO_VERSION</code> 不要留空，否则 Cloudflare 可能使用旧版本导致构建失败。</p>
</blockquote>
<h3 id="3-绑定自己的域名">3. 绑定自己的域名</h3>
<p>在项目的 <strong>Custom domains</strong> 里添加域名，按提示在 DNS 服务商处加一条 <code>CNAME</code> 记录即可。HTTPS 证书会自动签发和续期。</p>
<h3 id="4-修正-baseurl">4. 修正 baseURL</h3>
<p>部署成功后，把 <code>hugo.toml</code> 里的 <code>baseURL</code> 改成正式域名，再推送一次：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">baseURL</span> <span class="p">=</span> <span class="s2">&#34;https://blog.yourdomain.com/&#34;</span>
</span></span></code></pre></div><p>这样 RSS、站点地图和社交卡片的绝对链接才会正确。</p>
<h2 id="命令行部署可选">命令行部署（可选）</h2>
<p>不想连 Git 也可以直接上传构建产物：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo --gc --minify
</span></span><span class="line"><span class="cl">npx wrangler pages deploy public --project-name wang-blog
</span></span></code></pre></div><h2 id="日常写作流程">日常写作流程</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/xxx.md   <span class="c1"># 1. 新建</span>
</span></span><span class="line"><span class="cl">hugo server -D                  <span class="c1"># 2. 本地预览</span>
</span></span><span class="line"><span class="cl">git add . <span class="o">&amp;&amp;</span> git commit -m <span class="s2">&#34;post: xxx&#34;</span>
</span></span><span class="line"><span class="cl">git push                        <span class="c1"># 3. 自动部署</span>
</span></span></code></pre></div><p>就这三步。工具越简单，越容易坚持下去。</p>
]]></content:encoded></item><item><title>你好，世界</title><link>https://www.handejun.com/posts/hello-world/</link><pubDate>Sun, 15 Nov 2026 10:00:00 +0800</pubDate><guid>https://www.handejun.com/posts/hello-world/</guid><description>给这个刚刚上线的博客写第一篇开篇文章：为什么重新开始写字，以及这里以后会有什么。</description><content:encoded><![CDATA[<p>这是一个刚刚搭建好的博客。</p>
<p>从今天起，我会把那些散落在笔记软件、代码注释和聊天记录里的想法，慢慢搬到这里来。</p>
<h2 id="为什么要写">为什么要写</h2>
<p>写下来的过程，本身就是一次整理。很多时候我以为自己想明白了，直到要把它写成一段别人能读懂的文字，才发现还有不少含混的地方。</p>
<p>这个博客对我有三重意义：</p>
<ol>
<li><strong>存档</strong>：把解决过的问题、踩过的坑记下来，下次不用重新来过；</li>
<li><strong>表达</strong>：把技术之外的观察和感受，放在一个自己完全掌控的地方；</li>
<li><strong>连接</strong>：如果某篇文章恰好帮到了你，那它就是有价值的。</li>
</ol>
<h2 id="这里会有什么">这里会有什么</h2>
<p>大致是三块内容：</p>
<ul>
<li><strong>技术笔记</strong>：前端工程、构建工具、云原生与一些折腾过程的记录；</li>
<li><strong>独立开发</strong>：做小产品时的设计取舍、成本与踩坑；</li>
<li><strong>随笔</strong>：读书、生活，以及一些还没想清楚的问题。</li>
</ul>
<p>更新频率不设目标。写得动就多写一点，写不动就少写一点，但尽量每一篇都对得起你花的时间。</p>
<h2 id="如何订阅">如何订阅</h2>
<p>如果你不想错过更新，可以用任意 RSS 阅读器订阅本站，地址是：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/index.xml
</span></span></code></pre></div><p>在前面加上你的博客域名即可。也可以直接收藏本页，或者在右上角切换你喜欢的深色 / 浅色主题。</p>
<p>下一篇，我们来聊聊这个博客是用什么搭起来的。</p>
]]></content:encoded></item><item><title>写作指南：Markdown 排版速查</title><link>https://www.handejun.com/posts/markdown-guide/</link><pubDate>Sun, 08 Nov 2026 09:20:00 +0800</pubDate><guid>https://www.handejun.com/posts/markdown-guide/</guid><description>本站支持的 Markdown 语法与排版效果速查，写新文章时可以对照这份示例。</description><content:encoded><![CDATA[<p>这篇文章既是写作说明，也是排版样式的预览。需要时可以直接复制格式。</p>
<h2 id="标题层级">标题层级</h2>
<p>文章内标题从 <code>##</code> 开始，右侧会自动生成锚点，正文上方会显示目录。</p>
<h3 id="三级标题">三级标题</h3>
<h4 id="四级标题">四级标题</h4>
<h2 id="强调与链接">强调与链接</h2>
<p><strong>加粗</strong>、<em>斜体</em>、<del>删除线</del>、<code>行内代码</code>，以及<a href="https://gohugo.io/">一个链接</a>。</p>
<h2 id="列表">列表</h2>
<p>无序列表：</p>
<ul>
<li>第一项</li>
<li>第二项
<ul>
<li>嵌套项</li>
<li>另一个嵌套项</li>
</ul>
</li>
<li>第三项</li>
</ul>
<p>有序列表：</p>
<ol>
<li>先做这件事</li>
<li>再做那件事</li>
<li>最后收尾</li>
</ol>
<p>任务列表：</p>
<ul>
<li><input checked="" disabled="" type="checkbox"> 搭建站点</li>
<li><input checked="" disabled="" type="checkbox"> 写第一篇文章</li>
<li><input disabled="" type="checkbox"> 绑定自定义域名</li>
</ul>
<h2 id="引用">引用</h2>
<blockquote>
<p>好的文字，是把复杂的事情说简单，而不是把简单的事情说复杂。</p>
<p>—— 某位记不清名字的作者</p>
</blockquote>
<h2 id="代码">代码</h2>
<p>行内代码写作 <code>`const a = 1`</code>。</p>
<p>代码块支持语法高亮与右上角复制按钮：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">async</span> <span class="kd">function</span> <span class="nx">getPosts</span><span class="p">(</span><span class="nx">tag</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">res</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="sb">`/index.json`</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">res</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&#34;加载失败&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">posts</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">posts</span><span class="p">.</span><span class="nx">filter</span><span class="p">((</span><span class="nx">p</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">p</span><span class="p">.</span><span class="nx">title</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="nx">tag</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/new-post.md
</span></span><span class="line"><span class="cl">hugo server -D
</span></span></code></pre></div><h2 id="表格">表格</h2>
<table>
	<thead>
			<tr>
					<th>语法</th>
					<th>作用</th>
					<th>示例</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>**文本**</code></td>
					<td>加粗</td>
					<td><strong>重点</strong></td>
			</tr>
			<tr>
					<td><code>*文本*</code></td>
					<td>斜体</td>
					<td><em>提示</em></td>
			</tr>
			<tr>
					<td><code>`代码`</code></td>
					<td>行内代码</td>
					<td><code>hugo</code></td>
			</tr>
			<tr>
					<td><code>[文字](链接)</code></td>
					<td>超链接</td>
					<td><a href="https://gohugo.io/">官网</a></td>
			</tr>
	</tbody>
</table>
<h2 id="图片">图片</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">![<span class="nt">图片说明</span>](<span class="na">/images/example.png &#34;可选标题&#34;</span>)
</span></span></code></pre></div><p>图片建议放在 <code>static/images/</code> 目录下，引用时以 <code>/images/</code> 开头，构建时会原样复制。</p>
<h2 id="分隔线">分隔线</h2>
<hr>
<h2 id="小提示">小提示</h2>
<ul>
<li>每篇文章的 <code>summary</code> 会显示在列表页，写一两句话概括即可；</li>
<li>太长的文章记得多用二级标题，方便生成目录；</li>
<li>草稿保持 <code>draft: true</code>，加 <code>-D</code> 本地预览时才会出现。</li>
</ul>
]]></content:encoded></item></channel></rss>