<?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>咸鱼的小鱼塘</title>
    <link>https://blog.zjyl1994.com/</link>
    <description>Recent content on 咸鱼的小鱼塘</description>
    <generator>Hugo -- 0.152.2</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 21 Jun 2026 10:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.zjyl1994.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>友人</title>
      <link>https://blog.zjyl1994.com/friends/</link>
      <pubDate>Tue, 10 Jul 2018 18:56:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/friends/</guid>
      <description>&lt;h1 id=&#34;咱的朋友们&#34;&gt;咱的朋友们&lt;/h1&gt;
&lt;p&gt;现在这个时代是浮躁的时代，忙着赚钱忙着被生活压迫，已经很少有人能静下心坐下来写点什么。&lt;/p&gt;
&lt;p&gt;相比于乱七八糟充满营销号贩卖焦虑的微信公众号，我更喜欢那种自己建站自己维护的独立博客。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于</title>
      <link>https://blog.zjyl1994.com/about/</link>
      <pubDate>Sun, 20 Aug 2017 21:38:52 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/about/</guid>
      <description>&lt;h1 id=&#34;关于我&#34;&gt;关于我&lt;/h1&gt;
&lt;p&gt;zjyl1994，网名咸鱼，专职程序员 &amp;amp; 业余美食家。&lt;/p&gt;
&lt;p&gt;16年毕业于某师范大学计算机专业，目前在某中厂做后端开发。&lt;/p&gt;
&lt;p&gt;专职 Golang 程序员，之前主写 PHP，也写过不少 Python。&lt;/p&gt;</description>
    </item>
    <item>
      <title>RLCD看板</title>
      <link>https://blog.zjyl1994.com/post/rlcd_dashboard/</link>
      <pubDate>Sun, 21 Jun 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/rlcd_dashboard/</guid>
      <description>&lt;p&gt;最近在抖音刷到了一个大佬制作的黄金价格看板，询问后得知硬件是微雪的RLCD开发板，淘宝搜了一下只要150。
于是萌生了我也要一个的想法，立刻下单。由于我对嵌入式一窍不通，所以本次全程是VibeCoding的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2025 上海游记</title>
      <link>https://blog.zjyl1994.com/post/2025-shanghai/</link>
      <pubDate>Sun, 11 Jan 2026 10:27:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/2025-shanghai/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;趁着2025的尾巴，去了一次上海。
拍了一些照片，记录一下&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;上海三件套&#34;&gt;上海三件套&lt;/h1&gt;
&lt;p&gt;经典上海打卡三件套，这个机位在北外滩公园，人很少视野开阔，拍起来也很有特色。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/2025-shanghai/%E4%B8%89%E4%BB%B6%E5%A5%971.webp&#34; alt=&#34;上海三件套&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/2025-shanghai/%E4%B8%89%E4%BB%B6%E5%A5%97.webp&#34; alt=&#34;上海三件套&#34;  /&gt;&lt;/p&gt;
&lt;h1 id=&#34;外滩&#34;&gt;外滩&lt;/h1&gt;
&lt;p&gt;最经典的外滩机位，人山人海，不是元旦假期的晚上都挪不动脚步。
&lt;img src=&#34;https://blog.zjyl1994.com/post/2025-shanghai/%E5%A4%96%E6%BB%A90.webp&#34; alt=&#34;外滩&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/2025-shanghai/%E5%A4%96%E6%BB%A91.webp&#34; alt=&#34;外滩&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/2025-shanghai/%E5%A4%96%E6%BB%A92.webp&#34; alt=&#34;外滩&#34;  /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2026 数字生活提升计划</title>
      <link>https://blog.zjyl1994.com/post/2026-digit-life-enhance/</link>
      <pubDate>Sun, 21 Dec 2025 10:27:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/2026-digit-life-enhance/</guid>
      <description>&lt;p&gt;为了迎接2026年，我计划提升我的数字生活体验。
因此决定把密码管理器、云笔记迁移到境内的服务器上提升使用体验。&lt;/p&gt;
&lt;p&gt;我有一个很重要的刚需就是Web端，公司电脑上有深信服等审计工具，所以很多需要安装客户端的产品我都不能使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2025 博客改版</title>
      <link>https://blog.zjyl1994.com/post/2025_blog_refactor/</link>
      <pubDate>Mon, 10 Nov 2025 22:28:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/2025_blog_refactor/</guid>
      <description>&lt;p&gt;马上要迎来新的一年了，对我的博客做了一些小小的改动&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;更换博客主题为PaperMod&lt;/li&gt;
&lt;li&gt;更换字体为霞鹜文楷&lt;/li&gt;
&lt;li&gt;升级Hugo版本&lt;/li&gt;
&lt;li&gt;规范化图片存储格式，跨入webp时代&lt;/li&gt;
&lt;li&gt;移除不被支持的旧页面&lt;/li&gt;
&lt;li&gt;更换favicon为《上任达维镇》的杰西卡头像~&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Docker 配置代理</title>
      <link>https://blog.zjyl1994.com/post/docker_proxy/</link>
      <pubDate>Mon, 06 Oct 2025 11:50:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/docker_proxy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;国内的网络环境大家都懂，没有科学工具的可以不用看了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我的开发环境Win11+VirtualBox中跑的Fedora Server，后台无头启动，所以常规的代理配置方法不奏效。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cap 的 Go 后端</title>
      <link>https://blog.zjyl1994.com/post/cap-go/</link>
      <pubDate>Thu, 11 Sep 2025 07:38:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/cap-go/</guid>
      <description>&lt;h1 id=&#34;cap&#34;&gt;Cap&lt;/h1&gt;
&lt;p&gt;Cap是个基于PoW工作量证明的验证码体系，用来给每一次请求添加一定的CPU成本，防止恶意请求。真正的客户只要计算一次，消耗一次成本。恶意尝试需要计算成千上万次，大大增加成本，使其放弃尝试。&lt;/p&gt;
&lt;p&gt;这个验证码的主要适用场景是保护登录表单，防止暴力破解在你的接口上跑字典。让攻击者的每次请求都有更高的CPU成本。如果你需要智能防爬，可以考虑使用Anubis这款WAF。&lt;/p&gt;</description>
    </item>
    <item>
      <title>打造自己的 Seedbox</title>
      <link>https://blog.zjyl1994.com/post/bt-seedbox/</link>
      <pubDate>Wed, 26 Mar 2025 23:45:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/bt-seedbox/</guid>
      <description>&lt;h1 id=&#34;背景&#34;&gt;背景&lt;/h1&gt;
&lt;p&gt;曾经看番的好去处B站越来越烂了，导致完全没兴趣续费大会员。所以我尝试回到过去，重新捡起来 BT 下载。&lt;/p&gt;
&lt;p&gt;很庆幸，2025年动漫花园和nyaa都还在，而且一直有更新。为此我还组装了一部小的全闪下载机进行 BT 下载。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang 优化之合并请求</title>
      <link>https://blog.zjyl1994.com/post/writegroup/</link>
      <pubDate>Sun, 23 Mar 2025 20:00:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/writegroup/</guid>
      <description>&lt;p&gt;很多时候，一些请求是可以合并的，比如库存扣减常用的 &lt;code&gt;UPDATE qty = qty -1&lt;/code&gt;
如果我们在并发场景下，每个请求都去执行一次 &lt;code&gt;UPDATE qty = qty -1&lt;/code&gt;，那么就会有大量的请求竞争同一行数据，造成性能瓶颈。
所以我们可以通过合并请求的方式，将多个请求合并成一个请求，一个动作完成多次扣减，然后再执行。&lt;/p&gt;
&lt;p&gt;下面就是我封装好的工具包，用于合并请求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>掌玩mini 2024 调教手记</title>
      <link>https://blog.zjyl1994.com/post/iplay_mini_2024_v2/</link>
      <pubDate>Thu, 29 Aug 2024 00:10:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/iplay_mini_2024_v2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;这是掌玩 mini 的第二篇文章,其他内容可以参考第一篇。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;上一次写的测评文章我看了一下，2024-02-29，今天08-29，算用了快小半年，体验还不错，也调教的差不多了。&lt;/p&gt;
