<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Intersteller Cabin</title><link>https://www.starsac.cn/</link><description>Recent content on Intersteller Cabin</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Apr 2026 22:25:35 +0800</lastBuildDate><atom:link href="https://www.starsac.cn/index.xml" rel="self" type="application/rss+xml"/><item><title>uv笔记</title><link>https://www.starsac.cn/posts/uv-note/</link><pubDate>Fri, 03 Apr 2026 22:25:35 +0800</pubDate><guid>https://www.starsac.cn/posts/uv-note/</guid><description>&lt;blockquote&gt;
&lt;p&gt;其它信息参阅&lt;a href="https://uv.doczh.com/" class="external-link" target="_blank" rel="noopener"&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安装"&gt;
 安装
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="macos-和-linux"&gt;
 macOS 和 Linux
 &lt;a class="heading-link" href="#macos-%e5%92%8c-linux"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者使用Homebrew&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="windows"&gt;
 Windows
 &lt;a class="heading-link" href="#windows"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;powershell -ExecutionPolicy ByPass -c &lt;span style="color:#a5d6ff"&gt;&amp;#34;irm https://astral.sh/uv/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者使用winget&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;winget install --id&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;astral-sh.uv -e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="升级"&gt;
 升级
 &lt;a class="heading-link" href="#%e5%8d%87%e7%ba%a7"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uv self update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="python-版本管理"&gt;
 Python 版本管理
 &lt;a class="heading-link" href="#python-%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;uv python install&lt;/code&gt;: 安装 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python list&lt;/code&gt;: 查看可用 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python find&lt;/code&gt;: 查找已安装的 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python pin&lt;/code&gt;: 将当前项目固定使用特定 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python uninstall&lt;/code&gt;: 卸载 Python 版本&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="脚本运行"&gt;
 脚本运行
 &lt;a class="heading-link" href="#%e8%84%9a%e6%9c%ac%e8%bf%90%e8%a1%8c"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;执行独立的 Python 脚本，例如 &lt;code&gt;example.py&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>关于</title><link>https://www.starsac.cn/about/</link><pubDate>Fri, 03 Apr 2026 18:55:21 +0800</pubDate><guid>https://www.starsac.cn/about/</guid><description>&lt;ul&gt;
&lt;li&gt;一名本科生，就读于西安电子科技大学网络安全与密码学部&lt;/li&gt;
&lt;li&gt;半吊子全栈工程师，常写python，typescript，go，偶尔写c&lt;/li&gt;
&lt;li&gt;欢迎各位大佬和我交换友链😘&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>项目</title><link>https://www.starsac.cn/projects/</link><pubDate>Fri, 03 Apr 2026 18:55:21 +0800</pubDate><guid>https://www.starsac.cn/projects/</guid><description>&lt;p&gt;我做过的项目&lt;/p&gt;</description></item><item><title>Docker笔记</title><link>https://www.starsac.cn/posts/docker-note/</link><pubDate>Wed, 01 Apr 2026 22:24:35 +0800</pubDate><guid>https://www.starsac.cn/posts/docker-note/</guid><description>&lt;h2 id="安装"&gt;
 安装
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：Windows上运行 docker 需要 Docker Desktop 与 WSL2环境&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="在ubuntu上安装"&gt;
 在Ubuntu上安装
 &lt;a class="heading-link" href="#%e5%9c%a8ubuntu%e4%b8%8a%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/" class="external-link" target="_blank" rel="noopener"&gt;Ubuntu | Docker Docs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其他平台安装方法参考官网链接&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="使用apt安装最推荐"&gt;
 使用apt安装（最推荐）
 &lt;a class="heading-link" href="#%e4%bd%bf%e7%94%a8apt%e5%ae%89%e8%a3%85%e6%9c%80%e6%8e%a8%e8%8d%90"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;h5 id="1-设置docker-apt仓库"&gt;
 1. 设置docker apt仓库
 &lt;a class="heading-link" href="#1-%e8%ae%be%e7%bd%aedocker-apt%e4%bb%93%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Add Docker&amp;#39;s official GPG key:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install ca-certificates curl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo install -m &lt;span style="color:#a5d6ff"&gt;0755&lt;/span&gt; -d /etc/apt/keyrings
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chmod a+r /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Add the repository to Apt sources:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tee /etc/apt/sources.list.d/docker.sources &lt;span style="color:#a5d6ff"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Types: deb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;URIs: https://download.docker.com/linux/ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Suites: $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;#34;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Components: stable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Signed-By: /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="2-安装docker软件包"&gt;
 2. 安装docker软件包
 &lt;a class="heading-link" href="#2-%e5%ae%89%e8%a3%85docker%e8%bd%af%e4%bb%b6%e5%8c%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装好后docker自动运行，使用：&lt;/p&gt;</description></item><item><title>JavaScript笔记</title><link>https://www.starsac.cn/posts/javascript-note/</link><pubDate>Sat, 21 Mar 2026 21:37:35 +0800</pubDate><guid>https://www.starsac.cn/posts/javascript-note/</guid><description>&lt;h1 id="javascript笔记"&gt;
 JavaScript笔记
 &lt;a class="heading-link" href="#javascript%e7%ac%94%e8%ae%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://zh.javascript.info/" class="external-link" target="_blank" rel="noopener"&gt;现代JavaScript教程&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1-简介"&gt;
 1. 简介
 &lt;a class="heading-link" href="#1-%e7%ae%80%e4%bb%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="javascript简介"&gt;
 JavaScript简介
 &lt;a class="heading-link" href="#javascript%e7%ae%80%e4%bb%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;浏览器中js的限制：不能读写硬盘文件，同源策略，标签页隔离，申请权限需要用户的许可&lt;/p&gt;
