<?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>HackonDocs</title><link>https://hiraethecho.github.io/docs/tags/hack/</link><description>Recent contentinHackonDocs</description><generator>Hugo --0.152.2</generator><language>en</language><managingEditor>wyz2016zxc@outlook.com(Hiraeth)</managingEditor><webMaster>wyz2016zxc@outlook.com(Hiraeth)</webMaster><lastBuildDate>Mon, 16 Mar 2026 15:39:39 +0800</lastBuildDate><atom:link href="https://hiraethecho.github.io/docs/tags/hack/index.xml" rel="self" type="application/rss+xml"/><item><title>薅羊毛cloudflare</title><link>https://hiraethecho.github.io/docs/dev/cloudflare/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/dev/cloudflare/</guid><description>&lt;h1 id="cloudflare的功能"&gt;
&lt;a class="anchor inpage" href="#cloudflare%e7%9a%84%e5%8a%9f%e8%83%bd"&gt;#&lt;/a&gt;cloudflare的功能&lt;/h1&gt;
&lt;h2 id="安全防护"&gt;
&lt;a class="anchor inpage" href="#%e5%ae%89%e5%85%a8%e9%98%b2%e6%8a%a4"&gt;##&lt;/a&gt;安全防护&lt;/h2&gt;
&lt;p&gt;Cloudflare 提供全球领先的安全解决方案，保护网站和用户免受攻击：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Web 应用防火墙 (WAF)&lt;/strong&gt;：实时阻止恶意流量，防止常见攻击如 SQL 注入和跨站脚本攻击。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DDoS 防护&lt;/strong&gt;：自动检测并缓解大规模分布式拒绝服务攻击。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bot 管理&lt;/strong&gt;：区分合法用户和恶意机器人，防止数据抓取或资源滥用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL/TLS 加密&lt;/strong&gt;：通过一键启用 HTTPS 提供网站加密，确保数据传输安全。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="流量管理"&gt;
&lt;a class="anchor inpage" href="#%e6%b5%81%e9%87%8f%e7%ae%a1%e7%90%86"&gt;##&lt;/a&gt;流量管理&lt;/h2&gt;
&lt;p&gt;Cloudflare 的流量管理服务帮助用户优化请求路径，提高访问速度：&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="cloudflare的功能">
  <a class="anchor inpage" href="#cloudflare%e7%9a%84%e5%8a%9f%e8%83%bd">#</a>cloudflare的功能</h1>
<h2 id="安全防护">
  <a class="anchor inpage" href="#%e5%ae%89%e5%85%a8%e9%98%b2%e6%8a%a4">##</a>安全防护</h2>
<p>Cloudflare 提供全球领先的安全解决方案，保护网站和用户免受攻击：</p>
<ol>
<li><strong>Web 应用防火墙 (WAF)</strong>：实时阻止恶意流量，防止常见攻击如 SQL 注入和跨站脚本攻击。</li>
<li><strong>DDoS 防护</strong>：自动检测并缓解大规模分布式拒绝服务攻击。</li>
<li><strong>Bot 管理</strong>：区分合法用户和恶意机器人，防止数据抓取或资源滥用。</li>
<li><strong>SSL/TLS 加密</strong>：通过一键启用 HTTPS 提供网站加密，确保数据传输安全。</li>
</ol>
<h2 id="流量管理">
  <a class="anchor inpage" href="#%e6%b5%81%e9%87%8f%e7%ae%a1%e7%90%86">##</a>流量管理</h2>
<p>Cloudflare 的流量管理服务帮助用户优化请求路径，提高访问速度：</p>
<ol>
<li><strong>负载均衡</strong>：分配流量到不同的服务器或数据中心，确保高可用性和可靠性。</li>
<li><strong>Argo 智能路由</strong>：利用 Cloudflare 网络的实时数据，为请求选择最快的路径。</li>
<li><strong>内容分发网络 (CDN)</strong>：缓存静态资源，提高全球访问速度并减少服务器负载。</li>
</ol>
<h2 id="分析与监控">
  <a class="anchor inpage" href="#%e5%88%86%e6%9e%90%e4%b8%8e%e7%9b%91%e6%8e%a7">##</a>分析与监控</h2>
