Skip to content

Commit d787808

Browse files
committed
📝修改NAS功耗部分 IO-01/Blog@589c9bf
1 parent d5aaa19 commit d787808

File tree

4 files changed

+4
-4
lines changed

4 files changed

+4
-4
lines changed

index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.111.1"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/0j3l/>自建NAS方案选型-硬件篇</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2023-01-13</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/homelab/ class="text-gray-500 mr-1">HomeLab</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>之前使用的是多年前很火的威联通 453Bmini,2000 块钱 4 盘位的成品 NAS,性价比很高,开箱即用。虽然很多人认为可用性不如群晖,但是我个人的使用不喜欢依赖某一个品牌的生态,大多是开源组装的,所以对我来说威联通和群晖没什么本质区别。慢慢的用途越来越多,这款 NAS 选用的 J3455 性能低下和硬盘无法休眠实在太吵成了我的困扰,特别在理清了我本身不需要任何成品 NAS 生态的需求后,自己组装一台 NAS 成了唯一选择。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/9qg5/>子线程更新 UI 全解</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2022-01-06</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a>
1+
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.111.3"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/0j3l/>自建NAS方案选型-硬件篇</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2023-01-13</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/homelab/ class="text-gray-500 mr-1">HomeLab</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>之前使用的是多年前很火的威联通 453Bmini,2000 块钱 4 盘位的成品 NAS,性价比很高,开箱即用。虽然很多人认为可用性不如群晖,但是我个人的使用不喜欢依赖某一个品牌的生态,大多是开源组装的,所以对我来说威联通和群晖没什么本质区别。慢慢的用途越来越多,这款 NAS 选用的 J3455 性能低下和硬盘无法休眠实在太吵成了我的困扰,特别在理清了我本身不需要任何成品 NAS 生态的需求后,自己组装一台 NAS 成了唯一选择。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/9qg5/>子线程更新 UI 全解</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2022-01-06</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a>
22
<a href=https://blog.io01.xyz/tags/%E6%BA%90%E7%A0%81/ class="text-gray-500 mr-1">源码</a></div></div><div class="summary-item prose max-w-none"><h2 id=子线程更新-ui-异常设计理念及简单源码解析>子线程更新 UI 异常设计理念及简单源码解析</h2><p>初学者可能会犯在子线程更新 UI 的错误,例如:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-kotlin data-lang=kotlin><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>thread { imageView.setBackgroundColor(<span style=color:#50fa7b>Color</span>.RED) }
33
</span></span></code></pre></div><p>一旦运行,应用会直接崩溃并抛出异常,这也是我们 Android 开发的一条铁律:<em>在子线程中不能更新 UI</em></p><p>那么为什么 Android 不让子线程更新 UI 呢?原因在于现在屏幕刷新率最低是 60Hz,意味着最多每 16ms 就会刷新一次屏幕,所以 UI 更新要尽可能快速,否则会丢帧导致卡顿。那么 UI 更新操作就不能加锁,频繁的加锁释放锁可能会延长 UI 渲染时间,但是不加锁如果允许子线程更新 UI 会导致多个线程对 UI 同时更新,造成线程不安全而导致 UI 最终效果无法想象,所以 Android 直接限制了子线程更新 UI,实际上不只是 Android 有这种限制,常见的 UI 框架基本都是单线程模型。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/hq29/>使用阿里云效同步 Git 仓库到 Github</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-11-29</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/%E6%9D%82%E9%A1%B9/ class="text-gray-500 mr-1">杂项</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>有时 Github 网络的不稳定性实在令人头痛,push 总是失败,而且需要把主仓库放在 Github 而非 Gitee 等国内平台,虽然可以通过配置代理进行,不过也可以曲线救国,选择通过 push 到国内代码管理平台,然后通过 CI 平台自动推送到 Github。</p><p>阿里云效综合了代码仓库和 CI 平台,私有代码仓库免费,免费构建时间足够支撑我们这点小事,并且执行环境可以选香港保证了能 push 到 GitHub,所以选择了阿里云效。</p><p>理论上所有能通过 <code>git push</code> 触发 CI(CI 的基本操作了)并且基础环境存在 <code>git</code> 而且网络良好的平台都可以按照本文方法进行,甚至有更简单的比如 Gitlab 直接支持推送到 Github,至于本文为何没有选用 Gitlab,纯属个人偏好。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/6fn7/>深入源码排查 FLAG_ACTIVITY_NEW_TASK 导致的 Activity 无法正常启动</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-09-16</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/%E6%BA%90%E7%A0%81/ class="text-gray-500 mr-1">源码</a></div></div><div class="summary-item prose max-w-none"><h2 id=引言>引言</h2><p>众所周知 Android 中 Activity 有四种启动模式,决定了是否创建新的 Activity 实例或复用当前实例。但是实际上 Activity 的启动十分复杂,不单单是 <code>android:launchMode</code> 就能决定的,多个 Intent Flag 都能改变启动的行为模式,除此之外还会根据 <code>android:taskAffinity</code> 的值来判断对应任务栈是否存在。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/2aa2/>遵循 Google 应用指南的 Retrofit + Coroutine 封装</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-06-18</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/kotlin/ class="text-gray-500 mr-1">Kotlin</a>
44
<a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>Retrofit 从 2.6.0 以后对 Kotlin 协程提供了原生支持,使得异步请求从写法上更像同步调用,配合 Google 出的 Jetpack 全家桶可以使得网络请求更加优雅简单,而且可以完全遵循 Google 给出的应用架构指南。</p><p>另外我们有一个更加多样的需求:我们的应用使用了多套服务接口,每套接口返回的参数模板不同,baseUrl 则更多样化,因此带来了更复杂的封装逻辑。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="my-2 flex w-screen justify-center"><span class="mx-3 sm:mx-4 font-semibold text-sky-400 underline underline-offset-4 decoration-2">1</span>

