<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>小程的研发日常</title><link>https://zhelin.me/</link><description>小程的研发日常，分享 iOS、前端、Linux、RouterOS、Docker 等技术干货，以及开发经验、工具推荐与实用教程，帮助开发者高效学习与应用。</description><language>zh-CN</language><lastBuildDate>Thu, 11 Sep 2025 23:08:11 +0800</lastBuildDate><atom:link href="https://zhelin.me/index.xml" rel="self" type="application/rss+xml"/><item><title>snapDOM——新一代网页截图 PDF 生成方案</title><link>https://zhelin.me/post/8f412a886b1dffcb/</link><pubDate>Thu, 11 Sep 2025 23:08:11 +0800</pubDate><guid>https://zhelin.me/post/8f412a886b1dffcb/</guid><description>&lt;p&gt;在前端开发里，“DOM 截图 → 图片/文件导出” 是一个高频需求场景。无论是营销海报、报表导出、还是社交分享卡片，截图工具的体验直接决定了用户感受。&lt;/p&gt;</description></item><item><title>如何下载安装App Store应用旧版本教程</title><link>https://zhelin.me/post/2ad0bda53a4d7fdd/</link><pubDate>Mon, 01 Sep 2025 19:08:18 +0800</pubDate><guid>https://zhelin.me/post/2ad0bda53a4d7fdd/</guid><description>&lt;p&gt;很多iOS用户在使用应用时会遇到这样的情况：新版应用更新后，反而失去了某些实用功能，或者在旧设备上运行卡顿，还有就是线上出现了BUG，需要回滚老版本验证。这时候，下载&lt;strong&gt;旧版本 App&lt;/strong&gt;就显得尤为重要。本文将手把手教你在&lt;strong&gt;Mac电脑&lt;/strong&gt;上下载 iOS 应用的旧版本，并最终导入到设备中。&lt;/p&gt;</description></item><item><title>美女占位图生成器推荐：开发者专用 Placeholder Image Service</title><link>https://zhelin.me/post/255eab43d3457e40/</link><pubDate>Sun, 31 Aug 2025 12:25:00 +0800</pubDate><guid>https://zhelin.me/post/255eab43d3457e40/</guid><description>&lt;p&gt;在前端开发或者写作时，&lt;strong&gt;占位图（Placeholder Image）&lt;/strong&gt; 是必不可少的工具。它们能帮助我们快速测试布局、响应式设计和图片比例。很多人可能用过 &lt;a href="https://picsum.photos/"&gt;Lorem Picsum&lt;/a&gt; ，但这些工具大多提供的是风景图或者纯色方块，看久了难免单调。&lt;/p&gt;</description></item><item><title>掌握Linux防火墙：iptables与nftables详解</title><link>https://zhelin.me/post/281bb7afdc9b8a8f/</link><pubDate>Thu, 02 Nov 2023 15:09:11 +0800</pubDate><guid>https://zhelin.me/post/281bb7afdc9b8a8f/</guid><description>&lt;p&gt;在当今数字化时代，网络安全已经成为组织和个人日常生活中的一个至关重要的方面。随着互联网的普及，网络威胁和攻击的复杂性和频率也在不断增加。在这个背景下，强大的防火墙技术变得尤为关键，以保护我们的网络和数据免受未经授权的访问、恶意攻击和信息泄漏的威胁。&lt;/p&gt;</description></item><item><title>RouterOS 根据 Fake IP 分流至 Linux 旁路网关</title><link>https://zhelin.me/post/e4aba903f3826e7b/</link><pubDate>Sat, 28 Oct 2023 10:44:37 +0800</pubDate><guid>https://zhelin.me/post/e4aba903f3826e7b/</guid><description>&lt;p&gt;通过充分利用RouterOS的强大功能，我们可以探索自定义路由的各种协议，如BGP和OSPF，但这些方法可能在上手时有一些难度。在家庭网络中，使用这些协议会增加维护成本。很长一段时间以来，我一直依赖旁路网关和DHCP模式来满足上网需求。然而，我常常在思考是否有更简单且影响范围更小的上网方式。&lt;/p&gt;</description></item><item><title>RouterOS v7 通过 MAC 地址获取IPv6并上报至 DNSPod / CloudFlare</title><link>https://zhelin.me/post/7f5bdbb2857e15aa/</link><pubDate>Fri, 29 Sep 2023 15:51:48 +0800</pubDate><guid>https://zhelin.me/post/7f5bdbb2857e15aa/</guid><description>&lt;p&gt;在我将家里的主路由改为RouterOS后，始终找不到一个能完美更新内网设备IPv6的脚本，要么是通过EUI64转换的，要么就是端口转发，还有引入第三个设备，用别的语言去做DDNS的更新，这些方案虽然都能实现最终的效果，但无疑是增加了别的成本，而且不够优雅。RouterOS本身就支持的东西，为什么要舍近求远并？这并不是我的风格。&lt;/p&gt;</description></item><item><title>Docker管理工具Portainer重置密码</title><link>https://zhelin.me/post/55a64d40ffbb030d/</link><pubDate>Wed, 13 Sep 2023 00:00:33 +0800</pubDate><guid>https://zhelin.me/post/55a64d40ffbb030d/</guid><description>&lt;p&gt;使用Portainer忘记密码快速解决方案：&lt;/p&gt;&#10;&lt;p&gt;1、进入服务器后台&lt;/p&gt;&#10;&lt;p&gt;2、下载镜像：&lt;code&gt;portainer/helper-reset-password&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#838ba7"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo docker pull portainer/helper-reset-password&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>《敏捷革命》读后感</title><link>https://zhelin.me/post/a833d3d09b637363/</link><pubDate>Sat, 07 May 2022 22:03:52 +0800</pubDate><guid>https://zhelin.me/post/a833d3d09b637363/</guid><description>&lt;p&gt;在阅读《敏捷革命》之前，我一直不太能够全面的理解敏捷开发。也是通过阅读本书，了解了相关的知识。那么在这里，我会通过对本书的梳理，将我所了解到的知识点写下来。&lt;/p&gt;</description></item><item><title>TypeScript：Aho–Corasick算法实现敏感词过滤</title><link>https://zhelin.me/post/83e19b1a7821ce77/</link><pubDate>Fri, 07 Jun 2019 15:10:43 +0800</pubDate><guid>https://zhelin.me/post/83e19b1a7821ce77/</guid><description>&lt;p&gt;敏感词过滤应该是许多后端同事经常会遇到的需求，无论是评论、弹幕、文章，都需要做敏感词过滤处理来规避风险。在前端开发中，使用replace函数来替换字符串是我们的常规操作。在这之前我思考过如果用JavaScript来实现敏感词过滤该怎么做。在学习过程中，接触到了Trie树，瞬间有一种拨开云雾见青天的感觉。&lt;/p&gt;</description></item><item><title>简述Node.js内存限制</title><link>https://zhelin.me/post/c0b8cda398ddb4de/</link><pubDate>Sun, 06 May 2018 14:43:19 +0800</pubDate><guid>https://zhelin.me/post/c0b8cda398ddb4de/</guid><description>&lt;p&gt;前段时间在Ghost博客系统群与群友交流，谈到了Node内存管理的问题，发现很多小伙伴对Node内存管理完全处于一个“零认识”的状态，这可能与本身工作没有接触到相关，毕竟我们大多数工作可能与DOM打交道，当页面内存占用过多（可能性也很低），几乎不用等GC，用户已经刷新或关闭了网页。&lt;/p&gt;</description></item><item><title>再谈JavaScript作用域</title><link>https://zhelin.me/post/7b09e2961e9a9741/</link><pubDate>Sun, 22 Apr 2018 13:12:09 +0800</pubDate><guid>https://zhelin.me/post/7b09e2961e9a9741/</guid><description>&lt;p&gt;作用域，这个词在编程界经常能听到看到，每一个程序员几乎都有被问到过。在前端圈，面试JavaScript相关知识，这可以算说是一个非常基础的问题了。但早年间我长期陷入了一种“只可意会不可言传”的地步，我不知道是不是有许多小伙伴与我曾经有一样的经历，所以我就抽时间把书本中看到的东西整理了一下。把提炼的东西分享给大家。&lt;/p&gt;</description></item><item><title>CSS3硬件加速技巧</title><link>https://zhelin.me/post/2be74cd510d0545c/</link><pubDate>Sat, 18 Feb 2017 10:22:36 +0800</pubDate><guid>https://zhelin.me/post/2be74cd510d0545c/</guid><description>&lt;p&gt;使用3D硬件加速提升动画性能时，最好给元素增加一个z-index属性，人为干扰复合层的排序，可以有效减少chrome创建不必要的复合层，提升渲染性能，移动端优化效果尤为明显。&lt;/p&gt;</description></item><item><title>《JavaScript设计模式》学习笔记——发布订阅者模式</title><link>https://zhelin.me/post/5356825055f9b3a1/</link><pubDate>Thu, 22 Dec 2016 13:16:19 +0800</pubDate><guid>https://zhelin.me/post/5356825055f9b3a1/</guid><description>&lt;h2 id="发布订阅模式"&gt;发布订阅模式&lt;/h2&gt;&#10;&lt;p&gt;因前段时间业务需要使用到了观察者（Observer）模式，同时在使用的过程中，让我想起了Publish/Subscribe（发布/订阅）模式。起初感觉这两种模式非常相似，但是细细观察你会发现，Observer模式要求希望接收到主题通知的观察者（或对象）必须订阅内容改变事件。&lt;/p&gt;</description></item><item><title>从画一个圆开始——CSS圆角探秘（二）</title><link>https://zhelin.me/post/3513d4c34d05f768/</link><pubDate>Mon, 31 Oct 2016 07:58:19 +0800</pubDate><guid>https://zhelin.me/post/3513d4c34d05f768/</guid><description>&lt;p&gt;在上一篇《&lt;a href="https://zhelin.me/post/16a0ba1f57202a18/"&gt;从画一个圆开始——CSS圆角探秘（一）&lt;/a&gt;》中，我们重新了解border-radius的一些属性。我们画好了正圆，了解了圆角，难道border-radius的功能仅限于此吗？&lt;/p&gt;&#10;&lt;p&gt;我想并不是，就如同在上一篇文章中border-radius完美结合box-shodow形成多重圆角边框一样。也许还有其他属性与它结合，会产生不一样的效果与功能。&lt;/p&gt;</description></item><item><title>从画一个圆开始——CSS圆角探秘（一）</title><link>https://zhelin.me/post/16a0ba1f57202a18/</link><pubDate>Wed, 14 Sep 2016 23:35:07 +0800</pubDate><guid>https://zhelin.me/post/16a0ba1f57202a18/</guid><description>&lt;p&gt;这篇文章能够成型因为两个原因。一是团队内部的分享会，二是CSS魔法在2015年CSS Conf上的一次分享。也因为魔法哥的这次分享，深深的勾起了我对CSS深入了解的欲望。也促成了这篇文章的成型。&lt;/p&gt;</description></item></channel></rss>