<p>Cloudflare 提供详细的分析工具，帮助用户了解网站流量和性能：</p>
<ol>
<li><strong>实时分析</strong>：显示实时流量、威胁拦截和性能数据。</li>
<li><strong>日志访问</strong>：通过 API 提供详细的请求日志，支持高级分析和故障排查。</li>
<li><strong>用户洞察</strong>：了解访客的地理位置、设备类型和行为数据。</li>
</ol>
<h2 id="dns">
  <a class="anchor inpage" href="#dns">##</a>DNS</h2>
<p>添加 DNS 记录是 Cloudflare 的核心功能之一，可以使其他人访问某个 URL 时解析到特定位置。</p>
<h3 id="如何添加-dns-记录">
  <a class="anchor inpage" href="#%e5%a6%82%e4%bd%95%e6%b7%bb%e5%8a%a0-dns-%e8%ae%b0%e5%bd%95">###</a>如何添加 DNS 记录</h3>
<ol>
<li>登录到 
。</li>
<li>选择需要管理的域名。</li>
<li>导航到 <strong>DNS</strong> 页面。</li>
<li>点击 <strong>添加记录 (Add Record)</strong> 按钮。</li>
<li>填写以下信息：
<ul>
<li><strong>记录类型 (Type)</strong>：如 A、CNAME、MX 等。</li>
<li><strong>名称 (Name)</strong>：子域名或主域名。</li>
<li><strong>内容 (Content)</strong>：目标地址，例如 IP 或 URL。</li>
<li><strong>TTL (生存时间)</strong>：可选，通常默认即可。</li>
</ul>
</li>
<li>保存更改后，记录会立即生效。</li>
</ol>
<h3 id="支持的服务">
  <a class="anchor inpage" href="#%e6%94%af%e6%8c%81%e7%9a%84%e6%9c%8d%e5%8a%a1">###</a>支持的服务</h3>
<ul>
<li><strong>Cloudflare 内服务</strong>：如桶存储、Zero Trust Tunnel、Workers and Pages、Email 服务等，通常自动添加记录。</li>
<li><strong>Cloudflare 外服务</strong>：如服务器、Netlify、Vercel 等服务，用户可以手动配置。</li>
</ul>
<p>通过精准和高效的 DNS 管理，Cloudflare 提升了域名解析的速度和可靠性。</p>
<h2 id="zero-trust">
  <a class="anchor inpage" href="#zero-trust">##</a>zero trust</h2>
<p>Cloudflare Zero Trust 提供了一种现代化的网络安全解决方案，可以保护用户、设备和应用程序的安全访问。其主要特性包括：</p>
<ol>
<li><strong>身份验证</strong>：通过集成身份提供商（如 Okta、Google Workspace），可以确保只有授权用户才能访问资源。</li>
<li><strong>应用程序访问</strong>：无需 VPN，用户可以通过 Cloudflare Access 安全地访问内部应用程序。</li>
<li><strong>威胁防护</strong>：利用 DNS 过滤和浏览器隔离技术，阻止恶意软件、钓鱼攻击等威胁。</li>
<li><strong>设备管理</strong>：通过 Cloudflare Gateway 支持设备的安全策略和流量监控。</li>
</ol>
<h3 id="使用场景">
  <a class="anchor inpage" href="#%e4%bd%bf%e7%94%a8%e5%9c%ba%e6%99%af">###</a>使用场景</h3>
<ul>
<li><strong>远程办公</strong>：为分布式团队提供安全的资源访问。</li>
<li><strong>零信任架构迁移</strong>：逐步替代传统的网络边界安全模型。</li>
<li><strong>第三方访问控制</strong>：为合作伙伴或供应商提供安全的访问权限。</li>
</ul>
<h3 id="配置方法">
  <a class="anchor inpage" href="#%e9%85%8d%e7%bd%ae%e6%96%b9%e6%b3%95">###</a>配置方法</h3>
<ol>
<li>登录到 
。</li>
<li>设置身份验证规则，选择身份提供商。</li>
<li>配置应用程序访问策略，指定允许访问的用户和条件。</li>
<li>启用威胁防护功能，根据需要调整策略。</li>
</ol>
<p>通过 Zero Trust，企业可以显著提升安全性，同时简化资源访问的流程。</p>
<h2 id="存储">
  <a class="anchor inpage" href="#%e5%ad%98%e5%82%a8">##</a>存储</h2>
<h3 id="bucket">
  <a class="anchor inpage" href="#bucket">###</a>Bucket</h3>