&lt;p&gt;js上层语言：CoffeeScript， TypeScript/Flow，Dart， Kotlin， Brython&lt;/p&gt;
&lt;h3 id="手册与规范"&gt;
 手册与规范
 &lt;a class="heading-link" href="#%e6%89%8b%e5%86%8c%e4%b8%8e%e8%a7%84%e8%8c%83"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://tc39.es/ecma262/" class="external-link" target="_blank" rel="noopener"&gt;ECMA262&lt;/a&gt;， &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference" class="external-link" target="_blank" rel="noopener"&gt;MDN WebDocs&lt;/a&gt;， &lt;a href="https://caniuse.com/" class="external-link" target="_blank" rel="noopener"&gt;caniuse&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="代码编辑器"&gt;
 代码编辑器
 &lt;a class="heading-link" href="#%e4%bb%a3%e7%a0%81%e7%bc%96%e8%be%91%e5%99%a8"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;IDE：VSCode，WebStorm&lt;/p&gt;
&lt;p&gt;轻量编辑器：SublimeText， notepad++&lt;/p&gt;
&lt;h3 id="开发者控制台"&gt;
 开发者控制台
 &lt;a class="heading-link" href="#%e5%bc%80%e5%8f%91%e8%80%85%e6%8e%a7%e5%88%b6%e5%8f%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Chrome开发者工具（F12）&lt;/p&gt;
&lt;p&gt;Safari需要先在设置中打开开发模式&lt;/p&gt;
&lt;h2 id="2--javascript基础知识"&gt;
 2. JavaScript基础知识
 &lt;a class="heading-link" href="#2--javascript%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="helloworld"&gt;
 HelloWorld
 &lt;a class="heading-link" href="#helloworld"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;在html中&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#7ee787"&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#7ee787"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;script 标签之前...&amp;lt;/&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; alert(&lt;span style="color:#a5d6ff"&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; console.log(&lt;span style="color:#a5d6ff"&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#7ee787"&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;...script 标签之后&amp;lt;/&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#7ee787"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#7ee787"&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;script&lt;/code&gt;标签的属性（attribute）：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Turandot（中意文对照唱词）</title><link>https://www.starsac.cn/posts/turandot-libretto-chinese-italian-translation/</link><pubDate>Sat, 04 Oct 2025 22:30:47 +0800</pubDate><guid>https://www.starsac.cn/posts/turandot-libretto-chinese-italian-translation/</guid><description>&lt;h1 id="pucciniturandot中意文对照唱词"&gt;
 Puccini：Turandot（中意文对照唱词）
 &lt;a class="heading-link" href="#pucciniturandot%e4%b8%ad%e6%84%8f%e6%96%87%e5%af%b9%e7%85%a7%e5%94%b1%e8%af%8d"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="说明和示例"&gt;
 说明和示例
 &lt;a class="heading-link" href="#%e8%af%b4%e6%98%8e%e5%92%8c%e7%a4%ba%e4%be%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;内容类别&lt;/th&gt;
 &lt;th&gt;原文例&lt;/th&gt;
 &lt;th&gt;译文例&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;舞台指示（括号里的内容）（舞台指示四个字只在第一次出现，之后只出现括号及对应译文）&lt;/td&gt;
 &lt;td&gt;Indicazioni sceniche：(Entra un gruppo di servi del boia preceduto dai portatori della cote per arrotare la grande scimitarra del boia.)&lt;/td&gt;
 &lt;td&gt;舞台指示（一群刽子手的仆人入场，前面是转动刽子手大刀轮盘的人。）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;角色名及台词&lt;/td&gt;
 &lt;td&gt;MANDARINO：Popolo di Pekino! La legge è questa: Turandot, la pura, sposa sarà di chi, di sangue regio, spieghi i tre enigmi ch’ella proporrà. Ma chi affronta il cimento e vinto resta,porga alla scure la superba testa!&lt;/td&gt;
 &lt;td&gt;大臣：北京的人民！ 法律如下： 纯洁的图兰朵将嫁给 任何一位王族血统、 能解开她提出的三个谜语的人。 但凡是挑战考验 却失败的人， 必须把高傲的头颅 献给斧头！&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;带舞台指示的角色名及台词&lt;/td&gt;
 &lt;td&gt;IL PRINCIPE IGNOTO (accorre. Riconosce il padre suo. Ha un grido.)：Padre! Mio padre! O padre, sì, ti ritrovo! Guardami! Non è sogno!&lt;/td&gt;
 &lt;td&gt;无名王子：（跑来，认出了他的父亲，惊呼一声。）：父亲！听我说！ 父亲！是我！ 愿痛苦受祝福 因仁慈的上帝赐予我们这份喜悦。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;要求：以纯文本形式输出，不要markdown格式，先是所有的原文，再是所有的译文，不同的部分用换行分割，严格按照例文的格式生成（人名+冒号+内容 或 舞台指示+冒号+（内容））&lt;/p&gt;</description></item><item><title>一文教会：内网穿透建站</title><link>https://www.starsac.cn/posts/how-to-self-host-websites-using-nat-traversal/</link><pubDate>Thu, 02 Oct 2025 18:39:15 +0800</pubDate><guid>https://www.starsac.cn/posts/how-to-self-host-websites-using-nat-traversal/</guid><description>&lt;h1 id="一文教会内网穿透建站"&gt;
 一文教会：内网穿透建站
 &lt;a class="heading-link" href="#%e4%b8%80%e6%96%87%e6%95%99%e4%bc%9a%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f%e5%bb%ba%e7%ab%99"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Github Pages，CloudFlare Pages太慢？&lt;/p&gt;