&lt;p&gt;首先本文只针对 掌玩mini 2024 NFE 8G+256G 版本，官方代号 T811MAN。我不知道和国内在售版本有硬件上的区别，但是照搬掌玩 mini 的刷机教程没有成功过。&lt;/p&gt;
&lt;h1 id=&#34;gsi&#34;&gt;GSI&lt;/h1&gt;
&lt;p&gt;首先，不要碰 GSI。NFE版本暂时没有可以成功刷入的 GSI，我已经试过很多次了，基本都是无限重启。&lt;/p&gt;
&lt;p&gt;看老外群组内的反馈，很多人都能成功刷入，不过都是普通版本的，并不是 NFE 版本。
也有老外给 NFE 版本固件刷到普版上，并没有出现 L1 的 DRM 标识，这说明很有可能这俩硬件层面有细微的变化。&lt;/p&gt;
&lt;p&gt;如果你搞定了可以分享教程给我。&lt;/p&gt;
&lt;p&gt;为了防止变砖，所以我准备了线刷包，这个线刷版本是 &lt;code&gt;iPlay50miniProNFE(T811MAN)_EN_20240520&lt;/code&gt;，OTA 上刷不到这个更新。多次GSI失败救砖后，版本自然升级到了这个版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在线工具站</title>
      <link>https://blog.zjyl1994.com/post/webtools/</link>
      <pubDate>Sun, 11 Aug 2024 21:11:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/webtools/</guid>
      <description>&lt;p&gt;最近一直在忙公司的项目，经常和 JSON，日志系统中输出的文本，excel文件打交道。
所以有不少重复劳动需要弄，比如查看一下 JSON 文本中嵌套的JSON什么的。&lt;/p&gt;
&lt;p&gt;所以借着这个机会把我的早期工具站用 React 重构了，增加了 PWA 技术，现在可以安装到电脑里当WebApp使用，除了整合常用的开发功能，最主要是打开快，All in One。&lt;/p&gt;
&lt;p&gt;由于没有好的设计，所以沿用了之前老工具站（已下线）的 Bootstrap5。&lt;/p&gt;</description>
    </item>
    <item>
      <title>掌玩mini 2024 简测</title>
      <link>https://blog.zjyl1994.com/post/iplay_mini_2024/</link>
      <pubDate>Thu, 29 Feb 2024 22:39:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/iplay_mini_2024/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;前情提要：酷比魔方 掌玩mini (iPlay 50 Mini Pro) 2024 NFE 8+256 ¥799&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;缘起&#34;&gt;缘起&lt;/h1&gt;
&lt;p&gt;之前有过一部丐版iPad，当时花了2999买的，主要拿来看Youtube等流媒体，当作出租屋小电视使用，后续由于使用体验实在糟糕逐渐吃灰，所以爱回收变现700多，变现的钱就买了这个。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/iplay_mini_2024/z8veRl.webp&#34; alt=&#34;官网宣传图&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;基本配置：MTK G99 / 8G RAM / 256GB UFS2.2 / 8.4&amp;quot; 1920×1200&lt;/p&gt;
&lt;p&gt;卖点: 为数不多的8寸安卓平板，原生 Android 13，有存储卡扩展还能LTE联网。&lt;/p&gt;
&lt;p&gt;现在的安卓平板都越做越大，想找个小尺寸的实在难找，8寸产品线只剩酷比魔方和联想拯救者在做。但是拯救者最便宜的也要2000多，差不多能买2台半这个了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chrome Wayland Fcitx 漏字修复</title>
      <link>https://blog.zjyl1994.com/post/chrome-wayland/</link>
      <pubDate>Wed, 14 Feb 2024 20:48:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/chrome-wayland/</guid>
      <description>&lt;p&gt;最近在自用的 Fedora 系统上切换了Wayland显示，输入法就有一些奇怪的漏字现象。&lt;/p&gt;
&lt;p&gt;具体表现为，输入一句汉字后，会有一些拼音的字母跳过输入法直接进入程序。形成类似于 &lt;code&gt;我说&lt;/code&gt; =&amp;gt; &lt;code&gt;我s活&lt;/code&gt; 这样的奇怪句子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker build 挂梯子</title>
      <link>https://blog.zjyl1994.com/post/docker-proxy/</link>
      <pubDate>Thu, 21 Sep 2023 22:27:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/docker-proxy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;国内的网络环境，懂得都懂。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Docker build的时候常常需要在镜像内使用包管理器安装一些对应的包，比如&lt;code&gt;gcc&lt;/code&gt;/&lt;code&gt;g++&lt;/code&gt;等等，由于独特的网络环境，不得不使用一些魔法手段。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AutoHotKey 模拟多媒体控制按键</title>
      <link>https://blog.zjyl1994.com/post/ahk_media/</link>
      <pubDate>Sun, 26 Mar 2023 13:47:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ahk_media/</guid>
      <description>&lt;p&gt;公司台式机标配的联想键盘属于非常中规中矩的那种，能打字，但是一点额外的媒体控制功能都没有。&lt;/p&gt;
&lt;p&gt;当我们听着音乐的时候，如果同事过来问问题，不能及时暂停可是大问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[23.03.18] 最近的两个小工具</title>
      <link>https://blog.zjyl1994.com/post/recent-work-230318/</link>
      <pubDate>Sat, 18 Mar 2023 23:05:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/recent-work-230318/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;最近搞了两个小玩具，解决了我的一些问题。
能根据自己的需求定制工具，是最幸福的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;文件盒子&#34;&gt;文件盒子&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/recent-work-230318/filebox.webp&#34; alt=&#34;filebox&#34;  /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持通过 WebUI 列出文件&lt;/li&gt;
&lt;li&gt;文件的编辑操作通过 WebDAV 进行&lt;/li&gt;
&lt;li&gt;WebUI 可以隐藏文件&lt;/li&gt;
&lt;li&gt;WebDAV 可以设置密码&lt;/li&gt;
&lt;li&gt;Golang 单文件部署无额外依赖&lt;/li&gt;
&lt;li&gt;实测可以部署在 Cloudflare CDN 后面&lt;/li&gt;
&lt;li&gt;文件链接支持过期，防止迅雷等下载工具刷爆服务期流量&lt;/li&gt;
&lt;li&gt;很轻量，实际占用约为 10M&lt;/li&gt;
&lt;li&gt;UPX 压缩完毕后 2.5MB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一款工具主要是为了解决之前 Webls 项目需要 ssh 到服务器的问题。
现在可以通过 WebDAV 在手机/电脑等设备上直接修改文件。&lt;/p&gt;
&lt;h1 id=&#34;简易信息面板&#34;&gt;简易信息面板&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/recent-work-230318/gostatusd.webp&#34; alt=&#34;gostatusd&#34;  /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持月流量统计&lt;/li&gt;
&lt;li&gt;单文件无依赖部署&lt;/li&gt;
&lt;li&gt;很轻量，实际内存占用约 11MB&lt;/li&gt;
&lt;li&gt;UPX 压缩后二进制为 5.7MB&lt;/li&gt;
&lt;li&gt;后台持续采集数据，不会阻塞刷新&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一款工具是一个简单地探针应用，没有一些花哨的功能。
目前大部分探针都是PHP的，由于服务器没有PHP环境，所以想看一些信息还是比较麻烦的。简单地升级了一下多年以前的 Gostatusd 项目，配上了新的 UI 就这样了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VSCode 配置任意位置 F5 调试 Golang</title>
      <link>https://blog.zjyl1994.com/post/vscode-debug-go/</link>
      <pubDate>Wed, 16 Nov 2022 20:44:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/vscode-debug-go/</guid>
      <description>&lt;p&gt;VSCode 安装 Golang 插件后，如果安装了配套的gotools, 实际上已经可以支持调试了。&lt;/p&gt;
&lt;p&gt;但是我们按下F5后会报错，提示 &lt;code&gt;could not launch process: not an executable file&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;原因是你没有给工作区配置 &lt;code&gt;launch.json&lt;/code&gt; 导致VSCode找不到你要运行的程序位置。
默认的设置，你按下F5会尝试运行当前打开的页面，然而大部分情况下我们都不会选择 &lt;code&gt;main&lt;/code&gt; 包的文件而是正在某个文件内部设置断点，
所以仅仅编译当前文件是不够的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lazydog OCR</title>
      <link>https://blog.zjyl1994.com/post/lazydogocr/</link>
      <pubDate>Sun, 25 Sep 2022 09:14:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/lazydogocr/</guid>
      <description>&lt;p&gt;日常开发中，我们经常会拿到一个测试同学反馈的截图，圈上了有问题的部分，需要你来排查问题。