<p>Cloudflare 提供了对象存储服务，用户可以通过 <strong>R2 Bucket</strong> 以低成本存储大量非结构化数据，兼容 S3 API，便于与其他工具整合。</p>
<p><strong>使用案例：</strong></p>
<ul>
<li>为 Web 应用提供静态文件存储。</li>
<li>存储日志文件或大数据集。</li>
<li>备份和归档重要数据。</li>
</ul>
<h3 id="kv">
  <a class="anchor inpage" href="#kv">###</a>KV</h3>
<p>Cloudflare Key-Value（KV）存储是一种分布式的键值数据库，适用于缓存和快速读取小型数据。</p>
<p><strong>使用案例：</strong></p>
<ul>
<li>缓存 API 响应数据以减少服务器负载。</li>
<li>存储用户偏好设置、会话信息等轻量级数据。</li>
</ul>
<h3 id="d1">
  <a class="anchor inpage" href="#d1">###</a>D1</h3>
<p>Cloudflare D1 是新推出的分布式 SQL 数据库，提供强大的查询功能和一致性，适合需要结构化数据存储的应用。</p>
<p><strong>使用案例：</strong></p>
<ul>
<li>构建基于数据库的动态 Web 应用。</li>
<li>存储用户表单输入、订单信息等结构化数据。</li>
<li>实现实时分析和报告。</li>
</ul>
<h2 id="计算">
  <a class="anchor inpage" href="#%e8%ae%a1%e7%ae%97">##</a>计算</h2>
<h3 id="网页-pages">
  <a class="anchor inpage" href="#%e7%bd%91%e9%a1%b5-pages">###</a>网页 pages</h3>
<p>Cloudflare Pages 是一种无服务器的平台，支持快速部署静态和动态网站。通过与 GitHub 集成，可以自动构建和部署网站。</p>
<p>部署步骤</p>
<ol>
<li>登录到 
。</li>
<li>转到 <strong>Pages</strong> 部分，点击 <strong>创建项目 (Create a Project)</strong>。</li>
<li>选择绑定的 GitHub 仓库，授权 Pages 访问代码。</li>
<li>设置构建配置，包括：
<ul>
<li><strong>构建命令 (Build Command)</strong>：如 <code>npm run build</code>。</li>
<li><strong>输出目录 (Output Directory)</strong>：如 <code>dist</code> 文件夹。</li>
</ul>
</li>
<li>点击 <strong>保存并部署 (Save and Deploy)</strong>，系统将开始自动构建和部署。</li>
</ol>
<p>使用场景</p>
<ul>
<li><strong>个人博客和作品集</strong>：快速搭建和部署个人网站。</li>
<li><strong>文档站点</strong>：为开源项目或企业创建文档页面。</li>
<li><strong>电商网站</strong>：托管小型在线商店的前端页面。</li>
</ul>
<p>通过 Pages，开发者可以专注于代码，而无需担心服务器配置和运维。</p>
<h3 id="workers">
  <a class="anchor inpage" href="#workers">###</a>workers</h3>
<p>Cloudflare Workers 是一种无服务器的计算平台，可以让开发者在边缘运行代码，从而减少延迟并提升性能。</p>
<ol>
<li><strong>性能优越</strong>：运行代码的延迟极低，因为它直接在用户最近的边缘节点执行。</li>
<li><strong>语言灵活</strong>：支持 JavaScript、TypeScript 和 WebAssembly。</li>
<li><strong>集成生态</strong>：可以与 Cloudflare 的其他服务（如 KV 和 R2）无缝集成。</li>
</ol>
<p>使用场景</p>
<ul>
<li><strong>API 网关</strong>：快速处理 API 请求，并将其转发到后端服务。</li>
<li><strong>动态内容生成</strong>：根据用户请求生成个性化的网页。</li>
<li><strong>安全增强</strong>：在边缘执行请求过滤或内容安全策略。</li>
</ul>
<p>以下是一个简单的示例，展示如何使用 Workers 来响应 HTTP 请求：</p>
<details open>
    <summary>javascript</summary><pre
        class="chroma codeblock"
      ><code class="language-javascript" data-lang="javascript"
          ><span style="display:flex;"><span><span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">&#34;fetch&#34;</span>, (<span style="color:#a6e22e">event</span>) =&gt; {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">respondWith</span>(<span style="color:#a6e22e">handleRequest</span>(<span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">request</span>));
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">async</span> <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">handleRequest</span>(<span style="color:#a6e22e">request</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Response</span>(<span style="color:#e6db74">&#34;Hello, World!&#34;</span>, {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">headers</span><span style="color:#f92672">:</span> { <span style="color:#e6db74">&#34;content-type&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;text/plain&#34;</span> },
</span></span><span style="display:flex;"><span>  });
</span></span><span style="display:flex;"><span>}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>通过这个示例代码，开发者可以快速开始使用 Cloudflare Workers 构建和部署无服务器应用。</p>
<h2 id="ai">
  <a class="anchor inpage" href="#ai">##</a>AI</h2>
]]></content:encoded></item><item><title>网页端下载网易云音乐的音乐</title><link>https://hiraethecho.github.io/docs/dev/netease/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/dev/netease/</guid><description>通过浏览器的审查元素功能下载网易云音乐的音乐</description><content:encoded><![CDATA[<h1 id="从网页端下载音乐">
  <a class="anchor inpage" href="#%e4%bb%8e%e7%bd%91%e9%a1%b5%e7%ab%af%e4%b8%8b%e8%bd%bd%e9%9f%b3%e4%b9%90">#</a>从网页端下载音乐</h1>
