<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>noeNote</title><description>分享一些技術，以及免費開源的應用程式，歡迎來信交流 w@noefly.cc。</description><link>https://noefly.cc/</link><language>zh-Hant-TW</language><copyright>Copyright © 2026 noeFly</copyright><item><title>終端美化——zsh</title><link>https://noefly.cc/note/zsh/</link><guid isPermaLink="true">https://noefly.cc/note/zsh/</guid><description>終端機大概是一個開發者常常看到的東西吧？那就用好看一點吧！</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;終端機大概是一個開發者常常看到的東西吧？那就用好看一點吧！&lt;/p&gt;
&lt;h2&gt;安裝 zsh&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安裝 zsh 和 git&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo apt install zsh git
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定預設終端為 zsh
&amp;lt;Tip&amp;gt;變更預設終端機會在下次登入後生效。&amp;lt;/Tip&amp;gt;
&lt;code&gt;sh chsh -s $(which zsh) &lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;安裝 Nerd Font 字體&lt;/h2&gt;
&lt;p&gt;Nerd Font 除了原字體提供的等寬特性，也提供了可以在終端機中顯示的特殊圖標！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往 ryanoasis/nerd-fonts 發布頁面。https://github.com/ryanoasis/nerd-fonts/releases&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在下方的 Assets 部份選擇自己喜歡的字體並下載。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;回到終端機的應用程式中更換為 Nerd Font 字體。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;正式開始美化終端機&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安裝 oh-my-zsh&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 powerlevel p10k&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;編輯 &lt;code&gt;~/.zshrc&lt;/code&gt;，其中的 &lt;code&gt;ZSH_THEME&lt;/code&gt; 設定修改為 &lt;code&gt;&quot;powerlevel10k/powerlevel10k&quot;&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ZSH_THEME=&quot;powerlevel10k/powerlevel10k&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;讓 zsh 設定立即生效&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;跟隨 powerlevel 10k 的指示，完成主題設定&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;
如果沒有自動跳出設定提示，可以使用以下指令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h2&gt;安裝插件&lt;/h2&gt;
&lt;h3&gt;zsh-completions&lt;/h3&gt;
&lt;p&gt;指令自動補全。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載插件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;編輯 &lt;code&gt;~/.zshrc&lt;/code&gt;，在設定檔中尋找 &lt;code&gt;source $ZSH/oh-my-zsh.sh&lt;/code&gt;，在上面一行新增&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;
如果你不太理解的話，新增完之後就會長這樣：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
source $ZSH/oh-my-zsh.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h3&gt;zsh-autoseggestions&lt;/h3&gt;
&lt;p&gt;根據過去的歷史紀錄，建議指令。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載插件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;編輯 &lt;code&gt;~/.zshrc&lt;/code&gt;，在 &lt;code&gt;plugins=()&lt;/code&gt; 的括號中，新增 &lt;code&gt;zsh-autosuggestions&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins=(zsh-autosuggestions)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;如果有多個插件，則不同插件之間要用空格隔開。&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h3&gt;zsh-syntax-highlighting&lt;/h3&gt;
&lt;p&gt;為你的指令新增高亮標注。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載插件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;編輯 &lt;code&gt;~/.zshrc&lt;/code&gt;，在 &lt;code&gt;plugins=()&lt;/code&gt; 的括號中，新增 &lt;code&gt;zsh-syntax-highlighting&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins=(zsh-syntax-highlighting)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/ohmyzsh/ohmyzsh&lt;/li&gt;
&lt;li&gt;https://github.com/zsh-users/zsh-completions&lt;/li&gt;
&lt;li&gt;https://github.com/zsh-users/zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;https://github.com/zsh-users/zsh-syntax-highlighting&lt;/li&gt;
&lt;li&gt;https://github.com/NCU-GS4538-Linux/Linux-Community/discussions/84&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>在 GitLab Pages 的子路徑下面部署另一個 GitLab Pages</title><link>https://noefly.cc/note/gitlab-subpage/</link><guid isPermaLink="true">https://noefly.cc/note/gitlab-subpage/</guid><description>這篇教你如何在 GitLab 上將不同的專案部署到 /a 和 /a/b 路徑下。</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前情提要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;感謝 &lt;a href=&quot;https://elvismao.com/&quot;&gt;毛哥EM&lt;/a&gt; 分享的「&lt;a href=&quot;https://emtech.cc/p/repo-subpage&quot;&gt;把 GitHub Pages 從 /repo 變成 /a/b：用多個 Repo 管理同一個網站的子路徑&lt;/a&gt;」，讓我知道原來 GitHub Pages 可以這樣嵌套！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下午和今年 &lt;a href=&quot;https://sitcon.camp/2026/&quot;&gt;SITCON CAMP&lt;/a&gt; 開發組的組長 &lt;a href=&quot;https://yorukot.me/&quot;&gt;Yoru&lt;/a&gt; 線上面談完，最後我提問了關於為何 SITCON 不是將專案和看板都放在 GitLab 上，那在談論過後我就跑來研究這個東東了！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然後～推薦大家去參加 &lt;a href=&quot;https://sitcon.org&quot;&gt;SITCON&lt;/a&gt; 年會歐～下面進入正題！&lt;/p&gt;
&lt;h2&gt;大致原理&lt;/h2&gt;
&lt;p&gt;因為 GitLab 不能像是 GitHub 一樣使用別人做好得 workflow 去運行，所以我使用了大量 Git 操作，若有其他實現方式也歡迎來信討論！ &lt;code&gt;w@noefly.cc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;接下來會走過以下步驟：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新增兩個 GitLab 專案&lt;/li&gt;
&lt;li&gt;設定子網站&lt;/li&gt;
&lt;li&gt;設定主網站&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;那麼開始吧～&lt;/p&gt;
&lt;h2&gt;新增 GitLab 專案&lt;/h2&gt;
&lt;h3&gt;前往 GitLab 網站&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;https://gitlab.com&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;登入或建立 GitLab 帳號&lt;/h3&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;也可以使用 Google、GitHub 登入歐～&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h3&gt;建立兩個專案&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;https://gitlab.com/projects/new&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;選擇「建立空白專案」&lt;/li&gt;
&lt;li&gt;填寫專案資訊：&lt;img src=&quot;/assets/note/gitlab-subpage/new-project.png&quot; alt=&quot;&quot; /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;專案名稱：&lt;/strong&gt; 可以隨意取你喜歡的名字。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;專案 URL：&lt;/strong&gt; 選擇自己的帳號名稱或是預計要部署的團隊名稱。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;專案標識：&lt;/strong&gt; 專案的 ID，同個帳號或團隊內不可重複。
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;若是建立 &lt;strong&gt;「子網站」&lt;/strong&gt; 的專案，可以隨便取，因為後續我們只會用主網站的專案做網站部署！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;若是建立 &lt;strong&gt;「主網站」&lt;/strong&gt; 的專案，這個專案標識就會是網站的一級路徑，所以建議使用易辨識或是簡單的單字與短語。&lt;/p&gt;
&lt;p&gt;例如「neko」，則最後成果的網址會是：「&lt;code&gt;https://noefly.gitlab.io/neko/...&lt;/code&gt;」。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;專案標識可以在專案的設定中更改，所以如果覺得取的不好也是可以再修改！&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;可見性級別：&lt;/strong&gt; 設定為 &lt;strong&gt;「公開」&lt;/strong&gt;，除非是付費版本的 GitLab 或是自架的 GitLab 實例，否則有限制不公開專案無法架設 GitLab Pages。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;重複以上動作，建立兩個專案！&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;設定子網站&lt;/h2&gt;
&lt;h3&gt;新增 GitLab CI 設定檔&lt;/h3&gt;
&lt;p&gt;在專案根目錄新增 &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; 檔案，設定 GitLab CI。&lt;/p&gt;
&lt;p&gt;在子網站的專案中，我會將網站建構為靜態網站後，生成的檔案輸出到 &lt;code&gt;deploy&lt;/code&gt; 分支中。&lt;/p&gt;
&lt;p&gt;&amp;lt;Tabs tabs={[{ id: &quot;static-child&quot;, label: &quot;純靜態檔案&quot; }, { id: &quot;framework-child&quot;, label: &quot;非純靜態檔案&quot; }]}&amp;gt;
&amp;lt;Fragment slot=&quot;static-child&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;將靜態網站的檔案放在 &lt;code&gt;dist/&lt;/code&gt; 目錄下，並使用下列 CI 設定檔。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stages:
  - push

push:
  stage: push
  image: alpine:3.23
  script:
    - apk add --no-cache git
    - cd dist
    - git init
    - git config --global user.name &quot;GitLab CI&quot;
    - git config --global user.email &quot;ci@gitlab.com&quot;
    - git remote add origin &quot;https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git&quot;
    - git add -A
    - &apos;git commit -m &quot;chore: ${CI_COMMIT_SHORT_SHA}&quot;&apos;
    - git checkout -B deploy
    - git push --force -o ci.skip origin deploy
  rules:
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Fragment slot=&quot;framework-child&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;請修改下方 build 階段中的 script，讓你的框架生成靜態網站檔案。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stages:
  - build
  - push

build:
  stage: build
  image: node:24
  script:
    - npm ci
    - npm run build
  artifacts:
    untracked: true
    when: on_success
    access: all
    expire_in: 3 day
    paths:
      - dist/

push:
  stage: push
  image: alpine:3.23
  dependencies:
    - build
  script:
    - apk add --no-cache git
    - cd dist
    - git init
    - git config --global user.name &quot;GitLab CI&quot;
    - git config --global user.email &quot;ci@gitlab.com&quot;
    - git remote add origin &quot;https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git&quot;
    - git add -A
    - &apos;git commit -m &quot;chore: ${CI_COMMIT_SHORT_SHA}&quot;&apos;
    - git checkout -B deploy
    - git push --force -o ci.skip origin deploy
  rules:
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;
&amp;lt;/Tabs&amp;gt;&lt;/p&gt;
&lt;h3&gt;設定 GitLab CI 存取權限&lt;/h3&gt;
&lt;p&gt;因為在上面的 CI 中，使用了「&lt;code&gt;CI_JOB_TOKEN&lt;/code&gt;」這個變數，用 CI 的工作令牌讀寫專案，而 GitLab 預設關閉了這個權杖寫入專案的權限，所以我們要去打開！&lt;/p&gt;
&lt;h4&gt;設定 → CI/CD&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/gitlab-subpage/setting-ci.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;工作令牌權限 → 附加權限&lt;/h4&gt;
&lt;p&gt;✓ 允許 Git 向版本庫推送請求&lt;/p&gt;
&lt;p&gt;&lt;s&gt;雖然但是，版庫是什麼？&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/gitlab-subpage/additional-perm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;設定主網站&lt;/h2&gt;
&lt;h3&gt;前往專案目錄&lt;/h3&gt;
&lt;p&gt;接著前往主網站的專案，我們將以 Git submodule 的方式，將子網站專案的靜態網站檔案，可以「匯入」進主網站！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /path/to/project
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;新增 submodule&lt;/h3&gt;
&lt;p&gt;這裡拆解一下這句指令的意思：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;-b deploy&lt;/code&gt;：指定預新增的專案分支為 &lt;code&gt;deploy&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;project_git_url&amp;gt;&lt;/code&gt;：這裡請替換為子網站專案的 Git URL，你可以在專案的 GitLab 頁面上找到！以 GitLab 官方實例來講，格式會是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://gitlab.com/&amp;lt;user&amp;gt;/&amp;lt;project&amp;gt;.git&lt;/code&gt; 或&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git@gitlab.com:&amp;lt;user&amp;gt;/&amp;lt;project&amp;gt;.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;public/&amp;lt;path&amp;gt;&lt;/code&gt;：這是 submodule 要設定的路徑，請將 &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; 替換成你想要的二級路徑。
例如「ciallo」，就會變成：&lt;code&gt;https://user.gitlab.io/neko/ciallo/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;git submodule add -b deploy &amp;lt;proect_git_url&amp;gt; public/&amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;設定 CI 設定檔&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;到最後了！加油！&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;在主網站專案的根目錄新增 &lt;code&gt;.gitlab-ci.yml&lt;/code&gt;：&lt;/p&gt;
&lt;p&gt;&amp;lt;Tabs tabs={[{ id: &quot;static-parent&quot;, label: &quot;純靜態檔案&quot; }, { id: &quot;framework-parent&quot;, label: &quot;非純靜態檔案&quot; }]}&amp;gt;
&amp;lt;Fragment slot=&quot;static-parent&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;將靜態網站的檔案放在 &lt;code&gt;dist/&lt;/code&gt; 目錄下，並使用下列 CI 設定檔。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;variables:
  GIT_SUBMODULE_STRATEGY: recursive
  GIT_SUBMODULE_FORCE_HTTPS: &quot;true&quot;