你看得到图片上有traceid和JSON入参，但是没有复制给你。你去找他复现，又得折腾人家重新给你抓信息。&lt;/p&gt;
&lt;p&gt;此时使用苹果的同学就跳出来了，可以直接 OCR 图片上的文字出来。&lt;/p&gt;
&lt;p&gt;如果没有苹果怎么办呢？我搜了一下，找到了 Tesseract 这个神奇的库，并把他包装成了一个在线网站。&lt;/p&gt;
&lt;p&gt;最后的成品就是这样的&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/lazydogocr/main-page.webp&#34; alt=&#34;Lazydog OCR&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;提前说明，这种开源的纯离线 OCR 没有大厂提供的付费 OCR 接口效果好，胜在一不用付费，二不用上传，全靠本机的算力进行识别。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang 泛型初体验</title>
      <link>https://blog.zjyl1994.com/post/multi-worker/</link>
      <pubDate>Fri, 05 Aug 2022 21:53:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/multi-worker/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;最近给公司的几个服务升级到了Go1.18,总算能好好的体验泛型了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;1.18泛型更新了一段时间，我们公司的基础构架也上了1.18的底包，可以愉快的玩耍泛型了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang 使用ECDSA进行数字签名</title>
      <link>https://blog.zjyl1994.com/post/ecdsa-golang/</link>
      <pubDate>Wed, 27 Jul 2022 22:26:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ecdsa-golang/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;数字签名可以检查数据是否遭到篡改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;起因&#34;&gt;起因&lt;/h1&gt;
&lt;p&gt;我的工作中，开发了一个批量改写和执行 SQL 的数据处理服务。
待执行的 SQL 模板会按照迭代定期发布到服务中，决定了服务最终运行时生成的 SQL。&lt;/p&gt;</description>
    </item>
    <item>
      <title>戴尔V3400 Fedora折腾笔记</title>
      <link>https://blog.zjyl1994.com/post/v3400/</link>
      <pubDate>Fri, 27 May 2022 00:09:56 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/v3400/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;赶上京东做活动以旧换新，处理了家里的老电脑和吃灰手机。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我的主力电脑是 联想小新Pro 13 2020 锐龙版本，由于工作离不开真实的 Windows 环境，我的 Linux 开发都被迫挤到18年那部 TMB117 小笔记本上。
很难想象一部18年的赛扬老机器是如何顶着无风扇的降频硬抗开发任务的，在京东看到活动之后就萌生了换机的想法。&lt;/p&gt;
&lt;p&gt;考虑到有一块从下载机上拆下来的闲置大容量SSD硬盘，可选电脑范围就被限制的很窄了，毕竟2022年想找到还有SATA盘位的新笔记本非常难找。
考虑到兼容性、SATA、性能等，最后圈定了 Dell Vostro 3400 i5-1135G7+16G内存+512G固态版本，京东当时的活动价 3599。&lt;/p&gt;
&lt;p&gt;选择理由：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;11代i5 性能保障。（12代i5有大小核设计，按照日常Linux经验，这种新技术头几年体验会很差）&lt;/li&gt;
&lt;li&gt;SATA盘位预留并且有线和安装架无需额外购买（Acer的EX215有预留HDD空间但是排线和架都要另外购买，而且没有提供购买渠道）&lt;/li&gt;
&lt;li&gt;Ubuntu 认证机型，意味着大部分软件功能都应该是好使的，如果不能用可以去Ubuntu里抓驱动过来。&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>小工具导航页</title>
      <link>https://blog.zjyl1994.com/post/superutils/</link>
      <pubDate>Sun, 01 May 2022 22:37:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/superutils/</guid>
      <description>&lt;p&gt;上班的时候经常需要使用工具网站，公司环境不方便登录自己的账号进行云同步。
所以我简单的糊了一个 Vue 的小工具导航页。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;hsu.webp&#34; alt=&#34;成品&#34;  /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>DevTerm 等待与失望</title>
      <link>https://blog.zjyl1994.com/post/devterm/</link>
      <pubDate>Sun, 02 Jan 2022 22:04:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/devterm/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/devterm/title.webp&#34; alt=&#34;Title&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/devterm/menu.webp&#34; alt=&#34;menu&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;2020年11月，我在网上看到 ClockworkPi 发布的 DevTerm，在此之前我就听说过这家公司。
他家的 GameShell 之前就想买来着，但是1000多块买一个只能玩游戏的开源掌机实在下不去手。&lt;/p&gt;
&lt;p&gt;2020年12月15号，我在激烈的思想斗争下下单了A04版本。还记得那个时候按照汇率差不多花了1700-1800左右。计划是拿来做一个打字机的，然后页面显示四月前交付，这是我第一次先款预购东西。&lt;/p&gt;
&lt;p&gt;等到2021年3月多，情况有变，全球供应链紧张，论坛帖子发布更新状态，官网等待多天以后变成9月前交付。&lt;/p&gt;
&lt;p&gt;持续等待后，9月，CM3版本交付了。那个时候我看到了少数的真机开箱视频，感觉有点小了。
然后10-11月A06交付了，只剩我这个A04用户持续等待。&lt;/p&gt;
&lt;p&gt;2022年1月1日早晨，我收到了顺丰送来的 DevTerm。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2021</title>
      <link>https://blog.zjyl1994.com/post/2021/</link>
      <pubDate>Sun, 02 Jan 2022 20:05:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/2021/</guid>
      <description>&lt;p&gt;2021 年度总结&lt;/p&gt;
&lt;p&gt;其实我很少做年度总结，今年算是值得记住的一年，换了满意的工作，买了车，减肥也成功了一部分。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clockworkpi APT 镜像源</title>
      <link>https://blog.zjyl1994.com/post/clockwork-proxy/</link>
      <pubDate>Tue, 26 Oct 2021 20:20:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/clockwork-proxy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Clockworkpi 的 APT 源放在 Github 上，由于众所周知的原因，国内访问稀烂。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2020年12月我预购了DevTerm，A04版本还没有发货，但是A06版本已经有群友拿到了，
面临的一大问题就是官方的APT源在Github上，由于众所周知的缘故，国内访问十分艰难。
就算你侥幸连上了，大概率也是不稳定的。所以我就搞了一个小小的镜像源。&lt;/p&gt;
&lt;p&gt;使用这个镜像源十分简单。只需要你执行以下命令。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo sed -i &#39;s/raw.githubusercontent.com/su.zjyl1994.com/g&#39; /etc/apt/sources.list.d/clockworkpi.list&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;原理就是将 &lt;code&gt;/etc/apt/sources.list.d/clockworkpi.list&lt;/code&gt; 中的 &lt;code&gt;raw.githubusercontent.com&lt;/code&gt; 替换成 &lt;code&gt;su.zjyl1994.com&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;执行完毕后 &lt;code&gt;sudo apt update&lt;/code&gt;，更新软件源，是不是加载速度变快很多了呢？&lt;/p&gt;
&lt;p&gt;此镜像部署在我的服务器上，并且在 Cloudflare 上缓存一小时。基本可以理解为和官方同步的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>重构——在线网站更新手记</title>
      <link>https://blog.zjyl1994.com/post/refactor-2021/</link>
      <pubDate>Wed, 06 Oct 2021 20:04:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/refactor-2021/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;趁着十一假期，我更新了一下网站的设计。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;重构，为了更好的设计。&lt;/p&gt;
&lt;p&gt;我的网站，有三到四个子站组成。最早的设计是通过 VPS 直接提供服务，
在一段时间的迭代中，我选择了 Cloudflare 进行防护和加速，虽然中国大陆地区
使用 Cloudflare 是减速行为。&lt;/p&gt;
&lt;p&gt;现在的网站结构：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;www.zjyl1994.com&lt;/code&gt; 是我的主站，主要负责导航到其他子站点。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;blog.zjyl1994.com&lt;/code&gt; 是我的博客站，就是这个站点了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;su.zjyl1994.com&lt;/code&gt; 是我的后端站点，我的所有活动功能都挂在这里。&lt;/p&gt;
&lt;h1 id=&#34;pages&#34;&gt;Pages&lt;/h1&gt;
&lt;p&gt;www 和 blog 都是属于静态网站，www 是纯手写的 html 代码，
blog 的代码是使用 Hugo 生成的，对于这种静态资源站点，我选择了
Cloudflare Pages 进行托管。静态资源依托全球网络可以抵抗任何形式的攻击，
而且可以稳定的被 CDN 进行缓存，进行就近分发。&lt;/p&gt;
&lt;h1 id=&#34;tunnel&#34;&gt;Tunnel&lt;/h1&gt;
&lt;p&gt;Cloudflare 于今年早些时候公布了免费的 Tunnel 计划，原先是收费计划的 Argo Tunnel，
针对回源场景可以免费使用了。使用 Cloudflared 可以直接绕开 caddy、nginx 等反代工具，
让 CF 成为你的 Portal。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webls - 简单易用的目录列出应用</title>
      <link>https://blog.zjyl1994.com/post/webls/</link>
      <pubDate>Thu, 08 Apr 2021 22:32:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/webls/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;正好有个工具文件上云的需求，就做了这么个工具。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近有一个文件扔到服务器上的需求，简简单单用 Golang 糊了一个文件列出工具。&lt;/p&gt;
