<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>DCjanus 的博客</title><link>https://blog.dcjanus.com/</link><description>DCjanus 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>dcjanus@dcjanus.com (DCjanus)</managingEditor><webMaster>dcjanus@dcjanus.com (DCjanus)</webMaster><lastBuildDate>Wed, 17 Sep 2025 07:44:07 +0000</lastBuildDate><atom:link href="https://blog.dcjanus.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Tesla Owner API 实践记录</title><link>https://blog.dcjanus.com/posts/tesla-owner-api-guide/</link><pubDate>Wed, 17 Sep 2025 07:44:07 +0000</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/tesla-owner-api-guide/</guid><description>&lt;p>我常用来查看历史行程的第三方 Tesla App 在去年改为订阅制。为了继续掌握自己的行车数据，也趁机补上 Owner API 的细节，我动手写了一套自用的小工具，把一路摸索的经验整理成这篇笔记。内容主要参考 Tim Dorr 的非官方文档和个人实验数据，希望未来的自己能快速回忆关键步骤。&lt;/p></description></item><item><title>证书透明度：浏览器如何及时发现假证书？</title><link>https://blog.dcjanus.com/posts/certificate-transparency-intro/</link><pubDate>Wed, 17 Sep 2025 11:24:07 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/certificate-transparency-intro/</guid><description><![CDATA[<p>二十世纪末，浏览器与证书颁发机构（CA）之间的信任几乎完全依赖“名单制”：名单里列出哪些 CA 可信，浏览器就默认接受他们签发的一切证书。DigiNotar 事件等案例<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>提醒我们，这套模式太容易被误用或滥用，一张假证书可能在无人知晓的情况下就进入用户的 TLS 连接。Certificate Transparency（简称 CT）因此被提出，希望把签发过程晒在阳光下，让任何人都能验证“谁在什么时候为谁签了证”。</p>]]></description></item><item><title>LZF 流式解压</title><link>https://blog.dcjanus.com/posts/streaming-lzf-decode/</link><pubDate>Fri, 04 Jul 2025 01:34:15 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/streaming-lzf-decode/</guid><description><![CDATA[<p>我最近在业余时间重写一个之前为工作开发的 Redis RDB 解析工具<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>，旧版工具在处理大 Key 时内存占用过高，有时会触发容器的内存限制，导致解析失败。因此，新版本的核心目标是实现增量解析。</p>
<p>Redis 中对字符串对象，允许使用 LZF 压缩来节省空间，但常见 LZF 实现都只支持一次性解压，仍无法彻底规避内存问题。简单了解 LZF 算法后，发现其实现极为简单，且有流式解压的潜力，因此决定自己实现一个流式解压器。</p>]]></description></item><item><title>Go Protobuf：新的 Opaque API</title><link>https://blog.dcjanus.com/posts/protobuf-opaque/</link><pubDate>Sat, 05 Apr 2025 00:38:32 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/protobuf-opaque/</guid><description><![CDATA[<blockquote>
  <p>本文是对 <a href="https://go.dev/blog/protobuf-opaque" target="_blank" rel="noopener noreferrer">Go 官方博客文章</a> 的中文翻译，原文作者为 Michael Stapelberg，发表于 2024 年 12 月 16 日。</p>
</blockquote><p><a href="https://protobuf.dev/" target="_blank" rel="noopener noreferrer">Protocol Buffers (Protobuf)</a> 是 Google 的语言无关数据交换格式。</p>
<p>2020 年 3 月，我们发布了 <code>google.golang.org/protobuf</code> 模块，这是对 Go Protobuf API 的重大重构。该包引入了一流的反射支持、动态 protobuf 实现以及 <code>protocmp</code> 包，简化了测试。</p>]]></description></item><item><title>protoc-gen-validate (PGV) 与 protovalidate：ProtoBuf 验证工具的演进</title><link>https://blog.dcjanus.com/posts/protovalidate/</link><pubDate>Fri, 04 Apr 2025 23:58:52 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/protovalidate/</guid><description><![CDATA[<h2 id="引言" class="headerLink">
    <a href="#%e5%bc%95%e8%a8%80" class="header-mark"></a>引言</h2><p>在微服务架构中，接口参数验证是一个常见且重要的需求。B 站开源的 <a href="https://github.com/go-kratos/kratos" target="_blank" rel="noopener noreferrer">Kratos</a> 框架围绕 ProtoBuf 和 DDD 设计，侵入性低，方便根据业务需求进行裁剪。</p>
