<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>栏观 Blog</title>
        <link>https://linlan.xyz/blog</link>
        <description>栏观 Blog</description>
        <lastBuildDate>Sun, 16 Jun 2024 01:24:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh</language>
        <item>
            <title><![CDATA[魔兽世界WLK怀旧服赚钱攻略]]></title>
            <link>https://linlan.xyz/blog/wow-2024</link>
            <guid>https://linlan.xyz/blog/wow-2024</guid>
            <pubDate>Sun, 16 Jun 2024 01:24:56 GMT</pubDate>
            <description><![CDATA[&emsp;魔兽世界国服开服在即，根据网易官方的公告，将先开放《巫妖王之怒》。相信很多地精玩家已经摩拳擦掌了，那么让我们一起来看看如何在 WLK 当地精赚钱。]]></description>
            <content:encoded><![CDATA[<p> <!-- -->魔兽世界国服开服在即，根据网易官方的公告，将先开放《巫妖王之怒》。相信很多地精玩家已经摩拳擦掌了，那么让我们一起来看看如何在 <em>WLK</em> 当地精赚钱。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-工具篇">1. 工具篇<a href="#1-工具篇" class="hash-link" aria-label="1. 工具篇的直接链接" title="1. 工具篇的直接链接">​</a></h3><p> <!-- -->工欲善其事必先利其器，作为一个合格的地精，提速的工具是必不可少的。常见的工具包括插件、宏等，下面将一一介绍。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="11-论坛篇">1.1 论坛篇<a href="#11-论坛篇" class="hash-link" aria-label="1.1 论坛篇的直接链接" title="1.1 论坛篇的直接链接">​</a></h4><p> <!-- -->学习交流是人成长的关键，国服最大的论坛莫过于<a href="https://nga.178.com/" target="_blank" rel="noopener noreferrer">NGA</a>。<em>NGA</em> 专门开辟了一个<a href="https://nga.178.com/thread.php?fid=191&amp;rand=327" target="_blank" rel="noopener noreferrer">地精商会</a>栏目，可以前往论坛学习其他成功地精的经验。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="12-插件篇">1.2 插件篇<a href="#12-插件篇" class="hash-link" aria-label="1.2 插件篇的直接链接" title="1.2 插件篇的直接链接">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="121-黑盒工坊">1.2.1 黑盒工坊<a href="#121-黑盒工坊" class="hash-link" aria-label="1.2.1 黑盒工坊的直接链接" title="1.2.1 黑盒工坊的直接链接">​</a></h5><p> <a href="https://workshop.xiaoheihe.cn/home" target="_blank" rel="noopener noreferrer">黑盒工坊</a>是一款插件管理工具，里面包含了常用的插件、 <em>WA</em> 脚本、魔兽世界数据等，支持插件的更新，非常方便。</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="122-tsm">1.2.2 TSM<a href="#122-tsm" class="hash-link" aria-label="1.2.2 TSM的直接链接" title="1.2.2 TSM的直接链接">​</a></h5><p> <!-- --> <em>TSM</em> 是目前使用比较多的拍卖行插件，玩家可以通过黑盒工坊进行下载。插件的使用可以参考<a href="https://nga.178.com/read.php?tid=24952572" target="_blank" rel="noopener noreferrer">论坛文章</a>。接下来的小节，会针对最常用的功能进行介绍。</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="123-idtip">1.2.3 idtip<a href="#123-idtip" class="hash-link" aria-label="1.2.3 idtip的直接链接" title="1.2.3 idtip的直接链接">​</a></h5><p> <!-- -->在宏或者其他插件里，会用到物品的 <em>id</em> ，可以使用这款插件查询物品的 <em>id</em>。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="13-宏">1.3 宏<a href="#13-宏" class="hash-link" aria-label="1.3 宏的直接链接" title="1.3 宏的直接链接">​</a></h4><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-规则篇">2. 规则篇<a href="#2-规则篇" class="hash-link" aria-label="2. 规则篇的直接链接" title="2. 规则篇的直接链接">​</a></h3><p> <!-- -->拍卖行（ <em>AH</em> ）是魔兽世界里非常重要的一个机制：它允许玩家将商品托管到拍卖行，供其他玩家购买。拍卖行也有一些规则（例如收取托管费、交易成功之后收取手续费等），了解这些规则是非常必要的。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="21-交易对象">2.1 交易对象<a href="#21-交易对象" class="hash-link" aria-label="2.1 交易对象的直接链接" title="2.1 交易对象的直接链接">​</a></h4><p> <!-- -->魔兽世界划分了两个阵营：联盟和部落。主城里的拍卖行，只能同阵营的玩家进行交易。但有一些中立拍卖行（加基森、藏宝海湾等），允许购买敌对阵营的物品，这使得倒卖敌对阵营的商品成为可能。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="22-托管费用">2.2 托管费用<a href="#22-托管费用" class="hash-link" aria-label="2.2 托管费用的直接链接" title="2.2 托管费用的直接链接">​</a></h4><p> <!-- -->当你将商品托管给拍卖行的时候，无论交易成功与否，都需要支付一笔托管费。托管费的多少取决于商品卖给 <em>NPC</em> 的价格和你托管的时长。有一些商品（例如附魔材料）<em>NPC</em> 是不收的，所以也就没有托管费用。</p><p> <!-- -->举个例子：一个商品卖个 <em>NPC</em> 是 <em>100G</em> ，如果托管12个小时，拍卖行会收取8%的托管费，即 <em>8G</em>；托管24小时，收取20%的托管费，即 <em>20G</em> ，以此类推。拍卖行最多支持托管48个小时，超过48个小时，还没有成交，商品会通过邮件的形式邮寄给你。</p>]]></content:encoded>
            <category>魔兽世界</category>
        </item>
        <item>
            <title><![CDATA[CSS是如何处理长度的]]></title>
            <link>https://linlan.xyz/blog/css-handle-length</link>
            <guid>https://linlan.xyz/blog/css-handle-length</guid>
            <pubDate>Sat, 15 Jun 2024 07:33:21 GMT</pubDate>
            <description><![CDATA[&emsp; CSS （级联样式表）是一种控制 HTML 页面样式的语言。页面样式中，控件的大小是必不可少的，那么 CSS 是怎么处理长度使得在不同的设备上都能按照我们预想的大小进行展示呢？]]></description>
            <content:encoded><![CDATA[<p> <!-- --> <em>CSS</em> （级联样式表）是一种控制 <em>HTML</em> 页面样式的语言。页面样式中，控件的大小是必不可少的，那么 <em>CSS</em> 是怎么处理长度使得在不同的设备上都能按照我们预想的大小进行展示呢？</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-基本概念">1. 基本概念<a href="#1-基本概念" class="hash-link" aria-label="1. 基本概念的直接链接" title="1. 基本概念的直接链接">​</a></h3><p> <!-- --> 在介绍 <em>CSS</em> 如何处理长度之前，需要先介绍一些重要的概念，它们是理解问题的关键。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="11-像素">1.1 像素<a href="#11-像素" class="hash-link" aria-label="1.1 像素的直接链接" title="1.1 像素的直接链接">​</a></h4><p> <!-- --> 像素是构成数字影像的最小单元，一幅数字影像由千千万万的像素构成。例如一台数码相机，它的宽有1600个像素，高有1200个像素，那么它拍出来的照片就有 1600 * 1200 = 192万个像素。目前很多手机摄像头的像素能达到一亿，用这样的手机拍出的照片也就更加清晰。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="12-分辨率">1.2 分辨率<a href="#12-分辨率" class="hash-link" aria-label="1.2 分辨率的直接链接" title="1.2 分辨率的直接链接">​</a></h4><p> <!-- --> 分辨率是用来测量显示系统对细节的分辨能力，常见的单位有：<em>dpi</em> (点每英寸)、<em>lpi</em> (线每英寸) 和 <em>ppi</em> (像素每英寸)。其中 <em>dpi</em> 用于打印领域，<em>ppi</em> 用于数字图像显示领域。可以看到分辨率指在单位长度下，像素的数量。像素越多，对细节的分辨能力也就越强。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="13-1080p和2k">1.3 1080P和2K<a href="#13-1080p和2k" class="hash-link" aria-label="1.3 1080P和2K的直接链接" title="1.3 1080P和2K的直接链接">​</a></h4><p> <!-- --> <em>1080p</em> 和 <em>2K</em> 都是分辨率的概念，但又并不是上面介绍的单位，但可以进行转换。显示器长宽比一般为 <em>16:9</em>  ，业界通常把 <em>1920*1080</em> 的显示器（或者视频）称为 <em>1080p</em>，它的含义是宽有1920个像素，高有1080个像素。<em>2K</em> 是指宽度像素的个数接近2000个，所以严格意义来说，<em>1080p</em> 也可以算 <em>2K</em>，但目前 <em>2K</em> 屏幕指的是 <em>2560*1440</em>。</p><p> <!-- --> 转换成 <em>ppi</em> 也非常容易，假设一个 <em>2560*1440</em> 的显示器，它大小是27寸，这里的27寸指对角线的长度。根据勾股定理，可以算出对角线的像素个数约为2937个，所以 <em>ppi</em> 约为108。手机屏幕的 <em>ppi</em> 计算方式一样，懂得了计算方式之后，就不怕厂商忽悠了。</p><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>CSS</category>
        </item>
        <item>
            <title><![CDATA[vs code使用记录]]></title>
            <link>https://linlan.xyz/blog/vs-code-usage</link>
            <guid>https://linlan.xyz/blog/vs-code-usage</guid>
            <pubDate>Sun, 19 May 2024 14:15:42 GMT</pubDate>
            <description><![CDATA[1.在vs中，用浏览器打开文件]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1在vs中用浏览器打开文件">1.在vs中，用浏览器打开文件<a href="#1在vs中用浏览器打开文件" class="hash-link" aria-label="1.在vs中，用浏览器打开文件的直接链接" title="1.在vs中，用浏览器打开文件的直接链接">​</a></h2><p> 编辑 <em>html</em> 文件时，需要用浏览器打开文件进行调试。这里可以使用 <em>vs code</em> 的 <em>task</em> 功能。</p><ul><li>按下 <em>F1</em> ，在弹窗里面搜索 <em>Config Task</em> ，如果之前没有配置过 <em>task</em> ，可以点击模板，创建 <em>task</em></li></ul><ul><li>编辑 <em>task</em> 文件，这里 <em>group</em> 选择的 <em>build</em> ，这样 <em>Ctrl + Shift + B</em> 就可以唤出 <em>open in explorer</em> 这个 <em>task</em> 了</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "version": "2.0.0",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "tasks": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            "label": "open in explorer",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            "command": "explorer",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            "windows": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                "command": "explorer.exe"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            "group": "build",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            "args": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                "${file}"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>vs code</category>
        </item>
        <item>
            <title><![CDATA[互联网上优质的资源]]></title>
            <link>https://linlan.xyz/blog/awaresome-resource</link>
            <guid>https://linlan.xyz/blog/awaresome-resource</guid>
            <pubDate>Sun, 19 May 2024 08:50:20 GMT</pubDate>
            <description><![CDATA[互联网极大的方便了知识和信息的传播，将其视为人类历史的最伟大的发明之一都不为过。本文整理互联网上一些非常优质的资源，相信它能帮助到大家。]]></description>
            <content:encoded><![CDATA[<p> 互联网极大的方便了知识和信息的传播，将其视为人类历史的最伟大的发明之一都不为过。本文整理互联网上一些非常优质的资源，相信它能帮助到大家。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-网络搭建">1. 网络搭建<a href="#1-网络搭建" class="hash-link" aria-label="1. 网络搭建的直接链接" title="1. 网络搭建的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="11-nipio">1.1 nip.io<a href="#11-nipio" class="hash-link" aria-label="1.1 nip.io的直接链接" title="1.1 nip.io的直接链接">​</a></h4><p> <a href="https://nip.io/" target="_blank" rel="noopener noreferrer">nip.io</a>是一款免费的 <em>DNS</em> 解析器，它能将任意的一个 <em>ip</em> 地址映射成为一个域名。例如，笔者购买了一台云服务器，云服务器厂商分配的 <em>ip</em> 地址为: <code>a.b.c.d</code> 。那么 <code>a-b-c-d.nip.io</code> 域名就会解析到我们的云服务器，非常的方便。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="12-x-ui">1.2 x-ui<a href="#12-x-ui" class="hash-link" aria-label="1.2 x-ui的直接链接" title="1.2 x-ui的直接链接">​</a></h4><p> <a href="https://github.com/vaxilu/x-ui" target="_blank" rel="noopener noreferrer">x-ui</a>是一款支持多协议多用户的 <em>xray</em> 面板，适合小白用户搭建自己的 <em>xray</em> 服务器。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-多媒体">2. 多媒体<a href="#2-多媒体" class="hash-link" aria-label="2. 多媒体的直接链接" title="2. 多媒体的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="21-spleeter">2.1 Spleeter<a href="#21-spleeter" class="hash-link" aria-label="2.1 Spleeter的直接链接" title="2.1 Spleeter的直接链接">​</a></h4><p> <a href="https://github.com/boy1dr/SpleeterGui" target="_blank" rel="noopener noreferrer">Spleeter</a>能够将音频分成背景音乐和人声，它支持英语、中文、阿拉伯语、法语、日语等。有需要做音频混合、自媒体的小伙伴可以试一试。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-金融投资">3. 金融投资<a href="#3-金融投资" class="hash-link" aria-label="3. 金融投资的直接链接" title="3. 金融投资的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="31-openbbterminal">3.1 OpenBBTerminal<a href="#31-openbbterminal" class="hash-link" aria-label="3.1 OpenBBTerminal的直接链接" title="3.1 OpenBBTerminal的直接链接">​</a></h4><p> <a href="https://github.com/OpenBB-finance/OpenBBTerminal" target="_blank" rel="noopener noreferrer">OpenBBTerminal</a>是一款金融投资分析工具，提供 <em>ui</em> 界面和 <em>SDK</em> 两种方式。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-ai">4. AI<a href="#4-ai" class="hash-link" aria-label="4. AI的直接链接" title="4. AI的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="41-animateddrawings">4.1 AnimatedDrawings<a href="#41-animateddrawings" class="hash-link" aria-label="4.1 AnimatedDrawings的直接链接" title="4.1 AnimatedDrawings的直接链接">​</a></h4><p> <a href="https://github.com/facebookresearch/AnimatedDrawings" target="_blank" rel="noopener noreferrer">AnimatedDrawings</a>能够让你的画像人一样运动。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="42-faster-whisper">4.2 faster-whisper<a href="#42-faster-whisper" class="hash-link" aria-label="4.2 faster-whisper的直接链接" title="4.2 faster-whisper的直接链接">​</a></h4><p> <a href="https://github.com/SYSTRAN/faster-whisper" target="_blank" rel="noopener noreferrer">faster-whisper</a>相比于 <em>openai</em> 的 <em>whisper</em> 主要有以下两个优点：</p><ol><li>占用更少的显存</li><li>支持单词级别的时间戳</li></ol><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>优质资源集合</category>
        </item>
        <item>
            <title><![CDATA[Windows 10安装Ubuntu双系统]]></title>
            <link>https://linlan.xyz/blog/ubuntu-2-sys</link>
            <guid>https://linlan.xyz/blog/ubuntu-2-sys</guid>
            <pubDate>Sun, 19 May 2024 08:50:20 GMT</pubDate>
            <description><![CDATA[有些开源代码对 Windows 系统支持的不是很好，有时只能在 Linux 系统下编译。安装虚拟机能解决部分问题，但调试代码的体验不是很好，不如安装双系统。]]></description>
            <content:encoded><![CDATA[<p> 有些开源代码对 <em>Windows</em> 系统支持的不是很好，有时只能在 <em>Linux</em> 系统下编译。安装虚拟机能解决部分问题，但调试代码的体验不是很好，不如安装双系统。</p><p> 相信小伙伴们已经看过很多双系统教程了，已经知道 <em>Ubuntu</em> 的引导程序能够识别 <em>Windows</em> 的引导程序。这里需要注意的是安装 <em>Ubuntu</em> 的时候不要将 <em>Windows</em> 的引导程序覆盖了，对于像笔者一样有多块磁盘的小伙伴还需要将 <em>Ubuntu</em> 的引导程序和 <em>Windows</em> 的引导程序放到同一个磁盘，这样 <em>Ubuntu</em> 就能正常识别到 <em>Windows</em> 的引导程序，实现双系统切换。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-启动盘制作">1. 启动盘制作<a href="#1-启动盘制作" class="hash-link" aria-label="1. 启动盘制作的直接链接" title="1. 启动盘制作的直接链接">​</a></h3><p> 这一步没有太多需要注意的地方，只需将 <em>Ubuntu</em> 的安装镜像打包到 <em>U</em> 盘中，同时让电脑从 <em>U</em> 盘启动即可。<em>Ubuntu</em> 的镜像可以前往<a href="https://ubuntu.com/download" target="_blank" rel="noopener noreferrer">官网</a>进行下载，镜像写入工具可以使用<a href="https://www.ultraiso.com/" target="_blank" rel="noopener noreferrer">ultraiso</a>。</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_S0QG"><p><em>U</em> 盘格式化的时候需要注意，不要用 <em>FAT32</em> ，因为 <em>FAT32</em> 最多只支持4 <em>G</em> 。</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-给ubuntu分配磁盘空间">2. 给Ubuntu分配磁盘空间<a href="#2-给ubuntu分配磁盘空间" class="hash-link" aria-label="2. 给Ubuntu分配磁盘空间的直接链接" title="2. 给Ubuntu分配磁盘空间的直接链接">​</a></h3><p> 前面介绍过，笔者的系统有两块磁盘，所以在两块磁盘上都为 <em>Ubuntu</em> 分配了空间。<em>C</em> 盘所在的磁盘只分配了10 <em>G</em> （其实可以更少），用来存放 <em>Ubuntu</em> 的引导程序，<em>Ubuntu</em> 的根目录挂在到了 <em>D</em> 盘所在的磁盘。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAbUlEQVQImQXB0QqDIBiAUd//nbpbBCsZSHPMMWXacEhY/Xb/7RwVY6TvnwxDYJoSXTczjpGpd+iLxVw9+f1FpbRg7QetHdYm7rcXznjCHDDa4R8LkjOq1sohO3JsSPnR1oKshbOuiOy0U2it8Qduf2xOuLsXsAAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="193"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/ubuntu-sys-1.404b6da.640.png" srcset="/assets/ideal-img/ubuntu-sys-1.404b6da.640.png 640w,/assets/ideal-img/ubuntu-sys-1.e28eebc.1030.png 1030w" alt="磁盘分配空间示意图" width="640" height="193"></noscript></div> <br><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-安装ubuntu">3. 安装Ubuntu<a href="#3-安装ubuntu" class="hash-link" aria-label="3. 安装Ubuntu的直接链接" title="3. 安装Ubuntu的直接链接">​</a></h3><p> 进入 <em>BIOS</em>，选择 <em>U</em> 盘启动，即可进行系统的安装流程。选择安装模式时，一定要选择最后一个选项，否则就有可能将 <em>Windows</em> 的引导程序覆盖掉。点击下一步就进入到磁盘挂载的页面，找到步骤2分配的磁盘进行挂载，记住需要将 <em>Ubuntu</em> 的引导程序放到 <em>C</em> 盘所在的磁盘。安装完成重启，即可看到系统选择界面了。</p><img src="/assets/images/ubuntu-sys-2-ec1555e9d1dcbf3ece98f2a6e06cb734.webp" alt="选择安装模式"> <br><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>Ubuntu</category>
            <category>双系统</category>
        </item>
        <item>
            <title><![CDATA[在中国如何使用chatgpt]]></title>
            <link>https://linlan.xyz/blog/chatgpt-in-china</link>
            <guid>https://linlan.xyz/blog/chatgpt-in-china</guid>
            <pubDate>Sun, 14 May 2023 06:36:15 GMT</pubDate>
            <description><![CDATA[chatgpt自发布以来在世界范围内掀起了一股热潮，相信很多中国的朋友也想尝尝鲜。除了科学上网之外，chatgpt_ 还需要使用国外的手机号进行验证，这时需要使用虚拟运营商。]]></description>
            <content:encoded><![CDATA[<p> <a href="https://chat.openai.com/chat?__cf_chl_tk=UmNjLe3DKVaSiUUJa8g5_K1334MIOFGGKKft7gkv.FQ-1678519355-0-gaNycGzNFmU" target="_blank" rel="noopener noreferrer">chatgpt</a>自发布以来在世界范围内掀起了一股热潮，相信很多中国的朋友也想尝尝鲜。除了科学上网之外，<em>chatgpt</em> 还需要使用国外的手机号进行验证，这时需要使用虚拟运营商。</p><p> <a href="https://sms-activate.org/" target="_blank" rel="noopener noreferrer">sms-activate-org</a>是一家比较常用的虚拟运营商，它支持支付宝，充值非常方便。<em>chatgpt</em> 虚拟电话的价格在一美元以内，故只需要充值1美元即可。充值完成之后，在页面左侧搜索 <em>chatgpt</em> 服务，进行购买即可。购买完成之后，前往 <em>chatgpt</em> 官网进行手机号验证，等待虚拟账号接受短信即可。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAASCAYAAABit09LAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACgUlEQVQokTWQ20vTcQDFv/9GUBB012zetuZ0Ss7M2ba2+fOyjby0mpdd2tzcXd2UIFKQCMrXhIggCF/Kogiyhx6CxKgkKSuvWYMCK6dzn9DowIdzOHBejkinN0ilfrCeTrOtbDb7z4FMZotMep2Nn98R22Vmc5PNjQ3W1n7x+0+a1fk5UitLOwOyW5DNIMbGn3L99gSjdx4x8ewlD5+/YvzeOA8mHjP1fp5X7z4y+fINwtJ9Gck7jO/KGLOf5pl6O8vs/CofFr/x/vMyXxaWefRkEnHt1n1ez3xkemaOhZUUi1+3+c7S6v+c4umLaUS9f4TA8Bj2/htYgleR/CM7GC8Oo3dfYWD0Lv6hm4gTFy5R1BRhr9bNnmonuzSd7K52UmyNkV8fQuceotgaR5w8l8TgGkJhjXPoTDcHDT4OG/2o2xKUtvSjaAhQeMaNOGGNo/EMIrdGOaDzcUDvY5/OS35DmGP1YXJqO1Do2xEGZ5CKrgRyWwyZFCKvLkhhY5SKtiSq5n4UdV7Ukhuh7QhT7hxA0dLHYVMPh0w95EhhlC0Jimx9FBg9lJo7EXbHIDXno2iaI+TXupDVOinSe6hoDKKSAihrHZTpLiAiJgcW72Wk9gFKzX5Upm7K6vxU26JorBGqTE4shjaEozVEZXsU7bk4SlM3CqMPpdlPpTVCRVMYtdGFwXAeIdU4OW0PYe5IUKB1IqvpRK73oLGEUNcHUNXYUevsiOMuD2rXIIW2OLlSeIccKURJaxJFc5KiOh/lkgtR3uKmyjWI3BIjxxQg1xTgqLmHkrN9KGy9FBvdlJm7EKcao5Q4epE1hNiv8+6cfcQYQHm2l0JLjLzTnSj1Dv4Ce0q8uiuoh78AAAAASUVORK5CYII=&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="316" height="574"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/sms-chatgpt.75c2305.316.png" srcset="/assets/ideal-img/sms-chatgpt.75c2305.316.png 316w" alt="搜索chatgpt服务" width="316" height="574"></noscript></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>chatgpt</category>
        </item>
        <item>
            <title><![CDATA[如何在个人计算机上运行open ai的whisper模型]]></title>
            <link>https://linlan.xyz/blog/open-ai-local-01</link>
            <guid>https://linlan.xyz/blog/open-ai-local-01</guid>
            <pubDate>Sun, 14 May 2023 06:36:15 GMT</pubDate>
            <description><![CDATA[随着 chatgpt 的发布，open ai 火遍全网，但它所需要的算力也将普通人拒之门外。Github 上一位保加利亚的大神实现了 open ai 的模型，声称可以在个人计算机上运行，本文基于[ggerganov]]></description>
            <content:encoded><![CDATA[<p> 随着 <em>chatgpt</em> 的发布，<em>open ai</em> 火遍全网，但它所需要的算力也将普通人拒之门外。<em>Github</em> 上一位保加利亚的大神实现了 <em>open ai</em> 的模型，声称可以在个人计算机上运行，本文基于<a href="https://github.com/ggerganov/whisper.cpp" target="_blank" rel="noopener noreferrer">ggerganov
/whisper.cpp</a>这个仓库，在 <em>Windows</em> 上运行 <em>whisper</em> 模型。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="1-cygwin--mingw-安装">1. cygwin &amp; MinGW 安装<a href="#1-cygwin--mingw-安装" class="hash-link" aria-label="1. cygwin &amp; MinGW 安装的直接链接" title="1. cygwin &amp; MinGW 安装的直接链接">​</a></h4><p> 该模型编译依赖 <em>gcc</em> ，故需要先在 <em>Windows</em> 上安装 <em>gcc</em> 的编译环境。 <em>cygwin</em> 使用广泛，故本文采用 <em>cygwin</em>。</p><p> 前往<a href="https://cygwin.com/install.html" target="_blank" rel="noopener noreferrer">cygwin</a>官网下载安装包，安装到下面界面的时候，记得搜索以下 <em>gcc</em>，找到 <em>mingw</em> 对应的包，只需要选中 <em>gcc-g++</em> 即可，它会自动安装对应的依赖。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAc0lEQVQImR2MwQ7DIAxD+f8vXG+dKsHoEFBYGkBQT4klX/xsG2sdeu+otaq99wghwLkPxhjKWmswMUaIJGC+tZRiwr6/sdZSJjLWWjzPA2YGEUGGOWVsrw1Et5ZkYL7HgUWEUQralcE54VcK/Hlizqkn4j8rH5ngIaibqwAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="291"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/cygwin.8140cf9.640.png" srcset="/assets/ideal-img/cygwin.8140cf9.640.png 640w,/assets/ideal-img/cygwin.e4115fb.1030.png 1030w" alt="搜索gcc相关包" width="640" height="291"></noscript></div><p> 安装完成之后，打开 <em>cygwin</em>，检查 <em>/usr/bin/</em> 目录下是否已经安装好 <em>gcc</em> 了。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-模型下载">2. 模型下载<a href="#2-模型下载" class="hash-link" aria-label="2. 模型下载的直接链接" title="2. 模型下载的直接链接">​</a></h4><p> 将 <em>ggml</em> 格式的模型下载到本地。打开 <em>Windows Power Shell</em>，进入到下载文件的 <em>models</em> 目录下，执行以下命令:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">.\download-ggml-model.cmd base.en</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="3执行编译">3.执行编译<a href="#3执行编译" class="hash-link" aria-label="3.执行编译的直接链接" title="3.执行编译的直接链接">​</a></h4><p> 因为 <em>cygwin</em> 下 <em>gcc</em> 和 <em>g++</em> 名字问题，在执行 <em>make</em> 命令时需要指定参数。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">make CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>信息</div><div class="admonitionContent_S0QG"><p> 如果提示找不到 <em>dll</em>，思路如下：</p><ol><li>确认 <em>dll</em> 是否已经安装，通过 <em>cygwin</em> 的安装程序即可查看。</li></ol><ol start="2"><li>将下面变量放到 <em>.bashrc</em> 文件里</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export LD_LIBRARY_PATH=/usr/lib</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export PATH=$PATH:/usr/x86_64-w64-mingw32/sys-root/mingw/bin</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="4-执行-whisper">4. 执行 whisper<a href="#4-执行-whisper" class="hash-link" aria-label="4. 执行 whisper的直接链接" title="4. 执行 whisper的直接链接">​</a></h4><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">./main -f samples/jfk.wav</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>openai</category>
            <category>chatgpt</category>
        </item>
        <item>
            <title><![CDATA[安卓模拟器如何录制gif]]></title>
            <link>https://linlan.xyz/blog/emulator-gif</link>
            <guid>https://linlan.xyz/blog/emulator-gif</guid>
            <pubDate>Sun, 28 Aug 2022 02:04:37 GMT</pubDate>
            <description><![CDATA[在编写技术文档时，为了让读者能够更好的理解，一般会贴运行的效果图。本文介绍安卓模拟器如何录制 gif 。]]></description>
            <content:encoded><![CDATA[<p> 在编写技术文档时，为了让读者能够更好的理解，一般会贴运行的效果图。本文介绍安卓模拟器如何录制 <em>gif</em> 。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-使用licecap">1. 使用LICEcap<a href="#1-使用licecap" class="hash-link" aria-label="1. 使用LICEcap的直接链接" title="1. 使用LICEcap的直接链接">​</a></h3><p> <a href="https://www.cockos.com/licecap/" target="_blank" rel="noopener noreferrer">LICEcap</a>是一款简介、免费的屏幕录制工具。它操作非常简单，只需要将待录制的内容放入 <em>LICEcap</em> 的操作框内，点击 <em>Record</em> 即可开始录制。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABDklEQVQYlTXBPUsCcQDA4fs4DTlIVCJa/tHTU0/tjIpqaOgFQzzj1DtFa5Jok8YWjXRpMCMqOSVRiTAha6+tD/Jr6nmkdDbP9t4hRt6k3rzldfaNPZ5xVW+Ryhgc6zkMq4Lk9cnMzTvZSsa5qLepjn85f/nhrjvC5fbicC4h5AhSJKbhcC6S2j+g1Wmy09slM9B5m0yQQyouj0BRNaSwusbCsptcVqdjtzkapCmOKrxPp6jxJCsiiByOIwVCKp5VQdE0+Pr84F+jcU1QiRKNaSS0DSSfX0H4A1RKBR7uO9h2n+FwhGkW8XgFIqCQWN9E0k/ymJZF66aB3X3m8amL3etTq11SMC3KpTLV0zP+ACmEqmw0phehAAAAAElFTkSuQmCC&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="443"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/record_gif.646301c.640.png" srcset="/assets/ideal-img/record_gif.646301c.640.png 640w,/assets/ideal-img/record_gif.b3e543e.1030.png 1030w" alt="LICEcap录制git" width="640" height="443"></noscript></div> <br><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_S0QG"><p> 点击开始录制之后，有3秒钟的准备时间。</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-使用模拟器自带录屏工具">2. 使用模拟器自带录屏工具<a href="#2-使用模拟器自带录屏工具" class="hash-link" aria-label="2. 使用模拟器自带录屏工具的直接链接" title="2. 使用模拟器自带录屏工具的直接链接">​</a></h3><p> 安卓模拟器自带录屏工具，在模拟器的右侧点击 <em>more</em> ，弹窗里 <em>Record and Playback</em> 即为录屏工具。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA+ElEQVQImRXBzytDAQDA8XdXu5FcZCfOHJbwZyjCCXcrBy1pMYfxtmdbT0IWKbMsURJFuW0XinkXZJL33t7PrZ7ZI1/5fITZxD5rlxrSySPHp2foepUPVUV5qlB8eKZq2sTjqwhiLsvkVQyxmKdUuuWz0cDzPAzLQTUcfn4hnZERxIMV+vMhFm4ilO/K2LUarutimga2ZeH7TaRUGuH8+oKK/86L9cru1g5f9TrfTR/LcdA0nX8bm9sIhaMC6puKcq8wNj7BUjTK4V6W9ZTEfGSO5dgioyPDCOHwDBlZJpFMMhjqpbMtwPRQkKmBLvqCrfS0t9DdEeAPAei0yi7goYQAAAAASUVORK5CYII=&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="401"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/emulator_record.d41ac8b.640.png" srcset="/assets/ideal-img/emulator_record.d41ac8b.640.png 640w,/assets/ideal-img/emulator_record.48e488b.1030.png 1030w" alt="安卓自带录屏工具" width="640" height="401"></noscript></div> <br><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>Android</category>
        </item>
        <item>
            <title><![CDATA[react-spreadsheet使用指南]]></title>
            <link>https://linlan.xyz/blog/spreadsheet-usage</link>
            <guid>https://linlan.xyz/blog/spreadsheet-usage</guid>
            <pubDate>Thu, 07 Jul 2022 23:44:57 GMT</pubDate>
            <description><![CDATA[react-spreadsheet是 react 的 excel 组件，官方文档内容比较少，本文结合Spreadsheet的源代码，介绍一些该表格组件的几个非常重要的属性。]]></description>
            <content:encoded><![CDATA[<p><a href="https://www.npmjs.com/package/react-spreadsheet" target="_blank" rel="noopener noreferrer">react-spreadsheet</a>是 <em>react</em> 的 <em>excel</em> 组件，<a href="https://iddan.github.io/react-spreadsheet/docs/" target="_blank" rel="noopener noreferrer">官方文档</a>内容比较少，本文结合<a href="https://github.com/iddan/react-spreadsheet/blob/42ce608/src/Spreadsheet.tsx#L126" target="_blank" rel="noopener noreferrer">Spreadsheet</a>的源代码，介绍一些该表格组件的几个非常重要的属性。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-列标签">1. 列标签<a href="#1-列标签" class="hash-link" aria-label="1. 列标签的直接链接" title="1. 列标签的直接链接">​</a></h3><p> 列标签是一个字符数组，默认值为：<!-- -->[A,B,C,...]<!-- -->。属性名称为：<code>columnLabels</code>。举个例子：</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">&lt;Spreadsheet data={[[{ value: "$PROFILE" }, { value: "当前用户，当前主机" }]]} columnLabels={["变量","说明"]}  /&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-行标签">2. 行标签<a href="#2-行标签" class="hash-link" aria-label="2. 行标签的直接链接" title="2. 行标签的直接链接">​</a></h3><p> 和列标签一样，行标签也是一个字符数组，默认值为：<!-- -->[1,2,3,...]<!-- -->，属性名称为：<code>rowLabels</code>，例子同上。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-隐藏行标签">3. 隐藏行标签<a href="#3-隐藏行标签" class="hash-link" aria-label="3. 隐藏行标签的直接链接" title="3. 隐藏行标签的直接链接">​</a></h3><p> 隐藏行标签是一个布尔类型，默认值为<code>false</code>，属性名称为：<code>hideRowIndicators</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-隐藏列标签">4. 隐藏列标签<a href="#4-隐藏列标签" class="hash-link" aria-label="4. 隐藏列标签的直接链接" title="4. 隐藏列标签的直接链接">​</a></h3><p> 隐藏列标签是一个布尔类型，默认值为<code>false</code>，属性名称为：<code>hideColumnIndicators</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="5-value为时渲染失败">5. value为==时渲染失败<a href="#5-value为时渲染失败" class="hash-link" aria-label="5. value为==时渲染失败的直接链接" title="5. value为==时渲染失败的直接链接">​</a></h3><p> 在<code>==</code>前加上空格即可</p><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>react</category>
            <category>spreadsheet</category>
            <category>excel组件</category>
        </item>
        <item>
            <title><![CDATA[minikube启动使用国内镜像]]></title>
            <link>https://linlan.xyz/blog/minikube-cn-image</link>
            <guid>https://linlan.xyz/blog/minikube-cn-image</guid>
            <pubDate>Mon, 04 Jul 2022 23:08:49 GMT</pubDate>
            <description><![CDATA[minikube是单机版的k8s，方便学习和开发k8s]]></description>
            <content:encoded><![CDATA[<blockquote><p>minikube是单机版的k8s，方便学习和开发k8s</p></blockquote><p> 在 <em>minikube</em> 的官方案例中，使用了 <em>k8s.gcr.io</em> 镜像。<em>gcr</em> 是 <em>Google Cloud</em> 的镜像仓库，所以国内是无法访问的。
阿里云的镜像代理地址为：<em>registry.aliyuncs.com/google_containers</em>，需要将 <em>gcr</em> 的镜像地址替换为阿里云的地址，例如：<em>k8s.gcr.io/echoserver:1.4</em> → <em>registry.aliyuncs.com/google_containers/echoserver:1.4</em>。</p><p> <em>minikube</em> 有非常多的插件，通过 <em>minikube addons list</em> 可以查看插件列表，通过 <em>minikube addons enable xxx</em> 可以启用 <em>xxx</em> 插件。官方案例启动的是 <em>metrics server</em>，但该插件也是 <em>k8s.gcr.io</em> 的镜像，所以无法正常运行，需要替换镜像地址。</p><p> 这里先介绍一下如何定位到镜像拉取失败。因为 <em>addons</em> 并没有部署到默认空间，在 <em>k8s</em> 里面，可以通过<code>kubectl get namespace</code>获取所有的命名空间。<em>metrics server</em> 在 <em>kube-system</em> 这个空间中，通过<code>kubectl get pods -n kube-system</code>可以看到 <em>metrics server</em> 拉取镜像失败了。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAIAAAA4WjmaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAa0lEQVQImR3JQQoDIQwAQI+iBkECols1UTDtuh78/+dKO9dRIpJzTikR8X3L5829c865lOK9V2stZo4xAoCIXNertaa1NsY459Te+5wz50TE53mI2hjDGAMAv+69iwgz11qJKISAiNZa9/cFTIcMsvwp2nkAAAAASUVORK5CYII=&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="420" height="161"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/1.6b4add2.420.png" srcset="/assets/ideal-img/1.6b4add2.420.png 420w" alt="获取所有命名空间" width="420" height="161"></noscript></div><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAX0lEQVQImQXB/wpAMBAA4L2AWs41xJjrzo8NrSWUv5T3fyXfp8Z5JmbbWVOi7XsWAcQcIAcoEFUKIfplcq4GaBBXEaN1kWVG67aq1JvSd53Ptu6Di0S398cokSgxBxp+ASUL9y+LBNcAAAAASUVORK5CYII=&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="185"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/2.a4c9186.640.png" srcset="/assets/ideal-img/2.a4c9186.640.png 640w,/assets/ideal-img/2.4e3e9df.771.png 771w" alt="镜像拉取失败" width="640" height="185"></noscript></div><p> 需要将 <em>metrics server</em> 的镜像替换为阿里云的镜像，通过<code>kubectl edit deploy metrics-server -n kube-system</code>，可以修改它的镜像地址。国内的地址为 <em>registry.aliyuncs.com/google_containers/metrics-server:v0.4.2</em>，修改之后进行保存，再次使用<code>kubectl get pods -n kube-system</code>查看 <em>metrics server</em> 容器的状态，发现在启动中。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAXklEQVQImR3BOQ6AIBAAQEotxQMWgoblUBDv0sTC6P+/ZOIMcd67n1LAeaO1NtYiYkEpAJAYwpSSQeSMl5QKgN57KUSeZc5a8szp3dZ7nvZWjaxepLjicHRtqMqzdx8Uxgv3CT6qswAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="197"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/3.2d044f1.640.png" srcset="/assets/ideal-img/3.2d044f1.640.png 640w,/assets/ideal-img/3.a3fe12d.655.png 655w" alt="镜像拉取成功" width="640" height="197"></noscript></div><p> 为了验证 <em>metrics server</em> 是否启动完成，可以执行<code>kubectl top nodes</code>，可以查看 <em>k8s</em> 集群资源的使用情况。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAIAAABol6gpAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGElEQVQImWPQ1NRUBQEVBQVFSUlJQVQAADe9AwTxfb6rAAAAAElFTkSuQmCC&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="74"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/4.92322d8.640.png" srcset="/assets/ideal-img/4.92322d8.640.png 640w,/assets/ideal-img/4.dcda9e7.1030.png 1030w" alt="metrics启动成功" width="640" height="74"></noscript></div><p> <em>ingress</em> 插件和 <em>metrics server</em> 类似，也是镜像无法拉取。有点不同的是 <em>ingress</em> 的命名空间是 <em>ingress-nginx</em>，如果要获取所有命名空间的 <em>pods</em>，可以使用 <code>kubectl get pods --all-namespaces</code>。很遗憾，在阿里云的镜像仓库，没有找到 <em>ingress</em> 的镜像，只能使用代理了。</p><p> 笔者本机启动了一个 <em>http</em> 代理，本地可以通过 <em>localhost:4567</em> 访问。但 <em>minikube</em> 是在容器里面拉取镜像，容器本身的 <em>localhost</em> 并不是宿主机的 <em>localhost</em>。根据<a href="https://minikube.sigs.k8s.io/docs/handbook/host-access/" target="_blank" rel="noopener noreferrer">官方文档</a>，<em>minikube</em> 在 <em>v1.10</em> 之后加入了<code>host.minikube.internal</code>用来访问宿主机的 <em>localhost</em>，最终使用以下命令启动 <em>minikube</em>，成功拉取到 <em>ingress</em> 的镜像。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">minikube start --docker-env HTTP_PROXY=http://host.minikube.internal:10180 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--docker-env HTTPS_PROXY=http://host.minikube.internal:10180</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_S0QG"><p> 搭建代理可以参考<a href="/docs/set-up-site/your-site-in-one">海外建站全攻略</a></p></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>k8s</category>
            <category>minikube</category>
        </item>
        <item>
            <title><![CDATA[Windows PowerShell使用指南]]></title>
            <link>https://linlan.xyz/blog/ps-usage</link>
            <guid>https://linlan.xyz/blog/ps-usage</guid>
            <pubDate>Thu, 30 Jun 2022 23:38:41 GMT</pubDate>
            <description><![CDATA[PowerShell 是 MicroSoft 开发的一款跨平台的任务自动化解决方案，由命令行 Shell、脚本语言和配置框架构成。PowerShell 支持 KornShell 的核心语法，习惯 bash 的朋友非常容易切换到 PowerShell，所以 PowerShell 是 Windows 上非常受欢迎的命令行工具。]]></description>
            <content:encoded><![CDATA[<p> <em>PowerShell</em> 是 <em>MicroSoft</em> 开发的一款跨平台的任务自动化解决方案，由命令行 <em>Shell</em>、脚本语言和配置框架构成。<em>PowerShell</em> 支持 <em>KornShell</em> 的核心语法，习惯 <em>bash</em> 的朋友非常容易切换到 <em>PowerShell</em>，所以 <em>PowerShell</em> 是 <em>Windows</em> 上非常受欢迎的命令行工具。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-配置profile">1. 配置profile<a href="#1-配置profile" class="hash-link" aria-label="1. 配置profile的直接链接" title="1. 配置profile的直接链接">​</a></h3><p> <em>PowerShell</em> 支持个性化配置，同时定义了很多变量来方便用户对 <em>profile</em> 进行配置。</p><div class="Spreadsheet"><table class="Spreadsheet__table"><colgroup><col><col><col></colgroup><tbody><tr><th class="Spreadsheet__header" tabindex="0">变量</th><th class="Spreadsheet__header" tabindex="0">说明</th></tr><tr row="0"><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">$PROFILE</span></td><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">当前用户，当前主机</span></td></tr><tr row="1"><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">$PROFILE.CurrentUserCurrentHost</span></td><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">当前用户，当前主机</span></td></tr><tr row="2"><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">$PROFILE.CurrentUserAllHosts</span></td><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">当前用户，所有主机</span></td></tr><tr row="3"><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">$PROFILE.AllUsersCurrentHost</span></td><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">所有用户，当前主机</span></td></tr><tr row="4"><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">$PROFILE.AllUsersAllHosts</span></td><td class="Spreadsheet__cell" tabindex="0"><span class="Spreadsheet__data-viewer">所有用户，所有主机</span></td></tr></tbody></table><div class="Spreadsheet__floating-rect Spreadsheet__floating-rect--selected Spreadsheet__floating-rect--hidden"></div><div class="Spreadsheet__floating-rect Spreadsheet__floating-rect--copied Spreadsheet__floating-rect--hidden"></div></div><p> 查看变量对应值</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$PROFILE | Get-Member -Type NoteProperty</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 测试文件是否存在</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Test-Path -Path $PROFILE.AllUsersAllHosts</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 新建文件，注意需要管理员权限</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">New-Item -ItemType File -Path $PROFILE.AllUsersAllHost -Force</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 修改文件</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">notepad $PROFILE.AllUsersAllHosts</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 在 <em>profile</em> 里新增代理配置如下，这样启动 <em>PowerShell</em> 时默认会将 <em><a href="http://127.0.0.1/10809" target="_blank" rel="noopener noreferrer">http://127.0.0.1/10809</a></em> 作为 <em>Https</em> 的代理。</p><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">添加代理</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$</span><span class="token constant" style="color:#36acaa">ENV</span><span class="token operator" style="color:#393A34">:</span><span class="token constant" style="color:#36acaa">HTTPS_PROXY</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'http://127.0.0.1:10809'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-scp免密拷贝">2. scp免密拷贝<a href="#2-scp免密拷贝" class="hash-link" aria-label="2. scp免密拷贝的直接链接" title="2. scp免密拷贝的直接链接">​</a></h3><p> 发布站点到服务器时，需要将本地打包好的内容拷贝到远程服务器上。<em>PowerShell</em> 支持 <em>scp</em> 命令，可以参考<a href="/blog/github-usage">github使用</a>一文，将本地的 <em>pub key</em> 加到远程服务器的信任 <em>key</em> 中，这样拷贝时不用输入密码。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cat ~/.ssh/id_rsa.pub | ssh username@server.address.com 'cat &gt;&gt; ~/.ssh/authorized_keys'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 在 <em>profile</em> 里面定义下面两个变量:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$SSH_PUB_KEY='添加到远程服务器信任的key'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$REMOTE_SERVER='远程服务器的地址'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> <a href="/docs/docusaurus/basic-config">docusaraus</a>编译生成的站点可以通过下面命令完成部署。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">scp -i $SSH_PUB_KEY -r build/ $REMOTE_SERVER</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-修改启动powershell时的默认路径">3. 修改启动PowerShell时的默认路径<a href="#3-修改启动powershell时的默认路径" class="hash-link" aria-label="3. 修改启动PowerShell时的默认路径的直接链接" title="3. 修改启动PowerShell时的默认路径的直接链接">​</a></h3><p> 可以通过以下方式修改 <em>PowerShell</em> 的启动路径。</p><ul><li><p>进入目录： <code>C:\Users\yourusername\Documents\WindowsPowerShell</code>，其中 <em>yourusernam</em> 替换成你的系统用户</p></li><li><p>创建一个配置文件，例如：<code>Microsoft.PowerShell_profile.ps1</code></p></li><li><p>在文件中添加以下内容，<em>location</em> 后面填写你希望的目录</p></li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Set-location D:\xxx</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>PowerShell</category>
        </item>
        <item>
            <title><![CDATA[github使用]]></title>
            <link>https://linlan.xyz/blog/github-usage</link>
            <guid>https://linlan.xyz/blog/github-usage</guid>
            <pubDate>Wed, 29 Jun 2022 23:34:08 GMT</pubDate>
            <description><![CDATA[Github是风靡全球的代码托管平台，它托管了无数的开源项目，可以说是一个宝藏网站。]]></description>
            <content:encoded><![CDATA[<p> <a href="https://github.com/" target="_blank" rel="noopener noreferrer"><em>Github</em></a>是风靡全球的代码托管平台，它托管了无数的开源项目，可以说是一个宝藏网站。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-账号申请">1. 账号申请<a href="#1-账号申请" class="hash-link" aria-label="1. 账号申请的直接链接" title="1. 账号申请的直接链接">​</a></h3><p> 前往官网申请账号即可，仅需要一个邮箱。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-添加ssh">2. 添加ssh<a href="#2-添加ssh" class="hash-link" aria-label="2. 添加ssh的直接链接" title="2. 添加ssh的直接链接">​</a></h3><p> 本地和服务器通过 <em>ssh</em> 协议进行通信，所以需要添加 <em>ssh</em>，才可以向服务器推送代码。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="21-生成ssh-key">2.1 生成ssh key<a href="#21-生成ssh-key" class="hash-link" aria-label="2.1 生成ssh key的直接链接" title="2.1 生成ssh key的直接链接">​</a></h4><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">windows</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">mac</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">linux</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p>   先下载<a href="https://git-scm.com/downloads" target="_blank" rel="noopener noreferrer"><em>Git Bash</em></a>，打开 <em>Git Bash</em>，执行以下命令，其中 <em>ed25519</em> 是 <em>key</em> 的类型，<em>ssh-keygen</em> 支持的其他类型有:<em>dsa</em>、<em>ecdsa</em>、<em>esdsa-sk</em>、<em>rsa</em> 等。后面邮箱用你注册 <em>Github</em> 的邮箱地址即可。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ssh-keygen -t ed25519 -C "your_email@example.com"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p> 在生成的 <em>key</em> 的过程中，会提示你指定 <em>key</em> 名字，如果不指定，默认为 <em>ed25519</em>。如果你打算生成多个 <em>key</em>，就需要指定文件名称。  </p><p> 生成 <em>key</em> 之后，需要将 <em>key</em> 加入到 <em>ssh-agent</em> 里面，只有这样本地 <em>ssh</em> 在和 <em>github</em> 通信的时候，才知道用哪个 <em>key</em> 进行通信。第一条命令是启动 <em>ssh-agent</em>，第二条命令是将生成的 <em>key</em> 添加到 <em>ssh-agent</em> 里面。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eval "$(ssh-agent -s)"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ssh-add ~/.ssh/id_ed25519</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>警告</div><div class="admonitionContent_S0QG"><p> 这里需要注意，<em>ssh-agent</em> 不会自动启动。下次重启之后，又需要手动启动 <em>ssh-agent</em>，并且添加文件，非常麻烦。这里可以在 <em>C:<!-- -->\<!-- -->Users<!-- -->\<!-- -->tiago.ssh</em> 目录下，新增一个 <em>config</em> 文件，内容如下：</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Host *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  AddKeysToAgent yes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  IdentityFile ~/.ssh/id_ed25519</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><em>Mac</em> 的命令和 <em>windows</em> 的命令类似，一些参数的含义就不再赘述。</p><ol><li>生成 <em>ssh key</em></li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ssh-keygen -t ed25519 -C "your_email@example.com"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="2"><li>启动 <em>ssh agent</em></li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eval "$(ssh-agent -s)"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="3"><li>修改 <em>~/.ssh/config</em></li></ol><p> 如果你系统版本高于 <em>macOS Sierra 10.12.2</em>，你需要修改 <em>~/.ssh/config</em>，打开 <em>~/.ssh/config</em>，文件内容如下，如果你文件名称不是 <em>id_ed25519</em>，需要修改成对应的文件名</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Host *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  AddKeysToAgent yes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  UseKeychain yes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  IdentityFile ~/.ssh/id_ed25519</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="4"><li>添加到 <em>ssh agent</em> 里</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ssh-add -K ~/.ssh/id_ed25519</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p> <em>Linux</em> 同前面两种操作系统，只列举命令</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ssh-keygen -t ed25519 -C "your_email@example.com"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">eval "$(ssh-agent -s)"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ssh-add ~/.ssh/id_ed25519</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>生成的 <em>key</em> 实际是一对，包括公钥和私钥，需要将公钥（<em>~/.ssh/id_ed25519.pub</em> 文件里面的内容)添加到 <em>github</em> 的 <em>SSH</em> 里面。</p><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAsklEQVQYlX2PO27DQAwFdX/Lji0k8IlSpE6RLoWbAC4kWxL3Qy53jLWApAuBB7AYcPi6/jCw708chzeG1zP9y8DucPrLvuVIB5AlU9vyz3TuziKClUJMmdt9JsREjAk14/r+zfT5Q1drRaYJFUEbeLsTQsSsUNwZPy7MX9dNvY4jeVko68o6L0hMpKw026/6CTa1O1b8qVUrZLUNrJXqdQNFAqqKmSEhklIma7u4VWzvPQBsXQVRDZQg+wAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="444"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/github1.080c19c.640.png" srcset="/assets/ideal-img/github1.080c19c.640.png 640w,/assets/ideal-img/github1.9157420.1030.png 1030w" alt="添加SSH" width="640" height="444"></noscript></div><p> 这里简单介绍一下 <em>ssh</em> 的公钥认证的原理，在介绍它之前，需要先了解非对称加密算法，介绍非对称加密算法的文章很多，这里只需要知道非对称算法的几个特点：</p><ol><li>非对称算法有两个密钥，一个叫公钥，故名思意就是可以公开的密钥；一个是私钥，只有自己知道。</li><li>对于用公钥进行加密的数据，只有通过私钥才能进行解密。</li><li>用私钥对数据进行签名，可以用公钥来验证。</li></ol><p> 公钥认证分为这样几个步骤：</p><ol><li>客户端先生成密钥对（例如前面使用 <em>ssh-keygen</em>）</li><li>将公钥拷贝到服务端（将 <em>pub</em> 文件添加到 <em>github</em>)</li><li>服务端将拷贝的公钥标记为信任的 <em>key</em></li><li>服务端验证客户端是否拥有对应的私钥。</li></ol><p> 验证的过程，<em>SSHV1</em>协议和<em>SSHV2</em>协议有一些差异：</p><p><em>SSHV1</em>:</p><p> 服务端用公钥对一段数据进行加密，客户端收到之后，用私钥进行解密，并且返回给服务端这段数据的校验和。（利用非对称算法的第2点）</p><p><em>SSHV2</em>:</p><p> 客户端对一段基于 <em>sessionId</em> 的数据进行签名，服务端接收到数据之后利用公钥来验证是否是对应私钥的签名。（利用非对称算法的第3点）</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-新建仓库">3. 新建仓库<a href="#3-新建仓库" class="hash-link" aria-label="3. 新建仓库的直接链接" title="3. 新建仓库的直接链接">​</a></h3><p> 在<em>github</em>上点击创建仓库按钮，按照指引创建即可。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-将本地仓库推送到远端">4. 将本地仓库推送到远端<a href="#4-将本地仓库推送到远端" class="hash-link" aria-label="4. 将本地仓库推送到远端的直接链接" title="4. 将本地仓库推送到远端的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="41-本地git仓库创建">4.1 本地<em>git</em>仓库创建<a href="#41-本地git仓库创建" class="hash-link" aria-label="41-本地git仓库创建的直接链接" title="41-本地git仓库创建的直接链接">​</a></h4><p> 如果本地仓库已经存在，可以跳过。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git init -b main</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git add .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git commit -m "First commit"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="42-将本地仓库推送到远端">4.2 将本地仓库推送到远端<a href="#42-将本地仓库推送到远端" class="hash-link" aria-label="4.2 将本地仓库推送到远端的直接链接" title="4.2 将本地仓库推送到远端的直接链接">​</a></h4><p> 执行以下命令，完成推送。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git remote add origin  &lt;REMOTE_URL&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git remote -v</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git push origin main</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_S0QG"><p><em>ssh key</em> 已经添加，但还是提示没有权限，可以检查 <em>ssh-agent</em> 是否启动。</p></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>github</category>
        </item>
        <item>
            <title><![CDATA[Atom编辑器使用]]></title>
            <link>https://linlan.xyz/blog/atom-usage</link>
            <guid>https://linlan.xyz/blog/atom-usage</guid>
            <pubDate>Sun, 26 Jun 2022 22:37:17 GMT</pubDate>
            <description><![CDATA[Atom 是一款免费、开源充满黑科技的文本编辑器，最近开发一些 nodejs 的项目时，尝试了一下这款编辑器，记录下使用过程，方便以后查阅，也希望能帮助到有需要的朋友。]]></description>
            <content:encoded><![CDATA[<blockquote><p><em>Atom</em> 是一款免费、开源充满黑科技的文本编辑器，最近开发一些 <em>nodejs</em> 的项目时，尝试了一下这款编辑器，记录下使用过程，方便以后查阅，也希望能帮助到有需要的朋友。</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-下载与安装">1. 下载与安装<a href="#1-下载与安装" class="hash-link" aria-label="1. 下载与安装的直接链接" title="1. 下载与安装的直接链接">​</a></h3><p> <em>Atom</em> 的<a href="https://atom.io/" target="_blank" rel="noopener noreferrer">官方网站</a>和<a href="https://github.com/atom/atom" target="_blank" rel="noopener noreferrer">github</a>首页有详细的安装教程，这里就不再赘述。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-设置代理">2. 设置代理<a href="#2-设置代理" class="hash-link" aria-label="2. 设置代理的直接链接" title="2. 设置代理的直接链接">​</a></h3><p> 因为网络封锁的原因，有时需要代理才能下载某些插件，搭建代理的方式可以参考<a href="/docs/set-up-site/your-site-in-one">建站全攻略</a>。先关闭 <em>Atom</em>，打开终端，执行下面命令。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apm config set http-proxy http://127.0.0.1:10886</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-插件安装">3. 插件安装<a href="#3-插件安装" class="hash-link" aria-label="3. 插件安装的直接链接" title="3. 插件安装的直接链接">​</a></h3><p> <em>Atom</em> 是一款轻量级的编辑器，只安装了使用最频繁的插件，如果想作为 <em>ide</em>，需要手动安装一些插件，在 <em>File</em> → <em>Settings</em> → <em>Install</em> 里面可以搜索需要安装的插件，下面列举一些非常常用的插件。</p><ul><li><p><em>atom-beautify</em> 代码格式化</p></li><li><p><em>platformio-ide-terminal</em> 打开终端的插件</p></li><li><p><em>vim-mode</em>，如果搜不到，可以使用<em>apm</em>命令进行安装 <em>apm install vim-mode</em></p></li><li><p><em>file-templates</em> 文件模板，在写文档时，<em>md</em> 文件中很多内容都是重复的，可以通过模板来创建新的文件。不过这个插件并不是通过文件的后缀名来匹配模板，而是创建的时候手动的指定从哪个模板创建。</p></li><li><p><em>ascii_tree</em>，通过 <em>ascii</em> 码生成树形结构，非常适合展示目录结构。先使用 <em>+</em>、<em>-</em> 号显示目录结构，选中文本，点击插件生成即可。</p></li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">root</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">+-- dir1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    +--file1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">+-- dir2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    +-- file2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>Atom</category>
            <category>IDE</category>
            <category>nodejs</category>
        </item>
        <item>
            <title><![CDATA[房贷是如何计算的]]></title>
            <link>https://linlan.xyz/blog/loan-compute</link>
            <guid>https://linlan.xyz/blog/loan-compute</guid>
            <pubDate>Sun, 26 Jun 2022 22:37:17 GMT</pubDate>
            <description><![CDATA[很多人买房会选择贷款，但很少有人知道房贷是如何计算的。最近在做房贷计算的小程序，恶补了一下知识，作为记录。]]></description>
            <content:encoded><![CDATA[<blockquote><p>很多人买房会选择贷款，但很少有人知道房贷是如何计算的。最近在做房贷计算的小程序，恶补了一下知识，作为记录。</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-基本概念">1. 基本概念<a href="#1-基本概念" class="hash-link" aria-label="1. 基本概念的直接链接" title="1. 基本概念的直接链接">​</a></h3><p> 计算房贷有四个核心的参数：</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="11-贷款本金">1.1 贷款本金<a href="#11-贷款本金" class="hash-link" aria-label="1.1 贷款本金的直接链接" title="1.1 贷款本金的直接链接">​</a></h4><p> 贷款本金就是你打算借多少钱，例如小明计划购入婚房，向银行贷款了1000000，那么这个1000000就是贷款本金。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="12-贷款利率">1.2 贷款利率<a href="#12-贷款利率" class="hash-link" aria-label="1.2 贷款利率的直接链接" title="1.2 贷款利率的直接链接">​</a></h4><p> 利率就是你付给银行利息与贷款本金的比率。例如2022年的贷款基准利率是4.9%。这里需要注意，通常说的利率是年利率，但是贷款一般是按月进行归还的，计算的时候使用的是月利率。所以需要用年利率除以12得到月利率。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="13-贷款期数">1.3 贷款期数<a href="#13-贷款期数" class="hash-link" aria-label="1.3 贷款期数的直接链接" title="1.3 贷款期数的直接链接">​</a></h4><p> 贷款期数就是多久还清，贷款期数一般是按月计算，例如20年就是240期，30年就是360期。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="14-还款方式">1.4 还款方式<a href="#14-还款方式" class="hash-link" aria-label="1.4 还款方式的直接链接" title="1.4 还款方式的直接链接">​</a></h4><p> 还款方式分为两种：等额本息和等额本金。等额本息指你每期还款数一样，等额本金指你每一期还的本金一样。等额本金开始还的多，后面越来越少；等额本息还的一样多，直到还完。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-计算公式">2. 计算公式<a href="#2-计算公式" class="hash-link" aria-label="2. 计算公式的直接链接" title="2. 计算公式的直接链接">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="21-等额本息">2.1 等额本息<a href="#21-等额本息" class="hash-link" aria-label="2.1 等额本息的直接链接" title="2.1 等额本息的直接链接">​</a></h4><blockquote><p>每月还款额=贷款本金×<!-- -->[月利率×（1+月利率）^还款月数]<!-- -->÷<!-- -->[（1+月利率）^还款月数-1]<br>
总支付利息：总利息=还款月数×每月月供额-贷款本金 <br>
每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕 <br>
每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕<br>
总利息=还款月数×每月月供额-贷款本金</p></blockquote><h4 class="anchor anchorWithStickyNavbar_LWe7" id="22-等额本金">2.2 等额本金<a href="#22-等额本金" class="hash-link" aria-label="2.2 等额本金的直接链接" title="2.2 等额本金的直接链接">​</a></h4><blockquote><p>每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率 <br>
每月应还本金=贷款本金÷还款月数 <br>
每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率。 <br>
每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率 <br>
总利息=还款月数×(总贷款额×月利率-月利率×(总贷款额÷还款月数)<!-- -->*<!-- -->(还款月数-1)÷2+总贷款额÷还款月数)</p></blockquote><p><a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank" rel="noopener noreferrer">署名-非商业性使用-禁止演绎 4.0 国际</a></p>]]></content:encoded>
            <category>房贷</category>
            <category>小程序开发</category>
        </item>
    </channel>
</rss>