&lt;p&gt;成品是这样的&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/webls/default.webp&#34; alt=&#34;默认界面&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;还可以支持 Markdown 展示&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redmi Note 8 刷机笔记</title>
      <link>https://blog.zjyl1994.com/post/ginkgo/</link>
      <pubDate>Sun, 08 Nov 2020 23:01:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ginkgo/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;上班实在是忙，没时间折腾技术类的东西。
只能水一篇刷机笔记了，由于这篇实在太水了所以只能放生活分类。（尴尬&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;之前为了刷机玩，买了一部红米的9A，想着就一个摄像头，什么奇怪没有的手机最适合刷机了，不用担心奇怪硬件造成的BUG，结果我想多了，MTK平台一个刷机包没有。这手机7月发布到现在连个第三方官改都找不到。&lt;/p&gt;
&lt;p&gt;后来我就买了这部红米Note8，为了防止之前的教训，我特地去XDA围观了一下这部机的论坛，也看了几大著名的ROM，比如LineageOS、Pixel Experience、Resurrection Remix。他们都官方支持我这部手机，而且Xiaomi.eu也有最终的兜底方案，如果什么都刷不了我还有欧版可以刷，不用担心谷歌服务装不上。&lt;/p&gt;
&lt;h1 id=&#34;刷机&#34;&gt;刷机&lt;/h1&gt;
&lt;p&gt;买到手第一步就是申请解锁，小米解锁需要等待168小时，真是一分钟都少不了，在经历一整个星期的等待后，我解开了红米Note8的BL锁。&lt;/p&gt;
&lt;p&gt;然后就是刷机，我当初选择了 Pixel Experience 作为首选，毕竟谷歌自己出的手机就是安卓标杆，照着改的第三方ROM准没有错。&lt;/p&gt;
&lt;p&gt;标准的刷机流程就是，长按音量下+电源键开机进fastboot，然后用刷机命令刷最新的 &lt;code&gt;twrp recovery&lt;/code&gt; 进去(文后有附地址)。&lt;/p&gt;
&lt;p&gt;注意刷完了不要直接重启，关机，按住音量上+电源键开机直接进入 recovery，要不然你的twrp会被自带的官方rec覆盖掉。可能是小米自己的保护机制。&lt;/p&gt;
&lt;p&gt;进入 recovery 就是install、wipe 然后reboot system。非常正常的刷机方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Youtube直播转IPTV直播源</title>
      <link>https://blog.zjyl1994.com/post/iptv_proxy_v2/</link>
      <pubDate>Sun, 23 Aug 2020 19:17:23 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/iptv_proxy_v2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;这篇是升级版！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;Youtube直播转IPTV直播源，基于Youtube-dl，我之前写过一个版本，那个版本因为是自己用的所以安装起来比较麻烦。&lt;/p&gt;
&lt;p&gt;水完博客断断续续到现在还有人过来找我问我怎么安装，所以我花了两个星期断断续续做了一下优化。&lt;/p&gt;
&lt;p&gt;现在这个工具被我命名为 &amp;ldquo;LiveTV!&amp;rdquo; 主要应用场景就是在电视或者其他支持M3U8的软件上直接播放Youtube的直播。&lt;/p&gt;
&lt;p&gt;考虑到国内的网络问题，我还增加了代理模式，让电视不用搞飞机也能看。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/iptv_proxy_v2/index-zh.webp&#34; alt=&#34;LiveTV&#34;  /&gt;&lt;/p&gt;
&lt;h1 id=&#34;安装教程&#34;&gt;安装教程&lt;/h1&gt;
&lt;p&gt;首先，你需要安装Docker。安装docker的镜像网上很多，如果你是 Ubuntu 之类较新的发行版可以直接使用apt安装。&lt;/p&gt;
&lt;p&gt;如果你在服务器上使用老版本的CentOS7或者Ubuntu14.xx，也可以搜索一下。Docker安装教学应该到处都是。&lt;/p&gt;
&lt;p&gt;以下内容假定你已经安装好了Docker。&lt;/p&gt;</description>
    </item>
    <item>
      <title>记一次MySQL巨大表查询优化</title>
      <link>https://blog.zjyl1994.com/post/sqloptimize/</link>
      <pubDate>Wed, 01 Jul 2020 23:01:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/sqloptimize/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;今天上班折腾这个搞到晚上9点，记录下来免得后人踩坑&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;今天项目经理过来说我有一张TAPD单已经挂了一个月了，要我解决免得影响考核。我一看，是首页的数据报表接口速度过慢超时。&lt;/p&gt;
&lt;p&gt;这个问题很早就提给我了，那个时候因为其他任务过于着急只能先挂起。现在要过考核所以只能尽快解决。&lt;/p&gt;
&lt;h1 id=&#34;分析&#34;&gt;分析&lt;/h1&gt;
&lt;p&gt;首先查询代码中的数据表名称，前往正式环境的 MySQL 种查看，不看不知道一看吓一跳，2500万行单表，没有索引。
所以解决方法肯定是先加索引。这里我就被坑了，代码中使用了单独的函数生成 where 子句，我尝试把 where 子句中的值加入索引，结果没有效果。&lt;/p&gt;
&lt;p&gt;然后我就尝试打印最后生成的 SQL 语句。结果得到了这样的白痴语句 &lt;code&gt;WHERE a = ? AND b between ? AND ? AND c = ?&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;回想起来之前看过的面经提到，SQL的联合索引在范围检索的时候会慢很多，所以正确的办法应该把所有准确匹配的先放在最左边，MySQL 的联合索引会根据最左原则匹配使用索引。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Youtube直播转IPTV源</title>
      <link>https://blog.zjyl1994.com/post/youtube-live-m3u8/</link>
      <pubDate>Sun, 03 May 2020 23:05:19 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/youtube-live-m3u8/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Youtube 是个大宝库！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;Youtube 直播上有很多好东西，比如各大电视台喜欢在油管上直播自己的新闻频道。&lt;/p&gt;
&lt;p&gt;比如海量台湾电视新闻台都在油管上搞了直播，我整理了一下这些。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#三立LIVE新聞HD直播
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=4ZVUmEUFwaY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#TVBS新聞 55 頻道
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=Hu1FkdAOws0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#東森財經新聞 57
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=dphWo0r27Z4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#東森新聞 51 頻道
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=RaIJ767Bj_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#CTI中天新聞HD直播
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=wUPPkSANpyo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#中視新聞台 LIVE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=3OPNkiqD48g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#民視新聞直播
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=XxJKnDLYZz4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#華視新聞HD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://www.youtube.com/watch?v=TL8mmew3jb8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>TVProxy 开发笔记</title>
      <link>https://blog.zjyl1994.com/post/iptv_proxy/</link>
      <pubDate>Tue, 28 Apr 2020 21:06:43 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/iptv_proxy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;花了两整天时间搞了一个Kodi适用的香港电视直播代理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这篇还是IPTV相关的东西，香港电视台的直播解析可以看前两篇博客，分别写了 RTHK 31/32 和 TVB 无线新闻 / 财经资讯台 的解析方法。&lt;/p&gt;
&lt;p&gt;众所周知 Kodi 是一个集成式的播放平台，本次的主要目的就是改造 TVProxy 让它可以支持 Kodi 的 &lt;code&gt;PVR IPTV Simple Client&lt;/code&gt;，并且准备两种安装方法的必须文件。&lt;/p&gt;
&lt;p&gt;首先，Kodi 的 IPTV 插件需要自行安装。然后可以看到，PVR 插件需要一个M3U文件。在谷歌搜索M3U可以找到大量现成的M3U文件，可以参考他们的格式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>RTHK直播抓取笔记</title>
      <link>https://blog.zjyl1994.com/post/rthk_m3u8/</link>
      <pubDate>Tue, 28 Apr 2020 17:31:56 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/rthk_m3u8/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;网上提供直播源的香港电视台除了TVB还有RTHK。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;RTHK 是香港唯一的公营电视机构，有31和32两个免费电视台，而且最重要的是他们都提供了线上直播。&lt;/p&gt;
