<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>折腾 on WWayne&#39;s Blog</title>
		<link>https://blog.wenb.in/tags/%E6%8A%98%E8%85%BE/</link>
		<description>Recent content in 折腾 on WWayne&#39;s Blog</description>
		<generator>Hugo</generator>
		<language>zh-CN</language>
		
		
		
		
			<lastBuildDate>Tue, 10 Mar 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://blog.wenb.in/tags/%E6%8A%98%E8%85%BE/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Miniflux as Reeder</title>
				<link>https://blog.wenb.in/posts/2026-03-10_%E7%BB%99miniflux%E5%8A%A0%E4%BA%86%E4%B8%AAreeder%E6%89%8D%E6%9C%89%E7%9A%84%E5%8A%9F%E8%83%BD/</link>
				<pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2026-03-10_%E7%BB%99miniflux%E5%8A%A0%E4%BA%86%E4%B8%AAreeder%E6%89%8D%E6%9C%89%E7%9A%84%E5%8A%9F%E8%83%BD/</guid>
				<description>&lt;p&gt;从 Reeder 迁移到 Miniflux 大概是去年的事。理由很简单：Reeder 只在 Apple 生态里活着，而我越来越需要在 Windows 和 Linux 上也能刷 RSS。自建 Miniflux，浏览器打开就能用，这件事本身没什么好说的。&lt;/p&gt;&#xA;&lt;p&gt;但有一个功能一直让我有点别扭。&lt;/p&gt;&#xA;&lt;p&gt;Reeder 里有个手势，长按某条条目，会弹出「标记此条及以上为已读」。这在实际用起来非常顺手——早上堆了一堆，往下翻到昨天看过的地方，长按一下，上面全消。干净。Miniflux 没有这个，每次要么全部标为已读（太粗暴），要么一条条点（太麻烦）。&lt;/p&gt;&#xA;&lt;p&gt;忍了挺久。前几天终于坐下来看了一眼能不能自己加。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Miniflux 有个功能叫 Custom JavaScript，在设置里，可以往每个页面注入自定义脚本。这给了很大的空间。&lt;/p&gt;&#xA;&lt;p&gt;思路其实不复杂：监听右键（桌面）和长按（手机），在条目上触发时弹出一个自定义菜单，点击后调用 Miniflux 内置的接口批量标记已读。&lt;/p&gt;&#xA;&lt;p&gt;接口本身不需要 API Key，Miniflux 页面里已经把 CSRF token 放在 &lt;code&gt;document.body.dataset.csrfToken&lt;/code&gt; 里，批量标记的 URL 也能从页面 DOM 里找到（&lt;code&gt;entriesStatusUrl&lt;/code&gt;）。换句话说，权限问题已经解决了，剩下的只是怎么触发。&lt;/p&gt;&#xA;&lt;p&gt;桌面端比较简单，监听 &lt;code&gt;contextmenu&lt;/code&gt; 事件，阻止默认菜单，显示自己的就好。&lt;/p&gt;&#xA;&lt;p&gt;手机端麻烦一点。长按在 iOS 上会和系统的文字选择、链接预览冲突。解决方法是两步：CSS 加上 &lt;code&gt;-webkit-touch-callout: none&lt;/code&gt; 禁掉系统的长按菜单，然后事件监听要用 &lt;code&gt;passive: false&lt;/code&gt; 加上 &lt;code&gt;preventDefault()&lt;/code&gt;，才能真正拦住系统行为。调试这个花了点时间，主要是第一次忘了 &lt;code&gt;passive: false&lt;/code&gt;，死活没效果。&lt;/p&gt;&#xA;&lt;p&gt;最终的逻辑大概是这样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 注入到 Miniflux Custom JavaScript&#xA;&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 class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;longPressTimer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;LONG_PRESS_MS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getEntryId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;article&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;closest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;article[data-id]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;article&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;article&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getAllEntryIds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;article[data-id]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&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 class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;markAboveAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;targetId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ids&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getAllEntryIds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;indexOf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;targetId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;toMark&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrfToken&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;csrfToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;entriesStatusUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&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;nx&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;csrfToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;application/x-www-form-urlencoded&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;X-Csrf-Token&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrfToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;URLSearchParams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;read&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;entryIDs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;toMark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&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 class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;toMark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forEach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;el&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`article[data-id=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34;]`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;opacity&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;0.4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&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;&#xA;&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;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;showMenu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;targetId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.custom-ctx-menu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forEach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;custom-ctx-menu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cssText&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`position:fixed;z-index:9999;background:#fff;border:1px solid #ccc;&#xA;&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;sb&#34;&gt;      border-radius:6px;padding:6px 0;box-shadow:0 4px 12px rgba(0,0,0,.15);font-size:14px;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&amp;lt;div style=&amp;#34;padding:8px 16px;cursor:pointer;white-space:nowrap&amp;#34;&amp;gt;标记此条及以上为已读&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;markAboveAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;targetId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;left&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Math&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerWidth&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;220&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;px`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;top&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Math&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHeight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;px`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;dismiss&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;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&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;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;removeEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;dismiss&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;setTimeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;dismiss&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// 桌面右键&#xA;&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;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;contextmenu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getEntryId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&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;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;preventDefault&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;showMenu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// 移动端长按&#xA;&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;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;touchstart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getEntryId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&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;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;touch&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;touches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;longPressTimer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;setTimeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;showMenu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;touch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;touch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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 class=&#34;nx&#34;&gt;LONG_PRESS_MS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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 class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;passive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;touchend&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;clearTimeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;longPressTimer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;touchmove&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;clearTimeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;longPressTimer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// 禁用 iOS 系统长按菜单&#xA;&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;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;style&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textContent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;article { -webkit-touch-callout: none; }&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&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;&#xA;&lt;p&gt;贴进去，保存，刷新。右键一条条目，菜单出来了。手机上长按，也出来了。&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenClaw 装好了然后呢</title>
				<link>https://blog.wenb.in/posts/2026-03-03_openclaw%E8%A3%85%E5%A5%BD%E4%BA%86%E7%84%B6%E5%90%8E%E5%91%A2/</link>
				<pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2026-03-03_openclaw%E8%A3%85%E5%A5%BD%E4%BA%86%E7%84%B6%E5%90%8E%E5%91%A2/</guid>
				<description>&lt;p&gt;OpenClaw 最近热起来了。&lt;/p&gt;&#xA;&lt;p&gt;朋友圈开始有人转，各种保姆级教程也冒出来了。&lt;!-- more --&gt;&lt;/p&gt;&#xA;&lt;p&gt;我把 Surface 从书架上搬下来折腾的那几天，大概花了一个下午才把配置弄通。报错、翻 Issues、改 JSON、重启 gateway，这些事一件一件来，烦，但也一件一件搞清楚了。agent 和 channel 是什么关系、binding 怎么匹配、heartbeat 是干嘛用的——这些东西不是文档直接告诉你的，是折腾出来的。&lt;/p&gt;&#xA;&lt;p&gt;跑起来之后，真正花时间的是另一件事：想清楚自己要它做什么。&lt;/p&gt;&#xA;&lt;p&gt;帮我盯哪些消息？接哪些服务进来？什么时候主动找我、什么时候不要打扰我？这些问题没有默认答案，得自己想，想完了写进配置，跑一段时间发现不对，再改。&lt;/p&gt;&#xA;&lt;p&gt;有点像养一只新来的动物。光把它带回家，给它一个窝，不够的。&lt;/p&gt;&#xA;&lt;p&gt;OpenClaw 多出来的那部分能力，是需要你主动去接的——接进你的工作流，接进你每天真实在做的事里。这个过程，比安装难。&lt;/p&gt;&#xA;&lt;p&gt;如果连安装都磕磕绊绊的话，后面的事，大概率也不会发生。&lt;/p&gt;</description>
			</item>
			<item>
				<title>一台旧 Surface、一只叫秋的狗，和我的 AI 助手</title>
				<link>https://blog.wenb.in/posts/2026-02-25_%E6%97%A7surface%E8%A3%85linux%E9%83%A8%E7%BD%B2ai%E5%8A%A9%E6%89%8B/</link>
				<pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2026-02-25_%E6%97%A7surface%E8%A3%85linux%E9%83%A8%E7%BD%B2ai%E5%8A%A9%E6%89%8B/</guid>
				<description>&lt;p&gt;家里有一台吃灰的 Surface Laptop，Intel 第十代 i7-1065G7，16GB 内存，468GB NVMe SSD。买来陪我度过了几年 Windows 时光，后来慢慢被主力机取代，就这么搁着。&lt;/p&gt;&#xA;&lt;p&gt;前阵子突然想：与其让它继续积灰，不如折腾一下。&lt;!-- more --&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;装-linux&#34;&gt;装 Linux&lt;/h2&gt;&#xA;&lt;p&gt;Surface 系列对 Linux 的支持历来是个老大难问题——触控板、触屏、相机、电源管理，各种小毛病。好在社区一直没放弃，&lt;a href=&#34;https://github.com/linux-surface/linux-surface&#34;&gt;linux-surface&lt;/a&gt; 项目专门维护了针对 Surface 设备的内核补丁。&lt;/p&gt;&#xA;&lt;p&gt;装的是 Ubuntu 24.04.4 LTS，内核换成 linux-surface 的定制版本（目前跑的是 &lt;code&gt;6.18.7-surface-1&lt;/code&gt;），步骤大致如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 添加 linux-surface 仓库密钥&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc &lt;span class=&#34;se&#34;&gt;\&#xA;&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; sudo apt-key add -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 添加软件源&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [arch=amd64] https://pkg.surfacelinux.com/debian release main&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&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; sudo tee /etc/apt/sources.list.d/linux-surface.list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装内核和固件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install linux-image-surface linux-headers-surface surface-ipts-firmware&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-grub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;重启之后，触控板顺滑了，休眠也正常了。这台老机器突然有了新生命。&lt;/p&gt;&#xA;&lt;h2 id=&#34;部署-openclaw&#34;&gt;部署 OpenClaw&lt;/h2&gt;&#xA;&lt;p&gt;机器活了，接下来是部署 &lt;a href=&#34;https://openclaw.ai&#34;&gt;OpenClaw&lt;/a&gt;——一个可以自托管的 AI 助手框架，支持接入各种大模型，通过 Discord、Telegram、Signal 等方式和你对话。&lt;/p&gt;</description>
			</item>
			<item>
				<title>KindlePaperwhiteHacks</title>
				<link>https://blog.wenb.in/posts/2014-02-19_kindlepaperwhitehacks/</link>
				<pubDate>Wed, 19 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2014-02-19_kindlepaperwhitehacks/</guid>
				<description>&lt;p&gt;**恢复出厂状态：**Perform a factory reset (Settings -&amp;gt; Reset device)&lt;br&gt;&#xA;Re-install the official 5.3.1 update&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;越狱：&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.mobilerea&#34;&gt;https://www.mobilerea&lt;/a&gt;&lt;!-- more --&gt;d.com/forums/showthread.php?t=186645&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;删除多余语言文件：&lt;/strong&gt;&lt;br&gt;&#xA;/etc/upstart/framework stop&lt;br&gt;&#xA;cd /opt/amazon/ebook/lib&lt;br&gt;&#xA;mkdir -p /mnt/us/.backup/opt/amazon/ebook/lib&lt;br&gt;&#xA;mv *de_DE.jar /mnt/us/.backup/opt/amazon/ebook/lib/&lt;br&gt;&#xA;mv *es_ES.jar /mnt/us/.backup/opt/amazon/ebook/lib/&lt;br&gt;&#xA;mv *fr_FR.jar /mnt/us/.backup/opt/amazon/ebook/lib/&lt;br&gt;&#xA;mv *it_IT.jar /mnt/us/.backup/opt/amazon/ebook/lib/&lt;br&gt;&#xA;mv *pt_BR.jar /mnt/us/.backup/opt/amazon/ebook/lib/&lt;br&gt;&#xA;/etc/upstart/framework start&lt;br&gt;&#xA;sync&lt;br&gt;&#xA;sync&lt;br&gt;&#xA;sync&lt;br&gt;&#xA;reboot&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;关闭索引，修改虚拟机内存：&lt;/strong&gt;&lt;br&gt;&#xA;编辑/etc/upstart目录中的framework文件，找到 DENABLE_SEARCH_INDEXING_THREAD=true 行，将true改为false；&lt;br&gt;&#xA;在此文件上面找-Xmx20m，改成-Xmx30m，增加虚拟机内存。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;禁止OTA:&lt;/strong&gt;&lt;br&gt;&#xA;编辑 /etc/upstart/ota-update.conf，在source/etc/upstart/functions下面添加&lt;br&gt;&#xA;############## DISABLE OTA UPDATES ##############&lt;br&gt;&#xA;if [ -e &amp;ldquo;/mnt/us/DISABLE_OTA&amp;rdquo; ]&lt;br&gt;&#xA;then&lt;br&gt;&#xA;f_log E ota-update check &amp;quot;&amp;quot; &amp;ldquo;####################################################&amp;rdquo;&lt;br&gt;&#xA;f_log E ota-update check &amp;quot;&amp;quot; &amp;ldquo;# UPDATES DISABLED in /etc/upstart/ota-update.conf #&amp;rdquo;&lt;br&gt;&#xA;f_log E ota-update check &amp;quot;&amp;quot; &amp;ldquo;# REMOVE FILE /mnt/us/DISABLE_OTA (in USB root) #&amp;rdquo;&lt;br&gt;&#xA;f_log E ota-update check &amp;quot;&amp;quot; &amp;ldquo;####################################################&amp;rdquo;&lt;br&gt;&#xA;return $ERR_LOW_BAT&lt;br&gt;&#xA;fi&lt;br&gt;&#xA;############## DISABLE OTA UPDATES ##############&lt;br&gt;&#xA;如果要禁用OTA，那么在usb链接kindle后，在根目录放一个DISABLE_OTA就好了&lt;/p&gt;</description>
			</item>
			<item>
				<title>KindlePaperwhite变砖修复记录</title>
				<link>https://blog.wenb.in/posts/2014-02-19_kindlepaperwhite%E5%8F%98%E7%A0%96%E4%BF%AE%E5%A4%8D%E8%AE%B0%E5%BD%95/</link>
				<pubDate>Wed, 19 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2014-02-19_kindlepaperwhite%E5%8F%98%E7%A0%96%E4%BF%AE%E5%A4%8D%E8%AE%B0%E5%BD%95/</guid>
				<description>&lt;p&gt;一切都是英文字体 Tisa Mobi Pro 惹得祸。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf0.ph.126.net/ldF-ke8nAAH-pbqJGwrclw==/1590896568385771146.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;这是instapaper附带的一款字体，看起来似&lt;!-- more --&gt;乎比Kindle自带字体 Caecilia 更加适合阅读。当然如果仅仅使用 “USE_ALT_FONT”大法把新字体扔进去也没有任何问题，但强迫症患者却不满足于此，详见&lt;a href=&#34;https://syslog.lofter.com/post/bc649_dfaf3c&#34;&gt;另一篇博文&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;在编辑字体配置文件的时候，出错了，最终结果就是导致了 Kindle Paperwhite “卡大树“了，一直停留在小童树下看书的画面。Kindle Paperwhite通体只有一个电源按键，不管按何种时间（15s/30s/60s/120s）均无任何反应，可以断定是挂了，需要拆机维修。&lt;a href=&#34;https://www.izheteng.com/teardown/fix-kindle-paperwhite.html&#34;&gt;这篇文章&lt;/a&gt;详细记录了维修方法，当然如果你完全按照文中提到的方式是绝对可以修复的，但是相信很多朋友跟我一样，看到拆机的步骤，咬咬牙也就过去了，不过看到需要使用电烙铁，估计就尿了。经过我的实践，无需烙铁也是可以顺利维修的，下面是我的维修记录。&lt;/p&gt;&#xA;&lt;p&gt;首先是工具准备，TTL-USB转接器是必不可少的，而且必须是1.8v的，淘宝似乎只有一款，要价30多的那款就是。撬棒建议要备一根，否则拆机过程中会对机器外壳有严重的损伤。另外，Kindle Paperwhite所有的十字螺丝都是#00号的，要是你能看到这篇文章，基本上说明你已经有这款了，无需购买。我购买的物品如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf1.ph.126.net/koaut9bEvH7QSDZjbbFA8A==/6597962570100188551.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://imglf0.ph.126.net/4GLhc-ekRx7IW0Yf2-s1uQ==/1821706049371486995.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://imglf1.ph.126.net/HOGgq_cnKlIASfp3rDWL5A==/3065262496397101444.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;对了，别忘了导线，对于不用烙铁的我们，导线越细越软越好。经过我的实践，普通网线不适合，耳机线不适合，最后我使用了一条普通RS232串口线中的铜线。&lt;/p&gt;&#xA;&lt;p&gt;材料准备完毕，下面开始拆机。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf5.lf127.net/img/RXh1WFV3cG95ZEEwMkFTWTJKakhlbkhhQUlmNXhLRXdLMmhQZFB6RExRWXBKdjJLNTc2d0N3PT0.jpg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;建议在这个寒冷的冬天，先用吹风机将机器面板四周多吹吹，会降低你拆面板的难度和对机器的破坏。接着在你的机器前面板找到最大的缝隙，然后用撬棒果断插入吧少年。尽量不要破坏到面板上的双面胶带，它的黏性很强，如果没有让它解除过多的灰尘的话，那么在最后修复完毕合体的时候就无需使用新的胶带了。 拆掉面板后，卸掉11颗螺丝，就能看到做工精良的机器内部主体了。&lt;/p&gt;&#xA;&lt;p&gt;接下来是布线。关于线脚的定义和连接，另一篇文章也说的很清楚了，特别注意，GND &amp;lt;-&amp;gt; Ground、&lt;strong&gt;Tx &amp;lt;-&amp;gt; Rx&lt;/strong&gt;、&lt;strong&gt;Rx &amp;lt;-&amp;gt; Tx&lt;/strong&gt;。下面谈谈不用烙铁的连线方案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf6.lf127.net/img/RXh1WFV3cG95ZEEwMkFTWTJKakhldTNaeGFtMTVyMHl0SjZYWHk0T0lOYUVxQjJOeXZsZDBnPT0.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf6.lf127.net/img/RXh1WFV3cG95ZEEwMkFTWTJKakhlb2ZoTU44NHh4TklTSmk1UVp3SG14VDZJeTY1VzhBdlBBPT0.jpg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;因为没有烙铁固定，需要摆好机器位置，用胶带固定好导线，让导线的位置与两个线脚的位置对应，做到按下去能恰好接触同时不能引起短路。这一步之整个维修过程中最困难的一步，而且没有技巧，只能一次一次的去调整。当然，非要说技巧，也有一个经验之谈。另一篇教程提到，连好导线，按电源键重启，可是你需要按15s。如果是用烙铁固定了导线，倒是没有任何问题，倒在我们的场景当中，按电源键15s可能导致的结果就是机器发生了轻微的移动，我们好不容易接触好的导线再次错位导致失去连接。我推荐的方式是把电池卸载下来，无非是多拆3颗螺丝。按下电池即是开机，非常快捷，无痛。&lt;/p&gt;&#xA;&lt;p&gt;接下来谈谈SecureCRT，它害了我蛮久。有这样一个情况，如果你在第一次连接机器时，没有接触好触点，在SecureCRT里，你无法看到任何输出。但是即使接下来你的接触是OK的，重启设备后仍然是不会有输出的，不管你试多少次。所以，如果你这一次连接失败，没有看到输出。接下来重试的时候，不能仅仅关注连线，SecureCRT重新打开，重新连接串口，否则你永远不会看到输出。&lt;/p&gt;&#xA;&lt;p&gt;下面是维修完毕的Kindle Paperwhite，完好如处：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imglf3.lf127.net/img/RXh1WFV3cG95ZEQwM2xnMVViY1VvbzhXL2h3TTh6bi9BdXJ1eldtTTcxTzhhYytBL1JrTVJ3PT0.jpg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://imglf6.lf127.net/img/RXh1WFV3cG95ZEEwMkFTWTJKakhlZ3ZoUHlLMndTWkxZcStxZkM0WTB2S1VlRHhOMmkwbjl3PT0.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最后，对于那些无力自行修复的朋友，我提供&lt;a href=&#34;https://item.taobao.com/item.htm?id=37311775213&#34;&gt;&lt;strong&gt;有偿&lt;/strong&gt;维修&lt;/a&gt;，可以联系我，新浪微博 @人面兽衣 。 &lt;/p&gt;</description>
			</item>
			<item>
				<title>Nook2折腾笔记，折腾之后，是安逸</title>
				<link>https://blog.wenb.in/posts/2011-11-27_nook2%E6%8A%98%E8%85%BE%E7%AC%94%E8%AE%B0%E6%8A%98%E8%85%BE%E4%B9%8B%E5%90%8E%E6%98%AF%E5%AE%89%E9%80%B8/</link>
				<pubDate>Sun, 27 Nov 2011 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2011-11-27_nook2%E6%8A%98%E8%85%BE%E7%AC%94%E8%AE%B0%E6%8A%98%E8%85%BE%E4%B9%8B%E5%90%8E%E6%98%AF%E5%AE%89%E9%80%B8/</guid>
				<description>&lt;p&gt;我喜欢看书。最早是看实体书，随后有了手机，在M65上用MicroReader看。在有了Meizu M6之后，在她上面看。然后有了SPV C600之后，用AlReader看，真是神器。然后就是在Android（HTC Magic）用iReader看书。工作之后，用iPad給&lt;!-- more --&gt;自己充电，看PDF真是方便。然而，渴望回归纸张的感觉和对电子产品的依赖让我对Eink向往不已。一直在等Kindle 4发布，准备购买。然后，在等待的过程中，发现越来越喜欢NOOK Simple Touch（以下简称NOOK2）。在Kindle 4发布后，没有想象中的美好，果断入了NOOK2。&lt;/p&gt;&#xA;&lt;p&gt;10月21日下单官翻，11月21日到手，到今天刚好一周。我也整整折腾了一周。在折腾的这几天中，我不断的问自己，我真在需要NOOK2给我提供什么？我的答案是静下心来阅读，真正的享受阅读。除了EPUB，扫描版的PDF也是我的常用书籍来源之一，所以需要NOOK2能够让我能够好好的看扫描PDF。另外需要NOOK2可以无线传书。是的，就两点，扫描PDF和无线传书。考虑到目前NOOK2上并没有一款合适的PDF阅读器，而有一款出色的漫画阅读器——Perfect Viewer，所以我的想法是将扫描PDF用坛子里的pdflrfwin转成6寸图片压缩包用PV来看（后来事实证明效果非常好）。&lt;/p&gt;&#xA;&lt;p&gt;下面是我的折腾步骤（都是来自于XDA论坛的帖子，来源就不一一注明了）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;恢复出厂状态（unroot）：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;让一切从新开始，需要分别reset系统分区（所谓的8次打断法）和数据分区（所谓三键恢复）。&lt;br&gt;&#xA;1、reset系统分区&lt;br&gt;&#xA;如果你没有root，或者无法用adb连接到设备，使用8次打断法，即在完全关机的状态下，按电源键3秒后松手，在闪屏后按电源键15秒松手，然后按电源键3秒后松手……如此8次后，再次按3秒开机后，设备会进入到restore factory的界面，等待她自动恢复重启即可。&lt;br&gt;&#xA;如果你已经root了，并且可以连上abd，那么敲入以下命令即可进入恢复界面：&lt;/p&gt;&#xA;&lt;p&gt;adb shell&lt;br&gt;&#xA;echo -n -e &amp;ldquo;\x08\x00\x00\x00&amp;rdquo; &amp;gt; /rom/devconf/BootCnt&lt;br&gt;&#xA;reboot&lt;/p&gt;&#xA;&lt;p&gt;2、reset数据分区&lt;br&gt;&#xA;依次点击“Settings”－“Device Settings”－“Device Info”－“Erase &amp;amp; Deregister Device”－“Reset Nook&amp;quot; button”即可。&lt;br&gt;&#xA;若提示失败，关机，开机，在闪屏后同时按住下面的两个翻页键15秒左右会有提示是否reset的画面，点击n键（两次）即可。&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;备份和还原：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;使用DiskImage（www.roadkil.net/program.php?ProgramID=12）来操作。备份系统可以确保你的设备不会因为软件原因而变砖。&lt;br&gt;&#xA;1、备份。用DiskImage将noogie.img写到TF卡（一定要通过读卡器）。将设备完全关闭，插卡，开机。在屏幕上出现了“root forever”之后插上数据线。然后用DiskImage将设备的整个磁盘写成一个img文件，小心保存这个img文件吧。&lt;br&gt;&#xA;2、恢复。同样的，用DiskImage将noogie.img写到TF卡（参见下面的root过程）（一定要通过读卡器）。将设备完全关闭，插卡，开机。在屏幕上出现了“root forever”之后插上数据线。用DiskGenius等磁盘分区管理软件读取NOOK2的分区信息，删除所有分区后，用DiskImage将你之前保存的img文件（或者从https://forum.xda-developers.com/showthread.php?t=1289233获取）写回到设备。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;root&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;root本身是一个非常简单的过程，只是替换了NOOK2上boot分区的ramdisk文件而已。&lt;br&gt;&#xA;1、准备好以个读卡器，一张128mb以上容量的TF卡，以个NOOK2，一台电脑。&lt;br&gt;&#xA;2、下载noogie.img.gz（https://www.multiupload.com/OFI609MP8V） 和uRamdisk_rooted（https://www.multiupload.com/WKLQHCT334）。&lt;br&gt;&#xA;3、下载win32imagewriter（https://launchpad.net/win32-image-writer/），将noogie.img通过读卡器写入到TF卡。&lt;br&gt;&#xA;4、将noogie卡插入到完全关机的NOOK2，再开机。会进入到显示“root forever”的界面。&lt;br&gt;&#xA;5、将NOOK2通过数据线连接电脑，电脑上会看到一个名称为boot的分区，将uRamdisk_rooted重命名为uRamdisk，替换该分区的同名文件。弹出设备，弹出TF卡。按电源键15秒关机。按电源键开机。&lt;br&gt;&#xA;6、电脑上安装adb（提取Android SDK中的几个文件即可，请自行搜索方法），打开adb，敲入以下命令：&lt;/p&gt;&#xA;&lt;p&gt;adb connect&lt;/p&gt;&#xA;&lt;p&gt;若提示成功连接，则说明root成功。&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;安装Superuser.apk、su和busybox（必须）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;光root一点意义都没有，此步骤是之后折腾的基础。假设你的adb放在“C:/android-sdk-windows/platform-tools”。&lt;br&gt;&#xA;1、下载Superuser.apk（https://nookdevs.com/images/a/a9/Superuser.zip）、su（https://nookdevs.com/images/e/e0/Su.zip）、busybox（https://www.megaupload.com/?d=VFEI8UIF）。都解压放在adb目录。&lt;br&gt;&#xA;2、执行以下命令以安装Superuser.apk和su：&lt;/p&gt;&#xA;&lt;p&gt;cd C:/android-sdk-windows/platform-tools&lt;br&gt;&#xA;adb connect yourNSTip&lt;br&gt;&#xA;adb install Superuser.apk&lt;br&gt;&#xA;adb push su /data/local/&lt;br&gt;&#xA;adb shell&lt;br&gt;&#xA;cd /system/bin&lt;br&gt;&#xA;mount -o remount,rw /dev/block/mmcblk0p5 /system&lt;br&gt;&#xA;cat /data/local/su &amp;gt; su&lt;br&gt;&#xA;chmod 6755 su&lt;br&gt;&#xA;reboot&lt;/p&gt;</description>
			</item>
			<item>
				<title>(转)折腾O2Joggler</title>
				<link>https://blog.wenb.in/posts/2010-12-01_%E8%BD%AC%E6%8A%98%E8%85%BEo2joggler/</link>
				<pubDate>Wed, 01 Dec 2010 00:00:00 +0000</pubDate>
				<guid>https://blog.wenb.in/posts/2010-12-01_%E8%BD%AC%E6%8A%98%E8%85%BEo2joggler/</guid>
				<description>&lt;p&gt;文/&lt;a href=&#34;https://www.freemindworld.com/blog/index.shtml&#34;&gt;李凡希&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sun, 21 Nov 2010&lt;/p&gt;&#xA;&lt;p&gt;由于我的[WD My Book World Edition](&lt;a href=&#34;https://www.freemindworld.com/bl&#34;&gt;https://www.freemindworld.com/bl&lt;/a&gt;&lt;!-- more --&gt;og/2009/090305_my_book_world_edition_hack.shtml)在内存升级过程中遇难，好友给我介绍了一个新玩具：O2 Joggler电子相框，它是一个&lt;a href=&#34;https://www.openpeak.com/&#34;&gt;OpenPeak&lt;/a&gt;给O2 OEM的产品。&lt;/p&gt;&#xA;&lt;p&gt;记得曾经&lt;a href=&#34;https://www.ftofficer.com/&#34;&gt;某人&lt;/a&gt;在拿到作为T公司20周年纪念品的电子相框后， 在第一时间把它大卸八块，然后失望的把它合起来——一个基于VCD芯片做的相框实在没有什么好折腾的。相比之下，O2 Joggler的硬件配置就很有折腾的余地：Intel Atom Z520 1.33 CPU, 512 RAM, 1G Flash, GMA500, 7寸800*480电容触摸屏, RT8169 1000M网卡, RA2870 802.11N无线网卡, 1 USB 2.0。而曾经在&lt;a href=&#34;https://www.hi-pda.com/forum/forumdisplay.php?fid=7&#34;&gt;HiPDA论坛&lt;/a&gt;上的团购价格已经低至450元。&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.bimg.126.net/photo/evVqkx8CrT4tnQJ6M63kuQ==/4022840367165548034.jpg&#34; alt=&#34;相机不在手头，就从网上找个图吧&#34;&gt;相机不在手头，就从网上找个图吧&#xA;虽然配置不错，不过很快就会发现它做什么东西都有软肋：做下载机要外接硬盘，做平板电脑用的话它没有电池，做车载多媒体设备的话它没有GPS和 3G模块，做高清播放盒吧它没有视频输出接口。我的目的还是用它做下载机，所以直接用硬盘底座外挂3.5寸硬盘，按着当年折腾My Book的方法折腾它。&lt;/p&gt;&#xA;&lt;p&gt;操作系统选择：理论上任何可以通过EFI引导的x86操作系统都可以。出于驱动的原因，目前比较完善的还是基于Ubuntu的GNU/Linux发行版，尤其是适合于Netbook的REMIX或者Mint，Android 2.2的工作还在&lt;a href=&#34;https://www.hi-pda.com/forum/viewthread.php?tid=691008&amp;amp;extra=page%3D1&#34;&gt;进行中&lt;/a&gt;。我还是选择了我最熟悉的Debian，虽然这也许不是个最好的选择。编译Linux Kernel需要的Patch在&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Kernel_Patches&#34;&gt;这里&lt;/a&gt;有个列表。Joggler自己有一个原生的定制过的GNU Linux操作系统，也可以用于实现各种应用，但各种前端应用都需要基于Flash来做。&lt;/p&gt;&#xA;&lt;p&gt;操作系统安装：网上有不少已经装好的镜象，可以直接用。对于我来说，则是用debootstrap装一个干净的Debian才会比较合我口味，大部分的工作可以参考JogglerWiki上的&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Installing_Debian_Squeeze&#34;&gt;这篇文章&lt;/a&gt;来 完成。目前，标准安装一个Debian + XFCE的桌面，基本上可以把大小控制在1G以内，这样就可以把操作系统放到Joggler内置的Flash中。当然，在实验各种系统时，还是先放在U盘 上外置引导会比较让人放心，因为这样完全不会动到原来的系统，就不致于把Joggler变成砖头。&lt;/p&gt;&#xA;&lt;p&gt;应用软件：反正是个标准的x86的GNU Linux，其它应用软件您该怎么装怎么装吧……从这个角度来说，Joggler太像一台真正的电脑了，所以反而也没有太多可以折腾的地方。&lt;/p&gt;&#xA;&lt;p&gt;目前Joggler相关的资料比较完整的地方是&lt;a href=&#34;https://jogglerwiki.info/&#34;&gt;JogglerWiki&lt;/a&gt;，我在这里索引一下比较有用的一些信息。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=KjMLUIoYQm4&amp;amp;feature=player_embedded&#34;&gt;拆机视频&lt;/a&gt;：拆机可以把USB无线网卡拨掉换成个大U盘内置，可以接出&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Additional_USB_Ports&#34;&gt;更多USB口&lt;/a&gt;，可以&lt;a href=&#34;https://jogglerwiki.info/index.php?title=CPU_Heatsink_Replacement&#34;&gt;换CPU散热片&lt;/a&gt;（目前相框的支架就是CPU的散热装置，最好别把它拆了），&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Adding_a_PATA_port&#34;&gt;加装ZIF接口的PATA硬盘&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Joggler的有线网卡没有MAC地址，必须用&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Fixing_network_issues&#34;&gt;软件设置&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;内置Flash跟外置的U盘一样可以引导系统，你可以用fdisk对它重新分区合并使用。但必须保持第一个分区是FAT的EFI的引导分区。&lt;a href=&#34;https://joggler.exotica.org.uk/wiki/Using_the_internal_flash_to_run_Linux_%28or_anything_else%29&#34;&gt;这里&lt;/a&gt;有些资料可以参考。Joggler不是很容易变砖的，实在你很不幸的把它变砖以后，还可以通过&lt;a href=&#34;https://jogglerwiki.info/index.php?title=Recovering_a_bricked_EFI&#34;&gt;热插拔EFI芯片&lt;/a&gt;解决。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;内置喇叭在闲置时可能会会轻微爆音，MS是由于CPU节能引起，&lt;a href=&#34;https://www.thinkwiki.org/wiki/Problem_with_high_pitch_noises&#34;&gt;解决方法&lt;/a&gt;有若干种，但好像不是每个人都说有效。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在我这里外置USB硬盘有时会出现异常断开的问题，这个问题对于下载机来说会非常致命，尤其如果系统是装在USB设备上的话，会直接导致系统死掉。目前的线索是一个Ubuntu的一个&lt;a href=&#34;https://bugs.launchpad.net/ubuntu/+source/linux/+bug/349767&#34;&gt;BUG报告&lt;/a&gt;，不过我还没有试成功，而最近几天这个问题却似乎没再出现。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;很多人报告Joggler发热量太大，70度以上后自动降频后慢到无法使用。但我这里没有出现过，温度一般在35-41度左右，长期开Flash应用(比如豆瓣电台)会升到51度。如果屏幕长期打开会更热一些。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在我的系统中，Google Chrome常常会导致系统完全死锁，不知道是不是跟&lt;a href=&#34;https://code.google.com/p/chromium/issues/detail?id=54617&#34;&gt;这个&lt;/a&gt;有关，总之我直接换用Firefox绕过了这个问题。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Joggler还有一个很不起眼的设备，那就是它顶上的一个光线传感器，加载i2c的模块后，可以用程序读它的数据，通常可以用来调整屏幕亮度用。相关代码在&lt;a href=&#34;https://code.google.com/p/adqmisc/source/browse/#svn/trunk/joggler&#34;&gt;这里&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;理论上Joggler的硬件配置播放1080p的高清视频是没有问题的，当然你需要自己编译一个&lt;a href=&#34;https://www.splitted-desktop.com/%7Egbeauchesne/mplayer-vaapi/&#34;&gt;VAPPI的mplayer&lt;/a&gt;。不过我这里实测结果是720p的视频播放基本问题不大，但1080p还是基本没戏，我对此表示无鸭梨，难道我真的需要在这么小的屏幕上放这么高清的视频么？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;目前我的Joggler在我这里是勤勤恳恳的运行rtorrent和amule-daemon做下载机，用cronjob打开豆瓣电台做闹钟。更多的应用就慢慢再开发了。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
