<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>深海小涛</title>
  
  <subtitle>又一个垃圾技术博客</subtitle>
  <link href="https://blog.xtao.de/atom.xml" rel="self"/>
  
  <link href="https://blog.xtao.de/"/>
  <updated>2026-01-01T11:44:37.940Z</updated>
  <id>https://blog.xtao.de/</id>
  
  <author>
    <name>深海小涛</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Windows 11 第三方通行密钥管理器的隐藏陷阱：数字签名证书才是关键！</title>
    <link href="https://blog.xtao.de/400.html"/>
    <id>https://blog.xtao.de/400.html</id>
    <published>2026-01-01T10:00:00.000Z</published>
    <updated>2026-01-01T11:44:37.940Z</updated>
    
    <content type="html"><![CDATA[<p>Windows 11 最近开放了第三方通行密钥管理器（如 1Password、Bitwarden 等）。通行密钥（Passkeys）作为密码的替代品，提供了更安全、更便捷的无密码认证方式。然而，在实际使用中，我遇到了一个奇怪的现象：某些应用可以顺利注册和使用通行密钥，而另一些应用却只能依赖外部安全密钥或移动设备。这让我百思不得其解。经过一番代码对比和深入研究，我终于揭开了谜底：应用的数字签名证书才是决定 Windows 能否调用第三方通行密钥管理器的关键。</p><h2 id="问题现象"><a href="#问题现象" class="headerlink" title="问题现象"></a>问题现象</h2><p>最初，我在使用一些常见的网站和应用时，发现通行密钥的注册和登录流程非常顺畅。Windows 11 会自动弹出我的第三方密码管理器（如 1Password），允许我创建或选择通行密钥。但当我尝试一些小众或开发中的应用时，系统却拒绝调用第三方管理器，只允许使用外部安全密钥（如 Yubikey）或移动设备进行认证。这种不一致性让我感到困惑。</p><h2 id="深入探究"><a href="#深入探究" class="headerlink" title="深入探究"></a>深入探究</h2><p>通过查看 Windows 11 的官方文档、开发者论坛以及一些开源项目的代码，我注意到所有通行密钥的调用都依赖于 Windows 的 WebAuthn API。进一步分析发现，Windows 11 对调用通行密钥管理器的应用有一个隐藏要求：应用必须具有有效的数字签名，且签名证书必须受系统信任。</p><p>未签名或使用自签名证书（但未安装到系统信任存储）的应用，将被系统视为“不受信任”，从而禁止调用第三方通行密钥管理器。</p><h2 id="验证假设"><a href="#验证假设" class="headerlink" title="验证假设"></a>验证假设</h2><p>为了验证这一发现，我进行了一个简单的实验：</p><ol><li>我访问了 webauthn.io（一个常用的 WebAuthn 测试网站），在 Chrome 中测试。由于浏览器具有数字签名证书且受信任，通行密钥管理器被正常调用。<br><img src="https://i.dawnlab.me/ae2fe5b1d9b330035617c94e959298cd.jpg" alt="Chrome.exe"></li><li>接下来，在 Chromium 中测试。Chromium 未包含数字签名证书，当尝试注册通行密钥时，Windows 11 拒绝调用第三方管理器，只显示外部安全密钥选项。<br><img src="https://i.dawnlab.me/5aa8c13e5273391fd5b3b6ff8a296007.jpg" alt="Chromium.exe"></li><li>然后，我为该应用生成自签名证书，并将证书安装到系统的“受信任的根证书颁发机构”存储中。再次测试时，第三方通行密钥管理器被成功调用。<br><img src="https://i.dawnlab.me/986d97479b30975d9f596673f3137923.jpg" alt="Signed Chromium.exe"></li></ol><p>实验证实：数字签名及其信任状态是决定因素。</p><h2 id="生成和安装自签名证书"><a href="#生成和安装自签名证书" class="headerlink" title="生成和安装自签名证书"></a>生成和安装自签名证书</h2><p>对于开发者或希望测试通行密钥功能的用户，可以通过以下步骤生成和安装自签名证书：</p><h3 id="安装证书签名工具"><a href="#安装证书签名工具" class="headerlink" title="安装证书签名工具"></a>安装证书签名工具</h3><p>使用 Visual Studio 安装 Windows 11 SDK，其中 bin 目录包含了证书签名工具。</p><h3 id="生成自签名证书"><a href="#生成自签名证书" class="headerlink" title="生成自签名证书"></a>生成自签名证书</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">makecert.exe <span class="hljs-literal">-n</span> <span class="hljs-string">&quot;CN=TEST&quot;</span> <span class="hljs-literal">-r</span> <span class="hljs-literal">-sv</span> test.pvk test.cer<br></code></pre></td></tr></table></figure><p>生成完成后，将 <code>test.cer</code> 安装到系统的“受信任的根证书颁发机构”存储中。</p><h3 id="生成软件发布者证书"><a href="#生成软件发布者证书" class="headerlink" title="生成软件发布者证书"></a>生成软件发布者证书</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">cert2spc.exe test.cer test.spc<br></code></pre></td></tr></table></figure><h3 id="合并-PFX-证书文件"><a href="#合并-PFX-证书文件" class="headerlink" title="合并 PFX 证书文件"></a>合并 PFX 证书文件</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">pvk2pfx.exe <span class="hljs-literal">-pvk</span> test.pvk <span class="hljs-literal">-spc</span> test.spc <span class="hljs-literal">-pfx</span> test.pfx<br></code></pre></td></tr></table></figure><h3 id="签署应用程序"><a href="#签署应用程序" class="headerlink" title="签署应用程序"></a>签署应用程序</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">signtool.exe sign /v /f test.pfx /tr http://timestamp.digicert.com /td sha256 chrome.exe<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="webauthn" scheme="https://blog.xtao.de/tags/webauthn/"/>
    
    <category term="windows" scheme="https://blog.xtao.de/tags/windows/"/>
    
    <category term="passkey" scheme="https://blog.xtao.de/tags/passkey/"/>
    
  </entry>
  
  <entry>
    <title>【教程】Python 项目和包管理器 uv 安装以及使用</title>
    <link href="https://blog.xtao.de/380.html"/>
    <id>https://blog.xtao.de/380.html</id>
    <published>2024-11-09T05:12:00.000Z</published>
    <updated>2024-11-09T05:38:49.776Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://i.dawnlab.me/bf3a9545e37daac5afbd662a9e265b4a.png" alt="UV.png"></p><h1 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h1><p><a href="https://docs.astral.sh/uv/">官网</a></p><p>uv 是一个用 Rust 编写的 Python 包安装器和解析器。它旨在成为 pip 和 pip-tools 工作流的直接替代品。Astral 的开发者们的目标是创建一个 “Python 的 Cargo”，这是一个全面的 Python 项目和包管理器，速度快、可靠且易于使用。</p><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><h2 id="国内安装优化"><a href="#国内安装优化" class="headerlink" title="国内安装优化"></a>国内安装优化</h2><h3 id="添加环境变量"><a href="#添加环境变量" class="headerlink" title="添加环境变量"></a>添加环境变量</h3><p>使用 GitHub 镜像网站替换掉默认地址，加速下载</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs env">UV_INSTALLER_GHE_BASE_URL=https://ghproxy.cn/https://github.com<br>UV_PYTHON_INSTALL_MIRROR=https://ghproxy.cn/https://github.com/indygreg/python-build-standalone/releases/download<br></code></pre></td></tr></table></figure><p>默认使用清华 pypi 源</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs env">UV_DEFAULT_INDEX=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple<br></code></pre></td></tr></table></figure><h2 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">powershell <span class="hljs-literal">-ExecutionPolicy</span> ByPass <span class="hljs-literal">-c</span> <span class="hljs-string">&quot;irm https://ghproxy.cn/https://github.com/astral-sh/uv/releases/latest/download/uv-installer.ps1 | iex&quot;</span><br></code></pre></td></tr></table></figure><h2 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -LsSf https://ghproxy.cn/https://github.com/astral-sh/uv/releases/latest/download/uv-installer.sh | sh<br></code></pre></td></tr></table></figure><h1 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h1><h2 id="创建项目"><a href="#创建项目" class="headerlink" title="创建项目"></a>创建项目</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv init hello-world<br><span class="hljs-built_in">cd</span> hello-world<br></code></pre></td></tr></table></figure><p>或者</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> hello-world<br><span class="hljs-built_in">cd</span> hello-world<br>uv init<br></code></pre></td></tr></table></figure><h2 id="创建虚拟环境"><a href="#创建虚拟环境" class="headerlink" title="创建虚拟环境"></a>创建虚拟环境</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv venv .venv<br></code></pre></td></tr></table></figure><p>指定 Python 版本号，未安装时会自动下载预构建的 Python 安装。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv venv .venv --python=3.12<br></code></pre></td></tr></table></figure><h2 id="添加依赖"><a href="#添加依赖" class="headerlink" title="添加依赖"></a>添加依赖</h2><p>uv 会自动解决依赖关系。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv add httpx<br></code></pre></td></tr></table></figure><h2 id="同步依赖环境"><a href="#同步依赖环境" class="headerlink" title="同步依赖环境"></a>同步依赖环境</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv <span class="hljs-built_in">sync</span><br></code></pre></td></tr></table></figure><p>同时包含所有可选依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv <span class="hljs-built_in">sync</span> --all-extras<br></code></pre></td></tr></table></figure><h2 id="导出为传统依赖文件-requirements-txt"><a href="#导出为传统依赖文件-requirements-txt" class="headerlink" title="导出为传统依赖文件 requirements.txt"></a>导出为传统依赖文件 requirements.txt</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv <span class="hljs-built_in">export</span> -o requirements.txt<br></code></pre></td></tr></table></figure><p>不包含 hashes ：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv <span class="hljs-built_in">export</span> -o requirements.txt --no-hashes<br></code></pre></td></tr></table></figure><p>同时包含所有可选依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">uv <span class="hljs-built_in">export</span> -o requirements.txt --no-hashes --all-extras<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="windows" scheme="https://blog.xtao.de/tags/windows/"/>
    
    <category term="linux" scheme="https://blog.xtao.de/tags/linux/"/>
    
    <category term="uv" scheme="https://blog.xtao.de/tags/uv/"/>
    
    <category term="python" scheme="https://blog.xtao.de/tags/python/"/>
    
    <category term="venv" scheme="https://blog.xtao.de/tags/venv/"/>
    
  </entry>
  
  <entry>
    <title>【大数据】Ubuntu 18.04.6 下部署 hadoop 2.7.1 集群</title>
    <link href="https://blog.xtao.de/377.html"/>
    <id>https://blog.xtao.de/377.html</id>
    <published>2024-03-06T12:30:00.000Z</published>
    <updated>2024-03-06T14:04:43.585Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>本文安装的 Hadoop 2.7.1 基于 Java 1.8.0_25 ，虚拟机 NAT 网络为 192.168.88.0&#x2F;24</p><h2 id="主要步骤"><a href="#主要步骤" class="headerlink" title="主要步骤"></a>主要步骤</h2><ul><li>安装 Ubuntu 图形化界面并且配置静态 IP</li><li>创建 Hadoop 用户</li><li>更新 apt 以及 安装必要软件</li><li>使用 SSH 软件连接虚拟机</li><li>安装 Java</li><li>安装 Hadoop</li><li>配置其他主机</li><li>启动集群</li></ul><h2 id="安装-Ubuntu"><a href="#安装-Ubuntu" class="headerlink" title="安装 Ubuntu"></a>安装 Ubuntu</h2><p>使用 vmware 新建虚拟机，100G 硬盘。</p><p><img src="https://i.dawnlab.me/c6fae648d35372682e746a9a7bcb0928.png" alt="c6fae648d35372682e746a9a7bcb0928.png"></p><p>在安装阶段，分配 10G swap ，30G &#x2F;data，其余分配到根目录 &#x2F;</p><p><img src="https://i.dawnlab.me/d50340d4cb6371af354814da8afee081.png" alt="d50340d4cb6371af354814da8afee081.png"></p><h3 id="配置静态-IP"><a href="#配置静态-IP" class="headerlink" title="配置静态 IP"></a>配置静态 IP</h3><p>VM 网络为 192.168.88.0&#x2F;24，配置 1 号机 IP 为 192.168.88.200 ，子网掩码为 255.255.255.0 ，网关 IP 为 192.168.88.2，DNS 为 192.168.88.2</p><p><img src="https://i.dawnlab.me/4e88804a5ebbb4a2f37042dde042d6fe.png" alt="4e88804a5ebbb4a2f37042dde042d6fe.png"></p><h4 id="解决网络速率只有-10M"><a href="#解决网络速率只有-10M" class="headerlink" title="解决网络速率只有 10M"></a>解决网络速率只有 10M</h4><h5 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h5><p>在选择客户机操作系统时没有选择 ubuntu 64位 而是选择了 ubuntu 这个选项，导致 Vmware默认安装的虚拟适配器是 AMD 79c970。</p><h5 id="解决"><a href="#解决" class="headerlink" title="解决"></a>解决</h5><p>因此我们需要在选择 虚拟机设置 &gt; 选项 &gt; 常规 &gt; 客户机操作系统 &gt; 版本 &gt; ubuntu 64位</p><p>同时，还需要修改该虚拟机的 .vmx文件，打开并在其末尾追加：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">ethernet0.virtualDev</span> = <span class="hljs-string">&quot;e1000&quot;</span><br></code></pre></td></tr></table></figure><h2 id="创建-Hadoop-用户"><a href="#创建-Hadoop-用户" class="headerlink" title="创建 Hadoop 用户"></a>创建 Hadoop 用户</h2><p>在安装时我已经创建 hadoop 用户，所以跳过此节</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> useradd -m hadoop -s /bin/bash<br><span class="hljs-built_in">sudo</span> passwd hadoop<br><span class="hljs-built_in">sudo</span> adduser hadoop <span class="hljs-built_in">sudo</span><br></code></pre></td></tr></table></figure><h2 id="更新-apt-以及-安装必要软件"><a href="#更新-apt-以及-安装必要软件" class="headerlink" title="更新 apt 以及 安装必要软件"></a>更新 apt 以及 安装必要软件</h2><h3 id="替换为清华源"><a href="#替换为清华源" class="headerlink" title="替换为清华源"></a>替换为清华源</h3><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/">https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mv</span> /etc/apt/sources.list /etc/apt/sources.list.bak<br><span class="hljs-built_in">sudo</span> nano /etc/apt/sources.list<br></code></pre></td></tr></table></figure><h3 id="安装必要软件"><a href="#安装必要软件" class="headerlink" title="安装必要软件"></a>安装必要软件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt update<br><span class="hljs-built_in">sudo</span> apt install open-vm-tools-desktop net-tools -y<br><span class="hljs-built_in">sudo</span> apt install openssh-server openssh-client -y<br><span class="hljs-built_in">sudo</span> apt install lrzsz -y<br></code></pre></td></tr></table></figure><h2 id="使用-SSH-软件连接虚拟机"><a href="#使用-SSH-软件连接虚拟机" class="headerlink" title="使用 SSH 软件连接虚拟机"></a>使用 SSH 软件连接虚拟机</h2><p>本文以 Xshell 7 为例</p><p><img src="https://i.dawnlab.me/39467690de658ad588d84a348f5f9945.png" alt="39467690de658ad588d84a348f5f9945.png"></p><h2 id="安装-Java"><a href="#安装-Java" class="headerlink" title="安装 Java"></a>安装 Java</h2><h3 id="新建资源目录"><a href="#新建资源目录" class="headerlink" title="新建资源目录"></a>新建资源目录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> -R hadoop:hadoop /opt<br><span class="hljs-built_in">mkdir</span> /opt/softwares<br><span class="hljs-built_in">mkdir</span> /opt/modules<br><span class="hljs-built_in">cd</span> /opt/softwares<br></code></pre></td></tr></table></figure><h3 id="上传文件"><a href="#上传文件" class="headerlink" title="上传文件"></a>上传文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">rz<br></code></pre></td></tr></table></figure><h3 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">tar -zxvf /opt/softwares/jdk-8u25-linux-x64.tar.gz -C /opt/modules/<br></code></pre></td></tr></table></figure><h3 id="配置环境变量"><a href="#配置环境变量" class="headerlink" title="配置环境变量"></a>配置环境变量</h3><p>添加以下两行到 <code>/etc/profile</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">export</span> JAVA_HOME=/opt/modules/jdk1.8.0_25<br><span class="hljs-built_in">export</span> PATH=<span class="hljs-variable">$PATH</span>:<span class="hljs-variable">$JAVA_HOME</span>/bin<br></code></pre></td></tr></table></figure><p>重新加载环境变量</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">source</span> /etc/profile<br></code></pre></td></tr></table></figure><h2 id="安装-hadoop"><a href="#安装-hadoop" class="headerlink" title="安装 hadoop"></a>安装 hadoop</h2><h3 id="上传文件-1"><a href="#上传文件-1" class="headerlink" title="上传文件"></a>上传文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">rz<br></code></pre></td></tr></table></figure><h3 id="解压-1"><a href="#解压-1" class="headerlink" title="解压"></a>解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">tar -zxvf /opt/softwares/hadoop-2.7.1.tar.gz -C /opt/modules/<br></code></pre></td></tr></table></figure><h3 id="配置环境变量-1"><a href="#配置环境变量-1" class="headerlink" title="配置环境变量"></a>配置环境变量</h3><p>添加以下两行到 <code>/etc/profile</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">export</span> HADOOP_HOME=/opt/modules/hadoop-2.7.1<br><span class="hljs-built_in">export</span> PATH=<span class="hljs-variable">$PATH</span>:<span class="hljs-variable">$HADOOP_HOME</span>/bin:<span class="hljs-variable">$HADOOP_HOME</span>/sbin<br></code></pre></td></tr></table></figure><p>重新加载环境变量</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">source</span> /etc/profile<br></code></pre></td></tr></table></figure><h3 id="在-sh-脚本中加入-JAVA-HOME-变量"><a href="#在-sh-脚本中加入-JAVA-HOME-变量" class="headerlink" title="在 sh 脚本中加入 JAVA_HOME 变量"></a>在 sh 脚本中加入 JAVA_HOME 变量</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;export  JAVA_HOME=/opt/modules/jdk1.8.0_25&quot;</span>  &gt;&gt;  /opt/modules/hadoop-2.7.1/etc/hadoop/hadoop-env.sh<br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;export  JAVA_HOME=/opt/modules/jdk1.8.0_25&quot;</span>  &gt;&gt;  /opt/modules/hadoop-2.7.1/etc/hadoop/mapred-env.sh<br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;export  JAVA_HOME=/opt/modules/jdk1.8.0_25&quot;</span>  &gt;&gt;  /opt/modules/hadoop-2.7.1/etc/hadoop/yarn-env.sh<br></code></pre></td></tr></table></figure><h3 id="配置-hadoop"><a href="#配置-hadoop" class="headerlink" title="配置 hadoop"></a>配置 hadoop</h3><h4 id="core-site"><a href="#core-site" class="headerlink" title="core-site"></a>core-site</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /opt/modules/hadoop-2.7.1/etc/hadoop<br>nano core-site.xml<br></code></pre></td></tr></table></figure><p>修改成以下格式，其中 t1 为你自己的主机名</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;configuration&gt;</span><br>   <span class="hljs-section">&lt;property&gt;</span><br>        <span class="hljs-section">&lt;name&gt;</span><span class="hljs-attribute">fs</span>.defaultFS&lt;/name&gt;<br>        <span class="hljs-section">&lt;value&gt;</span><span class="hljs-attribute">hdfs</span>://t1:<span class="hljs-number">9000</span>&lt;/value&gt;<br>    <span class="hljs-section">&lt;/property&gt;</span><br>    <span class="hljs-section">&lt;property&gt;</span><br>        <span class="hljs-section">&lt;name&gt;</span><span class="hljs-attribute">hadoop</span>.tmp.dir&lt;/name&gt;<br>        <span class="hljs-section">&lt;value&gt;</span><span class="hljs-attribute">file</span>:/opt/modules/hadoop-<span class="hljs-number">2</span>.<span class="hljs-number">7</span>.<span class="hljs-number">1</span>/tmp&lt;/value&gt;<br>    <span class="hljs-section">&lt;/property&gt;</span><br><span class="hljs-section">&lt;/configuration&gt;</span><br></code></pre></td></tr></table></figure><h3 id="hdfs-site"><a href="#hdfs-site" class="headerlink" title="hdfs-site"></a>hdfs-site</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /opt/modules/hadoop-2.7.1/etc/hadoop<br>nano hdfs-site.xml<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;configuration&gt;</span><br>    <span class="hljs-section">&lt;property&gt;</span><br>        <span class="hljs-section">&lt;name&gt;</span><span class="hljs-attribute">dfs</span>.replication&lt;/name&gt;<br>        <span class="hljs-section">&lt;value&gt;</span><span class="hljs-attribute">3</span>&lt;/value&gt;<br>    <span class="hljs-section">&lt;/property&gt;</span><br>    <span class="hljs-section">&lt;property&gt;</span><br>        <span class="hljs-section">&lt;name&gt;</span><span class="hljs-attribute">dfs</span>.namenode.name.dir&lt;/name&gt;<br>        <span class="hljs-section">&lt;value&gt;</span><span class="hljs-attribute">file</span>:/opt/modules/hadoop-<span class="hljs-number">2</span>.<span class="hljs-number">7</span>.<span class="hljs-number">1</span>/tmp/dfs/name&lt;/value&gt;<br>    <span class="hljs-section">&lt;/property&gt;</span><br>    <span class="hljs-section">&lt;property&gt;</span><br>        <span class="hljs-section">&lt;name&gt;</span><span class="hljs-attribute">dfs</span>.datanode.data.dir&lt;/name&gt;<br>        <span class="hljs-section">&lt;value&gt;</span><span class="hljs-attribute">file</span>:/opt/modules/hadoop-<span class="hljs-number">2</span>.<span class="hljs-number">7</span>.<span class="hljs-number">1</span>/tmp/dfs/data&lt;/value&gt;<br>    <span class="hljs-section">&lt;/property&gt;</span><br><span class="hljs-section">&lt;/configuration&gt;</span><br></code></pre></td></tr></table></figure><h3 id="mapred-site"><a href="#mapred-site" class="headerlink" title="mapred-site"></a>mapred-site</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /opt/modules/hadoop-2.7.1/etc/hadoop<br><span class="hljs-built_in">mv</span> mapred-site.xml.template mapred-site.xml<br>nano mapred-site.xml<br></code></pre></td></tr></table></figure><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">configuration</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">property</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>mapreduce.framework.name<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>yarn<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">configuration</span>&gt;</span><br></code></pre></td></tr></table></figure><h3 id="yarn-site"><a href="#yarn-site" class="headerlink" title="yarn-site"></a>yarn-site</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /opt/modules/hadoop-2.7.1/etc/hadoop<br>nano yarn-site.xml<br></code></pre></td></tr></table></figure><p>修改成以下格式，其中 t1 为你自己的主机名</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">configuration</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">property</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>yarn.nodemanager.disk-health-checker.min-healthy-disks<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>0.0<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">property</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>100.0<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">property</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>yarn.nodemanager.aux-services<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>mapreduce_shuffle<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">property</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>yarn.resourcemanager.hostname<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>t1<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">configuration</span>&gt;</span><br></code></pre></td></tr></table></figure><h3 id="slaves"><a href="#slaves" class="headerlink" title="slaves"></a>slaves</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /opt/modules/hadoop-2.7.1/etc/hadoop<br>nano slaves<br></code></pre></td></tr></table></figure><p>修改成以下格式，其中 t1、t2、t3 为你集群的所有主机名</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm"><span class="hljs-built_in">t1</span><br><span class="hljs-built_in">t2</span><br><span class="hljs-built_in">t3</span><br></code></pre></td></tr></table></figure><h2 id="配置其他主机"><a href="#配置其他主机" class="headerlink" title="配置其他主机"></a>配置其他主机</h2><h3 id="修改-hosts-文件"><a href="#修改-hosts-文件" class="headerlink" title="修改 hosts 文件"></a>修改 hosts 文件</h3><p>修改 <code>/etc/hosts</code> ，添加其他主机的映射</p><figure class="highlight accesslog"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs accesslog"><span class="hljs-number">192.168.88.200</span>  t1<br><span class="hljs-number">192.168.88.201</span>  t2<br><span class="hljs-number">192.168.88.202</span>  t3<br></code></pre></td></tr></table></figure><h3 id="关闭虚拟机并且克隆为-t2-t3"><a href="#关闭虚拟机并且克隆为-t2-t3" class="headerlink" title="关闭虚拟机并且克隆为 t2 t3"></a>关闭虚拟机并且克隆为 t2 t3</h3><p>vmware 中右键虚拟机，管理 -&gt; 克隆 -&gt; 创建完整克隆</p><h3 id="修改对应主机的-hostname"><a href="#修改对应主机的-hostname" class="headerlink" title="修改对应主机的 hostname"></a>修改对应主机的 hostname</h3><p>修改 <code>/etc/hostname</code> ，修改主机名称为 <code>t1</code>、<code>t2</code>、<code>t3</code></p><h3 id="配置对应主机的静态-IP"><a href="#配置对应主机的静态-IP" class="headerlink" title="配置对应主机的静态 IP"></a>配置对应主机的静态 IP</h3><p>如前文，另外两台主机 IP 分别为 <code>192.168.88.201</code>、<code>192.168.88.202</code></p><p>重启网卡后生效</p><h3 id="配置三台主机间的免密登录"><a href="#配置三台主机间的免密登录" class="headerlink" title="配置三台主机间的免密登录"></a>配置三台主机间的免密登录</h3><p>在 t1 上的 hadoop 用户下操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">ssh-keygen  -t  rsa  （连续三次回车）<br>ssh-copy-id  t1    （如果需要输入密码就输入hadoop用户的密码）<br>ssh-copy-id  t2     （如果需要输入密码就输入hadoop用户的密码）<br>ssh-copy-id  t3     （如果需要输入密码就输入hadoop用户的密码）<br></code></pre></td></tr></table></figure><p>以上命令做好后。t1 就可以免密登录 t2, t3 了，同理配置 t2, t3。</p><h2 id="启动集群"><a href="#启动集群" class="headerlink" title="启动集群"></a>启动集群</h2><h3 id="格式化集群"><a href="#格式化集群" class="headerlink" title="格式化集群"></a>格式化集群</h3><p>在 t1 上的 hadoop 用户下操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">hadoop namenode -format<br></code></pre></td></tr></table></figure><h3 id="启动集群-1"><a href="#启动集群-1" class="headerlink" title="启动集群"></a>启动集群</h3><p>在 t1 上的 hadoop 用户下操作：（只能在 t1 上运行，切记不要在另外两台运行） </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">start-all.sh<br></code></pre></td></tr></table></figure><h3 id="在宿主机上查看集群"><a href="#在宿主机上查看集群" class="headerlink" title="在宿主机上查看集群"></a>在宿主机上查看集群</h3><p><a href="http://192.168.88.200:50070/">http://192.168.88.200:50070</a></p><p><img src="https://i.dawnlab.me/08e64b3f05660e3384188660b4f1597f.png" alt="08e64b3f05660e3384188660b4f1597f.png"></p><p><a href="http://192.168.88.200:8088/">http://192.168.88.200:8088</a></p><p><img src="https://i.dawnlab.me/e85888cd23ad7401411c45d4f061fd23.png" alt="e85888cd23ad7401411c45d4f061fd23.png"></p><h3 id="停止集群"><a href="#停止集群" class="headerlink" title="停止集群"></a>停止集群</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">stop-all.sh<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="ubuntu" scheme="https://blog.xtao.de/tags/ubuntu/"/>
    
    <category term="hadoop" scheme="https://blog.xtao.de/tags/hadoop/"/>
    
    <category term="vmware" scheme="https://blog.xtao.de/tags/vmware/"/>
    
    <category term="linux" scheme="https://blog.xtao.de/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>【教程】Claude 免费注册使用教程</title>
    <link href="https://blog.xtao.de/374.html"/>
    <id>https://blog.xtao.de/374.html</id>
    <published>2023-04-17T14:08:00.000Z</published>
    <updated>2023-04-17T14:17:55.780Z</updated>
    
    <content type="html"><![CDATA[<p>打开官网 <a href="https://www.anthropic.com/claude-in-slack">Add to Slack</a></p><p><img src="https://i.dawnlab.me/c29a57b18756b91c059a09d6d0402e73.png" alt="c29a57b18756b91c059a09d6d0402e73.png"></p><p>假如你之前已经创建过 Slack 工作区，那么直接添加到现有的工作区即可。假如没有，那么点击<a href="https://slack.com/intl/zh-cn/get-started#/createnew">创建一个新的工作区</a>。</p><p>注意：手机版网页无法创建，需要切换到电脑版网页</p><p>输入你的邮箱地址，填写验证码。</p><p>随便团队的名称，跳过邀请团队成员。</p><p>完成工作区的创建后，回到第一步，<a href="https://www.anthropic.com/claude-in-slack">Add to Slack</a> 重新进行添加。</p><p>点击右侧聊天栏中的 Claude 就可以进行对话了。</p><p><img src="https://i.dawnlab.me/257231e521626b29fe3c3915aa1fc6bc.png" alt="257231e521626b29fe3c3915aa1fc6bc.png"></p>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Claude" scheme="https://blog.xtao.de/tags/Claude/"/>
    
    <category term="ChatGPT" scheme="https://blog.xtao.de/tags/ChatGPT/"/>
    
    <category term="Slack" scheme="https://blog.xtao.de/tags/Slack/"/>
    
  </entry>
  
  <entry>
    <title>【教程】使用 Cloudflare Zero Trust 限制访问</title>
    <link href="https://blog.xtao.de/373.html"/>
    <id>https://blog.xtao.de/373.html</id>
    <published>2023-01-29T12:04:00.000Z</published>
    <updated>2023-01-29T12:46:49.972Z</updated>
    
    <content type="html"><![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><h2 id="零信任网络访问（ZTNA）"><a href="#零信任网络访问（ZTNA）" class="headerlink" title="零信任网络访问（ZTNA）"></a>零信任网络访问（ZTNA）</h2><p>用户通过客户端或 Web 浏览器连接到企业资源，无需使用 VPN。当请求通过我们的网络进行路由和加速时，它们将被根据 Zero Trust 规则进行评估，这些规则集成了来自身份提供者、设备和其他上下文的信号。</p><p>过去，RDP 软件、SMB 文件查看器和其他胖客户端程序需要 VPN 来连接到专用网络连接。如今，团队可以通过 Cloudflare 的网络私密地路由任何 TCP 或 UDP 流量，并一次性对流量进行加速、验证和过滤，获得最佳性能和安全性。。</p><span id="more"></span><p>说人话就是你可以限制用户需要进行登录后才能访问你的业务</p><h1 id="添加应用（以-web-应用举例）"><a href="#添加应用（以-web-应用举例）" class="headerlink" title="添加应用（以 web 应用举例）"></a>添加应用（以 web 应用举例）</h1><p>你需要首先绑定并且解析此域名，例如 <code>xxx.example.com</code></p><h2 id="官方文档"><a href="#官方文档" class="headerlink" title="官方文档"></a><a href="https://developers.cloudflare.com/cloudflare-one/applications/configure-apps/self-hosted-apps/">官方文档</a></h2><h2 id="提示"><a href="#提示" class="headerlink" title="提示"></a>提示</h2><p>应用类型选择 <code>Self-hosted</code></p><h3 id="设置-App"><a href="#设置-App" class="headerlink" title="设置 App"></a>设置 App</h3><p><code>session duration</code> 建议选择 24 小时，避免过多重定向</p><h4 id="Subdomain"><a href="#Subdomain" class="headerlink" title="Subdomain"></a>Subdomain</h4><p>填入 <code>xxx</code></p><h4 id="Domain"><a href="#Domain" class="headerlink" title="Domain"></a>Domain</h4><p>选择 <code>example.com</code></p><h3 id="添加策略"><a href="#添加策略" class="headerlink" title="添加策略"></a>添加策略</h3><p>名称可随便填写，<code>Action</code> 不变选择 <code>Allow</code></p><h4 id="Include"><a href="#Include" class="headerlink" title="Include"></a>Include</h4><p>左边选择 <code>Emails</code>，右边填入 Cloudflare 账户邮箱用于登录。</p><h4 id="Require"><a href="#Require" class="headerlink" title="Require"></a>Require</h4><p>左边选择 <code>Login Methods</code>，右边选择 <code>One-time PIN</code></p><h1 id="体验"><a href="#体验" class="headerlink" title="体验"></a>体验</h1><p>此时，打开 <code>xxx.example.com</code> 将会要求你进行邮件认证，输入 Cloudflare 账户邮箱登录即可。</p><h1 id="使用程序进行访问"><a href="#使用程序进行访问" class="headerlink" title="使用程序进行访问"></a>使用程序进行访问</h1><h2 id="官方文档-1"><a href="#官方文档-1" class="headerlink" title="官方文档"></a><a href="https://developers.cloudflare.com/cloudflare-one/identity/service-tokens/">官方文档</a></h2><h2 id="提示-1"><a href="#提示-1" class="headerlink" title="提示"></a>提示</h2><h3 id="创建-Service-Token"><a href="#创建-Service-Token" class="headerlink" title="创建 Service Token"></a>创建 Service Token</h3><h3 id="关联-Token-到应用"><a href="#关联-Token-到应用" class="headerlink" title="关联 Token 到应用"></a>关联 Token 到应用</h3><p>进入应用访问策略配置页面，添加新策略</p><p>策略名随意，<code>Action</code> 选择 <code>Service Auth</code>。</p><h4 id="Include-1"><a href="#Include-1" class="headerlink" title="Include"></a>Include</h4><p>左边选择 <code>Service Token</code>，右边选择刚才建立的 Token。</p><h3 id="设置请求头"><a href="#设置请求头" class="headerlink" title="设置请求头"></a>设置请求头</h3><p><code>Client ID</code> 和 <code>Client Secret</code> 创建时已提供。</p><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs arduino">CF-Access-<span class="hljs-built_in">Client</span>-Id: &lt;<span class="hljs-built_in">Client</span> ID&gt;<br>CF-Access-<span class="hljs-built_in">Client</span>-Secret: &lt;<span class="hljs-built_in">Client</span> Secret&gt;<br></code></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-keyword">from</span> httpx <span class="hljs-keyword">import</span> get<br><br>headers = &#123;<br>    <span class="hljs-string">&quot;CF-Access-Client-Id&quot;</span>: <span class="hljs-string">&quot;&quot;</span>,<br>    <span class="hljs-string">&quot;CF-Access-Client-Secret&quot;</span>: <span class="hljs-string">&quot;&quot;</span>,<br>&#125;<br><br>get(<span class="hljs-string">&quot;xxx.example.com&quot;</span>, headers=headers)<br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h1&gt;&lt;h2 id=&quot;零信任网络访问（ZTNA）&quot;&gt;&lt;a href=&quot;#零信任网络访问（ZTNA）&quot; class=&quot;headerlink&quot; title=&quot;零信任网络访问（ZTNA）&quot;&gt;&lt;/a&gt;零信任网络访问（ZTNA）&lt;/h2&gt;&lt;p&gt;用户通过客户端或 Web 浏览器连接到企业资源，无需使用 VPN。当请求通过我们的网络进行路由和加速时，它们将被根据 Zero Trust 规则进行评估，这些规则集成了来自身份提供者、设备和其他上下文的信号。&lt;/p&gt;
&lt;p&gt;过去，RDP 软件、SMB 文件查看器和其他胖客户端程序需要 VPN 来连接到专用网络连接。如今，团队可以通过 Cloudflare 的网络私密地路由任何 TCP 或 UDP 流量，并一次性对流量进行加速、验证和过滤，获得最佳性能和安全性。。&lt;/p&gt;</summary>
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="cloudflare" scheme="https://blog.xtao.de/tags/cloudflare/"/>
    
    <category term="access" scheme="https://blog.xtao.de/tags/access/"/>
    
    <category term="api" scheme="https://blog.xtao.de/tags/api/"/>
    
  </entry>
  
  <entry>
    <title>【备忘】misskey2telegram 集合信息流到聊天</title>
    <link href="https://blog.xtao.de/370.html"/>
    <id>https://blog.xtao.de/370.html</id>
    <published>2023-01-26T15:36:00.000Z</published>
    <updated>2023-01-26T15:55:51.833Z</updated>
    
    <content type="html"><![CDATA[<h1 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h1><p>Twitter 被收购后，对第三方开发者的政策更加激进，并且正式禁用了第三方客户端。有许多用户开始走向 misskey、mastodon 等去中心化社交网络。</p><p>笔者常用聊天软件为 Telegram ，于是希望时间线更新和通知能够实时到达聊天软件，方便接收，无需另开网页和下载客户端。</p><h1 id="搜寻"><a href="#搜寻" class="headerlink" title="搜寻"></a>搜寻</h1><p>搜索 GitHub 并没有相关项目，于是开始自己动手实现，选择语言为 Python ，能够接收通知和时间线更新的第三方库为：</p><p><a href="https://github.com/yupix/MiPA">https://github.com/yupix/MiPA</a></p><h1 id="开始"><a href="#开始" class="headerlink" title="开始"></a>开始</h1><p>第三方库的通知和方法并不全，于是第一步就是补充第三方库。</p><p><img src="https://i.dawnlab.me/c74a2f62e835eda2ca58428e405a87c3.png" alt="c74a2f62e835eda2ca58428e405a87c3.png"></p><h1 id="活用新特性"><a href="#活用新特性" class="headerlink" title="活用新特性"></a>活用新特性</h1><p>Telegram 下放了 Forum 功能给所有群组，所以可以更好地隔离时间线更新和通知了。</p><p><img src="https://i.dawnlab.me/38f4d3cfd03027b837ece2b8875dbd98.png" alt="38f4d3cfd03027b837ece2b8875dbd98.png"></p><h1 id="最终"><a href="#最终" class="headerlink" title="最终"></a>最终</h1><p>于是可以在 Telegram 实时接收时间线更新和通知了。</p><p><a href="https://github.com/Xtao-Labs/misskey2telegram">https://github.com/Xtao-Labs/misskey2telegram</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="misskey" scheme="https://blog.xtao.de/tags/misskey/"/>
    
    <category term="telegram" scheme="https://blog.xtao.de/tags/telegram/"/>
    
    <category term="timeline" scheme="https://blog.xtao.de/tags/timeline/"/>
    
  </entry>
  
  <entry>
    <title>【教程】 Grasscutter 一个动画游戏的服务器端模拟器</title>
    <link href="https://blog.xtao.de/360.html"/>
    <id>https://blog.xtao.de/360.html</id>
    <published>2022-04-21T05:32:00.000Z</published>
    <updated>2022-04-21T06:41:31.660Z</updated>
    
    <content type="html"><![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><h2 id="Grasscutter"><a href="#Grasscutter" class="headerlink" title="Grasscutter"></a>Grasscutter</h2><p><code>Grasscutter</code> 一个动画游戏的服务器端模拟器，它能让人更快乐地游戏。</p><span id="more"></span><h3 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h3><ul><li>登录</li><li>战斗</li><li>命令行生成怪物</li><li>库存管理（背包、角色等等）</li><li>抽卡系统</li><li>好友系统</li></ul><h1 id="指北"><a href="#指北" class="headerlink" title="指北"></a>指北</h1><p>本指北基于 <code>win 11</code> x64 位系统，game <code>v2.6</code>，且已经在 D 盘创建了名为 <code>Grasscutter</code> 的文件夹，我们称此为 <code>工作目录</code> 。</p><h2 id="依赖项"><a href="#依赖项" class="headerlink" title="依赖项"></a>依赖项</h2><h3 id="JDK-8u202"><a href="#JDK-8u202" class="headerlink" title="JDK-8u202"></a>JDK-8u202</h3><p>从 <a href="https://mirrors.huaweicloud.com/java/jdk/8u202-b08/">华为镜像源</a> 下载 <code>jdk-8u202-windows-x64.exe</code> 并安装，安装完成后将 <code>xxx\Java\jdk1.8.0_202\bin</code> 加入系统环境变量 <code>PATH</code>  中。</p><p>你可以通过打开 <code>cmd</code> 输入 <code>java -version</code> ，如果输出为 </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">java version <span class="hljs-string">&quot;1.8.0_202&quot;</span><br></code></pre></td></tr></table></figure><p>那么此步则已配置正确。</p><h3 id="Mongodb"><a href="#Mongodb" class="headerlink" title="Mongodb"></a>Mongodb</h3><p>从 <a href="https://www.mongodb.com/try/download/community">官网</a> 下载 <code>Mongodb 5.0.7</code> 压缩包格式文件，或者 <a href="https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-5.0.7.zip">点击这里</a> 直接开始下载，下载后请解压到 <code>D:\Grasscutter\mongodb</code> ，此时 <code>D:\Grasscutter\mongodb\bin</code> 中应该有 <code>mongod.exe</code> 文件。</p><p>在 <code>D:\Grasscutter\mongodb</code> 中新建一个 <code>db</code> 文件夹用于保存数据库文件。打开 <code>cmd</code> 进入到 <code>D:\Grasscutter\mongodb\bin</code> ，输入下列命令启动 mongodb</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">mongod --dbpath <span class="hljs-string">&quot;D:\Grasscutter\mongodb\db&quot;</span><br></code></pre></td></tr></table></figure><p>如果有数据输出，且没有结束运行，则此步已配置正确，请不要关闭此 <code>cmd</code> 窗口，保持后台运行。</p><h2 id="服务端"><a href="#服务端" class="headerlink" title="服务端"></a>服务端</h2><h3 id="懒人包"><a href="#懒人包" class="headerlink" title="懒人包"></a>懒人包</h3><p>请 <a href="https://drive.google.com/file/d/1AAHg-BqMfew0BRcGtkhn65Uv94lhi0wj/view?usp=sharing">下载此文件</a> ，直接解压到 <code>D:\Grasscutter</code> 中</p><h3 id="手动操作"><a href="#手动操作" class="headerlink" title="手动操作"></a>手动操作</h3><h4 id="构建服务端"><a href="#构建服务端" class="headerlink" title="构建服务端"></a>构建服务端</h4><h5 id="拉取项目"><a href="#拉取项目" class="headerlink" title="拉取项目"></a>拉取项目</h5><p>首先你需要安装 git ，然后运行 <code>cmd</code> 进入 <code>D:\Grasscutter</code> 中输入并且运行 <code>git clone https://github.com/Grasscutters/Grasscutter.git</code></p><h5 id="开始构建"><a href="#开始构建" class="headerlink" title="开始构建"></a>开始构建</h5><p>拉取完成后，进入 <code>D:\Grasscutter\Grasscutter</code> ，进行如下操作：</p><ol><li>运行 <code>gradlew.bat</code></li><li>打开 <code>cmd</code> 窗口，输入并且运行 <code>gradlew jar</code></li></ol><p>构建将会自动完成，并且生成 <code>D:\Grasscutter\Grasscutter\grasscutter.jar</code> ，此为服务端文件，将它放到 <code>D:\Grasscutter\grasscutter.jar</code> 即可</p><h4 id="下载资源文件"><a href="#下载资源文件" class="headerlink" title="下载资源文件"></a>下载资源文件</h4><p>首先创建 <code>D:\Grasscutter\resources</code> 文件夹，我们称此为 <code>资源文件夹</code> 。</p><ol><li>将 <a href="https://github.com/Dimbreath/GenshinData">GenshinData</a> 中的 <code>TextMap</code>、<code>Subtitle</code>、<code>Readable</code>、<code>ExcelBinOutput</code> 移动到 <code>资源文件夹</code> 中</li><li>将 <a href="https://github.com/radioegor146/gi-bin-output.git">gi-bin-output</a> 中的 <code>2.5.52/Data/_BinOutput</code> 重命名为 <code>BinOutput</code> 然后移动到 <code>资源文件夹</code> 中</li><li>将 <a href="https://github.com/Grasscutters/Grasscutter-Protos.git">Grasscutter-Protos</a> 中的 <code>proto</code> 移动到 <code>资源文件夹</code> 中</li><li>将 <a href="https://github.com/Grasscutters/Grasscutter">Grasscutter</a> 中的 <code>keys</code>、<code>data</code>、<code>keystore.p12</code> 移动到 <code>工作目录</code> 中</li></ol><h3 id="运行"><a href="#运行" class="headerlink" title="运行"></a>运行</h3><p>此时的目录树结构为：</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm">Grasscutter<br>├── mongodb<br>│   ├── <span class="hljs-keyword">bin</span><br><span class="hljs-keyword"></span>│   │   └── mongod.exe<br>│   └── db<br>├── data<br>│   ├── <span class="hljs-keyword">Banners.json</span><br><span class="hljs-keyword"></span>│   └── ...<br>├── keys<br>│   ├── <span class="hljs-keyword">dispatchKey.bin</span><br><span class="hljs-keyword"></span>│   └── ...<br>├── resources<br>│   ├── <span class="hljs-keyword">BinOutput</span><br><span class="hljs-keyword"></span>│   ├── ExcelBinOutput<br>│   ├── proto<br>│   ├── Readable<br>│   ├── <span class="hljs-keyword">Subtitle</span><br><span class="hljs-keyword"></span>│   └── TextMap<br>├── grasscutter.<span class="hljs-keyword">jar</span><br><span class="hljs-keyword"></span>└── keystore.p12<br></code></pre></td></tr></table></figure><p>运行 <code>cmd</code> 进入 <code>工作目录</code> 输入并且运行 <code>java -jar grasscutter.jar -handbook</code> ，再次输入并且运行 <code>java -jar grasscutter.jar</code></p><p>此时如果没有端口冲突并且 <code>mongodb</code> 也在后台同时运行，那么服务器端将正常运行。</p><p>你需要运行成功后输入 <code>account create 用户名 用户id（可选）</code> 来创建你的游戏账号。</p><h2 id="客户端"><a href="#客户端" class="headerlink" title="客户端"></a>客户端</h2><p>请确保你的客户端为国际版，您可以通过 <a href="https://github.com/DGP-Studio/Snap.Genshin">Snap.Genshin</a> 切换你的客户端版本为国际版</p><p>请下载 <a href="https://github.com/Grasscutters/GrassClipper/releases">此 Releases</a> 下的 <code>GrassClipper.zip</code> 文件，解压到任意目录后，运行 <code>install.cmd</code> ，等待进程结束，然后打开 <code>GrassCutter.exe</code> 在下方选择游戏的工作目录，例如：<code>D:\Program Files\Genshin Impact</code> ，在上方输入 <code>127.0.0.1</code> ，然后点击运行，即可打开游戏，在登录时你需要输入创建的用户名和任意密码即可加入测试服务器。</p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>过程过于繁琐，而且现在仅仅处于能用的状态（bushi</p><h1 id="交流"><a href="#交流" class="headerlink" title="交流"></a>交流</h1><p><a href="https://t.me/Grasscutter_CN">TG 非官方频道</a> <a href="https://discord.gg/T5vZU6UyeG">Discord 官方频道</a></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h1&gt;&lt;h2 id=&quot;Grasscutter&quot;&gt;&lt;a href=&quot;#Grasscutter&quot; class=&quot;headerlink&quot; title=&quot;Grasscutter&quot;&gt;&lt;/a&gt;Grasscutter&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Grasscutter&lt;/code&gt; 一个动画游戏的服务器端模拟器，它能让人更快乐地游戏。&lt;/p&gt;</summary>
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="server" scheme="https://blog.xtao.de/tags/server/"/>
    
    <category term="game" scheme="https://blog.xtao.de/tags/game/"/>
    
    <category term="anime" scheme="https://blog.xtao.de/tags/anime/"/>
    
  </entry>
  
  <entry>
    <title>【教程】使用 Quicker + bili 完成B站视频快速下载</title>
    <link href="https://blog.xtao.de/351.html"/>
    <id>https://blog.xtao.de/351.html</id>
    <published>2021-08-20T13:28:00.000Z</published>
    <updated>2021-12-27T05:27:57.620Z</updated>
    
    <content type="html"><![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><h2 id="quicker"><a href="#quicker" class="headerlink" title="quicker"></a>quicker</h2><p><code>Quicker</code> 是您的指尖工具箱，可以帮助您自动化完成一系列任务。</p><h2 id="Bili"><a href="#Bili" class="headerlink" title="Bili"></a>Bili</h2><p><code>Bili</code> 是一个 <code>Python</code> 编写的从 <code>Bilibili/Acfun</code> 下载 <code>弹幕/视频</code> 的工具。</p><span id="more"></span><h1 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h1><h2 id="安装-python"><a href="#安装-python" class="headerlink" title="安装 python"></a>安装 python</h2><p>点击 <a href="https://www.python.org/downloads/">link</a> 下载最新版本的 python</p><h2 id="安装-bili"><a href="#安装-bili" class="headerlink" title="安装 bili"></a>安装 bili</h2><h3 id="拉取仓库"><a href="#拉取仓库" class="headerlink" title="拉取仓库"></a>拉取仓库</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> https://github.com/lifegpc/bili.git<br><span class="hljs-built_in">cd</span> bili<br></code></pre></td></tr></table></figure><h3 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h3><h4 id="pypi"><a href="#pypi" class="headerlink" title="pypi"></a>pypi</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">pip install -r requirements.txt<br></code></pre></td></tr></table></figure><h4 id="安装-ffmpeg"><a href="#安装-ffmpeg" class="headerlink" title="安装 ffmpeg"></a>安装 ffmpeg</h4><p><a href="https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z">link</a></p><p>下载完成后将 <code>bin/ffmpeg.exe</code> 解压到 <code>bili</code> 根目录即可</p><h2 id="安装-quicker"><a href="#安装-quicker" class="headerlink" title="安装 quicker"></a>安装 quicker</h2><p><a href="https://getquicker.net/Download">link</a></p><h3 id="安装-quicker-chrome-扩展"><a href="#安装-quicker-chrome-扩展" class="headerlink" title="安装 quicker chrome 扩展"></a>安装 quicker chrome 扩展</h3><p><a href="https://chrome.google.com/webstore/detail/quicker-connector/klggbkjfmbonefdcfkiidhcmfjdfnepa">link</a></p><h3 id="安装-quicker-动作"><a href="#安装-quicker-动作" class="headerlink" title="安装 quicker 动作"></a>安装 quicker 动作</h3><p><a href="https://getquicker.net/sharedaction?code=dd8febe6-d9e1-473b-4536-08d963be9864">link</a></p><h4 id="编辑-quicker-动作"><a href="#编辑-quicker-动作" class="headerlink" title="编辑 quicker 动作"></a>编辑 quicker 动作</h4><p>在变量 <code>path</code> 中填写 bili 根目录，即可开始使用</p><h1 id="使用示范"><a href="#使用示范" class="headerlink" title="使用示范"></a>使用示范</h1><div id="player"></div><script type="text/javascript" src="https://player.dogecloud.com/js/loader"></script><script type="text/javascript">var player = new DogePlayer({    container: document.getElementById('player'),    userId: 2757,    vcode: 'db573e2f39f0f3a0',    autoPlay: false});</script><h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><p><code>Quicker</code> + <code>Bili</code> 十分方便用于 B 站视频下载，在任何自己想要下载的视频页面，通过面板点击+回车即可快速完成视频下载。</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h1&gt;&lt;h2 id=&quot;quicker&quot;&gt;&lt;a href=&quot;#quicker&quot; class=&quot;headerlink&quot; title=&quot;quicker&quot;&gt;&lt;/a&gt;quicker&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Quicker&lt;/code&gt; 是您的指尖工具箱，可以帮助您自动化完成一系列任务。&lt;/p&gt;
&lt;h2 id=&quot;Bili&quot;&gt;&lt;a href=&quot;#Bili&quot; class=&quot;headerlink&quot; title=&quot;Bili&quot;&gt;&lt;/a&gt;Bili&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Bili&lt;/code&gt; 是一个 &lt;code&gt;Python&lt;/code&gt; 编写的从 &lt;code&gt;Bilibili/Acfun&lt;/code&gt; 下载 &lt;code&gt;弹幕/视频&lt;/code&gt; 的工具。&lt;/p&gt;</summary>
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="bilibili" scheme="https://blog.xtao.de/tags/bilibili/"/>
    
    <category term="quicker" scheme="https://blog.xtao.de/tags/quicker/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://blog.xtao.de/350.html"/>
    <id>https://blog.xtao.de/350.html</id>
    <published>2021-07-01T06:19:00.000Z</published>
    <updated>2021-12-27T05:29:29.246Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo new <span class="hljs-string">&quot;My New Post&quot;</span><br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo server<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo generate<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo deploy<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="日常" scheme="https://blog.xtao.de/categories/%E6%97%A5%E5%B8%B8/"/>
    
    
  </entry>
  
  <entry>
    <title>QQtoTG,TGtoQQ初探索</title>
    <link href="https://blog.xtao.de/237.html"/>
    <id>https://blog.xtao.de/237.html</id>
    <published>2018-08-04T12:17:00.000Z</published>
    <updated>2021-07-01T07:09:45.310Z</updated>
    
    <content type="html"><![CDATA[<p>今天在github上面看到了 coolq-telegram-bot-x</p><p>然后就尝试着搭了一下，发现圆满成功</p><p>不过还是会有一些小bug</p><p><a href="https://github.com/LynMoe/QQ2TG">小霖大佬的教程</a></p><p>现在搭的这个机器人不支持音频转发和消息撤回!这是一个大锅</p><p>然后不知道是什么原因QQ2TG在我的主机上面搭不了</p><p>所以现在丑的要死每个月还要给coolq 12RMB qwq</p>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="coolq" scheme="https://blog.xtao.de/tags/coolq/"/>
    
    <category term="pro" scheme="https://blog.xtao.de/tags/pro/"/>
    
    <category term="qq" scheme="https://blog.xtao.de/tags/qq/"/>
    
    <category term="Telegram" scheme="https://blog.xtao.de/tags/Telegram/"/>
    
  </entry>
  
  <entry>
    <title>【API】网易云音乐搜索下载API</title>
    <link href="https://blog.xtao.de/44.html"/>
    <id>https://blog.xtao.de/44.html</id>
    <published>2018-02-19T02:35:00.000Z</published>
    <updated>2021-07-01T06:47:22.343Z</updated>
    
    <content type="html"><![CDATA[<p>只是随便很简单就能抓到的接口的。</p><p>接口更新了！必须加上 <code>&amp;version=1</code> 否则都是失效的歌曲地址！！！！</p><p>网易旗下有个 网易博客 跟 LOFTER （这里并不是宣传QWQ）， 在发表日志什么的时候，可以插入网易音乐</p><p>我们打开浏览器F12 转到 NetWork , 然后随便输入一个歌曲名，然后我们就得到了这个API,简化一下接口:接口地址为：</p><p><a href="https://s.music.163.com/search/get/">https://s.music.163.com/search/get/</a></p><p>对应参数：</p><div><table title="" border="1" summary="" cellspacing="0" cellpadding="0"><tbody><tr><td>名称</td><td>值</td><td>作用</td></tr><tr><td>version</td><td><p lang="en-US">1</p></td><td>必填，不然查询到的歌曲地址是失效的。</td></tr><tr><td><p lang="en-US">src</p></td><td><p lang="en-US">blog</p></td><td><span lang="zh-CN">这个也不是必填，网易博客是</span><span lang="en-US">blog</span><span lang="zh-CN">，</span><span lang="en-US">lofter</span><span lang="zh-CN">就是</span><span lang="en-US">lofter</span></td></tr><tr><td><p lang="en-US">type</p></td><td><p lang="en-US">1</p></td><td><span lang="zh-CN">这是个必填的，默认就好了</span><span lang="en-US">~</span></td></tr><tr><td><p lang="x-none">s</p></td><td>skying</td><td><span lang="zh-CN">搜索内容不用多说啦，</span> <span lang="zh-CN">搜索歌名，</span> <span lang="zh-CN">歌手名，</span> <span lang="zh-CN">专辑名，</span> <span lang="zh-CN">应该事都没问题的</span><span lang="en-US">~</span></td></tr><tr><td><p lang="en-US">limit</p></td><td><p lang="en-US">10</p></td><td><span lang="zh-CN">返回搜索结果数量，</span> <span lang="zh-CN">我也没有找上限是多少。自己试试吧</span></td></tr><tr><td><p lang="en-US">offset</p></td><td><p lang="en-US">0</p></td><td><span lang="zh-CN">搜索结果页数</span><span lang="en-US">~</span><span lang="zh-CN">，一页显示不完就有多几页啦。</span> <span lang="zh-CN">从</span><span lang="en-US">0</span><span lang="zh-CN">开始哟</span></td></tr></tbody></table></div><p>例： <a href="https://s.music.163.com/search/get/?type=1&version=1&s=skying&limit=10&offset=0">https://s.music.163.com/search/get/?type=1&amp;version=1&amp;s=skying&amp;limit=10&amp;offset=0</a></p><p>返回格式为 JSON 有些搜索结果有点长</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>result<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>songCount<span class="hljs-punctuation">:</span> <span class="hljs-number">1500</span><span class="hljs-punctuation">,</span><br>songs<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br><span class="hljs-punctuation">&#123;</span><br>id<span class="hljs-punctuation">:</span> <span class="hljs-number">499213223</span><span class="hljs-punctuation">,</span>  <span class="hljs-comment">//网易歌曲搜索ID</span><br>name<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Skying&quot;</span><span class="hljs-punctuation">,</span><br>artists<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br><span class="hljs-punctuation">&#123;</span><br>id<span class="hljs-punctuation">:</span> <span class="hljs-number">12418577</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌手ID</span><br>name<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;元小汐&quot;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//歌手名称</span><br>picUrl<span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-comment">//歌手图片</span><br><span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br><span class="hljs-punctuation">&#123;</span><br>id<span class="hljs-punctuation">:</span> <span class="hljs-number">12271611</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌手ID</span><br>name<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Carla&quot;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//歌手名称</span><br>picUrl<span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-comment">//歌手图片</span><br><span class="hljs-punctuation">&#125;</span><br><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span><br>album<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>id<span class="hljs-punctuation">:</span> <span class="hljs-number">35963214</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌曲ID</span><br>name<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Skying&quot;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌曲名称</span><br>artist<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>id<span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span><br>name<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;&quot;</span><span class="hljs-punctuation">,</span><br>picUrl<span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><br><span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br>picUrl<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://p1.music.126.net/Z_Hte_f1iajCgzricHfWOA==/109951163004340752.jpg&quot;</span><br><span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌曲图片</span><br>audio<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://music.163.com/song/media/outer/url?id=499213223&quot;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易歌曲mp3链接</span><br>djProgramId<span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span><br>page<span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://music.163.com/m/song/499213223&quot;</span><br><span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><span class="hljs-comment">//网易云音乐网页</span><br><span class="hljs-punctuation">]</span><br><span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br>code<span class="hljs-punctuation">:</span> <span class="hljs-number">200</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><p>经测试，全部可以支持https访问 API接口也行 具体测试嘛QWQ</p>]]></content>
    
    
      
      
        
        
    <summary type="html"></summary>
        
      
    
    
    
    <category term="技术" scheme="https://blog.xtao.de/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="API" scheme="https://blog.xtao.de/tags/API/"/>
    
    <category term="网易云音乐" scheme="https://blog.xtao.de/tags/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90/"/>
    
  </entry>
  
</feed>