<p>打开网易云音乐，然后打开<code>页面审查元素</code></p>
<ul>
<li>firefox系一般在<code>setting</code>-<code>more tools</code>-<code>webdeveloper tools</code>， 快捷键是<kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>I</kbd></li>
<li>chrome系忘记了， 快捷键似乎是<kbd>F11</kbd>或<kbd>F12</kbd></li>
</ul>
<p>在新页面里选择<code>Network</code>，可以在<code>Filter</code>里写m4a。然后点击播放，会有新的请求。右键网址后用<code>open in new tab</code>，就可以在新页面打开音频。再右键保存音频即可。</p>
<blockquote class="alert alert-note">
      <p class="alert-heading">NOTE</p><p><del>或者直接<code>Save reponse as</code>来下载。</del> 这样只下载<code>1024k</code>的文件，不是整个。</p></blockquote><p>理论上是网页能播放就能下载。</p>
]]></content:encoded></item><item><title>Windows重装指南</title><link>https://hiraethecho.github.io/docs/dev/rewindows/</link><pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/dev/rewindows/</guid><description>重装和初始化windows</description><content:encoded><![CDATA[<h1 id="windows重装指南">
  <a class="anchor inpage" href="#windows%e9%87%8d%e8%a3%85%e6%8c%87%e5%8d%97">#</a>Windows重装指南</h1>
<p>记录一下重装或者第一次安装windows的一些注意事项。</p>
<h2 id="重装">
  <a class="anchor inpage" href="#%e9%87%8d%e8%a3%85">##</a>重装</h2>
<p>按<kbd>windows</kbd>然后按住<kbd>shift</kbd>点击重启，这样重启后会进入恢复模式（之类的），这里可以选择重装系统。或者在设置中的系统恢复部分。<br>
重装系统只重装C盘，其他盘是不动的。但是应用安装在其他盘的时候会有问题。</p>
<h2 id="安装">
  <a class="anchor inpage" href="#%e5%ae%89%e8%a3%85">##</a>安装</h2>
<p>window11有个莫名其妙的设定，不能在没有网络的时候安装，必须登陆微软账户，很神经，但是可以绕开。<br>
在安装界面按<kbd>Shift+F10</kbd>调出命令行，然后输入</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">oobe\bypassnro</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>之后会重新启动安装程序，可以选择无网络连接。</p>
<h2 id="设置">
  <a class="anchor inpage" href="#%e8%ae%be%e7%bd%ae">##</a>设置</h2>
<h3 id="用户文件夹">
  <a class="anchor inpage" href="#%e7%94%a8%e6%88%b7%e6%96%87%e4%bb%b6%e5%a4%b9">###</a>用户文件夹</h3>
<p>在用户目录<code>C:\Users\_username_</code>下有一些用户目录，移动这些目录需要通过右键菜单的<code>属性</code></p>
<h3 id="设置-1">
  <a class="anchor inpage" href="#%e8%ae%be%e7%bd%ae-1">###</a>设置</h3>
<h3 id="其他">
  <a class="anchor inpage" href="#%e5%85%b6%e4%bb%96">###</a>其他</h3>
<p>电源管理</p>
<p>pagefiles</p>
<h2 id="软件源">
  <a class="anchor inpage" href="#%e8%bd%af%e4%bb%b6%e6%ba%90">##</a>软件源</h2>