&lt;p&gt;云服务器太贵？配置太差？带宽小水管？&lt;/p&gt;
&lt;p&gt;厌倦了Hexo等静态博客，想搭个高大上的动态网站？&lt;/p&gt;
&lt;p&gt;不用担心！本文教你使用sakura frp（其他类似的内网穿透服务同理）来搭建动态网站！整个过程完全免费！&lt;/p&gt;
&lt;h2 id="环境搭建"&gt;
 环境搭建
 &lt;a class="heading-link" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="硬件"&gt;
 硬件
 &lt;a class="heading-link" href="#%e7%a1%ac%e4%bb%b6"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HP Z240 Workstation
&lt;ul&gt;
&lt;li&gt;ChipSet：C236&lt;/li&gt;
&lt;li&gt;CPU：E3-1255v6@3.30GHz 4C4T&lt;/li&gt;
&lt;li&gt;RAM：16GB DDR4 2133MHz&lt;/li&gt;
&lt;li&gt;Storage：128GB NVMe SSD + 500GB HDD * 2（RAID1） + 128GB SATA SSD&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;PS：当然，用自己的电脑+IIS也可以XD&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="软件"&gt;
 软件
 &lt;a class="heading-link" href="#%e8%bd%af%e4%bb%b6"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OS：fnOS@latest&lt;/li&gt;
&lt;li&gt;虚拟化平台：fnOS自带QEMU虚拟机&lt;/li&gt;
&lt;li&gt;VMOS：Ubuntu 25.04&lt;/li&gt;
&lt;li&gt;FRP服务：sakura-frp（免费两条隧道，10Mbps带宽，可建站，签到送流量）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：有些FRP服务是不能建站的，像我之前买的9.9r 1年的FRP服务就焊死了端口号，这种没有80/443端口的也可以开web服务，但是基本只能自己用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安装服务器面板"&gt;
 安装服务器面板
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%9d%a2%e6%9d%bf"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;推荐安装&lt;a href="https://1panel.cn/" class="external-link" target="_blank" rel="noopener"&gt;1Panel - 现代化、开源的Linux服务器运维管理面板&lt;/a&gt;，&lt;!-- raw HTML omitted --&gt;无论是从UI设计还是功能上我感觉都要比一股中年老登味的宝塔面板要好&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description></item><item><title>中国移动友华X333折腾记</title><link>https://www.starsac.cn/posts/cmcc-router-youhua-x333-modfiying/</link><pubDate>Sat, 28 Jun 2025 17:04:15 +0800</pubDate><guid>https://www.starsac.cn/posts/cmcc-router-youhua-x333-modfiying/</guid><description>&lt;h1 id="中国移动友华x333折腾记"&gt;
 中国移动友华X333折腾记
 &lt;a class="heading-link" href="#%e4%b8%ad%e5%9b%bd%e7%a7%bb%e5%8a%a8%e5%8f%8b%e5%8d%8ex333%e6%8a%98%e8%85%be%e8%ae%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;这个路由器是之前在闲鱼上22块钱包邮买的（毕竟再好的路由器遇见校园网也得歇菜），当时打开后台，看见ping页面的输入框，我就有预感这里可能会有注入漏洞，今天试了一下果然如此。&lt;/p&gt;