stages:
  - pages

pages:
  stage: pages
  image: alpine:3.23
  script:
    - mv dist/* publish/
  artifacts:
    untracked: true
    when: always
    access: all
    expire_in: 3 day
    paths:
      - publish
  publish: publish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Fragment slot=&quot;framework-parent&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;請修改下方 build 階段中的 script，讓你的框架生成靜態網站檔案。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;variables:
  GIT_SUBMODULE_STRATEGY: recursive
  GIT_SUBMODULE_FORCE_HTTPS: &quot;true&quot;

stages:
  - build
  - pages

build:
  stage: build
  image: node:24
  script:
    - npm ci
    - npm run build
  artifacts:
    untracked: true
    when: on_success
    access: all
    expire_in: 3 day
    paths:
      - dist/

pages:
  stage: pages
  image: alpine:3.23
  dependencies:
    - build
  script:
    - mv dist/* publish/
  artifacts:
    untracked: true
    when: always
    access: all
    expire_in: 3 day
    paths:
      - publish
  publish: publish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;
&amp;lt;/Tabs&amp;gt;&lt;/p&gt;
&lt;h2&gt;結語&lt;/h2&gt;
&lt;p&gt;&lt;s&gt;啪機啪機！恭喜，你撐到了這裡！&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;整個流程到這裡就結束了！當然如果你需要新增多個子網站，也是可以重複以上步驟讓主網站有多個 submodule！&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://emtech.cc/p/repo-subpage&lt;/li&gt;
&lt;li&gt;https://gitlab.com/pages/plain-html&lt;/li&gt;
&lt;li&gt;https://docs.gitlab.com/ci/runners/configure_runners/&lt;/li&gt;
&lt;li&gt;https://docs.gitlab.com/ci/runners/git_submodules/&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Google Workspace Essential</title><link>https://noefly.cc/note/google-workspace-essential/</link><guid isPermaLink="true">https://noefly.cc/note/google-workspace-essential/</guid><description>用自己的域名開一個 Google 帳號？免費！</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;用自己的域名開一個 Google 帳號？免費！&lt;/p&gt;
&lt;p&gt;前情提要一下，這是一個關，有一個人 Google Meets 的時候，把帳號打成了個人帳號（&lt;code&gt;w@noefly.cc&lt;/code&gt;）而不是 Google 帳號，結果測試發現進不去，所以上網搜尋有沒有免費 Google Workspace 的故事。&lt;/p&gt;
&lt;h2&gt;Google Workspace Essential 是什麼？&lt;/h2&gt;
&lt;p&gt;Google Workspace 是一個由 Google 推出的線上團隊解決方案，可以讓團隊自訂域名（&lt;code&gt;user@example.org&lt;/code&gt;），並擁有專屬於團隊雲端硬碟與相關服務。&lt;/p&gt;
&lt;p&gt;但是，一般人熟知的 Google Workspace 都是要持續付費，才能獲取那些功能，對於個人或是小型團隊來說，是筆不小的開銷。&lt;/p&gt;
&lt;p&gt;因此 Google 推出了這個 &lt;s&gt;慢慢騙你上車的&lt;/s&gt; 方案，Google Workspace Essential 是一個簡化版的 Google Workspace，雖然可以使用的功能相對少很多，但是對於個人或是小企業來說已經相對足夠了，好啦下面講重點！&lt;/p&gt;
&lt;h2&gt;功能說明&lt;/h2&gt;
&lt;p&gt;如上段所說，Essential 方案簡化了許多功能，以下是幾個值得注意的點！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;沒有提供 Gmail 服務。
&lt;ul&gt;
&lt;li&gt;團隊內的所有成員所使用的自訂域名電子郵件必須是可以收信的狀態。這邊建議參考 &lt;a href=&quot;https://www.osga.dev&quot;&gt;Osga&lt;/a&gt; 提供的方法，讓自訂網域的電子郵件可以在 Gmail 中收信。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Note&amp;gt;
參考連結：https://blog.osga.dev/blog/freegmailsmtp/
&lt;strong&gt;推薦文章&lt;/strong&gt;：免費仔也能用自己的網域收發信！Cloudflare + Gmail SMTP 的免費套餐
&amp;lt;/Note&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;雲端硬碟、文件系列服務與一般 Google 帳號相同。
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;儲存空間為 15 GB&lt;/strong&gt; 歐～。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;註冊教學&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往 &lt;a href=&quot;https://workspace.google.com/essentials/&quot;&gt;Google Workspace Essential&lt;/a&gt; 頁面。&lt;/p&gt;
&lt;p&gt;https://workspace.google.com/essentials/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊中間的「新增公司電子郵件帳戶」開始註冊！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按照指示填入一些必要資訊，如想使用的電子郵件、密碼、姓名、團隊名稱。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;這些資訊除了電子郵件在之後可以在管理控制台中更改。&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;註冊完帳號後，會回到 Google 帳號登入頁面，請用剛才輸入的帳號和密碼登入！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;恭喜！自此你可以使用這個自訂域名的電子郵件進去他人的會議室了！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;管理控制台&lt;/h2&gt;
&lt;p&gt;https://admin.google.com&lt;/p&gt;
&lt;p&gt;管理控制台可以讓管理員調整與管理各項團隊內的設定，如果未來團隊有需要升級成更高級的方案，也可以在這裡刷卡。&lt;/p&gt;
&lt;p&gt;裡面的功能有一點點多，這部份就留給讀者自己去探索啦～&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://workspace.google.com/essentials/&lt;/li&gt;
&lt;li&gt;https://www.elite.cloud/zh/post/google-workspace-essentials-starter/&lt;/li&gt;
&lt;li&gt;https://admin.google.com/&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>在 GitLab 上部署 Renovate Bot</title><link>https://noefly.cc/note/renovate-gitlab/</link><guid isPermaLink="true">https://noefly.cc/note/renovate-gitlab/</guid><description>讓套件更新交給專人處理，自己專注在專案開發！</description><pubDate>Thu, 25 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;機器人帳號&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;至 &lt;a href=&quot;https://gitlab.com&quot;&gt;GitLab&lt;/a&gt; 創立另一個 GitLab 帳號。&lt;/li&gt;
&lt;li&gt;新增個人存取令牌，並在選取範圍勾選以下權限：
&lt;ul&gt;
&lt;li&gt;[x] &lt;code&gt;read_repository&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[x] &lt;code&gt;read_registry&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[x] &lt;code&gt;read_api&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[x] &lt;code&gt;write_repository&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[x] &lt;code&gt;api&lt;/code&gt;
&lt;img src=&quot;/assets/note/renovate-gitlab/access-token.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;複製創建好的令牌
&lt;img src=&quot;/assets/note/renovate-gitlab/copy-token.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;設定 Renovate 專案&lt;/h2&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;注意這裡是在 &lt;strong&gt;主要的 GitLab 帳號&lt;/strong&gt; 繼續操作喔！不是在機器人帳號，別搞混了！&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;建立一個 GitLab 專案。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;專案名稱&lt;/strong&gt;：一個自己喜歡的名稱，為了利於辨識，我這裡命名為「Renovate Runner」。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可見性級別&lt;/strong&gt;：設定為 &lt;strong&gt;「私有」&lt;/strong&gt;，避免操作失誤，重要的存取資訊洩漏！
&lt;img src=&quot;/assets/note/renovate-gitlab/create-project.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;複製專案至本地。
&lt;strong&gt;SSH&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git clone git@gitlab.com:&amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git clone https://gitlab.com/&amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;
若不知道網址，可以點開右上角「程式碼」，裡面有資訊可以複製。
&lt;img src=&quot;/assets/note/renovate-gitlab/git-clone.png&quot; alt=&quot;&quot; /&gt;
&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開啟專案，新增 &lt;code&gt;.gitlab-ci.yml&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定 &lt;code&gt;.gitlab-ci.yml&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;include:
    - project: &apos;renovate-bot/renovate-runner&apos;
    file: &apos;/templates/renovate.gitlab-ci.yml&apos;
    ref: &apos;v25.0.0&apos;
renovate:
    rules:
        - if: &apos;$CI_PIPELINE_SOURCE == &quot;schedule&quot;&apos;
        - if: &apos;$CI_PIPELINE_SOURCE == &quot;push&quot;&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;推送變更至遠端專案。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定流水線排程。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;回到專案頁面。&lt;/li&gt;
&lt;li&gt;點擊側邊欄「建置」→「流水線排程」。
&lt;img src=&quot;/assets/note/renovate-gitlab/schedule-ci.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;點擊「建立新的流水線排程」。&lt;/li&gt;
&lt;li&gt;調整相關設定：- &lt;strong&gt;描述&lt;/strong&gt;：一個自己喜歡的名稱，為了利於辨識，我這裡命名為「Renovate」。- &lt;strong&gt;間隔模式&lt;/strong&gt;：設定多久運行一次，官方建議為每小時一次，因此設定為 &lt;code&gt;0 * * * *&lt;/code&gt;。
&lt;img src=&quot;/assets/note/renovate-gitlab/create-schedule.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;點選「建立」。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;設定 Renovate 相關變數&lt;/h2&gt;
&lt;h3&gt;設定位置&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在側邊欄點擊 &lt;strong&gt;「設定」→「CI/CD」&lt;/strong&gt;。
&lt;img src=&quot;/assets/note/renovate-gitlab/setting-ci.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在「變數」區塊中點擊「新增變數」即可新增一個新的變數。
&lt;img src=&quot;/assets/note/renovate-gitlab/create-var.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;code&gt;RENOVATE_TOKEN&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用途：負責檢查並開啟 MR[^1]。&lt;/li&gt;
&lt;li&gt;取得：參考「&lt;a href=&quot;#%E6%A9%9F%E5%99%A8%E4%BA%BA%E5%B8%B3%E8%99%9F&quot;&gt;#機器人帳號&lt;/a&gt;」。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;RENOVATE_GITHUB_COM_TOKEN&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用途：取得套件更新資訊。&lt;/li&gt;
&lt;li&gt;取得：自 &lt;a href=&quot;https://github.com&quot;&gt;GitHub&lt;/a&gt; 的 Personal Access Token。參考 &lt;a href=&quot;https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-changelogs-and-tools&quot;&gt;Running Renovate - Renovate Docs&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gastaud.io/en/article/gitlab-renovatebot&quot;&gt;Install and configure Renovate Bot on GitLab CE - Jean-Yves Gastaud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gitlab.com/renovate-bot/renovate-runner/&quot;&gt;Mend Renovate / renovate-runner · GitLab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[^1]: Merge Request，在 GitLab 中的合併請求。&lt;/p&gt;
</content:encoded></item><item><title>透過 Bottles 在 Linux 運行桌面版的 Line</title><link>https://noefly.cc/note/bottles-line/</link><guid isPermaLink="true">https://noefly.cc/note/bottles-line/</guid><description>透過 Bottles 管理並安裝必要套件，輕鬆安裝 Line。</description><pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前置作業&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安裝 Flatpak
&lt;strong&gt;.ArchLinux&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 擇一使用
$ sudo pacman -S flatpak # pacman
$ yay -S flatpak # yay
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;.Ubuntu&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo apt install flatpak
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新增 Flathub 套件庫。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;透過 Flatpak 安裝 Bottles。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ flatpak instlall com.usebottles.bottles
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載 Line 安裝檔。
&amp;lt;Note&amp;gt;透過 Line 官方連結下載：https://desktop.line-scdn.net/win/new/LineInst.exe&amp;lt;/Note&amp;gt;
&amp;lt;Tip&amp;gt;
這是從 Line 官網抓取的連結，可安心下載。若覺得有疑慮，可自行至 Line
官網下載安裝檔：https://line.me/tw
&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;新增瓶子&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;開啟 Bottles，點擊右上角的 &lt;code&gt;menu&lt;/code&gt;，並選擇「Preferences」。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇「執行器」，展開「Kron4ek」，並安裝最新版。
&lt;img src=&quot;/assets/note/bottles-line/kron4ek.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊右上角 &lt;code&gt;x&lt;/code&gt; 返回首頁。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊左上角 &lt;code&gt;plus&lt;/code&gt;，新增一個瓶子（Bottle）。
&lt;img src=&quot;/assets/note/bottles-line/add_bottle.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;調整新瓶子的設定。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「名稱」欄位：可以隨意取一個名字，供自己辨識用。我自己習慣設定為應用程式的名稱，如 Line。&lt;/li&gt;
&lt;li&gt;選擇「應用程式」。&lt;/li&gt;
&lt;li&gt;執行器：保持預設就好了。&lt;/li&gt;
&lt;li&gt;Bottle 目錄：若須將瓶子存放於不同的路徑，可以從這裡更改。建議保持預設。
&lt;img src=&quot;/assets/note/bottles-line/add_bottle_info.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊「創建」開始建立新的瓶子。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;待建立好後，點擊「關閉」。
&lt;img src=&quot;/assets/note/bottles-line/created.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;調整瓶子並安裝 Line&lt;/h2&gt;
&lt;p&gt;首先我們要先安裝一些必要套件，才能讓 Line 正常運行。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點擊「設定」，開啟設定頁面。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在「執行器」中選擇 &lt;a href=&quot;#%E6%96%B0%E5%A2%9E%E7%93%B6%E5%AD%90&quot;&gt;新增瓶子&lt;/a&gt; 中安裝的 Kron4ek 執行器。
&lt;img src=&quot;/assets/note/bottles-line/runner.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊「相依套件」。
&lt;img src=&quot;/assets/note/bottles-line/package.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在列表中找到以下套件並安裝：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cjkfonts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d3dcompiler_47&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vcredist2022&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iertutil&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;都安裝好後，點擊左上角的 &lt;code&gt;chevron-left&lt;/code&gt;，返回瓶子的主頁。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點擊「Launch executable」，並選取在 &lt;a href=&quot;#%E5%89%8D%E7%BD%AE%E4%BD%9C%E6%A5%AD&quot;&gt;前置作業&lt;/a&gt; 中下載的 Line 安裝檔。
&lt;img src=&quot;/assets/note/bottles-line/launch_executable.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;依照 Line 安裝器指示，安裝 Line。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;常見問題&lt;/h2&gt;
&lt;h3&gt;Line 會莫名崩潰&lt;/h3&gt;
&lt;p&gt;在瓶子的設定中，將「DXVK」和「VKD3D」設定調整為「Disabled」&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/bottles-line/DXVK.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;無法顯示表情符號&lt;/h3&gt;
&lt;p&gt;&amp;lt;Warning&amp;gt;關於此問題，曾經有透過安裝字形並修改註冊表的方式，但目前此方式已失效。&amp;lt;/Warning&amp;gt;&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ivonblog.com/posts/linux-bottles-install-line&quot;&gt;如何在Linux安裝電腦版Line，使用Bottles管理Wine容器 · Ivon的部落格&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://home.gamer.com.tw/artwork.php?sn=5920941&quot;&gt;Line 使用 wine-ge-proton 8.10 透過 Bottles 在 ubuntu 22.04 執行 (安裝過程及小心得) - redhung的創作 - 巴哈姆特&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://appdb.winehq.org/objectManager.php?sClass=application&amp;amp;iId=13986&quot;&gt;WineHQ - LINE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>pacman 鑰匙圈損壞</title><link>https://noefly.cc/note/pacman-key-corrupt/</link><guid isPermaLink="true">https://noefly.cc/note/pacman-key-corrupt/</guid><description>鑰匙圈損毀？重新生成一次吧！</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;鑰匙圈檔案損毀&lt;/h2&gt;
&lt;p&gt;如下圖，報出了錯誤訊息「&lt;strong&gt;檔案毀損（套件不正確或毀損（PGP鑰匙圈））&lt;/strong&gt;」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/pacman-key-corrupt/error.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;這可能是紀錄鑰匙圈的檔案損毀或是內部的資料缺失導致的，這時候可以使用 &lt;code&gt;pacman-key&lt;/code&gt; 指令來重新生成正確的鑰匙圈。&lt;/p&gt;
&lt;h2&gt;修復方式&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;刪除舊的鑰匙圈檔案。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo rm -rf /etc/pacman.d/gnupg/
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化並生成新的鑰匙圈。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo pacman-key --init                # 初始化鑰匙圈並確認訪問權限
$ sudo pacman-key --populate archlinux  # 重新載入預設鑰匙圈
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;同步套件資訊。
&lt;strong&gt;yay&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ yay
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;pacman&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ pacman -Syuu
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://man.archlinux.org/man/pacman-key.8&quot;&gt;pacman-key(8) — Arch manual pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://razonyang.com/zh-hans/blog/archlinux/reset-keyring/&quot;&gt;Arch Linux 重置 keyring - 博客 - Razon Yang&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>BitChat 真正去中心化的聊天應用程式</title><link>https://noefly.cc/note/bitchat/</link><guid isPermaLink="true">https://noefly.cc/note/bitchat/</guid><description>BitChat 是一款真正去中心化、免網路連線的聊天應用程式，僅透過藍芽連線、交換資訊。</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;##\       ##\   ##\               ##\                  ##\
## |      \__|  ## |              ## |                 ## |
#######\  ##\ ######\    #######\ #######\   ######\ ######\
##  __##\ ## |\_##  _|  ##  _____|##  __##\  \____##\\_##  _|
## |  ## |## |  ## |    ## /      ## |  ## | ####### | ## |
## |  ## |## |  ## |##\ ## |      ## |  ## |##  __## | ## |##\
#######  |## |  \####  |\#######\ ## |  ## |\####### | \####  |
\_______/ \__|   \____/  \_______|\__|  \__| \_______|  \____/
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;擷取自 &lt;a href=&quot;https://bitchat.free/&quot;&gt;bitchat.free&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;特點介紹&lt;/h2&gt;
&lt;h3&gt;去中心化&lt;/h3&gt;
&lt;p&gt;首先，最重要的一點「&lt;strong&gt;去中心化&lt;/strong&gt;」，意即 &lt;strong&gt;沒有中心伺服器&lt;/strong&gt; 作為資料儲存與交換的地方，也代表開發團隊或公司 &lt;strong&gt;無法追蹤&lt;/strong&gt; 你的任何資料。&lt;/p&gt;
&lt;h3&gt;免網路連線&lt;/h3&gt;
&lt;p&gt;市面上超過 99.87％ 的具有聊天功能的應用程式（例如 Discord、Line、Instagram 等），都需要網路連線（不論是 Wi-Fi 或是行動網路等），而在 &lt;strong&gt;資料交換&lt;/strong&gt; 時，&lt;strong&gt;&lt;a href=&quot;https://zh.wikipedia.org/zh-tw/%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E6%9C%8D%E5%8B%99%E6%8F%90%E4%BE%9B%E8%80%85&quot;&gt;ISP&lt;/a&gt;&lt;/strong&gt; 就有可能在資料傳遞時偷偷 &lt;strong&gt;記錄或追蹤你的資料&lt;/strong&gt;，甚至販賣你的資料，這 &lt;strong&gt;可能侵犯&lt;/strong&gt; 身為消費者或是使用者的我們的 &lt;strong&gt;隱私&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;而在 BitChat 中，並不需要網路連線做資料交換的媒介，但你會想，這樣要如何傳遞訊息？&lt;s&gt;（畢竟不能聊天應用程式是單機遊戲吧&lt;/s&gt;&lt;/p&gt;
&lt;h3&gt;藍芽通訊協定&lt;/h3&gt;
&lt;p&gt;BitChat 使用 &lt;strong&gt;藍芽&lt;/strong&gt; 做為資料交換的方式，根據開發者的 &lt;a href=&quot;https://github.com/permissionlesstech/bitchat/blob/main/WHITEPAPER.md&quot;&gt;&lt;strong&gt;協議白皮書（BitChat Protocol Whitepaper）&lt;/strong&gt;&lt;/a&gt;，BitChat 使用 &lt;a href=&quot;https://zh.wikipedia.org/zh-tw/%E8%97%8D%E8%8A%BD%E4%BD%8E%E5%8A%9F%E8%80%97&quot;&gt;&lt;strong&gt;BLE&lt;/strong&gt;&lt;/a&gt; 與 &lt;a href=&quot;https://zh.wikipedia.org/zh-tw/%E5%B0%8D%E7%AD%89%E7%B6%B2%E8%B7%AF&quot;&gt;&lt;strong&gt;P2P&lt;/strong&gt;&lt;/a&gt; 技術，從而讓訊息可以傳遞。&lt;/p&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;
如果想了解技術細節，可以到專案的協議白皮書查看喔！因為本人了解的並不太多，這裡就不多說了。&lt;a href=&quot;https://github.com/permissionlesstech/bitchat&quot;&gt;@permissionlesstech/bitchat&lt;/a&gt;
專案中的 &lt;a href=&quot;https://github.com/permissionlesstech/bitchat/blob/main/WHITEPAPER.md&quot;&gt;/WHITEPAPAER.md&lt;/a&gt;
&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h2&gt;使用方法&lt;/h2&gt;
&lt;h3&gt;下載與安裝&lt;/h3&gt;
&lt;h4&gt;Android&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;前往 BitChat 官方儲存庫：https://github.com/permissionlesstech/bitchat-android&lt;/li&gt;
&lt;li&gt;點擊右邊的「Release」，進到發布的頁面。&lt;/li&gt;
&lt;li&gt;往下滑，在「Assets」中找到 &lt;code&gt;bitchat-0.0.0.apk&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;你的數字可能和我不一樣，這是因為每次新版本數字都會有變更。&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;點擊下載該 .apk 檔案。&lt;/li&gt;
&lt;li&gt;下載後開啟該檔案並安裝&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;iOS&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;前往 App Store 尋找「&lt;a href=&quot;https://apps.apple.com/us/app/bitchat-mesh/id6748219622&quot;&gt;bitchat mesh&lt;/a&gt;」，並按「取得」來下載。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Warning&amp;gt;請認明開發者為「&lt;strong&gt;Jack Dorsey&lt;/strong&gt;」，避免下載到非官方或惡意應用程式。&amp;lt;/Warning&amp;gt;&lt;/p&gt;
&lt;h3&gt;使用方法&lt;/h3&gt;
&lt;p&gt;在最下方可以輸入聊天訊息，點擊右邊的箭頭可以發送訊息。&lt;/p&gt;
&lt;p&gt;若沒有輸入訊息，右邊會是一個「/」，可以快速輸入一些指令。&lt;/p&gt;
&lt;p&gt;右上角的小人，顯示了附近有多少人正在 BitChat 網路中，點擊可以查看使用者名單。&lt;/p&gt;
&lt;p&gt;左上方的「bitchat/&lt;strong&gt;@xxxxxx&lt;/strong&gt;」點擊後可以更改名字。&lt;/p&gt;
&lt;p&gt;而「bitchat」點一下可以顯示關於應用程式的一些介紹。&lt;/p&gt;
&lt;h3&gt;秘密操作&lt;/h3&gt;
&lt;p&gt;快速點擊左上角「bitchat」可以清除所有訊息紀錄，這在特殊情況派得上用場！&lt;/p&gt;
&lt;p&gt;（至於是什麼情況，在此不方便說明。&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bitchat.free/&quot;&gt;bitchat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/permissionlesstech/bitchat&quot;&gt;permissionlesstech/bitchat: bluetooth mesh chat, IRC vibes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/permissionlesstech/bitchat-android&quot;&gt;permissionlesstech/bitchat-android: bluetooth mesh chat, IRC vibes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zh.wikipedia.org/zh-tw/%E8%97%8D%E8%8A%BD%E4%BD%8E%E5%8A%9F%E8%80%97&quot;&gt;藍牙低功耗 - 維基百科，自由的百科全書&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zh.wikipedia.org/zh-tw/%E5%B0%8D%E7%AD%89%E7%B6%B2%E8%B7%AF&quot;&gt;對等網路 - 維基百科，自由的百科全書&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>emfont 免費中文網頁字體服務</title><link>https://noefly.cc/note/emfont/</link><guid isPermaLink="true">https://noefly.cc/note/emfont/</guid><description>Google Fonts 找不到中文字體？這裡有！</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;這是什麼能吃嗎？&lt;/h2&gt;
&lt;p&gt;一個字，不能。但很好用！&lt;/p&gt;
&lt;p&gt;通常要在網站上使用字體有兩種方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;線上字體服務&lt;/strong&gt;，透過嵌入部分程式碼（script）讓網頁可以讀取第三方服務提供的字體檔案&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;讀取本地字體&lt;/strong&gt;，透過 CSS 設置 &lt;code&gt;@font-face&lt;/code&gt; 即可讀取。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;像是由知名公司 Google 推出的 Google Font 即是第一種。&lt;/p&gt;
&lt;p&gt;但是既然已經有如此強大的服務為何還要 emfont 呢？Google Fonts 雖然提供了眾多的字體可以選擇，但是中文字體卻沒有足夠的選擇，故才有此文的主角 emfont。emfont 提供了許多 &lt;strong&gt;不同風格&lt;/strong&gt; 的 &lt;strong&gt;中、日、英、韓&lt;/strong&gt; 文字體，彌補了 Google Fonts 的不足。&lt;/p&gt;
&lt;h2&gt;如何使用&lt;/h2&gt;
&lt;p&gt;作者提供了一個便捷的方式，使網頁開發者可以快速將此服務整合置網頁中。&lt;/p&gt;
&lt;h3&gt;選擇字體&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;首先先到 &lt;a href=&quot;https://font.emtech.cc/fonts&quot;&gt;字體&lt;/a&gt; 選擇喜歡的字體，本筆記以「縫合像素字型 12px Mono」舉例。&lt;/li&gt;
&lt;li&gt;選擇好後在字體頁面左邊有一個小框可以複製字體名稱，先點擊複製接下來會用到。 &lt;img src=&quot;/assets/note/emfont/font.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;在網頁中要使用字體的段落，以類別（&lt;code&gt;class&lt;/code&gt;）的方式貼上上一步得到的字體名稱。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;p class=&quot;emfont-FusionPixelFont12pxMono&quot;&amp;gt;我是縫合像素字型 12px Mono 的樣子！&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p class=&quot;emfont-FusionPixelFont12pxMono&quot;&amp;gt;我是縫合像素字型 12px Mono 的樣子！&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;載入並啟動 emfont&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在網頁中加入以下程式碼即可大功告成！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;
  import &quot;https://font.emtech.cc/emfont.js&quot;

  emfont.init()
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;框架整合&lt;/h2&gt;
&lt;p&gt;作者提供了眾多框架快速整合的方式，詳細可以到 &lt;a href=&quot;https://font.emtech.cc/docs/framework&quot;&gt;框架整合&lt;/a&gt; 頁面查看喔～&lt;/p&gt;
&lt;h3&gt;Vue.js / Nuxt&lt;/h3&gt;
&lt;p&gt;因為我的網站首頁 &lt;a href=&quot;/&quot;&gt;noefly.cc&lt;/a&gt; 使用 &lt;a href=&quot;https://nuxt.com&quot;&gt;Nuxt&lt;/a&gt;，所以特別拉出來講。&lt;/p&gt;
&lt;p&gt;按照作者所述，直接下面程式碼就可以快速使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
import { onMounted } from &quot;vue&quot;

onMounted(async () =&amp;gt; {
  const mod = await import(&quot;https://font.emtech.cc/emfont.js&quot;)
  mod.emfont.init()
})
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是，在我的網站好像會有一些問題，「&lt;code&gt;mod&lt;/code&gt; 未定義」或是「找不到 emfont 函式」等。&lt;/p&gt;
&lt;p&gt;一番探索後發現程式碼這樣改就可以運行了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
import { onMounted } from &quot;vue&quot;

onMounted(async () =&amp;gt; {
  await import(&quot;https://font.emtech.cc/emfont.js&quot;)
  emfont.init()
})
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有遇到問題的讀者，可以試試這個方法。&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://free.com.tw/emfont/&quot;&gt;Emfont 免費中文網頁字型：超過 90 款開源字型，一行程式碼輕鬆嵌入網站 – 免費資源網路社群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/emfont/emfont&quot;&gt;emfont/emfont: A free CJK webfont service 免費中文網頁字體服務&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://font.emtech.cc/&quot;&gt;emfont - 免費中文字體 Webfont 服務&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>超級好用的 Python 除錯工具——wat</title><link>https://noefly.cc/note/wat/</link><guid isPermaLink="true">https://noefly.cc/note/wat/</guid><description>&quot;wat&quot; the hack is that?</description><pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;試想一個情境，你正在開發一個 Python 專案，但是一堆錯誤蜂擁而至，嘗試查看變數時卻被一堆雜亂的紀錄淹沒？或是忘記了當前這個函式有什麼功能可以調用，但是開官方線上文檔很花時間？&lt;/p&gt;
&lt;p&gt;這時也許只有一聲「what?」最符合情境了！&lt;/p&gt;
&lt;p&gt;這就是「wat」的用處！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Wat&quot; is a variant of the English word &quot;what&quot; that is often used to express confusion or disgust&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;wat?&lt;/h2&gt;
&lt;p&gt;根據作者 &lt;a href=&quot;https://github.com/igrek51&quot;&gt;@igrek51&lt;/a&gt; 在 &lt;a href=&quot;https://github.com/igrek51/wat&quot;&gt;@igrek51/wat&lt;/a&gt; 中所述，&lt;code&gt;wat&lt;/code&gt; 是用來幫助你探索未知的項目（objects），並於運行（runtime）時查看他們。&lt;/p&gt;
&lt;h2&gt;安裝&lt;/h2&gt;
&lt;p&gt;wat 提供了不同的安裝方式：&lt;/p&gt;
&lt;h3&gt;Insta-Load&lt;/h3&gt;
&lt;p&gt;使用 Insta-Load 可以用在不安裝任何套件資源的情況下使用　&lt;code&gt;wat&lt;/code&gt;，推薦於臨時需要使用 &lt;code&gt;wat&lt;/code&gt; 套件時引用。&lt;/p&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;因為程式碼太長了，所以只能請讀者移駕至作者的 GitHub 看了......&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;h3&gt;2. pip&lt;/h3&gt;
&lt;p&gt;當然作者也是有提供 pip 套件可以安裝。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip install wat
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;import wat
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Unicode Glphy 🙀&lt;/h3&gt;
&lt;p&gt;這是最特別的，你可以使用 Unicode Glphy 來導入套件！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fun Fact: You can load WAT from a single Unicode glyph.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;import zlib
glyph = &apos;🙀󠅸󠆜󠇕󠅛󠇫󠅮󠇜󠇆󠄕ⷾ󠇯󠆧󠄠󠇔󠄟󠄤󠆝󠇍󠇖󠅎󠅺󠄁󠆔󠇐󠆭󠅬󠅯󠅒󠆣󠆎󠅕󠇈󠅊󠆂󠅂󠄒󠄈󠇮󠅲󠅖󠅢󠇄󠄥󠄗󠄤󠇗󠇒󠅶󠆱󠅀󠄞󠆢󠇏󠇐󠄇󠇋󠆓ⷴ󠅜󠇦󠅎󠅲󠄥󠇇󠄅󠇚󠄊󠆰󠅄󠇎󠇌ⷹ󠇦󠇌󠄹󠅧󠇎󠅥󠆆󠅞󠄶ⷵ󠄪󠇈󠆳󠄮󠅛󠆔󠅙󠇛󠆊󠄶󠄨󠅖󠇫󠆺󠇩󠅌󠇓󠄓󠇙󠅐󠅔󠇭󠅚󠄬󠄺ⷵ󠅚󠇫󠆎󠅆󠆨󠆧󠅶󠇛󠄾󠅙󠄢󠅞󠆷󠅝󠄗󠇕󠆵󠆂󠄺󠆩󠆶󠆓󠇠󠅴󠇝󠄕󠅵󠆕󠆕󠆓󠇠󠅼󠆻󠄖󠅏ⷾ󠅬ⷰ󠇩󠅷ⷰ󠆆󠇡󠅟󠇕󠇕󠆲󠆸󠄾󠅾󠄒󠇀󠅏󠅻󠄃󠇔󠇇󠇁󠆼󠆮󠅋󠅺󠇏󠄷󠅕󠄮󠄚󠆫󠆡󠆪ⷳ󠅺󠇑󠅚󠄍󠅥󠅝󠅝󠅛󠆯󠆋󠄺󠄗ⷶ󠅫󠅖󠆖󠄎ⷽ󠆺󠄩󠄾󠅤󠆝󠄚󠄲󠇆󠇒󠅉󠇗󠄵󠇅󠅼󠄃󠇣󠅸󠇒󠅬󠄅󠄔󠅭󠇗󠇐󠇛󠆇󠆬󠇜󠇀󠄫󠄬󠆑󠅞󠅡󠇡ⷰ󠅆󠄫󠅔󠄳󠅦ⷳ󠅒󠄜󠅚󠆄󠇋󠄄󠆭󠆻󠆸󠆮󠆲󠅮󠇓󠅀󠆛󠆒󠇚󠄅󠇌󠅷󠇅ⷴⷵ󠇂󠅯󠇎󠇅󠅒󠅩󠄧󠅝󠇖󠇍󠄪󠇫󠆢󠅺ⷾ󠇓󠄤󠅸󠄺󠅡󠄑󠄦󠇟󠅤󠅥󠄫󠄦󠅲󠅪ⷵ󠇆󠇂󠅓󠅯󠄨󠄹ⷵ󠆌󠅢󠇓󠇏󠄤󠄳ⷵ󠆶󠇞󠇌󠇋󠅢󠆡󠇞󠆠󠆋󠄟󠇣󠅣󠄩󠅮󠇔󠅝󠇢󠅨󠄲󠅢󠄎󠇨󠆷󠇦󠆀﻿󠄄󠅵󠆃󠄐󠆚󠄓ⷾ󠄣󠅙󠇁󠅟󠅺󠄀󠄱󠆄󠆿󠅌󠄋󠆳󠇅󠅿󠅴󠆫󠄔󠄥󠄠󠅵󠆒󠇕󠆘󠄘󠆫󠄷󠇝󠅺󠇓󠄥󠅥󠇑󠅶󠅑󠆺󠄭󠅄󠆙󠆧󠅊󠅞󠅥󠅑󠆉󠆖󠇅󠇅󠇬󠇇󠅌󠅒󠄬󠇑󠆚󠆧󠅭󠆗󠄃ⷱ󠆴󠅨󠆳󠆮󠇛󠅆󠅲󠆝󠆤󠅨󠇑󠆬󠄊󠇐󠅀󠅺󠅗󠇤󠇝󠅍󠅒󠆷󠇓󠅫󠇑󠆥󠆺󠆵󠄭ⷾ󠄡󠆢󠅸󠆺󠆨󠇋󠇍󠆪󠅪󠄵󠄕󠄳󠄲󠆅󠇉󠅅󠇓󠅅󠇏󠅀󠄿󠇝󠆶󠄔󠇓󠆗󠄧󠅧󠇁󠅧󠅁ⷸ󠇋󠄿󠅿󠄎󠆃󠆧󠄞󠄴󠅴󠆜󠇍󠇞󠇏󠇎󠅣󠄟󠄤󠅛󠆯󠅅󠆕󠅇󠄟󠆋󠇐󠄈󠆰󠆬󠄪󠄈󠄯󠆫󠅰ⷺ󠅓󠅝󠅔󠄑󠇃󠇅󠅤󠅅󠄏󠄊󠇧󠅘󠄉󠆇󠇟󠆧󠅲󠅋󠅩󠇞󠆈󠄾󠄠󠄟󠆐󠅞󠆋󠅊󠄴󠆠󠆎󠆔󠄇󠄁󠇪󠆲󠆎󠆘󠄉󠄰󠇛󠆔󠅶󠅎󠄢󠄍󠆖󠇟󠅸󠄪󠇒﻿󠅹󠆳󠄑󠆊󠇡󠆵󠄚󠆌󠆏󠄸󠅆󠆫󠇈ⷴ󠄅󠅉󠆂󠆨󠇔󠆋ⷶ󠇠ⷶ󠆤󠇐󠅕󠆬󠅓󠅐󠅇󠇝󠅄󠅺ⷲ󠆸󠇇󠅷󠆸󠅣󠅱󠆞󠆟󠆝󠆼󠄹󠇟ⷳ󠇞󠇞󠆑ⷰⷶ󠇁󠅎󠇓󠇭󠅃󠆢󠄓󠅠ⷹ󠄏󠄠󠄀󠇉󠄸ⷽ󠄨󠄕ⷲ󠅮󠆓󠅡󠇏󠅟󠅦󠄧󠆯ⷷ󠄻󠆳󠆪󠆽󠇬󠄏󠆵󠄼󠇑ⷵ󠅨󠅱󠇢󠅋󠅄󠆿󠅐󠄠󠄬󠆯󠇁󠆹󠇈󠅡󠄹󠄬󠅢󠆋󠆄󠅝󠅧󠆍󠆨󠆺󠄶󠄉󠄧󠆁󠄴󠆖󠄔󠆭󠆜󠆛󠅩󠅠󠅫󠅍󠆢󠆵󠄢󠇉󠄞󠆐󠆍󠄚󠆥󠄧󠆗󠄍󠅲󠅮󠆴󠄱󠇩󠄽󠄣󠆘󠄔ⷶ󠅟󠇃󠇦󠄑󠆦󠅩󠄩󠆪󠄴󠄅󠆦󠇞󠇕󠆕󠆈󠇭󠅍󠇙󠅬󠇍󠇋󠇨󠇄󠅀󠅭󠄦󠅵󠇭󠄏󠆺󠅸󠄭󠆖󠆊󠇄ⷽ󠅂󠆬󠄻ⷲ󠇩󠆳󠆦󠆩󠄛󠅷󠆆󠄵󠆆󠄋󠆟󠅟󠆄󠄰󠇃󠄰󠅠󠄤ⷾ󠄒󠆰󠆑󠇖󠄐ⷾⷲⷳ󠆿󠅂󠆳󠆹󠆵󠇯󠅏󠅈󠇔󠄊󠄲󠇕󠇭󠄑󠅒󠅎󠄂󠆽󠄋󠇆󠅭󠅏󠅇󠄑󠆣󠅞󠇕󠄤󠆗󠄇ⷾ󠆖󠆧󠆁󠆇󠇁󠆽󠄇󠆋󠆂󠆮󠄠󠆫ⷲ󠄠󠅂󠆧󠄪󠅷󠄽󠅻󠇪󠆘󠇚󠅇󠄖󠇍󠆔󠇠󠄀󠄷󠅕󠄗󠆡󠆳󠆉󠅱󠄟󠄾󠄻󠆨󠆞󠇗󠆧󠆯󠇞󠇯󠆏󠆎󠆎󠅶󠅀󠅉󠅿󠅭󠄓󠇯󠇯󠄸󠄋󠄁ⷽ󠇍󠅅󠄏󠄇󠆤󠄋󠅈󠄓󠆘󠇀󠄂󠆻ⷲ󠄽󠄘󠆆󠄕󠅚󠆠ⷴ󠅺󠇠󠇬󠄩ⷼ󠅫󠅗󠇢󠆬󠇐󠅚󠅢󠅛󠅯󠆚󠆅󠇔󠄓󠄿󠆧󠄈󠄖󠄹󠆪󠇁󠄸󠅂󠅽󠆏󠄰󠅌󠄞󠇈󠅙󠆋󠅤ⷷ󠆲󠇚󠅱󠆫󠇙󠄕󠆖󠄞󠄸󠅁󠇒󠇀󠆙󠅊󠅔󠇚󠆤󠆅󠄎󠆑󠅇󠅩󠄁󠆡󠄠󠄵󠇭󠆎󠄯󠆟󠄄󠆷󠅢󠆛󠆔󠇙󠅪󠆞󠅧󠅄󠅻󠅌󠆿󠆧󠅨󠅠󠄽󠇛󠄢󠆏󠄎ⷻ󠄳󠆗󠅸󠅭󠇚󠆂󠆬󠄠󠄉󠅩󠄣󠄃󠆯󠆡󠄹󠆘󠄜󠆚󠆜󠆹󠆆󠇍󠆇󠅌󠅀ⷶ󠄒󠇤󠅅󠇣󠆙󠆐󠅌󠄖󠆠󠄟󠇂󠅰󠇖󠅴󠇭󠅝󠇑󠇝󠅄󠆰󠅷󠅂󠆶󠄼󠇬󠄀󠆆󠆬󠅦󠇇ⷺ󠄸󠇇ⷰ󠅍󠆗󠆛󠅣󠅗󠄛󠇐󠇗󠄕󠇕󠅆󠇨󠅆󠆕󠅈ⷴ󠇦󠆖󠅓󠄓󠆢󠆄󠄚ⷷ󠄾󠄜󠆴󠆜󠆝󠄏󠆀󠆱󠇯󠅙󠅞󠅦󠆭󠆘󠇑󠄣󠆈󠄳󠇈󠇚󠅀󠄌󠇁󠄘󠇦󠆴󠅓󠅈󠆴󠅥󠅲󠄸ⷻ󠄈󠄧󠄂󠅼󠅌󠄘󠄸󠅆󠅡󠇩󠄡󠆴󠇅󠇈󠆯󠄚󠄵󠇘󠅎󠆂󠅈󠆤󠆛󠆐󠄒󠇅󠇧󠄇󠅁󠇘󠆊ⷼ󠆄󠆚󠅼󠅙󠅢󠅸󠅉󠄤󠄼󠆅󠄲󠄊󠄬󠇌󠇢󠅄󠇯󠇁󠅄󠅏󠇢󠄥󠆓󠄦ⷹ󠆓󠅿󠄧󠆖󠄔ⷴ󠄓󠄹󠆄󠄄ⷾ󠅉󠄋󠅽󠇐󠇅󠆲󠄦󠄜󠇍󠆦󠄖󠄮󠆨󠅕󠅹󠄍󠅃󠅭󠄢󠆮󠅔󠅰ⷴ󠄃󠆮󠆂󠆂󠇇󠇄󠇄󠆑󠅸󠄐󠄲󠆌󠄠󠄞󠇄󠅺󠆳󠄏ⷹ󠆤󠅣󠇋󠅌󠇅󠆲󠆸󠅏󠅂󠄮󠅗󠅔󠅖󠇢󠆒󠇕󠄍󠄤󠅸󠆐󠇇󠄭󠄷󠄕󠇭󠇗󠄑󠆈󠆬󠇝󠅖󠆋󠄀󠆅󠄲󠄈󠇣󠅐󠆣󠅓󠄴󠅝󠄫󠇑󠇝󠇔ⷹ󠅀󠇇󠅼󠅓󠆔󠅝󠅡󠅈󠅮󠆲󠅶󠄨󠄄󠄎󠄰󠅣󠆳󠅡󠅻󠅼󠇕󠄟󠇚󠆙󠆬󠅶󠆢󠅿󠆝ⷽⷽ󠇇󠇓󠄳󠇈󠆒󠅸󠇘󠅞󠄶󠆿󠄺󠅹ⷻⷶ󠇤󠇥󠇛󠇙󠅾󠆇󠄓󠆪󠇖ⷷ󠅯󠆾󠅽󠅷󠅲ⷾⷽ󠄙󠄴󠄛󠇩󠆛󠆤󠅊󠅛󠆇󠇯󠇘󠄇󠄌󠅂ⷲ󠆡󠄖󠄎󠅔󠅌󠅤󠄂󠆁󠆲󠆃󠇓ⷷ󠆾󠄑󠅌󠅠󠅏󠇤󠆐ⷵ󠅤󠄨󠅜󠄶󠄋󠇏󠄃󠇨󠅕󠄮󠆳󠆢󠄔󠅹󠇐󠇕󠄁󠇌󠄐󠇘󠆱󠄢󠇘󠇑󠅞󠄑ⷱ󠄞󠄞󠆅󠇍󠆽󠄓󠇗󠄥󠇯󠆸󠄃󠄬󠅞󠇥󠄐󠄧󠇞󠄗󠄭󠇭󠇞󠄞󠄓󠅺󠅋󠇋󠅝󠄴󠆥󠆴󠄺󠅲󠄊󠄋󠆢󠅟󠇒󠆄󠇬󠄇󠅒󠆊󠅒󠆐󠆱󠇡󠇠󠇪󠄺󠄲󠆻󠇏󠄊󠄧󠆐󠅿󠄵󠄅󠆹󠄲󠅼ⷳ󠆢󠄄󠄹󠄁󠄤ⷷ󠆪󠄅󠆊󠅖󠅣󠄞󠅩󠄠󠅜󠇒󠇩󠆀󠅞󠆓󠆅󠇪󠅱󠆨󠅻󠅢󠅝󠇓󠄻󠆳󠆓󠆴󠅩󠅲󠅼󠆊󠅝󠅣󠄌󠅔󠇆ⷾ󠇃󠇉󠇙󠄛󠆶󠄻󠄝󠅕󠆵󠅉󠆞󠆾󠆞󠇭󠆥󠇚󠄐󠅹󠄟󠄤󠇁󠅎󠇏󠆪󠄔󠇨󠅱󠇕󠆉ⷻ󠅎󠆅󠇍󠆢󠅩󠆹󠄺󠆛󠄄󠇩󠄄󠇦󠅮󠆻󠄄󠆻󠆧󠆐󠅂󠅷󠄅󠇭󠅓󠅊󠆹󠅌󠆙󠇔󠅶󠆸󠄃󠄱󠆽󠅵󠅊󠄡󠄃󠄔󠇇󠇁󠆋󠇠ⷹ󠆳󠅧󠅽󠇃󠇓󠅃󠄮󠆎󠆡﻿󠅊󠅕󠆓󠅔󠅮󠅂󠇪ⷺ󠅤󠅰󠅬󠅟󠇁󠇒󠅍󠄌󠆨󠅗󠄪󠆉󠆤󠅤󠆒󠇖ⷾ󠄆󠄀󠇉󠄚󠅉󠆺󠅮󠆒󠇚󠄏󠅤󠆪󠅎󠅞󠆪󠄆󠄿󠆐󠆜ⷶ󠇦󠄵󠅮󠄢󠆰󠄓󠇍󠇟󠇈󠅮󠅌󠅚󠄟󠆑󠆱󠄞󠆀󠄽󠇆󠅬󠇏󠇉󠅠󠆡󠅁󠅣󠅟󠅖󠅾󠅊󠇬󠆂󠄟󠄀󠆖󠄆󠇥󠅬󠄞󠅻󠇟󠅠󠇂󠄿󠄁󠄇󠆆󠆞󠄨󠅹󠅦󠇔󠅒󠆴󠇠󠄨󠆺󠆬󠅚󠇨󠇡󠆸󠄩ⷺ󠅓󠄞󠄩󠆧󠅺󠅾󠆶󠄏󠅷󠆲󠇆󠆕󠆬󠄞󠄩󠄰󠄮󠇆󠇇󠅜󠆋ⷶ󠇢󠇯󠅎󠇟󠇍ⷶ󠄸󠇄󠅙󠆪󠅍󠆏󠇜󠆎󠇓󠆟󠆟󠅽󠄿󠇛󠇣󠆐󠅑󠅺󠄺󠆲󠄚󠄇ⷸ󠇦󠇤󠇭ⷻ󠇙󠆞󠄆ⷹ󠄐󠅽󠅹󠅀ⷸ󠇯󠆠󠇀󠄨󠇫󠆬󠆋󠄇󠄄󠆣󠄗ⷵⷽ󠅷󠄯󠅧󠅧ⷻ󠇝󠅀󠇩󠄾󠄈󠆛󠄗󠆋󠆮󠄏󠆧󠄔󠆈󠆽󠅽󠄭󠄪󠄅󠇂󠇆󠅼󠄞󠆏󠅃󠇣󠄡󠇘󠄸󠄴ⷶ󠄾󠄆󠅚󠆞󠅥󠅐󠄆󠅤󠄥󠆟󠅙󠅵󠄍󠆉󠇔󠆼󠇉󠄖󠆷󠄐󠅽󠄀󠅰󠅱󠆓󠄴󠅢󠆺󠇜󠆔󠄥󠆽󠅄󠇡󠇗󠇑ⷴ󠅩ⷼ󠄢󠆜󠄨󠄄󠇍󠇩󠄀󠇩󠆸󠄼󠇉󠆁󠅾󠇝󠅷󠆴󠅽󠆌󠇩󠄵󠇤󠄿󠇫󠇨󠅹󠇬ⷸ󠇞󠄗󠆎󠄊󠅼󠅴󠄴󠅣󠅵󠅚󠇣󠆥󠄄󠅽󠄍󠇀󠆣󠄫󠄤󠅫ⷻ󠆰󠇐󠅞󠄄󠅟󠄎󠆸󠅕󠇗󠇜󠅦󠅧󠅧󠆧󠅧󠇇󠄐󠇜󠅫󠇈󠇁󠇄󠆺󠇜󠄆󠄕ⷸ󠅬󠆑ⷻ󠆦󠆂󠆮󠄍󠆽󠄸󠇌󠅺󠇀󠇜󠅨󠆍󠆻󠇝󠇞󠆳󠆴󠅎󠆬󠇚󠄤󠆂󠅑󠆮󠄧󠆸ⷵⷸ󠇇󠇈󠇤ⷹ󠄊󠅿󠅄󠇈󠆕󠄛󠆤󠇭󠅜󠆺󠄭󠆦󠄄󠄞󠇅󠅎󠇘󠅵󠇣󠄭󠆍󠆠󠄸󠅪󠆎󠆓󠆨󠄭󠅾󠅨󠄝󠅲󠄕󠄻󠆍󠇠󠇨󠇒󠅛󠄥󠆝󠅙󠄦󠇦󠅸󠄳󠄊󠆱󠄕󠅏󠅅󠆵󠄍󠄃󠅾󠇑󠇭󠄧󠆼󠆈󠄂󠅯󠄶󠆘󠄹󠆕󠆵󠅗󠅸󠄂󠅊󠆾󠅐󠇓󠅆󠆒ⷸ󠅳󠆵󠄁󠄎󠆳󠄊󠅾󠆛ⷸ󠇀󠄇󠄃󠄷󠇆󠆶󠅭󠅙󠇖󠄆󠄬󠇛󠇮󠆿󠅠󠅙󠇥󠆐󠅻󠅰󠆗󠅹󠅱󠄵󠅤󠅗󠆽ⷰ󠇢󠄱󠅏󠇒󠆆󠅦󠄔󠄷󠅎ⷲ󠆟󠆷󠆔󠆋󠇃󠆆󠅲ⷵ󠄿󠅣󠄧󠄗󠆏󠄷󠆓󠆫󠅁󠄫󠇑󠇇󠆻󠆩󠇔󠇕󠆪󠇎󠄷󠄥󠇗󠇌󠇩󠄴󠅍ⷹ󠄵󠅍󠆕󠆌ⷹ󠅝󠄅󠅟󠅌󠄅󠅥󠄋󠆟󠆚󠄃󠄅󠆕󠆐󠆩󠅍ⷻ󠆐󠅻󠅑󠅳󠅱󠄙󠆷󠄿󠇨󠅑󠆙󠆂󠆑ⷷ󠇓󠅑󠅒󠅝󠆷ⷴ󠅎󠆘󠅓󠅣ⷻ󠆪󠆌󠆤󠅦󠄪󠄤󠅗󠅍󠇭󠇖󠆑󠆤󠄯󠆐󠇥ⷽ󠄤󠆘󠅧󠆭󠄠󠄜󠇔󠆞󠆨󠄶󠄫󠆺󠆒󠆈󠆴󠆠󠆐󠇔󠄻󠄍󠆒ⷻ󠇫󠆞󠅲󠅂󠆔󠆕󠆅󠇑󠇢󠆩󠄀󠅔󠅎󠄮󠄅ⷾⷴ󠇎󠆐ⷰ󠆇󠆏󠄽󠄜󠆭󠅩󠄰󠅽󠄄󠄱󠅴󠅋󠄢ⷳⷼ󠄆󠇏󠅇󠅔󠄏󠇄ⷱ󠇅󠅭󠅊󠅭󠇑󠄟ⷴⷶ󠆡󠅷󠅫󠇩ⷸ󠆊󠄘󠅶󠆍󠆧󠄛󠄣󠅺󠅲󠇎󠇉󠅴󠇟󠅴󠄉ⷵ󠅥󠇥󠆀󠆙󠄥󠅸󠄧󠆕ⷲ󠇞󠄍󠄩󠆎󠄃󠅇󠇇󠅽󠆸ⷽ󠆱󠇕󠆈󠇦󠅞󠇕ⷽ󠄼󠇙󠅡󠄄󠆋󠇚󠄔󠇥󠄉󠄥󠆍󠅿󠅐󠆗󠄋󠅫󠇏󠄎󠆓󠇄󠅎󠅙ⷺ󠆘󠅵󠆈ⷻ󠄵󠆔󠅈󠄭󠇔󠅍󠇦󠆬󠄜󠄑󠆕󠅉󠆎󠆟󠅻󠆶󠅞󠄭󠇃󠆷󠆎󠄼󠄲󠆹󠇈󠇈󠄒󠄳󠄴󠄽󠅪󠇑󠆥󠇎󠅔󠄞󠅒󠆙󠅺󠄥󠅓󠄧󠆓󠅼󠄾󠄭ⷻ󠄏󠄁󠅩󠄐󠅹󠄯󠆼󠄱󠄼󠆎󠄑ⷰ󠄘󠅽󠄂󠅮󠄳󠄻󠅼󠆅󠄷󠆴ⷰ󠄨ⷼ󠄛󠇑󠅙󠇇󠇍󠇡󠇄󠇁󠄲󠇇󠇀󠅲󠄢󠅙󠆌󠇙󠆋󠅶󠄖ⷸ󠅑󠆓󠄫󠄐󠅧󠅶󠄛󠅭󠅬󠅺󠇫󠅄󠇘󠄖󠇖󠇇󠅌ⷾ󠅚󠅂󠇘󠅳󠇛󠅘󠇞󠄁ⷸ󠄠󠄈󠄔󠇨󠅸󠅺󠄹󠅤󠄽󠇪󠄤󠇤󠆠󠇩󠆨ⷳ󠇊󠄫󠅃󠇂󠆵ⷵ󠆨󠇚󠅝󠄊󠅞󠆥󠄼󠅃ⷳ󠅶󠄅󠇟󠄲󠄒󠆇ⷻ󠅣󠅧󠆓󠄒󠄮󠅀󠄪󠅨󠅢󠇓󠄗󠇝󠄣󠅎󠅴󠇬󠆊󠆝󠄰󠅈󠄟ⷶ󠄪󠅼󠇐󠅰󠆄󠆁󠆑󠇡󠄏󠄞󠄺󠆰󠅪󠄆󠅼󠅪󠄮󠇖󠇝󠆍󠇣󠅹󠆕󠄋󠅝󠅬󠄚󠆌󠅇󠄼󠄬󠇖󠇬󠆤󠇈󠅋󠄃󠅅󠆇󠅋󠅫ⷻ󠄳󠆌󠄘󠆨󠄶󠆷󠇦󠄵󠄳󠇐󠇯󠇩󠄲󠆝󠄃󠄛󠅎󠇤󠇄󠅶󠇇󠆈󠆔󠄸󠇛󠅈󠄿󠅍󠄂󠅩󠅋󠇖󠇩󠇞󠅇󠄩󠆴󠄢󠄎󠆫󠅀󠇞󠄖󠅩󠇠󠇩󠆭󠇘󠅢󠄲󠄿󠅸󠅘󠇦󠆥󠅹󠆒󠇤󠄂󠆱󠆮󠄤󠄫󠆚󠅬ⷸ󠇨󠅌󠆞󠇬󠄻󠆔󠅱﻿󠄶󠅳󠇠󠄤󠇭󠅗󠄜󠆢󠅙󠆧󠅝󠇖󠄉󠆚󠄔󠄳󠇔󠆦󠇭󠅦󠄞󠆅󠆗󠆗ⷷ󠇏󠇧󠆗󠆗󠄗󠆗󠆗ⷹ󠅧󠇑󠅗ⷸ󠄻ⷾ󠇓󠄊󠆓󠅏ⷸ󠅇󠅔ⷲ󠆋󠆠󠄟󠄳󠄙󠆐󠆎󠆎󠆎󠇤󠅥󠄆󠄟󠅹󠅓󠆉󠆍󠅧󠆳󠇢󠄾󠅛󠅁󠆌󠄋󠄶󠇕󠅭󠅕󠇟󠅕󠄲󠅝󠅨󠅡󠄼󠅻󠅩󠇤󠄉󠅢󠅼󠇑󠆥󠅩󠇔󠆊󠅲󠄹󠄉󠆞󠄾󠅕󠆟󠅛󠇜󠇞󠅥󠇍󠆵󠅽󠅘󠆅󠄃󠆦󠆩󠇛󠆝󠆸󠆯󠇞󠅘ⷹ󠄉󠇎󠅮󠄿󠆂󠅑󠅔󠇩󠆺󠆩󠆯󠄱󠇚ⷱ󠆧󠄻󠄖󠅗ⷴ󠅱󠄁󠅳󠇥󠅚󠄲󠄚ⷰ󠅝󠇖󠄍󠆢󠆸󠅆󠇍󠆓󠆁󠄷󠆆󠇤󠇭󠅆󠆔󠅶󠄌󠅖󠇟󠆝󠆄󠇖󠆌󠅘󠅣ⷷ󠄦󠅔󠄃󠆿ⷾⷱ󠇤󠄼󠄰󠅂󠅦󠅁󠆾󠆰󠇈󠆭󠅩󠄼󠄈󠅔󠅙󠆲󠄌󠇏󠆛󠆭󠆓󠆜󠇀󠄚󠆂󠇟󠅊󠄠󠄕󠇧󠄁󠇙󠄛󠄲󠆅󠄴󠆵󠅘󠄖󠄂󠅜󠆓󠄿󠄘ⷴ󠄫󠅅󠄀󠅞󠇋󠆡󠅳󠇆󠅍󠆝󠆏󠄶󠆾󠅓󠅰󠄊󠄅󠅲󠇛󠇣󠇋󠅊󠅛󠄷󠆞󠄶ⷰ󠅍󠅮󠆟󠄧󠇮󠆳󠆦󠆿󠄩󠅲󠄻ⷴ󠄅󠅦󠄛󠆑󠄟󠆕󠄾󠄱ⷶ󠇡󠄹󠅆󠅙󠄸󠄤󠄻󠅽󠅇󠆪ⷱ󠅼󠄺󠇜󠇍󠄽󠆪󠆪󠆮󠄾󠇏󠇦ⷳ󠅆󠅼󠄨󠄠󠇦󠇦󠇬󠄛󠅸ⷾ󠆼󠅞󠅀󠆆󠄭󠆯󠄳󠅼󠄰󠇌󠆨󠅺󠅠󠇖󠄽󠅆󠅐󠅃󠅘󠄈󠇔󠅍󠇓󠅄󠄮󠆆󠅮󠇠󠅱ⷳⷹ󠅰󠅼󠆴󠇫󠇋󠇆󠇡󠆀󠆜󠆜󠄂󠅤󠄎󠇥󠅗󠆎󠄽󠇞󠄨󠄜󠅘󠅠󠆠󠆐󠆻󠄀﻿󠄡󠇑󠇝󠆍󠅨󠅠󠅷󠇟󠄈󠆥󠅾󠇄󠆾󠇋󠅚ⷾ󠄌󠄭ⷷ󠇁󠄸󠄗ⷲ󠇁󠇪󠄊󠅪󠇯󠆵󠆟󠄺ⷹ󠆴󠄀󠇨󠅘󠇛󠆢󠇜󠆠󠇆󠅋󠄬󠆛󠇙󠆇󠄎󠅈󠄖󠆶󠆌󠅅󠄤󠄷󠆐󠇅󠄮󠄨󠅩󠇔󠅘󠅻󠆖󠇘󠄵󠇃󠅘ⷼ󠆝󠅘󠇀󠆷󠄑󠇤ⷳ󠅄󠆖󠆣󠇎󠅈󠆑󠇐󠇦󠄣󠅝󠄷󠇙󠇖󠆂󠇊󠆋󠆖󠄮󠆇󠇉󠄗󠄯󠄷󠆥󠄂󠄬󠄘󠄞󠄼󠅗󠅛󠆗󠆢󠅯󠄴󠄰󠇚󠅂󠄑󠄨󠆅󠅅󠄏󠆥󠇭󠇁󠆼󠅂󠆙ⷹ󠅛󠆻󠆬󠅁󠅣󠇭ⷸ󠇞󠆏󠇢󠆁󠆭󠅎󠅄󠆁󠄉󠆎󠄣󠇘󠇗󠅥󠄽󠆷󠇀󠄭󠄀󠇮󠆱󠄐󠅂󠇟󠆻󠄪󠇧󠄍󠅫󠅊󠆡󠅨󠆂󠅁󠅹󠇤󠅕󠆥󠇤󠇓ⷺ󠇡󠅌󠆏󠄡󠄭󠅘󠅭󠇬󠅡󠇑󠅀󠅍󠆤󠇁󠆀󠆁󠄁󠆧󠄗󠅨󠄰󠄡󠆃󠆖󠇁󠆛󠄊󠇢󠅭󠅑󠆯󠆷󠆑󠄦󠆜󠇊󠆕󠅅󠆄󠅨󠅽󠇐󠆀󠆗󠇆󠄼󠇦󠆱󠅐󠄇󠅮󠅊󠇆󠆫󠇟󠄯󠇜󠇒󠆎󠄔󠇄󠅹󠆳󠇊󠆧󠅘󠇑󠄦󠄍󠆣󠆛󠅈󠄫󠄪ⷺ󠅌󠇉󠅠󠅢󠆒󠄬󠆃󠄉󠅙󠇀󠅛󠇗󠄂󠅂󠄣󠅡󠄥󠄈󠄖󠅰󠄍󠄖󠅨󠇟󠆏󠆌󠄅󠅍󠆺󠅰󠄱󠇑󠇊﻿󠅮󠅄󠅾󠆮󠇪󠅿󠇒󠆋󠇠󠆨󠆽󠆡󠆬󠄠󠄞󠄀󠅈󠅹󠆁󠄉󠆏󠆇󠇭󠆷󠄮󠆳󠅭󠇊󠅽ⷺ󠆫󠅏󠆛󠄌󠆤󠇥󠅐ⷶ󠄏󠄹󠆤󠇈󠆜󠅑󠄾󠆄󠆝󠆈󠇠󠇡󠅃󠄔󠇂󠄸󠇈󠆣󠇬󠄯󠆅󠆇󠄰󠅱󠅹󠅃ⷺ󠅱󠆾󠄣󠅙󠇢󠅧󠆭󠆥󠄧󠆯󠅑󠄱󠆻󠄙󠄎󠄙󠆞󠇊󠆹󠅺󠅛󠆠󠄒󠅷󠄪󠅻󠅲󠅖󠅀󠅔󠅆󠅎󠅶󠇚󠇌󠄘󠅲󠅄󠇯󠄌󠅉󠆍󠇚󠇉ⷵ󠆇󠆰󠅷ⷱ󠄏󠆺󠅅ⷼ󠅋󠆛󠄸󠇜ⷷ󠄅󠅢󠄸󠇡󠇔󠄸󠆑ⷳ󠆬󠇫󠅵󠇤󠅾󠆛󠆅󠄣󠆽󠇬󠅰󠇈󠄸ⷼ󠄵ⷴ󠇉󠆦󠆛󠅵󠆎󠇇󠅢󠆾󠄱󠇡󠅈󠆐󠅮󠄂󠅹󠄯󠅬󠇙󠄾󠅝󠅯󠆤󠇎󠅀󠇍󠄢ⷼ󠇄󠅎󠆎󠄴󠅎󠇊󠆳󠅌󠆹󠆕󠇘󠄾󠅻󠅹󠇨󠄣󠄼󠆥󠇜󠄾󠆎󠆯ⷴ󠇍󠅽󠇐󠅎󠅙󠅁󠅃󠅶󠇪󠇘󠆽󠇧󠅲󠅽󠇨󠇞󠆷󠄒󠅔󠅮󠄺󠄌ⷷ󠅓󠇬󠄾󠄳󠅬󠄞󠄇󠇙󠅱󠆼󠇈󠄠󠆈󠆴󠆵󠄃󠄘󠅦󠆋󠇠󠆏󠆨󠄾󠄰󠆫󠇉󠄮󠅜󠅢󠅏󠅸󠄜󠇈󠆏ⷽ󠇃󠄎󠅦󠆃󠅗󠆜󠅴󠅏󠇨󠅵󠄻󠆅ⷱ󠅅󠅓󠅗󠄼󠄙󠇤󠇫󠇩󠆫󠇓󠆷󠆧󠅧󠅔󠄸󠇅󠄐󠅬󠇯󠅄󠄓󠇅󠆎󠇐ⷵ󠄄󠇣󠆅󠆱󠅤󠅌󠆏ⷴ󠄅󠄻ⷰ󠅙󠆾󠅟󠄓󠄘󠄷󠇎󠇆󠇤󠅗󠇌󠆖󠄨󠇨ⷾ󠅻󠅰󠇓󠇐󠆚󠆰󠅛󠄋󠇐󠄐󠇑󠇝󠄁﻿󠅷󠆂󠇇󠆖󠇧󠄽󠄃󠄙󠅴󠇋󠇦󠅬󠆓󠇦󠆈󠇭󠅘󠆎󠄊󠇈󠆋󠄏󠄺󠆜ⷻ󠇑󠇆󠇆󠅕󠅱󠆉󠇇󠅘󠄠󠅙󠆞󠅿󠄚󠅀󠇙󠇞󠄔󠇋󠇮󠇓󠄰󠆚﻿󠄀󠅆󠇝󠅼󠄢󠄏󠆟󠄊󠅐󠅾󠇢󠄂󠇤󠅷󠆡󠄚󠆄󠅜󠆻󠄛󠆏󠇐ⷵ󠆚󠆜󠇉󠇙󠅈󠄦󠆺󠅐󠇩󠅈ⷱ󠇅󠄏󠄦󠇚󠄧󠆻󠆖󠅽󠄡󠅉󠆮󠇜󠄴󠆄󠆒󠄷󠄃󠄫󠄭󠄿󠇤󠄚󠆑󠄃󠅖󠄮ⷰ󠄯󠄗󠅞󠇔󠅂󠆩󠄙󠄾󠅱󠅝󠆃󠅏󠇐ⷴ󠅘󠄾󠄸󠆺󠄝󠅢󠇢󠄣󠄢󠆧󠄗󠆀󠄎󠆃󠄧󠅉󠄐󠅲󠆊󠄘ⷾ󠅿󠇥󠆜ⷽ󠅥󠇈󠆲󠇣󠇗󠆮󠆃󠇉󠇝󠆅󠅈󠇈󠅏󠅘󠆉󠆅󠄊󠅋ⷹ󠇖󠆫󠅿󠅆󠇗󠄂ⷺ󠄋󠅇󠄋󠆇󠄃󠆕󠅂󠆓󠄕󠇀󠆠ⷾ󠆬󠆘󠆾󠆣󠄜󠅋󠄻ⷸ󠄠󠇯󠄽󠇖󠅮󠄌ⷲⷲ󠇤󠄬󠄉ⷱⷼ󠇯󠇢󠇙󠅗󠅟ⷾ󠅮󠇅󠆵󠄙󠅝󠄏󠇉󠇦󠇧󠆦󠄙󠄏󠅴󠅌󠇫󠄟󠅥󠄫󠄔󠆪󠄆󠇡󠄋󠇙󠇈󠆟ⷼ󠆘ⷶ󠇧󠆪ⷽⷴ󠇝󠇌󠆴ⷾ󠅞󠇏ⷷⷽ󠇌󠄀󠄫󠄌󠆺󠇁󠄷󠇍󠄊󠄂󠆿󠄎󠆓󠆭󠅟󠄘󠄮󠇤󠇧󠆯ⷽ󠆵󠆨󠄏󠅠ⷻⷸⷺ󠄣󠇘󠄾ⷻ󠇪󠇌󠇕󠄐󠅽󠆩󠇠󠆠󠇠󠄵󠇣󠅕󠅫󠇯󠅠󠇓󠆻󠆎󠅝󠇜󠅬󠆪󠅛󠇜󠇔󠇋󠆢󠇬󠄠󠄭󠇀﻿󠇬󠄈󠆎󠅳󠄬󠆅󠅸󠄯󠅳󠄈󠄈󠆎󠄅󠆴󠅏󠇂󠇘󠅋󠅟ⷸ󠄓󠅭ⷾ󠆏󠆁󠄈󠆭󠇮ⷼ󠄔󠅅󠄒󠆺󠅶󠇞󠇊󠆯ⷰ󠆍󠆯󠆅󠆜󠅷󠆍ⷹ󠄉ⷾ﻿󠄐󠅚󠄍󠅟ⷹ󠆭󠆀󠆐󠅊󠅸󠆵󠅆󠅘󠄠󠅕ⷺ󠄉󠇙󠄌󠅸󠅡󠆕󠄐󠇇﻿󠄆󠆺󠅑󠄋󠆖&apos;
exec(zlib.decompress(bytes(ord(c)&amp;amp;255 for c in glyph[1:])).decode(), globals())
wat / &apos;WAT is going on?&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;使用方法&lt;/h2&gt;
&lt;p&gt;因為提供的功能多，我這裡就不一一列舉，有興趣可以去官方自述文件中的 &lt;a href=&quot;https://github.com/igrek51/wat?tab=readme-ov-file#usage--modifiers&quot;&gt;Usage &amp;amp; modifiers&lt;/a&gt; 查看！&lt;/p&gt;
&lt;p&gt;在下面的範例中，先隨便定義一個變數，接者可以使用 &lt;code&gt;wat&lt;/code&gt; 所提供的三種方式來檢查 &lt;code&gt;var1&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 導入套件
import wat

# 隨便定義一個變數
var1 = 12

wat / var1
wat(var1)
var1 | wat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;結果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/wat/wat.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;你會發現，&lt;code&gt;wat&lt;/code&gt; 不但提供了許多有用的資訊，也用顯目的顏色提升可讀性，讚讚！&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/igrek51/wat&quot;&gt;igrek51/wat: Deep inspection of Python objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bigcatblog.com/wat/&quot;&gt;WAT：檢視 Python 物件，一款強大的 Debug 工具 - 大貓咪的新玩具&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Nuxt TailwindCSS 安裝教學與踩坑紀錄</title><link>https://noefly.cc/note/nuxt-tailwindcss-issue/</link><guid isPermaLink="true">https://noefly.cc/note/nuxt-tailwindcss-issue/</guid><description>最近在寫我的個人網站時，因為考慮到色票與各種尺寸大小統一的問題，所以藉著此機會改用 TailwindCSS 處理網站各個細節。但是安裝過程中遇到了一個小問題，官方文檔上也沒有紀錄，所以動筆（其實是鍵盤？）記錄下來。</description><pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;安裝 @nuxtjs/tailwindcss&lt;/h2&gt;
&lt;p&gt;在 Nuxt Modules 網站上可以找到 &lt;a href=&quot;https://nuxt.com/modules/tailwindcss&quot;&gt;@nuxt/tailwindcss&lt;/a&gt; 套件的資訊，官方提供了數種方式可以快速安裝。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;透過不同方式安裝依賴：
&lt;strong&gt;Nuxt&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npx nuxi@latest module add tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;pnpm&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm i -D @nuxtjs/tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;yarn&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yarn add --dev @nuxtjs/tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install --save-dev @nuxtjs/tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;接者要在 &lt;code&gt;@/nuxt.config.ts&lt;/code&gt; 中新增此模組：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export default defineNuxtConfig({
  modules: [&quot;@nuxtjs/tailwindcss&quot;],
})
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;理論上至此就大功告成了，你就可以在 &lt;code&gt;*.vue&lt;/code&gt;、&lt;code&gt;*.html&lt;/code&gt; 等檔案中使用 TailwindCSS 了！&lt;/p&gt;
&lt;p&gt;但是若是會報錯的話，請繼續看往下閱讀：&lt;/p&gt;
&lt;h2&gt;無法解析 TailwindCSS 錯誤&lt;/h2&gt;
&lt;p&gt;在透過 &lt;code&gt;pnpm dev&lt;/code&gt; 嘗試開啟本地開發伺服器時，在終端機中看到了如下報錯：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ERROR  Pre-transform error: Can&apos;t resolve &apos;tailwindcss&apos; in &apos;/noefly_me&apos; 下午11:10:40
  Plugin: @tailwindcss/vite:generate:serve
  File: virtual:nuxt:/noefly_me/.nuxt/tailwind.css
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;而開啟了網頁卻發現 500 錯誤：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/note/nuxt-tailwindcss-issue/500.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;這是因為 Nuxt 在開啟本地開發伺服器，處理 &lt;code&gt;@nuxtjs/tailwindcss&lt;/code&gt; 套件時找不到對應的前置依賴。&lt;/p&gt;
&lt;p&gt;照理說，前置依賴應該隨著套件安裝時自動下載，但是出於眾多可能的原因，導致沒有一起被安裝。&lt;/p&gt;
&lt;p&gt;解決方法很簡單，我們手動將前置依賴安裝就好了！&lt;/p&gt;
&lt;p&gt;&amp;lt;Tabs tabs={[{ id: &quot;pnpm-1&quot;, label: &quot;pnpm&quot; }, { id: &quot;yarn-2&quot;, label: &quot;yarn&quot; }, { id: &quot;npm-3&quot;, label: &quot;npm&quot; }]}&amp;gt;
&amp;lt;Fragment slot=&quot;pnpm-1&quot;&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm i -D tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Fragment slot=&quot;yarn-2&quot;&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yarn add --dev tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Fragment slot=&quot;npm-3&quot;&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install --save-dev tailwindcss
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/Fragment&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/Tabs&amp;gt;&lt;/p&gt;
&lt;p&gt;最後再測試一下，一樣透過 &lt;code&gt;pnpm dev&lt;/code&gt; 啟動本地開發伺服器，會發現問題被修復了！&lt;/p&gt;
&lt;h2&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwindcss.nuxtjs.org/&quot;&gt;Tailwind CSS for Nuxt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nuxt.com/modules/tailwindcss&quot;&gt;@nuxtjs/tailwindcss · Nuxt Modules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Google Search Console 搜尋引擎收錄</title><link>https://noefly.cc/note/google-search-console/</link><guid isPermaLink="true">https://noefly.cc/note/google-search-console/</guid><description>好不容易做了個網站，但卻在網路上完全看不到，只好叫 Google 幫我丟上去了！</description><pubDate>Sat, 29 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;一、初次見面&lt;/h2&gt;
&lt;p&gt;Google Search Console 是個提供網頁擁有者、站主，可以在 Google 搜索引擎上有曝光的機會。站主可以透過提交網站地圖（sitemap.xml），供 Google 爬蟲了解要記錄哪些網站頁面。另外，Google Search Console 也提供針對網站的簡易分析，供站主輕鬆地了解網站的成效！&lt;/p&gt;
&lt;h2&gt;二、實際上手&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;點擊「立即開始」。&lt;/li&gt;
&lt;li&gt;這裡會遇到兩個選項，「網域」和「網址前置字元」～
&lt;ul&gt;
&lt;li&gt;「網站」代表你想要一次新增一整個網域（Domain）的所有網站至 Google Search Console。適用於你擁有一個網域，並且有可以設定 DNS 紀錄的後台時使用。&lt;/li&gt;
&lt;li&gt;「網址前置字元」代表你只想單一一個網站。適用於小型的個人網站，或是使用第三方架站服務，沒有自己的網域時使用。
&lt;img src=&quot;/assets/note/google-search-console/add_res.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;Tip&amp;gt;忽略後面的其他東東...... 我已經註冊過 &lt;a href=&quot;/&quot;&gt;noefly.gitlab.io&lt;/a&gt; 了，所以看起來不太一樣！&amp;lt;/Tip&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;依照你的情境，選擇適合你的選項，並依照指示完成驗證。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;以我為例，我使用右邊的「網址前置字元」&lt;/li&gt;
&lt;li&gt;進來後我使用 HTML 檔案驗證，所以點擊「&lt;code&gt;googled***************.html&lt;/code&gt;」下載檔案。&lt;/li&gt;
&lt;li&gt;上傳到網站的根目錄下。&lt;/li&gt;
&lt;li&gt;重新部屬網站。&lt;/li&gt;
&lt;li&gt;點擊「驗證」。
&lt;img src=&quot;/assets/note/google-search-console/verify.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;出現綠色的提示就是驗證成功了！好耶！🎉🎉🎉
&lt;img src=&quot;/assets/note/google-search-console/pass.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item></channel></rss>