&lt;p&gt;官方的播放地址是 &lt;a href=&#34;https://www.rthk.hk/tv&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;https://www.rthk.hk/tv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/rthk_m3u8/rthk_live.webp&#34; alt=&#34;在线播放截图&#34;  /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>TVB直播抓取笔记</title>
      <link>https://blog.zjyl1994.com/post/tvb_m3u8/</link>
      <pubDate>Mon, 27 Apr 2020 16:24:56 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/tvb_m3u8/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;找工作期间闲的无聊想看电视，买了一部NUC作为播放设备，但是没有合适的电视直播源，只能自己动手了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;TVB无线新闻台 的直播地址是 &lt;a href=&#34;http://news.tvb.com/live/inews&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;http://news.tvb.com/live/inews&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TVB无线财经资讯台 的地址是 &lt;a href=&#34;http://news.tvb.com/live/j5_ch85&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;http://news.tvb.com/live/j5_ch85&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/tvb_m3u8/tvb_live.webp&#34; alt=&#34;官方直播界面&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;当然这两个直接用网页打开就能看，但是我想在 Kodi 上播放，所以还要处理一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>KaiAuth 开发笔记3</title>
      <link>https://blog.zjyl1994.com/post/kai-auth3/</link>
      <pubDate>Wed, 01 Apr 2020 22:40:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/kai-auth3/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;最近升级了一下 KaiAuth，目前版本 v1.1.1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;就在前几天，偶然闲逛 Reddit，发现有外国人也很需要 KaiOS 上的 TOTP 工具。我就推荐了我的 KaiAuth ，
结果外国人并不知道如何OmniSD或者用WebIDE安装这个。我思考了一下，还是需要提交到官方商店。&lt;/p&gt;
&lt;p&gt;考虑到 KaiAuth 早期版都是使用暗码开启高级功能的（其实是我懒得搞菜单），对于上架到官方商店来说，
我不能保证所有用户都会玩暗码这套，所以一个正常一些的菜单还是很重要的。&lt;/p&gt;
&lt;h1 id=&#34;改造&#34;&gt;改造&lt;/h1&gt;
&lt;p&gt;先看看改造后的结果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/kai-auth3/app_in_launcher.webp&#34; alt=&#34;app_in_launcher&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/kai-auth3/main_interface.webp&#34; alt=&#34;main_interface&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/kai-auth3/scan_qrcode.webp&#34; alt=&#34;scan_qrcode&#34;  /&gt;
&lt;img src=&#34;https://blog.zjyl1994.com/post/kai-auth3/option_menu.webp&#34; alt=&#34;option_menu&#34;  /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>KaiDeploy 开发笔记</title>
      <link>https://blog.zjyl1994.com/post/kaideploy/</link>
      <pubDate>Sun, 22 Mar 2020 23:31:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/kaideploy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;折腾 KaiOS 的我又搞了一个没什么人会用到的小工具&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;引子&#34;&gt;引子&lt;/h1&gt;
&lt;p&gt;最近折腾完 KaiAuth，就在 KaiOS 的交流群里和他们吹水。总能发现小白玩家连基本的操作都不懂却被迫折腾 adb，然后和 Palemoon 之类的过时火狐战斗，才能把应用装上。（有大把的人连 adb 都找不到）&lt;/p&gt;
&lt;p&gt;Kai OS 脱胎与 Firefox OS，应用要用当年 Firefox 的 Web IDE 才能 sideload 到手机。由于 Mozilla 已经在 2016 年停止开发 Firefox OS， 新版本 Firefox 逐渐拿掉了自己不需要的 Web IDE，这却给我们这些 Kai OS用户造成蛮大的困扰。为了能随时 sideload 新的 app 进手机，必须保留最后一代有 Web IDE 的浏览器。这很不方便，一不小心就自动更新了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing KaiAuth</title>
      <link>https://blog.zjyl1994.com/post/introducing_kaiauth/</link>
      <pubDate>Fri, 20 Mar 2020 23:10:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/introducing_kaiauth/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;KaiAuth is a simple alternative of Google Authenticator on KaiOS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/introducing_kaiauth/logo.webp&#34; alt=&#34;KaiAuth logo&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a native speaker of English so there will be some mistakes in my sayings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KaiAuth 开发笔记</title>
      <link>https://blog.zjyl1994.com/post/kai-auth2/</link>
      <pubDate>Wed, 11 Mar 2020 12:43:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/kai-auth2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;KaiAuth 是一款 KaiOS 上的谷歌验证器替代品&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;12月初的时候，我用原生 JavaScript 实现了第一版的 KaiAuth。具体可以看之前的博文。&lt;/p&gt;
&lt;p&gt;如果没有耐心看下去也可以去 &lt;a href=&#34;https://github.com/zjyl1994/KaiAuth/releases/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;https://github.com/zjyl1994/KaiAuth/releases/&lt;/a&gt; 直接下载最新版编译好的应用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2020</title>
      <link>https://blog.zjyl1994.com/post/2020/</link>
      <pubDate>Sun, 02 Feb 2020 15:11:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/2020/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;失业在家半年了，刚开始是自己想休息，然后马上家里的事就来了，一通瞎忙，折腾完了就到了过年，现在过完年又闹肺炎。这个庚子年不消停啊。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总结我的 2019 ，就是折腾。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Authy 导出密钥</title>
      <link>https://blog.zjyl1994.com/post/authy-export/</link>
      <pubDate>Sat, 07 Dec 2019 21:40:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/authy-export/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Authy 也可以导出密钥，而且现在很简单了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Authy 是一款挺好用的 2FA 生成器，问题在于它没有 KaiOS 版本，所以我昨天自己写了一个生成器。详情可以见上一篇文章。&lt;/p&gt;
&lt;p&gt;Authy 官方没有给密钥导出方案（说是为了安全考虑不提供这个），网上的 js 方案都是从chrome版的authy中读取，还不能用。我花了很久找到了这个现成的方案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>KaiOS 折腾开发笔记</title>
      <link>https://blog.zjyl1994.com/post/kai-auth/</link>
      <pubDate>Sat, 07 Dec 2019 15:23:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/kai-auth/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;11 月末冒险过关去 HK 买了一部诺基亚 2720 Flip&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;2019年9月5号，HMD 发布了 Nokia 2720 Flip，一部翻盖的半智能机。&lt;/p&gt;
&lt;p&gt;个人对翻盖机还是很喜欢的，之前纯为了情怀买过一个飞利浦的真功能机，结果只支持 GSM，2019 年 GSM 已经不行了，很多时候信号都没有。而这部 2720 Flip，支持4G、VoLTE、热点分享，瞬间种草各种想买。&lt;/p&gt;
&lt;p&gt;当时说，2019 年第四季度大陆发售，结果转眼间从 10 月等到 12 月，每天跑去诺基亚中国的微博下蹲守也不见发布，正好有朋友约了我过关买东西，我就去丰泽拎了一部港版 2720 Flip 回来。&lt;/p&gt;
&lt;p&gt;淘宝上很多卖这个的，基本都是 799 RMB，但是丰泽的官网上显示只要 798 HKD，考虑到港币的汇率，实际到手价格也就710 RMB。（不过丰泽只有黑色版本，也不知道为啥没有白的可以买）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo 博客折腾记</title>
      <link>https://blog.zjyl1994.com/post/hugo-nginx-githook/</link>
      <pubDate>Wed, 06 Nov 2019 22:42:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/hugo-nginx-githook/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;五一期间折腾了一下服务器的 Docker 化，踩了好多的坑，写文记录下来。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;别小看这篇文章，我已经折腾两天了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;起因&#34;&gt;起因&lt;/h1&gt;
&lt;p&gt;本来想搞个第二博客写点非技术性的东西，经过一系列纠结，选定了 WordPress + Docker-Compose 的部署方案，本来教程都快写完了，但是 WordPress 死活拉不起来，昨天整整调试了一天，最后放弃。&lt;/p&gt;</description>
    </item>
    <item>
      <title>10月乱想</title>
      <link>https://blog.zjyl1994.com/post/201910-think/</link>
      <pubDate>Fri, 25 Oct 2019 23:16:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/201910-think/</guid>
      <description>&lt;p&gt;不知不觉十月份就要结束了，经济形势越来越差，很多公司都在裁员过冬。&lt;/p&gt;
&lt;p&gt;很不幸的是，我也被裁了。&lt;/p&gt;
&lt;p&gt;其实一切都是可以预料到的，从去年年底福利缩水，聚餐减少，到今年一次团建没有，外加老板各种电话出去要债，技术部门停止招新。
不知道他们有没有，我反正做好了被裁员的准备。全组在 Java 背景的组长领导下集体转向 SpringBoot 做困兽挣扎，我这个写 Go 的留下来一点用处没有。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPD MicroPC 使用感受</title>
      <link>https://blog.zjyl1994.com/post/gpdmicropc/</link>
      <pubDate>Tue, 27 Aug 2019 23:29:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/gpdmicropc/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;四月还是五月的一天，无聊的我在地铁上刷今日头条，突然看到一个文章，说 GPD 又出新玩具了（准确的说是生产力工具）。一看价格也不贵，京东众筹 1999。于是买了一台，算是了却心愿。&lt;/p&gt;