&lt;p&gt;这个路由器只在ping4那里做了前端校验（ipv4格式校验），ping6甚至没做任何校验，直接使用分号截断ping6命令，在后面写自己要执行的命令就行了（ctf签到题难度了属于是）&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;至此已经成功获取命令回显。&lt;/p&gt;
&lt;p&gt;查看/bin，这个系统内置命令少得可怜，基本只有busybox集成的几个，甚至连whoami和sudo都没有，更别提包管理器和ssh了，好在telnetd是有的，&lt;code&gt;telnetd -l /bin/sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;成功打开telnet。&lt;/p&gt;
&lt;p&gt;下一个问题来了，如何知道登录的用户名和密码呢，通过&lt;code&gt;cat /etc/passwd&lt;/code&gt;可以看出用户名为root，但是这里只有哈希之后的密码，看不出原密码，经过一番查找发现导出的备份文件里贴心的把telnet用户名和密码都告诉我们了（ps:这个密码是中国移动的通用密码，很多光猫的超级管理员密码就是这个）&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2025/06/image-20250628152239063.png" alt="image-20250628152239063"&gt;&lt;/p&gt;
&lt;p&gt;至此已经成功打开root权限的telnet&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2025/06/image-20250628152508319.png" alt="image-20250628152508319"&gt;&lt;/p&gt;
&lt;p&gt;翻阅web目录，还找到了系统预留的命令执行入口：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2025/06/image-20250628162740923.png" alt="image-20250628162740923"&gt;&lt;/p&gt;</description></item><item><title>FastAPI - OAuth2+JWT认证</title><link>https://www.starsac.cn/posts/fastapi-oauth-jwt-authorization/</link><pubDate>Sat, 05 Apr 2025 15:24:35 +0800</pubDate><guid>https://www.starsac.cn/posts/fastapi-oauth-jwt-authorization/</guid><description>&lt;h1 id="fastapi---oauth2jwt认证"&gt;
 FastAPI - OAuth2+JWT认证
 &lt;a class="heading-link" href="#fastapi---oauth2jwt%e8%ae%a4%e8%af%81"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;OAuth2只是一种登录验证的模式，JWT只是登陆后生成，用来简化登录操作的token，是Bearer令牌的一种实现&lt;/p&gt;