<p>首先从microsoft store安装，其次用scoop，最后用msi安装。</p>
<h3 id="应用商店">
  <a class="anchor inpage" href="#%e5%ba%94%e7%94%a8%e5%95%86%e5%ba%97">###</a>应用商店</h3>
<h3 id="scoop">
  <a class="anchor inpage" href="#scoop">###</a>scoop</h3>
<p>权限：</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>更改环境变量以修改<code>scoop</code>安装位置</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">$env:SCOOP=&#39;D:\Applications\Scoop&#39;
[Environment]::SetEnvironmentVariable(&#39;SCOOP&#39;, $env:SCOOP, &#39;User&#39;)</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>安装<code>scoop </code></p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Invoke-Expression (New-Object System.Net.WebClient).DownloadString(&#39;https://get.scoop.sh&#39;)</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>或者</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">iwr -useb get.scoop.sh | iex</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h2 id="软件">
  <a class="anchor inpage" href="#%e8%bd%af%e4%bb%b6">##</a>软件</h2>
<h2 id="清理">
  <a class="anchor inpage" href="#%e6%b8%85%e7%90%86">##</a>清理</h2>
<h3 id="win-sxs">
  <a class="anchor inpage" href="#win-sxs">###</a>win SxS</h3>
<h3 id="应用">
  <a class="anchor inpage" href="#%e5%ba%94%e7%94%a8">###</a>应用</h3>
<p>清理应用商店，卸载预装软件</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Get-AppxPackage -All 　　　　　　　　　　　　　　　　　　　/* 获取Win10以上系统所有预装软件 */
Get-AppxPackage -All {预装软件全名} | Remove-AppxPackage　　/* 管道方式卸载Win10以上系统预装软件 */
Remove-AppxPackage {预装软件全名} 　　　　　　　　　　　　/* 常规卸载Win10以上系统预装软件 */
Get-AppxPackage -All | Select-Object Name, PackageFullName　　　/*（推荐）获取Win10以上系统所有预装软件 */
Remove-AppxPackage -Package &#34;PackageFullName&#34;　　　　　　/*（推荐）常规卸载Win10以上系统预装软件 */
Get-AppxPackage *BingWeather* | Remove-AppxPackage　　　　/*卸载单个软件
Get-AppXPackage | Remove-AppxPackage　　　　　　　　　　/*卸载所有软件命令</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>图形化选择</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Get-AppxPackage | Out-GridView -Passthru | Remove-AppXPackage -AllUsers</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>删除某些</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Get-AppxProvisionedPackage -Online | where-object {$_.packagename -like &#34;xbox&#34;} | Remove-AppxProvisionedPackage -Online</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>去除某个分区的<code>WindowsApps</code>文件夹</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Remove-AppxVolume -Volume X:\</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script>]]></content:encoded></item><item><title>用mkdocs、obsidian、zotero搭建在线文献学习笔记</title><link>https://hiraethecho.github.io/docs/dev/3in1wiki/</link><pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/dev/3in1wiki/</guid><description>&lt;h1 id="使用mkdocsobsidianzotero搭建在线文献学习笔记"&gt;
&lt;a class="anchor inpage" href="#%e4%bd%bf%e7%94%a8mkdocsobsidianzotero%e6%90%ad%e5%bb%ba%e5%9c%a8%e7%ba%bf%e6%96%87%e7%8c%ae%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0"&gt;#&lt;/a&gt;使用mkdocs、obsidian、zotero搭建在线文献学习笔记&lt;/h1&gt;
&lt;p&gt;工作流是，在zotero中阅读和标记。用zotero-better-notes插件把标记变成文本格式，并且导出到obsidian的库文件中，进一步编辑（或者用nvim编辑）。在obsidian中更方便笔记链接跳转，zotero只是文献管理和阅读。然后把笔记同步到mkdocs的git仓库（实际上是把mkdocs的文件夹软链接到obsidian库），用github pages搭建在线wiki。&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="使用mkdocsobsidianzotero搭建在线文献学习笔记">
  <a class="anchor inpage" href="#%e4%bd%bf%e7%94%a8mkdocsobsidianzotero%e6%90%ad%e5%bb%ba%e5%9c%a8%e7%ba%bf%e6%96%87%e7%8c%ae%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0">#</a>使用mkdocs、obsidian、zotero搭建在线文献学习笔记</h1>
<p>工作流是，在zotero中阅读和标记。用zotero-better-notes插件把标记变成文本格式，并且导出到obsidian的库文件中，进一步编辑（或者用nvim编辑）。在obsidian中更方便笔记链接跳转，zotero只是文献管理和阅读。然后把笔记同步到mkdocs的git仓库（实际上是把mkdocs的文件夹软链接到obsidian库），用github pages搭建在线wiki。</p>
<h2 id="设置">
  <a class="anchor inpage" href="#%e8%ae%be%e7%bd%ae">##</a>设置</h2>
<h3 id="zotero">
  <a class="anchor inpage" href="#zotero">###</a>Zotero</h3>
<p>关键是<code>zotero-better-note</code>插件的
：从注释创建笔记；将笔记插入到其他笔记；将笔记导出为markdown。</p>
<blockquote class="alert alert-important">
      <p class="alert-heading">IMPORTANT</p><p>导出路径和模板中链接路径有硬编码部分，需要根据具体情况手动修改。</p></blockquote><h3 id="obsidian">
  <a class="anchor inpage" href="#obsidian">###</a>obsidian</h3>
<p>需要在设置中选择使用<code>markdown</code>风格链接而不是<code>wiki</code>风格。根目录<code>/</code>是obsidian的库文件夹。</p>
<h3 id="mkdocs">
  <a class="anchor inpage" href="#mkdocs">###</a>mkdocs</h3>
<p>基本上就是直接使用模板。</p>
<h2 id="路径匹配">
  <a class="anchor inpage" href="#%e8%b7%af%e5%be%84%e5%8c%b9%e9%85%8d">##</a>路径匹配</h2>
<p>主要需要注意的，是文件名和链接格式，即<code>[markdown格式的链接](这里应该写什么路径)</code>，使得zotero、obsidian、在线网页的跳转都正常。实际上有两个跳转，一个是到md文件的跳转，另一个是到pdf的跳转。前者是obsidian或网页内的跳转，相对简单；后者是跳转到zotero中的pdf，这个实际上只有我能用，因为涉及到zotero的数据库。有多种选择：</p>
<h3 id="docs文件夹作为obsidian仓库">
  <a class="anchor inpage" href="#docs%e6%96%87%e4%bb%b6%e5%a4%b9%e4%bd%9c%e4%b8%baobsidian%e4%bb%93%e5%ba%93">###</a><code>docs</code>文件夹作为obsidian仓库</h3>
<p>创建仓库<code>username.github.io</code>（必须是这个格式），在线网页会是<code>https://&lt;username&gt;.github.io</code>，那么链接应该写成<code>[title](/filename)</code>，在网页端是<code>https://&lt;username&gt;.github.io/filename</code>。把<code>docs/</code>文件夹作为obsidian repo，用<code>.gitignore</code>忽略掉<code>docs/.obsidian</code>。</p>
<p>优点是简单，缺点文件直接在obsidian的根目录，不好管理其他内容了。</p>
<h3 id="docs文件夹作为obsidian仓库子文件夹">
  <a class="anchor inpage" href="#docs%e6%96%87%e4%bb%b6%e5%a4%b9%e4%bd%9c%e4%b8%baobsidian%e4%bb%93%e5%ba%93%e5%ad%90%e6%96%87%e4%bb%b6%e5%a4%b9">###</a><code>docs</code>文件夹作为obsidian仓库子文件夹</h3>
<p>使用二级域名的github pages，即创建仓库（例如<code>wiki</code>），在线网页会是<code>https://&lt;username&gt;.github.io/wiki</code>，那么链接应该写成<code>[title](/wiki/filename)</code>，在网页端是<code>https://&lt;username&gt;.github.io/wiki/filename</code></p>
<p>把<code>docs</code>变成obsidian的子文件夹，可以用软链接：</p>
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>ln -s /path/to/git/repo/docs /path/to/obsidian/repo/wiki</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>或者用
</p>
<h2 id="总结">
  <a class="anchor inpage" href="#%e6%80%bb%e7%bb%93">##</a>总结</h2>
<blockquote class="alert alert-note">
      <p class="alert-heading">NOTE</p><p>似乎需要一个markdown和latex转换的脚本。其中markdown应该混写html比较好。似乎lua就可以，那么就可以做nvim插件。<br>
2025-05-21: 似乎latex转markdown+html比较好，用<code>&lt;ul&gt;</code> <code>&lt;ol&gt;</code> <code>&lt;detail&gt;</code>标签来处理latex环境<code>itemize</code> <code>enumerate</code> <code>Theorem</code></p></blockquote>]]></content:encoded></item></channel></rss>