&lt;p&gt;说起来我对袖珍电脑有兴趣不是一两天了，一个是大学上课带电脑偷偷玩东西，电脑巨大无比不好藏，而且真的很重。大学用的昭阳 K29，虽然是台 12 寸的笔记本，但是由于巨大的 9 芯电池，
重量不输一般的 15 寸笔记本，每天上课十分健身。所以一直以来都想要小型化的电脑。&lt;/p&gt;
&lt;p&gt;上班后，在北京的公司里接了一个做嵌入式设备的项目，然后做完了需要出现场调试设备。那个设备本质上是个工控机，但是没有屏幕。需要用串口线连进去 tty 控制，所以大笔记本也是麻烦。
那个时候就看到了 GPD Pocket ，没记错的话 3300，咬着牙买的。那个时候每个月到手也就6k，为了这个分期+吃土三个月。体验嘛，真的很方便，现场设备很小挂在墙上，
笔记本的话需要拖着很难搞。而这种便携设备只需要放在盒子里，连好线敲就是了。&lt;/p&gt;
&lt;p&gt;那个嵌入式项目结束后，pocket 就一直在吃灰。究其原因，铝合金外壳，漂亮，但是烫手，ATOM 处理器真的很热。而且性能对于电脑软件真的稀烂，幸好我只用 XShell。Chrome总会无端崩溃，
估计也是性能的锅。而且，只有一个标准尺寸 USB 口，接了鼠标就没法弄U盘，为了 pocket 还买了个宜丽客马克鼠，就为了不占住 USB 口。（顺带一提，我的马克鼠也在吃灰）&lt;/p&gt;</description>
    </item>
    <item>
      <title>OhMyPushBot ———— Telegram 推送 Bot</title>
      <link>https://blog.zjyl1994.com/post/ohmypushbot/</link>
      <pubDate>Sat, 06 Jul 2019 23:41:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ohmypushbot/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;前几天做的小玩具&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;ohmypushbot&#34;&gt;OhMyPushBot&lt;/h1&gt;
&lt;p&gt;Telegram 是个有趣的聊天工具，最好玩的就是它十分开放 Bot 系统。相比于微信公众号这种层层审核还一堆限制，或者 QQ、微信 机器人这种强行扒官方协议的灰色接口，
Telegram 提供的 API 非常简单。你可以用 Bot 管理 Channel，制作好玩的 Bot，这一切只需要和 BotFather 聊聊天，就可以设置并创建一个Bot，完全不需要等待审核。&lt;/p&gt;
&lt;p&gt;制作这个 Bot，最大的用处就是方便一些自动化脚本通知事件结束。一般的场景下，自动化脚本要发送通知，多数使用发送邮件的方案，但是发送邮件需要使用专用的工具。
而且一般的邮件需要自己检查邮件情况，早些年有过黑莓的PushMail服务，几百元一个月的服务费也不是一般人玩得起的。现在好了，Telegram 作为一个免费 IM 工具，
完善的客户端支持（Linux、Windows上都有，各大手机平台也都有），比较实时的推送速度，简直是事件通知最佳的选择。&lt;/p&gt;</description>
    </item>
    <item>
      <title>几种报表SQL常用的时间分组写法</title>
      <link>https://blog.zjyl1994.com/post/datechar_for_report/</link>
      <pubDate>Sat, 22 Jun 2019 13:50:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/datechar_for_report/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;写了小一个月报表相关的SQL，把最容易忘的记下来&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近在公司的任务多数是写各种报表，SQL最长的格式化完了有30行，各种 JOIN 和 UNION ALL 拼 N 张表里的数据。其中最常用到的就是按照时间分组。&lt;/p&gt;
&lt;p&gt;假设有如下表&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;员工名(VARCHAR)&lt;/th&gt;
          &lt;th&gt;交易金额(INT)&lt;/th&gt;
          &lt;th&gt;时间(DATETIME)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;张三&lt;/td&gt;
          &lt;td&gt;66&lt;/td&gt;
          &lt;td&gt;2017-06-23 19:34:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;张三&lt;/td&gt;
          &lt;td&gt;166&lt;/td&gt;
          &lt;td&gt;2017-06-23 19:36:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;张三&lt;/td&gt;
          &lt;td&gt;566&lt;/td&gt;
          &lt;td&gt;2017-06-23 20:34:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;张三&lt;/td&gt;
          &lt;td&gt;934&lt;/td&gt;
          &lt;td&gt;2017-06-24 21:34:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;李四&lt;/td&gt;
          &lt;td&gt;661&lt;/td&gt;
          &lt;td&gt;2017-07-01 10:36:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;李四&lt;/td&gt;
          &lt;td&gt;83&lt;/td&gt;
          &lt;td&gt;2017-06-25 19:34:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;李四&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;2017-06-26 19:34:00&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果想查某个时间段里每个人的总交易金额报表，大概的 SQL 写完应该是这样的&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;staff_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DATE_FORMAT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-%d&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date_char&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;开始时间&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;结束时间&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;GROUP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;staff_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date_char&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中最重要的部分就是 date_char ,它决定了时间分组的粒度。&lt;/p&gt;</description>
    </item>
    <item>
      <title>服务器 Docker 化笔记</title>
      <link>https://blog.zjyl1994.com/post/dockerize/</link>
      <pubDate>Sun, 05 May 2019 23:50:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/dockerize/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;五一期间折腾了一下服务器的 Docker 化，踩了好多的坑，写文记录下来。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;起因&#34;&gt;起因&lt;/h1&gt;
&lt;p&gt;起因很简单，五一去玩了一圈，结果到处都是人，所以在家猫着总得折腾点什么。
在公司写东西日常使用 Docker，目前对 Docker 的操作也非常熟悉了，所以总想着把我的服务器 Docker 化&lt;/p&gt;
&lt;p&gt;先说一下我的基础配置，Kimsufi 的 KS-7 主机，i3 处理器，8G 内存，2T 硬盘，100M 带宽。
内存很充裕，就可以放心的折腾 Docker 环境。事实上我最后弄完几个容器，实际服务器占用也就 500M - 700M 左右。&lt;/p&gt;
&lt;h1 id=&#34;重装服务器&#34;&gt;重装服务器&lt;/h1&gt;
&lt;p&gt;由于我的主机已经用了一阵，所以服务器里很多已经抛弃的东西，也有很多正在用的东西。首先要备份数据到其他地方，我还有其它的服务器，所以把有用的数据 rsync 送到别的服务器上。&lt;/p&gt;
&lt;p&gt;Kimsufi 登入管理面板，重新安装最新版的 CentOS 7。配置 SSH Key，升级最新软件包和内核。Kimsufi 安装的时候要注意，一定要勾选 &lt;code&gt;use distribution kernel&lt;/code&gt; 选项。
如果没有勾选这个选项，Kimsufi 会给你安装定制版的内核，我不太清楚定制版内核会带来什么优势，但是目前来看只会造成麻烦。所以一定要使用发行版自带的内核。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alpine with CGO</title>
      <link>https://blog.zjyl1994.com/post/alpine-cgo/</link>
      <pubDate>Mon, 08 Apr 2019 22:17:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/alpine-cgo/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;今天折腾这个一天，记录下来免得未来踩坑&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;alpine-with-cgo&#34;&gt;Alpine with CGO&lt;/h1&gt;
&lt;p&gt;Golang 很棒，静态编译十分方便。但是，它也不是 100% 静态编译的，因为它需要依赖glibc （ 标准C运行库 ）。&lt;/p&gt;
&lt;p&gt;而 Docker 最常用的 Apline 镜像，使用的是 musl 库，并不能愉快的运行 Go 程序&lt;/p&gt;
&lt;p&gt;网上大部分教程都是教你，&lt;code&gt;CGO_ENABLED=0 go build -a -installsuffix cgo&lt;/code&gt;，使用纯 Go 编译，不用 CGO 链接 glibc ，问题就可以解决了。&lt;/p&gt;
&lt;p&gt;但是最麻烦的问题是，你需要引入 C/C++ 库的时候，你并不能禁用 CGO 。&lt;/p&gt;
&lt;p&gt;幸好 Alpine 有包管理器，所以我们可以很愉快的安装所需要的库。（我之前尝试手动安装glic和libstdc++，很难弄）&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决Alpine缺少字体的问题</title>
      <link>https://blog.zjyl1994.com/post/alpine-fontconfig/</link>
      <pubDate>Mon, 11 Feb 2019 16:20:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/alpine-fontconfig/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;2019-02-11 农历己亥年上班第一天&lt;/p&gt;