&lt;h2 id="验证token"&gt;
 验证token
 &lt;a class="heading-link" href="#%e9%aa%8c%e8%af%81token"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;引入OAuth2PasswordBearer，创建该类的示例，这个实例是一个可调用对象，会自动去Header里面找token并返回，如果找不到则抛出401Unauthorize异常&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;from&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;fastapi.security&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;import&lt;/span&gt; OAuth2PasswordBearer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;oauth2_scheme &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; OAuth2PasswordBearer(tokenUrl&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;在需要认证token的路径处理函数里面声明收到token，引入oauth2_scheme依赖项，如果有token则会执行函数体&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d2a8ff;font-weight:bold"&gt;@app.get&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;/token-string&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;async&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;def&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;get_token_string&lt;/span&gt;(token: Annotated[str, Depends(oauth2_scheme)]):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;return&lt;/span&gt; {&lt;span style="color:#a5d6ff"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;: token}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时只要我们请求头中有token（无论值是什么），就可以访问这个路由了&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2025/04/image-20250405183414873.png" alt="image-20250405183414873"&gt;&lt;/p&gt;
&lt;h2 id="生成token"&gt;
 生成token
 &lt;a class="heading-link" href="#%e7%94%9f%e6%88%90token"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在创建oauth2_scheme时我们声明了获得token的路径，现在我们编写生成token的具体实现。&lt;/p&gt;
&lt;p&gt;OAuth2要求username和password两个必选字段必须通过表单数据的形式发送，也就是设置&lt;code&gt;Content-Type:application/x-www-form-urlencoded&lt;/code&gt;,将数据放在请求体里面&lt;/p&gt;
&lt;p&gt;以&lt;code&gt;grant_type=password&amp;amp;username=john&amp;amp;password=b&lt;/code&gt;的形式发送给后端。&lt;/p&gt;
&lt;p&gt;为了接收发送过来的参数，可以使用&lt;code&gt;OAuth2PasswordRequestForm&lt;/code&gt;，这是一个类依赖项，可以省略Depends()里面的内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;from&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;fastapi.security&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;import&lt;/span&gt; OAuth2PasswordRequestForm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d2a8ff;font-weight:bold"&gt;@app.post&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;/token&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;def&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;post_token&lt;/span&gt;(form_data:Annotated[OAuth2PasswordRequestForm,Depends()]):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8b949e;font-style:italic"&gt;# 这里可以判断用户登录是否合法，返回响应结果或者抛出异常&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; form_data&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;username
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; form_data&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;password
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; user_dict&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;get(name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(user, name, password)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;not&lt;/span&gt; user:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;raise&lt;/span&gt; HTTPException(status_code&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;400&lt;/span&gt;, detail&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;invalidUser&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;not&lt;/span&gt; password &lt;span style="color:#ff7b72;font-weight:bold"&gt;==&lt;/span&gt; user&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;get(&lt;span style="color:#a5d6ff"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;raise&lt;/span&gt; HTTPException(status_code&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;400&lt;/span&gt;, detail&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;invalidPasswd&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;return&lt;/span&gt; {&lt;span style="color:#a5d6ff"&gt;&amp;#34;access_token&amp;#34;&lt;/span&gt;: name, &lt;span style="color:#a5d6ff"&gt;&amp;#34;token_type&amp;#34;&lt;/span&gt;: &lt;span style="color:#a5d6ff"&gt;&amp;#34;bearer&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该路径函数的返回值格式是固定的，是OAuth2规范的一部分。&lt;/p&gt;</description></item><item><title>SQL注入——入门小记</title><link>https://www.starsac.cn/posts/sqlinjection-note/</link><pubDate>Tue, 12 Nov 2024 18:59:20 +0800</pubDate><guid>https://www.starsac.cn/posts/sqlinjection-note/</guid><description>&lt;blockquote&gt;
&lt;p&gt;第一次Web组会&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;本次使用Windows 10 虚拟机环境&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-安装环境"&gt;
 1. 安装环境
 &lt;a class="heading-link" href="#1-%e5%ae%89%e8%a3%85%e7%8e%af%e5%a2%83"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在PHPStudy官网：https://www.xp.cn/php-study 官网下载并安装PHPStudy。&lt;/p&gt;
&lt;p&gt;安装好后打开，如下图所示，安装时已经帮我们创建好了MySQL和PHP等服务。我们只需要在首页点击一键启动WNMP（Windows，Nginx，MySQL，PHP）即可。启动服务后可以在浏览器输入&lt;code&gt;localhost&lt;/code&gt;，如果可以访问到默认页，那么说明服务搭建成功了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110184132550.png" alt="image-20241110184132550"&gt;&lt;/p&gt;
&lt;p&gt;然后我们点击网站，在右侧的管理里面找到“打开根目录”，将practice压缩包解压之后放进去，原来文件夹里默认的文件可以移到一个文件夹里，也可以删掉。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110184741433.png" alt="image-20241110184741433"&gt;&lt;/p&gt;
&lt;p&gt;放好后应该是这样：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110185121817.png" alt="image-20241110185121817"&gt;&lt;/p&gt;
&lt;p&gt;现在再访问&lt;code&gt;localhost&lt;/code&gt;你会发现页面变了，出现了一个表单，这说明PHP服务也已经成功运行。&lt;/p&gt;
&lt;h2 id="2-连接数据库"&gt;
 2. 连接数据库
 &lt;a class="heading-link" href="#2-%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在PHPStudy中点击左侧的数据库，可以看到默认数据库的名称，账号和密码（都是root）。&lt;/p&gt;
&lt;p&gt;现在要登录数据库了，可以用命令行操作，也可以用更加简便的图形工具。&lt;/p&gt;
&lt;p&gt;在PHPStudy中搜索安装phpMyAdmin，选上刚才创建的网站，安装好后点击右侧管理，即可进入图形化的管理页面😎，在这里输入用户名和密码（都是root），即可进入管理后台。&lt;/p&gt;
&lt;p&gt;点击左侧的新建数据库，随便填写一个数据库名，编码方式默认，点击创建即可。&lt;/p&gt;
&lt;p&gt;接下来就可以导入practice里面的sql文件了，按照下步操作即可**（第一步的箭头画错了，应该选择刚刚创建的数据库，其余步骤正常操作）。**&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110190355277.png" alt="image-20241110190355277"&gt;&lt;/p&gt;
&lt;p&gt;导入成功后，我们就能在flag_table里面看到flag了🥰&lt;/p&gt;
&lt;p&gt;现在修改login.php和search.php文件，使php也能连接到数据库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改login.php文件的第8行、search.php的第四行为：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;$conn&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; mysqli_connect(&lt;span style="color:#a5d6ff"&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;3306&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;// localhost为主机名，root，root，test分别是用户名，密码，数据库名，3306是MySQL默认的端口号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时再次访问&lt;code&gt;localhost&lt;/code&gt;输入一个数据库里的账号密码，如果可以登录，则说明数据库连接成功。&lt;/p&gt;
&lt;h2 id="3-尝试sql注入"&gt;
 3. 尝试sql注入
 &lt;a class="heading-link" href="#3-%e5%b0%9d%e8%af%95sql%e6%b3%a8%e5%85%a5"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;分析php源码，发现点击按钮后，index.php向login.php发送了一个ajax请求，将输入的用户名和密码原文发送给login.php，login.php接收到这两个数据后就直接利用原始数据开始进行sql查询了。&lt;/p&gt;
&lt;p&gt;我们尝试万能注入模板&lt;code&gt;1' OR 1=1 #&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;SELECT&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;FROM&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;user&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;WHERE&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;name&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;$username&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;AND&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;`&lt;/span&gt;password&lt;span style="color:#ff7b72;font-weight:bold"&gt;`=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;$pwd&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;//&lt;/span&gt;&lt;span style="color:#f85149"&gt;变成了&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;SELECT&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;FROM&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;user&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;WHERE&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;name&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;OR&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;#&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39; AND `password`=&amp;#39;&lt;/span&gt;&lt;span style="color:#f85149"&gt;$&lt;/span&gt;pwd&lt;span style="color:#a5d6ff"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;登陆成功，进入一个页面，通过id查询数据。从1开始尝试，发现1~4有数据，现在我们知道这个表有四个记录。&lt;/p&gt;</description></item><item><title>MoeCTF 2024 解题小记（WP）</title><link>https://www.starsac.cn/posts/moectf-2024-writeup/</link><pubDate>Mon, 21 Oct 2024 22:20:35 +0800</pubDate><guid>https://www.starsac.cn/posts/moectf-2024-writeup/</guid><description>&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/10/moectf2024.webp" alt="moectf2024"&gt;&lt;/p&gt;
&lt;h3 id="0-总结的一些做题思路"&gt;
 0. 总结的一些做题思路
 &lt;a class="heading-link" href="#0-%e6%80%bb%e7%bb%93%e7%9a%84%e4%b8%80%e4%ba%9b%e5%81%9a%e9%a2%98%e6%80%9d%e8%b7%af"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;工具：BurpSuite，WRSX（西电CTF用），AntSword，御剑扫描工具，HackBar&lt;/p&gt;
&lt;p&gt;index.phps查看php源码&lt;/p&gt;
&lt;p&gt;字符串能和0弱比较相等&lt;/p&gt;
&lt;p&gt;查看php相关信息可以用&lt;code&gt;phpinfo();&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="1-0基础入门"&gt;
 1. 0基础入门
 &lt;a class="heading-link" href="#1-0%e5%9f%ba%e7%a1%80%e5%85%a5%e9%97%a8"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="11-在此签到"&gt;
 1.1 在此签到
 &lt;a class="heading-link" href="#11-%e5%9c%a8%e6%ad%a4%e7%ad%be%e5%88%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在QQ群绑定账号即可获得flag。&lt;/p&gt;
&lt;h3 id="2-web渗透测试与审计"&gt;
 2. Web渗透测试与审计
 &lt;a class="heading-link" href="#2-web%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95%e4%b8%8e%e5%ae%a1%e8%ae%a1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="21-web渗透测试与审计入门指北"&gt;
 2.1 Web渗透测试与审计入门指北
 &lt;a class="heading-link" href="#21-web%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95%e4%b8%8e%e5%ae%a1%e8%ae%a1%e5%85%a5%e9%97%a8%e6%8c%87%e5%8c%97"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在vm虚拟机中安装任意Linux发行版，安装宝塔面板部署网站，将题中附件放入网站目录，使用浏览器打开即可获得flag。&lt;/p&gt;
&lt;h4 id="22-弗拉格之地的入口"&gt;
 2.2 弗拉格之地的入口
 &lt;a class="heading-link" href="#22-%e5%bc%97%e6%8b%89%e6%a0%bc%e4%b9%8b%e5%9c%b0%e7%9a%84%e5%85%a5%e5%8f%a3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;根据题目信息打开爬虫协议&lt;code&gt;/robot.txt&lt;/code&gt;文件&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Robots.txt file for xdsec.org
# only robots can find the entrance of web-tutor
User-agent: *
Disallow: /webtutorEntry.php
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;再打开&lt;code&gt;/webtutorEntry.php&lt;/code&gt;即可看到flag。&lt;/p&gt;
&lt;h4 id="23-垫刀之路01"&gt;
 2.3 垫刀之路01
 &lt;a class="heading-link" href="#23-%e5%9e%ab%e5%88%80%e4%b9%8b%e8%b7%af01"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;输入&lt;code&gt;ls /&lt;/code&gt;查看根目录下文件，发现&lt;code&gt;flag&lt;/code&gt;和&lt;code&gt;flag.sh&lt;/code&gt;。赶紧点开看看，使用cat命令查看后，好家伙被骗了，但是得到提示：看看环境变量。输入env命令查看环境变量即可得到flag。&lt;/p&gt;</description></item><item><title>HP 600G1 DM 微型主机安装黑苹果</title><link>https://www.starsac.cn/posts/hp600g1dm-install-hackintosh/</link><pubDate>Tue, 14 May 2024 19:18:11 +0800</pubDate><guid>https://www.starsac.cn/posts/hp600g1dm-install-hackintosh/</guid><description>&lt;p&gt;&lt;img src="https://resources.starsac.cn/2026/04/hp600g1.jpg" alt="HP600G1"&gt;&lt;/p&gt;
&lt;h2 id="0硬件选择"&gt;
 0.硬件选择
 &lt;a class="heading-link" href="#0%e7%a1%ac%e4%bb%b6%e9%80%89%e6%8b%a9"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="01准系统选择"&gt;
 01.准系统选择
 &lt;a class="heading-link" href="#01%e5%87%86%e7%b3%bb%e7%bb%9f%e9%80%89%e6%8b%a9"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;在2024年3月节点, 200元左右价位可选的小主机准系统大概有以下几种型号 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;联想 : m73, m73p, m93p, m7300hq&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;其中m7300hq为m73的国内版本&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;m73的黑苹果算是比较成熟的, 网上的教程也很多, 但是这台机器由于BIOS有网卡白名单机制, 如果更换黑苹果免驱网卡需要刷BIOS, 较为麻烦且风险较大, 如果不动BIOS在开机的时候会有报警提示音, 因此只能拔掉喇叭使用. 此外m73没有m.2固态硬盘位, 拓展性稍差.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;戴尔 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optiplex 3020m&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;戴尔的机器价格比较贵, 支持4代CPU的大概只有这一个选择, 且这个机器存量较少, 性价比低.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;惠普 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.hp.com/cn-zh/product/details/hp-prodesk-400-g1-desktop-mini-pc/7519860" class="external-link" target="_blank" rel="noopener"&gt;HP ProDesk 400 G1 微型台式电脑&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.hp.com/cn-zh/product/product-specs/hp-prodesk-600-g1-desktop-mini-pc/6595197" class="external-link" target="_blank" rel="noopener"&gt;HP ProDesk 600 G1 微型台式电脑&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.hp.com/cn-zh/product/details/hp-elitedesk-800-g1-desktop-mini-pc/6595205" class="external-link" target="_blank" rel="noopener"&gt;HP EliteDesk 800 G1 微型台式电脑&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;三款机型差别如下, 其他配置参照官网文档&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;芯片组&lt;/th&gt;
 &lt;th&gt;USB数量&lt;/th&gt;
 &lt;th&gt;DP接口数量&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;400G1&lt;/td&gt;
 &lt;td&gt;H81&lt;/td&gt;
 &lt;td&gt;2*3.0 + 4*2.0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;600G1&lt;/td&gt;
 &lt;td&gt;Q85&lt;/td&gt;
 &lt;td&gt;4*3.0 + 2*2.0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;800G1&lt;/td&gt;
 &lt;td&gt;Q87&lt;/td&gt;
 &lt;td&gt;6*3.0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;三款机型中400G1和600G1为同一价位, 800G1稍贵, 综合来看, 600G1性价比更高一些. 400G1支持TDP最高35W的四代CPU, 上TDP更高的CPU会开机报错, 不过可以按F1键跳过报错继续开机. 三款机型均支持nvme硬盘, 但不支持开机引导, 后期可以通过魔改BIOS来实现nvme硬盘引导.&lt;/p&gt;</description></item><item><title>[Arduino编程]使用LiquidCrystal_I2C库驱动LCD1602液晶显示屏</title><link>https://www.starsac.cn/posts/arduino-programming-with-lcd1602/</link><pubDate>Mon, 13 May 2024 18:59:20 +0800</pubDate><guid>https://www.starsac.cn/posts/arduino-programming-with-lcd1602/</guid><description>&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/10/lcd1602%20(3).png" alt="lcd1602"&gt;&lt;/p&gt;
&lt;h2 id="1前言"&gt;
 1.前言
 &lt;a class="heading-link" href="#1%e5%89%8d%e8%a8%80"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;LCD1602是一种16列2行的液晶显示屏, 可以显示数字, 拉丁字母和少量符号. 原版1602显示屏使用并行数据传输, 有8个数据引脚. 可通过增加PCF8574芯片使其支持IIC总线. 支持IIC总线的1602显示屏有四个引脚:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;LCD1602引脚&lt;/th&gt;
 &lt;th&gt;VCC&lt;/th&gt;
 &lt;th&gt;GND&lt;/th&gt;
 &lt;th&gt;SDA&lt;/th&gt;
 &lt;th&gt;SCL&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;对应连接的Arduino引脚&lt;/td&gt;
 &lt;td&gt;5V&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;td&gt;SDA&lt;/td&gt;
 &lt;td&gt;SCL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通过&lt;code&gt;LiquidCrystal_I2C&lt;/code&gt;库, 我们可以很方便地通过IIC总线驱动LCD1602显示屏.&lt;/p&gt;
&lt;h2 id="2安装liquidcrystal_i2c库"&gt;
 2.安装&lt;code&gt;LiquidCrystal_I2C&lt;/code&gt;库
 &lt;a class="heading-link" href="#2%e5%ae%89%e8%a3%85liquidcrystal_i2c%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;新版Arduino IDE提供了库管理器, 可以很方便地在左侧边栏的库管理搜索并添加&lt;code&gt;LiquidCrystal_I2C&lt;/code&gt;库.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/10/lcd1602%20(1).png" alt="添加库文件"&gt;&lt;/p&gt;
&lt;p&gt;也可以通过&lt;a href="https://github.com/johnrickman/LiquidCrystal_I2C" class="external-link" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;页面下载&lt;code&gt;.zip&lt;/code&gt;文件导入Arduino IDE进行安装.&lt;/p&gt;
&lt;h2 id="3连接硬件"&gt;
 3.连接硬件
 &lt;a class="heading-link" href="#3%e8%bf%9e%e6%8e%a5%e7%a1%ac%e4%bb%b6"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;按照表格依次将四根导线连接到Arduino开发板上.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/10/lcd1602%20(2).png" alt="连线图"&gt;&lt;/p&gt;
&lt;h2 id="4编写程序使用arduino库"&gt;
 4.编写程序使用Arduino库
 &lt;a class="heading-link" href="#4%e7%bc%96%e5%86%99%e7%a8%8b%e5%ba%8f%e4%bd%bf%e7%94%a8arduino%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h4 id="41包含库文件-创建对象"&gt;
 41.包含库文件, 创建对象
 &lt;a class="heading-link" href="#41%e5%8c%85%e5%90%ab%e5%ba%93%e6%96%87%e4%bb%b6-%e5%88%9b%e5%bb%ba%e5%af%b9%e8%b1%a1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在程序源代码开头, 我们需要包含&lt;code&gt;LiquidCrystal_I2C&lt;/code&gt;库, 并且创建LCD对象.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;#include&lt;/span&gt; &lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;&amp;lt;LiquidCrystal_I2C.h&amp;gt;&lt;/span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;// 这里设置LCD地址为0x27, 有16列, 2行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LiquidCrystal_I2C &lt;span style="color:#d2a8ff;font-weight:bold"&gt;mylcd&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;0x27&lt;/span&gt;, &lt;span style="color:#a5d6ff"&gt;16&lt;/span&gt;, &lt;span style="color:#a5d6ff"&gt;2&lt;/span&gt;); 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="42void-setup函数"&gt;
 42.&lt;code&gt;void setup()&lt;/code&gt;函数
 &lt;a class="heading-link" href="#42void-setup%e5%87%bd%e6%95%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在&lt;code&gt;setup()&lt;/code&gt;函数部分, 我们可以进行初始化, 开启背光等操作.&lt;/p&gt;</description></item><item><title>HelloWorld</title><link>https://www.starsac.cn/posts/hello-world/</link><pubDate>Sat, 11 May 2024 19:01:01 +0800</pubDate><guid>https://www.starsac.cn/posts/hello-world/</guid><description>&lt;h2 id="简介"&gt;
 简介
 &lt;a class="heading-link" href="#%e7%ae%80%e4%bb%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;这是 &lt;strong&gt;粗体&lt;/strong&gt; 文本，这是 &lt;em&gt;斜体&lt;/em&gt; 文本。&lt;/p&gt;
&lt;p&gt;访问 &lt;a href="https://gohugo.io" class="external-link" target="_blank" rel="noopener"&gt;Hugo&lt;/a&gt; 网站！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS：什么NTR&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Welcome to &lt;a href="https://hexo.io/" class="external-link" target="_blank" rel="noopener"&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href="https://hexo.io/docs/" class="external-link" target="_blank" rel="noopener"&gt;documentation&lt;/a&gt; for more info. If you get any problems when using Hexo, you can find the answer in &lt;a href="https://hexo.io/docs/troubleshooting.html" class="external-link" target="_blank" rel="noopener"&gt;troubleshooting&lt;/a&gt; or you can ask me on &lt;a href="https://github.com/hexojs/hexo/issues" class="external-link" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;
 Quick Start
 &lt;a class="heading-link" href="#quick-start"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="create-a-new-post"&gt;
 Create a new post
 &lt;a class="heading-link" href="#create-a-new-post"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ hexo new &lt;span style="color:#a5d6ff"&gt;&amp;#34;My New Post&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More info: &lt;a href="https://hexo.io/docs/writing.html" class="external-link" target="_blank" rel="noopener"&gt;Writing&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="run-server"&gt;
 Run server
 &lt;a class="heading-link" href="#run-server"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ hexo server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More info: &lt;a href="https://hexo.io/docs/server.html" class="external-link" target="_blank" rel="noopener"&gt;Server&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>