<p>在 Kratos 官方模板中，开发者可以通过 ProtoBuf 定义服务接口，进而生成 OpenAPI 文档、客户端代码、服务端代码等。此外，官方文档还介绍了使用 <code>protoc-gen-validate</code> 插件生成数据验证代码，简化数据验证逻辑。</p>]]></description></item><item><title>中二时期的 QQ 签名</title><link>https://blog.dcjanus.com/posts/chuunibyou_in_qq/</link><pubDate>Tue, 11 Feb 2025 00:07:27 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/chuunibyou_in_qq/</guid><description><![CDATA[<p>闲着无聊打开很久没用的 QQ，看到了自己中二时期的签名，很多内容的都是辛辛苦苦从网上摘抄的，但谷歌搜索一下，却有部分已找不到出处。
刚接触互联网时，互联网是开放、共享的，我曾幻想互联网上有用的信息会永远保存且公开可查。</p>
<p>我想当初看到这些句子时，一定伴随着某种正面的情感，才会按耐不住兴奋，把它们换成自己的 QQ 签名；
但当我无法搜索到这些句子出处时，我感到了一种失落，仿佛失去了一部分的记忆。
担心明天 QQ 突然不再保存历史签名，我决定把这些签名记录下来，也便于让它们重新回到互联网。</p>
<p>但不得不说，重新看这些签名真的太尴尬了。</p>]]></description></item><item><title>使用 Yaegi 在 Go 语言项目中嵌入 Go 作为脚本</title><link>https://blog.dcjanus.com/posts/usage-of-yaegi/</link><pubDate>Sun, 26 Feb 2023 01:20:43 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/usage-of-yaegi/</guid><description><![CDATA[<h1 id="背景" class="headerLink">
    <a href="#%e8%83%8c%e6%99%af" class="header-mark"></a>背景</h1><p>目前（2023年2月）维护着公司的对象存储系统，需要一套用于多机房流量调度与缓存的系统。目前由若干套自运维的 NGINX+ATS 集群实现，由于年久失修，存在一些问题，比如：日志信息不足、监控缺失、配置管理困难等，因此需要重构。</p>
<p>理论上可以研究研究 OpenResty 等基于 NGINX 的扩展方案，但由于我们不想为这个项目投入长期人力，能够较为简单的对接公司监控、日志等基础设施，并承载部分 dirty 的业务逻辑，因此决定使用 Go 语言开发。</p>]]></description></item><item><title>Linux 内核版本号过大导致 TiKV 的一次 Panic</title><link>https://blog.dcjanus.com/posts/linux-version-number-and-tikv-panic/</link><pubDate>Sat, 17 Dec 2022 23:19:25 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/linux-version-number-and-tikv-panic/</guid><description><![CDATA[<h2 id="tldr" class="headerLink">
    <a href="#tldr" class="header-mark"></a>TLDR</h2><p>Linux 内核版本号曾被认为可以用三个 8bit 无符号整数表示，但后来这个约定被打破。TiKV 间接使用的库在解析内核版本号时，没有考虑到这一点，导致 panic。</p>]]></description></item><item><title>一些 CDN 与网站优化的零散知识</title><link>https://blog.dcjanus.com/posts/some-notes-about-cdn-and-website/</link><pubDate>Thu, 02 Jun 2022 09:15:48 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/some-notes-about-cdn-and-website/</guid><description>&lt;p>目前（2022年5月）工作是维护某公司的对象存储和整套资源分发体系，经常跟 CDN 与客户端打交道，最近和网友闲聊过程中，发现有些知识虽然没有太大适用空间也说不上难点，但还算有趣，简单记录一下。&lt;/p></description></item><item><title>一些零碎知识</title><link>https://blog.dcjanus.com/posts/note/</link><pubDate>Mon, 31 Jan 2022 21:29:55 +0800</pubDate><author><name>DCjanus</name><uri>https://github.com/dcjanus</uri><email>DCjanus@dcjanus.com</email></author><guid>https://blog.dcjanus.com/posts/note/</guid><description>平时有很多零碎的知识点，写起来没几句，重新摸索一遍可能很花时间，在这里简单记录一下，方便自己查阅。</description></item></channel></rss>