&lt;p&gt;好久没有写博客了，我这个博客是Hugo静态编译的，写一次还是蛮复杂的，而且上班以后基本没有什么值得写的东西，所以博客基本都在长草。&lt;/p&gt;
&lt;p&gt;立一个FLAG，2019 博客不长草。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;我现在的这家公司基本都在用现代化的开发工具，所有程序写完都在docker环境下运行，我们公司dalao钦定的底包就是alpine。后续的问题都是Alpine没有自带默认字体造成的。如果你想快速知道怎么解决请直接看最后。&lt;/p&gt;
&lt;h1 id=&#34;问题&#34;&gt;问题&lt;/h1&gt;
&lt;p&gt;我遇到的问题是这样的：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/alpine-fontconfig/javaexception.webp&#34; alt=&#34;Java报错&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;场景是公司买的快速开发框架jeeplus，自带一个数据导入功能，需要下载excel模板，当下载模板时触发NPE。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 18.04 必做操作</title>
      <link>https://blog.zjyl1994.com/post/ubuntu-source/</link>
      <pubDate>Fri, 12 Oct 2018 07:00:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ubuntu-source/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;新开一个栏目，专门记录开发中常见的命令和操作&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;新装完Ubuntu Server之后要做几个操作，才能让他更好用:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;更新软件源&lt;/li&gt;
&lt;li&gt;安装必备软件&lt;/li&gt;
&lt;li&gt;设置系统代理&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Ringbuffer环形缓冲区</title>
      <link>https://blog.zjyl1994.com/post/ringbuffer/</link>
      <pubDate>Sun, 05 Aug 2018 11:53:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ringbuffer/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;环形缓冲区是很常用的数据结构，用途很广泛。我目前遇到的使用场景就是TCP分片转回TCP流，一个线程读取TCP分片拆包，写入缓存区，另一个线程从缓存区中读取，互相不影响。&lt;/p&gt;
&lt;p&gt;为此Google了一番，发现了kfifo这个Linux内核的实现，十分精妙。&lt;/p&gt;
&lt;h1 id=&#34;原理&#34;&gt;原理&lt;/h1&gt;
&lt;h2 id=&#34;基本原理&#34;&gt;基本原理&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kfifo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;cm&#34;&gt;/* the buffer holding the data */&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;cm&#34;&gt;/* the size of the allocated buffer */&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;cm&#34;&gt;/* data is added at offset (in % size) */&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;cm&#34;&gt;/* data is extracted from off. (out % size) */&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;spinlock_t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;cm&#34;&gt;/* protects concurrent modifications */&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;先看一下基本定义，buffer是数据缓存区，size是缓存区长度，in/out是输入输出指针位置（%size后就是真实指针了）。&lt;/p&gt;
&lt;p&gt;size需要检测是否为2的次幂，不是的话需要升到2的次幂。方便后续计算。（可以看内核的roundup_pow_of_two实现）&lt;/p&gt;
&lt;p&gt;in、out每次操作都+对应的读写长度，通过取模运算回落size区间。&lt;/p&gt;
&lt;p&gt;data := kfifo.buffer[kfifo.out % kfifo.size:kfifo.in % kfifo.size]&lt;/p&gt;
&lt;p&gt;data就是有效数据的缓存区区间。&lt;/p&gt;
&lt;h2 id=&#34;快速取模&#34;&gt;快速取模&lt;/h2&gt;
&lt;p&gt;kfifo使用了二进制的位运算实现了2的幂取模运算，并且利用了无符号数的溢出做回绕。很精妙的设计。&lt;/p&gt;
&lt;p&gt;首先，缓存区尺寸要取整为2的幂次，这样可以利用位运算进行取模。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;M mod N = M &amp;amp; (N-1)&lt;/code&gt;,当N为2的幂次时有效。&lt;/p&gt;
&lt;p&gt;取模运算对于计算机来说运算速度也是很慢的（虽然你感觉不出来），而位运算就是分分钟的事了。&lt;/p&gt;
&lt;h2 id=&#34;回绕&#34;&gt;回绕&lt;/h2&gt;
&lt;p&gt;无符号数溢出后，就会变成0从头开始，借助这个特性可以绕开逻辑判断。&lt;/p&gt;</description>
    </item>
    <item>
      <title>宏碁TMB117测评</title>
      <link>https://blog.zjyl1994.com/post/tmb117/</link>
      <pubDate>Tue, 17 Jul 2018 22:45:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/tmb117/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;2018-07-17夜 深圳 狂风暴雨配闪电&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;买了个摸鱼用的笔记本，宏碁TravelMate B117，使用体验还挺好。&lt;/p&gt;
&lt;p&gt;我的需求很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;能运行Manjaro&lt;/li&gt;
&lt;li&gt;电池耐用&lt;/li&gt;
&lt;li&gt;尺寸小&lt;/li&gt;
&lt;li&gt;便宜&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;选来选去就选到了这个笔记本。基本配置是这样的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intel 奔腾 N3710 处理器&lt;/li&gt;
&lt;li&gt;4GB 内存 / 128GB 闪存&lt;/li&gt;
&lt;li&gt;11.6英寸1366*768屏幕&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最重要的是：这个本子我买的时候特价只要2399，现在2499也不是很贵。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.zjyl1994.com/post/tmb117/jdpage.webp&#34; alt=&#34;京东购买页&#34;  /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>逃离北京，移居深圳</title>
      <link>https://blog.zjyl1994.com/post/beijing2shenzhen/</link>
      <pubDate>Mon, 09 Jul 2018 22:14:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/beijing2shenzhen/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;很早之前就应该写这篇文章了，毕竟已经来这边两个多月了，是时候总结一下这次的北京大逃离了。&lt;/p&gt;
&lt;p&gt;（长篇唠唠叨叨流水账预警）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;引子&#34;&gt;引子&lt;/h1&gt;
&lt;p&gt;刚毕业的时候有两个选择，北京or深圳。家里建议我选择北京，毕竟离家近，都是北方生活可以很好的习惯。最主要的是冬天有暖气，回家还方便。再加上之前去过一次北京稍稍有点认识地方，毕业就去了北京找工作。具体找工作怎么经历按下不提，最后在16年9月份在北京站住脚了。隔了几个月，因为之前经历了城中村，加上老板给涨了一下薪水，觉得应该提高一下居住水平，我就和同事搬到了五环边上的清河地区一起合租。房租从之前的单间1000每月涨到2500一个次卧。&lt;/p&gt;
&lt;p&gt;经历了北京的低端人口大清理，我在清河地区的房子再续租已经从5200一个月涨到了6800一个月，再加上糟糕的天气和公司里的各种斗争搞事，我觉得不应该在这样下去了。所以2018过年期间下了决心，必须走。（压垮我的最后一根稻草应该是涨薪的时候只给涨了900块钱，和糊弄人没什么区别，本来基数就少，涨一次抠抠搜搜连房租涨幅都追不上）&lt;/p&gt;
&lt;h1 id=&#34;离职&#34;&gt;离职&lt;/h1&gt;
&lt;p&gt;要离职肯定要提前申请，折腾快一个月的交接。三个人分别接收了我不同领域的任务，然后开了离职证明。（有个小插曲：离职证明网上下载的模板，领导给盖完公章说我应该没事看看文化方面的知识，全因为离职证明的那段话没空两格? 拜托那是百度搜到的模板诶，不知道老板讨这个嘴上面子有什么意思，可能是小孩子脾气？）&lt;/p&gt;
&lt;p&gt;因为是裸辞，拿着我的所有东西离开的时候还是蛮爽的。开开心心的走出办公楼坐上回家的公交。就这么在家颓废了一个月。当然，到了出信用卡账单的时候就很方，要交最后一次房租，要还一个月放纵的生活费，也是一笔超大的开支。毕竟每个月都是动态平衡，虽然攒不下钱但不至于负债。没了工作只能用之前的存款生抗，也是没办法。&lt;/p&gt;
&lt;h1 id=&#34;启程&#34;&gt;启程&lt;/h1&gt;
&lt;p&gt;定下要走了，收拾了一大堆东西，能拿走的都拿走了。拿不走的一部分送给室友一部分拜托室友等有地址了帮忙邮到广东。去深圳有好多种方法，我和家里人一起去他们帮我拿着大量的行李，肯定不能坐飞机也不能坐高铁，毕竟没有这么大的储物空间。最后买了北京西到深圳的硬卧，在车上折腾了一天一夜。硬卧车可以放很多行李，至少我的两只行李箱两只双肩背和两袋子锅碗瓢盆都能装得下。（不要考虑动卧，动卧只有床底下能放少量扁的行李，亲身体会。）&lt;/p&gt;</description>
    </item>
    <item>
      <title>区块链是什么，我来告诉你</title>
      <link>https://blog.zjyl1994.com/post/blockchain/</link>
      <pubDate>Wed, 02 May 2018 21:26:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/blockchain/</guid>
      <description>&lt;h1 id=&#34;区块链是什么&#34;&gt;区块链是什么&lt;/h1&gt;