page/2/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.111.1"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/53aj/>时间格式化的趣事:YYYY 示年</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2020-02-27</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/java/ class="text-gray-500 mr-1">Java</a></div></div><div class="summary-item prose max-w-none"><h2 id=引言>引言</h2><p>2019 年 12 月 29 到 31 日在格式化时间时出现了一个有趣的小 bug:比如 2019 年 12 月 31 日时间戳有可能会被格式化成:2020-12-31。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/33dn/>MD5 计算前导 0 丢失问题</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2020-01-20</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/java/ class="text-gray-500 mr-1">Java</a></div></div><div class="summary-item prose max-w-none"><h2 id=现象>现象</h2><p>我们使用 Java 生成 MD5 时常用的写法如下:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8be9fd;font-style:italic>private</span> <span style=color:#8be9fd;font-style:italic>static</span> String <span style=color:#50fa7b>md5</span><span style=color:#ff79c6>(</span>String data<span style=color:#ff79c6>)</span> <span style=color:#8be9fd;font-style:italic>throws</span> NoSuchAlgorithmException <span style=color:#ff79c6>{</span>
1+
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.111.3"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/53aj/>时间格式化的趣事:YYYY 示年</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2020-02-27</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/java/ class="text-gray-500 mr-1">Java</a></div></div><div class="summary-item prose max-w-none"><h2 id=引言>引言</h2><p>2019 年 12 月 29 到 31 日在格式化时间时出现了一个有趣的小 bug:比如 2019 年 12 月 31 日时间戳有可能会被格式化成:2020-12-31。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/33dn/>MD5 计算前导 0 丢失问题</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2020-01-20</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/java/ class="text-gray-500 mr-1">Java</a></div></div><div class="summary-item prose max-w-none"><h2 id=现象>现象</h2><p>我们使用 Java 生成 MD5 时常用的写法如下:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8be9fd;font-style:italic>private</span> <span style=color:#8be9fd;font-style:italic>static</span> String <span style=color:#50fa7b>md5</span><span style=color:#ff79c6>(</span>String data<span style=color:#ff79c6>)</span> <span style=color:#8be9fd;font-style:italic>throws</span> NoSuchAlgorithmException <span style=color:#ff79c6>{</span>
22
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> MessageDigest md <span style=color:#ff79c6>=</span> MessageDigest<span style=color:#ff79c6>.</span><span style=color:#50fa7b>getInstance</span><span style=color:#ff79c6>(</span><span style=color:#f1fa8c>&#34;MD5&#34;</span><span style=color:#ff79c6>);</span>
33
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> md<span style=color:#ff79c6>.</span><span style=color:#50fa7b>update</span><span style=color:#ff79c6>(</span>data<span style=color:#ff79c6>.</span><span style=color:#50fa7b>getBytes</span><span style=color:#ff79c6>());</span>
44
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#ff79c6>return</span> <span style=color:#ff79c6>new</span> BigInteger<span style=color:#ff79c6>(</span><span style=color:#bd93f9>1</span><span style=color:#ff79c6>,</span> md<span style=color:#ff79c6>.</span><span style=color:#50fa7b>digest</span><span style=color:#ff79c6>()).</span><span style=color:#50fa7b>toString</span><span style=color:#ff79c6>(</span><span style=color:#bd93f9>16</span><span style=color:#ff79c6>);</span>

0 commit comments

Comments
 (0)