&lt;p&gt;区块链，当今最火热的技术热点。为什么这么火呢，三个字：“比特币”。&lt;/p&gt;
&lt;p&gt;首先，我们要知道区块链是什么，根据&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9D%97%E9%93%BE&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;维基百科的描述&lt;/a&gt;来看，是这样的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;区块链&lt;/strong&gt;（英语：blockchain 或 block chain）是用分布式数据库识别、传播和记载信息的智能化对等网络，也称为价值互联网。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;用简单的话来说，区块链就是一个全球一起写的一本书。这本书有可能是账本，也可能是别的什么东西。&lt;/p&gt;
&lt;p&gt;区块链有以下几个优势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;不可修改，数据写进区块就不能更改了。&lt;/li&gt;
&lt;li&gt;单向性，你只能在最后一个块后面加新的块，而不能在之前区块中间加新块。&lt;/li&gt;
&lt;li&gt;众生平等，任何人只要有合适的客户端就可以入网，根本没有限制。谁能出新块完全取决于共识算法。&lt;/li&gt;
&lt;li&gt;去中心化，每个人都是客户端，每个人也都是服务端，每个人都拿着所有人的账本，所以这是完全的去中心化。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;区块链的去中心化是真正的去中心化，没有管理员，唯一一种有效的攻击手段就是拿到51%以上的算力，这在现在这么多人参与的情况下几乎是不可能的。而且，这种攻击仅仅能拿来控制新出块的内容，并不能改动之前的老块。&lt;/p&gt;</description>
    </item>
    <item>
      <title>30行不到自动下载Tumblr小姐姐</title>
      <link>https://blog.zjyl1994.com/post/tumbler_spider/</link>
      <pubDate>Thu, 05 Apr 2018 22:31:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/tumbler_spider/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Tumblr是个好东西，上面有很多漂亮小姐姐。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在Tumblr的海洋里遨游，总会有几个对胃口的博客。如果你想下载里面的图片，应该怎么下呢？
普通人肯定是手动一张一张另存为啦。但是你要知道有的博客里会有几千张甚至几万张照片哦，你不会想一个一个手动来吧。 XD&lt;/p&gt;
&lt;p&gt;这个时候就要请出Python了！&lt;/p&gt;
&lt;p&gt;Python不用我过多介绍了吧，就是一个编程语言。嗯，这个东西很简单，要学的话教程网上很多，有英文基础就可以了（其实关键词就那几个，不会英文也能学啦。&lt;/p&gt;
&lt;p&gt;要爬Tumblr的图片，首先要知道Tumblr的图片地址，正常来说需要我们解析网页然后抓取HTML中的jpg路径。但是，Tumblr这个好心的家伙居然给了API！&lt;/p&gt;</description>
    </item>
    <item>
      <title>爱沙尼亚电子公民计划</title>
      <link>https://blog.zjyl1994.com/post/e-residency/</link>
      <pubDate>Mon, 26 Mar 2018 22:11:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/e-residency/</guid>
      <description>&lt;p&gt;最近一直在研究爱沙尼亚的电子公民计划，感觉很有意思，把我整理的这些东西写出来，希望对后人有用。&lt;/p&gt;
&lt;p&gt;首先，爱沙尼亚电子公民是2014年发布的一个项目。爱沙尼亚这个国家曾经是苏联加盟国，本来是个独立国家，40年被苏联强行吞并，90年获得独立，然后现在是欧盟和北约成员国。爱沙尼亚的国旗也很好看，蓝黑白三色旗，辨识度很高很独特。爱沙尼亚域名后缀.ee，国际区号+372，首都塔林。&lt;/p&gt;
&lt;p&gt;爱沙尼亚有发达的线上政务系统，用电子身份证可以在线办理很多很多的业务。甚至开公司都不用出门，直接线上就能办理。也正是因为有这个系统，才能搞电子公民这套东西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用UWF保护电脑免遭全家桶</title>
      <link>https://blog.zjyl1994.com/post/ufw/</link>
      <pubDate>Tue, 27 Feb 2018 22:48:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/ufw/</guid>
      <description>&lt;p&gt;春节回家，几乎是修了好几天电脑。没有办法，现在国产全家桶实在是太厉害了，你随便搜个想要的软件，直接安装就会中各种全家桶。&lt;/p&gt;
&lt;p&gt;我回家在我爸的电脑里发现了各种播放器各种压，桌面被各种助手占据，悬浮窗五六个，还有时候被装上奇怪的输入法，安全软件也不止一份。&lt;/p&gt;
&lt;p&gt;对于我这种电脑从业人士来说，要想避开那些捆绑安装还是很轻松的，但是家里的普通人们就不一定了。他们习惯于缺少功能，就去百度搜一下，点击高速下载，然后中各种下载器。下载器下载的安装包装完推荐的各种勾也不取消直接点立即体验来打开所需要的应用。这不是教的问题，谁能指望五六十岁的长辈们和我们年轻人一样对各种电脑问题如此精通呢？&lt;/p&gt;
&lt;p&gt;为了解决这个问题，我想到了机房常用的还原卡。小学机房就有还原卡，做任何操作只要重启就会还原到老师刚装好的状态。但是还原卡第一是要买硬件产品，第二是笔记本没法装。经过苦苦搜索终于找到了适合Windows10的软件还原卡方法，不需要额外花钱买硬件，通吃所有设备。这一切只需要你有Windows10企业版或者教育版。（企业版实测通过，教育版据说也有这个功能）（Windows其他版本升级到企业版只需要安装企业版密钥并进行激活即可。）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang采集系统信息</title>
      <link>https://blog.zjyl1994.com/post/psutil/</link>
      <pubDate>Wed, 31 Jan 2018 15:58:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/psutil/</guid>
      <description>&lt;p&gt;一直以来就想做一个可以显示服务器信息的集中式监控页面。经过两三天艰苦努力终于放弃(前端实现地图上展示信息太难了。&lt;/p&gt;
&lt;p&gt;虽然对应的前端做不出来，但是对应的信息采集后端已经写好并且可以使用，为了不浪费我的成果，在这贴出来。你们谁要是写个对应的前端的话，请务必通知我。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客自动部署系统Shell版</title>
      <link>https://blog.zjyl1994.com/post/blogdeployshell/</link>
      <pubDate>Thu, 25 Jan 2018 11:28:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/blogdeployshell/</guid>
      <description>&lt;p&gt;这是用bash脚本+Crontab结合的自动部署，只依赖md5deep包。&lt;/p&gt;
&lt;p&gt;建议设置2-3分钟一次，以免影响性能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客自动部署系统</title>
      <link>https://blog.zjyl1994.com/post/blogdeploy/</link>
      <pubDate>Thu, 25 Jan 2018 01:32:00 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/blogdeploy/</guid>
      <description>&lt;p&gt;静态网站生成器是一个很好用的东西，问题就是他没有控制面板，就会带来一个问题。&lt;/p&gt;
&lt;p&gt;你每次写完文章都要手动去ssh里build一次网站，对于能懒就懒的我来说，这么弄不行。&lt;/p&gt;
&lt;p&gt;传统的实现方式是Git+Hook，这种就需要用Git，很不方便。
我选择的方案是 Nextcloud 直接编辑文件，inofity监听文件变化进行更新。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客2.0</title>
      <link>https://blog.zjyl1994.com/post/blogrebuild/</link>
      <pubDate>Wed, 24 Jan 2018 13:48:56 +0800</pubDate>
      <guid>https://blog.zjyl1994.com/post/blogrebuild/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Hugo 是个不错的静态网站生成器&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;早前博客都用的Wordpress，然后做迁移，数据就没了，我还没备份。年年新建&lt;/p&gt;
&lt;p&gt;中间过渡的时候用过一阵Blogger，但是好多国内朋友都没法访问，就很皮。&lt;/p&gt;
&lt;p&gt;重新配了一个Hugo的博客，挂在洛杉矶的服务器上，就当是从头开始了。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
