<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>深藏若虛</title>
  <subtitle>Articles, notes, and updates from 深藏若虛</subtitle>
  <link href="https://fntsr.tw/atom.xml" rel="self" />
  <link href="https://fntsr.tw/" />
  <updated>2026-02-24T16:00:00.000Z</updated>
  <id>https://fntsr.tw/</id>
  <language>zh-Hant</language>
  <entry>
    <title>世紀帝國</title>
    <link href="https://fntsr.tw/moc/aoe/" />
    <id>https://fntsr.tw/moc/aoe/</id>
    <updated>2026-02-24T16:00:00.000Z</updated>
    <published>2026-02-24T16:00:00.000Z</published>
    <summary>世紀帝國系列文章索引，包含翻譯、RMSG、模組與雜項筆記。</summary>
<content type="html">&lt;p&gt;這篇是世紀帝國系列文章的索引頁，方便集中瀏覽。&lt;/p&gt;
&lt;h2 id=&quot;翻譯與名詞&quot;&gt;翻譯與名詞&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-chinese-translation-of-civilizations/&quot;&gt;世紀帝國 II 系列：各文明名稱翻譯對照表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-chinese-translation-of-common-buildings/&quot;&gt;世紀帝國 II 系列：通用建築翻譯對照表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-chinese-translation-of-units-and-technology-of-economic-building/&quot;&gt;世紀帝國 II 系列：經濟建築通用單位與科技翻譯對照表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-chinese-translation-of-units-and-technology-of-military-building/&quot;&gt;世紀帝國 II 系列：軍事建築通用單位與科技翻譯對照表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-chinese-translation-of-unique-units-and-technology-of-civilizations/&quot;&gt;世紀帝國 II 系列：各文明特有建築、單位與科技翻譯對照表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-barracks-units-translation/&quot;&gt;世紀帝國 II 系列：軍營單位翻譯探討&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-terms/&quot;&gt;世紀帝國 II 系列：術語、名詞解釋&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;隨機地圖腳本rmsg&quot;&gt;隨機地圖腳本（RMSG）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-before-translate-random-map-scripting-guide/&quot;&gt;世紀帝國 II 系列：在翻譯《隨機地圖腳本指南》之前&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-random-map-scripting-guide-introduction/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》緒論&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-annotation-of-random-map-scripting-guide-translation/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》翻譯說明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-rmsg-ch-1-language-reference/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》CH1 語言&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-rmsg-ch-1-1-scheme-of-a-rms/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》CH1.1 腳本參考範本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-rmsg-ch-1-2-1-player-setup-section/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》CH1.2.1 &amp;#x3C;PLAYER_SETUP&gt; 章節&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;模組與實作&quot;&gt;模組與實作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-mod-civilizations-sorting-by-dlc/&quot;&gt;世紀帝國 II 系列：文明選單分類排序模組&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-mod-english-room-name-in-chinese-ui/&quot;&gt;世紀帝國 II 系列：將中文介面下預設房間名稱改回英文&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;其他&quot;&gt;其他&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-time-of-upgrade-ages/&quot;&gt;世紀帝國 II 系列：時代升級所需時間&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/articles/aoe-ii-awful-patch-4-4/&quot;&gt;世紀帝國 II 系列：HD 4.4 Patch 目前已知問題&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="aoe" />
    <category term="moc" />
  </entry>
  <entry>
    <title>敏捷開發</title>
    <link href="https://fntsr.tw/moc/agile-development/" />
    <id>https://fntsr.tw/moc/agile-development/</id>
    <updated>2026-02-07T16:00:00.000Z</updated>
    <published>2026-02-07T16:00:00.000Z</published>
<content type="html">&lt;h1 id=&quot;agile-development&quot;&gt;Agile Development&lt;/h1&gt;
&lt;p&gt;這是一個 MoC（Map of Content）頁面，整理與敏捷開發相關的內容。&lt;/p&gt;
&lt;h2 id=&quot;建議閱讀&quot;&gt;建議閱讀&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/notes/manifesto-for-agile-software-development&quot;&gt;敏捷宣言&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/notes/scrum-3-pillars&quot;&gt;Scrum 三大支柱&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/notes/agile-estimation&quot;&gt;敏捷估算&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;延伸主題&quot;&gt;延伸主題&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/notes/cynefin-framework&quot;&gt;Cynefin Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/notes/estimation-mapping&quot;&gt;Estimation Mapping&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="agile" />
    <category term="moc" />
  </entry>
  <entry>
    <title>將靜態網站空間從 GitHub 搬移到 Netlify</title>
    <link href="https://fntsr.tw/announce/migrate-from-github-to-netlify/" />
    <id>https://fntsr.tw/announce/migrate-from-github-to-netlify/</id>
    <updated>2023-08-08T04:13:44.872Z</updated>
    <published>2023-08-08T05:01:19.238Z</published>
<content type="html">&lt;p&gt;我將放置 Nuxt Content 產出物的靜態網站空間從 GitHub Pages 搬移到 Netlify。&lt;/p&gt;
&lt;p&gt;之前就有耳聞 Netlify 這樣的靜態空間，相較於 GitHub Pages 原本就只是提給開源專案一個簡單的空間去呈現說明，Netlify 會對靜態網站架設提供比較多的工具與支援，這也是我想要嘗試的原因。（僅管許多進階功能都還是得另外付費啦 QQ）&lt;/p&gt;
&lt;p&gt;過程中花了點時間學習與研究 GitHub Actions 與 Netlify，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何透過 GitHub Actions 自動建置與部署到 GitHub Pages&lt;/li&gt;
&lt;li&gt;承上，尤其是我的部落格架構中，內文與程式是分開的，所以在建置過程中得另外 clone 內文的專案。&lt;/li&gt;
&lt;li&gt;如何透過 GitHub Actions 自動部署到 GitHub Pages。&lt;/li&gt;
&lt;li&gt;承上，也因為我是要分別部署到兩個空間，中間如何藉由 artifacts 傳遞建置好的檔案給部署到 Netlify 的 job 使用也是種學習。&lt;/li&gt;
&lt;li&gt;Netlify 可以設置 bare domain，但須搭配 CNAME flattening，所幸原本託管網域的 Cloudflare 有支援。&lt;/li&gt;
&lt;li&gt;Netlify 部署的 Actions，無法獲取期 outputs 參數，後來 debug 後發現應該是 composite actions 有改過設定檔的 scheme 導致，這部分花了不少時間在除錯與實驗，最後也發了一個 PR 給原作者。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些成果我會在日後寫成筆記或文章。&lt;/p&gt;
&lt;p&gt;接下來的時間，我會開始充實部落格的文章，藉由充分使用這個新的系統，來逐步改善整體的寫作與閱讀體驗。&lt;/p&gt;
&lt;p&gt;啊，對了，也祝天下所有成家的男性們，父親節快樂。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>PPV 人生經營系統</title>
    <link href="https://fntsr.tw/notes/ppv-life-operation-system/" />
    <id>https://fntsr.tw/notes/ppv-life-operation-system/</id>
    <updated>2023-06-20T18:00:48.000Z</updated>
    <published>2023-06-20T18:00:43.000Z</published>
<content type="html">&lt;p&gt;我第一次知道 PPV 是觀看 Cassie 的 Youtube 影片「&lt;a href=&quot;https://www.youtube.com/watch?v=2qLrIp1YGUQ&quot;&gt;Notion人生經營系統 (PPV) 介紹&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」，覺得挺有意思，就開始與既有的 &lt;a href=&quot;/notes/para-method&quot;&gt;PARA 分類架構&lt;/a&gt;與子彈筆記整合，遂逐漸成為目前的系統。&lt;/p&gt;
&lt;p&gt;PPV 系統是由 August Bradley 創立，可以觀看他介紹此系統的 Youtube 影片「&lt;a href=&quot;https://www.youtube.com/watch?v=d93SGaf82OM&amp;#x26;list=PLAl0gPKnL3V8s7dPXoo07mYnuErhWVk8b&quot;&gt;Intro &amp;#x26; Overview of Pillars, Pipelines &amp;#x26; Vaults – Notion Life Operating System&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」。這個系統的目標是能每天都能聚焦在要做的事上面（Focus），且持續與目標或期望的自己對齊、持續推薦（Alignment），並將這些經驗與持續獲得的知識建立一個讓我們能取用的知識庫（Knowledge）。&lt;/p&gt;
&lt;p&gt;PPV 系統架構如其名，分別是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pillars（支柱）&lt;/li&gt;
&lt;li&gt;Pipelines（行動渠道）&lt;/li&gt;
&lt;li&gt;Vaults（知識庫)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三者的關係如下圖（截自  August Bradley 的 Youtube）：&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/image-20230621-012820.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/image-20230621-012820.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;在人生中，總有幾個面向是想持續推進的，這些面向就像是一個個支柱（Pillar），撐著我們往期望的未來與想成為的模樣前進，像是個人成長（Growth）、家庭與生活（Home/Life）、事業（Business）等。&lt;/p&gt;
&lt;p&gt;支柱（Pillar）將人生分成好幾個區塊，每個支柱又分為不斷推進的行動渠道（Pipeline）以及與其相關的知識庫（Vault)，這兩者會持續的交互，在行動下累積知識，在拓展的知識下做出更好的決策與行動，並且透過定期檢視（Cycles）確保我們是持續往目標前進的。&lt;/p&gt;
&lt;p&gt;每個 Pillar 的 Pipeline 又分為以下幾類的資料庫：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;有價值的目標（Value Goals）&lt;/li&gt;
&lt;li&gt;目標的關鍵成效（Goal Outcomes）&lt;/li&gt;
&lt;li&gt;專案（Projects）&lt;/li&gt;
&lt;li&gt;行動事項（Action Items / Tasks）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其 Vault 則分為：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多媒體知識庫（Media Vault）&lt;/li&gt;
&lt;li&gt;課程與培訓知識庫（Courses &amp;#x26; Training Vault）&lt;/li&gt;
&lt;li&gt;筆記與靈感知識庫（Notes &amp;#x26; Ideas Vault）&lt;/li&gt;
&lt;li&gt;工具與技巧知識庫（Tools &amp;#x26; Skill Vault）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 Pipeline 部分，會先在有價值的目標（Value Goals）中，透過自己在這個支柱中想要達到的成就、成為的形象、期望看到的景象去設定目標。這些目標通常是抽象的，於是要藉由 SMART 原則訂定目標的關鍵成效（Goal Outcomes），當達到這個成效時，也就代表目標是達成的。接著就可以思考可以做什麼事情，讓現況更接近關鍵成效，這些事情就會是一個個專案（Projects），其中則是一個個的行動事項（Action Items）。&lt;/p&gt;
&lt;p&gt;這個概念其實在產品開發很常見，每個產品都會有個 Vission 與 Mission，然後會訂定每年想要達到的關鍵指標，為了達到這些指標會訂出策略，然後每個策略都會有要做的事情。&lt;/p&gt;
&lt;p&gt;在 Vault 的部分，我想每個人有自己習慣的知識管理架構，倒不一定限定這樣分類。但對於這樣的分類，我倒是有些觀點：多媒體知識庫能提升廣度、課程與培訓知識庫則是增加深度、筆記與靈感是自己的沈澱、工具與技巧則是在這個 Pillar 中的磨刀石（斧頭與砍樹的故事）。&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>Esther Derby - Leaders at All Levels</title>
    <link href="https://fntsr.tw/literatures/agile-summit-2023-esther-leader-at-all-levels/" />
    <id>https://fntsr.tw/literatures/agile-summit-2023-esther-leader-at-all-levels/</id>
    <updated>2023-06-20T08:08:38.000Z</updated>
    <published>2023-06-20T08:08:43.000Z</published>
<content type="html">&lt;p&gt;這是 &lt;a href=&quot;/people/esther-derby&quot;&gt;Esther Derby&lt;/a&gt; 在 &lt;a href=&quot;/notes/agile-summit-2023&quot;&gt;Agile Summit 2023&lt;/a&gt; 分享的主題。&lt;/p&gt;
&lt;p&gt;這個議程對我來說是 mindset 上的收穫，我特別喜歡 Context 的鑽石模型，隔日與同事閒聊時，越聊越與工作上的情境結合。界線的概念也讓我當頭棒喝，界線變來變去的危害，以及界線是觸發對話而不是高牆的概念，都讓我有種頓悟的感覺。&lt;/p&gt;
&lt;p&gt;本文主要作為紀錄一些關鍵字的筆記，能讓我、或是有些參與者能夠回憶起，當然也參雜了一些我的想法與觀點。日後有機會再針對有感的部分寫成文章吧！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;領導力是塑造一個讓每個人能夠做出創意的環境
&lt;ul&gt;
&lt;li&gt;“Leadership is the ability to enhance the  environments so that everyone becomes empowered to contribute creatively…”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Context—Day-to-Day 鑽石模型
&lt;ul&gt;
&lt;li&gt;上面倒三角是脈絡（Context），下面三角型是日常工作（實踐）所需專業（能力與經驗）&lt;/li&gt;
&lt;li&gt;越資深的人有越多脈絡，較資淺的人相對少&lt;/li&gt;
&lt;li&gt;管理層、領導者、與客戶接觸者有脈絡，做事的人有專業&lt;/li&gt;
&lt;li&gt;讓脈絡與實踐重疊的部分就是 Diamond&lt;/li&gt;
&lt;li&gt;讓中間重疊的 Diamond 擴大&lt;/li&gt;
&lt;li&gt;當人數超過 20 人時，就會開始分歧化（bifurcate）&lt;/li&gt;
&lt;li&gt;想到幫助擴大的案例：
&lt;ul&gt;
&lt;li&gt;Product Backlog Refinement&lt;/li&gt;
&lt;li&gt;Double Link Circle Meeting&lt;/li&gt;
&lt;li&gt;Department Meeting&lt;/li&gt;
&lt;li&gt;Roadmap&lt;/li&gt;
&lt;li&gt;PO 與 Developer 之間；主管與成員之間；資深成員與新人之間&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.facebook.com/tomasli/posts/pfbid0r9t5Ct2TuissQQ689AXeLDVKdkeVBFD7wCowB8i5H3BtgiD3wFabfTCsxRMkig6ml&quot;&gt;李境展 - 企業組織中的鑽石 指的是：背景知識（contextual knowledge）和前線知識（Front-line knowledge）的重疊範圍的知識。 | Facebook&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;讓小到舉凡只是「覺得怪怪」的聲音也能夠出來
&lt;ul&gt;
&lt;li&gt;知易行難的困境：人際風險、階級、被質問數據（但有時只是直覺）&lt;/li&gt;
&lt;li&gt;一個作家講的故事：希臘雕塑測定是不是古物，數據顯示是，但有人覺得怪怪的，最後是發現不是，因為手彎曲的手法不是那個時代會有的風格。
&lt;ul&gt;
&lt;li&gt;數據能佐證，也能欺騙&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;老奶奶搬冰箱卡住門與孫子想上廁所、最後點出書櫃後有門的故事
&lt;ul&gt;
&lt;li&gt;New Comer 擁有還未被現況僵化的思維&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果問大老闆們，如果事情有意外，你希望什麼時候知道？多數人都會希望是立刻、馬上。
&lt;ul&gt;
&lt;li&gt;如果是這樣，那又為甚麼總是要用數據去挑戰？而不是幫助他們說出來？&lt;/li&gt;
&lt;li&gt;知道情況有意外時，會有情緒。但必須跟夥伴說，我不是我不是對你不高興，而是對這個情況不高興。
&lt;ul&gt;
&lt;li&gt;也讓我聯想：領導者可以有情緒，但要控制在對的地方去顯現。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;界線
&lt;ul&gt;
&lt;li&gt;鄰居為狗設置的隱形圍欄沒有埋在地下，被風吹來吹去，導致小狗不清楚何時會被電，只敢在陽台的故事
&lt;ul&gt;
&lt;li&gt;不清楚的界線反而會讓相關人士畏手畏腳，難以成事。像是團隊就不會因此擔心、胡亂猜測，反而能夠好的直接做出決策。就像鄰居的小狗能在界線內自由發揮，而不是只敢保守的待在陽台。&lt;/li&gt;
&lt;li&gt;中階管理階層是最協助展開釐清界線的對話&lt;/li&gt;
&lt;li&gt;界線不是一個禁止橫越的高牆，而是觸發對話的邊線。e.g.
&lt;ul&gt;
&lt;li&gt;居家裝潢，我們訂了 30w 預算，但這個預算我們可能只能挖東牆補西牆去滿足需求。但若是只需要提高 20% 預算到 36w，卻可以讓現在的效果翻倍到你理想中的裝潢。你是希望設計師因為高於預算都不跟你說，還是會提出來跟你討論看看？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;相信自治能力，不要把有能力的人當小朋友（只在 Team Name、點心預算有自治能力？）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;階層的原意不是為了權力與管理，而是幫助而是幫助大家更好的工作
&lt;ul&gt;
&lt;li&gt;“The Original purpose of a hierarchy is always helping its originating subsystem do their job better” — Donella Meadows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;領導並不是仰賴階級，任何階層的任何人都可以是領導者
&lt;ul&gt;
&lt;li&gt;Leadership does not depend on hierarchy. There are leaders at all levels.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;有什麼是最小你可以幫助團隊每個人的事情？為此你需要什麼才能行動？
&lt;ul&gt;
&lt;li&gt;小到像是：我們在討論時，遇到鬼打牆。若是有人提出不如我們把我們的選項寫下來，透過這樣的方式揭露、讓我們發現選項並不是我們想的只有三個，而是有七個，那個人也是個領導者。&lt;/li&gt;
&lt;li&gt;不用不用主導權，只需要自己去做。&lt;/li&gt;
&lt;li&gt;這讓我想：去發現每個人自發領導的時刻，鼓勵他們。並嘗試讓沒有的人，有那個舞台。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="agile" />
    <category term="leadership" />
    <category term="talks" />
  </entry>
  <entry>
    <title>Fong - 拒絕再寫無效規格，來學學實例化需求！</title>
    <link href="https://fntsr.tw/literatures/agile-summit-2023-fong-sbe/" />
    <id>https://fntsr.tw/literatures/agile-summit-2023-fong-sbe/</id>
    <updated>2023-06-20T08:08:21.000Z</updated>
    <published>2023-06-20T08:08:21.000Z</published>
<content type="html">&lt;p&gt;這是 Fong 在 &lt;a href=&quot;/notes/agile-summit-2023&quot;&gt;Agile Summit 2023&lt;/a&gt; 分享的主題。&lt;/p&gt;
&lt;p&gt;Fong 的議程對我來說是 Specification by Example 一書的導讀，以前讀過幾次，但總無法理解透徹。經過幾年工作經驗、LeSS in Action 的洗禮，這次再透過 Fong 系統性地串聯，讓我恍然大悟。&lt;/p&gt;
&lt;p&gt;本文主要作為紀錄一些關鍵字的筆記，能讓我、或是有些參與者能夠回憶起，當然也參雜了一些我的想法與觀點。日後有機會再針對有感的部分寫成文章吧！&lt;/p&gt;
&lt;h2 id=&quot;用一個例子來解釋為什麼規格很難讀寫&quot;&gt;用一個例子來解釋為什麼規格很難讀/寫&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;姊姊大妹妹 4 歲，請問 20 年後他們差幾歲
&lt;ul&gt;
&lt;li&gt;時區&lt;/li&gt;
&lt;li&gt;生日過了嗎&lt;/li&gt;
&lt;li&gt;虛歲&lt;/li&gt;
&lt;li&gt;姊姊還活著嗎？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;規格是什麼&quot;&gt;規格是什麼&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;規格是傳遞知識的溝通工具，用於同步領域專家跟開發人員&lt;/li&gt;
&lt;li&gt;無效規格
&lt;ul&gt;
&lt;li&gt;特徵
&lt;ul&gt;
&lt;li&gt;範圍不明確 (Scope Creep)&lt;/li&gt;
&lt;li&gt;沒有脈絡（上下文）&lt;/li&gt;
&lt;li&gt;規則過於抽象&lt;/li&gt;
&lt;li&gt;內容組織混亂&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;原因：由於開發流程與成員心態導致
&lt;ul&gt;
&lt;li&gt;即時快速迭代可以更快發現錯誤，但不能避免錯誤
&lt;ul&gt;
&lt;li&gt;如果心態不正確，就算迭代再快，也只是從一大坨大邊，變成很多小顆的大便罷了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;團隊容易陷入究責的困境&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;有效的規格能幫助我們減少重工與錯誤，並正確解決客戶需求
&lt;ul&gt;
&lt;li&gt;而有效的規格必須是團隊協作下的共識&lt;/li&gt;
&lt;li&gt;如何取得共識？&lt;/li&gt;
&lt;li&gt;好的範例可以幫助我們了解規格&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;舉例是原始但有效的方式
&lt;ul&gt;
&lt;li&gt;協作討論 + 用舉例解釋規格 = 實例化需求規格&lt;/li&gt;
&lt;li&gt;Examples&lt;/li&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;li&gt;Requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;關鍵程序模式&quot;&gt;關鍵程序模式&lt;/h2&gt;
&lt;h3 id=&quot;從目標中獲取範圍&quot;&gt;從目標中獲取範圍&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;規格 v1
&lt;ul&gt;
&lt;li&gt;User Story&lt;/li&gt;
&lt;li&gt;AC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;確保可讀性，確保停在 High-Level，不要太快鑽進細節&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;協同制定需求規格舉例說明&quot;&gt;協同制定需求規格、舉例說明&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;多出原本期待時，可以拆出新的 User Story&lt;/li&gt;
&lt;li&gt;Example Mapping
&lt;ul&gt;
&lt;li&gt;探索未知的已知
&lt;ul&gt;
&lt;li&gt;Story&lt;/li&gt;
&lt;li&gt;Rule&lt;/li&gt;
&lt;li&gt;Example&lt;/li&gt;
&lt;li&gt;Question&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;規格 v1.1
&lt;ul&gt;
&lt;li&gt;User Story&lt;/li&gt;
&lt;li&gt;AC&lt;/li&gt;
&lt;li&gt;Details &amp;#x26; Example&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;提煉需求規格&quot;&gt;提煉需求規格&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;常見格式
&lt;ul&gt;
&lt;li&gt;條列式&lt;/li&gt;
&lt;li&gt;Gherkin: Given-When-Then (流程)&lt;/li&gt;
&lt;li&gt;表格&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;規格 v2.
&lt;ul&gt;
&lt;li&gt;User Story&lt;/li&gt;
&lt;li&gt;AC&lt;/li&gt;
&lt;li&gt;UI Details&lt;/li&gt;
&lt;li&gt;Details &amp;#x26; Example&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;不需改需求規格的前提下自動化驗證&quot;&gt;不需改需求規格的前提下自動化驗證&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;頻繁驗證&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;持續演變為說明文件系統&quot;&gt;持續演變為說明文件系統&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;把規格書當作權威文件，任何修改都應該回歸到規格書
&lt;ul&gt;
&lt;li&gt;Dev: Details &amp;#x26; Example -&gt; Use Case&lt;/li&gt;
&lt;li&gt;Q&amp;#x26;A: TestCAse 文件 + 自動化 E2E 測試&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;規格 Final Version
&lt;ul&gt;
&lt;li&gt;User Story &amp;#x26; Background：說明脈絡與原因&lt;/li&gt;
&lt;li&gt;Acceptance Criteria：範疇，修改頻率最低&lt;/li&gt;
&lt;li&gt;UI Details：設計相關資訊與設計稿&lt;/li&gt;
&lt;li&gt;Details &amp;#x26; Example：挑選 A.C. 較複雜的部分做實例解說&lt;/li&gt;
&lt;li&gt;Notes：考量點、Checklist、技術細節、決策歷史、補充資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;是否要演化成活文件&quot;&gt;是否要演化成活文件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;反思：有長期價值，但短期要付出很多學習與維護成本&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="specification-by-example" />
    <category term="agile" />
    <category term="testing" />
    <category term="ATDD" />
    <category term="TDD" />
    <category term="talks" />
  </entry>
  <entry>
    <title>敏捷高峰會 2023</title>
    <link href="https://fntsr.tw/notes/agile-summit-2023/" />
    <id>https://fntsr.tw/notes/agile-summit-2023/</id>
    <updated>2023-06-20T07:26:18.000Z</updated>
    <published>2023-06-20T07:26:18.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;https://agile.ithome.com.tw/&quot;&gt;Agile Summit 2023&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 是由 ACT! 台灣敏捷協會、AgileComminity.tw（台灣敏捷社群）、DevOps Taiwan、iThome 主辦的活動。&lt;/p&gt;
&lt;p&gt;我這次是以 Speaker 的身份出席，擔任年度變革引導者座談的對談人之一。也因為大會方希望讓工作坊的機會留給會眾，所以我主要是在議程與場外活動。&lt;/p&gt;
&lt;p&gt;我有參與到且讓我有特別收穫的議程是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/literatures/agile-summit-2023-esther-leader-at-all-levels&quot;&gt;Esther Derby - Leaders at All Levels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/literatures/agile-summit-2023-fong-sbe&quot;&gt;Fong - 拒絕再寫無效規格，來學學實例化需求！&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esther 的議程對我來說是 mindset 上的收穫，我特別喜歡 Context 的鑽石模型，隔日與同事閒聊時，越聊越與工作上的情境結合。界線的概念也讓我當頭棒喝，界線變來變去的危害，以及界線是觸發對話而不是高牆的概念，都讓我有種頓悟的感覺。&lt;/p&gt;
&lt;p&gt;Fong 的議程對我來說是 Specification by Example 一書的導讀，以前讀過幾次，但總無法理解透徹。經過幾年工作經驗、LeSS in Action 的洗禮，這次再透過 Fong 系統性地串聯，讓我恍然大悟。&lt;/p&gt;
&lt;p&gt;此次活動的所有議程如下：&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/AgileSummit2023-Sessions.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/AgileSummit2023-Sessions.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;另有雙軌的工作坊：&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/AgileSummit2023-Workshops.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/AgileSummit2023-Workshops.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;</content>
    <category term="agile-summit" />
    <category term="conference" />
    <category term="agile" />
    <category term="talks" />
  </entry>
  <entry>
    <title>PARA 分類架構</title>
    <link href="https://fntsr.tw/notes/para-method/" />
    <id>https://fntsr.tw/notes/para-method/</id>
    <updated>2023-06-12T14:23:15.000Z</updated>
    <published>2023-06-13T09:26:23.000Z</published>
<content type="html">&lt;h2 id=&quot;介紹&quot;&gt;介紹&lt;/h2&gt;
&lt;p&gt;PARA 一種知識分類架構，是依照可行動程度（Actionable）去區分爲下面四項，越上方的可行動程度越高：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Projects&lt;/li&gt;
&lt;li&gt;Areas of responsibility (Area)&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;li&gt;Archives&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我會用以下表格去釐清這四者的邊界：&lt;/p&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;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;Projects&lt;/td&gt;&lt;td&gt;目標導向&lt;/td&gt;&lt;td&gt;專注&lt;/td&gt;&lt;td&gt;有&lt;/td&gt;&lt;td&gt;有&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Area&lt;/td&gt;&lt;td&gt;與職責相關&lt;/td&gt;&lt;td&gt;長期關注&lt;/td&gt;&lt;td&gt;Ｘ&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Resources&lt;/td&gt;&lt;td&gt;興趣&lt;/td&gt;&lt;td&gt;偶爾&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Archives&lt;/td&gt;&lt;td&gt;留存&lt;/td&gt;&lt;td&gt;Ｘ&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;這個順序也是 PARA 這個詞的來源，也代表我要投注專注力的順序與程度。也透過 Projects 這個分類，我將可行動程度高的項目聚集在一起，讓我更能聚焦我要做什麼，進而去提高行動力。&lt;/p&gt;
&lt;h2 id=&quot;實踐&quot;&gt;實踐&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;在設定上&lt;/strong&gt;，我自己會把關注程度特別高、且時常關注的主題都訂在 Area，像是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⌨️ 資訊技術 Technical&lt;/li&gt;
&lt;li&gt;✏️  寫作 Writing&lt;/li&gt;
&lt;li&gt;🏈  敏捷開發 Agile Development&lt;/li&gt;
&lt;li&gt;🐳  公司 Company&lt;/li&gt;
&lt;li&gt;💬  引導 Facilitate&lt;/li&gt;
&lt;li&gt;📖  學習與生產力 Learn&lt;/li&gt;
&lt;li&gt;🧳  旅行 Travel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然後將 Area 中有特定目標與時限的範疇設定為 Project，像是在 ⌨️ 資訊技術 Technical 下面我可能會有以下 Projects：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✍️ Nuxt Blog 架設計畫&lt;/li&gt;
&lt;li&gt;📖《你所不知道的 JS》讀書計畫&lt;/li&gt;
&lt;li&gt;💯 在六月完成 JS 100 題挑戰&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然後把有興趣，但與工作無關或者就算不持續關注也不會影響的主題訂在 Resources，像是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🌀 防災 Disaster&lt;/li&gt;
&lt;li&gt;🏥 醫學 Medecine&lt;/li&gt;
&lt;li&gt;📦 麥塊 Minecraft&lt;/li&gt;
&lt;li&gt;🎮 遊戲 Games&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後將上述分類中，我已經不再關注或者已過時效性的主題放在 Archive 中留存，減少我在這些分類所需專注力與聚焦的成本。&lt;/p&gt;
&lt;p&gt;設定完成後，再按照最一開始的排序概念，成果會像是這樣：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Projects
&lt;ul&gt;
&lt;li&gt;✍️ Nuxt Blog 架設計畫&lt;/li&gt;
&lt;li&gt;📖《你所不知道的 JS》讀書計畫&lt;/li&gt;
&lt;li&gt;💯 在六月完成 JS 100 題挑戰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Area
&lt;ul&gt;
&lt;li&gt;⌨️ 資訊技術 Technical&lt;/li&gt;
&lt;li&gt;✏️  寫作 Writing&lt;/li&gt;
&lt;li&gt;🏈  敏捷開發 Agile Development&lt;/li&gt;
&lt;li&gt;🐳  公司 Company&lt;/li&gt;
&lt;li&gt;💬  引導 Facilitate&lt;/li&gt;
&lt;li&gt;📖  學習與生產力 Learn&lt;/li&gt;
&lt;li&gt;🧳  旅行 Travel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resources
&lt;ul&gt;
&lt;li&gt;🌀 防災 Disaster&lt;/li&gt;
&lt;li&gt;🏥 醫學 Medecine&lt;/li&gt;
&lt;li&gt;🎮 遊戲 Games&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Archived
&lt;ul&gt;
&lt;li&gt;🎫 前公司 OOOO&lt;/li&gt;
&lt;li&gt;📦 麥塊 Minecraft&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我聚焦 Projects 在執行計畫、任務，然後將所需的知識補充在 Area。平時若有看到我有興趣的資訊，則會搜集在 Resources。已經不想耗費我關注力的就封存在 Archived 資料夾中。&lt;/p&gt;
&lt;h2 id=&quot;參考&quot;&gt;參考&lt;/h2&gt;
&lt;p&gt;如果對 PARA 想了解更多，可以參照學習來源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法提出者 &lt;a href=&quot;/tiago-forte&quot;&gt;Tiago Forte&lt;/a&gt; 的〈&lt;a href=&quot;https://fortelabs.com/blog/para/&quot;&gt;The PARA Method: The Simple System for Organizing Your Digital Life in Seconds&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;〉&lt;/li&gt;
&lt;li&gt;也可以閱讀知乎中對上面文章的翻譯：&lt;a href=&quot;https://zhuanlan.zhihu.com/p/149610578&quot;&gt;PARA方法，一种通用个人信息管理系统&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;讓我了解到 PARA 的起點：&lt;a href=&quot;/%E6%9C%B1%E9%A8%8F&quot;&gt;朱騏&lt;/a&gt;的〈&lt;a href=&quot;https://medium.com/pm%E7%9A%84%E7%94%9F%E7%94%A2%E5%8A%9B%E5%B7%A5%E5%85%B7%E7%AE%B1/%E5%A6%82%E4%BD%95%E5%88%86%E9%A1%9E%E7%AD%86%E8%A8%98-e25c4cc39dba&quot;&gt;如何分類筆記？一套簡單又通用的分類架構 — PARA&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;〉&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也可以參考 &lt;a href=&quot;/notes/ppv-life-operation-system&quot;&gt;PPV 人生經營系統&lt;/a&gt;，這也是我現在搭配使用的方法。&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>數位花園</title>
    <link href="https://fntsr.tw/notes/digital-garden/" />
    <id>https://fntsr.tw/notes/digital-garden/</id>
    <updated>2023-05-02T20:02:31.000Z</updated>
    <published>2023-05-02T20:02:31.000Z</published>
<content type="html">&lt;p&gt;Digital Garden 如其名，就像是在網路上開闢一塊花園，將想法與知識的種子種植下去，可能只是一句話、一段文字。這些種子會隨著我們的學習不斷的的成長、更新，變成更完整的論述。&lt;/p&gt;
&lt;p&gt;每個種子都是獨一無二的，在這裡不像是 Blog 一樣按照時間軸去發表，而更重視的是內容之間的雙向連結形成的拓墣。裡面內容或許是不完美的，但仍樂於公開，並持續培育他們。它們是較為玩味、充滿個人想法、或是實驗性質的，就算別人或去的自己有種下相同的種子，也有可能長成不同樣貌的內容，就像沒有植物會完全長得相同，同一顆種子在不同環境中長大，也會展現其獨特性。&lt;/p&gt;
&lt;p&gt;透過這個花園，分享自己的學習，也幫助他人學習。裡面可能不只是文字，也包括各項圖片與多媒體，或是任何內容與知識的載體。&lt;/p&gt;
&lt;p&gt;我們會擁有這個花園的所有權，他不應該建立在任何內容平台，這些平台就像是私人別墅或是高樓大廈中的花園，難以與眾人分享，甚至有所高強隔離。&lt;/p&gt;
&lt;p&gt;樂於分享、勇於展現不完美、孜孜的使其持續成長，這就是 Digital Garden。&lt;/p&gt;
&lt;p&gt;而對我來說，Blog 就像是花店，將花園綻放的植物們經過搭配與組合後，變成美麗的花束，成為放在店內對外販售的作品。每個作品都有完成的時間，但不一定會再持續去栽培，隨著時間過去，當有些資訊過期後，這些花束也就會凋零。&lt;/p&gt;
&lt;p&gt;我想要的 Blog，應當是兩者合一。我可以在 Digital Garden 肆意的種植，並在覺得適當時，在 Blog 發表成文章，讀者們再經由我文章內的站內連結來到我的花園觀賞，再從一處處的花圃，經由雙向連結的步道，走向另一處我用心培育的花圃裡。&lt;/p&gt;</content>
    <category term="digital-garden" />
    <category term="knowledge" />
  </entry>
  <entry>
    <title>內容地圖</title>
    <link href="https://fntsr.tw/notes/map-of-contents/" />
    <id>https://fntsr.tw/notes/map-of-contents/</id>
    <updated>2023-05-02T20:02:31.000Z</updated>
    <published>2023-05-02T20:02:31.000Z</published>
<content type="html">&lt;p&gt;把某個主題相關的與筆記，透過連結的方式集中在一個索引筆記中去綜覽，這種筆記就稱為 Map of Contents。他讓我們不會迷失在筆記網路中，能更有一個全局的視角去看待，並且能夠快速想起相關的筆記。&lt;/p&gt;
&lt;p&gt;有別於資料夾，會困擾於筆記的歸類；有別於標籤，看不出同個標籤的筆記群中之間的關聯。MoC 能突破這些限制，只用主題的相關興趣建立一個筆記網路。同個筆記亦可出現在不同的 MoC 中，甚至 MoC 裡，也可以有另一個 MoC。它強化筆記的網路，增加更多關聯性。&lt;/p&gt;</content>
    <category term="knowledge" />
    <category term="moc" />
  </entry>
  <entry>
    <title>卡片盒筆記法</title>
    <link href="https://fntsr.tw/notes/zettelkasten/" />
    <id>https://fntsr.tw/notes/zettelkasten/</id>
    <updated>2023-05-02T20:02:31.000Z</updated>
    <published>2023-05-02T20:02:31.000Z</published>
<content type="html">&lt;p&gt;由 Niklas Luhmnn 創作的知識系統，可以透過 Sönke Ahrens 的&lt;a href=&quot;https://www.books.com.tw/products/0010922143&quot;&gt;《How to Take Smart Notes》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 一書進一步去認識。&lt;/p&gt;
&lt;p&gt;對我來說，是一個將各個知識以卡片為單位去建立，並加以編號、關聯的一個知識系統，進而形成一個知識網路。&lt;/p&gt;
&lt;p&gt;這個知識系統給我的啟發是可以將已經被他人結構化的知識群去拆解成一個個知識點，消化重組為自己的知識體系後，經過一段時間的醞釀，重組為新的結構化知識群分享出去。&lt;/p&gt;</content>
    <category term="zettelkasten" />
    <category term="knowledge" />
  </entry>
  <entry>
    <title>以 Digital Garden 之貌重新開張！</title>
    <link href="https://fntsr.tw/announce/re-opening-as-digital-garden/" />
    <id>https://fntsr.tw/announce/re-opening-as-digital-garden/</id>
    <updated>2023-05-02T03:18:00.000Z</updated>
    <published>2023-05-02T03:18:00.000Z</published>
<content type="html">&lt;p&gt;我從 2022 年初接觸到了 &lt;a href=&quot;/notes/zettelkasten&quot;&gt;卡片盒筆記法（Zettelkasten）&lt;/a&gt;和&lt;a href=&quot;/notes/digital-garden&quot;&gt;數位花園（Digital Garden）&lt;/a&gt;的概念，並一路實踐至今。在該年的 iThome 鐵人賽裡我也寫下了&lt;a href=&quot;https://ithelp.ithome.com.tw/users/20103676/ironman/5917&quot;&gt;《Blog 掛掉時在做什麼？有沒有空？可以來重建嗎？》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，由於工作繁忙，總算於今年（2023）五月二日藉由 Nuxt Content 架設起來。&lt;/p&gt;
&lt;p&gt;基本上我是希望能夠在 Obsidian 去寫作，並且幾近無痛的去在這裡建置成網站。所以我也實作了一個 WikiLink 的 Plugin，讓我的各個文章、筆記能夠互相串聯，成為一個知識網路。也為了在創作中，有適當的 Diagram 輔助，引入了 Mermaid 的程式碼上色與圖形渲染功能。加上透過 Nuxt Content 建立的以 Markdown 檔案為基底的內容管理系統，我想這個目標應該也算是達到了第一步吧！&lt;/p&gt;
&lt;p&gt;先以本篇紀念重新復站（天呀！原本的部落格都快停站一年了！），之後大概會將我從今年一月到現今斷斷續續開發這個網站的一些學習與歷程寫成各個筆記與文章和諸君分享吧！祝網站重生快樂，也當作是致贈我自己擔任全職 ScrumMaster 恰滿四年的一個祝賀禮吧！ =P&lt;/p&gt;</content>
    <category term="digital-garden" />
    <category term="knowledge" />
  </entry>
  <entry>
    <title>面對情緒</title>
    <link href="https://fntsr.tw/notes/face-to-emotions/" />
    <id>https://fntsr.tw/notes/face-to-emotions/</id>
    <updated>2021-12-05T02:26:17.000Z</updated>
    <published>2021-12-05T02:26:17.000Z</published>
<content type="html">&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/Pasted image 20230106011851.jpeg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/Pasted image 20230106011851.jpeg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;第一次在工作時介紹這概念的白板字跡&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;情緒沒有對錯，當下有這樣的感覺，就是當下會有的感覺&lt;/li&gt;
&lt;li&gt;對於他人的感覺，我們無須批判，可以嘗試同理自己在這樣的情況下，會是什麼感覺&lt;/li&gt;
&lt;li&gt;每個人都有濾鏡，不同濾鏡對同樣的資訊會有不同的解讀&lt;/li&gt;
&lt;li&gt;表達情緒，不是為了宣洩，而是讓彼此暸解是什麼原因讓我們各自有這些反應&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上四句是我在為團隊引導 Retro 時，預期會聊到情緒話題時，會先設置的 Ground Rule。這些概念主要是源自我與伴侶溝通時的領悟，加上深度匯談的學習，寫出的四段話。&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>國文課本選文的重點也可以拿來檢視使用者故事？！</title>
    <link href="https://fntsr.tw/articles/selections-principles-of-chinese-textbook-also-can-be-used-to-examine-user-stories/" />
    <id>https://fntsr.tw/articles/selections-principles-of-chinese-textbook-also-can-be-used-to-examine-user-stories/</id>
    <updated>2021-11-16T20:19:46.000Z</updated>
    <published>2021-11-16T20:19:46.000Z</published>
<content type="html">&lt;p&gt;今天和我們家 PO 們聊到使用者故事時，聊到需求最後應該都要連結到使用者，而盡量不要去寫出「As a PO, ….」、「As a company, ….」這樣的故事。&lt;/p&gt;
&lt;p&gt;但是有些需求對於使用者短期來說是難以感受到價值的。所以有個提問是：若是只看這個 Item 的範疇，使用者感受不到好處，縱然長遠對他來說是有好處的，但卻是叫久遠且隱性的一件事。那他對使用者來說不也是一個沒價值的 Item 嗎？使用者不就不會買單了嗎？這樣還要開發嗎？&lt;/p&gt;
&lt;p&gt;在他們討論時，我突然頓住了，因為我腦海就蹦出一個影片的畫面，卻一時講不出來，不過我認為是我最近看過的一個 Youtube 影片，找了找才發現是一個講國文課本怎麼選文的影片，咦？！&lt;/p&gt;
&lt;p&gt;這個影片是我最近看到台灣作家朱宥勳聊他參與出版社編輯國文課本時，他如何選文的標準。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;youtube-embed&quot;&gt;
  &lt;div class=&quot;youtube-embed-frame&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/A-wS3exVAmA&quot; title=&quot;國文課本可以刪掉蘇東坡嗎？好課文的三個標準 - YouTube&quot; loading=&quot;lazy&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;國文課本可以刪掉蘇東坡嗎？好課文的三個標準 - YouTube&lt;/figcaption&gt;
&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;影片提到國文課本選文可以用這一個前提、三個重點去檢核。我嘗試附上原概念，並把我腦海迸出他與使用者故事的連結寫出來。&lt;/p&gt;
&lt;h2 id=&quot;1-個前提&quot;&gt;&lt;strong&gt;1 個前提&lt;/strong&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我們在選的是課文，不是最強文學作品 70 篇，既然是課文，那就是工具，必須要讓學生讀了能夠吸收、有興趣，才會有用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我們今天做的是要賣給使用者的產品，不是你心中最完美的軟體。既然是產品，那就是服務，必須要讓使用者用了能夠輕易操作、有興趣，才會有用。不用去端一盤我們自己心中完美的需求清單給使用者，而是要根據使用的的需求端一個適合他們（市場）的產品出來&lt;/p&gt;
&lt;h2 id=&quot;3-個重點&quot;&gt;&lt;strong&gt;3 個重點&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;目的：你透過這篇文章，到底要教會學生什麼，也就是知識點
&lt;ul&gt;
&lt;li&gt;用我們的話來說，透過這個 Item，到底要帶給使用者什麼&lt;/li&gt;
&lt;li&gt;文中講的是知識點，換成我們的情境，就是「價值」&lt;/li&gt;
&lt;li&gt;有些價值會比較遠，使用者不一定能立即感受到，所以這時候效果就會很重要，如同影片中所說，用效果去救目的&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;效果：在知識點之外，學生讀過之後會產生什麼附帶的效應
&lt;ul&gt;
&lt;li&gt;我自己的解讀是影響、誘因與連結&lt;/li&gt;
&lt;li&gt;除了我們預期的價值外，這個 Item 還會帶來哪些影響&lt;/li&gt;
&lt;li&gt;我們希望的是好的影響，用我們的情境來說，就是有沒有能使用者能立即感受到的誘因（e.g. 有趣、鼓勵、成就….）、或是有沒有一些可以打到他的價值觀、文化的點&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;手段：這篇文章我選了，但放到學校裡面的時候，他有可能教的好嗎？
&lt;ul&gt;
&lt;li&gt;這個 Item 來得及在現有固定的時間下實作完嗎？&lt;/li&gt;
&lt;li&gt;這個 Item 是適合我這個產品當前的客群嗎？&lt;/li&gt;
&lt;li&gt;這個需求會帶給使用者太大的學習成本嗎？&lt;/li&gt;
&lt;li&gt;使用者體&lt;/li&gt;
&lt;li&gt;驗是否流暢、直覺？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;後話&quot;&gt;後話&lt;/h2&gt;
&lt;p&gt;我可以從國文課本要怎麼選文章跟使用者需求做連結也是滿奇耙的….&lt;/p&gt;</content>
    <category term="user-story" />
    <category term="requirement-management" />
  </entry>
  <entry>
    <title>macOS 風格的 Windows 鍵盤按鍵設定指南</title>
    <link href="https://fntsr.tw/articles/windows-shortcut-setting-guide-with-macOS-style/" />
    <id>https://fntsr.tw/articles/windows-shortcut-setting-guide-with-macOS-style/</id>
    <updated>2021-07-27T04:13:02.000Z</updated>
    <published>2021-07-27T04:13:02.000Z</published>
<content type="html">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;最近因為 Macbook Pro 送修，恰逢一個需要另一台電腦的空窗期，所以就買了一台迷你主機並且安裝 Windows，打算作為備援以及娛樂、遊戲機 (君不見我的 Steam 遊戲中一堆都是 Windows only TAT)。而從 macOS 切換到 Windows 時，最難以上手的應該就是鍵盤與按鍵的使用。我是一個以 macOS 習慣為主的使用者，所以自然是去思考怎麼讓 Windows 上的按鍵與 macOS 盡量保持一致囉！&lt;/p&gt;
&lt;p&gt;為了修改按鍵的配置，我們會需要使用 Microsoft 自行推出的好用工具 — PowerToys，此軟體除了修改按鍵對應外，還有擁有許多好用的功能，我們先不再這邊展開。&lt;/p&gt;
&lt;p&gt;到 PowerToys 的 GitHub 去下載最新的版本並且安裝：&lt;br&gt;
&lt;a href=&quot;https://github.com/microsoft/PowerToys/releases&quot;&gt;https://github.com/microsoft/PowerToys/releases&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;打開 PowerToys 並且來到鍵盤管理器，就可以去重新對應單個按鍵與組合鍵。以下提到的 Ctrl, Alt, Shift，統一是指改左邊的，在有覆蓋到真正需要的快捷鍵時，還有右邊的組合鍵可以使用。&lt;/p&gt;
&lt;h2 id=&quot;一般按鍵配置&quot;&gt;一般按鍵配置&lt;/h2&gt;
&lt;h3 id=&quot;單按鍵&quot;&gt;單按鍵&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;將「Caps Lock」對應為「Escape 」(在 macOS 因為沒有實體鍵盤的關係，已經習慣這樣使用)&lt;/li&gt;
&lt;li&gt;將「Alt」對應為「Ctrl」以切換視窗，以達到像 macOS 使用 command 鍵的手感&lt;/li&gt;
&lt;li&gt;&lt;del&gt;將「Ctrl」對應為「Alt」以切換視窗&lt;/del&gt; &lt;br&gt;
為了讓我在終端機上維持原本的手感，且 Alt 用途也都在下方組合鍵綁定在 Ctrl 上了，所以取消這個綁定。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;組合鍵--快捷鍵&quot;&gt;組合鍵 / 快捷鍵&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;將「Ctrl + Tab」對應為「Alt + Tab」以切換視窗&lt;/li&gt;
&lt;li&gt;將「Ctrl + `」對應為「Alt + Shift (left) + Tab」以反向切換視窗&lt;/li&gt;
&lt;li&gt;將「Ctrl + Q」對應為「Alt + F4」以關閉視窗&lt;/li&gt;
&lt;li&gt;將「Ctrl + Shift + Z」對應為「Ctrl + Y」以 Redo&lt;/li&gt;
&lt;li&gt;將「Ctrl + 左方向鍵」對應為「Home」以跳到行首&lt;/li&gt;
&lt;li&gt;將「Ctrl + 右方向鍵」對應為「End」以跳到行尾&lt;/li&gt;
&lt;li&gt;將「Win+ 左方向鍵」對應為「Ctrl + 左方向鍵」以跳到上一個單字&lt;/li&gt;
&lt;li&gt;將「Win + 右方向鍵」對應為「Ctrl + 右方向鍵」以跳到下一個單字&lt;/li&gt;
&lt;li&gt;將「Win + Shift + 左方向鍵」對應為「Ctrl + Shift + 左方向鍵」以選取到上一個單字&lt;/li&gt;
&lt;li&gt;將「Win + Shift + 右方向鍵」對應為「Ctrl + Shift + 右方向鍵」以選取到下一個單字&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;更改輸入法配置&quot;&gt;更改輸入法配置&lt;/h2&gt;
&lt;h3 id=&quot;輸入法&quot;&gt;輸入法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;對工具列的中文輸入法點擊右鍵，選取設定 → 到鍵盤指派 → 將 Shift 鍵去停用中文輸入法的中英切換 (如下圖一)&lt;/li&gt;
&lt;li&gt;設定→ 時間語言 → 語言 → 新增慣用語言「英文(美國)」，讓我們可以使用 Win + Space 去切換中英輸入。 (如下圖二)&lt;/li&gt;
&lt;li&gt;設定 → 裝置 → 輸入 → 進階鍵盤設定 → 將「覆寫預設輸入語言」改為「英文(美國)」(如下圖三)&lt;/li&gt;
&lt;li&gt;設定 → 裝置 → 輸入 → 進階鍵盤設定 → 輸入語言快捷鍵 → 停用所有快捷鍵，若是無法停用則改成平時不會使用的快捷鍵 (如下圖四)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-2.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-2.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-3.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-3.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-4.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/win-keyboard-setting-4.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;快捷鍵&quot;&gt;快捷鍵&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;將「Ctrl + Space」對應為「Win + Space」以切換不同語言的輸入法 (中英切換)&lt;/li&gt;
&lt;li&gt;將「Win + Space」對應為「Ctrl+ Space」以呼叫 PowerToys Run (as Spotligh)&lt;/li&gt;
&lt;li&gt;將「Ctrl + Shift + ,」對應為「Ctrl + Alt+ ,」以開啟標點符號選擇器&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;標點符號快捷鍵&quot;&gt;標點符號快捷鍵&lt;/h3&gt;
&lt;p&gt;詳見下圖&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/Pasted image 20230106014110.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/Pasted image 20230106014110.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;</content>
    <category term="macOS" />
    <category term="windows" />
  </entry>
  <entry>
    <title>《臺灣死亡咖啡館》書摘與讀後感</title>
    <link href="https://fntsr.tw/literatures/book-excerpt-and-reflections-on taiwan-death-cafe/" />
    <id>https://fntsr.tw/literatures/book-excerpt-and-reflections-on taiwan-death-cafe/</id>
    <updated>2021-07-26T17:52:08.000Z</updated>
    <published>2021-07-26T17:52:08.000Z</published>
<content type="html">&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;沒有人可以成功逃過「面對死亡」這件事，&lt;br&gt;
那麼，我們何不學習坦然、主動討論它？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;近期直系血緣長輩的過世，可以說是我第一次面對親人死亡這件事吧！對我來說我並不知道怎樣面對「死亡」這件事，尤其是在疫情期間，我也沒能見到這位長輩最後一面，在感受上更是少了觸發的媒介。心中帶點感傷，卻不知道該怎麼表達出來；也有些混亂，不知道該怎麼去釐清；加上自身與近期家族中有些長輩與成員身體上也有病況了，更讓我感到壓力與沮喪，處於打不起精神、沒有動力的狀態。&lt;/p&gt;
&lt;p&gt;在知道該長輩時日不多後，我就著手訂購了這本《臺灣死亡咖啡館》&lt;a href=&quot;https://www.books.com.tw/products/0010715096?loc=P_br_r0vq68ygz_D_2aabd0_B_2&quot;&gt;故事版&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;與&lt;a href=&quot;https://www.books.com.tw/products/0010717995?loc=P_br_r0vq68ygz_D_2aabd0_B_1&quot;&gt;手冊版&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;兩書與&lt;a href=&quot;https://www.books.com.tw/products/0010550925?sloc=main&quot;&gt;《現代國民喪禮》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。會知道有這本書，是之前在籌備婚事時，有找到同作者的&lt;a href=&quot;https://www.books.com.tw/products/0010658032?sloc=main&quot;&gt;《現代國民婚禮》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，認為其編輯內容實用且符合現代的民風民情，也就期待他的這三本更偏向她的主要領域的著作。&lt;/p&gt;
&lt;p&gt;可惜這幾本書似乎較為冷門，調貨時間較長，所以等到《臺灣死亡咖啡館》時，已經過了頭七出殯，也已經送長輩去火葬場了。但當我打起精神、凝聚專注力的把這本書讀完時，就瞭解現在閱讀仍不算太晚，其實喪禮或是面對死亡這件事，更多是在喪事後的情緒處理，這些都是我們這些遺族、生者得學習的課題。&lt;/p&gt;
&lt;p&gt;本篇除了描述為何我會開始閱讀此書，也會稍微介紹此書與其作者，而主要篇幅則會著重在我摘錄的文具，作為自己的書摘與筆記。若看到這些摘錄，對此書也有興趣，就不妨購買書籍好好的深入瞭解吧！&lt;/p&gt;
&lt;h1 id=&quot;作者與書&quot;&gt;作者與書&lt;/h1&gt;
&lt;p&gt;本書的作者是&lt;a href=&quot;https://www.facebook.com/people/%E9%83%AD%E6%85%A7%E5%A8%9F/100000850300154/&quot;&gt;郭慧娟&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;老師，是&lt;a href=&quot;https://dweb.cjcu.edu.tw/ShepherdFiles/C0311/News/20200506134604161.pdf&quot;&gt;生死學研究領域的學者&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，專長在現代國民喪/婚禮禮俗研究、生死學教育、臨終關懷與悲傷輔導、禮儀師教育與訓練。&lt;a href=&quot;http://www.funeralinformation.com.tw/&quot;&gt;台灣殯葬資訊網&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;與郭慧娟老師為了推廣死亡教育，呼應英國 John Uderwood 先生於 2010 發起的&lt;a href=&quot;https://en.wikipedia.org/wiki/Death_Cafe&quot;&gt;「Death Cafe」&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;活動，從 2014 年 10 月開始舉辦「&lt;a href=&quot;https://www.facebook.com/funeralinformation.tw/&quot;&gt;臺灣死亡咖啡館&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」的活動，由郭慧娟老師擔任引言人與主持人，截至 2020 年已辦理超過四百場 &lt;a href=&quot;https://news.ltn.com.tw/news/life/breakingnews/3387008&quot;&gt;[ref]&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。而本書就是為了讓更多想參加卻尚無機會參與的民眾，也能聽到這些小故事；以及滿足獲得從容面對與處理死亡相關事務的知識與作法所編著而成。&lt;/p&gt;
&lt;h1 id=&quot;書摘&quot;&gt;書摘&lt;/h1&gt;
&lt;h2 id=&quot;故事版&quot;&gt;故事版&lt;/h2&gt;
&lt;h3 id=&quot;第一篇面對死亡這件事&quot;&gt;第一篇：面對死亡這件事&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1-1：為什麼避諱談生死
&lt;ul&gt;
&lt;li&gt;備受煎熬的父親
&lt;ul&gt;
&lt;li&gt;與其花所有的精力在抗拒死亡、悲傷即將失落的感情，為什麼不珍惜這剩下的每一天及每一分鐘？&lt;/li&gt;
&lt;li&gt;與其以後回憶起來只有痛苦，不如創造最後生命的美好回憶&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;孩子有完成生命功課嗎？
&lt;ul&gt;
&lt;li&gt;你覺得你的侄子那麼年輕就走了，他有完成他人生的功課嗎？&lt;/li&gt;
&lt;li&gt;他是意外死亡的，一般都認為沒有善終，你覺得他的死亡是痛苦的嗎？&lt;/li&gt;
&lt;li&gt;死亡不是老人的權利，任何年齡、身分、性別、職業的人都可能面臨，而我們一般人的心理預設和期待，又是我們不願意正視死亡的態度與藉口？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1-2：為什麼對死感到恐懼與焦慮
&lt;ul&gt;
&lt;li&gt;珠寶商的故事
&lt;ul&gt;
&lt;li&gt;死亡的印記就這樣與我們互相牽扯激盪，直到有一天，我們真得面對它時，它的存在事實才會真正地被拉到眼前來，人們終得真實面對，無可逃避。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1-3：死亡面相大不同
&lt;ul&gt;
&lt;li&gt;前言
&lt;ul&gt;
&lt;li&gt;面對死亡有三個不同的面向，一是面對他人的死亡；二是面對自己的死亡；三是面對身邊親友的死亡。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1-4：死亡禁忌百百種
&lt;ul&gt;
&lt;li&gt;結語
&lt;ul&gt;
&lt;li&gt;禁忌某些程度好像是防身符，又好像是保護罩，可以讓人們感到安心。但是，面對從以前留傳下的禁忌，我們不一定都要照單全收。&lt;/li&gt;
&lt;li&gt;有的禁忌違反人性情感，有的死亡情況是無法控制，也有的禁忌影響我們的生活作息，或許我們可以適度的調整新袋和做法，才不會造成更大的悲傷與遺憾。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第二篇當死亡漸漸靠近&quot;&gt;第二篇：當死亡漸漸靠近&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2-0：前言
&lt;ul&gt;
&lt;li&gt;與其花大部分的時間在抗拒死亡不如用更多精力想想生命終結有什麼事還需要做，如何做好生命終結前的準備。&lt;/li&gt;
&lt;li&gt;如果生命只剩最後三個月，你們希望這一百日都在抗拒死亡，還是擁有一百日美好的生命最後回憶。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2-3：玻璃屋裡的人
&lt;ul&gt;
&lt;li&gt;前言
&lt;ul&gt;
&lt;li&gt;大部分臨終病人就好像住進了一個單間的玻璃屋中，雖然外面的人看得到他，他也看的到外面的人，但之間卻隔著無形的一層障礙物，臨終者和照顧者只能照看外表或生理上的需求，內心的東西是很難關照到的。玻璃屋外的不容易進入屋內人的心，屋內的人也很難表達或接收到妥適的關懷，缺乏直接有效的良好溝通與互動。&lt;/li&gt;
&lt;li&gt;這種斷裂和疏離的人際溝通情形，局限了病人與家屬的「交心」機會，也讓病人和家屬間錯失了彼此陪伴的質感，至少臨終者無法獲得更深度的關懷，家屬則事後倍感遺憾。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;當死亡漸漸靠近時
&lt;ul&gt;
&lt;li&gt;除了年老生理憂鬱因素外，那些我們認為沒有那麼緊急的事，其實就是他的「生活大事」。&lt;/li&gt;
&lt;li&gt;爸爸之所以想到什麼事就馬上要做，是因為他感到自己離死亡很近了。因為死亡的逼漸感，讓他產生死亡焦慮，之所以「急著」做很多事，那是他對於死亡靠近的因應之道。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2-4：我的遺願清單
&lt;ul&gt;
&lt;li&gt;前言
&lt;ul&gt;
&lt;li&gt;臨終病人的靈性內涵，具體包括：
&lt;ul&gt;
&lt;li&gt;一、病人須完成一生的生命回顧，思考並面對、承擔好的與不好的總總；&lt;/li&gt;
&lt;li&gt;二、病人要體認自己生命的意義何在，這醫生到底過得有沒有意義，完成自我面對與認同；&lt;/li&gt;
&lt;li&gt;三、正面面對死亡與做好身後準備；&lt;/li&gt;
&lt;li&gt;四、夢想或自我價值有沒有實現；&lt;/li&gt;
&lt;li&gt;五、宗教信仰有沒有落實實踐，以及認同並接受其指引死後生命的去處。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;大多數人臨終前最後悔的事
&lt;ul&gt;
&lt;li&gt;大多數人臨終前會感到遺憾或後悔的，大概可分為五件事
&lt;ul&gt;
&lt;li&gt;第一件事「希望當初有勇氣過自己真正想要的生活，而不是別人要自己過的生活」；&lt;/li&gt;
&lt;li&gt;第二件事「希望當初沒有花這麼多精力在工作上」；&lt;/li&gt;
&lt;li&gt;第三件事「希望當初能有勇氣表達自己的感受」；&lt;/li&gt;
&lt;li&gt;第四件事「希望當初能和朋友保持聯繫」；&lt;/li&gt;
&lt;li&gt;第五件事「希望當初能讓自己活得開心點」。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;歸納出來就是「愛」、「付出」和「珍惜」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第三篇當死亡來臨&quot;&gt;第三篇：當死亡來臨&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3-0：前言
&lt;ul&gt;
&lt;li&gt;喪禮告別式只重視親屬名分，不管實際親疏關係，某些感情真正親近的親友無法參與主祭，常造成遺憾。&lt;/li&gt;
&lt;li&gt;我們為什麼不自己決定身後事？為什麼要交給他人處理，造成別人的困擾？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;3-2：喪禮的主角是誰
&lt;ul&gt;
&lt;li&gt;結語
&lt;ul&gt;
&lt;li&gt;喪禮的主角是過世的人，家屬是送行者，家屬應尊重當事人生前的想法和決定，在不違背社會善良風俗及秩序下，依其遺囑或心願辦理，一方面表達孝心或親情，一方面也體現對過世家人的尊重。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第四篇浴火鳳凰獲得新生&quot;&gt;第四篇：浴火鳳凰獲得新生&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;4-3：告訴我，可以做什麼讓自己好過些
&lt;ul&gt;
&lt;li&gt;天堂家書
&lt;ul&gt;
&lt;li&gt;國內外有一些墓園或納骨塔設施，都會在清明或舉辦普渡法會時，規劃「天堂家書」追思活動，讓家屬能用寫信方式抒發對先人的思念之情，效果都很好。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;心靈做七與百日追思
&lt;ul&gt;
&lt;li&gt;建議個家庭可以在做七或作百日時，自行加入「追思」的活動，一來可以讓家庭成員有「參與」的機會，二欄可以凝聚家庭的情感，發揮家庭支持的力量。&lt;/li&gt;
&lt;li&gt;相片追思法
&lt;ul&gt;
&lt;li&gt;再請師父或師姐來誦經之前，家人可以事先聚集，大家圍坐在一起將亡故親人的照片拿出來，每個人選一張最有感覺的照片。接著，進行三個階段的追思活動。
&lt;ul&gt;
&lt;li&gt;第一階段，重點是抒發個人心情。每個人可以就拿到的照片，一一輪流講述自己對亡故親人的思念，以及自其生病到辦喪禮這段期間以來的心情，或者歡笑，或者哭泣，家人全體真情陪伴，就是最好的療癒之道。&lt;/li&gt;
&lt;li&gt;第二階段，目的是肯定死亡者的一生及感謝其對家庭的貢獻。此階段家人同樣一一輪流講述對亡故親人的感恩心情，謝謝他 (她) 為自己及家人的付出，讓每個人由內心講出感念之意。&lt;/li&gt;
&lt;li&gt;第三階段，則藉由祝福表達慎終追遠心意。祝福一直具有正向的能量，其實，誦經、祈禱也都是一種祝福。在此階段，可以配合宗教信仰，誦經或祈禱為亡故親人祈福，也可以直接進行做七或作百日誦經儀式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;勇敢面對，自我療癒
&lt;ul&gt;
&lt;li&gt;可以在喪禮後頭三個月，訂出自己專屬的「追思療傷時間」，每個禮拜一天到五天不等，在固定的時段 (例如：固定晚上八點到十點)，挪出屬於個人專屬的時間與空間，讓自己有單獨思念親人的機會。&lt;/li&gt;
&lt;li&gt;也建議在頭三個月哩，每次悲傷情緒過後，能仔細地記錄下自己悲傷情緒的內涵，例如：當時想到了什麼？在做什麼？情緒的反應是什麼？身心有何症狀？悲傷情緒過後自己有何感覺？是更難過還是感覺輕鬆些？這些紀錄有助於個人了解自己的悲傷情況，未來若有需要對外求助時，也能提供醫生或心理諮詢用。&lt;/li&gt;
&lt;li&gt;面對喪親悲傷，我們還要有一個認知：即這位亡故的親人，與我們˙情感牽絆數十年，血脈至親，生命中的恩怨情仇、點點滴滴，絕對無法在短短時間內一抹而去。因此我們˙要給自己和家人多一點時間來面對和適應，家人更應多多互相照應與陪伴，善用家庭支持力量。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;手冊版&quot;&gt;手冊版&lt;/h2&gt;
&lt;h3 id=&quot;台灣死亡咖啡館活動談論的生死議題&quot;&gt;台灣死亡咖啡館活動談論的生死議題&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;第一次想到死亡是什麼是時候？&lt;/li&gt;
&lt;li&gt;當開口談論死亡時……&lt;/li&gt;
&lt;li&gt;死亡的禁忌、衝擊與震撼&lt;/li&gt;
&lt;li&gt;面對死亡的經驗&lt;/li&gt;
&lt;li&gt;為死亡做好準備？！&lt;/li&gt;
&lt;li&gt;當死亡靠近時—臨終面對，關懷與問題&lt;/li&gt;
&lt;li&gt;身後事的面對和處理&lt;/li&gt;
&lt;li&gt;如何走出喪親悲傷？&lt;/li&gt;
&lt;li&gt;為自己預約一場喪禮&lt;/li&gt;
&lt;li&gt;死後的世界—你相信死後有靈魂嗎？&lt;/li&gt;
&lt;li&gt;我們的死亡教育……&lt;/li&gt;
&lt;li&gt;天災人禍 / 意外對我們的衝擊&lt;/li&gt;
&lt;li&gt;當毛孩寶貝離開我們時……&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第一篇死亡面對篇&quot;&gt;第一篇：死亡面對篇&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;檢測自我死亡的態度
&lt;ul&gt;
&lt;li&gt;0 - 7 分：易受驚嚇&lt;/li&gt;
&lt;li&gt;8 - 11 分：神經質 ← 我評分完屬於這階段&lt;/li&gt;
&lt;li&gt;12 - 14 分：稍顯焦慮&lt;/li&gt;
&lt;li&gt;15 - 17 分：鎮定面對&lt;/li&gt;
&lt;li&gt;18 - 20 分：泰然自若&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;與家人談論死亡的方式與技巧
&lt;ul&gt;
&lt;li&gt;利用機會與家人談論死亡
&lt;ul&gt;
&lt;li&gt;死亡新聞事件&lt;/li&gt;
&lt;li&gt;長輩主動談到身後或與死亡問題時&lt;/li&gt;
&lt;li&gt;探病機會&lt;/li&gt;
&lt;li&gt;參加告別式的機會&lt;/li&gt;
&lt;li&gt;參加生死相關講座或活動後&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;與家人談論死亡技巧
&lt;ul&gt;
&lt;li&gt;自己先建立真誠、正向、坦然、尊重、關懷之面對死亡的態度&lt;/li&gt;
&lt;li&gt;切莫輕佻、隨便、或用懼怕之口吻&lt;/li&gt;
&lt;li&gt;與孩童談論死亡時不迴避、坦承，並引導其學習關懷、尊重生命&lt;/li&gt;
&lt;li&gt;與長輩談論死亡時，讓其充分表達內心想法&lt;/li&gt;
&lt;li&gt;當家人談到對死亡的感覺時，用關懷的態度引導其完整說出，多聆聽、表達同理&lt;/li&gt;
&lt;li&gt;親友過世後，可安排聚會，讓家人或朋友輪流表達這段時間的感觸與悲傷經驗&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「圓夢要趁早」自我實現清單
&lt;ul&gt;
&lt;li&gt;問題一：最想、應該做的事是什麼？&lt;/li&gt;
&lt;li&gt;問題二：現在可不可以實現？為什麼？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「See you folks」親情計算機
&lt;ul&gt;
&lt;li&gt;計算在剩下來的時光還能與父母、子女、長輩、親友相處的時光有多少？並以平均壽命 80 歲計算，看看自己還能見家人幾次。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;大方說出四道
&lt;ul&gt;
&lt;li&gt;道謝&lt;/li&gt;
&lt;li&gt;道愛&lt;/li&gt;
&lt;li&gt;道歉&lt;/li&gt;
&lt;li&gt;道別&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;預立遺囑方式
&lt;ul&gt;
&lt;li&gt;自書遺囑&lt;/li&gt;
&lt;li&gt;公證遺囑&lt;/li&gt;
&lt;li&gt;密封遺囑&lt;/li&gt;
&lt;li&gt;代筆遺囑&lt;/li&gt;
&lt;li&gt;口授遺囑&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自書遺囑參考格式
&lt;ul&gt;
&lt;li&gt;醫囑的預立
&lt;ul&gt;
&lt;li&gt;要不要接受安寧療護&lt;/li&gt;
&lt;li&gt;要不要放棄急救&lt;/li&gt;
&lt;li&gt;要不要捐贈大體&lt;/li&gt;
&lt;li&gt;要不要捐贈器官&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;財產的分配
&lt;ul&gt;
&lt;li&gt;不動產&lt;/li&gt;
&lt;li&gt;動產&lt;/li&gt;
&lt;li&gt;書籍&lt;/li&gt;
&lt;li&gt;珍藏物&lt;/li&gt;
&lt;li&gt;寵物&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;告別的做法
&lt;ul&gt;
&lt;li&gt;儀容&lt;/li&gt;
&lt;li&gt;陪葬品&lt;/li&gt;
&lt;li&gt;宗教儀式&lt;/li&gt;
&lt;li&gt;喪禮由誰辦理&lt;/li&gt;
&lt;li&gt;遺像&lt;/li&gt;
&lt;li&gt;訃聞&lt;/li&gt;
&lt;li&gt;喪禮名單&lt;/li&gt;
&lt;li&gt;是否收奠儀&lt;/li&gt;
&lt;li&gt;告別會場的布置&lt;/li&gt;
&lt;li&gt;告別式的方式
&lt;ul&gt;
&lt;li&gt;家奠&lt;/li&gt;
&lt;li&gt;生平回憶錄播放&lt;/li&gt;
&lt;li&gt;公奠&lt;/li&gt;
&lt;li&gt;瞻仰遺容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;告別儀式的音樂&lt;/li&gt;
&lt;li&gt;埋葬的方式&lt;/li&gt;
&lt;li&gt;後人紀念方式&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;內心的話
&lt;ul&gt;
&lt;li&gt;再見&lt;/li&gt;
&lt;li&gt;謝謝&lt;/li&gt;
&lt;li&gt;抱歉&lt;/li&gt;
&lt;li&gt;道愛&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;第三篇臨終關懷篇&quot;&gt;第三篇：臨終關懷篇&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;臨終遺願清單
&lt;ul&gt;
&lt;li&gt;在生命只剩最後一段時間，可以為自己製作一份「遺願清單」，列出臨終前想為自己和家人實現的心願，再一一的逐步實現，做出自己最想做的事，做讓自己此生不會遺憾的事。&lt;/li&gt;
&lt;li&gt;欄位
&lt;ul&gt;
&lt;li&gt;項次 (優先順序)&lt;/li&gt;
&lt;li&gt;最想做的事&lt;/li&gt;
&lt;li&gt;實現計畫&lt;/li&gt;
&lt;li&gt;完成狀態&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;探望臨終病人該注意的事
&lt;ul&gt;
&lt;li&gt;徵得同意才探病，別太打擾，多讓病人安靜休息。&lt;/li&gt;
&lt;li&gt;病人不想說話或無法說話時，只要安靜地陪伴即可。&lt;/li&gt;
&lt;li&gt;耐心地傾聽，給予溫暖、尊重、體貼和最大的同理心。&lt;/li&gt;
&lt;li&gt;給予溫暖的握手互動和祝福話語。&lt;/li&gt;
&lt;li&gt;探望時間不宜過久。&lt;/li&gt;
&lt;li&gt;告訴他：「有什麼需要我幫忙的嗎？我很樂意做。」&lt;/li&gt;
&lt;li&gt;別藉機傳教或灌輸自己的價值觀。&lt;/li&gt;
&lt;li&gt;適度表達你對他真誠的關愛與祝福。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;悲傷紀錄卡
&lt;ul&gt;
&lt;li&gt;當時的時間&lt;/li&gt;
&lt;li&gt;當時的地點&lt;/li&gt;
&lt;li&gt;當時的情境&lt;/li&gt;
&lt;li&gt;想到與逝者間的何事&lt;/li&gt;
&lt;li&gt;肢體的動作&lt;/li&gt;
&lt;li&gt;內心的想法&lt;/li&gt;
&lt;li&gt;自己的感覺&lt;/li&gt;
&lt;li&gt;悲傷過後的感覺&lt;/li&gt;
&lt;li&gt;情緒形容詞參考：憤怒、無力、怨恨、商、挫折、慌亂、空虛、自卑、崩潰、孤單、寂寞、浮躁、無奈、徬徨、可念、愧疚、後悔、恐懼、痛苦、生氣、罪惡、疲憊、憐憫、困惑、害怕、寬恕、茫然、焦慮、無助、自責、哀怨、壓力、生落、沮喪、麻木、驚嚇、愛……等等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;讀後感想&quot;&gt;讀後感想&lt;/h1&gt;
&lt;p&gt;《臺灣死亡咖啡館》故事版中，充滿著許多故事與情境，讓我了解在面對死亡、舉辦喪事時，其他人面臨什麼樣的問題，有哪些經驗與做法事值得我省思與學習的。而在手冊版，則是補足故事版中大略提到的工具或事資訊，更像一本參考書與工具書，讓我瞭解特定知識與一些方法的使用。 &lt;/p&gt;
&lt;p&gt;讀完這本書，我認為最大的核心原則的收穫就是「面對死亡，不要忌諱去談」。好好去面對它，在面對臨終者：好好聆聽臨終者的想法與心願，好好把握剩下的時間與之對話，尊重臨終者的想法去辦理後事；在後事的自我療癒中，也不要忌諱去回想、去面對，可自己與家人一些時光好好追思，透過追思去面對、去給予心理上的支持，然後好好放下。 正如聖嚴法師的名言：「面對它、接受它、處理它、放下它」，如果我們不曾讓自己面對，那麼就永遠不可能去接受、處理與放下。我認為這本書給予了我滿大的勇氣去面對死亡—這個家中長輩鮮少會與我聊的話題。 上面的書摘，並不完全把書中的要點陳列出來，更多事我特別喜歡、有感的橋段。 &lt;/p&gt;
&lt;p&gt;在第一篇裡，此書讓我理解如何放下親友已逝的事情，讓我得以從「有完成他人生的功課嗎？」、「死亡是痛苦的嗎？」去審視，如果有完成人生功課，且死亡不是痛苦，那我想這位親友的死亡就是一件喜喪。正如家中長輩，走過八十多個年頭，人生該完成的事大概都做了，死亡也是在睡夢中的，我想是不痛苦的，因此我也就更坦然的去接受並以祝福的心態去面對。&lt;/p&gt;
&lt;p&gt;在第一篇也讓我有了轉念，我特別喜歡「與其以後回憶起來只有痛苦，不如創造最後生命的美好回憶」這句話，讓我能以正面的心態去面對，讓自己與逝者都以美好的方式度過剩下的時光。承續這點，第二篇前言裡也以「如果生命只剩最後三個月，你們希望這一百日都在抗拒死亡，還是擁有一百日美好的生命最後回憶？」的詢問去起頭，玻璃屋的人讓我反思在與臨終者相處時，那道玻璃牆的存在，讓我開啟了這樣的覺察能力，而遺願清單更是讓我與臨終者建立連結，建立起共同目標，一起創造臨終時光的美好回憶與價值。尤其是「為什麼不讓我吃爌肉」這個故事，更讓我莞爾卻又深深感到同理臨終者的重要性。 &lt;/p&gt;
&lt;p&gt;在第三篇時，也讓我反思喪事的辦理。裡面的各個故事都讓人慟容：無法參與外婆喪禮的最親、「最重要的外人」；一生為家庭付出，在「死後卻無家可歸的姊姊」；因為沒有好好聆聽父親身後事期望，導致無法說服家族按照父親遺願辦理喪事而遺憾的「爸爸的骨灰」；明明是伴侶，卻無法為自己另一伴舉辦他期望喪禮形式的「一個人出席的告別式」……等等。這些故事都讓我意識到自己要預先立好遺囑或是請臨終者正式說出他期望方式的重要性。而過往傳統的禁忌，在現代若不合乎人情，或許也該折衷或廢除，才不會造成其他人終身的遺憾。 &lt;/p&gt;
&lt;p&gt;而第四篇，對我來說也是最實用的一篇。我特別喜歡「追思」的活動，他補足的傳統喪禮中，我們難以有機會與時間表達情緒的部分。透過「追思」我想我才有辦法好好的接受與放下親友死亡的這件事，並讓悲傷轉成美好的回憶。我也會想透過這樣的方式，幫助我家人走過這段，正如書中所說的「家人更應多多互相照應與陪伴，善用家庭相互支持的力量」。 &lt;/p&gt;
&lt;p&gt;在第五篇裡，談的是死亡教育，這部份讓我瞭解到如何與家人去談死亡這件事。另外第六篇則是討論寵物的死亡如何面對，因為我沒有養寵物，所以就沒特別摘錄或發表想法，但仍推薦有養寵物的讀者去閱讀。&lt;/p&gt;
&lt;p&gt;講到這裡，也勉強地將我我的收穫講了個大概了。最後誠摯的感謝郭慧娟老師，透過這本書教會了我面對死亡這件事，雖然還很有些害怕、難以面對，但我會嘗試用這本書學到的經驗、想法，好好的讓自己走過人生必經的過程。&lt;/p&gt;</content>
    <category term="excerpt" />
  </entry>
  <entry>
    <title>WordPress 的 PHP風格指南摘要</title>
    <link href="https://fntsr.tw/articles/php-convention-of-wordpress/" />
    <id>https://fntsr.tw/articles/php-convention-of-wordpress/</id>
    <updated>2021-07-17T17:29:35.000Z</updated>
    <published>2021-07-17T17:29:35.000Z</published>
<content type="html">&lt;p&gt;最近想要更新自己的 Wordpress 主題，所以又嘗試去重新熟悉有關 PHP 的開發與 WordPress 的程式設計風格指南。&lt;/p&gt;
&lt;p&gt;這篇是 Wordpress 的 PHP 風格指南的摘要，這些摘要都是來自我對指南理解的簡短筆記，並不一定等於原話。算是協助我之後要重新進入這個開發情境的回憶索引吧！想要參考程式碼範例與暸解這樣制定的原因，請直接參考&lt;a href=&quot;https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/&quot;&gt;原文指南&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;此篇摘要為初版，未來可能會為了方便記憶去編寫更好閱讀的版本。&lt;/p&gt;
&lt;h2 id=&quot;php風格指南摘要&quot;&gt;PHP風格指南摘要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Single and Double Quotes
&lt;ul&gt;
&lt;li&gt;預設使用單引號 (&lt;code&gt;&#39;&lt;/code&gt;)，有變數才用雙引號 (&lt;code&gt;&quot;&lt;/code&gt;)。&lt;/li&gt;
&lt;li&gt;避免在字串中使用跳脫引號(&lt;code&gt;\&quot;&lt;/code&gt;)。&lt;/li&gt;
&lt;li&gt;放在 HTML 屬性的變數必須使用 &lt;code&gt;esc_attr()&lt;/code&gt; 去跳脫。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Indentation
&lt;ul&gt;
&lt;li&gt;行首縮排應使用 tab 而不是 space。（註：我本人是 space 派的 QQ)。&lt;/li&gt;
&lt;li&gt;在行首縮排使用 tab 排版，在行中使用 space 對齊。&lt;/li&gt;
&lt;li&gt;關聯式陣列，每個項目應該都要獨立一行，且必須有逗號放在行尾。&lt;/li&gt;
&lt;li&gt;switch 區塊中，case 前必有一縮排，case 區塊內的敘述則再一層縮排。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Brace Style
&lt;ul&gt;
&lt;li&gt;前大括號應放在敘述的行尾，而不是獨立一行。&lt;/li&gt;
&lt;li&gt;後大括號後面若仍有敘述，則為同一行 (eg. &lt;code&gt;} else&lt;/code&gt;)。&lt;/li&gt;
&lt;li&gt;就算區塊裡只有一行敘述，仍需使用大括號。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;elseif&lt;/code&gt;, not &lt;code&gt;else if&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Declaring Arrays
&lt;ul&gt;
&lt;li&gt;使用較完整的陣列宣告語法，確保更好的可讀性，對視覺障礙者也較友善。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[ 1, 2, 3 ]&lt;/code&gt; -&gt; &lt;code&gt;array( 1, 2, 3 )&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Closures (Anonymous Functions)
&lt;ul&gt;
&lt;li&gt;不要透過匿名函式傳遞 filter 或 action 的 callback，這樣會導致無法移除 filter 或 action。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Multiline Function Calls
&lt;ul&gt;
&lt;li&gt;如果函式呼叫有需要多行呈現的情況，每項參數與註解，都應該獨立一行，且不得超過一行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Regular Expressions
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;preg_replace_callback&lt;/code&gt;，而不用 &lt;code&gt;/e&lt;/code&gt;，後者會帶來安全性問題。&lt;/li&gt;
&lt;li&gt;使用單引號包覆正則表達式的敘述。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Opening and Closing PHP Tags
&lt;ul&gt;
&lt;li&gt;在 PHP 程式碼多行的情況下，PHP 的開合標籤應獨立一行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;No Shorthand PHP Tags
&lt;ul&gt;
&lt;li&gt;務必使用完整的 PHP 開合標籤 &lt;code&gt;&amp;#x3C;?php&lt;/code&gt;，而不使用短語法 &lt;code&gt;&amp;#x3C;?&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Remove Trailing Spaces
&lt;ul&gt;
&lt;li&gt;務必移除行尾多餘的空白。&lt;/li&gt;
&lt;li&gt;盡量在檔案終行使用 PHP 收合標籤。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Space Usage
&lt;ul&gt;
&lt;li&gt;務必在逗號之後加上空白 (space)。&lt;/li&gt;
&lt;li&gt;務必在邏輯、比較、字串、賦值運算元兩側加上空白。&lt;/li&gt;
&lt;li&gt;在小括號內側若有敘述或引數，務必在內側兩邊加上空白。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;elseif&lt;/code&gt;, &lt;code&gt;foreach&lt;/code&gt; , &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;switch&lt;/code&gt; 這類語法的小括號外面兩側加上空白。&lt;/li&gt;
&lt;li&gt;函式名稱與前小括號之間不用留空白。&lt;/li&gt;
&lt;li&gt;強制轉型的型別務必使用小寫，並使用短寫。&lt;/li&gt;
&lt;li&gt;在參考陣列用的引數中，只有在索引是使用變數時，才需要在內側兩邊都加空白。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;switch&lt;/code&gt; 區塊中， case 的索引與冒號之間不該留空白。&lt;/li&gt;
&lt;li&gt;承上，在函式定義返回值的型別時用的冒號，前方也不該留空白。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Formatting SQL statements
&lt;ul&gt;
&lt;li&gt;SQL 的關鍵字永遠以大寫書寫。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;$wpdb-&gt;prepare()&lt;/code&gt; 處理含有變數的 SQL 敘述。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Database Queries
&lt;ul&gt;
&lt;li&gt;避免直接操作資料庫，而是使用既有的函式取得需要的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Naming Conventions
&lt;ul&gt;
&lt;li&gt;變數、函式與 action/filter 永遠使用全小寫的 Snake Case&lt;/li&gt;
&lt;li&gt;類別名稱使用每個詞首字大寫的 Snake Case，若是縮寫則永遠使用大寫表示。&lt;/li&gt;
&lt;li&gt;常數使用全大寫的 Snake Case。&lt;/li&gt;
&lt;li&gt;檔案名稱使用 Kebab Case。&lt;/li&gt;
&lt;li&gt;Class 檔案名稱則需要加上 &lt;code&gt;class-&lt;/code&gt; 作為前綴。&lt;/li&gt;
&lt;li&gt;呈上，如果該類別是 BackPress 的一部分，在改用 &lt;code&gt;class.&lt;/code&gt; 作為前綴。&lt;/li&gt;
&lt;li&gt;若是為在 &lt;code&gt;wp-includes/&lt;/code&gt; 中，包含 template tags 的檔案，則應該以 &lt;code&gt;-template&lt;/code&gt; 作為後綴。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Self-Explanatory Flag Values for Function Arguments
&lt;ul&gt;
&lt;li&gt;在函式的引數中，盡量避免使用布林型別，而是使用字串型別來增加語意。&lt;/li&gt;
&lt;li&gt;如果函式需要許多參數，則建議可以改用 &lt;code&gt;$args&lt;/code&gt; 陣列替代。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Interpolation for Naming Dynamic Hooks
&lt;ul&gt;
&lt;li&gt;若使用動態命名的 Hooks 時，務必用大括號將不同的變數區隔出來，以增加可讀性 (eg. &lt;code&gt;{$new_status}_{$post-&gt;post_type}&lt;/code&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ternary Operator
&lt;ul&gt;
&lt;li&gt;在使用三元運算子時，永遠用來測試是否相等，而不是測試是否相異。&lt;/li&gt;
&lt;li&gt;僅在賦值的情境使用三元運算子，而不要在三元運算子中執行敘述、函式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Yoda Conditions
&lt;ul&gt;
&lt;li&gt;在條件式使用使用相等或相異的運算子時，永遠將變數放在右側。（儘管閱讀會不習慣，但在除錯時很有用）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Clever Code
&lt;ul&gt;
&lt;li&gt;編寫敘述時，可讀性的重要程度永遠高過於使用奇巧、或過於簡潔的方式&lt;/li&gt;
&lt;li&gt;務必使用嚴謹的比較運算子 &lt;code&gt;===&lt;/code&gt;，除了必要時才使用 &lt;code&gt;==&lt;/code&gt;，以避免不合預期的行為。&lt;/li&gt;
&lt;li&gt;永遠不要在條件式中賦值。&lt;/li&gt;
&lt;li&gt;在 switch 敘述中，可以使用無敘述的 case 讓他往下執行。若是有敘述的 case 仍希望往下執行，則需要顯性的註解去表示是刻意不寫 &lt;code&gt;break&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;永遠不要使用 &lt;code&gt;goto&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;永遠不要使用 &lt;code&gt;eval()&lt;/code&gt; 與 &lt;code&gt;create_function()&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Error Control Operator @
&lt;ul&gt;
&lt;li&gt;永遠不要使用 &lt;code&gt;@&lt;/code&gt; 去忽略錯誤訊息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Don’t extract()
&lt;ul&gt;
&lt;li&gt;永遠不要使用 &lt;code&gt;extract()&lt;/code&gt;，他會導致難以除錯。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="excerpt" />
    <category term="php" />
    <category term="wordpress" />
  </entry>
  <entry>
    <title>讀五十六巷七弄的〈淺談 Remote work〉有感</title>
    <link href="https://fntsr.tw/literatures/after-reading-remote-work-of-mungkeii/" />
    <id>https://fntsr.tw/literatures/after-reading-remote-work-of-mungkeii/</id>
    <updated>2021-06-18T00:53:05.000Z</updated>
    <published>2021-06-18T00:53:05.000Z</published>
<content type="html">&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;這篇文章是我去年三月底，發布在公司內部 &lt;code&gt;#cop-wfh&lt;/code&gt; 頻道的訊息，那是一個討論如何適應 WFH 工作模式的頻道。我把它簡單重整為文章的斷句方式後，放到部落格作個紀錄。&lt;/p&gt;
&lt;h1 id=&quot;本文&quot;&gt;本文&lt;/h1&gt;
&lt;p&gt;分享 &lt;a href=&quot;https://medium.com/@jacquetwong?source=post_page-----63e75a8f1213--------------------------------&quot;&gt;Jac Wong&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 在 Medium 所寫的&lt;a href=&quot;https://medium.com/%E4%BA%94%E5%8D%81%E5%85%AD%E5%B7%B7%E4%B8%83%E5%BC%84/%E6%B7%BA%E8%AB%87-remote-work-63e75a8f1213&quot;&gt;〈淺談 Remote work〉&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;這篇文章。&lt;/p&gt;
&lt;p&gt;特別想 mention 是裡面提到的「溝通文化」，和我之前想表達的概念相近，但有幾個不錯的術語，我覺得是可以借用的。我嘗試用我的理解與言語再論述一次看看。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;通常大家只記得好處，卻忘了 remote work 對團隊工作的影響。衝擊最大的，莫過於從 synchronous、under-communication 走向 asynchronous、over-communication。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因為 Remote 會導致 Face to Face 的成本變高，而基於公司的 WFH 政策，我們現在也只能 Remote Call，甚至更多是連視訊都沒開的 Call，其效益會比 Face to Face 低很多。又因為 Face to Face &amp;#x26; Remote Call 這類的同步溝通方式，一次只能進行一個話題，很容易 Lock 一群人的 conversation，變得互相在等待。&lt;/p&gt;
&lt;p&gt;而通常為了降低被 Lock 住的時間，所以說話會盡量精簡、不囉唆，也就是文中所述的 under-communication。（事實上，平時我們面對面溝通，使用 under-communication 時，更多是可以透過語氣、肢體語言、表情去將省略的資訊補齊。）但因為 WFH 在溝通上，Remote Call (or Discord/Zoom)，更容易有 Lock 的情況，且每個人家裡網路情況不一、容易有不穩、或掉訊的狀況。&lt;/p&gt;
&lt;p&gt;一直透過 Remote Call 進行同步溝通，不一定是有效率的方式。所以為了減少等待的浪費，非同步 (asynchronous) 溝通就變得很重要。&lt;/p&gt;
&lt;p&gt;而 async 溝通時，不會像同步溝通時，預期所有人都會同時接到訊息，所以一個訊息或內容，我們預期會在將來被多人多次使用。因此為了將來的訊息接受者（包括未來的自己）能夠看懂，我們必須將只適用於處於當下情境者的 mutual knowledge，變成任何人看了都能夠暸解的 common knowledge。而要維持 common knowledge，就仰賴資訊量比較多、比較細、感覺上比較囉唆的的 over communicate。在實踐上可能包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;將正式會議的記錄寫在 Confluence 上&lt;/li&gt;
&lt;li&gt;把非正式會議、討論、對話的結論打在 Slack 上&lt;/li&gt;
&lt;li&gt;在決議的資訊上，除了結果外，也盡量把決策的原因、考量寫下來&lt;/li&gt;
&lt;li&gt;在文字對談上，盡量把脈絡講明&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有更多想法的也可以一起交流&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在擁抱 remote work 的同時，卻不擁抱 async overcommunication 的文化，就會出事。&lt;br&gt;
因為當一個人 remote work 時，和他合作的人也自動被 remote 了。&lt;br&gt;
那就是整個團隊的事。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我滿喜歡這段話的，所以特地摘錄分享之。&lt;/p&gt;</content>
    <category term="excerpt" />
  </entry>
  <entry>
    <title>Slack 溝通指南</title>
    <link href="https://fntsr.tw/articles/slack-communication-guide/" />
    <id>https://fntsr.tw/articles/slack-communication-guide/</id>
    <updated>2021-06-18T00:20:19.000Z</updated>
    <published>2021-06-18T00:20:19.000Z</published>
<content type="html">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;因為疫情影響，現在工作環境改為 WFH 已久。以往辦公室直接面對面溝通的方式，在這個環境下就難以達成。&lt;/p&gt;
&lt;p&gt;儘管有仰賴 Discord 或 Zoom 之類的工具，建立起數個語音頻道。但在實務上仍有許多缺點，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正在進行的對話時，常被外來者打斷&lt;/li&gt;
&lt;li&gt;無法像實體環境下因遠距而有聲量大小差異，所以任何有關與無關的對話都讓自己難以專注&lt;/li&gt;
&lt;li&gt;因為一片沈默或怕打斷他人專注狀態而不敢發言，導致溝通頻率更低&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如此困境，若再遇到工作時間開始不一致的情況，語音對話這類同步對話的方式就越不適合。所以透過文字溝通的非同步對話就顯得重要。但身邊的夥伴，也礙於過往習慣用對話的溝通方式，在文字溝通上會需要點指引，所以我就想起前公司 CrBoy 曾在 Wiki 寫的〈工作流程指南〉是一份還不錯的文件，於是再近一步編寫成為本篇文章。&lt;/p&gt;
&lt;h2 id=&quot;指南&quot;&gt;指南&lt;/h2&gt;
&lt;p&gt;本文件提供透過 Slack 進行文字對話的溝通指南給大家參考，以下是建議而非規範。&lt;br&gt;
意思是你還是可以不遵循（也許迫於現實），但是照建議做可能會讓溝通更佳流暢。&lt;/p&gt;
&lt;h3 id=&quot;文字和語音&quot;&gt;文字和語音&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不緊急的事情，用文字留言在頻道上&lt;/strong&gt;，會比起直接到語音頻道打斷他人的對話或專注狀態要好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;若是文字討論出現困難，直接邀請大家改用語音對話&lt;/strong&gt;，會比繼續用文字討論好。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;資訊透明&quot;&gt;資訊透明&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Slack channels 是主要的通訊管道**。公事儘量都在 Slack 的「頻道」中講**，若有必要可私訊講。&lt;/li&gt;
&lt;li&gt;任何語音對話結束後，&lt;strong&gt;將有需要讓其他人知道的事發到 Slack，把資訊擴散出去。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;文字陳述&quot;&gt;文字陳述&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;在描述一件事或問題，先在前幾句破題、結論&lt;/strong&gt;，會比先講冗長的脈絡好。&lt;/li&gt;
&lt;li&gt;在描述時，應先提供事實，再提供觀點與假設。&lt;/li&gt;
&lt;li&gt;若描述的事情是自己的假設，應該明確指出這件事。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;開啟話題&quot;&gt;開啟話題&lt;/h3&gt;
&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;若是敘述很長時，將細節補充在 Thread 裏&lt;/strong&gt;，會比起整篇都打在本文好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在本文或 Thread 中 mention 會需要知道這份資訊的相關夥伴&lt;/strong&gt;，讓他們能直接收到 Thread 裡有回覆的通知。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;提示：mention&lt;/strong&gt;&lt;br&gt;
在 slack 使用 &lt;code&gt;@username&lt;/code&gt; 可 mention 這個人，讓他收到推播通知。使用 &lt;code&gt;@channel&lt;/code&gt; 可以讓整個頻道的人都收到通知，適合強迫大家看某則訊息。使用 &lt;code&gt;@here&lt;/code&gt; 會通知現在在線上的人，適合找人幫忙&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;回覆話題&quot;&gt;回覆話題&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;同個話題，在 Thread 發言&lt;/strong&gt;，比直接在頻道討論好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Thread 本文偏離的話題，另外在頻道上發言&lt;/strong&gt;，比繼續在 Thread 討論好。&lt;/p&gt;
&lt;/li&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;br&gt;
**若發現有留言偏題，可以善用分享功能直接在頻道開新的 Thread。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**提示：主動追蹤 Thread&lt;br&gt;
**若想關注這個話題，可以對話題點擊「Get notified about new replies」去追蹤。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;協助總結&quot;&gt;協助總結&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;若話題 Thread 進行了許多討論，為需要這些資訊但沒參與討論的人做總結&lt;/strong&gt;，比起直接請他們看整個討論串好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**提示：將留言發佈到頻道&lt;br&gt;
**善用勾選「Also send to #channel」，將結論發佈到頻道上讓大家知道。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;後話&quot;&gt;後話&lt;/h2&gt;
&lt;p&gt;本篇文章不會是一個最好的指南，但若未來有時間或聽到一些回饋，會再嘗試持續更新。&lt;/p&gt;
&lt;p&gt;在寫這邊文章時也懷念起在前公司時，和一群產品開發部門的夥伴，討論各種工作流程的改善方式。當時也透過 Asana 作為一個知識管理工具，裡面存放了許多相關的文件，至今仍成為我不時參考的依據。&lt;/p&gt;</content>
    <category term="agile" />
  </entry>
  <entry>
    <title>避免跑題太久的計時器</title>
    <link href="https://fntsr.tw/articles/timers-to-avoid-digressing-for-too-long/" />
    <id>https://fntsr.tw/articles/timers-to-avoid-digressing-for-too-long/</id>
    <updated>2021-03-14T23:21:31.000Z</updated>
    <published>2021-03-14T23:21:31.000Z</published>
<content type="html">&lt;p&gt;在引導團隊進行 Retrospective 時，難免會遇到有些團隊思維比較跳躍，容易在對話進行中跑題、聊開。直接制止難免會掃興，讓對話氣氛凝滯；但放任又難免導致時間延宕，無法準時結束這場對話。&lt;/p&gt;
&lt;p&gt;我最近在處理引導這類團隊的對話時，會帶著一個 8 寸以上的 Time Timer，將這個 Timer 交給對話圈中，坐在我對面的夥伴。然後向團隊說，如果發現團隊開始跑題時，就請這位夥伴幫我們撥個一分鐘計時。&lt;/p&gt;
&lt;p&gt;當團隊看到這位夥伴撥動 Timer 時，就會意識到自己跑題了，然後就會開始有意識地收斂回來。就算來不及收斂，當 Timer 響了，我們也會遵守這樣的默契，回到對話的正軌上。&lt;/p&gt;</content>
    <category term="agile" />
  </entry>
  <entry>
    <title>閱讀《與成功有約：高效能人士的七個習慣》(1) 聯想</title>
    <link href="https://fntsr.tw/literatures/read-a-date-with-success-the-seven-habits-of-highly-effective-people-1-think/" />
    <id>https://fntsr.tw/literatures/read-a-date-with-success-the-seven-habits-of-highly-effective-people-1-think/</id>
    <updated>2021-02-12T03:05:34.000Z</updated>
    <published>2021-02-12T03:05:34.000Z</published>
<content type="html">&lt;p&gt;這本書是因為公司部門主管 Toh 所介紹的，與他在內部教育訓練所學有關。另外今年也在現任公司學習並且要推廣《執行力的修練：與成功有約的四個實踐原則》所提到的四項紀律，而該本書就是《與成功有約：高效能人士的七個習慣》的延續——把焦點落在「如何做到」的實際執行面。所以這本書一直就在我的待讀書單中，也終於在除夕這天的下午把這本書一次讀完。&lt;/p&gt;
&lt;p&gt;所謂的七個習慣，分別是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;主動積極 (Be proactive)&lt;/li&gt;
&lt;li&gt;以終為始 (Begin with the end in mind)&lt;/li&gt;
&lt;li&gt;要事第一 (First things first)&lt;/li&gt;
&lt;li&gt;雙贏思維 (Think win-win)&lt;/li&gt;
&lt;li&gt;知彼解己 (Seek first to understand, then to be understood)&lt;/li&gt;
&lt;li&gt;統合綜效 (Synergize)&lt;/li&gt;
&lt;li&gt;不斷更新 (Sharpen the Saw; Growth)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;正如柯維在書中所提，他是發現這些原則，而不是發明這些原則，在閱讀時我也不斷與自己的所學、經驗、生活不斷的有了連結，彷彿我讀的不完全是新知識，這些我其實隱約已經有所感悟，但是這本書透過更有系統的方式，以及補充了許多知識和案例和我閒聊這些感悟。&lt;/p&gt;
&lt;p&gt;在「主動積極」這個習慣，我會連結到的是之前閱讀《被討厭的勇氣：自我啟發之父「阿德勒」的教導》的感悟。的確我們都是有選擇權的，我可以選擇自己要怎麼詮釋。當時和同事在這本書的讀書會時，也曾探討佛洛伊德強調的是過去經驗導致現在的個體的概念與阿德勒倡導概念的衝突，這個疑惑也在本書得到的解惑——我們的確會因為過去的經驗，導致我們在受到什麼刺激時，慣性地採取某種回應，但是從刺激到慣性回應中有一個很大的空間，那就是「選擇的自由」，也就是阿德勒的理論，這對我來說是一個很好的詮釋；在這裡也不斷在心中回想起我崇尚的座右銘「擇己所愛，愛己所選」。&lt;/p&gt;
&lt;p&gt;在「以終為始」這個習慣，我會想起我同事 Maureen 常常講這個詞，也大概從字面上有些理解；另外也想起之前所讀的《OGSM打造高敏捷團隊：OKR做不到的，OGSM一頁企畫書精準達成！》一書，在設計方式上也是先從願景、目標談起，再細談測量與行動；也包括想起在落實《執行力的修練：與成功有約的四個實踐原則》時，也是先有落後指標 (lag measure) 後，再以此訂定領先指標 (leading measure)；不只如此，也想起最近在引導團隊思考時，我們常說的「想像畫面」，何嘗不是一種以終為始？&lt;/p&gt;
&lt;p&gt;在「要事第一」這個習慣，我則是與《執行力的修練：與成功有約的四個實踐原則》所提到的「極重要目標」(WIG，wildly important goal) 有了連結，想起了不管日常工作的炫風 (whirlwind) 如何佔據時間，我們都得為「極重要目標」佔據時間與專注力去執行；也想起了在實踐敏捷開發時，總是讓產品待辦清單按照優先度去排序，並在一個迭代中，只專注在交付一個目標與高優先度的待辦項目；而這個習慣也用在我的生活日常，我通常會為每天的工作與生活訂一個 Daily Goal，當天上班與下班時，就會以達成這個目標為主，正如我讀這本書是除夕這天的 Daily Goal 一般，訂定後我就會要求自己完成才能去做一些娛樂或是逃避目標的庶務。&lt;/p&gt;
&lt;p&gt;在「雙贏思維」這個習慣，相對來說有較多新的知識，能聯想到的是在主持開發團隊的 Retrospective、或是討論事情的對話中，遇到兩方立場對立、或是在指責時，我都會藉由提醒兩方都是在同一個團隊，只有對方好、成長時，自己以才會過得好，讓兩方往雙贏的方向思考。或是指出公司倡導的是怎樣的原則或文化，這和書中提到的《談判要訣》談及以原則為重心比堅持立場更能致勝的概念頗為相似。&lt;/p&gt;
&lt;p&gt;在「知彼解己」這個習慣，則讓我想起了平時的工作——ScrumMaster 的引導者姿態，總是需要好好聆聽我所服務夥伴的發言，並且嘗試複述（第一階段）、或者用自己的話詮釋自己的理解，詢問對方是否有誤（第二階段）、有時候會去向對方表述自己從對方言語感受的情緒是什麼（第三階段）、或是綜合以上去表示（第四階段）；也讓我想起透過李崇建老師的《薩提爾的對話練習：以好奇的姿態，理解你的內在冰山，探索自己，連結他人》一書所提到的數個案例，以及老師在某次演講的現場示範；以及，在文化事業學會 (ICA) 所學的深度匯談 (Dialogue) 裡，學習的聆聽與加深對話的各種技巧與原則。&lt;/p&gt;
&lt;p&gt;在「統合綜效」這個習慣，則是聯想到在現任公司開始信仰的價值觀——共創。我們落實 Sociocracy 的選舉、提案流程，在過程中的認可決階段，若是對進入認可決的候選人或方案有顧慮，都可以提出來，讓現場參與者共同嘗試消除；也想起 ScrumMaster 工具箱裡的「Yes, and …」這個觀念與即興句，先嘗試肯定對方所說，再加上自己的一些想法；最有感觸的應該還是引導 (Facilitate) 的觀念吧！每個人的主張都來自過去自己的經驗，我會開放的去接受並好奇的探詢。而 GFM 2 的團隊共創法更是包容在場所有人的聲音，並且逐漸收斂成每個人都擁有的結果。&lt;/p&gt;
&lt;p&gt;在「不斷更新」這個習慣，則不得不稱讚原文標題更為貼切，是直接引用了伐木工人顧著砍樹而不去磨利斧頭的故事。對我來說這也是我不斷在做的事——追求自己的成長，在年輕時盡量多投資自己最大的資產，也就是我自己。時時去投資自己的成長，是好的習慣，也是我不斷追求的，像是自費去學引導、願意付費去上健身教練課、不斷的去買書與閱讀；在敏捷的實踐上何嘗不是如此，保持開放性的持續學習——Keep Learning and Never Stop Improving。&lt;/p&gt;</content>
    <category term="agile" />
  </entry>
  <entry>
    <title>第 12 屆 iT 邦幫忙鐵人賽</title>
    <link href="https://fntsr.tw/announce/12th-ithome-ironman/" />
    <id>https://fntsr.tw/announce/12th-ithome-ironman/</id>
    <updated>2020-09-01T22:41:46.000Z</updated>
    <published>2020-09-01T22:41:46.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;https://ithelp.ithome.com.tw/2020-12th-ironman&quot;&gt;第 12 屆 iT 邦幫忙鐵人賽&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;在今天開賽了。這是我第 4 次參加鐵人賽。今年有三個不一樣的地方：&lt;/p&gt;
&lt;p&gt;其一，是我第一次參加團體組，和同事一起以「&lt;a href=&quot;https://ithelp.ithome.com.tw/2020-12th-ironman/signup/team/126&quot;&gt;威士忌打字機&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」的隊名參賽。不過我可沒有能耐每次寫文都喝一杯威士忌呀。這可是由 2 個 Scrum Master、1 個工程師加上一個曾經當過 PO 的豪華組合呀！歡迎大家多多關注。&lt;/p&gt;
&lt;p&gt;其二，是我終於不是多個主題一起開賽，有別於以往一次兩到三個主題一起寫，讓自己陷入修羅，今年決定和平一點，每七天決定是否多開一個主題。&lt;/p&gt;
&lt;p&gt;其三，是我竟然為系列文寫綱要了！這和過往每天在寫題目的做法截然不同。究竟我為什麼有這個改變，以及我怎麼擬綱要，就往下閱讀下去吧！&lt;/p&gt;
&lt;p&gt;今天開始了我的第一個主題系列文&lt;a href=&quot;https://ithelp.ithome.com.tw/users/20103676/ironman/3446&quot;&gt;《為自己學習成為 Scrum Master 的經驗分享》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。主要是講述我進兩年半成為 Scrum Master 的學習歷程，會用淺白的文字、說故事的語氣，和大家聊聊這段過去經歷過的事情、閱讀過的好書、參加過的聚會的等等。&lt;/p&gt;
&lt;p&gt;若是在七天後我又多開了一個主題，再讓我更新這篇文章讓大家知道吧～&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;在這篇文章也記錄這次書寫的方式。&lt;/p&gt;
&lt;p&gt;我這次使用了 &lt;a href=&quot;https://miro.com/&quot;&gt;Miro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 協助我制定系列文的大綱。與其說是大綱，不如說是關鍵字。我先建立了 30 張空白黃色便利貼用來寫關鍵字，看著題目去思考我想寫些什麼，每一概念就寫填寫一張便利貼，然後我也可以知道我還剩幾張便利貼要寫關鍵字。編寫可能就順便為一些關鍵字用藍色便利貼建立一個群組，這個群組可能是分類、或是時期、或是更概括的觀念。有了群組後，我也可以透過群組得到更多發想去寫可能原本沒想到的關鍵字。然後逐漸把 30 張黃色便利貼寫滿，我這個主題的綱要就完成囉！&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/12th-Ironman-Template.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/12th-Ironman-Template.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
用便利貼寫關鍵字去組成大綱，這裡是用 Miro 去實踐&lt;/p&gt;
&lt;p&gt;這樣做的好處就是我是用發散的方式去想我要寫什麼，而不會一開始就被架構給束縛著我的想法。而且隨時方便調整，不一定要按照這樣的綱要去寫，隨時可以增減關鍵字，甚至寫一些額外的關鍵字，也可以在該個關鍵字寫起來內容太多時去拆分。當了兩年多的 Scrum Master，我的腦袋都成了便利貼的形狀了呢～&lt;/p&gt;
&lt;p&gt;另外，有別於過去幾年使用 &lt;a href=&quot;https://bear.app/&quot;&gt;Bear App&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 去書寫文章，我這次改用在&lt;a href=&quot;https://blog.starrocket.io/posts/category/podcast/&quot;&gt;星箭廣播 Podcast&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 常被提到的 &lt;a href=&quot;https://ulysses.app/&quot;&gt;Ulysses&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 作為邊寫工具。其實去年在寫文就有嘗試過，但後來還是放棄。會有這樣的改變主要是我有在訂閱的 &lt;a href=&quot;https://blog.starrocket.io/posts/setapp-is-a-netflix-for-mac-apps-service-create-a-triple-wins-for-developers-consumers-and-itself/&quot;&gt;App 界 Netflix&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;——&lt;a href=&quot;https://setapp.com/&quot;&gt;Setapp&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 服務裡面有，而且也推出 iOS 可以使用的模式。介面似乎也改版過，變得比較合我胃口，所以就想說來用它來寫文章。當然，更重要的是，他也是基於 Markdown 語法的文字編輯器囉！不然可能連考慮都不考慮了，哈。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/CleanShot-2020-09-03-at-23.41.02.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/CleanShot-2020-09-03-at-23.41.02.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
這是 Ulysses 的介面，簡潔實用&lt;/p&gt;</content>
    <category term="conference" />
  </entry>
  <entry>
    <title>將部落格搬到新的魚缸 (?)</title>
    <link href="https://fntsr.tw/announce/migrated-blog-environments/" />
    <id>https://fntsr.tw/announce/migrated-blog-environments/</id>
    <updated>2020-08-21T11:39:02.000Z</updated>
    <published>2020-08-21T11:39:02.000Z</published>
<content type="html">&lt;p&gt;原本架設部落格的 VPS 是 6 年前建立的，Ubuntu 版本已經滿舊的，而 WordPress 使用的 Image 中 PHP 版本也過舊，舊到 WordPress 的 Console 都出現警告，所以乾脆就重新架設。這次實作了一些修改了一些架構，這邊做個紀錄分享。&lt;/p&gt;
&lt;p&gt;原本是在 VPS 上直接安裝 nginx，設定檔都是放在 VM 上；然後透過 Docker 搭配 Docker-Compose 去架設 WordPress 和 Database，並將 WordPress 的 Port 映射到 Host (VM) 上，最後由 nginx 進行 reverse proxy。&lt;/p&gt;
&lt;p&gt;這樣的架構缺點是，nginx 與 VPS 上的連結性是強的，我如果想要換 VPS 或是進行備份，都會是相對麻煩的。另外 WordPress 的 Port 映射到 Host 上，在安全性上是沒那麼好的做法，用 reverse proxy 其中一個目的就是不希望使用者知道 service 實際 IP 和 Port，但原有的設計卻還是將 Port 公開出去，是有點矛盾的做法，雖然應該也能透過網路設定讓只有 local 可以連線，但若是只專一將連線只開放給 nginx 會更好。&lt;/p&gt;
&lt;p&gt;新的做法改用我一直很想嘗試的事情，就是 Dockerize nginx service ，這樣 nginx service 就可以和 VM 切開。網路部分就善用了 docker-compose 2 推出的 network 設定，讓 nginx 自己一個 network，並且讓有需要對外連線的服務加入這個 network，這樣對 nginx 就能透過 reverse proxy 將該服務對外連線，達到只將連線方式只開放給 nginx 的目的。&lt;/p&gt;
&lt;p&gt;另外，也嘗試了 VPS Provider 提供的 Volumes 功能，將 nginx 與 wordpress 等 services 的資料都存在另外掛在 VPS 的 Volumes 上。這樣未來想要直接將 VPS 砍掉重練也非常容易，因為 Volumes 是可以隨時掛卸載的。而且 Volumes 是可以單獨做 Snapshot，這樣就比較節省空間資源，又可以只針對重要資料做備份了。&lt;/p&gt;
&lt;p&gt;原本也有在考慮要不要趁機玩 Kubernates，但是會發現有點殺雞用牛刀的感覺，而且這把牛刀的價格還不便宜，所以就作罷了。&lt;/p&gt;
&lt;p&gt;大概是這樣，這邊主要是個紀錄。&lt;br&gt;
相關技術細節有機會再另外寫一篇文章分享。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>Scrum 相關事件的時間長度建議</title>
    <link href="https://fntsr.tw/articles/suggested-duration-of-scrum-related-events/" />
    <id>https://fntsr.tw/articles/suggested-duration-of-scrum-related-events/</id>
    <updated>2019-05-07T01:12:52.000Z</updated>
    <published>2019-05-07T01:12:52.000Z</published>
<content type="html">&lt;p&gt;這些資訊是參考自《Essential Scrum》的建議去筆記的，並非來自於個人的經驗，畢竟我引導的團隊和會議數還太少了。&lt;/p&gt;
&lt;h2 id=&quot;建議的時間長度&quot;&gt;建議的時間長度&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;一個時間長度為兩週一個月的衝刺，用於衝刺規劃的時間應該不超過 4 至 8 小時。&lt;/p&gt;
&lt;p&gt;在為期兩週的衝刺裡，衝刺執行可能佔了總共十天裡大約八天的時間。&lt;/p&gt;
&lt;p&gt;在進行衝刺時的每一天，而且最好在同樣的時間，開發團隊應該召開一個不超過十五分鐘的每日 Scrum 會議⋯⋯&lt;/p&gt;
&lt;p&gt;每日 Scrum 會議是為時 15 分鐘、有時間限制的活動，每 24 小時一次就進行一次。&lt;/p&gt;
&lt;p&gt;團隊應該保留不超過 10% 的時間，用來協助產品負責人修整產品待辦清單（撰寫、精煉、估算待辦清單，以及排列優先順序），確保這些項目已準備就緒。&lt;/p&gt;
&lt;p&gt;一般來說，衝刺成果審查以不超過 4 小時為原則。已經有許多團隊發像一項不錯的規則：「衝刺若為一週，換算成會議時間就是一小時」。&lt;/p&gt;
&lt;p&gt;根據我的經驗，新的 Scrum 團隊保留的時間常常太少，在不到 60 分鐘的時間裡，很難進行一次有意義的衝刺過程回顧。有一條規則：針對為期兩週的衝刺，我通常會保留大約 1.5 個小時來進行衝刺過程回顧，衝刺時間若較長，則按比例增加回顧時間。&lt;/p&gt;
&lt;p&gt;——《Essential Scrum 中文版》，p.347、p.353、p.361、p.369、 p.381、p.394&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The heart of Scrum is a Sprint, a time-box of one month or less during which a “Done”, useable, and potentially releasable product Increment is created.&lt;/p&gt;
&lt;p&gt;Sprint Planning is time-boxed to a maximum of eight hours for a one-month Sprint. For shorter Sprints, the event is usually shorter. &lt;/p&gt;
&lt;p&gt;The Daily Scrum is a 15-minute time-boxed event for the Development Team. The Daily Scrum is held every day of the Sprint. At it, the Development Team plans work for the next 24 hours. &lt;/p&gt;
&lt;p&gt;This is at most a four-hour meeting for one-month Sprints. For shorter Sprints, the event is usually shorter.&lt;/p&gt;
&lt;p&gt;Refinement usually consumes no more than 10% of the capacity of the Development Team. &lt;/p&gt;
&lt;p&gt;This is at most a three-hour meeting (Retrospective) for one-month Sprints. For shorter Sprints, the event is usually shorter.&lt;/p&gt;
&lt;p&gt;——《Scrum Guide》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;綜合上面的引文，我們大概可以得出下面的概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sprint 的長度，以不超過一個月為原則。&lt;/li&gt;
&lt;li&gt;Sprint Planning 的時間按比例來算的話，大概是 2 個小時/週為單位。&lt;/li&gt;
&lt;li&gt;Spring Execution 大約會佔據整個衝刺日程的 80%。&lt;/li&gt;
&lt;li&gt;Daily Scrum 不超過 15 分鐘。&lt;/li&gt;
&lt;li&gt;Sprint Review 的時間按比例來算的話，大概是 1 個小時/週為單位。&lt;/li&gt;
&lt;li&gt;Product Backlog refinement 不能超過整個衝刺時間長度的 10%。&lt;/li&gt;
&lt;li&gt;Spring Retrospective 比較特別，他至少會需要 1 小時，然後再以 1.5 個小時 / 2 週為單位。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;各種長度衝刺的活動時長&quot;&gt;各種長度衝刺的活動時長&lt;/h2&gt;
&lt;h3 id=&quot;1-week--sprint&quot;&gt;1 week / sprint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;通常會有 5 個工作天，假設 1 天工作 6 小時。&lt;/li&gt;
&lt;li&gt;Sprint Planning 以不超過 2 小時為原則。&lt;/li&gt;
&lt;li&gt;Spring Execution 在扣除 Scrum Events 後，大致只剩 4 個工作天。&lt;/li&gt;
&lt;li&gt;Sprint Review 大致為 1 小時。&lt;/li&gt;
&lt;li&gt;Product Backlog refinement 的總時長不超過 3 小時，若是平均分攤到每天，則每天不超過 35 分鐘。&lt;/li&gt;
&lt;li&gt;Spring Retrospective 大致為 1 小時。&lt;/li&gt;
&lt;li&gt;通常建議將 Planning 放在週一，Review 和 Retro. 放在週五；但也有團隊希望能集中在同一天，所以會在某一天耗時 4 小時將這三個活動辦完。&lt;/li&gt;
&lt;li&gt;實際工作時間約為 23 小時。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-weeks--sprint&quot;&gt;2 weeks / sprint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;通常會有 10 個工作天，假設 1 天工作 6 小時。&lt;/li&gt;
&lt;li&gt;Sprint Planning 以不超過 4 小時為原則。&lt;/li&gt;
&lt;li&gt;Spring Execution 在扣除 Scrum Events 後，大致只剩 8 個工作天。&lt;/li&gt;
&lt;li&gt;Sprint Review 以不超過 2 小時為原則。&lt;/li&gt;
&lt;li&gt;Product Backlog refinement 的總時長不超過 6 小時，若是平均分攤到每天，則每天不超過 35 分鐘。&lt;/li&gt;
&lt;li&gt;Spring Retrospective 大致為 1.5 小時。&lt;/li&gt;
&lt;li&gt;大致聽過以下幾種方式舉行三大活動：
&lt;ul&gt;
&lt;li&gt;將 Planning 放在週一，Review 和 Retro. 放在下週五，這是最常聽到的；&lt;/li&gt;
&lt;li&gt;將 Planning、Review、Retro. 按照順序舉行，但安排日程不定；&lt;/li&gt;
&lt;li&gt;有些特殊情況團隊希望能集中在同一天，所以會在某一天耗時 7.5 小時將這三個活動辦完。但這部分會很消耗團隊體力，通常到最後一個活動時就比較沒精神了，隔天可能也會比較沒有產能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;實際工作時間約為 46.5 小時。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-weeks--sprint&quot;&gt;3 weeks / sprint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;通常會有 15 個工作天，假設 1 天工作 6 小時。&lt;/li&gt;
&lt;li&gt;Sprint Planning 以不超過 6 小時為原則。&lt;/li&gt;
&lt;li&gt;Spring Execution 在扣除 Scrum Events 後，大致只剩 12 個工作天。&lt;/li&gt;
&lt;li&gt;Sprint Review 以不超過 3 小時為原則。&lt;/li&gt;
&lt;li&gt;Product Backlog refinement 的總時長不超過 9 小時，若是平均分攤到每天，則每天不超過 35 分鐘。&lt;/li&gt;
&lt;li&gt;Spring Retrospective 大致為 2 小時 15 分鐘。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-weeks--sprint&quot;&gt;4 weeks / sprint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;通常會有 20 個工作天，假設 1 天工作 8 小時。&lt;/li&gt;
&lt;li&gt;Sprint Planning 以不超過 8 小時為原則。&lt;/li&gt;
&lt;li&gt;Spring Execution 在扣除 Scrum Events 後，大致只剩 16 個工作天。&lt;/li&gt;
&lt;li&gt;Sprint Review 以不超過 4 小時為原則。&lt;/li&gt;
&lt;li&gt;Product Backlog refinement 的總時長不超過 12 小時，若是平均分攤到每天，則每天不超過 35 分鐘。&lt;/li&gt;
&lt;li&gt;Spring Retrospective 大致為 3 小時。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;這上面都是建議的數值而已，實際還是要以專案大小、團隊成立時間長短、團隊成員數量、是否有遠距離/遠端的團隊成員等等去調整。重點還是在盡量定期、定時去舉行，培養出團隊對於衝刺和相關事件的節奏感，這樣習慣之後，才能保持最適合團隊進行「衝刺」的壓力與步調穩定前進。&lt;/p&gt;</content>
    <category term="scrum" />
    <category term="agile" />
  </entry>
  <entry>
    <title>任職 ScrumMaster @ Titansoft</title>
    <link href="https://fntsr.tw/announce/working-as-scrum-master-at-titansoft/" />
    <id>https://fntsr.tw/announce/working-as-scrum-master-at-titansoft/</id>
    <updated>2019-05-02T10:02:00.000Z</updated>
    <published>2019-05-02T10:02:00.000Z</published>
<content type="html">&lt;p&gt;補個紀錄。&lt;/p&gt;</content>
    <category term="scrum" />
    <category term="agile" />
  </entry>
  <entry>
    <title>PChome &amp; Skype 服務資料填寫遇到地址不正確的問題</title>
    <link href="https://fntsr.tw/articles/how-to-workaround-addressed-incorrect-issue-when-fill-application-on-pchome-skype-service/" />
    <id>https://fntsr.tw/articles/how-to-workaround-addressed-incorrect-issue-when-fill-application-on-pchome-skype-service/</id>
    <updated>2019-03-04T20:04:57.000Z</updated>
    <published>2019-03-04T20:04:57.000Z</published>
<content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;
推測前端頁面提供的路名選單，與後端驗證的路名白名單並不一致，導致出現了前端提供了可選但是不合驗證的路名選項。要解決這個問題，只能請客服協助或是選填其他的路名。 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Skype 是 Microsoft 提供的服務，在國內則是由 PChome 代理，所以舉凡相關服務都必須透過 PChome 提供的「PChome ONLINE &amp;#x26; Skype」服務網站進行。而在儲值或是線上購買點數前，為了符合 NCC（國家通訊通訊傳播委員會）公布的第二類電信法規，都必須填寫個人資料，而問題也就是出在這份資料填寫的表單上。在該表單上會有一個「戶籍地址」的欄位，提供下拉式選單讓使用者選擇城市、鄉鎮市區、路名以及一個文字表單填寫剩下的地址資訊。&lt;/p&gt;
&lt;p&gt;當我填寫正確資訊時，卻不斷回傳說我地址不正確的訊息（圖一）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，卻又不詳細說明是怎樣不符合。就算該文字表單留白，也只有「請輸入完整地址剩餘部分，可參考左側『輸入說明』再做填寫」的訊息提示（圖二），但完全沒看到任何的「左側『輸入訊息』」，對於這份表單完全不得其解。表單最下方雖然也有「請注意：姓名及地址欄位需輸入中文繁體字及半型數字」的訊息（圖三），但是我填寫的資料的確是符合規格的。種種缺陷只能讓使用者如我不斷的推測、鬼打牆，最後充滿沮喪以及憤怒的情緒，得到了一個非常差勁的使用體驗。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-19.35.15.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-19.35.15.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
圖一&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-19.35.27.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-19.35.27.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
圖二&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-18.10.30.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2019-03-04-18.10.30.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
圖三&lt;/p&gt;
&lt;p&gt;為了解決問題，也只能透過 Google 搜尋，其中看到了 PTT 論壇 VoIP 看板中的&lt;a href=&quot;https://www.ptt.cc/bbs/VoIP/M.1278323044.A.5E9.html&quot;&gt;〈問題 Skype地址認證的問題〉&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;一文，裡面有位鄉民 WolfLord 回覆：「他們程式會把某些道路當玩笑，打電話去罵就可以處理了」&lt;/p&gt;
&lt;p&gt;這個訊息讓我推斷可能是後端驗證的問題。也透過瀏覽器提供的開發者工具，去排除可能是文字表單沒有送出的情況，並得知城市、鄉鎮市區、路名的下拉式選單是寫死在 &lt;code&gt;dvs_data.js&lt;/code&gt; 這個腳本檔案中，而不是另外再向後端詢問的，所以可能是兩套不同的清單。接著，想到我的戶籍地址是近幾年從「一名多路」分解出來的新路名，結合上述的資訊，有了一個推斷：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前端頁面提供的路名選單，與後端驗證的路名白名單並不一致，所以就算在前端頁面選擇了一個它提供的路名選項，但資料送去後端仍有可能被判定為不正確的路名。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最後，我將路名改成為我前戶籍地址，這場鬼打牆就結束了，成功更新了我的個人資料，可喜可賀、可喜可賀⋯⋯個鬼啦！被這種問題浪費了這麼多的時間真不是一件直得高興的事。這個結果也證實了我的推斷的可能性非常高，寫下這篇文記錄，提供給同樣的受害者，並希望 PChome 能儘速改善這個問題。&lt;/p&gt;
&lt;hr&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;為保護本人個資，截圖的下拉式選單中以第一個選項作為示範，並不代表實際會有問題的選項。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>第 10 屆 iT 邦幫忙鐵人賽</title>
    <link href="https://fntsr.tw/announce/10th-ithome-ironman/" />
    <id>https://fntsr.tw/announce/10th-ithome-ironman/</id>
    <updated>2018-10-22T20:23:30.000Z</updated>
    <published>2018-10-22T20:23:30.000Z</published>
<content type="html">&lt;p&gt;雖然去年失敗了，含前言只發表了五篇就都「待補」了，但這一屆還是嘗試參加看看。因為各種因素，總共報名了三個主題，但只要應該會專注在 Agile 這個主題，其他主題只是順便的。和去年不一樣，我今年不會同步和部落格一起發文，而會等到比賽結束、再找時間編修一次後，才會發到部落格上。&lt;/p&gt;
&lt;h5 id=&quot;為團隊與組織導入敏捷的經驗分享&quot;&gt;為團隊與組織導入敏捷的經驗分享&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;Agile: &lt;a href=&quot;https://ithelp.ithome.com.tw/users/20103676/ironman/1856&quot;&gt;為團隊與組織導入敏捷的經驗分享&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
這近一年的時間，身為一個尚無經驗的敏捷信仰者，陸續嘗試為團隊與組織導入敏捷方法與精神。我將在這 30 天內，陸續分享一些經驗以及見解，希望能給想到入敏捷的團隊一點幫助與發想。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;會已完成這個主題為主力，算是為這一年的工作經驗做個沈澱和分享。&lt;/p&gt;
&lt;h5 id=&quot;軟體開發隨筆談&quot;&gt;軟體開發隨筆談&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;Software Development: &lt;a href=&quot;https://ithelp.ithome.com.tw/users/20103676/ironman/1855&quot;&gt;軟體開發隨筆談&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
其實我原本是只有要報名 Agile 主題，但選太快不小心報錯了，但是又不能撤銷報名。只好把這邊修改一下，如果有餘力就簡單談點去年沒完成的經驗分享吧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果上一個主題比較專注在人、團隊與敏捷，那這個主題會比較著重在軟體和程式碼本身相關的論述。&lt;/p&gt;
&lt;h5 id=&quot;我或許沒那麼懂-web&quot;&gt;我或許沒那麼懂 Web&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;Modern Web: &lt;a href=&quot;https://ithelp.ithome.com.tw/users/20103676/ironman/2080&quot;&gt;我或許沒那麼懂 Web&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
聽說有「iT邦鐵人賽 × ModernWeb’19 聯合企劃」，報名個。但我或許沒那麼懂 Web，怎麼辦呢？嘛，勇者顧慮太多，或許就不敢衝了，先報再說。（欸&lt;/p&gt;
&lt;p&gt;我可能有時間寫完 30 篇，也可能沒有，甚至只寫個三篇就忘了這裡。我大概也沒有想要長篇大論，也沒想要訂個大綱，或許每篇的相關性也不高。到底該寫什麼，在報名的當下其實我也沒想。&lt;/p&gt;
&lt;p&gt;到底會寫出什麼，其實也不需期待，也不用在意。&lt;br&gt;
反正，我或許也沒那麼懂 Web。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;這個部分比較算是研究筆記，品質不一。&lt;/p&gt;</content>
    <category term="conference" />
  </entry>
  <entry>
    <title>Fw: 敏捷宣言背後的原則</title>
    <link href="https://fntsr.tw/literatures/principles-behind-the-agile-manifesto/" />
    <id>https://fntsr.tw/literatures/principles-behind-the-agile-manifesto/</id>
    <updated>2018-06-19T08:12:01.000Z</updated>
    <published>2018-06-19T08:12:01.000Z</published>
<content type="html">&lt;p&gt;本篇可以搭配 &lt;a href=&quot;https://blog.fntsr.tw/articles/2018/02/21/manifesto-for-agile-software-development/&quot;&gt;敏捷軟體開發宣言&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 閱讀。&lt;/p&gt;
&lt;p&gt;以下為〈敏捷宣言背後的原則〉（Principles behind the Agile Manifesto）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 的複本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5 id=&quot;敏捷宣言背後的原則&quot;&gt;敏捷宣言背後的原則&lt;/h5&gt;
&lt;p&gt;我們遵守這些原則：&lt;br&gt;
我們最優先的任務，&lt;br&gt;
是透過及早並持續地交付有價值的軟體&lt;br&gt;
來滿足客戶需求。&lt;/p&gt;
&lt;p&gt;竭誠歡迎改變需求，甚至已處開發後期亦然。&lt;br&gt;
敏捷流程掌控變更，以維護客戶的競爭優勢。&lt;/p&gt;
&lt;p&gt;經常交付可用的軟體，&lt;br&gt;
頻率可以從數週到數個月，&lt;br&gt;
以較短時間間隔為佳。&lt;/p&gt;
&lt;p&gt;業務人員與開發者&lt;br&gt;
必須在專案全程中天天一起工作。&lt;/p&gt;
&lt;p&gt;以積極的個人來建構專案，&lt;br&gt;
給予他們所需的環境與支援，&lt;br&gt;
並信任他們可以完成工作。&lt;/p&gt;
&lt;p&gt;面對面的溝通&lt;br&gt;
是傳遞資訊給開發團隊及團隊成員之間&lt;br&gt;
效率最高且效果最佳的方法。&lt;/p&gt;
&lt;p&gt;可用的軟體是最主要的進度量測方法。&lt;/p&gt;
&lt;p&gt;敏捷程序提倡可持續的開發。&lt;br&gt;
贊助者、開發者及使用者應當能不斷地維持穩定的步調。&lt;/p&gt;
&lt;p&gt;持續追求優越的技術與優良的設計，&lt;br&gt;
以強化敏捷性。&lt;/p&gt;
&lt;p&gt;精簡──或最大化未完成工作量之技藝──是不可或缺的。&lt;/p&gt;
&lt;p&gt;最佳的架構、需求與設計皆來自於&lt;br&gt;
能自我組織的團隊。&lt;/p&gt;
&lt;p&gt;團隊定期自省如何更有效率，&lt;br&gt;
並據之適當地調整與修正自己的行為。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;原文如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5 id=&quot;principles-behind-the-agile-manifesto&quot;&gt;Principles behind the Agile Manifesto&lt;/h5&gt;
&lt;p&gt;We follow these principles:&lt;br&gt;
Our highest priority is to satisfy the customer&lt;br&gt;
through early and continuous delivery&lt;br&gt;
of valuable software.&lt;/p&gt;
&lt;p&gt;Welcome changing requirements, even late in&lt;br&gt;
development. Agile processes harness change for&lt;br&gt;
the customer’s competitive advantage.&lt;/p&gt;
&lt;p&gt;Deliver working software frequently, from a&lt;br&gt;
couple of weeks to a couple of months, with a&lt;br&gt;
preference to the shorter timescale.&lt;/p&gt;
&lt;p&gt;Business people and developers must work&lt;br&gt;
together daily throughout the project.&lt;/p&gt;
&lt;p&gt;Build projects around motivated individuals.&lt;br&gt;
Give them the environment and support they need,&lt;br&gt;
and trust them to get the job done.&lt;/p&gt;
&lt;p&gt;The most efficient and effective method of&lt;br&gt;
conveying information to and within a development&lt;br&gt;
team is face-to-face conversation.&lt;/p&gt;
&lt;p&gt;Working software is the primary measure of progress.&lt;/p&gt;
&lt;p&gt;Agile processes promote sustainable development.&lt;br&gt;
The sponsors, developers, and users should be able&lt;br&gt;
to maintain a constant pace indefinitely.&lt;/p&gt;
&lt;p&gt;Continuous attention to technical excellence&lt;br&gt;
and good design enhances agility.&lt;/p&gt;
&lt;p&gt;Simplicity–the art of maximizing the amount&lt;br&gt;
of work not done–is essential.&lt;/p&gt;
&lt;p&gt;The best architectures, requirements, and designs&lt;br&gt;
emerge from self-organizing teams.&lt;/p&gt;
&lt;p&gt;At regular intervals, the team reflects on how&lt;br&gt;
to become more effective, then tunes and adjusts&lt;br&gt;
its behavior accordingly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham ,Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas&lt;/p&gt;
&lt;p&gt;著作權為上述作者所有，2001 年&lt;br&gt;
此宣言可以任何形式自由複製，但須附上連同此聲明在內之完整內容。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Jeff Sutherland, Ken Schwaber, Alistair Cockburn (2001). Manifesto for Agile Software Development. Retrieved from &lt;a href=&quot;http://agilemanifesto.org/iso/en/manifesto.htm&quot;&gt;http://agilemanifesto.org/iso/en/manifesto.htm&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="agile" />
  </entry>
  <entry>
    <title>如何敘述異常回報</title>
    <link href="https://fntsr.tw/articles/how-to-describe-a-bug-report/" />
    <id>https://fntsr.tw/articles/how-to-describe-a-bug-report/</id>
    <updated>2018-06-02T10:58:10.000Z</updated>
    <published>2018-06-02T10:58:10.000Z</published>
<content type="html">&lt;blockquote&gt;
&lt;p&gt;本文是今年在 IThome 鐵人賽所寫的文章，好像也是唯一有完整釋出的文章（艸），用心寫完這篇就好既無力了 XD。在這邊稍微把這篇原本分四天的文章進行整併、校閱，讓有興趣閱讀的人可以讀得比較舒適。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;今天來講講如何敘述一個議題（issue），通常議題有分兩種，一種是功能請求（feature request），另一種是異常回報（bug report）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。由於功能請求中關於需求的描述會涉及不少知識與經驗，使用者和工程師的相關描述可能又大不相同，這方面的知識很難一次論述完整；而異常回報的描述則較為通泛，主要是講述在回報異常時，應該要附上哪些資訊會對開發者更有幫助，不太區分角色，較為簡單。所以本篇先著重在怎樣描述異常。&lt;/p&gt;
&lt;h2 id=&quot;情境&quot;&gt;情境&lt;/h2&gt;
&lt;p&gt;「為什麼我們要學會如何描述一個問題（異常）呢？問題描述有什麼難的？不就是把遇到的問題講出來就好了嗎？難道我講的還不夠清楚嗎？」我想這是多數使用者甚至少數開發者聽到這個主題會有的疑惑，事實上這是很正常的反應，對於多數異常回報者來說，他們已經盡力地把遇到的異常行為描述出來了，他們眼中的異常就是這樣，對於協助我們指出異常的使用者，我們很難用比較強硬的態度說：「這些資訊太少了，我不接受」。到最後我們也只能抱著疑惑的心情嘗試找出使用者遇到的異常，但在資訊不足的情況下，這些異常通常都石沈大海。尷尬的是，你若把異常議題關掉、結案，使用者可能還會抗議，於是這些議題就成為議題追蹤工具（issue tracker）的萬年大石頭，卡在那邊不上不下。&lt;/p&gt;
&lt;p&gt;崩潰的是，在議題追蹤工具裡不只前述的項目卡在那裡，甚至有更多的陳年議題是前輩們留下來的。裡面只簡短地用兩三句話（甚至更短、或只有標題）描述遇到什麼問題，再沒有其他資訊。我們看不懂這個問題到底在說什麼，我們也不知道這個問題要怎麼重現，我們更不知道這個問題是哪個版本的事，是不是在現在的版本已經不會出現了？抱著疑惑、抱著頭，我們・真的・非常・苦惱。 _(:3」∠)＿&lt;/p&gt;
&lt;h2 id=&quot;目的&quot;&gt;目的&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;在回報異常時提供充足的資訊，能夠讓開發者更快解決。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;是的，當我們在回報異常時提供充足的資訊，會讓開發者更能精準判斷這個「症狀」的「病因」是什麼，才能更精準的解決軟體的病灶 &lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;，從而快速解決問題，既省下開發者的時間成本，使用者也能更快的享受異常排除的成果。&lt;/p&gt;
&lt;p&gt;所以學會如何描述異常是任何與這份程式有關聯的人都應該要知道的。使用者要知道、客服要知道、專案經理要知道、工程師更要知道。如此一來，使用者或客戶能夠明確將情況描述給開發團隊，讓這異常迅速排除，繼續愉快的使用產品。若是使用者沒有這份知識時，客服就要幫忙過濾，在與使用者的溝通中引導他們把這些資訊回答出來，避免讓不必要的雜訊干擾開發團隊的進度。專案經理更要嚴格把關將送進開發團隊的異常回報，要求客服把缺漏的資訊補上，讓開發團隊可以將時間專注在解決異常而不是重新尋找如何重現它。工程師則更應該要謹記，現在的詳細記錄異常資訊，可以讓我們都不再多背一袋技術債，絕對不要嫌麻煩而省略，不然未來將會耗費更多時間重新釐清這個異常。&lt;/p&gt;
&lt;h2 id=&quot;作法&quot;&gt;作法&lt;/h2&gt;
&lt;p&gt;那在回報異常前，我們應注意哪些事項呢？那就是查看當前的議題清單裡，有沒有和我們所遇到的異常相同的情況，避免重複（duplicate）回報。同樣的異常應該集中在同個議題討論，而不是散落在清單各處，這樣只會增加開發團隊的排除成本。當我們發現已經有既定異常議題存在時，可以先嘗試了解該討論串的內容，若仍然無法排除，則可以將原本要回報的內容，於該議題討論串中回覆，增加樣本數。&lt;/p&gt;
&lt;p&gt;那麼有哪些資訊是在回報異常時需要附上的呢？這邊先以清單的方式表述：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;標題（Title）&lt;/li&gt;
&lt;li&gt;版本（Version number）&lt;/li&gt;
&lt;li&gt;問題簡述（Describe the problem）&lt;/li&gt;
&lt;li&gt;重現步驟（Steps to reproduce）&lt;/li&gt;
&lt;li&gt;預期行為（ What I expected）&lt;/li&gt;
&lt;li&gt;實際行為（What happened instead）&lt;/li&gt;
&lt;li&gt;影像（Screenshot / Video）&lt;/li&gt;
&lt;li&gt;環境（Environments）&lt;/li&gt;
&lt;li&gt;脈絡或程式碼（Context / Source）&lt;/li&gt;
&lt;li&gt;備註（Additional details）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;標題title&quot;&gt;標題（Title）&lt;/h3&gt;
&lt;p&gt;無論是什麼類型的文章，有個好的標題就是一個好的開始，議題的標題更是如此。如何用最少的字把異常的輪廓描述出來，就是這個資訊需要探討的。&lt;/p&gt;
&lt;p&gt;在探討什麼是好的標題前，我們先說說什麼叫做不好的標題。讓人最討厭的標題莫過於內容農場式的標題，也就是講得很誇大，但卻什麼重點都沒提到，像是「這裡有一個很嚴重的問題造成程式崩潰了！」或是「緊急！這個異常讓客戶抓狂了！」等等。&lt;/p&gt;
&lt;p&gt;那到底標題要如何說清楚呢？把握一個原則就是至少詳細到不容易和其他類似異常搞混，以現實生活的情境來舉例，假設今天台中某處有個路燈壞了，你想舉報請市府趕緊請人維修：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;南區有個路燈壞了（Ｘ，太籠統，這樣同名不同處的異常可能會太多）&lt;/li&gt;
&lt;li&gt;南區台中路上靠近二二八公園處有路燈壞了（Ｏ，把異常發生的地點指名）&lt;/li&gt;
&lt;li&gt;南區台中路上靠近二二八公園處有路燈不斷閃爍（Ｏ，把故障狀況請得更清楚）&lt;/li&gt;
&lt;li&gt;南區編號 641549 的路燈不會亮（Ｏ，善用產品本身提供的除錯輔助資訊）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;另外多用客觀的描述取代主觀看法也會讓標題更好識別：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;網站的選單很難用，一直沒反應（Ｘ）&lt;/li&gt;
&lt;li&gt;網站的選單按鈕太小了，觸控容易失敗，或是誤觸其他按鈕（Ｏ）&lt;/li&gt;
&lt;li&gt;網頁會跳出奇怪的畫面，不知道發生什麼事（Ｘ）&lt;/li&gt;
&lt;li&gt;點擊編輯文章的按鈕，會跳出「We’re sorry, but something rent wrong」的畫面（Ｏ）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;版本version-number&quot;&gt;版本（Version number）&lt;/h3&gt;
&lt;p&gt;產品發生異常時的版本號非常重要，它可以開發者確認這個異常是在產品開發的什麼時間點發生的，是否已經在比較新的版本被修復了？或是該行為在以前沒問題，直到某個版本後才發生異常，開發者能透過版本號鎖定變動的位置，了解前後的脈絡，判斷是不是有一個變動提交（commit）沒有注意細節而引發了異常。&lt;/p&gt;
&lt;p&gt;若說標題和描述是讓開發者了解空間與事件，那麼版本就是讓開發者知曉時間。在兩者資訊充足的情況下，雙方對談就容易聚焦，而不是在跟平行世界的對方雞同鴨講。&lt;/p&gt;
&lt;p&gt;所以程式在釋出時應該要有一套版本號訂定風格，讓使用者在回報異常時，開發者能迅速聚焦在準確的範圍去除錯。若是程式是沒有明確版本號，提供程式當前版本控制紀錄中的資訊（通常是最後一次提交的雜湊值（Hash））也是個方式。&lt;/p&gt;
&lt;h3 id=&quot;問題描述describe-the-problem&quot;&gt;問題描述（Describe the problem）&lt;/h3&gt;
&lt;p&gt;如果好的標題是一個好的開始，那麼問題簡述就是把這個好的開始延續下去。標題通常必須一句話簡述整個異常的輪廓，那問題描述就是把異常的細節描繪出來。標題中省略的細節、脈絡，或是你對這個問題的觀察和看法，都可以在這裡好好詳述。若同樣以路燈為例，那大概就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;南區台中路上靠近二二八公園處有路燈壞了，它時不時在閃爍。這附近只有這個路燈有異常現象，其他路燈都是好的，該路燈的編號是 641549 。看它的桿身似乎有被撞擊過的痕跡，或許是最近被車輛擦撞過導致線路異常？我沒有很確定。詢問過附近的居民，似乎在前天還是好的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在這個例子，可以看到除了標題所提到的資訊外，還多了許多來自於回報者的觀察，讓我們可以有更多資訊的得以除錯。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;異常描述：閃爍&lt;/li&gt;
&lt;li&gt;同型比較：和其他路燈相比&lt;/li&gt;
&lt;li&gt;產品資訊：路燈編號&lt;/li&gt;
&lt;li&gt;額外表徵：被撞擊過的痕跡&lt;/li&gt;
&lt;li&gt;個人推斷：或許是被擦撞過導致線路異常&lt;/li&gt;
&lt;li&gt;其他資訊：詢問居民&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用路燈來描述可能還是有點籠統，很難和實際程式做聯想結合，這邊改以登入發生錯誤的情境作為舉例：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用帳號密碼登入後，會跳到顯示 We’re sorry, but something went wrong 的畫面&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;輸入帳號密碼登入後沒有跳到正常頁面，而是顯示錯誤訊息的頁面（異常描述），出現錯誤訊息的網址是 &lt;code&gt;https://xxx.xxx.xxx/ooo?a=aaa&amp;#x26;b=bbb&lt;/code&gt;（產品資訊）。其他頁面似乎都正常，透過社交平台登入的功能也正常（同型比較）。不管輸入的帳號密碼是否正確都會報錯。我不知道發生什麼事，會不會是帳號密碼驗證的程序出錯？因為社交平台登入是正常的（個人推斷）。問過朋友，他們使用帳號密碼登入也有同樣的異常。有朋友說早上七點時還是正常的（其他資訊）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;當然，這些特徵與資訊項目都只是舉例，每個專案或情境可以提供的資訊類型都不相同，但希望這樣舉例能讓讀者們稍微了解「問題描述」與「標題」的差異，以及有什麼細節是可以提供的。&lt;/p&gt;
&lt;h3 id=&quot;重現步驟steps-to-reproduce&quot;&gt;重現步驟（Steps to reproduce）&lt;/h3&gt;
&lt;p&gt;重現步驟就是指經過哪些動作後，就一定會引發這個異常。這是讓開發者代入異常發生情境很重要的資訊。如果沒有提供重現步驟，開發者就要耗費更多時間去分析到底發生了什麼事，然後嘗試要如何重現，能將異常重現後才能開始進行除錯。如果直接提供重現步驟，那開發者就能直接面對異常，然後依照他的經驗快速除錯。&lt;/p&gt;
&lt;p&gt;有重現步驟的異常回報，也容易使回報者和開發團隊站在同一個視角，而不是使用者一直在幹譙，然後開發團隊只能不斷道歉，卻還是找不到異常發生的原因，或是直接丟給使用者「這在我電腦是正常的！（It works on my computer!）」交差了事。當開發團隊非常努力想透過回報者的描述去重現異常，卻一直失敗時，面對回報者的催促，有可能會產生負面情緒，認為回報者是來鬧的，畢竟在兩者的觀點上，對方描述的事情都是沒發生過的呀！&lt;/p&gt;
&lt;p&gt;若是該異常無法百分之百重現，也要在這裡特別講明。儘管沒有一個肯定能重現的步驟，但仍可以試著把可能會發生異常的步驟寫出來，讓開發者了解到底再發生這個異常前，會經歷過什麼事，導致有機率觸發異常。回報者也需要有著「在沒有有永遠能重現異常的步驟時，這個議題可能會需要耗費較長時間除錯」的心理準備。&lt;/p&gt;
&lt;p&gt;好的重現步驟在於一個指令一個步驟，先以上節提到的登入異常為例，大致如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;進入網站（&lt;code&gt;https://www.xxxx.tw&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;點擊首頁右上方的「登入」按鈕。&lt;/li&gt;
&lt;li&gt;再登入表單中輸入帳號密碼。&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;p&gt;若回報者在使用產品時，有了一些非預期行為是開發者當初沒有想到的，就可以讓開發者不被既有的觀點束縛，突破盲點而瞭解錯誤的原因。畢竟我們都知道，身為開發者去執行一些情境，都一定會預設我們心中已經非常熟悉的合法步驟，而不會意識到有其他非預期行為的可能。&lt;/p&gt;
&lt;p&gt;另外，若是能夠在每個步驟都附上畫面截圖，也會減少對步驟執行的誤解，並透過畫面提供了回報者可能沒意識到的額外資訊。&lt;/p&gt;
&lt;h3 id=&quot;預期行為what-i-expected&quot;&gt;預期行為（ What I expected）&lt;/h3&gt;
&lt;p&gt;預期行為就是指當我們透過「重現步驟」操作時，我們預想中理應該出現的行為、結果、狀態。&lt;/p&gt;
&lt;p&gt;預期行為在於讓開發團隊暸解我們心中認為正常的認知是否與當初產品設計時相同，讓兩方在這方面的資訊是對稱的。在產品設計時，難免會有產品的行為與使用者的預期行為不同的情況，使用者會因為這種情況認定是程式發生異常，進而回報。但事實上，程式並沒有問題，只是當初產品設計時在使用者經驗（UX）的決策不夠理想，或是設計概念比較新穎，使用者和市場並還沒被教育過。所以若能知道使用者預期行為，就能避免把時間成本耗費在處理其實不是異常的回報中，而能讓客服先將這部分的回報篩選掉，讓開發團隊得以專注在真正的異常回報中。&lt;/p&gt;
&lt;h3 id=&quot;實際行為what-happened-instead&quot;&gt;實際行為（What happened instead）&lt;/h3&gt;
&lt;p&gt;實際行為就是指當我們透過「重現步驟」操作時，實際發生行為的描述，通常也就是對異常的描述。&lt;/p&gt;
&lt;p&gt;與預期行為同理，這部分的描述能讓開發團隊暸解我們實際遇到的情況，並透過是否與產品設計相符或相異去進一步判斷發生什麼事。排除設計和使用這預期行為的非異常回報，這部分的資訊就是讓開發團隊搭配重現步驟去分析重要描述。與「問題描述」相似，但如同「問題描述」是「標題」的進一步說明，那「實際行為」就是「問題描述」中，關於異常更詳細的描述。&lt;/p&gt;
&lt;h3 id=&quot;影像screenshot--video&quot;&gt;影像（Screenshot / Video）&lt;/h3&gt;
&lt;p&gt;影像的部分是比較選擇性提供的資訊，包括螢幕截圖和操作的實際錄影。有時候這些資訊會直接在其他章節中提供，像是在重現步驟中，每步驟提供一個螢幕截圖、或是在實際行為中，把看到的情況截圖附上。&lt;/p&gt;
&lt;p&gt;影像是更真實的記錄，讓開發團隊若是對我們所描述的文字仍有點困惑時，能透過影像去暸解我們實際想表達的。或是如重現步驟中所說，透過畫面可以補足我們沒有意識到是有用處的資訊，但對開發者團隊來說是關鍵的細節。&lt;/p&gt;
&lt;h3 id=&quot;環境environments&quot;&gt;環境（Environments）&lt;/h3&gt;
&lt;p&gt;環境的部分是指程式運作的環境，舉凡作業系統、瀏覽器、相依函示庫等等，各家產品和版本都可能會影響程式的運作。這部分亦是很著要的資訊，其重要性不亞於版本、重現步驟等描述。&lt;/p&gt;
&lt;p&gt;環境資訊讓開發團隊在進行判斷時，可以先暸解異常會不會有可能只是環境造成的落差，而不是程式核心邏輯的錯誤，如此才能朝正確的方向進行異常排除。程式在開發時，很難保證在所有環境都能行為一致，尤其是網頁程式，在常見的四大瀏覽器（Chrome, Firefox, Safari, IE）的顯示可能都有細節的差異，甚至在同一種瀏覽器，在不同版本都會有不同。像是 IE 系列，在 6 ~ 11 的差異都滿大的。&lt;/p&gt;
&lt;p&gt;有時候程式可能會被執行的環境太多種，開發團隊沒有太多成本一一測試與驗證，或是為了支援太舊環境的成本太高，所以決定不再適用。但是就算開發團隊有在產品某處或者安裝程式提及，使用者不一定會知道這些訊息（忽略說明訊息），導致誤以為程式出了異常，但事實上只是該環境已經不被支援，或是不在驗證過的支援清單中。若有此資訊，就可以在客服階段就先為使用者解惑，減少處理時間與成本。&lt;/p&gt;
&lt;p&gt;若是該環境是在程式認定的支援清單中，開發團隊也能搭配重現步驟快速了解狀況，並透過交叉比對去判斷是核心邏輯的錯誤，還是環境支援沒有完善。&lt;/p&gt;
&lt;p&gt;以下提供比較常見的環境資訊：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作業系統：Windows, Mac OS X, Android, iOS, Win10 Mobile&lt;/li&gt;
&lt;li&gt;瀏覽器：Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在提供這類資訊，除了環境名稱與主要版本號外，建議透過說明或者關於的資訊，取得比較詳細的版本號一併附上，會對開發團隊更有幫助。&lt;/p&gt;
&lt;h3 id=&quot;脈絡或程式碼context--source&quot;&gt;脈絡或程式碼（Context / Source）&lt;/h3&gt;
&lt;p&gt;這部分又稱最小可重現模型（Minimal reproduction），比較偏向當產品是開發用的函式庫、框架時，會需要使用這個產品的開發者提供，而不是一般使用者。&lt;/p&gt;
&lt;p&gt;當我們使用某個函式庫、套件或框架時，若遇到異常，除了上述的資訊外，若能提供程式碼給產品的開發團隊去暸解，一定會更有幫助。但是我們也不能把我們自己產品的程式碼完全給開發團隊，一來可能是會有商業考量，這些程式碼是公司資產，不得任意外洩、二來是開發團隊也沒有時間和義務幫看你的產品的原始碼。這時候就需要針對發生異常的部分，實作最小可實現模型，不包含其他核心邏輯，純粹只有使用他們產品時的程式碼，越簡單且能重現異常越好。&lt;/p&gt;
&lt;p&gt;而在實作小可實現模型時，也算是再次確認。我們自己在開發產品時，會由各種邏輯混雜在一起，若是架構沒設計好，很有可能就會互相影響。透過實作最小可重現模型，讓我們能夠排除是其他程式碼間接造成異常的可能性，而能聚焦該產品發生異常的原因與位置。&lt;/p&gt;
&lt;h3 id=&quot;備註additional-details&quot;&gt;備註（Additional details）&lt;/h3&gt;
&lt;p&gt;只要是不屬於本章中所提到的任何項目，但認定可能會對開發團隊排除異常有幫助的資訊都可以寫在這部分。&lt;/p&gt;
&lt;p&gt;像是這個異常沒辦法百分之百重現，甚至連重現步驟都難以確立，就可以在這邊加註。或是這個功能在以前都沒有發生過異常，是在某個版本後才故障。或是我們認為以我們的專業知識，能夠協助開發團隊排除異常，也可以在這邊寫下我們的看法。諸如此類。&lt;/p&gt;
&lt;h2 id=&quot;困境&quot;&gt;困境&lt;/h2&gt;
&lt;p&gt;在前一章我們知道了哪些資訊應該在回報問題時附上，得以讓開發團隊善用該資訊儘速給予答覆或是除錯。但現實總是殘酷的，不見得所有的使用者都會知道這些要附上這些資訊，就算知道也不一定會勤於每次回報問題時都附上，講句難聽的，商業軟體有問題是開發團隊該負責的，使用者願意回報就已經是願意幫忙的，如果還要求每次都要制式風格回覆，不見得使用者都願意配合。（開源生態另當別論，開源生態是作者願意開發程式碼並開源提供給公眾使用已經仁至義盡了，並沒有義務要不斷維護。）&lt;/p&gt;
&lt;p&gt;要讓使用者願意回報完整的資訊給開發團隊，比較直接的作法就是在填寫回報的表單裡提供完整的資訊，讓使用者能夠了解有什麼資訊是開發團隊需要的、該怎麼取得那些資訊，而避免直接丟一個空白的文字框要求使用者自己填寫，填寫後又以提供資訊不足拒絕受理。若是透過 Github、Gitlab 管理問題回報，可以透過 Issue Template 的功能去自訂問題回報時，文字框預設會出現哪些資訊，這部分將在下一章提及。另外也可以在如前面陸續有在提及的，請客服和使用者溝通，協助使用者提供該資訊，透過此方法，就是要對客服做相關知識的教育訓練。&lt;/p&gt;
&lt;p&gt;另外，若是在自家團隊或是開源專案，頻繁遇到內部人員在回報問題時，不遵守培訓或是表單提供的格式回報問題，不應該遷就接受，而是制定一個固定的時間（例如一到三天），在這個時間沒有改善，就直接關閉、封存該回報，不予受理。在這類議題，比較常遇到的就是業務或是客服無心遵守，認為自己的描述已經夠清楚了，而不願意再多耗費時間協助提供完整的資訊。或是工程師認為自己只是先輸入個關鍵描述，之後「自己」會再處理，不用那麼繁瑣再輸入。但通常結果都是開發團隊並不了解那些不完整的資訊是在填寫什麼問題，或是最後那個異常的處理者不是回報的工程師了，導致這個回報到最後並沒有提供它該有的幫助，反而成為異常清單中想移除卻又不敢移除的臭石頭。所以，打從最初就規定沒有符合規格的異常回報不受理，對於內部團隊是一個必須的措施。別把回報時的偷懶，連本帶利的變成開發團隊要代償的債務。&lt;/p&gt;
&lt;h2 id=&quot;輔助&quot;&gt;輔助&lt;/h2&gt;
&lt;p&gt;在上一章有提到 Issue Template 可以協助我們自訂回報異常時的格式，本章將介紹在 GitHub、GitLab 這兩大開發者常用的程式碼託管與專案管理平台來如何善用此功能。&lt;/p&gt;
&lt;h3 id=&quot;github-issue-template&quot;&gt;GitHub Issue Template&lt;/h3&gt;
&lt;p&gt;GitHub 文件中的 &lt;a href=&quot;https://help.github.com/articles/helping-people-contribute-to-your-project/&quot;&gt;Helping people contribute to your project&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 有提到許多關於如何協助其他人貢獻自己專案的一些方法，其中 &lt;a href=&quot;https://help.github.com/articles/creating-an-issue-template-for-your-repository/&quot;&gt;Creating an issue template for your repository&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 就有提到如何自訂 Issue Template。本節稍微摘自裡面重要的流程在此說明。&lt;/p&gt;
&lt;p&gt;GitHub 的 Issue Template 是透過在**預設分支（defaut branch）**中，建立一個名為 &lt;code&gt;issue_template.md&lt;/code&gt;（大小寫皆可）的檔案來設置，並可以選擇放置在可見的專案根目錄下、docs 目錄底下、或是隱藏的 &lt;code&gt;.github&lt;/code&gt; 目錄底下。除了 &lt;code&gt;md&lt;/code&gt; 以外，亦可以以 &lt;code&gt;txt&lt;/code&gt; 為副檔名。&lt;/p&gt;
&lt;h3 id=&quot;gitlab-issue-template&quot;&gt;GitLab Issue Template&lt;/h3&gt;
&lt;p&gt;GitLab 文件中的 &lt;a href=&quot;https://gitlab.com/help/user/project/description_templates.md&quot;&gt;Description templates&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 有提到如何自訂 issue 和 merge request 描述的樣板。本節稍微摘自裡面重要的流程在此說明。&lt;/p&gt;
&lt;p&gt;和 GitHub 相同，GitLab 也是透過在預設分支下建立檔案來設置 Issue Template。不同的是，GitLab 強制要求要以 Markdown 語法編寫，且必須放置在 &lt;code&gt;.gitlab/issue_templates/&lt;/code&gt; 目錄底下，檔案名稱即為樣板名稱，一個專案可以同時存在多種樣板，例如異常回報可以取名為 &lt;code&gt;Bug.md&lt;/code&gt;，我們也可以針對異常的種類再去做更詳細的分１類。目前 GitLab Free 方案或是 CE 版，並沒有提供設置&lt;strong&gt;預設&lt;/strong&gt;樣板的功能。&lt;/p&gt;
&lt;h3 id=&quot;使用要點&quot;&gt;使用要點&lt;/h3&gt;
&lt;h4 id=&quot;在開頭前先附上說明文字&quot;&gt;在開頭前先附上說明文字&lt;/h4&gt;
&lt;p&gt;在樣板的開頭，就把回報異常應注意哪些事項的說明寫上，讓回報者一定會看到這些描述也是個不錯的方式。TensorFlow 的 &lt;a href=&quot;https://raw.githubusercontent.com/tensorflow/tensorflow/master/ISSUE_TEMPLATE.md&quot;&gt;Issue Template&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 就在開頭把說明講得很清楚。&lt;/p&gt;
&lt;h4 id=&quot;透過-html-註解語法對回報者說明&quot;&gt;透過 HTML 註解語法對回報者說明&lt;/h4&gt;
&lt;p&gt;由於 Markdown 是有支援 HTML 語法的，所以理當可以使用 HTML 的註解語法。我們就可以善用這個特性，將想要對回報者說但不想在回報後顯示在頁面的話，透過註解語法包覆起來。像是：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;在最上面寫上回報時應該要注意那些事項&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;....&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 項目一&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!--- 描述這個項目的意思，或是該如何取的這個項目的資訊 --&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Webpack 的 &lt;a href=&quot;https://raw.githubusercontent.com/webpack/webpack/master/.github/ISSUE_TEMPLATE.md&quot;&gt;Issue Template&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 就有善用此特性。&lt;/p&gt;
&lt;h4 id=&quot;將所希望的回報格式先填好&quot;&gt;將所希望的回報格式先填好&lt;/h4&gt;
&lt;p&gt;如果我們希望使用者在填寫重現步驟時，能使用有序條列的方式表達，那我們就可以在該節先將有序清單的 Markdown 語法寫上；如果我們希望使用者在貼上程式碼或是程式輸出的訊息時，能用程式碼區塊包覆起來，我們就可以將相關語法也先寫上。諸如此類，舉例來說就像這樣：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;**這個異常的重現步驟**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;**當你輸入 `echo $PATH` 後所輸出的訊息**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;~~~txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(paste your output here)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;~~~&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這部分可以參考 Moby 的 &lt;a href=&quot;https://raw.githubusercontent.com/moby/moby/master/.github/ISSUE_TEMPLATE.md&quot;&gt;Issue Template&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;Issue Description 的部分講到這邊算是告一段落。希望讀者們能透過此主題的文章暸解回報異常時，需要回報哪些資訊，以及其背後的原因。並且能夠將相關知識再轉達給你身邊的工程師、客服、與使用者，讓彼此在溝通上能夠更加順暢，留下更多有效益的回報清單，而不再是一堆想刪又不敢刪議題的尷尬局面。&lt;/p&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/laravel/framework/blob/5.5/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · laravel/framework · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v4-dev/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · twbs/bootsrap · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/angular/angular/blob/master/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · angular/angular · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/graphql/graphql-js/blob/master/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · graphql/graphql-js · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rails/rails/blob/master/.github/issue_template.md&quot;&gt;GitHub · rails/rails· ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/crystal-lang/crystal/blob/master/ISSUE_TEMPLATE.md&quot;&gt;GitHub · crystal-lang/crystal · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/moby/moby/blob/master/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · moby/moby · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/tensorflow/blob/master/ISSUE_TEMPLATE.md&quot;&gt;GitHub · tensorflow/tensorflow · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/webpack/webpack/blob/master/.github/ISSUE_TEMPLATE.md&quot;&gt;GitHub · webpack/webpack · ISSUE_TEMPLATE.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://new-issue.vuejs.org/&quot;&gt;Vue.js Issue Helper&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;除了此兩種外，還有一種類型容易被當作議題，但事實上是不建議提交在議題追蹤工具，那就是使用上的疑惑（usage question），這類型的議題通常建議先讀相關文件、使用者手冊、觀看影片教學、在論壇、社群、通訊平台上發問。如果是商業產品，則應該由客服處理，而不是丟給研發工程師。  &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;bug 這個詞是比較口語的用法，通常會泛指 defect、error、fault 等，程式上看起來出錯或有異常的現象、行為。在翻譯上比較口語的情境我會使用「問題」作為對應，而在比較書面的情境我會使用「異常」作為代表。畢竟「問題」這個詞太過廣義，有可能是指 bug，也有可能是指 question，而「異常」則狹義的多（在中國社群，可能會另指 exception）。當然，平時在聊天時，大家還是繼續說 bug 唄。 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;通常「症」指的是疾病的徵象，「病」才是問題起源。 &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：將中文介面下預設房間名稱改回英文</title>
    <link href="https://fntsr.tw/articles/aoe-ii-mod-english-room-name-in-chinese-ui/" />
    <id>https://fntsr.tw/articles/aoe-ii-mod-english-room-name-in-chinese-ui/</id>
    <updated>2018-04-05T17:41:20.000Z</updated>
    <published>2018-04-05T17:41:20.000Z</published>
<content type="html">&lt;p&gt;我寫了第二個模組並發佈到 Steam 工作坊了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=1352725205&quot;&gt;Steam 工作坊 :: English Room Name in Chinese UI&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我想多數台灣玩家在玩 AoE II&lt;/p&gt;&lt;div&gt;&lt;/div&gt; 時，都會訂閱由 &lt;a href=&quot;https://steamcommunity.com/id/ZoeyHsieh&quot;&gt;Zoey Meow&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 製作的繁體中文化模組 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;TChinese Zoey’s Work&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;吧（嗯？這句好眼熟）。然而目前 AoE2&lt;div&gt;&lt;/div&gt; 尚未完整支援中文，尤其是在多人連線進度的儲存上，仍會時常遇到問題：倘若房間名稱包含中文時，會導致無法儲存遊戲，並且跳出類似於下面的訊息：&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;寫入多人連線存擋遊戲時發生錯誤！你的磁碟空間可能已經用完。無法打開文件: C\Program Files (x86)\Steam\steamapps\common\Age2HD\savegame\multi\Ruoshi的房間-xxxxxxxxxxxxxxxxxxxx.aoe2mpgame&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;或是如下圖：&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/AoE2HD-English-Room-Name-mod 1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/AoE2HD-English-Room-Name-mod 1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;所以每次和朋友打團時，總要不免其煩的更改房間名稱，改久了也是會發懶的。於是朋友就提到，我既然已經會建立模組了，何不順便寫一個模組，讓房間名稱是英文的呢？這一聽之下覺得可行，就動手做了，馬上將願望成真！&lt;/p&gt;
&lt;p&gt;畢竟這是遊戲本身的問題，你要中文化模組作者再把房間名稱從「&amp;#x3C;玩家&gt;的房間」改回「&amp;#x3C;玩家&gt;’s game」也說不過去。這時候若有一個小模組能讓我們享受中文化模組的同時，也能不用再改房間名稱，等日後官方解決這個缺陷，再將這個小模組停用，這豈不是皆大歡喜。XD&lt;/p&gt;
&lt;p&gt;於是本模組就誕生啦！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;目前 AoE2&lt;/p&gt;&lt;div&gt;&lt;/div&gt; 尚未完整支援中文，尤其是在多人連線進度的儲存上，仍會時常遇到問題，導致遇到狀況無法先儲存再另外打過。但是每次開房都要更改房間名稱，又實在是一件很繁瑣且容易忘記的事情。本模組則是幫助使用中文語系的玩家們，在開房時房名仍維持英文語系的預設值，不再需要另外改名稱、或是因為忘記改名稱而懊悔啦！&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;簡單來說，就是讓本模組將被中文化模組翻譯過的房名從「&amp;#x3C;玩家&gt;的房間」再改回英文版預設的「&amp;#x3C;玩家&gt;’s game」，讓我們不用在因為忘記改房名導致無法存檔囉！&lt;/p&gt;
&lt;p&gt;若好奇這個模組是怎麼運作的，本模組的相關程式碼與資源也放在 &lt;a href=&quot;https://github.com/fntsrlike/AoE2-English-Room-Name&quot;&gt;GitHub – fntsrlike/AoE2-English-Room-Name&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 上了，有興趣的朋友可以前往參考。&lt;/p&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：文明選單分類排序模組</title>
    <link href="https://fntsr.tw/articles/aoe-ii-mod-civilizations-sorting-by-dlc/" />
    <id>https://fntsr.tw/articles/aoe-ii-mod-civilizations-sorting-by-dlc/</id>
    <updated>2018-04-05T17:04:02.000Z</updated>
    <published>2018-04-05T17:04:02.000Z</published>
<content type="html">&lt;p&gt;終於寫出我的第一個模組並發佈到 Steam 工作坊了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=1339252093&quot;&gt;Steam 工作坊 :: Civs Sorting by DLC (Traditional Chinese)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我想多數台灣玩家在玩 AoE II&lt;/p&gt;&lt;div&gt;&lt;/div&gt; 時，都會訂閱由 &lt;a href=&quot;https://steamcommunity.com/id/ZoeyHsieh&quot;&gt;Zoey Meow&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 製作的繁體中文化模組 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;TChinese Zoey’s Work&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;吧。除此之外仍會訂閱一些對玩家體驗有幫助的小模組，其中一個讓我感到方便的模組便是由 &lt;a href=&quot;https://steamcommunity.com/id/Teban0721&quot;&gt;teban0721&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所製作的 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=824164427&quot;&gt;Achtung! 31 Civs!_rv&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 模組。這個模組會將遊戲房間中的文明選單按照 DLC 去分類，讓我們在選擇文明時能夠更加方便。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;但是 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=824164427&quot;&gt;Achtung! 31 Civs!_rv&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 在中文介面上，仍是使用簡體中文（畢竟是官方選項），所以倘若我又訂閱了這個模組，且為了要讓它有效果，勢必會覆蓋 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;TChinese Zoey’s Work&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，導致在選單上顯示的是不熟悉的簡中名稱，這個小疙瘩困擾我好久，雖然沒有影響玩樂，但總覺得一根小刺在心頭似的。&lt;/p&gt;
&lt;p&gt;這個動機就開啟了我的模組編寫之路了XD。經過一番研究，我終於習得編寫模組與發佈的技能。這個部分之後有空會在寫成部落格文章與大家分享。本篇還是先著重在這個模組的介紹。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;這是一個將文明選單的文明按照資料片分類再排序的介面小模組。&lt;/p&gt;
&lt;p&gt;本模組源自 Achtung! 31 Civs!_rv，但這個模組是只有簡體中文的，所以參考其設計另外做了一個繁體中文的版本。繁體翻譯採用 AGE II HD TChinese Zoey’sWork 的翻譯，所以建議也訂閱該中文化模組，並讓本模組的在遊戲中讀取的優先度高於該模組。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;簡單的說，就是一個讓文明按照帝王世紀、征服者入侵、失落的帝國、非洲王國、王者崛起去排序的小模組，且翻譯是採用目前多數台灣玩家採用的 &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;TChinese Zoey’s Work&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的翻譯 &lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，讓我們在不犧牲中文字的美與習慣的文化名稱下，仍能享有排序後的文明選單！&lt;/p&gt;
&lt;p&gt;若好奇這個模組是怎麼運作的，本模組的相關程式碼與資源也放在 &lt;a href=&quot;https://github.com/fntsrlike/AoE2-Civs-Sorting&quot;&gt;GitHub – fntsrlike/AoE2-Civs-Sorting&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 上了，有興趣的朋友可以前往參考。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;想比較原版、HD 簡中、Zoey’s Work 三個版本文明稱呼的比較，可參見本部落格的另一篇文章 &lt;a href=&quot;https://blog.fntsr.tw/articles/2017/03/01/aoe-ii-chinese-translation-of-civilizations/&quot;&gt;世紀帝國 II 系列：各文明名稱翻譯對照表&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>Fw: 軟體工藝宣言</title>
    <link href="https://fntsr.tw/literatures/software-craftsmanship-manifesto/" />
    <id>https://fntsr.tw/literatures/software-craftsmanship-manifesto/</id>
    <updated>2018-02-22T13:20:57.000Z</updated>
    <published>2018-02-22T13:20:57.000Z</published>
<content type="html">&lt;p&gt;以下為〈軟體工藝宣言〉（Software Craftsmanship Manifesto）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 的複本。下列中文取自官方頁面的簡體中文版本，並且將詞彙轉為台灣社群慣用語以及〈敏捷軟體開發宣言〉的對應詞。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5 id=&quot;軟體工藝宣言&quot;&gt;軟體工藝宣言&lt;/h5&gt;
&lt;p&gt;作為有理想的軟體工匠，我們一直身體力行，提升專業軟體開發的標準，並幫助他人學習此工藝。通過這些工作，我們建立了如下價值觀：&lt;/p&gt;
&lt;p&gt;不僅要讓軟體可用，更要「精益求精」；&lt;br&gt;
不僅要回應變化，更要「穩步增加價值」；&lt;br&gt;
不僅要有個人與互動，更要「形成專業人員的社群」；&lt;br&gt;
不僅要與客戶合作，更要「建立卓有成效的夥伴關係」。&lt;/p&gt;
&lt;p&gt;也就是說，左項固然值得追求，右項同樣不可或缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;原文如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5 id=&quot;software-craftsmanship-manifesto&quot;&gt;Software Craftsmanship Manifesto&lt;/h5&gt;
&lt;p&gt;As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:&lt;/p&gt;
&lt;p&gt;Not only working software, but also well-crafted software&lt;br&gt;
Not only responding to change, but also steadily adding value&lt;br&gt;
Not only individuals and interactions, but also a community of professionals&lt;br&gt;
Not only customer collaboration, but also productive partnerships&lt;/p&gt;
&lt;p&gt;That is, in pursuit of the items on the left we have found the items on the right to be indispensable.&lt;/p&gt;
&lt;p&gt;©2009，著作權為下述簽名者所有 &lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
此宣言可以任何形式自由地複製，&lt;br&gt;
但其全文必須包含上述申明在內。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Robert C Martin, and the undersigned (2009). Software Craftsmanship Manifesto. Retrieved from &lt;a href=&quot;http://manifesto.softwarecraftsmanship.org/&quot;&gt;http://manifesto.softwarecraftsmanship.org&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;  &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;指有在官網簽署宣言的所有人 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="foward" />
    <category term="agile" />
  </entry>
  <entry>
    <title>Ex: Scrum 每日立會容易出現的誤解</title>
    <link href="https://fntsr.tw/literatures/misunderstanding-of-scrum-daily-standing-meeting/" />
    <id>https://fntsr.tw/literatures/misunderstanding-of-scrum-daily-standing-meeting/</id>
    <updated>2018-02-21T00:10:18.000Z</updated>
    <published>2018-02-21T00:10:18.000Z</published>
<content type="html">&lt;p&gt;這段敘述對於每日立會所期望的氛團比喻的很道味，特意節錄作為提醒與溫習。&lt;/p&gt;
&lt;p&gt;以下摘錄自《Scrum，用一半的時間做兩倍的事》&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我常看到某個意外出現的問題是，大家都傾向於把每日立會當成只是一個向大家報告「我做了這件事⋯⋯我準備做那件事」等個人事項的場合，一個人一講完就輪到下一個人講述。更理想的方式應該接近於美式足球，選手圍在一起商討戰術的景象。外接員可能會說：「那個防守前鋒礙到我了。」聽到這句話，進攻絆鋒可能會說：「他就教給我處裡，我負責突破防線。」或者四分衛可能會說：「我們的跑陣碰到瓶頸，不如出其不意地把球往左傳。」用意在於整個團隊迅速決定如何完成衝刺，取得勝利。被動因應不但懶散，也形同主動拖累團隊裡其他人的表現。一但找出問題點就必須即刻予以排除。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;江裕真（譯）（2015）。SCRUM：用一半的時間做兩倍的事（原作者：Jeff Sutherland）。臺北市：遠見天下文化。（原著出版年：2014）（117 – 118 頁 ） &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="extract" />
    <category term="scrum" />
    <category term="agile" />
  </entry>
  <entry>
    <title>老羅斯福演講：民主國家的公民權利</title>
    <link href="https://fntsr.tw/literatures/citizenship-in-a-republic/" />
    <id>https://fntsr.tw/literatures/citizenship-in-a-republic/</id>
    <updated>2018-02-19T22:52:30.000Z</updated>
    <published>2018-02-19T22:52:30.000Z</published>
<content type="html">&lt;p&gt;以下摘錄自《Scrum，用一半的時間做兩倍的事》&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。原文為美國總統老羅斯福於 1910 年在巴黎索邦大學的演說「民主國家的公民權利」（Citizenship in a Republic）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;榮耀並不屬於批評的人，亦不屬於指出勇者如何失敗，或點出別人哪裡應該做的更好的人。榮耀屬於實際身處在競技場中、臉上沾滿塵土與血汗，仍英勇奮戰的勇者；他們會犯錯，而且一錯再錯，因為錯誤與缺失必會伴隨努力而來；但是他們都確切地知道要奮戰不懈、知道要充滿熱誠、全心投入；獻身於崇高的志業。他們最好的結局是終於功成名就；就算失敗，最差的下場只不過就是在勇敢奮戰後落敗。他們的定位，絕非那些冷漠懦弱、不知勝利與失敗為何物的人所能相提並論。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;附上摘自 Wiki 的原文版[^3]：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is not the critic who counts;&lt;br&gt;
not the man who points out how the strong man stumbles,&lt;br&gt;
or where the doer of deeds could have done them better.&lt;br&gt;
The credit belongs to the man who is actually in the arena,&lt;br&gt;
whose face is marred by dust and sweat and blood;&lt;br&gt;
who strives valiantly; who errs,&lt;br&gt;
who comes short again and again,&lt;br&gt;
because there is no effort without error and shortcoming;&lt;br&gt;
but who does actually strive to do the deeds;&lt;br&gt;
who knows great enthusiasms,&lt;br&gt;
the great devotions;&lt;br&gt;
who spends himself in a worthy cause;&lt;br&gt;
who at the best knows in the end the triumph of high achievement,&lt;br&gt;
and who at the worst,&lt;br&gt;
if he fails,&lt;br&gt;
at least fails while daring greatly,&lt;br&gt;
so that his place shall never be with those cold and timid souls who neither know victory nor defeat.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;江裕真（譯）（2015）。SCRUM：用一半的時間做兩倍的事（原作者：Jeff Sutherland）。臺北市：遠見天下文化。（原著出版年：2014） &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;Roosevelt, Theodore. “Citizenship in a Republic.” Speech at the Sorbonne, Paris, France, April 23, 1910&lt;br&gt;
[3^]: Citizenship in a Republic (n.d.). In Wikipedia. Retrieved from &lt;a href=&quot;https://en.wikipedia.org/wiki/Citizenship_in_a_Republic&quot;&gt;https://en.wikipedia.org/wiki/Citizenship_in_a_Republic&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="talks" />
  </entry>
  <entry>
    <title>Ex: Scrum 社群的老笑話：雞與豬</title>
    <link href="https://fntsr.tw/literatures/scrum-joke-chicken-and-pig/" />
    <id>https://fntsr.tw/literatures/scrum-joke-chicken-and-pig/</id>
    <updated>2018-02-19T22:22:37.000Z</updated>
    <published>2018-02-19T22:22:37.000Z</published>
<content type="html">&lt;p&gt;以下摘自《Scrum，用一半的時間做兩倍的事》&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 Scrum 社群裡有一則老笑話。&lt;/p&gt;
&lt;p&gt;一隻雞和一頭豬走在路上，雞說：「嘿！豬，我想我們應該來開一家餐廳。」&lt;br&gt;
「要取什麼名字？」豬問道。&lt;br&gt;
「就叫『火腿與蛋』如何？」&lt;br&gt;
「不了，」豬説：「我得賣命，但你只是參與而已！」&lt;/p&gt;
&lt;p&gt;Scrum 的概念是，「豬」代表那些完全投身在專案中，並為成果負責的人；「雞」代表的則是被告知專案進度的利害關係人。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;: 江裕真（譯）（2015）。SCRUM：用一半的時間做兩倍的事（原作者：Jeff Sutherland）。臺北市：遠見天下文化。（原著出版年：2014） &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="extract" />
    <category term="scrum" />
    <category term="agile" />
  </entry>
  <entry>
    <title>「淺嚐 Google Venture 的 Design Sprint」工作坊參與心得</title>
    <link href="https://fntsr.tw/literatures/experience-of-design-sprint-workshop-on-agile-taichung-meetup/" />
    <id>https://fntsr.tw/literatures/experience-of-design-sprint-workshop-on-agile-taichung-meetup/</id>
    <updated>2018-02-11T02:59:25.000Z</updated>
    <published>2018-02-11T02:59:25.000Z</published>
<content type="html">&lt;p&gt;本文為在下參加 &lt;a href=&quot;https://agile-taichung.kktix.cc/events/google-design-spring-201802&quot;&gt;Agile Taichung Meetup 2018 二月份聚會-淺嚐 Google Venture 的 Design Sprint&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的重點摘要、過程描述、與活動心得。&lt;/p&gt;
&lt;p&gt;關於 Design Sprint 的介紹，先摘自活動說明做個簡述：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Design Sprint” 是由Google 創投 (Google Ventures，簡稱GV) 的三位設計合夥人所研發的, 它是一個獨特的5天5步驟流程, 說明如何藉由設計, 建立原型和與邀請顧客實地檢驗構想, 快速解決各種商業上的難題.&lt;/p&gt;
&lt;p&gt;在 Sprint 的流程中, 提供了一些有用的方法, 可以幫助我們產生構想, 解決問題, 檢驗方案. 以及找到那些可帶給我們各種正確行為的小習慣. 例如: 個人腦力激盪 &gt; 群眾腦力激盪. 解法挑選流程, 避免錨定效應, 讓好想法可以出頭 等等. 讓你以更有效率的方式, 來試錯你的點子.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;重點摘要&quot;&gt;重點摘要&lt;/h2&gt;
&lt;p&gt;本章內容主要抄錄自簡報、與講師的講解。之中的理解不一定絕對正確，請以書本、講師的說法為主。&lt;/p&gt;
&lt;h5 id=&quot;講師&quot;&gt;講師&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;柯仁傑（David Ko）&lt;/li&gt;
&lt;li&gt;Scrum Community in Taiwan&lt;/li&gt;
&lt;li&gt;AgileCommunity.tw&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;活動大綱&quot;&gt;活動大綱&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;簡介&lt;/li&gt;
&lt;li&gt;實作、體驗&lt;/li&gt;
&lt;li&gt;回顧&lt;/li&gt;
&lt;li&gt;Q &amp;#x26; A&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;簡介&quot;&gt;簡介&lt;/h3&gt;
&lt;h4 id=&quot;什麼是-design-sprint&quot;&gt;什麼是 Design Sprint&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;解決問題的框架
&lt;ul&gt;
&lt;li&gt;框架的意思是大方向、所以可替換做事的方法&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;固定時間（time box）&lt;/li&gt;
&lt;li&gt;讓好的想法比較容易出來&lt;/li&gt;
&lt;li&gt;用來驗證想法，而不會有太多的研究&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;階段&quot;&gt;階段&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;理解&lt;/li&gt;
&lt;li&gt;速寫&lt;/li&gt;
&lt;li&gt;決策&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;h4 id=&quot;採用時機&quot;&gt;採用時機&lt;/h4&gt;
&lt;h5 id=&quot;什麼時候適合採用-design-sprint&quot;&gt;什麼時候適合採用 Design Sprint&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;沒時間思考了&lt;/li&gt;
&lt;li&gt;新的想法&lt;/li&gt;
&lt;li&gt;太多假設&lt;/li&gt;
&lt;li&gt;快速驗證解法&lt;/li&gt;
&lt;li&gt;避免政治干預&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;什麼時候不適合採用-design-sprint&quot;&gt;什麼時候不適合採用 Design Sprint&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;已定義清楚&lt;/li&gt;
&lt;li&gt;需要大量研究（對市場不了解）&lt;/li&gt;
&lt;li&gt;範圍太發散&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;了解你的用戶速寫&quot;&gt;了解你的用戶（速寫）&lt;/h4&gt;
&lt;h5 id=&quot;四種元素&quot;&gt;四種元素&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;喜歡&lt;/li&gt;
&lt;li&gt;不喜歡&lt;/li&gt;
&lt;li&gt;想法&lt;/li&gt;
&lt;li&gt;問題&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;使用者做事流程&quot;&gt;使用者做事流程&lt;/h5&gt;
&lt;p&gt;透過記錄使用者目前達到目標中，會有哪些步驟、經歷怎樣的流程，以暸解現有使用者經驗&lt;/p&gt;
&lt;h4 id=&quot;了解現有方案與對手&quot;&gt;了解現有方案與對手&lt;/h4&gt;
&lt;h5 id=&quot;lighting-demo&quot;&gt;Lighting Demo&lt;/h5&gt;
&lt;p&gt;研究現有成品，透過演示工具，在三分鐘向大家解釋現有產品是怎麼運作，特色是什麼。人才是用抄的、天才是用偷的。&lt;/p&gt;
&lt;h3 id=&quot;實作&quot;&gt;實作&lt;/h3&gt;
&lt;h4 id=&quot;實作速寫&quot;&gt;實作：速寫&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Work alone together（先獨立思考，再腦力激盪）&lt;/li&gt;
&lt;li&gt;Crazy 8
&lt;ul&gt;
&lt;li&gt;快速列出各種想法&lt;/li&gt;
&lt;li&gt;8 分鐘 8 個想法（一張紙摺出 8 格）&lt;/li&gt;
&lt;li&gt;想法的品質重於圖案的美醜&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;三格漫畫
&lt;ul&gt;
&lt;li&gt;遭遇的問題&lt;/li&gt;
&lt;li&gt;體驗過程&lt;/li&gt;
&lt;li&gt;美好結果&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;實作決策&quot;&gt;實作：決策&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;黏貼決策&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;選擇想法-1&quot;&gt;選擇想法 (1)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;沈默投票&lt;/li&gt;
&lt;li&gt;綠色貼紙&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;選擇想法-2&quot;&gt;選擇想法 (2)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;快速評論&lt;/li&gt;
&lt;li&gt;作者補充&lt;/li&gt;
&lt;li&gt;稻民投票（黃色貼紙）&lt;/li&gt;
&lt;li&gt;決策者投票（超投票）&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;這些方法得目的在於&quot;&gt;這些方法得目的在於：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;客戶重視第一印象（先不講解）&lt;/li&gt;
&lt;li&gt;避免爭辯時間很長&lt;/li&gt;
&lt;li&gt;避免作者太早推銷&lt;/li&gt;
&lt;li&gt;決策者要表態&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;圖文並茂&quot;&gt;圖文並茂&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;一個連貫的故事&lt;/li&gt;
&lt;li&gt;大約 10-15 個畫面 + 文字&lt;/li&gt;
&lt;li&gt;重點在於使用者在意的痛點！產品畫面不是重點。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;實作打模&quot;&gt;實作：打模&lt;/h4&gt;
&lt;h5 id=&quot;原型心態&quot;&gt;原型心態&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;什麼方案都可以做原型&lt;/li&gt;
&lt;li&gt;原型是可以捨棄的&lt;/li&gt;
&lt;li&gt;做到剛好夠測試即可（舉例：不要在登入畫面耗費太多時間，著重在重要的功能上）&lt;/li&gt;
&lt;li&gt;看起來真實&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;快速打造原型&quot;&gt;快速打造原型&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;選對工具&lt;/li&gt;
&lt;li&gt;分工合作&lt;/li&gt;
&lt;li&gt;整合方案&lt;/li&gt;
&lt;li&gt;先試運轉&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;利用以下方式打造解法雛形&quot;&gt;利用以下方式打造解法雛形：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;紙上談兵&lt;/li&gt;
&lt;li&gt;角色扮演&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;活動的關鍵想法&quot;&gt;活動的關鍵想法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Work alone together&lt;/li&gt;
&lt;li&gt;利用視覺化資訊公想記憶&lt;/li&gt;
&lt;li&gt;圖像化的解說比是抽象的描述好&lt;/li&gt;
&lt;li&gt;以黏貼決策挑出好的解法&lt;/li&gt;
&lt;li&gt;快速打造原型&lt;/li&gt;
&lt;li&gt;生命短暫，不要去做一些沒人想要的東西&lt;/li&gt;
&lt;li&gt;跨職能&lt;/li&gt;
&lt;li&gt;用來討論重要的事情（決策者要到）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;過程描述&quot;&gt;過程描述&lt;/h2&gt;
&lt;p&gt;本次工作坊只耗費非常少的時間講整個 Design Sprint 介紹一遍，然後就要將原本要用五天去執行的 Design Sprint 壓縮在 2.5 小時內完成。講師透過計時器掌握每一流程的時間，如同 Design Sprint 中強調的 time box 的概念，在壓縮後更是需要好好的控制時間。&lt;/p&gt;
&lt;p&gt;在一開始，會讓我們從三個題目選擇其中一個：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如何幫單身男女愉快且靠譜的脫單 &lt;/li&gt;
&lt;li&gt;在最後時刻找到旅館來住 &lt;/li&gt;
&lt;li&gt;如何確定搶到有座位的高鐵票 &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在現場中的四組，剛好各有兩組選擇第一道和第二道題目。講師有提到，台中場跟台北場一樣，第三道題目還是沒人選 XD，我猜可能是大家比較不太感受到這個需求吧。我們這組是選擇第二道題目（旅館）。&lt;/p&gt;
&lt;p&gt;接著就開始了「理解」階段，講師要我們各組選擇會對這題目特別有感的兩個人，作為市場需求、潛在客戶。然後因為我們剛好會有一組題目和自己組一樣，所以就給我們約 10 分鐘的時間，讓作為潛在客戶的兩人到另一組被訪問。在這部分很需要發問的技巧和觀察的能力，通常走設計的會比 R &amp;#x26; D 還要擅長。在這時段，我是擔任被訪問的客戶，所以對於要怎麼發問比較好這件事倒是沒辦法給予協助，總不能讓客戶主導發問吧！XDDD&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27654454_2012952022051492_1254366061595454296_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/27654454_2012952022051492_1254366061595454296_n.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27654454_2012952022051492_1254366061595454296_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-1&lt;/strong&gt;：訪問階段。（圖片來源： &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/?fref=gs&amp;#x26;dti=400809726741805&amp;#x26;hc_location=group_dialog&quot;&gt;Agile.Taichung&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;雖然在短短 10 分鐘，要問到詳細，實在有點緊迫。一個人在問時，另一個人就趕緊用便利貼把他們需要的資料寫出來，然後一步步建立兩張圖表，一個是「喜歡、不喜歡、想法、問題」的表格，作為產品設計方向的參考；另一個是目前使用者要達成目標會採用的步驟，讓我們知道現有方法是什麼？是不是有地方是可以改善的。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27657226_2012952475384780_581598806646213178_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/27657226_2012952475384780_581598806646213178_n.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27657226_2012952475384780_581598806646213178_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-2&lt;/strong&gt;：用戶速寫。（圖片來源： &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/?fref=gs&amp;#x26;dti=400809726741805&amp;#x26;hc_location=group_dialog&quot;&gt;Agile.Taichung&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27971960_2012952608718100_4080006162065766309_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/27971960_2012952608718100_4080006162065766309_n.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27971960_2012952608718100_4080006162065766309_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-3&lt;/strong&gt;：用戶現有經驗。（圖片來源： &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/?fref=gs&amp;#x26;dti=400809726741805&amp;#x26;hc_location=group_dialog&quot;&gt;Agile.Taichung&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;在訪問後，我和另一位夥伴回到自己的組別，開始進行「速寫」的階段。這部分遵循「Work alone together」的原則，也就是「先獨立思考，再腦力激盪」。每個人在不交談的情況下，進行 Crazy 8 和三格漫畫的方式，去激盪想法。Crazy 8 的方式就是將一張紙摺成 8 格，然後&lt;strong&gt;畫&lt;/strong&gt;自己的想法，每格可以連貫、也可獨立，這部分是希望參與者在 8 分鐘內發想出 8 個想法。接著再透過三格漫畫的法上，嘗試將這 8 個想法連貫成一個產品，並在在這三格中嘗試涵蓋：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;遭遇的問題&lt;/li&gt;
&lt;li&gt;體驗過程&lt;/li&gt;
&lt;li&gt;美好結果&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/IMG_1089-e1518289404366.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/IMG_1089-e1518289404366.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/IMG_1089-e1518289404366.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-4&lt;/strong&gt;：三格漫畫&lt;/p&gt;
&lt;p&gt;再來就是「決策」的階段，這階段又分成兩小階段，分別為「沈默投票」和「稻民投票」，投票的對象是大家畫的三格漫畫。沈默投票就是讓大家在漫畫作者沒有解說、且大家沒有經過討論、交流的情況下，透過有色貼紙選擇你認為最重要的部分。之後再讓大家針對每份漫畫做快速頻論，等大家都評論完後，作者才可以進行補充，這是為了強調「客戶重視第一印象」以及「避免作者太早推銷」。等每份漫畫都評論完、補充完後，就是開始到民投票，使用另一個顏色的貼紙再次投票，讓大家知道在經過暸解後，大家認為最重要的部分、元素是什麼。&lt;/p&gt;
&lt;p&gt;值得一提的是，在正式的 Design Sprint 中，會強調決策者也要參與投票，且擁有票數可能會比一般參與者還要多，讓我們得以了解決策者重視的又是什麼。&lt;/p&gt;
&lt;p&gt;之後就要開始「打模」階段了，在這裡也依樣分兩小階段。首先大家針對決策內容，嘗試透過 10 ~ 15 個圖像與文字，建立起一個連貫的故事。這裡的重點不在產品「畫面」，而在於使用者在意的關鍵點、痛點，讓我們得以透過這個方式建立出一個需求情境。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27798105_2012979572048737_1430541141041263888_o.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/27798105_2012979572048737_1430541141041263888_o.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27798105_2012979572048737_1430541141041263888_o.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-5&lt;/strong&gt;：情境（圖片來源： &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/?fref=gs&amp;#x26;dti=400809726741805&amp;#x26;hc_location=group_dialog&quot;&gt;Agile.Taichung&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;在這之後就是透過軟體或是紙筆的方式，建立出一套有「畫面」的原型了，可以針對上一小階段中，圖像中會有「畫面」的部分去建立出一個要建模的畫面清單，然後每個人認領幾個，一起繪製。在繪製時，我也有發現一些原本討論中沒有想到的點，直接向同組發問，得到共識後加入我所繪製的產品畫面中。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/IMG_1087.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/IMG_1087.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/IMG_1087.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-6&lt;/strong&gt;：原型&lt;/p&gt;
&lt;p&gt;最後我們就有了一份產品原型得以展開「驗證」階段，再度邀請原本擔任潛在客戶的參與者到小組中，Demo 原型給客戶看，並透過訪問去驗證這份原型有沒有打到其在意的需求、痛點。在這部分身為客戶的我，倒是真的有感受到需求被解決了啦。w&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27657752_2013006098712751_6102543043576371303_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/27657752_2013006098712751_6102543043576371303_n.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/27657752_2013006098712751_6102543043576371303_n.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-7&lt;/strong&gt;：驗證階段。（圖片來源： &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/?fref=gs&amp;#x26;dti=400809726741805&amp;#x26;hc_location=group_dialog&quot;&gt;Agile.Taichung&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;整個工作坊大概就是透過這些過程，由講師帶我們體驗 Design Sprint。上面的描述只是根據記憶與筆記簡單陳述，如果真的有興趣，可以在私下聊聊或是看還有沒有機會參與講師舉辦的工作坊囉。&lt;/p&gt;
&lt;h2 id=&quot;活動心得&quot;&gt;活動心得&lt;/h2&gt;
&lt;p&gt;之前在準備對公司內部的敏捷主題分享時，就有參考到 David Ko 的部落格，沒想到今年二月竟然有機會見到本人且參與其主講的工作坊，其實還滿興奮的，在確認週六沒有其他要事後，就趕緊先報名了。&lt;/p&gt;
&lt;p&gt;在報名活動之前，我是沒有聽過 Design Sprint 的，甚至在講師分享之前，我更是對 Design Sprint 完全不暸解。只是在期待透過參與這場工作坊，得到一些知識與發想，看能不能在任職公司未來要開發新產品時，導入一些元素，讓我們的產品能夠朝正確的方向去開發，這大概是我主要想參與這次工作坊的目的了。&lt;/p&gt;
&lt;p&gt;原本預計會遲到的我，結果在週六沒有上班車潮的情況下，只花四十分鐘就到現場，反而準時在九點抵達，算是滿意外的。抵達現場時，已經看到好友均民、講師 David Ko、以及 Agile Taichung 的主辦人 Max。在報到過程中挑選了一杯卡布奇諾作為晚點的動力，嘛，把咖啡因轉成產能是一件很正常的事情，是不？除了協助訂購咖啡或點心外，主辦也提供了一些零食作為熱量來源，非常貼心。XD&lt;/p&gt;
&lt;p&gt;整場活動的過程，在上一章我已經簡述了，就不在這了多加贅述。整體感受下來，參與者們的反應都非常熱烈，很喜歡這種大家一起發想、交流的氛圍。講師在控制活動流程時，節奏和時間都掌握得很好，整場三小時的活動，絲毫感受不到冗余，雖然會覺得時間不夠，但也是因為我們把原本預計五天的是壓縮在三小時內要完成，稍微有點緊迫是正常的XD，重點是有在計時，讓我們能在一個早上完整體驗整個流程，而沒有超時，我覺得這部分很厲害。&lt;/p&gt;
&lt;p&gt;在參與這個工作坊後，我對於 Design Sprint 有大概的認知了，也知道他的目的以及為什麼要這麼做，但還是有許多細節我不是很暸解，可能需要再去研讀書籍做進一步的學習，但我想有經過這場工作坊後，我在閱讀相關書籍後，會更有感覺。裡面有些元素在我帶團隊開回顧會議時，就有用到，像是「黏貼決策」、「Work alone together」，覺得很有趣。這類比較互動式、透過便利貼的討論元素，在最近的會議主持與活動都很常用到，讓我有種親切感 XD，想想，其實主持這樣活動的目的，都是帶領團隊去發想、釐清呢。&lt;/p&gt;
&lt;p&gt;最後，感謝 David Ko 願意在假日向社群分享這個主題，也感謝 Agile Taichung 舉辦這場工作坊，以及能一起在假日參與這次活動的同好們，能與大家交流以及學習真的是挺不錯的事情。&lt;/p&gt;
&lt;h2 id=&quot;參考與延伸閱讀&quot;&gt;參考與延伸閱讀&lt;/h2&gt;
&lt;p&gt;關於 Design Sprint 的相關著作，可以參考 1, 2 這兩本書籍。在網路的資訊可以參考 3 ~ 7 的網頁，想透過影片暸解可以參考 8 ~ 12 的連結，想知道本次活動的相關討論與劉穎，可以參考 13 的子參考項目。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Sprint-Solve-Problems-Test-Ideas/dp/1442397683&quot;&gt;Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;http://www.books.com.tw/products/0010722447&quot;&gt;中譯本&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.books.com.tw/products/F013522991&quot;&gt;Design Sprint: A Practical Guidebook for Building Great Digital Products&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gv.com/sprint/&quot;&gt;The Design Sprint — GV&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://designsprintkit.withgoogle.com/&quot;&gt;Design Sprint Kit&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Design_sprint&quot;&gt;Design sprint – Wikipedia&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kojenchieh.pixnet.net/blog/post/460768067-%E7%82%BA%E4%BB%80%E9%BA%BC%E9%9C%80%E8%A6%81-gv-design-sprint%253F&quot;&gt;為什麼需要 GV design sprint? @ David Ko的學習之旅 :: 痞客邦 PIXNET ::&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://designtongue.me/google-design-sprint-method/&quot;&gt;初探Google提出的 設計敏捷方法 （Design Sprint Method）| 設計大舌頭&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLNKW8GAxivxcwqF2OU7UvjkT_lPMqz_C8&quot;&gt;Design Sprint – YouTube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ODRW9Y8BO6Y&amp;#x26;feature=youtu.be&quot;&gt;Google Design Sprint with Memrise – YouTube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=K2vSQPh6MCE&quot;&gt;GV’s Sprint Process in 90 Seconds – YouTube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QwJwemOX37w&quot;&gt;Design Sprint Explained in 1 Minute – YouTube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IgNmCcVD6DM&quot;&gt;Design Sprint Overview – YouTube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Agile.Taichung 討論串、活動留影 @ Facebook&lt;br&gt;
1.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/915817631907676/&quot;&gt;活動資訊&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
2.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918543814968391/&quot;&gt;Google Design Sprint 工作坊開始了&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
3.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918544268301679/&quot;&gt;什麼是設計衝刺&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
4.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918551908300915/&quot;&gt;用戶訪談&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
5.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918572481632191/&quot;&gt;實作：用戶訪談&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
6.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918573291632110/&quot;&gt;實作：決策&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
7.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918599184962854/&quot;&gt;驗證&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
8.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918600724962700/&quot;&gt;設計衝刺&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
9.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918601578295948/&quot;&gt;生命短暫，不要去做一些「沒有人想要」的東西&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
10.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918586168297489/&quot;&gt;講師：我遇過最 pro 級的 storyboard&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
11.  &lt;a href=&quot;https://www.facebook.com/groups/Agile.Taichung/permalink/918760518280054/&quot;&gt;活動後心得分享&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="agile" />
    <category term="talks" />
  </entry>
  <entry>
    <title>有朋自遠方來，不亦樂乎</title>
    <link href="https://fntsr.tw/articles/it-is-such-a-pleasure-to-have-friends-coming-from-afar/" />
    <id>https://fntsr.tw/articles/it-is-such-a-pleasure-to-have-friends-coming-from-afar/</id>
    <updated>2018-02-08T22:42:03.000Z</updated>
    <published>2018-02-08T22:42:03.000Z</published>
<content type="html">&lt;p&gt;本篇摘用〈論語・學而篇〉的語句作為標題。&lt;/p&gt;
&lt;p&gt;撇除前三日的移地訓練（？），今天是公司放假的第一天。今天也恰巧是中部高中電資研社團的聯合寒訓，於是就以回去看學弟妹辦活動的藉口，去找新竹的朋友們吃飯。看活動是名，找朋友為實。既然朋友在遠方無法相將，我就忝為遠方的朋友，拜訪吾友，吃吃飯、聊聊天。&lt;/p&gt;
&lt;p&gt;聽到朋友們都表述自己的近況以及之後的規劃，並聊聊最近自身的娛樂，覺得也挺開心的。每個人的生活或有相似、或有相異，在相似之處得到共鳴、在相異之處增廣見聞，都是令人愉悅的。看到朋友都在自己的領域有所發展，既為他們感到開心，也為他們有自己的專業感到敬佩，覺得能和不同專業的朋友聊天，或是聽他們講自身圈子發生的事，亦是非常有趣的。&lt;/p&gt;
&lt;p&gt;今天也在晚上和一位甫任職三個月的老朋友聚餐，彼此聊聊攻讀碩士與工作上發生的各種崩潰、有趣的事情，都覺得十分暢快、舒壓。也彼此分享遇到的困境，看有沒有機會從彼此升上得到突破的靈感，以及些許覺得有幫助到團隊的成就感。聊到準備坐火車的時間，才覺得意猶未盡的道別。&lt;/p&gt;
&lt;p&gt;我雖然平時不太會用網路、電信上的通訊工具，定期與朋友保持聯繫。但等有有空時，能聯絡上朋友，切個吃飯時間互相聊聊近況，就覺得十分快樂。中間或許隔了數個月、數年未曾再見面，但見面時仍能心無尷尬地暢談，是最讓人開心的事。希望日後能利用工作與家事之餘，抽空拜訪朋友、相互聊聊。&lt;/p&gt;
&lt;p&gt;有時心想，君子之交淡如水，或許就類似這樣吧。&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>任職於 Sharelike.Asia</title>
    <link href="https://fntsr.tw/announce/working-at-sharelike-asia/" />
    <id>https://fntsr.tw/announce/working-at-sharelike-asia/</id>
    <updated>2018-02-08T01:57:05.000Z</updated>
    <published>2018-02-08T01:57:05.000Z</published>
<content type="html">&lt;p&gt;自從 10 月初退役後，就開始尋找工作，終於在 12 月塵埃落定。這段時間非常感謝這段期間協助我求職的朋友，尤其是幫我審閱履歷的 JC、Davy、FloatJ、小趴、松鼠、基爾、遊風等人，以及推薦我面試的均民（Microprogram）、白飄（Skyyer）、Davy（Sharelike）。&lt;/p&gt;
&lt;p&gt;經過諸多審思，最終決定任職於 Sharelike.Asia，並在 12 下旬開始上工。經過一個多月的摸索，目前在開發團隊的角色定位大概類似 Scrum Master，只不過自認為經驗還沒到達 Master 的程度，姑且自稱為 Agile Apprentice &amp;#x26; Promter 吧。 =P&lt;/p&gt;
&lt;p&gt;很高興有個環境能讓我實踐碩士時期所學，現在正在嘗試協助改善研發團隊的開發流程，以及每兩週分享一次敏捷開發相關主題。承蒙夥伴們的信任，讓我擔任這方面的角色，也期待未來與團隊一起共同成長。 = )&lt;/p&gt;
&lt;p&gt;對於 Sharelike 有興趣的朋友，可以參照&lt;a href=&quot;https://sharelike.asia/&quot;&gt;官方網站&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>茄萣黑色米克斯徵求新主人</title>
    <link href="https://fntsr.tw/announce/ka-tiann-black-mix-dog-seeks-new-owner/" />
    <id>https://fntsr.tw/announce/ka-tiann-black-mix-dog-seeks-new-owner/</id>
    <updated>2017-12-13T21:45:31.000Z</updated>
    <published>2017-12-13T21:45:31.000Z</published>
<content type="html">&lt;p&gt;最近服役的學校來了一隻有戴項圈的黑色土狗，最近有 Follow 我噗浪的朋友應該也知道我與這隻黑犬的互動，詳細的故事這邊就不多贅述，避免大家直接按 END 鍵，有興趣的我們在私下聊聊。&lt;/p&gt;
&lt;p&gt;因為是有項圈的狗，也很溫馴，所以我並沒有請學校盡快通知動保處來處理，雃是暫時收養著，想等待主人來認領。但直到今天都沒有人前來詢問，推估可能是被棄養了。也曾經和其他幾位老師爭取將牠收編為校狗，但今天在確認學校無法收編這隻狗為校狗的情況下，發了這個相簿看有沒有人願意認養。之前在沒有確定可以收編前，我是不太敢幫牠取名字，現在看來我也沒機會幫牠取名字了，但為了方便稱呼，所以這邊就以「黑犬」或「牠」來代稱。&lt;/p&gt;
&lt;p&gt;黑犬來到我服役的學校時，似乎已經有流浪過一小段時間，可能和其他流浪狗有過不少衝突，因為牠身上有著不少正在結痂的傷口，其中又以右耳上的傷痕最讓人心疼。身體方面，牠目前也沒經過結紮，暫時也不確定有沒有植入過晶片，若收養的人希望能結紮，這邊的老師會願意協助。&lt;/p&gt;
&lt;p&gt;基本上從認識黑犬的第一天開始，牠就會尾隨我去巡邏、開門（解除保全）、關門（設定保全），或是在我去做勞動時乖乖地跟著，然後沒事的時候就會在川堂躺著睡覺。牠不會亂吠、亂咬，也不會追趕這裡的學生，學生好奇要摸牠，牠也很乖巧的躺著、坐著或站著，不會表示出警戒或有敵意的神情，本來就不怕狗的學生都很喜歡牠。儘管有幾次調皮的男學生會拿棍子戳牠，在喝止以及說明之後，這些學生都跟黑犬有著良好的互動。這些日子以來，我有感受到以黑犬作為生命教育是一個很好的切入點。&lt;/p&gt;
&lt;p&gt;黑犬似乎也有訓練過，跟牠說坐下、握手，牠都聽得懂，雖然不一定每次都會照做，但有食物當前時通常會很沒尊嚴地照做。對，牠是一隻很愛吃的狗，不確定是因為被棄養後曾流浪過、餓過肚子，還是牠食量真的不小，所以唯一會讓他聽話或失控的原因大概就是食物。只要有人手上拿食物，牠都會不由自主地尾隨，但這點在最近幾天都有好好餵養牠後，有比較受到控制。之前經過垃圾桶時，也會有想翻找食物的衝動，但這幾天我都有在訓練牠，讓牠知道這是不行的，所以我想牠是會改掉這個壞習慣。目前我們都是以營養午餐剩下的白飯，和著一些狗飼料、或是狗罐頭來餵養，讓牠不至於餓到生病，或是餓到做出偏差行為。每次餵食時，牠都會吃得精光，算是不挑嘴的好狗狗。&lt;/p&gt;
&lt;p&gt;如果有其他學校想要收編校狗抵禦流浪狗，那黑犬也是個很好的選擇。牠在上禮拜五時，曾經在另外一位保全背後聲援的情況下，趕走試圖闖進學校的七隻流浪狗。牠今天也很勇敢地跑去隔壁國小跟其他流浪狗叫囂，雖然最後不敵地頭蛇的跑回來我這邊，但對於黑犬有保護環境不受流浪狗侵擾的資質，已經是無法掩蓋的光芒啦。黑犬也很忠心，雖然我無法讓牠進守衛室過夜，但牠幾乎都會睡在門前等待早上的來臨，然後再跟著我一起去開門。在不是我當值的日子裡，當牠聽到當值保全搖動鑰匙串的聲音，也會很乖巧的跟隨，和保全人員一起守衛校園。&lt;/p&gt;
&lt;p&gt;說了不少關於黑犬的優點，希望有能力且願意飼養的朋友，能跟我接洽。在牠被學校通知動保處前來抓取前，讓牠有個新的安全歸宿，感激不盡。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>更改噗浪被標記噗文的樣式</title>
    <link href="https://fntsr.tw/articles/change-style-of-marked-plurk/" />
    <id>https://fntsr.tw/articles/change-style-of-marked-plurk/</id>
    <updated>2017-12-12T22:11:19.000Z</updated>
    <published>2017-12-12T22:11:19.000Z</published>
<content type="html">&lt;p&gt;噗浪（Plurk）以橫向時間軸（timeline）為主，顯示一則則訊息與其討論的社交平台。通常使用者會稱時間軸為河道，訊息為噗、或噗文（plurk），噗浪上的朋友則為噗友。是一個相對臉書、推特來說，較有小圈圈和隱私性的微網誌社交平台。&lt;/p&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;雖然一度潛水一陣子，但我一直都是噗浪（Plurk）的使用者。噗浪官方在近幾年很努力的在營運，其開發團隊也陸續實作了不少新功能，其中令我感到方便的莫過於「最愛」、「消音」和「書籤」功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**「最愛」**我通常會用於值得紀念的噗，除此之外，我想特別持續追蹤的噗，或是回覆中有些有趣的討論會讓我想關注的，我也會套用「最愛」標記。&lt;/li&gt;
&lt;li&gt;**「書籤」**則用在我覺得這噗提供的資訊不錯，日後可能會遇到，或是我還算有興趣，但我現在沒時間看，那我會先收進標籤，等待日後再一一觀看，並幫該噗標上比較精確的 &lt;code&gt;#hashtah&lt;/code&gt;。就如其名一樣，像是書籤一般，或是作為稍後閱讀的標記。&lt;/li&gt;
&lt;li&gt;**「消音」**就簡單得多，我已經沒興趣的噗、或是我覺得不錯但是我不想一直被洗回覆讓噗不斷浮上來的噗，我都會點消音，讓河道比較乾淨，能專注在我有興趣的話題或是新的噗文。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但隨著這些功能的使用，的確有讓我覺得河道舒適多，但又有種還可以更好的念頭。像是有些消音的噗，我可能就連其噗文都不想看到，但是他的顯示權重不會因為其被消音就會被改善，在滑河道時還是會不斷看到，成為躁噗（noisy plurk）。可是如果消音的噗都看不到，或不明顯，又會讓一些雖然消音，但有加最愛或標記的噗跟著消失，怎麼想都有點尷尬。更別提官方怎麼可能因為我的一些小執著改變整個噗的顯示方式呢？&lt;/p&gt;
&lt;p&gt;所幸雖然雖然不想當噗浪的奧客，但噗浪卻提供了能夠自由客製化河道樣式的功能，讓我們能夠透過 CSS 去自訂我們河道的顯示細節。本篇文章就講述根據這個功能去解決上述的需求。&lt;/p&gt;
&lt;h2 id=&quot;結構與規則&quot;&gt;結構與規則&lt;/h2&gt;
&lt;p&gt;在動工之前，首先要了解噗浪的 HTML 結構，下面的原始碼過濾掉了無需關注的部分，只針對會動到的標籤與其周邊結構去顯示：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;layout_body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;layout_content_html&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;layout_content&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        &amp;#x3C;!-- 河道 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;timeline_holder&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;timeline_cnt&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            &amp;#x3C;!-- 噗文放置區 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;block_cnt&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;              &amp;#x3C;!-- 一則噗文；待會會針對這個標籤做說明 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;              &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk cboxAnchor&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ......&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tbody&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;                      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;td_img&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        &amp;#x3C;!-- 放置發噗者的大頭貼 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;p_img&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        &amp;#x3C;!-- 噗文本身；待會會針對這個標籤做說明 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;xxxxxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk_cnt&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                          &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;.......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tbody&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;              &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;              &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk cboxAnchor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;              &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk cboxAnchor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            &amp;#x3C;!-- 不確定用途，可忽略 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;block_cnt&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;display: none;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        &amp;#x3C;!-- 噗文的回覆區；待會會針對這個標籤做說明 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;form_holder&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk_box&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;透過上面的結構可知每一組 &lt;code&gt;&amp;#x3C;div class=&quot;plurk cboxAnchor&quot;&gt;......&amp;#x3C;/div&gt;&lt;/code&gt; 就是一則噗文，而噗浪針對置頂、書籤、最愛等等類型的噗，都會在這個標籤附上 CSS class，其對應分別如下&lt;/p&gt;
&lt;h3 id=&quot;噗浪各標記樣式類別&quot;&gt;噗浪各標記樣式類別&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;置頂： &lt;code&gt;pinned&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;書籤： &lt;code&gt;mark&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;最愛： &lt;code&gt;favorite&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;消音：&lt;code&gt;muted&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;轉噗：&lt;code&gt;replurk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;十八禁： &lt;code&gt;porn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;有新回覆：&lt;code&gt;new&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;當前顯示：&lt;code&gt;display&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;&amp;#x3C;!-- 示例：一則有書籤、消音標記的噗文--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk cboxAnchor mark muted &quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;消音標記的注意事項&quot;&gt;消音標記的注意事項&lt;/h3&gt;
&lt;p&gt;關於消音標記比較需要注意的是，如果你點擊展開的那則噗是被消音的，那麼回覆區的 &lt;code&gt;&amp;#x3C;div class=&quot;plurk_box&quot;&gt;......&amp;#x3C;/div&gt;&lt;/code&gt; 也會有 &lt;code&gt;muted&lt;/code&gt; class。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;&amp;#x3C;!-- 示例：點擊被消音的噗文時的連貫作用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;&amp;#x3C;div id=&quot;timeline_holder&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  &amp;#x3C;div id=&quot;timeline_cnt&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    &amp;#x3C;div class=&quot;block_cnt&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      &amp;#x3C;!--&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 點擊這則被消音的噗文 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk cboxAncho muted display&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;&amp;#x3C;!-- 噗文的回覆區；當點被消音的噗文時，這邊也會加上 muted class --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;form_holder&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;plurk_box muted&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;......&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;實作樣式&quot;&gt;實作樣式&lt;/h2&gt;
&lt;p&gt;在本章列出幾種情境、需求，並且附上示例給讀者參考。記得每次更改要看效果時，都要重新整理噗浪的網站哦。&lt;/p&gt;
&lt;h3 id=&quot;讓被消音的噗文變得不明顯&quot;&gt;讓被消音的噗文變得不明顯&lt;/h3&gt;
&lt;p&gt;回顧需求，如果想要讓被消音的噗文變得不明顯，最直白的作法就是增加該噗元素的透明度。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.muted&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是由於上節說的連貫作用，會導致展開被消音噗文的留言時，留言區也會變成不明顯的。如果本來就沒打算看已消音噗的留言時，倒是不需要再作修改。但如果有要回顧留言的需求，那建議還是將被透明化的元素定義的精準一點：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;讓鼠標移到消音的噗文時弱化透明化的效果&quot;&gt;讓鼠標移到消音的噗文時，弱化透明化的效果&lt;/h3&gt;
&lt;p&gt;雖然把消音的噗給淡化了，但有時候可能還是會想知道上面寫什麼，比較折衷的方式，就是讓鼠標移上去時，減弱透明化的效果，所以我們再透過 &lt;code&gt;:hover&lt;/code&gt; 修飾目標：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted:hover&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.95&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;改變噗文背景顏色&quot;&gt;改變噗文背景顏色&lt;/h3&gt;
&lt;p&gt;針對消音的部分做改善後，接下來針對想要將被標籤、被加到最愛的噗文加入比較不一樣的特徵，讓我可以一眼看出該噗就是被標記或是被加最愛。這裏實作的方式是改變噗文的背景顏色，不過修飾的目標不再是 &lt;code&gt;&amp;#x3C;div class=&quot;plurk&quot;&gt;&amp;#x3C;/div&gt;&lt;/code&gt;，而是該元素內只有包括內文的 &lt;code&gt;&amp;#x3C;div class=&quot;plurk_cnt&quot;&gt;&amp;#x3C;/div&gt;&lt;/code&gt; 元素，實際差異可以透過瀏覽器的開發者工具查看，這裡就不多贅述。&lt;/p&gt;
&lt;p&gt;將被加入書籤的噗文背景色改成&lt;strong&gt;瓶覗&lt;/strong&gt;綠：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.mark&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;rgb&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;225&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;223&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;將被加到最愛的噗文背景色改成&lt;strong&gt;桜色&lt;/strong&gt;粉，並考慮如果一篇噗文同時被加入書籤和最愛時，已加入最愛的顏色為主：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.favorite&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.mark.favorite&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  background&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;rgb&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;223&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;225&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;多重標記處理&quot;&gt;多重標記處理&lt;/h3&gt;
&lt;p&gt;如上小節有提到可能會有一篇噗文會有多重標記的情況，也要一一作處理。同是更改背景色為效果的標記，若同時都有時該以哪個標記為主、如果被加最愛的標記也被消音時，是不是讓透明度效果不要那麼強、等等。&lt;/p&gt;
&lt;p&gt;這邊以減弱被消音的書籤、最愛噗文的透明度效果為例：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted.mark&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted.favorite&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.9&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;成果&quot;&gt;成果&lt;/h2&gt;
&lt;h3 id=&quot;效果截圖&quot;&gt;效果截圖&lt;/h3&gt;
&lt;h5 id=&quot;沒有任何標記的噗文&quot;&gt;沒有任何標記的噗文&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.07.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.07.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.07.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;消音後的噗文&quot;&gt;消音後的噗文&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.46.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.46.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.46.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;消音後鼠標移到上面的噗文&quot;&gt;消音後，鼠標移到上面的噗文&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.50.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.50.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.50.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;加入最愛的噗文&quot;&gt;加入最愛的噗文&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.20.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.20.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.20.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;加入最愛與書籤的噗文優先權&quot;&gt;加入最愛與書籤的噗文（優先權）&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.34.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.34.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.34.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;加入書籤的噗文&quot;&gt;加入書籤的噗文&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.25.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.25.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.25.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;加入書籤且被消音的噗文略淡&quot;&gt;加入書籤且被消音的噗文（略淡）&lt;/h5&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.59.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.59.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-12-12-下午9.46.59.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:1}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;樣式表&quot;&gt;樣式表&lt;/h3&gt;
&lt;p&gt;除了上一章的修改外，這底的樣式表多了一個針對最近推出的 R18 標記功能做處理，讓該噗內容在鼠標移上去前是有模糊化效果的，避免在滑河道時被後面路過的親友、同事看到神奇的噗而產生什麼誤會，實際效果就請讀者自己嘗試看看囉！&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Mark */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.mark&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;rgb&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;213&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;251&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Favorite */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.favorite&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.mark.favorite&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .plurk_cnt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  background&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;rgb&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;223&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;225&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* R18 ; Behind the attention */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.porn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .td_cnt&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .text_holder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  filter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;blur&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.porn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .td_cnt&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; .text_holder:hover&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  filter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Muted */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted.mark&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted.favorite&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.9&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.plurk.muted:hover&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.95&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;這篇文章算是自己針對需求進行修改後，順帶產生的一篇教學文。其中更改的元素並不多，只專注在噗文的背景色和透明度上，但其實噗浪自訂 CSS 的功能是還可以做出更多變化的，這部分網路上應該也有文章在講了，有興趣進一步的朋友可以找找看資料。&lt;/p&gt;
&lt;p&gt;本文章所示範的顏色是以預設的河道樣式為底去套用的，不一定適用於各位的河道上，所以要套用什麼顏色、多少透明度就煩請各位依照自己的河道樣式慢慢測試囉。懂網頁開發的朋友也可以針對文字顏色去做改變，或是進一步做點配套設計。等哪天我有空，或許就會在整理一篇文章專門在講修改哪些類別可以改變河道上什麼元素的樣式吧。嗯，有空的話。 XDD&lt;/p&gt;</content>
    <category term="web" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：術語、名詞解釋</title>
    <link href="https://fntsr.tw/articles/aoe-ii-terms/" />
    <id>https://fntsr.tw/articles/aoe-ii-terms/</id>
    <updated>2017-12-05T16:12:32.000Z</updated>
    <published>2017-12-05T16:12:32.000Z</published>
<content type="html">&lt;p&gt;這篇將一直以來看過的世紀帝國相關術語做個整理，基本上我會盡量用自己的話嘗試解釋得比較好懂，若有朋友認為我理解錯誤，還請留言告知。&lt;/p&gt;
&lt;p&gt;本篇比較傾向一個速查表的概念，所以不會針對術語做太詳細的解釋與教學。之後若有時間時，可能會再寫文章去做教學吧。不過如果已經有一份現有的文章做出了很好的解釋，我可能就會偷懶了（逃）。&lt;/p&gt;
&lt;h2 id=&quot;建築&quot;&gt;建築&lt;/h2&gt;
&lt;p&gt;這邊的術語多源自於舊版世紀帝國的熱鍵。其中 B 是開啟村民建造選單的熱鍵。有附英文名稱的，是用來方便大家記憶的部分，會將代表的字母用粗體大寫表示。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TC：城鎮中心 (==T==own ==C==enter)，也簡稱為主堡。&lt;/li&gt;
&lt;li&gt;BE：居住房舍 (hous==E==)&lt;/li&gt;
&lt;li&gt;BZ：伐木場&lt;/li&gt;
&lt;li&gt;BG：採礦營地 &lt;/li&gt;
&lt;li&gt;BI：磨坊 (m==I==ll)&lt;/li&gt;
&lt;li&gt;BF：農田 (==F==arm)&lt;/li&gt;
&lt;li&gt;BM：市集 (==M==arket)&lt;/li&gt;
&lt;li&gt;BS：兵工廠 (black==S==mith)&lt;/li&gt;
&lt;li&gt;BU：學院 (==U==niversity)&lt;/li&gt;
&lt;li&gt;BY：修道院 (monaster==Y==)&lt;/li&gt;
&lt;li&gt;BB：軍營 (==B==arracks)&lt;/li&gt;
&lt;li&gt;BA：射箭場 (==A==rchery range)&lt;/li&gt;
&lt;li&gt;BL：馬廄 (stab==L==e)&lt;/li&gt;
&lt;li&gt;BK：攻城器製造所 (siege wor==K==shop)&lt;/li&gt;
&lt;li&gt;BV：城堡&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;單位&quot;&gt;單位&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;小兵：劍兵系 (民兵、裝甲步兵、長劍兵、雙手劍兵、劍兵勇士)&lt;/li&gt;
&lt;li&gt;小弓：徒步弓兵系 (弓兵、弩兵、強弩兵)&lt;/li&gt;
&lt;li&gt;小白：騎士系 (騎士、騎兵、遊俠)，源自此單位坐騎的顏色。&lt;/li&gt;
&lt;li&gt;小黑：蒙古突騎，源自此單位坐騎的顏色。&lt;/li&gt;
&lt;li&gt;小鷹：鷹勇士，也會被簡稱鷹勇、或戲稱小鳥兵。&lt;/li&gt;
&lt;li&gt;小炮：火砲 / 手推炮。&lt;/li&gt;
&lt;li&gt;肉馬：斥候騎兵系（斥候騎兵、輕騎兵、匈牙利輕騎兵），源自訓練本兵種只需要食物。&lt;/li&gt;
&lt;li&gt;垃圾兵：槍兵系、矛兵系、斥候騎兵系，源自訓練這幾系兵種不需要黃金，通常用在後期黃金不夠時，海一群用數量取勝去進攻。&lt;/li&gt;
&lt;li&gt;老頭：僧侶，源自此單位的長相。&lt;/li&gt;
&lt;li&gt;小天使：匈牙利輕騎兵，源自此單位後面的翅膀。&lt;/li&gt;
&lt;li&gt;堡兵：各文明只能在城堡訓練的特殊兵種。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;經濟&quot;&gt;經濟&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;餵羊：指初期在宰羊時，一次只殺一隻，好處是可以降低肉的自然耗損，得到更多食物資源。&lt;/li&gt;
&lt;li&gt;趕鹿：利用單位靠近鹿會導致其會反方向逃跑的特性，用斥候將鹿趕到資源採集點附近宰殺。&lt;/li&gt;
&lt;li&gt;停豬：把野豬引到 TC 裡的時候，再射一箭，然後立刻躲進TC，這樣豬就會乖乖停住，屆時就可等羊採完再殺豬。&lt;/li&gt;
&lt;li&gt;主礦、副礦：通常 TC 附近的金、石會有各兩堆，量比較多的稱為主礦、量少的為副礦。亦稱主金、副金、主石、副石。&lt;/li&gt;
&lt;li&gt;26P：指實際人口數為 26 人 (25村民 + 1斥候)，18P, 19P, …. ,30P 等，以此類推。&lt;/li&gt;
&lt;li&gt;26+2P：指在 26P 時升級封建時代，並在升級後訓練 2 隻村民後，升級城堡時代。&lt;/li&gt;
&lt;li&gt;120度找羊：在遊戲開始時沒能直接發現羊時，利用斥候和兩隻村民以120度分為三個方向搜索，加快羊的搜索速度。&lt;/li&gt;
&lt;li&gt;雙BA、雙伐木：當初期採用木頭需求比較高的戰術時，在 21P 前後建立第二個伐木場，讓伐木工不容易擠在一塊或是卡住，來增加採集木頭的效率。&lt;/li&gt;
&lt;li&gt;HCCCC：遊戲一開始將食物全部拿去訓練村民，源自舊版熱鍵。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;戰術&quot;&gt;戰術&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;偷豬：利用野豬會追擊攻擊者的特性，利用斥候將其他玩家的野豬偷回家宰殺。&lt;/li&gt;
&lt;li&gt;標狼：透過建築物地基查看迷霧中的狼是否還在原位置，若不在了就表示敵人可能在其附近進行活動（快攻、前置）&lt;/li&gt;
&lt;li&gt;標金：類似標狼的原理，將木牆地基放置在敵人金礦附近，透過地基視野查看敵人採集金礦的人數，來揣測會使用什麼戰術。標石、標木也是相同原理。&lt;/li&gt;
&lt;li&gt;探點：透過建築物無法蓋在既有建築上的特性，查看迷霧中特定區快是否已經有敵軍的建築。&lt;/li&gt;
&lt;li&gt;前置：快攻時，將軍事建築蓋在敵人附近，減短軍事單位移動的時間成本。&lt;/li&gt;
&lt;li&gt;插堡：把城堡蓋在敵人重要的資源點附近。&lt;/li&gt;
&lt;li&gt;邊家：團戰時，位置比較靠近敵人的玩家。&lt;/li&gt;
&lt;li&gt;內家：團戰時，位置比較遠離敵人的玩家。&lt;/li&gt;
&lt;li&gt;黑快：黑暗時代快攻，以三民兵騷擾再轉其他戰術為主流，通常於 31P 左右 (含 1 斥侯 + 3 民兵) 升級封建時代。也有利用波斯玩 TC 爆的特別戰術。&lt;/li&gt;
&lt;li&gt;封快：封建時代快攻，以「雙BA訓練弓兵、矛兵」和「裝甲步兵搭配村民蓋箭塔 (裝甲塔)」為主流，也有以肉馬騷擾為主的戰術。通常於 22P 左右升級封建時代。在團戰中，邊家會以此戰術為主。&lt;/li&gt;
&lt;li&gt;城快：城堡時代快攻，以馬爆和城堡兵為主流。但因為現在遊戲進攻節奏較快，升上城堡時代再攻擊已經相對為慢了，所以又改稱直城，意即直接上城堡時代再訓練軍事單位的意思。通常以 26+2P 方式升級城堡時代。在團戰中，內家會以此戰術為主。&lt;/li&gt;
&lt;li&gt;超城快：犧牲村民數量，比城快再更早上城堡時代並以鷹勇士或僧侶發動進攻，但因為失敗成本過高、容易後繼無力、且對封快沒有抵抗力，不常在團戰中使用。&lt;/li&gt;
&lt;li&gt;帝快：帝王時代快攻，適用於有火槍兵或僧侶科技全滿的文明。較適合在地形封閉的地圖使用，並要在 21 分鐘左右升上帝王時代。&lt;/li&gt;
&lt;li&gt;鷹爆：指用20p左右搶升城，約14~15分上城，之後就用大量鷹勇士來騷擾&lt;/li&gt;
&lt;li&gt;馬爆：指30p左右搶升城，升城大量騎士騷擾，數量多的話連城鎮中心都不保&lt;/li&gt;
&lt;li&gt;僧爆：指搶升城後馬上做出大量的僧侶，有兵招兵，有人招人，連建築都能招&lt;/li&gt;
&lt;li&gt;塔爆：在升上封建時代後，以 7~8 村民到敵軍基地蓋很多箭塔的戰術。&lt;/li&gt;
&lt;li&gt;轉兵：指訓練的單位種類轉型成其他類單位，像是小兵轉小白、三民兵轉小弓等。&lt;/li&gt;
&lt;li&gt;堡推：以城堡推進的戰術。&lt;/li&gt;
&lt;li&gt;意識流：打法不再侷限於制式的流程，而是根據遊戲狀況隨機應變進行各種策略與戰術。&lt;/li&gt;
&lt;li&gt;強軍事：以訓練軍事單位為主，通常在城堡後仍維持 1TC，將資源都投資在軍事上。&lt;/li&gt;
&lt;li&gt;打進貢：以防守為主的玩家將自家圍好後，將多的資源進貢給強軍事同盟的合作戰術。&lt;/li&gt;
&lt;li&gt;裸奔：基地被推平，只剩下村民逃出來另起爐灶。&lt;/li&gt;
&lt;li&gt;drush：Dark age RUSH，即黑快。&lt;/li&gt;
&lt;li&gt;flush：Feudal age RUSH，即封快。&lt;/li&gt;
&lt;li&gt;trush：Tower RUSH，即塔爆。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;控兵兵陣&quot;&gt;控兵、兵陣&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;回馬弓：指在射對方一箭之後，馬上往返方向逃，逃跑同時再射一箭，再逃跑(只有蒙古突騎辦的到)&lt;/li&gt;
&lt;li&gt;克隆：即將一群單位指向目標後，透過 SHIFT 將其中一名單位剔除群組後，再指向另一名目標，以此類推，直到每個單位都有各自的目標。通常用在一群僧侶要同時招降不同單位時。&lt;/li&gt;
&lt;li&gt;連弩陣：以連弩兵為主，並以戟兵和騎兵為輔的陣形。&lt;/li&gt;
&lt;li&gt;象陣：以戰象為主，並以弩炮、戟兵、遊俠和火炮為輔的陣形。&lt;/li&gt;
&lt;li&gt;不列顛長弓陣：以長弓兵為主，並以戟兵、騎兵和劍勇為輔的陣形。&lt;/li&gt;
&lt;li&gt;馬雅羽弓陣：以羽毛弓箭手為主，並以戟兵和鷹勇士為輔的陣形。&lt;/li&gt;
&lt;li&gt;哥德三色布丁：透過哥德步兵訓練速度極快的優勢，形成以劍兵系、槍兵系和歌德衛隊為組合的陣型。&lt;/li&gt;
&lt;li&gt;薩拉森陣：以阿拉伯奴隸兵為主，並以重投、推砲、巨頭為輔的陣型。&lt;/li&gt;
&lt;li&gt;土耳其陣： 以土耳其火槍兵和火炮為主，並以肉馬、垃圾兵為輔的陣型，在資源足夠的情況下，會再搭配火炮塔。&lt;/li&gt;
&lt;li&gt;高麗陣：以馬車和投石車為主，並以肉馬和戟兵為輔的陣型。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;遊戲模式&quot;&gt;遊戲模式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;綠阿：即綠色阿拉伯，為基本地行為草地，且保證起始資源相同、沒有狼的隨機地圖。&lt;/li&gt;
&lt;li&gt;黑森：即黑森林。&lt;/li&gt;
&lt;li&gt;黑森50：即黑森林，並在遊戲時間 50 分鐘後才開打，不過在玩之前建議要先和房主確認有什麼細節是允許或禁止的，避免被認為鑽漏洞或是小手段，導致雙方不愉快。&lt;/li&gt;
&lt;li&gt;封海：不打海戰。&lt;/li&gt;
&lt;li&gt;馬堡：基於劇情的一種遊戲模式，系統會大量出馬，必須用他去守哨站，守越多馬進化越快。&lt;/li&gt;
&lt;li&gt;兵堡：基於劇情的一種遊戲模式，文明隨機，一開始每位玩家會有 5 座城堡，猛升城堡兵開打。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;常用語音代號&quot;&gt;常用語音代號&lt;/h2&gt;
&lt;p&gt;這邊只列上幾個我比較常在遊戲、文章、實況中看到的語音代號。順帶補充，世紀帝國二原版的中文語音，女聲的部分是陶晶瑩配的，個人是覺得配得很經典 XD。&lt;/p&gt;
&lt;h3 id=&quot;通用&quot;&gt;通用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1：Yes / 好。&lt;/li&gt;
&lt;li&gt;2：No / 不。&lt;/li&gt;
&lt;li&gt;7：Ahh / 啊～&lt;/li&gt;
&lt;li&gt;9：Oooh / Oooh~ Yeah~&lt;/li&gt;
&lt;li&gt;11：Herb laugh / [奸笑聲]&lt;/li&gt;
&lt;li&gt;14：Start the game / 欸，遊戲已經開始囉！&lt;/li&gt;
&lt;li&gt;24：Dadgum / 吼，真衰！&lt;/li&gt;
&lt;li&gt;30：Wololo (仿一代僧侶招降聲) / [彈唇音]&lt;/li&gt;
&lt;li&gt;26：The wonder / 糟了，是世界奇觀！&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;經濟-1&quot;&gt;經濟&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3：Food, please / 請給我食物。&lt;/li&gt;
&lt;li&gt;4：Wood, please / 請給我木材。&lt;/li&gt;
&lt;li&gt;5：Gold, please / 請給我黃金。&lt;/li&gt;
&lt;li&gt;6：Stone, please / 請給我石頭。&lt;/li&gt;
&lt;li&gt;38：Give Me Your Extra Resources / 請你把多的資源給我。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;軍事&quot;&gt;軍事&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;16：Enemy Sighted / 發現敵人了。&lt;/li&gt;
&lt;li&gt;21：Nice Town I’ll Take It / 好地方，我要定了。&lt;/li&gt;
&lt;li&gt;22：Quit Touchin / 別再打我了啦！&lt;/li&gt;
&lt;li&gt;23：Raiding Party / 大夥進攻囉！&lt;/li&gt;
&lt;li&gt;31：Attack an Enemy Now / 攻擊敵人，衝啊！&lt;/li&gt;
&lt;li&gt;36：Wait for My Signal to Attack / 等我下令攻擊！&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ptt.cc/bbs/C_Chat/M.1504683562.A.8C9.html&quot;&gt;閒聊 世紀帝國近年戰術介紹與推薦直播 – 看板 C_Chat – 批踢踢實業坊&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xuite.net/scxclub/x/41928665-%E4%B8%96%E7%B4%80%E5%B8%9D%E5%9C%8B2%E5%BE%81%E6%9C%8D%E8%80%85%E5%85%A5%E4%BE%B5+%255B%E6%AD%A3%E8%A6%8F%E6%88%B0%E7%95%A5%255D+%E6%9D%91%E6%B0%91%E5%BE%AE%E6%93%8D%E8%A7%A3%E8%AA%AA&quot;&gt;世紀帝國2征服者入侵 正規戰略 村民微操解說 @ 劇情一族&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xuite.net/scxclub/x/41780559-%E4%B8%96%E7%B4%80%E5%B8%9D%E5%9C%8B2%E5%BE%81%E6%9C%8D%E8%80%85%E5%85%A5%E4%BE%B5+-+%E5%BF%AB%E9%80%9F%E9%8D%B5%2528%E7%86%B1%E9%8D%B5%2529%E4%B8%80%E8%A6%BD%E8%A1%A8&quot;&gt;世紀帝國2征服者入侵 – 快速鍵(熱鍵)一覽表 @ 劇情一族&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-252653-1-13.html&quot;&gt;名詞解釋 – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-275097-1-10.html&quot;&gt;網路上的名詞 – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-455223-1-1.html&quot;&gt;“標狼”？ – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-137540-1-29.html&quot;&gt;雙伐木場 – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-394308-1-1.html&quot;&gt;綠阿、黑森細部規則探討 – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tieba.baidu.com/f?kz=276525194&amp;#x26;red_tag=1561742546&quot;&gt;《帝国时代》全术语 – 帝国时代吧&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gamez.com.tw/thread-469013-1-2.html&quot;&gt;薩拉森(奴隸兵+重投+推砲+巨頭) – 世紀帝國版 – 鐵之狂傲&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ptt.cc/bbs/AOE/M.1491977867.A.B7E.html&quot;&gt;AOE2 黃金陣容 – 看板 AOE – 批踢踢實業坊&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ptt.cc/bbs/AOE/M.1233809733.A.DE4.html&quot;&gt;請問 世紀帝國遊戲一個控兵的專有名詞 – 看板 AOE – 批踢踢實業坊&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tieba.baidu.com/p/26948865?red_tag=0648978978&quot;&gt;克隆操作是什么意思？比方说一个和尚招一个骑士。怎样操作 – 帝国时代吧&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pttgame.com/aoe/M.1491728400.A.743.html&quot;&gt;AOE2 僧侶分享 – 世紀帝國 – 世紀帝國2 – Age of Empires | PTT 遊戲區&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>關於我的暱稱</title>
    <link href="https://fntsr.tw/announce/about-my-nicknames/" />
    <id>https://fntsr.tw/announce/about-my-nicknames/</id>
    <updated>2017-11-20T19:52:32.000Z</updated>
    <published>2017-11-20T19:52:32.000Z</published>
<content type="html">&lt;p&gt;這些內容本來是放在我的個人頁面上，但因為最近正在著手改版，就想把這段說明撤下來。不過也捨不得把這些文字塵封在檔案系統中，逐漸忘卻，所以就寫成一篇文章放在部落格上保存了。原本是用英文寫成，後來直譯成中文版，在這篇文章有稍微擴充中文版的內容。&lt;/p&gt;
&lt;h2 id=&quot;中文&quot;&gt;中文&lt;/h2&gt;
&lt;h3 id=&quot;問fntsrfntsrlike要怎麼唸&quot;&gt;問： &lt;code&gt;fntsr&lt;/code&gt;、&lt;code&gt;fntsrlike&lt;/code&gt; 要怎麼唸？&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;fntsr&lt;/code&gt; 源於自造詞 &lt;code&gt;Fantasier&lt;/code&gt; 的去母音縮寫，該詞詞意為「幻想者」，用以期許自己不要因為未來各種殘酷現實而放棄做夢，要保持年輕時喜歡幻想且充滿熱情的精神，努力成為一個敢做夢、逐夢且將其實踐的人。而 &lt;code&gt;fntsrlike&lt;/code&gt; 則是為了因應帳號必須大於 5 字元的限制，而加的後綴，也意為「要成為像這樣的人」。&lt;/p&gt;
&lt;h3 id=&quot;問若虛這個名稱是怎麼來的&quot;&gt;問：「若虛」這個名稱是怎麼來的&lt;/h3&gt;
&lt;p&gt;「若虛」這名稱來自於成語「深藏若虛」，該成語源自《史記・老莊申韓列傳》的「吾聞之，良賈深藏若虛，君子盛德，容貌若愚。」，原是用來比喻有真才實學的人，不會到處誇耀，後引申為謙虛的意思。&lt;/p&gt;
&lt;p&gt;我在青少時，雖然總是盡量讓自己待人和善，但骨子裡總有一股傲氣會不禁意地表現出來，這讓我在人際關係上常遇到困境。且身邊友人也曾說，程式設計師在面對圈外人時，也總會流露出驕傲，讓人感到不太舒服；然而，在一個領域鑽的越深，應該要越覺得自己懂的太少，若是放不下傲氣，成就大概也就止於此，此為學習上的大忌。&lt;/p&gt;
&lt;p&gt;由於本身就是比較自傲的人，加上從事的資訊職業對外人又有隔閡，難免會有種優越感。所以用「若虛」這個名稱作為我的字號，提醒自己不要恃才傲物，並戒惕自己懂的還太少，比自己厲害的人仍很多，且他們都能&lt;strong&gt;深藏若虛&lt;/strong&gt;了，作為後輩，更要懂得謙虛。&lt;/p&gt;
&lt;h3 id=&quot;問為什麼也有人稱呼你月湖&quot;&gt;問：為什麼也有人稱呼你月湖？&lt;/h3&gt;
&lt;p&gt;這其實是來自於青少時的網名「月湖居士」，當時在某高中生論壇都用這個網名在上面交流。但因為四個字太長了，網友們也就都簡稱我為「月湖」，講久了就變成了我的暱稱。高中玩社團（電研社）時也都用這個暱稱，直到升大二時，才改用「若虛」作為網名，但從高中就認識的老朋友也都習慣這麼叫我了，所以在比較私人的平台、場合我仍然會使用這個暱稱為主。&lt;/p&gt;
&lt;h3 id=&quot;題外&quot;&gt;題外&lt;/h3&gt;
&lt;p&gt;其實古人在字號滿多是和本名相呼應的，但我這字號就單純用來期許自己而已。另外許多古人的字號都是「子Ｏ」，像是子淵、子貢、子路、子瞻、子由⋯⋯等等，於是我偶爾會和朋友開玩笑，其實我應該要叫「子虛」而不是「若虛」，嗯，對，就是子虛烏有的子虛。 XD&lt;/p&gt;
&lt;h2 id=&quot;english&quot;&gt;English&lt;/h2&gt;
&lt;h3 id=&quot;q-how-to-spell-your-id-fntsr-fntsrlike&quot;&gt;Q: How to spell your ID “fntsr”, “fntsrlike” ?&lt;/h3&gt;
&lt;p&gt;Fntsr is a own word “Fantasier” removed vowels, as a person have his fantasy world and try to make dream come true.&lt;/p&gt;
&lt;h3 id=&quot;q-talk-about-your-name-ruoshi&quot;&gt;Q: Talk about your name “Ruoshi” ?&lt;/h3&gt;
&lt;p&gt;It’s a Chinese name “若虛”, which is taken from idioms “深藏若虛” . It reminds me to be a modest person. I use this name to style myself since I have been adult.&lt;/p&gt;
&lt;h3 id=&quot;q-why-your-are-also-called-yuehu&quot;&gt;Q: Why your are also called “Yuehu” ?&lt;/h3&gt;
&lt;p&gt;That is my nickname. It’s also a Chinese word which is “月湖”, means moon-lake. It’s a abbreviation from “月湖居士”, means a person living near moonlake.&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：各文明特有建築、單位與科技翻譯對照表</title>
    <link href="https://fntsr.tw/articles/aoe-ii-chinese-translation-of-unique-units-and-technology-of-civilizations/" />
    <id>https://fntsr.tw/articles/aoe-ii-chinese-translation-of-unique-units-and-technology-of-civilizations/</id>
    <updated>2017-09-27T15:57:27.000Z</updated>
    <published>2017-09-27T15:57:27.000Z</published>
<content type="html">&lt;p&gt;本篇主要為世紀帝國 II 各文明在原版、HD、以及 Zoey 的工作坊&lt;a href=&quot;http://blog.fntsr.tw/articles/890/#fn-890-workshop&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;三種中文翻譯的對照表，也順便在開頭附上本體和各資料片的翻譯對照。本文沒有任何點評和探討，純粹作為資料整理與參考用。日後有時間再另外針對各文明史地做簡單研究與講解。&lt;/p&gt;
&lt;p&gt;因為原版並沒有「失落的帝國」及其之後資料片的翻譯，所以在該資料片的表格中，就直接省略原版的欄位。&lt;/p&gt;
&lt;p&gt;表 1：Age of Kings 文明翻譯對照表&lt;/p&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;th&gt;HD&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;Longbowman&lt;/td&gt;&lt;td&gt;長弓兵&lt;/td&gt;&lt;td&gt;長弓兵&lt;/td&gt;&lt;td&gt;長弓兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Warwolf&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;戰狼號&lt;/td&gt;&lt;td&gt;戰狼&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Yeomen&lt;/td&gt;&lt;td&gt;義勇騎兵&lt;/td&gt;&lt;td&gt;精銳答刺罕騎兵&lt;/td&gt;&lt;td&gt;義勇騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;拜占庭&lt;/td&gt;&lt;td&gt;Cataphract&lt;/td&gt;&lt;td&gt;拜占庭聖騎兵&lt;/td&gt;&lt;td&gt;甲胄騎兵&lt;/td&gt;&lt;td&gt;拜占庭重騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Greek Fire&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;希臘之火&lt;/td&gt;&lt;td&gt;希臘之火&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Logistica&lt;/td&gt;&lt;td&gt;後勤&lt;/td&gt;&lt;td&gt;後勤學&lt;/td&gt;&lt;td&gt;後勤學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;凱爾特&lt;/td&gt;&lt;td&gt;Woad Raider&lt;/td&gt;&lt;td&gt;菘藍武士&lt;/td&gt;&lt;td&gt;靛藍突擊者&lt;/td&gt;&lt;td&gt;靛藍突擊者&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Stronghold&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;堡壘&lt;/td&gt;&lt;td&gt;堡壘&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Furor Celtica&lt;/td&gt;&lt;td&gt;塞爾特狂熱&lt;/td&gt;&lt;td&gt;凱爾特狂暴&lt;/td&gt;&lt;td&gt;凱爾特狂暴&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中國&lt;/td&gt;&lt;td&gt;Chu Ko Nu&lt;/td&gt;&lt;td&gt;中國連弩兵&lt;/td&gt;&lt;td&gt;諸葛弩&lt;/td&gt;&lt;td&gt;諸葛弩手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Great Wall&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;長城&lt;/td&gt;&lt;td&gt;長城&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Rocketry&lt;/td&gt;&lt;td&gt;火箭技術&lt;/td&gt;&lt;td&gt;火箭術&lt;/td&gt;&lt;td&gt;火箭術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;法蘭克&lt;/td&gt;&lt;td&gt;Throwing Axeman&lt;/td&gt;&lt;td&gt;擲斧兵&lt;/td&gt;&lt;td&gt;擲斧兵&lt;/td&gt;&lt;td&gt;擲斧兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Chivalry&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;騎士精神&lt;/td&gt;&lt;td&gt;騎士精神&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Bearded Axe&lt;/td&gt;&lt;td&gt;倒鉤斧&lt;/td&gt;&lt;td&gt;芒刺斧&lt;/td&gt;&lt;td&gt;倒鉤斧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;哥德&lt;/td&gt;&lt;td&gt;Huskarl&lt;/td&gt;&lt;td&gt;哥德衛隊&lt;/td&gt;&lt;td&gt;近衛軍&lt;/td&gt;&lt;td&gt;哥德衛隊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Anarchy&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;無政府&lt;/td&gt;&lt;td&gt;無政府狀態&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Perfusion&lt;/td&gt;&lt;td&gt;軍事紀律&lt;/td&gt;&lt;td&gt;井噴&lt;/td&gt;&lt;td&gt;灌注士氣&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;日本&lt;/td&gt;&lt;td&gt;Samurai&lt;/td&gt;&lt;td&gt;日本武士&lt;/td&gt;&lt;td&gt;日本武士&lt;/td&gt;&lt;td&gt;日本武士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Yasama&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;射箭孔&lt;/td&gt;&lt;td&gt;射箭孔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Kataparuto&lt;/td&gt;&lt;td&gt;彈射器&lt;/td&gt;&lt;td&gt;彈射器&lt;/td&gt;&lt;td&gt;彈射器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;蒙古&lt;/td&gt;&lt;td&gt;Mangudai&lt;/td&gt;&lt;td&gt;蒙古突騎&lt;/td&gt;&lt;td&gt;蒙古突騎&lt;/td&gt;&lt;td&gt;蒙古突騎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Nomads&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;游牧&lt;/td&gt;&lt;td&gt;游牧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Drill&lt;/td&gt;&lt;td&gt;鑿岩機&lt;/td&gt;&lt;td&gt;操練&lt;/td&gt;&lt;td&gt;演習&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;波斯&lt;/td&gt;&lt;td&gt;War Elephant&lt;/td&gt;&lt;td&gt;戰象&lt;/td&gt;&lt;td&gt;戰象&lt;/td&gt;&lt;td&gt;戰象&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Boiling Oil&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;沸油&lt;/td&gt;&lt;td&gt;沸油&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Mahouts&lt;/td&gt;&lt;td&gt;象伕&lt;/td&gt;&lt;td&gt;象伕&lt;/td&gt;&lt;td&gt;象伕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;薩拉森&lt;/td&gt;&lt;td&gt;Mameluke&lt;/td&gt;&lt;td&gt;阿拉伯奴隸兵&lt;/td&gt;&lt;td&gt;馬穆魯克&lt;/td&gt;&lt;td&gt;馬木留克&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Madrasah&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;清真學堂&lt;/td&gt;&lt;td&gt;穆斯林學塾&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Zealotry&lt;/td&gt;&lt;td&gt;狂熱&lt;/td&gt;&lt;td&gt;狂熱行為&lt;/td&gt;&lt;td&gt;狂熱舉動&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;條頓&lt;/td&gt;&lt;td&gt;Teutonic Knight&lt;/td&gt;&lt;td&gt;條頓武士&lt;/td&gt;&lt;td&gt;條頓武士&lt;/td&gt;&lt;td&gt;條頓武士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Ironclad&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;重裝甲&lt;/td&gt;&lt;td&gt;鋼鐵甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Crenellations&lt;/td&gt;&lt;td&gt;砲門垛口&lt;/td&gt;&lt;td&gt;開垛口&lt;/td&gt;&lt;td&gt;垛口&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;土耳其&lt;/td&gt;&lt;td&gt;Janissary&lt;/td&gt;&lt;td&gt;土耳其火槍兵&lt;/td&gt;&lt;td&gt;蘇丹親兵&lt;/td&gt;&lt;td&gt;蘇丹禁衛隊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Sipahi&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;突厥騎射&lt;/td&gt;&lt;td&gt;采邑騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Artillery&lt;/td&gt;&lt;td&gt;砲兵&lt;/td&gt;&lt;td&gt;火砲術&lt;/td&gt;&lt;td&gt;火砲術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;維京&lt;/td&gt;&lt;td&gt;Berserk&lt;/td&gt;&lt;td&gt;狂戰士&lt;/td&gt;&lt;td&gt;狂戰士&lt;/td&gt;&lt;td&gt;狂戰士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Longboat&lt;/td&gt;&lt;td&gt;維京大戰船&lt;/td&gt;&lt;td&gt;龍頭戰艦&lt;/td&gt;&lt;td&gt;維京長船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Chieftains&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;酋長&lt;/td&gt;&lt;td&gt;酋長&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Berserkergang&lt;/td&gt;&lt;td&gt;狂暴戰士幫&lt;/td&gt;&lt;td&gt;狂戰士暴怒&lt;/td&gt;&lt;td&gt;狂戰士幫&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 2：The Conquerors 文明翻譯對照表&lt;/p&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;th&gt;HD&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;Jaguar Warrior&lt;/td&gt;&lt;td&gt;豹勇士&lt;/td&gt;&lt;td&gt;豹勇士&lt;/td&gt;&lt;td&gt;豹勇士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Atlatl&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;擲矛器&lt;/td&gt;&lt;td&gt;擲矛器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Garland Wars&lt;/td&gt;&lt;td&gt;榮冠戰爭&lt;/td&gt;&lt;td&gt;榮冠戰爭&lt;/td&gt;&lt;td&gt;花冠戰爭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;匈奴&lt;/td&gt;&lt;td&gt;Tarkan&lt;/td&gt;&lt;td&gt;韃靼騎兵&lt;/td&gt;&lt;td&gt;答刺罕騎兵&lt;/td&gt;&lt;td&gt;韃靼騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Marauders&lt;/td&gt;&lt;td&gt;無神論&lt;/td&gt;&lt;td&gt;無神論&lt;/td&gt;&lt;td&gt;無神論&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Atheism&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;掠奪者&lt;/td&gt;&lt;td&gt;掠奪者&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;韓國&lt;/td&gt;&lt;td&gt;War Wagon&lt;/td&gt;&lt;td&gt;馬戰車&lt;/td&gt;&lt;td&gt;高麗戰車&lt;/td&gt;&lt;td&gt;馬戰車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Turtle Ship&lt;/td&gt;&lt;td&gt;龜甲船&lt;/td&gt;&lt;td&gt;龜甲船&lt;/td&gt;&lt;td&gt;龜甲船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Panokseon&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;板屋船&lt;/td&gt;&lt;td&gt;板屋船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Shinkichon&lt;/td&gt;&lt;td&gt;投擲器&lt;/td&gt;&lt;td&gt;神機箭&lt;/td&gt;&lt;td&gt;神機箭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;馬雅&lt;/td&gt;&lt;td&gt;Plumed Archer&lt;/td&gt;&lt;td&gt;羽毛箭射手&lt;/td&gt;&lt;td&gt;羽箭手&lt;/td&gt;&lt;td&gt;羽箭手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Obsidian Arrows&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;黑曜石之箭&lt;/td&gt;&lt;td&gt;黑曜石之箭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;El Dorado&lt;/td&gt;&lt;td&gt;黃金國&lt;/td&gt;&lt;td&gt;黃金國&lt;/td&gt;&lt;td&gt;黃金國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;西班牙&lt;/td&gt;&lt;td&gt;Conquistador&lt;/td&gt;&lt;td&gt;西班牙征服者&lt;/td&gt;&lt;td&gt;西班牙征服者&lt;/td&gt;&lt;td&gt;征服者&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Missionary&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Inquisition&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;宗教法庭&lt;/td&gt;&lt;td&gt;異端審判&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Supremacy&lt;/td&gt;&lt;td&gt;霸權&lt;/td&gt;&lt;td&gt;霸權&lt;/td&gt;&lt;td&gt;至高主權&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 3：The Forgotten 文明翻譯對照表&lt;/p&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;HD&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;Kamayuk&lt;/td&gt;&lt;td&gt;印加槍兵長&lt;/td&gt;&lt;td&gt;槍隊長&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Slinger&lt;/td&gt;&lt;td&gt;投石手&lt;/td&gt;&lt;td&gt;投石手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Andean Sling&lt;/td&gt;&lt;td&gt;信使&lt;/td&gt;&lt;td&gt;信使&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Couriers&lt;/td&gt;&lt;td&gt;安第斯彈弓&lt;/td&gt;&lt;td&gt;安地斯彈弓術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;印度&lt;/td&gt;&lt;td&gt;Elephant Archer&lt;/td&gt;&lt;td&gt;騎象射手&lt;/td&gt;&lt;td&gt;象弓騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Imperial Camel&lt;/td&gt;&lt;td&gt;帝王駱駝兵&lt;/td&gt;&lt;td&gt;帝王駱駝騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Sultans&lt;/td&gt;&lt;td&gt;蘇丹王&lt;/td&gt;&lt;td&gt;蘇丹&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Shatagni&lt;/td&gt;&lt;td&gt;印度火銃&lt;/td&gt;&lt;td&gt;印度火銃&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;義大利&lt;/td&gt;&lt;td&gt;Genoese Crossbowman&lt;/td&gt;&lt;td&gt;熱那亞弩手&lt;/td&gt;&lt;td&gt;熱那亞弩兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Condottiero&lt;/td&gt;&lt;td&gt;意大利傭兵&lt;/td&gt;&lt;td&gt;雇傭兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Pavise&lt;/td&gt;&lt;td&gt;大盾&lt;/td&gt;&lt;td&gt;巨盾&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Silk Road&lt;/td&gt;&lt;td&gt;絲綢之路&lt;/td&gt;&lt;td&gt;絲綢之路&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;馬扎爾&lt;/td&gt;&lt;td&gt;Magyar Huszar&lt;/td&gt;&lt;td&gt;馬扎爾驃騎&lt;/td&gt;&lt;td&gt;馬扎爾標騎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Mercenaries&lt;/td&gt;&lt;td&gt;雇傭兵&lt;/td&gt;&lt;td&gt;雇傭兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Recurve Bow&lt;/td&gt;&lt;td&gt;反曲弓&lt;/td&gt;&lt;td&gt;反曲弓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;斯拉夫&lt;/td&gt;&lt;td&gt;Boyar&lt;/td&gt;&lt;td&gt;貴族鐵騎&lt;/td&gt;&lt;td&gt;貴族鐵騎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Orthodoxy&lt;/td&gt;&lt;td&gt;東正教&lt;/td&gt;&lt;td&gt;東正教&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Druzhina&lt;/td&gt;&lt;td&gt;皇家衛隊&lt;/td&gt;&lt;td&gt;王家侍從&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 4：The African Kingdoms 文明翻譯對照表&lt;/p&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;HD&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;Camel Archer&lt;/td&gt;&lt;td&gt;駱駝射手&lt;/td&gt;&lt;td&gt;駱駝弓騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Genitour&lt;/td&gt;&lt;td&gt;標槍騎兵&lt;/td&gt;&lt;td&gt;標槍騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Kasbah&lt;/td&gt;&lt;td&gt;土堡&lt;/td&gt;&lt;td&gt;聚居堡壘&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Maghrabi Camels&lt;/td&gt;&lt;td&gt;馬格里布駱駝&lt;/td&gt;&lt;td&gt;馬革拉比駱駝&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;衣索比亞&lt;/td&gt;&lt;td&gt;Shotel Warrior&lt;/td&gt;&lt;td&gt;彎刀勇士&lt;/td&gt;&lt;td&gt;彎刀勇士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Royal Heirs&lt;/td&gt;&lt;td&gt;龍脈&lt;/td&gt;&lt;td&gt;皇族血脈&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Torsion Engines&lt;/td&gt;&lt;td&gt;扭絞機&lt;/td&gt;&lt;td&gt;扭力彈射器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;馬利&lt;/td&gt;&lt;td&gt;Gbeto&lt;/td&gt;&lt;td&gt;飛刀女兵&lt;/td&gt;&lt;td&gt;飛刀女獵手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Tigui&lt;/td&gt;&lt;td&gt;蠻王&lt;/td&gt;&lt;td&gt;部落領袖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Farimba&lt;/td&gt;&lt;td&gt;死士&lt;/td&gt;&lt;td&gt;驃悍精神&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;葡萄牙&lt;/td&gt;&lt;td&gt;Feitoria&lt;/td&gt;&lt;td&gt;大商站&lt;/td&gt;&lt;td&gt;港灣大商站&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Organ Gun&lt;/td&gt;&lt;td&gt;風琴炮&lt;/td&gt;&lt;td&gt;風琴砲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Caravel&lt;/td&gt;&lt;td&gt;卡拉維爾戰艦&lt;/td&gt;&lt;td&gt;卡拉維爾帆船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Carrack&lt;/td&gt;&lt;td&gt;巨桅大帆船&lt;/td&gt;&lt;td&gt;克拉克帆船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Arquebus&lt;/td&gt;&lt;td&gt;火繩槍&lt;/td&gt;&lt;td&gt;鉤銃&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 5：The Rise of the Rajas 文明翻譯對照表&lt;/p&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;HD&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;Arambai&lt;/td&gt;&lt;td&gt;飛鏢騎兵&lt;/td&gt;&lt;td&gt;飛鏢騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Howdah&lt;/td&gt;&lt;td&gt;象轎&lt;/td&gt;&lt;td&gt;象轎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Manipur Cavalry&lt;/td&gt;&lt;td&gt;曼尼普爾馬&lt;/td&gt;&lt;td&gt;曼尼普爾騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;高棉&lt;/td&gt;&lt;td&gt;Ballista Elephant&lt;/td&gt;&lt;td&gt;重弩戰象&lt;/td&gt;&lt;td&gt;弩砲象&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Tusk Swords&lt;/td&gt;&lt;td&gt;獠牙劍&lt;/td&gt;&lt;td&gt;象牙劍&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Double Crossbow&lt;/td&gt;&lt;td&gt;雙箭弩&lt;/td&gt;&lt;td&gt;雙弩箭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;馬來&lt;/td&gt;&lt;td&gt;Harbor&lt;/td&gt;&lt;td&gt;巨港&lt;/td&gt;&lt;td&gt;海港&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Karambit Warrior&lt;/td&gt;&lt;td&gt;爪刀勇士&lt;/td&gt;&lt;td&gt;爪刀勇士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Thalassocracy&lt;/td&gt;&lt;td&gt;海上霸主&lt;/td&gt;&lt;td&gt;海上霸權&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Forced Levy&lt;/td&gt;&lt;td&gt;強徵兵役&lt;/td&gt;&lt;td&gt;強制徵兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;越南&lt;/td&gt;&lt;td&gt;Rattan Archer&lt;/td&gt;&lt;td&gt;藤弓兵&lt;/td&gt;&lt;td&gt;藤甲弓兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Imperial Skirmisher&lt;/td&gt;&lt;td&gt;帝王擲矛手&lt;/td&gt;&lt;td&gt;帝王躑矛手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Chatras&lt;/td&gt;&lt;td&gt;寶傘&lt;/td&gt;&lt;td&gt;恰特拉傘&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Paper Money&lt;/td&gt;&lt;td&gt;紙幣&lt;/td&gt;&lt;td&gt;紙幣&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：《隨機地圖腳本指南》CH1.2.1 &lt;PLAYER_SETUP&gt; 章節</title>
    <link href="https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-2-1-player-setup-section/" />
    <id>https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-2-1-player-setup-section/</id>
    <updated>2017-09-27T15:57:27.000Z</updated>
    <published>2017-09-27T15:57:27.000Z</published>
<content type="html">&lt;p&gt;本文件譯自 &lt;a href=&quot;http://aok.heavengames.com/blacksmith/showprofile.php?author=Bultro&quot;&gt;Bultro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://steamcommunity.com/id/zetnus&quot;&gt;Zetnus&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所編寫的&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=ct&amp;#x26;f=28,42485,0,365&quot;&gt;《Updated New RMS Guide (v2.0.0)》，&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;並取得作者同意以標示名稱為翻譯授權。&lt;/p&gt;
&lt;p&gt;本文講述 &lt;code&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/code&gt; 章節可使用的命令。因為本文內容較少，且 1.2.9 節講述的也是 &lt;code&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/code&gt; 的命令，遂將兩節合併為一篇文章。&lt;/p&gt;
&lt;h2 id=&quot;正文&quot;&gt;正文&lt;/h2&gt;
&lt;h3 id=&quot;玩家放置方式&quot;&gt;玩家放置方式&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/code&gt; 預設都是隨機放置（&lt;code&gt;random_placement&lt;/code&gt;）的。&lt;/p&gt;
&lt;h4 id=&quot;隨機放置&quot;&gt;隨機放置&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;random_placement&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就算你沒有輸入這個指令，作為預設值，它還是會被套用。&lt;/p&gt;
&lt;h4 id=&quot;同隊相鄰放置&quot;&gt;同隊相鄰放置&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;grouped_by_team&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;隊伍成員在地圖上的位置是會比較靠近。這個指令和 &lt;code&gt;random_placement&lt;/code&gt; 是互斥的。在&lt;code&gt;create_player_lands&lt;/code&gt; 敘述中的 &lt;code&gt;base_size&lt;/code&gt; 屬性決定同隊玩家之間的距離。本指令只適用於 UP/HD。&lt;/p&gt;
&lt;h3 id=&quot;游牧型地圖資源修正&quot;&gt;游牧型地圖資源修正&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;nomad_resources&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改起始資源以和內建的游牧地圖相符。這代表著城鎮中心的建造成本(275木，100石)會回歸到玩家的資源庫存中。在非游牧類型的地圖也可以使用本指令。本指令只適用於 UP/HD。&lt;/p&gt;
&lt;h3 id=&quot;ai&quot;&gt;AI&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* ai_info_map_type &amp;#x3C;地圖類型&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ai_info_map_type TYPE&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本命令屬於選填命令，用來協助 AI（電腦）偵測地圖類型，例如：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* 本命令告訴 AI 本腳本會產生類似阿拉伯的地圖。 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ai_info_map_type ARABIA&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前有以下選項可以使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ARABIA&lt;/li&gt;
&lt;li&gt;ARCHIPELIGO&lt;/li&gt;
&lt;li&gt;ARENA&lt;/li&gt;
&lt;li&gt;BALTIC&lt;/li&gt;
&lt;li&gt;BLACK_FOREST&lt;/li&gt;
&lt;li&gt;COASTAL&lt;/li&gt;
&lt;li&gt;CONTINENTAL&lt;/li&gt;
&lt;li&gt;CRATER_LAKE&lt;/li&gt;
&lt;li&gt;FORTRESS&lt;/li&gt;
&lt;li&gt;GHOST_LAKE&lt;/li&gt;
&lt;li&gt;GOLD_RUSH&lt;/li&gt;
&lt;li&gt;HIGHLAND&lt;/li&gt;
&lt;li&gt;ISLANDS&lt;/li&gt;
&lt;li&gt;MEDITERRANEAN&lt;/li&gt;
&lt;li&gt;MIGRATION&lt;/li&gt;
&lt;li&gt;MONGOLIA&lt;/li&gt;
&lt;li&gt;NOMAD&lt;/li&gt;
&lt;li&gt;OASIS&lt;/li&gt;
&lt;li&gt;REAL_WORLD_[NAME]&lt;/li&gt;
&lt;li&gt;RIVERS&lt;/li&gt;
&lt;li&gt;SALT_MARSH&lt;/li&gt;
&lt;li&gt;SCANDINAVIA&lt;/li&gt;
&lt;li&gt;SCENARIO&lt;/li&gt;
&lt;li&gt;YUCATAN&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;hdup-版本新增的功能與內容&quot;&gt;HD/UP 版本新增的功能與內容&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* ai_info_map_type &amp;#x3C;地圖類型&gt; &amp;#x3C;游牧與否&gt; &amp;#x3C;密林與否&gt; &amp;#x3C;特殊與否&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ai_info_map_type TYPE N N N&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;N 代表地圖的風格。1 用來套用風格，0 則是不使用該風格。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一個數字參數為 1 時，代表此地圖為游牧風格，反之則為 0。&lt;/li&gt;
&lt;li&gt;第二個數字參數為 1 時，代表此地圖為密林風格，反之則為 0。&lt;/li&gt;
&lt;li&gt;第三個數字參數為 1 時，代表此地圖為特殊風格，反之則為 0。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;游牧風格是指以沒有城鎮中心為開局的的任何地圖。&lt;/li&gt;
&lt;li&gt;密林風格是指同隊玩家完全被森林隔絕，必須砍伐穿越才能相遇。&lt;/li&gt;
&lt;li&gt;特殊風格用來創造會特別偵測此地圖的特殊 AI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;舉例來說，一個黑森林游牧地圖應該會這樣設定：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ai_info_map_type BLACK_FOREST 1 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在《失落的帝國》以及其之後的資料片（目前統計到《非洲王國》），新增了數種地圖類型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;STEPPE&lt;/li&gt;
&lt;li&gt;BUDAPEST&lt;/li&gt;
&lt;li&gt;VALLEY&lt;/li&gt;
&lt;li&gt;ATLANTIC&lt;/li&gt;
&lt;li&gt;LAND_OF_LAKES&lt;/li&gt;
&lt;li&gt;LAND_NOMAD&lt;/li&gt;
&lt;li&gt;CENOTES&lt;/li&gt;
&lt;li&gt;GOLDEN_HILL&lt;/li&gt;
&lt;li&gt;MEGARANDOM&lt;/li&gt;
&lt;li&gt;MICHI&lt;/li&gt;
&lt;li&gt;AMBUSH&lt;/li&gt;
&lt;li&gt;CUSTOM&lt;/li&gt;
&lt;li&gt;NILE_DELTA&lt;/li&gt;
&lt;li&gt;MOUNTAIN_PASS&lt;/li&gt;
&lt;li&gt;SERENGETI&lt;/li&gt;
&lt;li&gt;SOCOTRA&lt;/li&gt;
&lt;li&gt;KILIMANJARO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;記住，此命令只會幫助已經針對給予地圖類型設計腳本的 AI 做反應，如果你設計的地圖與上述的地圖類型完全不相像，建議是不要使用此命令。&lt;/p&gt;
&lt;p&gt;另外，大多數的 AI 還未針對《失落的帝國》以及其之後資料片的地圖去設計如何反應，如果遇到這種情況，你可能要改使用原版中比較適合的 AI 地圖類型。&lt;/p&gt;
&lt;h2 id=&quot;隊伍群落與同隊相鄰之差異&quot;&gt;隊伍群落與同隊相鄰之差異&lt;/h2&gt;
&lt;p&gt;注意，同隊相鄰（&lt;code&gt;grouped_by_team&lt;/code&gt;）命令和「隊伍群落（Team Together）」的效果是不一樣的。「隊伍群落」是在隨機決定玩家土地（位置）後，再將同一隊伍的玩家分配在同一區的隨機位置上。本命令是&lt;strong&gt;基於隊伍群落的設定上&lt;/strong&gt;，再讓同隊玩家的位置更加緊密，幾乎沒有緩衝地帶而直接相鄰，詳細可參見下圖：&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/阿拉伯 1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/阿拉伯 1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-1&lt;/strong&gt;：阿拉伯&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落 1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落 1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-2&lt;/strong&gt;：阿拉伯，隊伍群落&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落_同隊相鄰.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落_同隊相鄰.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-3&lt;/strong&gt;：阿拉伯，隊伍群落，同隊相鄰&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/阿拉伯_同隊相鄰.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/阿拉伯_同隊相鄰.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-4&lt;/strong&gt;：阿拉伯，同隊相鄰&lt;/p&gt;
&lt;h2 id=&quot;示例&quot;&gt;示例&lt;/h2&gt;
&lt;p&gt;本結摘錄遊戲內建的標準隨機地圖腳本的內容作為示例：&lt;/p&gt;
&lt;h3 id=&quot;阿拉伯&quot;&gt;阿拉伯&lt;/h3&gt;
&lt;p&gt;網路對戰常見隨機地圖，標準的設定。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ai_info_map_type ARABIA 0 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/阿拉伯_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：阿拉伯，隊伍群落&lt;/p&gt;
&lt;h3 id=&quot;要塞fortress&quot;&gt;要塞（Fortress）&lt;/h3&gt;
&lt;p&gt;就算是要塞，感覺同盟會在隔壁，彈者只是隊伍群落的效果，不算 &lt;code&gt;grouped_by_team&lt;/code&gt;。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ai_info_map_type FORTRESS 0 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/要塞_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/要塞_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：要塞，隊伍群落&lt;/p&gt;
&lt;h3 id=&quot;黑森林black-forest&quot;&gt;黑森林（Black Forest）&lt;/h3&gt;
&lt;p&gt;儘管森林很多，但是因為道路沒阻絕，所以不算密林風格。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ai_info_map_type FORTRESS 0 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/黑森林_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/黑森林_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：黑森林，隊伍群落&lt;/p&gt;
&lt;h3 id=&quot;游牧nomad&quot;&gt;游牧（Nomad）&lt;/h3&gt;
&lt;p&gt;標準游牧地圖，有使用到 &lt;code&gt;nomad_resources&lt;/code&gt; 命令，以及 AI 的游牧參數為 &lt;code&gt;1&lt;/code&gt;。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  nomad_resources&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ai_info_map_type NOMAD 1 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/游牧_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/游牧_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：游牧，隊伍群落&lt;/p&gt;
&lt;h3 id=&quot;鹽沼地salt-marsh&quot;&gt;鹽沼地（Salt Marsh）&lt;/h3&gt;
&lt;p&gt;其實是有提供 SALT_MARSH 的 AI，但腳本裡沒特別設定。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/鹽沼地_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/鹽沼地_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：鹽沼地，隊伍群落&lt;/p&gt;
&lt;h3 id=&quot;團隊群島team-islands&quot;&gt;團隊群島（Team Islands）&lt;/h3&gt;
&lt;p&gt;同要塞，儘管同盟都在同一座島上，但是仍沒使用到 &lt;code&gt;grouped_by_team&lt;/code&gt; 命令。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  random_placement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ai_info_map_type TEAM_ISLANDS 0 0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/團隊群島_隊伍群落.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/團隊群島_隊伍群落.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：團隊群島，隊伍群落&lt;/p&gt;
&lt;h2 id=&quot;結論&quot;&gt;結論&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/code&gt; 主要是設定遊戲者（玩家、電腦 AI）的位置，以及初始的相關設定，像是游牧資源特殊設定、電腦 AI 的設定等。除了翻譯外，本文也針對「隊伍群落」和「同隊相鄰」有可能混淆的部分做了補充，更附上內建標準隨機地圖腳本的此章節的程式碼與實際產生後地圖的迷你地圖截圖作比較，希望能讓大家更近一步的了解。然而此章節只是訂定大方向的位置放置策略，事實上在後面的章節仍有許多因素會影響遊戲者的位置，這是另外要注意的事，詳細的部分就等之後翻譯到相關篇章時再做說明了。&lt;/p&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：《隨機地圖腳本指南》CH1.1 腳本參考範本</title>
    <link href="https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-1-scheme-of-a-rms/" />
    <id>https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-1-scheme-of-a-rms/</id>
    <updated>2017-09-26T11:08:00.000Z</updated>
    <published>2017-09-26T11:08:00.000Z</published>
<content type="html">&lt;p&gt;本文件譯自 &lt;a href=&quot;http://aok.heavengames.com/blacksmith/showprofile.php?author=Bultro&quot;&gt;Bultro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://steamcommunity.com/id/zetnus&quot;&gt;Zetnus&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所編寫的&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=ct&amp;#x26;f=28,42485,0,365&quot;&gt;《Updated New RMS Guide (v2.0.0)》，&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;並取得作者同意以標示名稱為翻譯授權。&lt;/p&gt;
&lt;p&gt;本文章主要提供一個腳本的參考範本，讓開發者藉此對之前與接下來的說明有更明確的概念。&lt;/p&gt;
&lt;h2 id=&quot;正文&quot;&gt;正文&lt;/h2&gt;
&lt;p&gt;本節提供腳本的骨架（skeleton），之中有許多可能會用到的指令與其所需的參數，讓想要建立新腳本的開發者，能從這參考範本複製所需要的指令、貼到自己的腳本中。詳細請待我慢慢詳述。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;N&lt;/code&gt; 代表自然數，可能會是一個範圍。小數和負數是不被允許的。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%&lt;/code&gt; 代表百分比 (0-100)。小數點是不允許的。不需要再輸入 ％。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TYPE&lt;/code&gt; 代表一個標識常數，像是 &lt;code&gt;GRASS&lt;/code&gt;。型別（type）會在「地形與物件」的章節詳述。如果你輸入一個不合法（不存在的型別），那什麼事情都不會發生。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt; 代表你需要在多個屬性中選擇其中一個，請不要把所有屬性都填進去。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[UP/HD]&lt;/code&gt; 代表這個命令只支援 &lt;a href=&quot;http://userpatch.aiscripters.net/&quot;&gt;User Patch&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://store.steampowered.com/app/221380/Age_of_Empires_II_HD/&quot;&gt;HD&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 版本的世紀帝國，原版未包含此命令。實際使用時，請將這個註記刪除。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;random_placement / grouped_by_team[UP/HD]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;nomad_resources[UP/HD]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;LAND_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;base_terrain TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_player_lands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    terrain_type TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    land_percent % / number_of_tiles N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_size N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_elevation[UP/HD] N(1-7)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    left_border %, right_border %, top_border %, bottom_border %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    border_fuzziness %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    clumping_factor %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    zone N / set_zone_randomly / set_zone_by_team&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    other_zone_avoidance_distance N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_land&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    terrain_type  TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    land_percent % / number_of_tiles N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_size N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_elevation[UP/HD] N(1-7)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    left_border %, right_border %, top_border %, bottom_border %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    land_position %(0-100) %(0-99)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    border_fuzziness %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    clumping_factor %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    zone N / set_zone_randomly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    other_zone_avoidance_distance N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    land_id N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    assign_to_player N(1-8)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;ELEVATION_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_elevation  N(1-7)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_terrain TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    number_of_tiles N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    number_of_clumps N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_scale_by_size&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_scale_by_groups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    spacing N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;CLIFF_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;min_number_of_cliffs N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;max_number_of_cliffs N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;min_length_of_cliff N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;max_length_of_cliff N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cliff_curliness %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;min_distance_cliffs N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;min_terrain_distance N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;TERRAIN_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_terrain TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    base_terrain TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    land_percent % / number_of_tiles N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    number_of_clumps N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_scale_by_size&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_scale_by_groups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    spacing_to_other_terrain_types N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_avoid_player_start_areas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    height_limits N(0-7) N(0-7)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_flat_terrain_only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    clumping_factor %&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;CONNECTION_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_connect_all_players_land / create_connect_teams_lands /&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_connect_all_lands / create_connect_same_land_zones&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    default_terrain_replacement TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    replace_terrain TYPE TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    terrain_cost TYPE N(1-15)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    terrain_size TYPE N N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;OBJECTS_GENERATION&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_object TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    number_of_objects N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    number_of_groups N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    group_variance N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_scaling_to_map_size / set_scaling_to_player_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_place_for_every_player&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_gaia_object_only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    terrain_to_place_on TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    min_distance_to_players N, max_distance_to_players N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    max_distance_to_other_zones N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    min_distance_group_placement N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    temp_min_distance_group_placement N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    group_placement_radius N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_tight_grouping / set_loose_grouping&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    place_on_specific_land_id N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    resource_delta[UP] -N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;開發輔助&quot;&gt;開發輔助&lt;/h2&gt;
&lt;p&gt;在編寫腳本時，最痛苦的就是沒有程式碼上色以及語法提示。因為本站目前是使用 highlihght.js 作為程式碼上色的工具，但之中並沒有包含 RMS腳本的上色規格，所以本站無法提供一個閱讀起來最舒適程式碼給讀者。建議在閱讀這份範本，或是自己想要編寫看看時，可以使用 Visual Studio Code 並搭配擴充套件 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=deltaidea.aoe2-rms&quot;&gt;AoE2 Random Map Scripting&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，如此只要是以 &lt;code&gt;.rms&lt;/code&gt; 為副檔名的檔案，都會有程式碼上色作為開發輔助。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/VS-Code-RMS-Extension-Demo.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/VS-Code-RMS-Extension-Demo.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-1&lt;/strong&gt;：Visual Studio Code 擴充套件：AoE2 Random Map Scripting&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/VS-Code-Syntax-Highlight-Demo.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/VS-Code-Syntax-Highlight-Demo.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 2-2&lt;/strong&gt;：RMS 程式碼上色演示&lt;/p&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：《隨機地圖腳本指南》CH1 語言</title>
    <link href="https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-language-reference/" />
    <id>https://fntsr.tw/articles/aoe-ii-rmsg-ch-1-language-reference/</id>
    <updated>2017-09-25T14:18:43.000Z</updated>
    <published>2017-09-25T14:18:43.000Z</published>
<content type="html">&lt;p&gt;本文件譯自 &lt;a href=&quot;http://aok.heavengames.com/blacksmith/showprofile.php?author=Bultro&quot;&gt;Bultro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://steamcommunity.com/id/zetnus&quot;&gt;Zetnus&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所編寫的&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=ct&amp;#x26;f=28,42485,0,365&quot;&gt;《Updated New RMS Guide (v2.0.0)》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，並取得作者同意以標示名稱為翻譯授權。&lt;/p&gt;
&lt;p&gt;本文章主要在講述腳本基礎架構，以及在編寫時應注意的細節。&lt;/p&gt;
&lt;h2 id=&quot;正文&quot;&gt;正文&lt;/h2&gt;
&lt;p&gt;腳本 (scripts) 共分為七個章節（section），各章節專職一種地圖特徵（feature）。章節透過下列標籤 (tags) 的宣告作為起始：&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Chapter Name&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;PLAYER_SETUP&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;基本設定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;LAND_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;土地設定，主要土地 (lands) 或海洋 (sea)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;ELEVATION_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;山丘 (Hills)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;CLIFF_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;峭壁 (Rocky cliffs)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;TERRAIN_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;地形 (Terrain)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;CONNECTION_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;連接地形，像是道路、橋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;OBJECTS_GENERATION&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;單位、建築、資源、無用途的裝飾物件（放好看的）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 1：章節起始宣告關鍵字一覧&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你可能會注意到遊戲內建的標準地圖在峭壁和連接地形的章節有不同的順序（有時包括海拔的章節）。然而，依照上面的順序去編寫，會讓你對地圖產生程序的想像以及了解發生了什麼事有所幫助。像是水可能會生成在山丘上、物件會被放置在連接地形上、或是為什麼地形可以避開峭壁等細節，這些都跟地圖在各特徵產生的順序有所關係。但無論如何，你編寫章節的順序都不會讓對地圖的產生造成差異。&lt;/li&gt;
&lt;li&gt;不是所有章節都是需要的（像是你可以建立一個沒有峭壁的地形）。&lt;/li&gt;
&lt;li&gt;每個章節都會有不同種類的指令 (instructions) &lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，多數的指令大概像是這樣：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_something WHAT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    attribute TYPE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    attribute N&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    set_attribute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;在編寫腳本時，你可以隨你所欲的對指令內容進行縮排。只要將關鍵字透過換行（new line）或空白 (space) 進行分隔即可。&lt;/li&gt;
&lt;li&gt;腳本的關鍵字與常數名稱對大小寫敏感，請注意字母的大小寫。&lt;/li&gt;
&lt;li&gt;所有 &lt;code&gt;create&lt;/code&gt; 命令都是可以使用多次的，其他命令則只能使用一次。&lt;/li&gt;
&lt;li&gt;多數屬性 (attributes)（也就是在大括號裡的次要命令(subcommands)）都會有預設值，不用特地寫出來。所以在有些時候，大括號 &lt;code&gt;{ }&lt;/code&gt; 中是可以留白的！&lt;/li&gt;
&lt;li&gt;大括號裡屬性的順序也是不重要的，其排序對地圖的產生沒有影響。&lt;/li&gt;
&lt;li&gt;如果有項目因為某些原因無法被建立，那遊戲程式會直接忽略它並繼續往下讀取。如果你發現有東西不見了，請嘗試稍微放寬其放置的限制 (constraints)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;筆記摘要&quot;&gt;筆記、摘要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;七個章節：玩家、土地、海拔、峭壁、地形、連接、物件。&lt;/li&gt;
&lt;li&gt;程式會照順序讀取章節並逐一生成地圖特徵。&lt;/li&gt;
&lt;li&gt;腳本章節編寫順序不影響地圖生成；指令內屬性順序不影響生成效果。&lt;/li&gt;
&lt;li&gt;關鍵字和常數大小寫敏感。&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;本系列文把 instructions 翻譯為指令，command 翻譯為命令。兩者不同之處為指令是有附帶資訊、敘述的，針對一個命令再加以說明，也就是大括號裡的屬性（attributes）；而命令則只是單純透過腳本要求地圖產生程序去做什麼事，除了基本參數外，沒有再附加屬性。簡而言之，在本文中，指令可視為一個命令再附加屬性，指令算是命令的一種。另外，關於英文中 instructions 與 command 的差異，有興趣的可以參見這篇簡短說明：&lt;a href=&quot;http://wikidiff.com/command/instruction&quot;&gt;〈Command vs Instruction – What’s the difference?〉。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：《隨機地圖腳本指南》翻譯說明</title>
    <link href="https://fntsr.tw/articles/aoe-ii-annotation-of-random-map-scripting-guide-translation/" />
    <id>https://fntsr.tw/articles/aoe-ii-annotation-of-random-map-scripting-guide-translation/</id>
    <updated>2017-09-24T19:36:29.000Z</updated>
    <published>2017-09-24T19:36:29.000Z</published>
<content type="html">&lt;p&gt;本篇主要是針對發表系列文的構成做說明，也會把各篇比較重要的譯注/註再複製一份過來集中作為方便參考之用，以及在最後附上翻譯術語對照表。&lt;/p&gt;
&lt;p&gt;另外，在系列文全部發表完之前，有時候在翻譯上尚未能融會貫通，無法保證各篇文章在發表後就是終稿。敝人預計整系列翻譯完全，要製作 PDF 檔案前，會再將整份指南修正、潤稿過一次。若是在這之前有什麼翻譯的不妥之處，還請留言或來信告知、討論，感激不盡。&lt;/p&gt;
&lt;h2 id=&quot;發表順序&quot;&gt;發表順序&lt;/h2&gt;
&lt;p&gt;因為《隨機地圖腳本指南》各章節的內容多寡不一，為了能穩定產出翻譯，本系列翻譯文在發表時不會以「章」為單位，而是根據內文長度決定是以章、或是節為一篇文章去發表。系列構成大概會是這樣：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;《隨機地圖腳本指南》&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/01/24/aoe2-before-translate-rmsg/&quot;&gt;在翻譯之前&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》翻譯說明 (本篇)&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/01/28/aoe2-rmsg-introduction/&quot;&gt;緒論&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/09/25/aoe-ii-rmsg-ch1-language-reference/&quot;&gt;Ch1: 語言&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/09/26/aoe-ii-rmsg-ch1-1-scheme-of-a-rms/&quot;&gt;Ch1.1: 腳本參考範本&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/09/27/aoe-ii-rmsg-ch1-2-1-player_setup-section/&quot;&gt;Ch1.2.1: &amp;#x3C;PLAYER_SETUP&gt; 章節&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.2: &lt;code&gt;&amp;#x3C;LAND_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.3: &lt;code&gt;&amp;#x3C;ELEVATION_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.4: &lt;code&gt;&amp;#x3C;CLIFF_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.5: &lt;code&gt;&amp;#x3C;TERRAIN_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.6: &lt;code&gt;&amp;#x3C;CONNECTION_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.7: &lt;code&gt;&amp;#x3C;OBJECTS_GENERATION&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.8: Map Sizes&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.2.9: AI Info (與 Ch1.2.1 合併）&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch1.3: General Syntax&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch2: TERRAINS &amp;#x26; OBJECTS&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch3: TESTING&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch4: EXAMPLE SCRIPT&lt;/li&gt;
&lt;li&gt;《隨機地圖腳本指南》Ch5: LINKS AND RESOURCES&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;翻譯術語對照表&quot;&gt;翻譯術語對照表&lt;/h2&gt;
&lt;h3 id=&quot;一般術語&quot;&gt;一般術語&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;attributes（屬性）&lt;/li&gt;
&lt;li&gt;cliffs（峭壁）&lt;/li&gt;
&lt;li&gt;command（命令）&lt;/li&gt;
&lt;li&gt;elevation（海拔）&lt;/li&gt;
&lt;li&gt;feature（特徵）&lt;/li&gt;
&lt;li&gt;hills（山丘）&lt;/li&gt;
&lt;li&gt;instructions（指令）&lt;/li&gt;
&lt;li&gt;land（土地）&lt;/li&gt;
&lt;li&gt;random map（隨機地圖）&lt;/li&gt;
&lt;li&gt;scenario（劇情）&lt;/li&gt;
&lt;li&gt;script（腳本）&lt;/li&gt;
&lt;li&gt;sea（海洋）&lt;/li&gt;
&lt;li&gt;section（章節）&lt;/li&gt;
&lt;li&gt;terrain（地形）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;特殊名詞&quot;&gt;特殊名詞&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Random Map Scripts（隨機地圖腳本）&lt;/li&gt;
&lt;li&gt;Random Map Scripting Guide（隨機地圖腳本編寫指南）&lt;/li&gt;
&lt;li&gt;standard RMS guide（標準隨機地圖腳本）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;譯注註一覧&quot;&gt;譯注/註一覧&lt;/h2&gt;
&lt;h3 id=&quot;instructions--command&quot;&gt;instructions &amp;#x26; command&lt;/h3&gt;
&lt;p&gt;本系列文把 instructions 翻譯為指令，command 翻譯為命令。兩者不同之處為指令是有附帶資訊、敘述的，針對一個命令再加以說明，也就是大括號裡的屬性（attributes）；而命令則只是單純透過腳本要求地圖產生程序去做什麼事，除了基本參數外，沒有再附加屬性。簡而言之，在本文中，指令可視為一個命令再附加屬性，指令算是命令的一種。另外，關於英文中 instructions 與 command 的差異，有興趣的可以參見這篇簡短說明：&lt;a href=&quot;http://wikidiff.com/command/instruction&quot;&gt;〈Command vs Instruction – What’s the difference?〉。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;eye-candy&quot;&gt;eye-candy&lt;/h3&gt;
&lt;p&gt;eye candy 在 Google 翻譯裡被翻譯成「秀色可餐」，但是 Oxford 給出的解釋是「a person or thing that is attractive but not intelligent or useful」，也就是「指雖有吸引力，但沒什麼能力或用處的人或事物」，顯然前者的解釋並沒有很完整的把意思表達出來，漏掉了略帶貶義的意思（所以別拿這詞去稱讚別人，小心得罪人 XD）。在看了 Oxford 給出的解釋，我下意識想到的詞就「花瓶」，也就是指人外表看起來很漂亮，但實際上就像花瓶一樣，雖然中看，但裡頭卻是中空的，沒什麼內涵。&lt;/p&gt;
&lt;p&gt;雖然理解了這個詞的意思，但在指南的翻譯作業裡，該怎麼翻成符合使用情境的詞，就是另一個需要克服的難題了。有想到幾個詞，有類似的意思但實際上卻不適合用在這裡，像是「紙老虎」、「海市蜃樓」、「虛有其表」、「金玉其外，敗絮其中」，雖然這些詞有類似的意思，但在細節上卻相差甚遠，另一方面是這些詞貶意都太重了，eye candy 感覺並沒那麼強調其不好的部分，反而是下意識想到的「花瓶」還比較對味，但直接寫翻成這詞，又跟指南的風格有所差異。&lt;/p&gt;
&lt;p&gt;困擾之時，在噗浪上&lt;a href=&quot;https://www.plurk.com/p/mfkuv5&quot;&gt;發了個噗（好友限定）&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;詢問好友們的意見，根據這個單字在我提供的前後文的情境，給了些建議，像是「然並卵（？）」、「只是好看但是並沒有什麼效果」、「只是中看不中用」、「放好看的」、「花瓶」、「視覺效果」或是「裝飾用途」。也建議說「不過也未必一定要翻譯名詞對名詞」，不用太執著於同個單字在一篇指南裡都使用同個翻譯，如果不是專有名詞，可以依照前後文情境在翻譯上做變化，這個想法倒也讓我離開了鬼打牆。&lt;/p&gt;
&lt;p&gt;所以關於這個單字我不會都使用同個翻譯詞，而會依照情境做變化去翻成：「純裝飾無實用的物件」、「放好看的」等詞，並不再翻譯後附上括號附註原文。&lt;/p&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>PostgreSQL 與 MySQL 關於 transaction 的設計理念</title>
    <link href="https://fntsr.tw/articles/transaction-design-of-postgre-sql-and-my-sql/" />
    <id>https://fntsr.tw/articles/transaction-design-of-postgre-sql-and-my-sql/</id>
    <updated>2017-09-17T10:41:53.000Z</updated>
    <published>2017-09-17T10:41:53.000Z</published>
<content type="html">&lt;p&gt;近日因為想要跳槽到 PostgreSQL，所以開始閱讀官方的參考文件。在讀到 &lt;a href=&quot;https://www.postgresql.org/docs/9.6/static/tutorial-transactions.html&quot;&gt;3.4 Transactions&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 時，其中有一段不太能理解：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PostgreSQL actually treats every SQL statement as being executed within a transaction. If you do not issue a BEGIN command, then each individual statement has an implicit BEGIN and (if successful) COMMIT wrapped around it. A group of statements surrounded by BEGIN and COMMIT is sometimes called a transaction block.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因為以往對 transaction[^1]的了解不深，一直以為只會用在「我有數個 SQL 敘述，希望能夠其中一個失敗時，取消其他 SQL 敘述的執行」的情況，所以不太能理解「每個 SQL 敘述預設帶有一個 transaction」的設計，非常疑惑為什麼會需要將單個 SQL 敘述也用 transaction 包起來。所以就去請教了對 PostgreSQL 有經驗的 &lt;a href=&quot;https://github.com/david50407&quot;&gt;@david50407&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。本篇文章大概就是在講述敝人向其請教後的理解。&lt;/p&gt;
&lt;h2 id=&quot;基本觀念&quot;&gt;基本觀念&lt;/h2&gt;
&lt;p&gt;PostgreSQL 參考手冊在 &lt;a href=&quot;https://www.postgresql.org/docs/9.6/static/tutorial-transactions.html&quot;&gt;3.4 Transactions&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的第一段，就以這樣的文字來敘述：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The essential point of a transaction is that it bundles multiple steps into a single, all-or-nothing operation. The intermediate states between the steps are not visible to other concurrent transactions, and if some failure occurs that prevents the transaction from completing, then none of the steps affect the database at all.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;該文字的意思大概就是，transaction 可以把 PostgeSQL 裡面多個敘述併成一個，並且遵從「全或無」（all-or-nothing）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 的操作；也就是若在併成一個操作裡的諸多敘述，若有其中一個敘述出錯，其他成功的敘述也會被撤銷，就等同全部都沒有執行。&lt;/p&gt;
&lt;p&gt;這個功能比較常用的地方就在於金融業，常見的例子就是要避免 A 轉帳給 B 時，不能發生「扣了 A 的錢，但 B 那邊卻沒有增加」或是「對 A 扣錢失敗，但是 B 那邊的錢卻增加了」的情況，一定是要「扣了 A 的錢，也要加 B 的錢」，不然就是都不要發生。&lt;/p&gt;
&lt;p&gt;在沒有特別處理的情況下，SQL 敘述大致如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 1-1&lt;/strong&gt;：在沒有使用 transaction 的銀行交易情境示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 30000.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 30000.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但若因為某種原因導致第一個敘述失敗，第二個敘述卻成功了，那麼銀行就會損失三萬元。若第一個敘述成功了，第二個敘述失敗，那顧客就會平白無故損失三萬元，導致銀行信譽掃地。所以在處理這類需要「全或無」的操作時，就必須將這些敘述宣告成一個 transaction block&lt;a href=&quot;http://blog.fntsr.tw/articles/904/#fn-904-transaction&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;transaction block 的宣告方式，就是使用 &lt;code&gt;BEGIN;&lt;/code&gt; 和 &lt;code&gt;COMMIT;&lt;/code&gt; 兩個敘述，將多個需要綁定的 SQL 敘述給包起來，以上面的案例來改進，大致如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 1-2&lt;/strong&gt;：使用 transaction 的銀行交易情境示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若 transaction block 圍起來的敘述，只要有其中一個不成立，那麼 transaction block 裡的敘述就都不會被執行[^3]。&lt;/p&gt;
&lt;h2 id=&quot;postgresql-關於-transaction-的設計理念&quot;&gt;PostgreSQL 關於 transaction 的設計理念&lt;/h2&gt;
&lt;p&gt;回到原本的疑問，在解惑之前先闡述一個 PostgreSQL 的基本概念：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PostgreSQL 一次只會執行一個原子級操作（atomic operation，意味這該項操作不可分割），PostgreSQL 只會在完成一次原子級操作才會將結果從記憶體寫入檔案，若是中間有任何衝突，就會重新從檔案讀取資料回記憶體覆蓋失敗的部分、進行還原。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;講到這邊，大概就能有點感覺。是的，transaction 就是 PostgreSQL 的原子級操作。&lt;/p&gt;
&lt;p&gt;在沒有自行加入 &lt;code&gt;BEGIN;&lt;/code&gt; 和 &lt;code&gt;COMMIT;&lt;/code&gt; 語法的情況下，PostgreSQL 是不會把結果從記憶體存回硬碟，但是為了方便操作，PostgreSQL 預設會把沒有在 transaction block 中的 SQL 敘述外自動加入&lt;code&gt;BEGIN;&lt;/code&gt;和 &lt;code&gt;COMMIT;&lt;/code&gt;，也就是將該則敘述獨立視為一個 transaction block。如此才不用在編寫 SQL 敘述時，還有手動加上一對冗贅的 transaction 語法。&lt;/p&gt;
&lt;p&gt;以&lt;strong&gt;程式碼 1-1&lt;/strong&gt; 為例，雖然我們沒有幫他加上 transaction 語法，但是事實上它在執行時，是已經被 PostgreSQL 加入語法了，其真實的樣貌如下（&lt;strong&gt;程式碼 2-1&lt;/strong&gt;）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 2-1&lt;/strong&gt;：PostgreSQL transaction 預設行為示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-- 本段程式碼的 BEGIN; 和 COMMIT; 都是 PostgreSQL 自動加的&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以每項敘述都會是一個原子級操作，都被視為一個 transaction block，在成功完成後，才會寫入硬碟。若失敗則會跳下一個敘述繼續執行（這邊是假設匯入 SQL檔的情境，其他情境要視失敗時對例外地處理決策決定是中止操作還是繼續執行）。&lt;/p&gt;
&lt;p&gt;從上面透過設計理念的理解，原本的問題也就豁然開朗。了解其背後理念和原因後，也可以繼續思考以下問題，讓自己對這份知識更加熟稔：&lt;/p&gt;
&lt;h5 id=&quot;問題一&quot;&gt;問題一&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;匯入一個 SQL 文件 &lt;code&gt;dump.sql&lt;/code&gt; 到 PostgreSQL 時，假設 &lt;code&gt;dump.sql&lt;/code&gt; 裡沒有任何 transaction 語法，並有 N 行敘述，而第 M 行敘述是會發生衝突的，那資料庫最後會有幾筆異動？&lt;br&gt;
(A) N 筆（成功執行所有敘述）&lt;br&gt;
(B) N – 1 筆（成功執行除了第 M 行以外的敘述）&lt;br&gt;
(C) M – 1 筆（只成功執行第 M 行之前的敘述，第 M 行及其之後的敘述都被駁回）&lt;br&gt;
(D) 0 筆（全部敘述遭到駁回）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;問題二&quot;&gt;問題二&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;承問題一，若答案不是 (D) 選項，那為什麼在一起匯入的情況下，不是所有敘述都被駁回，而是部分被套用？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;問題三&quot;&gt;問題三&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;承問題二，那該怎麼做，才能讓匯入 SQL 文件到 PostgreSQL 時，是一有失敗就全部駁回，而不是部分套用呢？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;與-mysql-比較&quot;&gt;與 MySQL 比較&lt;/h2&gt;
&lt;p&gt;在略曉 PostgreSQL 關於 transaction 的設計後，在這節轉向探討 MySQL 關於 transaction 的設計。&lt;/p&gt;
&lt;p&gt;MySQL 也是擁有 transaction 功能的，也定義了 &lt;code&gt;BEGIN;&lt;/code&gt;[^4]、&lt;code&gt;COMMIT&lt;/code&gt; 語法。它也會預設對沒有在 transaction block 中的 SQL 敘述，進行預設的行為，那到底是哪邊跟 PostgreSQL 不同呢？&lt;/p&gt;
&lt;p&gt;MySQL 的設計理念是在於，遇到 &lt;code&gt;COMMIT;&lt;/code&gt; 語法時，才會將資料從記憶體寫入硬碟，並且預設會對所有 SQL 敘述後自動在其後加上 &lt;code&gt;COMMIT;&lt;/code&gt;，在 MySQL 稱這項預設行為為自動提交（auto commit）。以&lt;strong&gt;程式碼 1-1&lt;/strong&gt; 為例，在 MySQL 中其真實的樣貌如下（&lt;strong&gt;程式碼 3-1&lt;/strong&gt;）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 3-1&lt;/strong&gt;：MySQL auto commit 行為的示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-- 本段程式碼的 COMMIT; 都是 MySQL 自動加的&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;和&lt;strong&gt;程式碼 2-1&lt;/strong&gt; 進行比較後，會發現 MySQL 在預設行為上，只會在敘述後加入 &lt;code&gt;COMMIT;&lt;/code&gt; 而不會在之前加入 &lt;code&gt;BEGIN;&lt;/code&gt;，這邊就顯示出兩者在設計概念上的不同。PostgreSQL 是以一個 transaction block 為一個單位作為 transaction 的操作；而 MySQL 則是以當下的 &lt;code&gt;COMMIT;&lt;/code&gt; 到上一個 &lt;code&gt;COMMIT;&lt;/code&gt; 之間的敘述作為 transaction 的操作（準確來說，是指目前還沒被提交過的敘述）。而 MySQL 的 &lt;code&gt;BEGIN;&lt;/code&gt; 就類似一個局部停用自動提交的語法，並作用到一個 &lt;code&gt;COMMIT;&lt;/code&gt; 或 &lt;code&gt;ROLLBACK;&lt;/code&gt; 語法為止，如&lt;strong&gt;程式碼 3-2&lt;/strong&gt; 所示。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 3-2&lt;/strong&gt;：MySQL BEGIN &amp;#x26; COMMIT 示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若是要在當前連線全域關閉這個自動動提交（auto commit）[^5]，可以透過 &lt;code&gt;SET autocommit=0;&lt;/code&gt; 敘述，當 &lt;code&gt;autocommit&lt;/code&gt; 設置為 &lt;code&gt;0&lt;/code&gt; 時，就會停用自動提交。若將這功能停用時，就必須自己加入 &lt;code&gt;COMMIT;&lt;/code&gt; 以將之前執行成功且尚未提交過的敘述存入硬碟。與 &lt;code&gt;BEGIN;&lt;/code&gt; 不同，就算遇到 &lt;code&gt;COMMIT;&lt;/code&gt;，自動提交仍會保持停用，直到將 &lt;code&gt;autocommit&lt;/code&gt; 設置為 &lt;code&gt;1&lt;/code&gt; 重啟這功能為止。同樣以&lt;strong&gt;程式碼 1-1&lt;/strong&gt; 作為案例，大致如下（&lt;strong&gt;程式碼 3-3&lt;/strong&gt;）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 3-3&lt;/strong&gt;：MySQL autocommit 設置示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SET autocommit=0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;A&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;B&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT; -- COMMIT 並不會讓 autocommit 重新啟用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit - 100.00 WHERE name = &#39;C&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UPDATE accounts SET deposit = deposit + 100.00 WHERE name = &#39;D&#39;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ROLLBACK; -- ROLLBACK 也不會讓 autocommit 重新啟用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SET autocommit=1; -- 只有將 autocommit 設置為 1 時，才會重啟自動提交的功能。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除了自動提交外，在 MySQL 參考手冊的 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html&quot;&gt;13.3.3 Statements That Cause an Implicit Commit&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 有提到，當遇到修改資料表的敘述、資料定義語言（DDL）、或是 transactions 控制流程 [^6]和資料表鎖定相關的敘述時，在執行該敘述前，都會自動執行 &lt;code&gt;COMMIT;&lt;/code&gt;，也就是所謂的隱性提交（implicitly commit）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-7&quot; id=&quot;user-content-fnref-7&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。這部分可以參見&lt;strong&gt;程式碼 3-4&lt;/strong&gt; 的示例加深理解。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 3-4&lt;/strong&gt;：MySQL 隱性提交示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SET autocommit=0; -- 先停用自動提交&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO log (content) VALUES (&#39;A&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN; -- 執行此行敘述前，會進行隱性提交，導致前面的 SQL 敘述被存入硬碟。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO log (content) VALUES (&#39;B&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO log (content) VALUES (&#39;C&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SET autocommit=1; -- 執行此行敘述前，會進行隱性提交，導致前面的 SQL 敘述被存入硬碟。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這也導致了，MySQL 不能與 PostgreSQL 一般，進行 transactions 的嵌套（nested）&lt;sup&gt;&lt;a href=&quot;#user-content-fn-8&quot; id=&quot;user-content-fnref-8&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;，因為若在 transactions 裡又輸入 &lt;code&gt;BEGIN;&lt;/code&gt; 時，這之前的 SQL 敘述就會先被 &lt;code&gt;COMMIT;&lt;/code&gt; 存入硬碟中。以下面程式碼（&lt;strong&gt;程式碼 3-5&lt;/strong&gt;）為例，在 MySQL 中，&lt;code&gt;First&lt;/code&gt; 是會被存入資料表的，PostgreSQL 則不會。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 3-5&lt;/strong&gt;：transactions 嵌套示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CREATE TABLE log (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    content varchar(255)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    INSERT INTO log (content) VALUES (&#39;First&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        INSERT INTO log (content) VALUES (&#39;Second&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ROLLBACK;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    COMMIT;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ROLLBACK;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;延伸應用&quot;&gt;延伸應用&lt;/h2&gt;
&lt;p&gt;另外，也因為 transaction 是在整個 transaction 完成且成功的情況下才會將資料寫入硬碟，不會如同一般情況是一個敘述寫入一次（事實上，一個敘述也等同一個 transaction。），所以若遇到需要執行大量敘述時，可以透過 transaction block 包覆起來，讓全部執行完後再一次寫入硬碟，節省對硬碟做 I/O 的時間，讓執行更加快。如&lt;strong&gt;程式碼 4-1&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 4-1&lt;/strong&gt;：大量敘述搭配 transaction 以提升效率的示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BEGIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO users (username, password) VALUES (&#39;USERNAME_1&#39;, &#39;PASSWORD_1&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO users (username, password) VALUES (&#39;USERNAME_2&#39;, &#39;PASSWORD_2&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-- ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INSERT INTO users (username, password) VALUES (&#39;USERNAME_1000&#39;, &#39;PASSWORD_1000&#39;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;COMMIT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;結論&quot;&gt;結論&lt;/h2&gt;
&lt;p&gt;本文透過對 PostgreSQL 對每個單一敘述都使用 transaction block 包覆起來的設計，以及 transaction 代表從記憶體寫入硬碟這件事的認知，總算一解原先對該段敘述的疑惑。也透過比較 MySQL 相對應的功能的設計，更深入了解 transaction 運作上的差異。有了這些概念，日後在兩套資料庫系統交互使用時，就能避免踩到地雷了。&lt;/p&gt;
&lt;p&gt;最後，也感謝 &lt;a href=&quot;https://github.com/david50407&quot;&gt;@david50407&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 對這相關議題的講解以及 &lt;a href=&quot;https://github.com/TEMU1086&quot;&gt;@JasonWu&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的共同討論。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[^1] transaction 通常在中文會翻譯成「交易」，但為了突顯其為本文探討的核心，在本文就不翻譯了。transaction block 亦同。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;all-or-nothing 直譯就是「全有或全無」，社群多是直接使用原文為主。另外搜尋到的中山資管所&lt;a href=&quot;https://www.mis.nsysu.edu.tw/~syhwang/Courses/DB/manuscript.pdf&quot;&gt;資料庫系統專題課程講義&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;裡面則是加註「完整的執行完畢或保持原狀都不做」。這邊為了突顯其專有名詞的意涵，刻意翻成比較文言的「全或無」，其他類似翻譯可以參照國家研究院的&lt;a href=&quot;http://terms.naer.edu.tw/detail/1304408/&quot;&gt;雙語詞彙資訊網&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;；另有「悉無律」的翻譯，但這個詞似乎比較常作為漢字在日文中使用。這方面的翻譯多用在生物學的神經衝動現象上。（我和朋友都戲稱這叫老鼠屎原則，因為只要有敘述裡如有一顆老鼠屎的錯誤發生，就得將代表整鍋粥的 transaction block 全部丟掉。比較風雅一點的戲稱就是「鼠糞原則」。）&lt;br&gt;
[^3] PostgreSQL 在 transaction block 中，若遇到錯誤，會自動丟出 &lt;code&gt;ROLLBACK;&lt;/code&gt;。 &lt;br&gt;
[^4] MySQL 預設是使用 SQL 標準的 &lt;code&gt;START TRANSACTION;&lt;/code&gt;作為 transaction 起始的宣告語法，但也支援 &lt;code&gt;BEGIN;&lt;/code&gt; 作為同義語法。&lt;br&gt;
[^5] MySQL 在當前連線停用自動提交功能，並不會導致其他連線的自動提交也被停用。 &lt;br&gt;
[^6] MySQL 會造成隱性提交（implicit commit）的語法：&lt;code&gt;BEGIN&lt;/code&gt;, &lt;code&gt;LOCK TABLES&lt;/code&gt;, &lt;code&gt;SET autocommit = 1&lt;/code&gt; (若原本不等於 &lt;code&gt;1&lt;/code&gt;時), &lt;code&gt;START TRANSACTION&lt;/code&gt;, &lt;code&gt;UNLOCK TABLES&lt;/code&gt;. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-7&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html&quot;&gt;MySQL Ref 13.3.3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;: The statements listed in this section (and any synonyms for them) implicitly end any transaction active in the current session, as if you had done a COMMIT before executing the statement. &lt;a href=&quot;#user-content-fnref-7&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-8&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html&quot;&gt;MySQL Ref 13.3.3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;: Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms. &lt;a href=&quot;#user-content-fnref-8&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="database" />
    <category term="mysql" />
    <category term="postgresql" />
  </entry>
  <entry>
    <title>現行 103 課綱所選古文 30 篇原文一覧</title>
    <link href="https://fntsr.tw/literatures/30-classical-chinese-essays-of-103-course-outline/" />
    <id>https://fntsr.tw/literatures/30-classical-chinese-essays-of-103-course-outline/</id>
    <updated>2017-09-07T09:21:34.000Z</updated>
    <published>2017-09-07T09:21:34.000Z</published>
<content type="html">&lt;p&gt;近來 107 課綱是否降低文言文比例的議題爭論的很是頻繁。敝人當初高中時，應該是 95 暫綱了，對現行的 103 課綱較不熟悉，也好奇現行課綱大概選了哪幾篇文言文。故將 103 課綱的 30 篇文言文原文皆搜集至本篇文章方便一覽。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://chincenter.fg.tp.edu.tw/cerc/download/news/20140313/d01.pdf&quot;&gt;103 普通高級中學課程綱要 國文科&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;原文來源：&lt;a href=&quot;http://chincenter.fg.tp.edu.tw/~learning/classical.php&quot;&gt;國文學科中心高中國文學習網&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;清單&quot;&gt;清單&lt;/h2&gt;
&lt;h3 id=&quot;現行課綱三十篇&quot;&gt;現行課綱三十篇&lt;/h3&gt;
&lt;h4 id=&quot;先秦-六篇&quot;&gt;先秦 (六篇)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;燭之武退秦師&lt;/li&gt;
&lt;li&gt;大同小康&lt;/li&gt;
&lt;li&gt;馮諼客孟嘗君&lt;/li&gt;
&lt;li&gt;勸學&lt;/li&gt;
&lt;li&gt;漁父&lt;/li&gt;
&lt;li&gt;諫逐客書&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;漢魏六朝-七篇&quot;&gt;漢魏六朝 (七篇)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;鴻門宴&lt;/li&gt;
&lt;li&gt;典論論文&lt;/li&gt;
&lt;li&gt;出師表&lt;/li&gt;
&lt;li&gt;蘭亭集序&lt;/li&gt;
&lt;li&gt;桃花源記&lt;/li&gt;
&lt;li&gt;世說新語選&lt;/li&gt;
&lt;li&gt;與陳伯之書&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;唐宋-七篇&quot;&gt;唐宋 (七篇)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;諫太宗十思疏&lt;/li&gt;
&lt;li&gt;師說&lt;/li&gt;
&lt;li&gt;始得西山宴遊記&lt;/li&gt;
&lt;li&gt;唐傳奇選&lt;/li&gt;
&lt;li&gt;岳陽樓記&lt;/li&gt;
&lt;li&gt;醉翁亭記&lt;/li&gt;
&lt;li&gt;赤壁賦&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;明清-七篇&quot;&gt;明清 (七篇)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;郁離子選&lt;/li&gt;
&lt;li&gt;項脊軒志&lt;/li&gt;
&lt;li&gt;晚遊六橋待月記&lt;/li&gt;
&lt;li&gt;原君&lt;/li&gt;
&lt;li&gt;廉恥&lt;/li&gt;
&lt;li&gt;左忠毅公逸事&lt;/li&gt;
&lt;li&gt;聊齋志異選&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;臺灣題材-三篇&quot;&gt;臺灣題材 (三篇)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;裨海紀遊選&lt;/li&gt;
&lt;li&gt;勸和論&lt;/li&gt;
&lt;li&gt;台灣通史序&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;非現行課綱推薦古文&quot;&gt;非現行課綱推薦古文&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;孫子選&lt;/li&gt;
&lt;li&gt;小國寡民&lt;/li&gt;
&lt;li&gt;庖丁解牛&lt;/li&gt;
&lt;li&gt;蓼莪&lt;/li&gt;
&lt;li&gt;過秦論&lt;/li&gt;
&lt;li&gt;答夫秦嘉書&lt;/li&gt;
&lt;li&gt;登樓賦&lt;/li&gt;
&lt;li&gt;陳情表&lt;/li&gt;
&lt;li&gt;春夜宴從弟桃花園序&lt;/li&gt;
&lt;li&gt;阿房宮賦&lt;/li&gt;
&lt;li&gt;與元微之書&lt;/li&gt;
&lt;li&gt;訓儉示康&lt;/li&gt;
&lt;li&gt;上樞密韓太尉書&lt;/li&gt;
&lt;li&gt;傷仲永&lt;/li&gt;
&lt;li&gt;夢溪筆談選&lt;/li&gt;
&lt;li&gt;黃州新建小竹樓記&lt;/li&gt;
&lt;li&gt;縱囚論&lt;/li&gt;
&lt;li&gt;墨池記&lt;/li&gt;
&lt;li&gt;秋聲賦&lt;/li&gt;
&lt;li&gt;六國論&lt;/li&gt;
&lt;li&gt;留侯論&lt;/li&gt;
&lt;li&gt;教戰守策&lt;/li&gt;
&lt;li&gt;黃州快哉亭記&lt;/li&gt;
&lt;li&gt;遊褒禪山記&lt;/li&gt;
&lt;li&gt;賣柑者言&lt;/li&gt;
&lt;li&gt;指喻&lt;/li&gt;
&lt;li&gt;東番記&lt;/li&gt;
&lt;li&gt;陶庵夢憶選&lt;/li&gt;
&lt;li&gt;西湖七月半&lt;/li&gt;
&lt;li&gt;病梅館記&lt;/li&gt;
&lt;li&gt;紀水沙連&lt;/li&gt;
&lt;li&gt;望玉山記&lt;/li&gt;
&lt;li&gt;遊關嶺記&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;現行-103-課綱三十篇古文原文&quot;&gt;現行 103 課綱三十篇古文原文&lt;/h2&gt;
&lt;h3 id=&quot;燭之武退秦師&quot;&gt;燭之武退秦師&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：左丘明&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;晉侯、秦伯圍鄭，以其無禮於晉，且貳於楚也。晉軍函陵，秦軍氾南。佚之狐言於鄭伯曰：「國危矣！若使燭之武見秦君，師必退。」&lt;/p&gt;
&lt;p&gt;公從之。辭曰：「臣之壯也，猶不如人。今老矣！無能為也已。」公曰：「吾不能早用子，今急而求子，是寡人之過也。然鄭亡，子亦有不利焉！」許之，夜縋而出。&lt;/p&gt;
&lt;p&gt;見秦伯曰：「秦、晉圍鄭，鄭既知亡矣！若亡鄭而有益於君，敢以煩執事。越國以鄙遠，君知其難也。焉用亡鄭以陪鄰？鄰之厚，君之薄也。若舍鄭以為東道主，行李之往來，共其乏困，君亦無所害。且君嘗為晉君賜矣！許君焦、瑕，朝濟而夕設版焉！君之所知也。夫晉，何厭之有？既東封鄭，又欲肆其西封，若不闕秦，將焉取之？闕秦以利晉，惟君圖之！」&lt;/p&gt;
&lt;p&gt;秦伯說，與鄭人盟。使杞子、逢孫、楊孫戍之，乃還。&lt;/p&gt;
&lt;p&gt;子犯請擊之，公曰：「不可。微夫人之力不及此。因人之力而敝之，不仁。失其所與，不知。以亂易整，不武。吾其還也。」亦去之。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;大同小康&quot;&gt;大同小康&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：禮記&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;昔者，仲尼與於蜡賓，事畢，出遊於觀之上，喟然而歎。仲尼之歎，蓋歎魯也。言偃在側，曰：「君子何歎？」&lt;/p&gt;
&lt;p&gt;孔子曰：「大道之行也，與三代之英，丘未之逮也，而有志焉。大道之行也，天下為公。選賢與能，講信修睦，故人不獨親其親，不獨子其子；使老有所終，壯有所用，幼有所長，矜、寡、孤、獨、廢、疾者皆有所養。男有分，女有歸。貨惡其棄於地也，不必藏於己；力惡其不出於身也，不必為己。是故謀閉而不興，盜竊亂賊而不作，故外戶而不閉，是謂『大同』。&lt;/p&gt;
&lt;p&gt;今大道既隱，天下為家，各親其親，各子其子。貨力為己，大人世及以為禮。城郭溝池以為固，禮義以為紀。以正君臣，以篤父子，以睦兄弟，以和夫婦，以設制度，以立田里，以賢勇知，以功為己。故謀用是作，而兵由此起。禹、湯、文、武、成王、周公，由此其選也。此六君子者，未有不謹於禮者也。以著其義，以考其信，著有過，刑仁講讓，示民有常。如有不由此者，在埶者去，眾以為殃，是謂『小康』。」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;勸學&quot;&gt;勸學&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：荀子&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;君子曰：學不可以已。青、取之於藍，而青於藍；冰、水為之，而寒於水。木直中繩，輮以為輪，其曲中規，雖有槁暴，不復挺者，輮使之然也。故木受繩則直，金就礪則利，君子博學而日參省乎己，則知明而行無過矣。故不登高山，不知天之高也；不臨深谿，不知地之厚也；不聞先王之遺言，不知學問之大也。干、越、夷、貉之子，生而同聲，長而異俗，教使之然也。&lt;/p&gt;
&lt;p&gt;吾嘗終日而思矣，不如須臾之所學也。吾嘗跂而望矣，不如登高之博見也。登高而招，臂非加長也，而見者遠；順風而呼，聲非加疾也，而聞者彰。假輿馬者，非利足也，而致千里；假舟楫者，非能水也，而絕江河。君子生非異也，善假於物也。&lt;/p&gt;
&lt;p&gt;南方有鳥焉，名曰蒙鳩，以羽為巢，而編之以髮，繫之葦苕，風至苕折，卵破子死。巢非不完也，所繫者然也。西方有木焉，名曰射干，莖長四寸，生於高山之上，而臨百仞之淵，木莖非能長也，所立者然也。蓬生麻中，不扶而直；白沙在涅，與之俱黑。蘭槐之根是為芷，其漸之滫，君子不近，庶人不服。其質非不美也，所漸者然也。故君子居必擇鄉，遊必就士，所以防邪辟而近中正也。&lt;/p&gt;
&lt;p&gt;物類之起，必有所始。榮辱之來，必象其德。肉腐出蟲，魚枯生蠹。怠慢忘身，禍災乃作。強自取柱，柔自取束。邪穢在身，怨之所構。施薪若一，火就燥也，平地若一，水就溼也。草木疇生，禽獸群焉，物各從其類也。是故質的張，而弓矢至焉；林木茂，而斧斤至焉；樹成蔭，而眾鳥息焉。醯酸，而蚋聚焉。故言有招禍也，行有招辱也，君子慎其所立乎！&lt;/p&gt;
&lt;p&gt;積土成山，風雨興焉；積水成淵，蛟龍生焉；積善成德，而神明自得，聖心備焉。故不積蹞步，無以致千里；不積小流，無以成江海。騏驥一躍，不能十步；駑馬十駕，功在不舍。鍥而舍之，朽木不折；鍥而不舍，金石可鏤。螾無爪牙之利，筋骨之強，上食埃土，下飲黃泉，用心一也。蟹八跪而二螯，非蛇蟺之穴，無可寄託者，用心躁也。是故無冥冥之志者，無昭昭之明；無惛惛之事者，無赫赫之功。行衢道者不至，事兩君者不容。目不能兩視而明，耳不能兩聽而聰。螣蛇無足而飛，梧鼠五技而窮。詩曰：「尸鳩在桑，其子七兮。淑人君子，其儀一兮。其儀一兮，心如結兮。」故君子結於一也。&lt;/p&gt;
&lt;p&gt;昔者瓠巴鼓瑟，而流魚出聽；伯牙鼓琴，而六馬仰秣。故聲無小而不聞，行無隱而不形。玉在山而草木潤，淵生珠而崖不枯。為善不積邪，安有不聞者乎！&lt;/p&gt;
&lt;p&gt;學惡乎始？惡乎終？曰：其數則始乎誦經，終乎讀禮；其義則始乎為士，終乎為聖人。真積力久則入。學至乎沒而後止也。故學數有終，若其義則不可須臾舍也。為之人也，舍之禽獸也。&lt;/p&gt;
&lt;p&gt;君子之學也，入乎耳，著乎心，布乎四體，形乎動靜。端而言，蝡而動，一可以為法則。小人之學也，入乎耳，出乎口；口耳之間，則四寸耳，曷足以美七尺之軀哉！古之學者為己，今之學者為人。君子之學也，以美其身；小人之學也，以為禽犢。故不問而告謂之傲，問一而告二謂之囋。傲、非也，囋、非也；君子如嚮矣。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;諫逐客書&quot;&gt;諫逐客書&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：李斯&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;臣聞吏議逐客，竊以為過矣。&lt;/p&gt;
&lt;p&gt;昔繆公求士，西取由余於戎，東得百里奚於宛，迎蹇叔於宋，來丕豹、公孫支於晉。此五子者，不產於秦，而繆公用之，并國二十，遂霸西戎。孝公用商鞅之法，移風易俗，民以殷盛，國以富彊，百姓樂用，諸侯親服，獲楚、魏之師，舉地千里，至今治彊。惠王用張儀之計，拔三川之地，西并巴、蜀，北收上郡，南取漢中，包九夷，制鄢、郢，東據成皋之險，割膏腴之壤，遂散六國之從，使之西面事秦，功施到今。昭王得范睢，廢穰侯，逐華陽，彊公室，杜私門，蠶食諸侯，使秦成帝業。此四君者，皆以客之功。由此觀之，客何負於秦哉！向使四君卻客而不內，疏士而不用，是使國無富利之實，而秦無彊大之名也。&lt;/p&gt;
&lt;p&gt;今陛下致昆山之玉，有隨、和之寶，垂明月之珠，服太阿之劍，乘纖離之馬，建翠鳳之旗，樹靈鼉之鼓。此數寶者，秦不生一焉，而陛下說之，何也？必秦國之所生然後可，則是夜光之璧不飾朝廷，犀象之器不為玩好，鄭、衛之女不充後宮，而駿良駃騠不實外廄，江南金錫不為用，西蜀丹青不為采。所以飾後宮充下陳娛心意說耳目者，必出於秦然後可，則是宛珠之簪，傅璣之珥，阿縞之衣，錦繡之飾不進於前，而隨俗雅化佳冶窈窕趙女不立於側也。夫擊甕叩缶彈箏搏髀，而歌呼嗚嗚快耳者，真秦之聲也；鄭、衛、桑閒、昭、虞、武、象者，異國之樂也。今棄擊甕叩缶而就鄭衛，退彈箏而取昭虞，若是者何也？快意當前，適觀而已矣。今取人則不然。不問可否，不論曲直，非秦者去，為客者逐。然則是所重者在乎色樂珠玉，而所輕者在乎人民也。此非所以跨海內制諸侯之術也。&lt;/p&gt;
&lt;p&gt;臣聞地廣者粟多，國大者人眾，兵彊則士勇。是以太山不讓土壤，故能成其大；河海不擇細流，故能就其深；王者不卻眾庶，故能明其德。是以地無四方，民無異國，四時充美，鬼神降福，此五帝、三王之所以無敵也。今乃棄黔首以資敵國，卻賓客以業諸侯，使天下之士退而不敢西向，裹足不入秦，此所謂「藉寇兵而齎盜糧」者也。&lt;/p&gt;
&lt;p&gt;夫物不產於秦，可寶者多；士不產於秦，而願忠者眾。今逐客以資敵國，損民以益讎，內自虛而外樹怨於諸侯，求國無危，不可得也。　&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;漁父&quot;&gt;漁父&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：屈原&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;屈原既放，遊於江潭，行吟澤畔，顏色憔悴，形容枯槁。漁父見而問之曰：「子非三閭大夫與？何故至於斯？」屈原曰：「舉世皆濁我獨清，眾人皆醉我獨醒，是以見放。」&lt;/p&gt;
&lt;p&gt;漁父曰：「聖人不凝滯於物，而能與世推移。世人皆濁，何不淈其泥而揚其波？眾人皆醉，何不餔其糟而歠其醨？何故深思高舉，自令放為？」屈原曰：「吾聞之，新沐者必彈冠，新浴者必振衣；安能以身之察察，受物之汶汶者乎？寧赴湘流，葬於江魚之腹中；安能以皓皓之白，而蒙世俗之塵埃乎？」&lt;/p&gt;
&lt;p&gt;漁父莞爾而笑，鼓枻而去，乃歌曰：「滄浪之水清兮，可以濯吾纓；滄浪之水濁兮，可以濯吾足。」遂去，不復與言。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;馮諼客孟嘗君&quot;&gt;馮諼客孟嘗君&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：戰國策&lt;/li&gt;
&lt;li&gt;朝代：先秦&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;齊人有馮諼者，貧乏不能自存，使人屬孟嘗君，願寄食門下。孟嘗君曰：「客何好？」曰：「客無好也。」曰：「客何能？」曰：「客無能也。」孟嘗君笑而受之，曰：「諾！」左右以君賤之也，食以草具。&lt;/p&gt;
&lt;p&gt;居有頃，倚柱彈其劍，歌曰：「長鋏歸來乎！食無魚！」左右以告。孟嘗君曰：「食之，比門下之客。」居有頃，復彈其鋏，歌曰：「長鋏歸來乎！出無車！」左右皆笑之，以告。孟嘗君曰：「為之駕，比門下之車客。」於是，乘其車，揭其劍，過其友，曰：「孟嘗君客我！」後有頃，復彈其劍鋏，歌曰：「長鋏歸來乎！無以為家！」左右皆惡之，以為貪而不知足。孟嘗君問：「馮公有親乎？」對曰：「有老母！」孟嘗君使人給其食用，無使乏。於是馮諼不復歌。&lt;/p&gt;
&lt;p&gt;後，孟嘗君出記，問門下諸客：「誰習計會能為文收責於薛者乎？」馮諼署曰：「能！」孟嘗君怪之曰：「此誰也？」左右曰：「乃歌夫長鋏歸來者也。」孟嘗君笑曰：「客果有能也。吾負之，未嘗見也。」請而見之，謝曰：「文倦於事，憒於憂，而性懧愚，沈於國家之事，開罪於先生。先生不羞，乃有意欲為收責於薛乎？」馮諼曰：「願之！」於是，約車治裝，載券契而行，辭曰：「責收畢，以何市而反？」孟嘗君曰：「視吾家所寡有者！」&lt;/p&gt;
&lt;p&gt;驅而之薛。使吏召諸民當償者，悉來合券？券遍合，起矯命以責賜諸民，因燒其券，民稱萬歲。長驅到齊，晨而求見。孟嘗君怪其疾也，衣冠而見之，曰：「責畢收乎？來何疾也！」曰：「收畢矣！」「以何市而反？」馮諼曰：「君云視吾家所寡有者。臣竊計君官中積珍寶，狗馬實外廄，美人充下陳。君家所寡有者以義耳！竊以為君市義。」孟嘗君曰：「市義奈何？」曰：「今君有區區之薛，不拊愛子其民，因而賈利之。臣竊矯君命，以責賜諸民，因燒其券，民稱萬歲，乃臣所以為君市義也。」孟嘗君不說，曰：「諾！先生休矣！」&lt;/p&gt;
&lt;p&gt;後朞年，齊王謂孟嘗君曰：「寡人不敢以先王之臣為臣！」孟嘗君就國於薛，未至百里，民扶老攜幼，迎君道中。孟嘗君顧謂馮諼曰：「先生所為文市義者，乃今日見之。」馮諼曰：「狡兔有三窟，僅得免其死耳。今君有一窟，未得高枕而臥也，請為君復鑿二窟。」&lt;/p&gt;
&lt;p&gt;孟嘗君予車五十乘，金五百斤，西遊於梁，謂惠王曰：「齊放其大臣孟嘗君於諸侯，諸侯先迎之者富而兵強！」於是，梁王虛上位，以故相為上將軍，遣使者黃金千斤，車百乘，往聘孟嘗君。馮諼先驅，誡孟嘗君曰：「千金重幣也，百乘顯使也，齊其聞之矣！」梁使三反，孟嘗君固辭不往也。&lt;/p&gt;
&lt;p&gt;齊王聞之，君臣恐懼，遣太傅齎黃金千斤，文車二駟，服劍一，封書謝孟嘗君曰：「寡人不祥，被於宗廟之祟，沈於諂諛之臣，開罪於君，寡人不足為也。願君顧先王之宗廟，姑反國統萬人乎？」馮諼誡孟嘗君曰：「願請先王之祭器，立宗廟於薛。」廟成，還報孟嘗君曰：「三窟已就，君姑高枕為樂矣！」&lt;/p&gt;
&lt;p&gt;孟嘗君為相數十年，無纖介之禍者，馮諼之計也。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;鴻門宴&quot;&gt;鴻門宴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：司馬遷&lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;楚軍夜擊，坑秦卒二十餘萬人新安城南。行略定秦地；至函谷關，有兵守關，不得入。又聞沛公已破咸陽，項羽大怒，使當陽君等擊關。項羽遂入，至於戲西。沛公軍霸上，未得與項羽相見。沛公左司馬曹無傷使人言於項羽曰：「沛公欲王關中，使子嬰為相，珍寶盡有之。」項羽大怒，曰：「旦日饗士卒，為擊破沛公軍！」當是時，項羽兵四十萬，在新豐鴻門，沛公兵十萬，在霸上。范增說項羽曰：「沛公居山東時，貪於財貨，好美姬。今入關，財物無所取，婦女無所幸，此其志不在小。吾令人望其氣，皆為龍虎，成五采，此天子氣也，急擊勿失。」&lt;/p&gt;
&lt;p&gt;楚左尹項伯者，項羽季父也，素善留侯張良。張良是時從沛公，項伯乃夜馳之沛公軍，私見張良，具告以事，欲呼張良與俱去，曰：「毋從俱死也。」張良曰：「臣為韓王送沛公，沛公今事有急，亡去不義，不可不語。」良乃入，具告沛公。沛公大驚，曰：「為之奈何？」張良曰：「誰為大王為此計者？」曰：「鯫生說我曰：『距關，毋內諸侯，秦地可盡王也。』故聽之。」良曰：「料大王士卒足以當項王乎？」沛公默然，曰：「固不如也。且為之奈何？」張良曰：「請往謂項伯，言沛公不敢背項王也。」沛公曰：「君安與項伯有故？」張良曰：「秦時與臣游，項伯殺人，臣活之；今事有急，故幸來告良。」沛公曰：「孰與君少長？」良曰：「長於臣。」沛公曰：「君為我呼入，吾得兄事之。」張良出，要項伯。項伯即入見沛公。沛公奉卮酒為壽，約為婚姻，曰：「吾入關，秋毫不敢有所近，籍吏民，封府庫，而待將軍。所以遣將守關者，備他盜之出入與非常也。日夜望將軍至，豈敢反乎？願伯具言臣之不敢倍德也。」項伯許諾，謂沛公曰：「旦日不可不蚤自來謝項王。」沛公曰：「諾。」於是項伯復夜去，至軍中，具以沛公言報項王，因言曰：「沛公不先破關中，公豈敢入乎？今人有大功而擊之，不義也。不如因善遇之。」項王許諾。&lt;/p&gt;
&lt;p&gt;沛公旦日從百餘騎來見項王，至鴻門。謝曰：「臣與將軍戮力而攻秦，將軍戰河北，臣戰河南，然不自意能先入關破秦，得復見將軍於此。今者有小人之言，令將軍與臣有郤。」項王曰：「此沛公左司馬曹無傷言之。不然，籍何以至此？」項王即日因留沛公與飲。項王、項伯東嚮坐；亞父南嚮坐─亞父者，范增也；沛公北嚮坐；張良西嚮侍。&lt;/p&gt;
&lt;p&gt;范增數目項王，舉所佩玉玦以示之者三，項王默然不應。范增起，出，召項莊，謂曰：「君王為人不忍，若入前為壽；壽畢，請以劍舞，因擊沛公於坐，殺之。不者，若屬皆且為所虜！」莊則入為壽。壽畢，曰：「君王與沛公飲，軍中無以為樂，請以劍舞。」項王曰：「諾。」項莊拔劍起舞。項伯亦拔劍起舞，常以身翼蔽沛公。莊不得擊。&lt;/p&gt;
&lt;p&gt;於是張良至軍門見樊噲。樊噲曰：「今日之事何如？」良曰：「甚急！今者項莊拔劍舞，其意常在沛公也。」噲曰：「此迫矣！臣請入，與之同命。」噲即帶劍擁盾入軍門。交戟之衛士欲止不內。樊噲側其盾以撞，衛士仆地。噲遂入，披帷西嚮立，瞋目視項王，頭髮上指，目眥盡裂。項王按劍而跽曰：「客何為者！」張良曰：「沛公之參乘樊噲者也。」項王曰：「壯士！賜之卮酒！」則與斗卮酒。噲拜謝，起，立而飲之。項王曰：「賜之彘肩！」則與一生彘肩。樊噲覆其盾於地，加彘肩上，拔劍切而啗之。項王曰：「壯士！能復飲乎？」樊噲曰：「臣死且不避，卮酒安足辭！夫秦王有虎狼之心，殺人如不能舉，刑人如恐不勝，天下皆叛之。懷王與諸將約曰：『先破秦入咸陽者王之。』今沛公先破秦入咸陽，毫毛不敢有所近，封閉宮室，還軍霸上，以待大王來。故遣將守關者，備他盜出入與非常也。勞苦而功高如此，未有封侯之賞，而聽細說，欲誅有功之人，此亡秦之續耳。竊為大王不取也！」項王未有以應，曰：「坐。」樊噲從良坐。&lt;/p&gt;
&lt;p&gt;坐須臾，沛公起如廁，因招樊噲出。沛公已出，項王使都尉陳平召沛公。沛公曰：「今者出，未辭也，為之奈何？」樊噲曰：「大行不顧細謹，大禮不辭小讓。如今人方為刀俎，我為魚肉，何辭為？」於是遂去。乃令張良留謝。良問曰：「大王來何操？」曰：「我持白璧一雙，欲獻項王；玉斗一雙，欲與亞父。會其怒，不敢獻。公為我獻之。」張良曰：「謹諾。」當是時，項王軍在鴻門下，沛公軍在霸上，相去四十里。沛公則置車騎，脫身獨騎，與樊噲、夏侯嬰、靳彊、紀信等四人持劍盾步走，從酈山下，道芷陽閒行。沛公謂張良曰：「從此道至吾軍，不過二十里耳。度我至軍中，公乃入。」&lt;/p&gt;
&lt;p&gt;沛公已去，閒至軍中，張良入謝，曰：「沛公不勝桮杓，不能辭。謹使臣良奉白璧一雙，再拜獻大王足下；玉斗一雙，再拜奉大將軍足下。」項王曰：「沛公安在？」良曰︰「聞大王有意督過之，脫身獨去，已至軍矣。」項王則受璧，置之坐上。亞父受玉斗，置之地，拔劍撞而破之，曰：「唉！豎子不足與謀！奪項王天下者，必沛公也。吾屬今為之虜矣！」沛公至軍，立誅殺曹無傷。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;典論論文&quot;&gt;典論論文&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：曹丕&lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;文人相輕，自古而然。傅毅之於班固，伯仲之間耳；而固小之，與弟超書曰：武仲以能屬文為蘭臺令史，下筆不能自休。夫人善於自見，而文非一體，鮮能備善，是以各以所長，相輕所短。里語曰：家有弊帚，享之千金。斯不自見之患也。今之文人：魯國孔融文舉，廣陵陳琳孔璋，山陽王粲仲宣，北海徐幹偉長，陳留阮瑀元瑜，汝南應瑒德璉，東平劉楨公幹，斯七子者，於學無所遺，於辭無所假，咸以自騁驥騄於千里，仰齊足而並馳，以此相服，亦良難矣！蓋君子審己以度人，故能免於斯累，而作論文。&lt;/p&gt;
&lt;p&gt;王粲長於辭賦，徐幹時有齊氣，然粲之匹也。如粲之初征，登樓，槐賦，征思，幹之玄猿，漏卮，圓扇，橘賦，雖張，蔡不過也。然於他文，未能稱是。琳，瑀之章表書記，今之雋也。應瑒和而不壯，劉楨壯而不密。孔融體氣高妙，有過人者；然不能持論，理不勝辭；以至乎雜以嘲戲；及其所善，揚班儔也。&lt;/p&gt;
&lt;p&gt;常人貴遠賤近，向聲背實，又患闇於自見，謂己為賢。夫文本同而末異，蓋奏議宜雅，書論宜理，銘誄尚實，詩賦欲麗。此四科不同，故能之者偏也；唯通才能備其體。&lt;/p&gt;
&lt;p&gt;文以氣為主，氣之清濁有體，不可力強而致。譬諸音樂，曲度雖均，節奏同檢，至於引氣不齊，巧拙有素，雖在父兄，不能以移子弟。&lt;/p&gt;
&lt;p&gt;蓋文章，經國之大業，不朽之盛事。年壽有時而盡，榮樂止乎其身，二者必至之常期，未若文章之無窮。是以古之作者，寄身於翰墨，見意於篇籍，不假良史之辭，不託飛馳之勢，而聲名自傳於後。故西伯幽而演易，周旦顯而制禮，不以隱約而弗務，不以康樂而加思。夫然，則古人賤尺璧而重寸陰，懼乎時之過已。而人多不強力；貧賤則懾於饑寒，富貴則流於逸樂，遂營目前之務，而遺千載之功。日月逝於上，體貌衰於下，忽然與萬物遷化，斯志士之大痛也！融等已逝，唯幹著論，成一家言。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;與陳伯之書&quot;&gt;與陳伯之書&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：丘遲&lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;遲頓首陳將軍足下：無恙，幸甚，幸甚！&lt;/p&gt;
&lt;p&gt;將軍勇冠三軍，才為世出，棄燕雀之小志，慕鴻鵠以高翔。昔因機變化，遭遇明主；立功立事，開國稱孤；朱輪華轂，擁旄萬里，何其壯也！如何一旦為奔亡之虜，聞鳴鏑而股戰，對穹廬以屈膝？又何劣邪&lt;/p&gt;
&lt;p&gt;尋君去就之際，非有他故，直以不能內審諸己，外受流言，沉迷猖獗，以至於此。聖朝赦罪責功，棄瑕錄用，推赤心於天下，安反側於萬物；將軍之所知，不假僕一二談也。朱鮪涉血於友于，張繡剚刃於愛子，漢主不以為疑，魏君視之若舊。況將軍無昔人之罪，而勳重於當世。夫迷途知返，往哲是與；不遠而復，先典攸高。主上屈法申恩，吞舟是漏；將軍松柏不翦，親戚安居，高臺未傾，愛妾尚在，悠悠爾心，亦何可言！今功臣名將，雁行有序，佩紫懷黃，贊帷幄之謀，乘軺建節，奉疆埸之任，並刑馬作誓，傳之子孫。將軍獨靦顏借命，驅馳氈裘之長，寧不哀哉！&lt;/p&gt;
&lt;p&gt;夫以慕容超之強，身送東市；姚泓之盛，面縛西都。故知霜露所均，不育異類；姬漢舊邦，無取雜種。北虜僭盜中原，多歷年所，惡積禍盈，理至燋爛。況偽孽昏狡，自相夷戮，部落攜離，酋豪猜貳。方當系頸蠻邸，懸首槁街，而將軍魚游於沸鼎之中，燕巢於飛幕之上，不亦惑乎？&lt;/p&gt;
&lt;p&gt;暮春三月，江南草長；雜花生樹，群鶯亂飛。見故國之旗鼓，感平生於疇日，撫弦登陴，豈不愴恨。所以廉公之思趙將，吳子之泣西河，人之情也。將軍獨無情哉？想早厲良規，自求多福！&lt;/p&gt;
&lt;p&gt;當今皇帝聖明，天下安樂，白環西獻，楛矢東來。夜郎、滇池，解辮請職；朝鮮、昌海，蹶角受化。惟北狄野心，掘強沙塞之間，欲延歲月之命耳。中軍臨川殿下，明德茂親，總玆戎重，弔民洛汭，伐罪秦中，若遂不改，方思僕言。聊布往懷，君其詳之。丘遲頓首。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;出師表&quot;&gt;出師表&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：諸葛亮&lt;/li&gt;
&lt;li&gt;朝代：秦漢&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;臣亮言：先帝創業未半，而中道崩殂。今天下三分，益州疲弊，此誠危急存亡之秋也。然侍衛之臣，不懈於內；忠志之士，忘身於外者，蓋追先帝之殊遇，欲報之於陛下也。誠宜開張聖聽，以光先帝遺德，恢宏志士之氣；不宜妄自菲薄，引喻失義，以塞忠諫之路也。&lt;/p&gt;
&lt;p&gt;宮中、府中，俱為一體，陟罰臧否，不宜異同。若有作奸犯科，及為忠善者，宜付有司，論其刑賞，以昭陛下平明之理，不宜偏私，使內外異法也。&lt;/p&gt;
&lt;p&gt;侍中、侍郎郭攸之、費禕、董允等，此皆良實，志慮忠純，是以先帝簡拔以遺陛下。愚以為宮中之事，事無大小，悉以咨之，然後施行，必能裨補闕漏，有所廣益。將軍向寵，性行淑均，曉暢軍事，試用於昔日，先帝稱之曰「能」，是以眾議舉寵為督。愚以為營中之事，悉以咨之，必能使行陣和睦，優劣得所。親賢臣，遠小人，此先漢所以興隆也；親小人，遠賢臣，此後漢所以傾頹也。先帝在時，每與臣論此事，未嘗不歎息痛恨於桓、靈也。侍中、尚書、長史、參軍，此悉貞亮死節之臣也，願陛下親之、信之，則漢室之隆，可計日而待也。&lt;/p&gt;
&lt;p&gt;臣本布衣，躬耕於南陽，苟全性命於亂世，不求聞達于諸侯。先帝不以臣卑鄙，猥自枉屈，三顧臣於草廬之中，諮臣以當世之事。由是感激，遂許先帝以驅馳。後值傾覆，受任於敗軍之際，奉命於危難之間，爾來二十有一年矣！先帝知臣謹慎，故臨崩寄臣以大事也。受命以來，夙夜憂勤，恐託付不效，以傷先帝之明。故五月渡瀘，深入不毛。今南方已定，兵甲已足，當獎率三軍，北定中原。庶竭駑鈍，攘除奸凶，興復漢室，還於舊都；此臣所以報先帝而忠陛下之職分也。至於斟酌損益，進盡忠言，則攸之、禕、允之任也。願陛下託臣以討賊興復之效；不效，則治臣之罪，以告先帝之靈。若無興德之言，則責攸之、禕、允等之慢，以彰其咎。陛下亦宜自課，以諮諏善道，察納雅言。深追先帝遺詔，臣不勝受恩感激。今當遠離，臨表涕泣，不知所云。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;桃花源記&quot;&gt;桃花源記&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：陶淵明 &lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;晉太元中，武陵人，捕魚為業，緣溪行，忘路之遠近，忽逢桃花林，夾岸數百步，中無雜樹，芳草鮮美，落英繽紛，漁人甚異之，復前行，欲窮其林，林盡水源，便得一山，山有小口，彷彿若有光，便捨船，從口入。&lt;/p&gt;
&lt;p&gt;初極狹，纔通人，復行數十步，豁然開朗，土地平曠，屋舍儼然，有良田、美池、桑竹之屬，阡陌交通，雞犬相聞，其中往來種作，男女衣著，悉如外人，黃髮垂髫，並怡然自樂，見漁人，乃大驚，問所從來，具答之，便要還家，設酒、殺雞、做食。村中聞有此人，咸來問訊，自云：先世避秦時亂，率妻子邑人來此絕境，不復出焉，遂與外人間隔。問今是何世，乃不知有漢，無論魏晉。此人一一為具言所聞，皆歎惋，餘人各復沿至其家，皆出酒食，停數日辭去，此中人語云：不足為外人道也。&lt;/p&gt;
&lt;p&gt;既出，得其船，便扶向路，處處誌之，及郡下，詣太守，說如此，太守即遣人隨其往，尋向所誌，遂迷不復得路。南陽劉子驥，高尚士也，聞之欣然規往，未果，尋病終，後遂無問津者。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;世說新語選&quot;&gt;世說新語選&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：劉義慶&lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;詠絮之才&lt;/p&gt;
&lt;p&gt;謝太傅寒雪日內集，與兒女講論文義。俄而雪驟，公欣然曰：「白雪紛紛何所似？」兄子胡兒曰：「撒鹽空中差可擬。」兄女曰：「未若柳絮因風起。」公大笑樂。&lt;/p&gt;
&lt;p&gt;坦腹東床&lt;/p&gt;
&lt;p&gt;郗太傅在京口，遣門生與王丞相書，求女婿。丞相語郗信：「君往東廂，任意選之。」門生歸，白郗曰：「王家諸郎亦接可嘉，聞來覓婿，咸自矜持，唯有一郎在東床上坦腹食，如不聞。」郗公云：「正此好！」訪之，乃是逸少，因嫁女與焉。&lt;/p&gt;
&lt;p&gt;殷仲堪儉食&lt;/p&gt;
&lt;p&gt;殷仲堪既為荊州，值水儉，食常五碗盤，外無餘肴，飯粒脫落盤席間，輒拾以啖之。雖欲率物，亦緣其性真素。每語子弟云：「勿以我受任方州，云我豁平昔時意，今吾處之不易。貧者，士之常，焉得登枝而損其本？爾曹其存之！」&lt;/p&gt;
&lt;p&gt;絕妙好辭&lt;/p&gt;
&lt;p&gt;魏武嘗過曹娥碑下，楊脩從，碑背上見題作「黃絹幼婦，外孫齏臼」八字，魏武謂修曰：「卿解不？」答曰：「解。」魏武曰：「卿未可言，待我思之。」行三十里，魏武乃曰：「吾已得。」令脩別記所知。脩曰：「黃絹，色絲也，於字為絻。幼婦，少女也，於字為妙。外孫，女子也，於字為好。臼，受辛木，於字為辭。所謂『絕妙好辭』也。」魏武亦記之，與脩同，乃歎曰：「我才不及卿，乃覺三十里。」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;蘭亭集序&quot;&gt;蘭亭集序&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：王羲之&lt;/li&gt;
&lt;li&gt;朝代：魏晉南北朝&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;永和九年，歲在癸丑，暮春之初，會于會稽山陰之蘭亭，脩禊事也。群賢畢至，少長咸集。此地有崇山峻嶺、茂林脩竹；又有清流激湍，映帶左右，引以爲流觴曲水。列坐其次，雖無絲竹管絃之盛，一觴一詠，亦足以暢敘幽情。&lt;/p&gt;
&lt;p&gt;是日也，天朗氣清，惠風和暢。仰觀宇宙之大，俯察品類之盛，所以遊目騁懷，足以極視聽之娛，信可樂也。&lt;/p&gt;
&lt;p&gt;夫人之相與，俯仰一世，或取諸懷抱，悟言一室之內；或因寄所託，放浪形骸之外。雖趣舍萬殊，靜躁不同；當其欣於所遇，暫得於己，快然自足，不知老之將至。及其所之既倦，情隨事遷，感慨係之矣。向之所欣，俛仰之間，以爲陳迹，猶不能不以之興懷；況脩短隨化，終期於盡。古人云：「死生亦大矣。」豈不痛哉！&lt;/p&gt;
&lt;p&gt;每覽昔人興感之由，若合一契，未嘗不臨文嗟悼，不能喻之於懷。固知一死生爲虛誕，齊彭殤爲妄作。後之視今，亦由今之視昔，悲夫！故列敘時人，錄其所述。雖世殊事異，所以興懷，其致一也。後之覽者，亦將有感於斯文。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;師說&quot;&gt;師說&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：韓愈&lt;/li&gt;
&lt;li&gt;朝代：隋唐五代&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;古之學者必有師。師者，所以傳道、受業、解惑也。人非生而知之者，孰能無惑？惑而不從師，其為惑也終不解矣！&lt;/p&gt;
&lt;p&gt;生乎吾前，其聞道也，固先乎吾，吾從而師之；生乎吾後，其聞道也，亦先乎吾，吾從而師之。吾師道也，夫庸知其年之先後生於吾乎？是故無貴、無賤、無長、無少，道之所存，師之所存也。&lt;/p&gt;
&lt;p&gt;嗟乎，師道之不存也久矣，欲人之無惑也難矣。古之聖人，其出人也遠矣，猶且從師而問焉。今之眾人，其下聖人也亦遠矣，而恥學於師。是故聖益聖，愚益愚。聖人之所以為聖，愚人之所以為愚，其皆出於此乎？&lt;/p&gt;
&lt;p&gt;愛其子，擇師而教之，於其身則恥師焉，惑矣！彼童子之師，授之書而習其句讀者也，非吾所謂傳其道、解其惑者也。句讀之不知，惑之不解，或師焉，或不焉，小學而大遺，吾未見其明也。&lt;/p&gt;
&lt;p&gt;巫、醫、樂師、百工之人，不恥相師。士大夫之族，曰師曰弟子云者，則群聚而笑之。問之，則曰：「彼與彼年相若也，道相似也。」位卑則足羞，官盛則近諛。嗚乎！師道之不復可知矣。巫、醫、樂師百工之人，君子不齒，今其智乃反不能及，其可怪也歟！&lt;/p&gt;
&lt;p&gt;聖人無常師。孔子師郯子、萇弘、師襄、老聃。郯子之徒，其賢不如孔子。孔子曰三人行必有我師，是故弟子不必不如師，師不必賢於弟子，聞道有先後，術業有專攻，如是而已。李氏子蟠，年十七，好古文，六藝、經傳，皆通習之。不拘於時，請學於余，余嘉其能行古道，作師說以貽之。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;始得西山宴遊記&quot;&gt;始得西山宴遊記&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：柳宗元&lt;/li&gt;
&lt;li&gt;朝代：隋唐五代&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;自余爲僇人，居是州，恆惴慄。其隙也，則施施而行，漫漫而遊。日與其徒上高山，入深林，窮回溪；幽泉怪石，無遠不到。到則披草而坐，傾壺而醉，醉則更相枕以臥，臥而夢。意有所極，夢亦同趣。覺而起，起而歸。以爲凡是州之山有異態者，皆我有也，而未始知西山之怪特。&lt;/p&gt;
&lt;p&gt;今年九月二十八日，因坐法華西亭，望西山，始指異之。遂命僕人過湘江，緣染溪，斫榛莽，焚茅茷，窮山之高而止。攀援而登，箕踞而遨，則凡數州之土壤，皆在衽席之下。&lt;/p&gt;
&lt;p&gt;其高下之勢，岈然窪然，若垤若穴，尺寸千里，攢蹙累積，莫得遁隱；縈青繚白，外與天際，四望如一。然後知是山之特出，不與培塿爲類。悠悠乎與灝氣俱，而莫得其涯；洋洋乎與造物者遊，而不知其所窮。&lt;/p&gt;
&lt;p&gt;引觴滿酌，頹然就醉，不知日之入，蒼然暮色，自遠而至，至無所見，而猶不欲歸。心凝形釋，與萬化冥合。然後知吾向之未始遊，遊於是乎始，故爲之文以志。是歲，元和四年也。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;虬髯客傳&quot;&gt;虬髯客傳&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：杜光庭&lt;/li&gt;
&lt;li&gt;朝代：隋唐五代&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;隋煬帝之幸江都也，命司空楊素守西京。素驕貴，又以時亂，天下之權重望者莫我若也，奢貴自奉，禮異人臣。每公卿入言，賓客上謁，未嘗不踞床而見，令美人捧出，侍婢羅列，頗僭於上。末年益甚，無復知所負荷、有扶危持顛之心。&lt;/p&gt;
&lt;p&gt;一日，衛公李靖以布衣上謁，獻奇策，素亦踞見。靖前揖，曰：「天下方亂，英雄競起。公為帝室重臣，須以收羅豪傑為心，不宜踞見賓客。」素斂容而起，與語，大悅，收其策而退。&lt;/p&gt;
&lt;p&gt;當靖之騁辯也，一妓有殊色，執紅拂，立於前，獨目靖。靖既去，而執拂者臨軒指吏，問曰：「去者處士第幾？住何處？」吏具以對。妓誦而去。&lt;/p&gt;
&lt;p&gt;靖歸逆旅。其夜五更初，忽聞叩門而聲低者，靖起問焉。乃紫衣戴帽人，杖揭一囊。靖問：「誰？」曰：「妾，楊家之紅拂妓也。」靖遽延入。脫衣去帽，乃十八九佳麗人也，素面華衣而拜，靖驚答拜。曰：「妾待楊司空久，閱天下之人多矣，無如公者。絲蘿非獨生，願託喬木，故來奔耳。」靖曰：「楊司空權重京師，如何？」曰「彼屍居餘氣，不足畏也。諸妓知其無成，去者眾矣，彼亦不甚逐也。計之詳矣，幸無疑焉！」問其姓，曰：「張。」問其伯仲之次，曰：「最長。」觀其肌膚、儀狀、言詞、氣性，真天人也。靖不自意獲之，愈喜愈懼，瞬息萬慮不安，而窺戶者無停屨。數曰，亦聞追訪之聲，意亦非峻，乃雄服乘馬，排闥而去，將歸太原。&lt;/p&gt;
&lt;p&gt;行次靈石旅舍，既設床，爐中烹肉且熟；張氏以髮長委地，立梳床前。靖方刷馬，忽有一人，中形，赤髯而虬，乘蹇驢而來，投革囊於爐前，取枕欹臥，看張梳頭。靖怒甚，未決，猶刷馬。張氏熟視其面，一手握髮，一手映身搖示靖，令勿怒。急急梳頭畢，斂衽前問其姓。臥客答曰：「姓張。」對曰：「妾亦姓張，合是妹。」遽拜之。問：「第幾？」曰：「第三。」問：「妹第幾？」曰：「最長。」遂喜曰：「今日幸逢一妹。」張氏遙呼：「李郎，且來見三兄！」靖驟拜之，遂環坐。曰：「煮者何肉？」曰：「羊肉，計已熟矣。」客曰：「飢甚！」靖出市胡餅。客抽腰間匕首，切肉共食。食竟，餘肉亂切，送驢前食之，甚速。客曰。「觀李郎之行，貧士也，何以致斯異人？」曰：「靖雖貧，亦有心者焉。他人見問，固不言；兄之問，則無隱耳。」具言其由。曰：「然則將何之？」曰：「將避地太原。」客曰：「然，吾故謂非君所能致也。」曰：，有酒乎？」靖曰：「主人西則酒肆也。」靖取酒一斗。酒既巡，客曰：「吾有少下酒物，李即能同之乎？」靖曰：「不敢。」於是開革囊，取一人頭並心肝；卻頭囊中，以匕首切心肝共食之。曰：「此人天下負心者。銜之十年，今始獲之，吾憾釋矣。」又曰：「觀李郎儀形器宇，真丈夫也。亦知太原有異人乎？，」曰：「嘗見一人，愚謂之真人。其餘，將帥而已。」曰：「何姓？」曰：「靖之同姓。」曰：「年幾？」曰：「僅二十。」曰：「今何為？」曰：「州將之子。」曰：「似矣，亦須道兄見之。李郎能致吾一見乎？」日：「靖之友劉文靜者，與之狎，因文靜見之可也。然兄欲何為？」曰：「望氣者言太原有奇氣，使吾訪之。李郎明發，何日到太原？」靖計之日，曰：「某日當到。」曰：「達之明日方曙，候我於汾陽橋。」言訖，乘驢而去，其行若飛，回顧已失。靖與張氏且驚且喜，久之，曰：「烈士不欺人，固無畏！」促鞭而行。&lt;/p&gt;
&lt;p&gt;及期，入太原，候之，相見大喜，偕詣劉氏。詐謂文靜曰：「有善相者思見郎君，請迎之。」文靜素奇其人，方議論匡輔，一旦聞客有知人者，其心可知，遽致酒延焉。既而太宗至，不衫不屨，裼裘而來，神氣揚揚，貌與常異。虬髯默居坐末，見之心死。飲數巡，起招靖曰：「真天子也！」靖以告劉。劉益喜，自負。既出，而虬髯曰：「吾見之，十八、九定矣，亦須道兄見之。李郎宜與一妹復入京，某日午時，訪我於馬行東酒樓下。下有此驢及一瘦驢，即我與道兄俱在其所也。」公到，即見二乘；攬衣登樓，即虬髯與一道士方對飲。見靖驚喜，召坐環飲。十數巡，曰：「樓下櫃中有錢十萬，擇一深隱處駐一妹。畢，某日，復會我於汾陽橋。&lt;/p&gt;
&lt;p&gt;如期至，即道士與虬髯已到矣。共謁文靜，時方弈棋，起揖而語，少焉，文靜飛書迎文皇看棋。道士對弈，虬髯與靖旁立為侍者。俄而，文皇來，精采驚人，長揖就坐，神清氣朗，滿坐風生，顧盼煒如也。道士一見慘然，下棋子曰：「此局輸矣！輸矣！於此失卻局，奇哉！救無路矣！復奚言！」罷弈請去。既出，謂虬髯曰：「此世界非公世界也，他方可圖。勉之，勿以為念！」因共入京。虬髯曰：「計李郎之程，某日方到。到之明日，可與一妹同詣某坊曲小宅。媿李郎往復相從，一妹懸然如磬，欲令新婦袛謁，略議從容，無前卻也。」言畢，吁嗟而去。&lt;/p&gt;
&lt;p&gt;靖亦策馬遄征，俄即到京，與張氏同往，乃一小板門。叩之，有應者，拜曰：「三郎令候一娘子、李郎久矣。」延入重門，門益壯麗。奴婢三十人羅列於前，奴二十人引靖入東廳。廳之陳設，窮極珍異，巾箱妝奩冠鏡首飾之盛，非人間之物。巾妝梳櫛畢，請更衣，衣又珍奇。既畢，傳云：「三郎來！」乃虬髯者，紗帽裼裘，有龍虎之姿。相見歡然，催其妻出拜，蓋亦天人也。遂延中堂，陳設盤筳之盛，雖王公家不侔也。四人對坐，牢饌畢陳。女樂二十人，列奏於前，似從天降，非人間之曲度；食畢，行酒。而家人自西堂舁出二十床，各以錦繡帕覆之。既呈，盡去其帕，乃文簿鎖匙耳。虬髯謂曰：「盡是珍寶貨泉之數，吾之所有，悉以充贈。何者？某本欲於此世界求事，或當龍戰三二十載，建少功業。今既有主，住亦何為？太原李氏，真英主也。三五年內，即當太平。李郎以奇特之才，輔清平主，竭心盡善，必極人臣；一妹以天人之姿，蘊不世之藝，從夫之貴，榮極軒裳。非一妹不能識李郎，非李郎不能榮一妹。聖賢起陸之漸，際會如期；虎嘯風生，龍騰雲萃，固當然也。將余之贈，以奉真主，贊功業，勉之哉！此後十餘年，東南數千里外有異事，是吾得志之秋也。一妹與李郎可瀝酒相賀。」顧謂左右曰：「李郎、一妹，是汝主也。」言畢，與其妻戎裝乘馬，一奴乘馬從後，數步不見。靖據其宅，遂為豪家，得以助文皇締構之資，遂匡大業。&lt;/p&gt;
&lt;p&gt;貞觀中，靖位至僕射。東南蠻奏曰：「有海賊以千艘，積甲十萬人，入扶餘國，殺其主自立，國內已定。」靖知虬髯成功也，歸告張氏，具禮相賀，瀝酒東南祝拜之。&lt;/p&gt;
&lt;p&gt;乃知真人之興，非英雄所冀，況非英雄乎？人臣之謬思亂，乃螳蜋之拒走輪耳。我皇家垂福萬葉？豈虛然哉！或曰：「衛公之兵法，半是虬髯所傳也。」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;太宗十思疏&quot;&gt;太宗十思疏&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：魏徵&lt;/li&gt;
&lt;li&gt;朝代：隋唐五代&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;臣聞求木之長者，必固其根本；欲流之遠者，必浚其泉源；思國之安者，必積其德義。源不深而望流之遠，根不固而求木之長，德不厚而思國之治，雖在下愚，知其不可，而況於明哲乎？人君當神器之重，居域中之大，將崇極天之峻，永保無疆之休，不念居安思危，戒奢以儉，德不處其厚，情不勝其欲，斯亦伐根以求木茂，塞源而欲流長者也。&lt;/p&gt;
&lt;p&gt;凡百元首，承天景命，莫不殷憂而道著，功成而德衰，有善始者實繁，能克終者蓋寡。豈其取之易而守之難乎？昔取之而有餘，今守之而不足，何也？夫在殷憂，必竭誠以待下；既得志，則縱情以傲物。竭誠則胡越之一體，傲物則骨肉為行路。雖董之以嚴刑，震之以威怒，終苟免而不懷仁，貌恭而不心服。怨不在大，可畏惟人，載舟覆舟，所宜深慎，奔車朽索，其可忽乎！&lt;/p&gt;
&lt;p&gt;君人者，誠能見可欲，則思知足以自戒；將有所作，則思知止以安人；念高危，則思謙沖而自牧；懼滿溢，則思江海而下百川；樂盤游，則思三驅以為度；憂懈怠，則思慎始而敬終；慮壅蔽，則思虛心以納下；想讒邪，則思正身以黜惡；恩所加，則思無因喜以謬賞；罰所及，則思無因怒而濫刑。總此十思，弘茲九德。簡能而任之，擇善而從之，則智者盡其謀，勇者竭其力，仁者播其惠，信者效其忠。文武爭馳，君臣無事，可以盡豫遊之樂，可以養松喬之壽，鳴琴垂拱，不言而化。何必勞神苦思，代下司職，役聰明之耳目，虧無為之大道哉？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;岳陽樓記&quot;&gt;岳陽樓記&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：范仲淹&lt;/li&gt;
&lt;li&gt;朝代：宋&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;慶曆四年春，滕子京謫守巴陵郡。越明年，政通人和，百廢具興，乃重修岳陽樓，增其舊制，刻唐賢今人詩賦於其上；屬予作文以記之。&lt;/p&gt;
&lt;p&gt;予觀夫巴陵勝狀，在洞庭一湖。銜遠山，吞長江，浩浩湯湯，橫無際涯；朝暉夕陰，氣象萬千；此則岳陽樓之大觀也，前人之述備矣。然則北通巫峽，南極瀟湘，遷客騷人，多會於此，覽物之情，得無異乎？&lt;/p&gt;
&lt;p&gt;若夫霪雨霏霏，連月不開；陰風怒號，濁浪排空；日星隱耀，山岳潛形；商旅不行，檣傾楫摧；薄暮冥冥，虎嘯猿啼；登斯樓也，則有去國懷鄉，憂讒畏譏，滿目蕭然，感極而悲者矣。&lt;/p&gt;
&lt;p&gt;至若春和景明，波瀾不驚，上下天光，一碧萬頃；沙鷗翔集，錦鱗游泳，岸芷汀蘭，郁郁青青。而或長煙一空，皓月千里，浮光躍金，靜影沈璧，漁歌互答，此樂何極！登斯樓也，則有心曠神怡，寵辱偕忘、把酒臨風，其喜洋洋者矣。&lt;/p&gt;
&lt;p&gt;嗟夫！予嘗求古仁人之心，或異二者之為，何哉？不以物喜，不以己悲，居廟堂之高，則憂其民；處江湖之遠，則憂其君。是進亦憂，退亦憂；然則何時而樂耶？其必曰：「先天下之憂而憂，後天下之樂而樂」乎！噫！微斯人，吾誰與歸！&lt;/p&gt;
&lt;p&gt;時六年九月十五日。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;醉翁亭記&quot;&gt;醉翁亭記&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：歐陽脩&lt;/li&gt;
&lt;li&gt;朝代：宋&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;環滁皆山也。其西南諸峰，林壑尤美，望之蔚然而深秀者，琅琊也。山行六七里，漸聞水聲潺潺而瀉出於兩峰之間者，釀泉也。峰回路轉，有亭翼然臨於泉上者，醉翁亭也。作亭者誰？山之僧智僊也。名之者誰？太守自謂也。太守與客來飲於此，飲少輒醉，而年又最高，故自號曰醉翁也。醉翁之意不在酒，在乎山水之間也。山水之樂，得之心而寓之酒也。&lt;/p&gt;
&lt;p&gt;若夫日出而林霏開，雲歸而岩穴暝，晦明變化者，山間之朝暮也。野芳發而幽香，佳木秀而繁陰，風霜高潔，水落而石出者，山間之四時也。朝而往，暮而歸，四時之景不同，而樂亦無窮也&lt;/p&gt;
&lt;p&gt;至於負者歌於途，行者休於樹，前者呼，後者應，傴僂提攜，往來而不絕者，滁人遊也。臨溪而漁，溪深而魚肥，釀泉爲酒，泉香而酒冽，山肴野蔌，雜然而前陳者，太守宴也。宴酣之樂，非絲非竹，射者中，弈者勝，觥籌交錯，起坐而喧嘩者，衆賓歡也。蒼顔白髮，頹然乎其間者，太守醉也。&lt;/p&gt;
&lt;p&gt;已而夕陽在山，人影散亂，太守歸而賓客從也。樹林陰翳，鳴聲上下，遊人去而禽鳥樂也。然而禽鳥知山林之樂，而不知人之樂；人知從太守遊而樂，而不知太守之樂其樂也。醉能同其樂，醒能述以文者，太守也。太守謂誰？廬陵歐陽修也&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;赤壁賦&quot;&gt;赤壁賦&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：蘇軾&lt;/li&gt;
&lt;li&gt;朝代：宋&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;壬戌之秋，七月既望，蘇子與客泛舟遊於赤壁之下。清風徐來，水波不興。舉酒屬客，誦明月之詩，歌窈窕之章。少焉，月出於東山之上，徘徊於斗牛之間。白露橫江，水光接天。縱一葦之所如，凌萬頃之茫然。浩浩乎如馮虛御風，而不知其所止；飄飄乎如遺世獨立，羽化而登仙。&lt;/p&gt;
&lt;p&gt;於是飲酒樂甚，扣舷而歌之。歌曰：「桂棹兮蘭槳，擊空明兮溯流光；渺渺兮予懷，望美人兮天一方。」客有吹洞簫者，倚歌而和之。其聲嗚嗚然，如怨如慕，如泣如訴；餘音嫋嫋，不絕如縷，舞幽壑之潛蛟，泣孤舟之嫠婦。&lt;/p&gt;
&lt;p&gt;蘇子愀然，正襟危坐，而問客曰：「何為其然也？」客曰：「『月明星稀，烏鵲南飛』，此非曹孟德之詩乎？西望夏口，東望武昌，山川相繆，鬱乎蒼蒼，此非孟德之困于周郎者乎？方其破荊州，下江陵，順流而東也，舳艫千里，旌旗蔽空，釃酒臨江，橫槊賦詩，固一世之雄也，而今安在哉？況吾與子漁樵于江渚之上，侶魚蝦而友麋鹿，駕一葉之扁舟，舉匏樽以相屬。寄蜉蝣於天地，渺滄海之一粟，哀吾生之須臾，羨長江之無窮。挾飛仙以遨遊，抱明月而長終。知不可乎驟得，托遺響於悲風。&lt;/p&gt;
&lt;p&gt;蘇子曰：「客亦知夫水與月乎？逝者如斯，而未嘗往也；盈虛者如彼，而卒莫消長也。蓋將自其變者而觀之，則天地曾不能以一瞬；自其不變者而觀之，則物與我皆無盡也，而又何羨乎？且夫天地之間，物各有主，苟非吾之所有，雖一毫而莫取，惟江上之清風，與山間之明月，耳得之而為聲，目遇之而成色；取之無禁，用之不竭。是造物者之無盡藏也，而吾與子之所共適。」&lt;/p&gt;
&lt;p&gt;客喜而笑，洗盞更酌。肴核既盡，杯盤狼藉。相與枕藉乎舟中，不知東方之既白。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;郁離子選&quot;&gt;郁離子選&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：劉基&lt;/li&gt;
&lt;li&gt;朝代：元&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;工之僑為琴&lt;/p&gt;
&lt;p&gt;工之僑得良桐焉，斲而為琴，弦而鼓之，金聲而玉應，自以為天下之美也。獻之太常。使國工視之，曰：「弗古。」還之。&lt;/p&gt;
&lt;p&gt;工之僑以歸，謀諸漆工，作斷紋焉；又謀諸篆工，作古窾焉；匣而埋諸土。其年出之，抱以適市。貴人過而視之，易之以百金，獻諸朝。樂官傳視，皆曰：「希世之珍也。」&lt;/p&gt;
&lt;p&gt;工之僑聞之，嘆曰：「悲哉，世也！豈獨一琴哉！莫不然矣。而不早圖之，其與亡矣！」遂去，入于宕冥之山，不知其所終。&lt;/p&gt;
&lt;p&gt;狙公&lt;/p&gt;
&lt;p&gt;楚有養狙以為生者，楚人謂之狙公。旦日必部分眾狙於庭，使老狙率以之山中，求草木之實，賦什一以自奉，或不給則加鞭箠焉。群狙皆謂苦之，弗敢違也。一日，有小狙謂眾狙曰：「山之果，公所樹與？」曰：「否也，天生也。」曰：「非公不得而取與？」曰：「否也，皆得而取也。」曰：「然則吾何假於彼而為之役乎？」言未既，眾狙皆寤。其夕，相與伺狙公之寢，破柵毀柙，取其積，相攜而入於林中，不復歸。狙公卒餒而死。&lt;/p&gt;
&lt;p&gt;郁離子曰：「世有以術使民而無道揆者，其如狙公乎！為其昏而未覺也，一旦有開之，其術窮矣！」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;項脊軒志&quot;&gt;項脊軒志&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：歸有光&lt;/li&gt;
&lt;li&gt;朝代：明&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;項脊軒，舊南閤子也。室僅方丈，可容一人居。百年老屋，塵泥滲漉，雨澤下注，每移案，顧視無可置者。又北向，不能得日；日過午已昏。余稍為修葺，使不上漏。前闢四窗，垣牆周庭，以當南日。日影反照，室始洞然。又雜植蘭、桂、竹、木於庭，舊時欄楯，亦遂增勝。借書滿架，偃仰嘯歌，冥然兀坐，萬籟有聲。而庭階寂寂，小鳥時來啄食，人至不去。三五之夜，明月半牆，桂影斑駁，風移影動，珊珊可愛。&lt;/p&gt;
&lt;p&gt;然余居於此，多可喜，亦多可悲。先是，庭中通南北為一。迨諸父異爨，內外多置小門牆，往往而是。東犬西吠，客踰庖而宴，雞棲於廳。庭中始為籬，已為牆，凡再變矣。家有老嫗，嘗居於此。嫗，先大母婢也，乳二世，先妣撫之甚厚。室西連於中閨，先妣嘗一至。嫗每謂余曰：「某所，而母立於茲。」嫗又曰：「汝姊在吾懷，呱呱而泣；娘以指扣門扉曰：『兒寒乎？欲食乎？』吾從板外相為應答。」語未畢，余泣，嫗亦泣。余自束髮讀書軒中，一日，大母過余曰：「吾兒，久不見若影，何竟日默默在此，大類女郎也？」比去，以手闔門，自語曰：「吾家讀書久不效，兒之成，則可待乎！」頃之，持一象笏至，曰：「此吾祖太常公宣德間執此以朝，他日汝當用之。」瞻顧遺跡，如在昨日，令人長號不自禁。&lt;/p&gt;
&lt;p&gt;軒東故嘗為廚，人往，從軒前過。余扃牖而居，久之，能以足音辨人。軒凡四遭火，得不焚，殆有神護者。&lt;/p&gt;
&lt;p&gt;項脊生曰：「蜀清守丹穴，利甲天下，其後秦皇帝築女懷清臺。劉玄德與曹操爭天下，諸葛孔明起隴中。方二人之昧昧于一隅也，世何足以知之？余區區處敗屋中，方揚眉瞬目，謂有奇景。人知之者，其謂與埳井之蛙何異！」&lt;/p&gt;
&lt;p&gt;余既為此志，後五年，吾妻來歸，時至軒中，從余問古事，或憑几學書。吾妻歸寧，述諸小妹語曰：「聞姊家有閤子，且何謂閤子也？」其後六年，吾妻死，室壞不修。其後二年，余久臥病無聊，乃使人復葺南閤子，其制稍異於前。然自後余多在外，不常居。&lt;/p&gt;
&lt;p&gt;庭有枇杷樹，吾妻死之年所手植也；今已亭亭如蓋矣。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;晚遊六橋待月記&quot;&gt;晚遊六橋待月記&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：袁宏道&lt;/li&gt;
&lt;li&gt;朝代：明&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;西湖最盛，為春為月。一日之盛，為朝煙，為夕嵐。今歲春雪甚盛，梅花為寒所勒，與杏桃相次開發，尤為奇觀。石篑數為余言：「傅金吾園中梅，張功甫玉照堂故物也，急往觀之。」余時為桃花所戀，竟不忍去湖上。&lt;/p&gt;
&lt;p&gt;由斷橋至蘇隄一帶，綠煙紅霧，瀰漫二十餘里。歌吹為風，粉汗為雨，羅紈之盛，多於隄畔之草。豔冶極矣！&lt;/p&gt;
&lt;p&gt;然杭人遊湖，止午、未、申三時。其實湖光染翠之工，山嵐設色之妙，皆在朝日始出，夕舂未下，始極其濃媚。月景尤不可言，花態柳情，山容水意，別是一種趣味。此樂留與山僧遊客受用，安可為俗士道哉！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;原君&quot;&gt;原君&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：黃宗羲 &lt;/li&gt;
&lt;li&gt;朝代：明&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;有生之初，人各自私也，人各自利也。天下有公利而莫或興之，有公害而莫或除之。有人者出，不以一己之利為利，而使天下受其利；不以一己之害為害，而使天下釋其害。此其人之勤勞，必千萬於天下之人。夫以千萬倍之勤勞，而己又不享其利，必非天下之人情所欲居也。故古之人君，量而不欲入者，許由、務光是也；入而又去之者，堯舜是也；初不欲入而不得去者，禹是也。豈古之人有所異哉？好逸惡勞，亦猶夫人之情也。&lt;/p&gt;
&lt;p&gt;後之為人君者不然。以為天下利害之權皆出於我，我以天下之利盡歸於己，以天下之害盡歸於人，亦無不可。使天下之人不敢自私，不敢自利，以我之大私為天下之大公，始而慚焉，久而安焉，視天下為莫大之產業，傳之子孫，受享無窮。漢高帝所謂「某業所就，孰與仲多」者，其逐利之情，不覺溢之於辭矣。&lt;/p&gt;
&lt;p&gt;此無他，古者以天下為主，君為客，凡君之所畢世而經營者，為天下也。今也以君為主，天下為客；凡天下之無地而得安寧者，為君也。是以其未得之也，荼毒天下之肝腦，離散天下之子女，以博我一人之產業，曾不慘然，曰「我固為子孫創業也。」其既得之也，敲剝天下之骨髓，離散天下之子女，以奉我一人之淫樂，視為當然，曰：「此我產業之花息也。」然則為天下之大害者，君而已矣！向使無君，人各得自私也，人各得自利也。鳴呼！豈設君之道固如是乎？&lt;/p&gt;
&lt;p&gt;古者天下之人愛戴其君，比之如父，擬之如天，誠不為過也。今也天下之人怨惡其君，視之如寇仇，名之為獨夫，固其所也。而小儒規規焉以君臣之義無所逃於天地之間，至桀、紂之暴，猶謂湯、武不當誅之，而妄傳伯夷、叔齊無稽之事，使兆人萬姓崩潰之血肉，曾不異夫腐鼠。豈天地之大，於兆人萬姓之中，獨私其一人一姓乎？是故武王，聖人也；孟子之言，聖人之言也。後世之君，欲以如父如天之空名，禁人之窺伺者，皆不便於其言，至廢孟子而不立，非導源於小儒乎？&lt;/p&gt;
&lt;p&gt;雖然，使後之為君者，果能保此產業，傳之無窮，亦無怪乎其私之也。既以產業視之，人之欲得產業，誰不如我？攝緘縢，固扃鐍，一人之智力，不能勝天下欲得之者之眾。遠者數世，近者及身，其血肉之崩潰在其子孫矣。昔人願世世無生帝王家，而毅宗之語公主，亦曰：「若何為生我家？」痛哉斯言！回思創業時，其欲得天下之心，有不廢然摧沮者乎？&lt;/p&gt;
&lt;p&gt;是故明乎為君之職分，則唐虞之世，人人能讓，許由、務光，非絕塵也。不明乎為君之職分，則市井之間，人人可欲，許由、務光，所以曠後世而不聞也。然君之職分難明，以俄頃淫樂，不易無窮之悲，雖愚者亦明之矣！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;廉恥&quot;&gt;廉恥&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：顧炎武 &lt;/li&gt;
&lt;li&gt;朝代：明末清初&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;五代史馮道傳論曰：「『禮、義、廉、恥，國之四維；四維不張，國乃滅亡。』善乎管生之能言也！禮、義，治人之大法；廉、恥，立人之大節。蓋不廉則無所不取，不恥則無所不為。人而如此，則禍敗亂亡，亦無所不至。況為大臣而無所不取，無所不為，則天下其有不亂，國家其有不亡者乎？」&lt;/p&gt;
&lt;p&gt;然而四者之中，恥尤為要，故夫子之論士曰：「行己有恥。」孟子曰：「人不可以無恥。無恥之恥，無恥矣。」又曰：「恥之於人大矣！為機變之巧者，無所用恥焉。」所以然者，人之不廉而至於悖禮犯義，其原皆生於無恥也。故士大夫之無恥，是謂國恥。&lt;/p&gt;
&lt;p&gt;吾觀三代以下，世衰道微，棄禮義，捐廉恥，非一朝一夕之故。然而松柏後凋於歲寒，雞鳴不已於風雨，彼眾昏之日，固未嘗無獨醒之人也。&lt;/p&gt;
&lt;p&gt;頃讀顏氏家訓，有云：「齊朝一士夫，嘗謂吾曰：『我有一兒，年已十七，頗曉書疏。教其鮮卑語及彈琵琶，稍欲通解，以此伏事公卿，無不寵愛。』吾時俯而不答。異哉，此人之教子也！若由此業，自致卿相，亦不願汝曹為之！」嗟呼！之推不得已而仕於亂世，猶為此言，尚有小宛詩人之意；彼閹然媚於世者，能無愧哉！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;勞山道士&quot;&gt;勞山道士&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：蒲松齡&lt;/li&gt;
&lt;li&gt;朝代：清&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;邑有王生，行七，故家子。少慕道，聞勞山多仙人，負笈往游。登一頂，有觀宇甚幽。一道士坐蒲團上，素發垂領，而神光爽邁。叩而與語，理甚玄妙。請師之，道士曰：“恐嬌情不能作苦。”答言：“能之。”其門人甚眾，薄暮畢集，王俱與稽首，遂留觀中。&lt;/p&gt;
&lt;p&gt;凌晨，道士呼王去，授以斧，使隨眾采樵。王謹受教。過月余，手足重繭，不堪其苦，陰有歸志。&lt;/p&gt;
&lt;p&gt;一夕歸，見二人與師共酌，日已暮，尚無燈燭。師乃剪紙如鏡粘壁間，俄頃月明輝室，光鑒毫芒。諸門人環聽奔走。一客曰：“良宵勝樂，不可不同。”乃于案上取酒壺分賚諸徒，且囑盡醉。王自思：七八人，壺酒何能遍給？遂各覓盎盂，競飲先釂，惟恐樽盡，而往復挹注，竟不少減。心奇之。俄一客曰：“蒙賜月明之照，乃爾寂飲，何不呼嫦娥來？”乃以箸擲月中。見一美人自光中出，初不盈尺，至地遂與人等。纖腰秀項，翩翩作“霓裳舞”。已而歌曰：“仙仙乎！而還乎！而幽我于廣寒乎！”其聲清越，烈如簫管。歌畢，盤旋而起，躍登幾上，驚顧之間，已復為箸。三人大笑。又一客曰：“今宵最樂，然不勝酒力矣。其餞我于月宮可乎？”三人移席，漸入月中。眾視三人，坐月中飲，須眉畢見，如影之在鏡中。移時月漸暗，門人燃燭來，則道士獨坐，而客杳矣。幾上肴核尚存；壁上月，紙圓如鏡而已。道士問眾：“飲足乎？”曰：“足矣。”“足，宜早寢，勿誤樵蘇。”眾諾而退。王竊欣慕，歸念遂息。&lt;/p&gt;
&lt;p&gt;又一月，苦不可忍，而道士并不傳教一本。心不能待，辭曰：“弟子數百里受業仙師，縱不能得長生術，或小有傳習，亦可慰求教之心。今閱兩三月，不過早樵而暮歸。弟子在家，未諳此苦。”道士笑曰：“吾固謂不能作苦，今果然。明早當遣汝行。”王曰：“弟子操作多日，師略授小技，此來為不負也。”道士問：“何術之求？”王曰：“每見師行處，墻壁所不能隔，但得此法足矣。”道士笑而允之。乃傳一訣，令自咒畢，呼曰：“入之！”王面墻不敢入。又曰：“試入之。”王果從容入，及墻而阻。道士曰：“俯首輒入，勿逡巡！”王果去墻數步奔而入，及墻，虛若無物，回視，果在墻外矣。大喜，入謝。道士曰：“歸宜潔持，否則不驗。”遂助資斧遣歸。&lt;/p&gt;
&lt;p&gt;抵家，自詡遇仙，堅壁所不能阻，妻不信。王效其作為，去墻數尺，奔而入；頭觸硬壁，驀然而踣。妻扶視之，額上墳起如巨卵焉。妻揶揄之。王漸忿，罵老道士之無良而已。&lt;/p&gt;
&lt;p&gt;異史氏曰：“聞此事，未有不大笑者，而不知世之為王生者正復不少。今有傖父，喜疢毒而畏藥石，遂有舐吮癰痔者，進宣威逞暴之術，以迎其旨，紿之曰：‘執此術也以往，可以橫行而無礙。’初試未嘗不小效，遂謂天下之大，舉可以如是行矣，勢不至觸硬壁而顛蹶不止也。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;左忠毅公軼事&quot;&gt;左忠毅公軼事&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：方苞&lt;/li&gt;
&lt;li&gt;朝代：清&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;先君子嘗言，鄉先輩左忠毅公視學京畿。一日，風雪嚴寒，從數騎出，微行，入古寺。廡下一生伏案臥，文方成草。公閱畢，即解貂覆生，為掩戶，叩之寺僧，則史公可法也。及試，吏呼名，至史公，公瞿然注視。呈卷，即面署第一；召入，使拜夫人，曰：「吾諸兒碌碌，他日繼吾志事，惟此生耳。」&lt;/p&gt;
&lt;p&gt;及左公下廠獄，史朝夕窺獄門外。逆閹防伺甚嚴，雖家僕不得近。久之，聞左公被炮烙，旦夕且死，持五十金，涕泣謀於禁卒，卒感焉。一日使史公更敝衣草屨，背筐，手長鑱，為除不潔者，引入，微指左公處，則席地倚牆而坐，面額焦爛不可辨，左膝以下，筋骨盡脫矣。史前跪，抱公膝而嗚咽。公辨其聲，而目不可開，乃奮臂以指撥眥，目光如炬。怒曰：「庸奴！此何地也，而汝前來！國家之事，糜爛至此。老夫已矣，汝復輕身而昧大義，天下事誰可支拄者！不速去，無俟姦人構陷，吾今即撲殺汝！」因摸地上刑械，作投擲勢。史噤不敢發聲，趨而出。後常流涕述其事以語人曰：「吾師肺肝，皆鐵石所鑄造也！」&lt;/p&gt;
&lt;p&gt;崇禎末，流賊張獻忠出沒蘄、黃、潛、桐間，史公以鳳廬道奉檄守禦，每有警，輒數月不就寢，使將士更休，而自坐幄幕外，擇健卒十人，令二人蹲踞，而背倚之，漏鼓移，則番代。每寒夜起立，振衣裳，甲上冰霜迸落，鏗然有聲。或勸以少休，公曰：「吾上恐負朝廷，下恐愧吾師也。」&lt;/p&gt;
&lt;p&gt;史公治兵，往來桐城，必躬造左公第，候太公、太母起居，拜夫人於堂上。&lt;/p&gt;
&lt;p&gt;余宗老塗山，左公甥也，與先君子善，謂獄中語乃親得之於史公云。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;裨海紀遊選北投硫穴記&quot;&gt;裨海紀遊選(北投硫穴記)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：郁永河&lt;/li&gt;
&lt;li&gt;朝代：清&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;余問番人硫土所產，指茅盧後山麓間。明日，拉顧君偕往，坐莽葛中，命二番兒操楫緣溪入，溪盡為內北社。呼社人為導。&lt;/p&gt;
&lt;p&gt;轉東行半里，入茆棘中。勁茆高丈餘，兩手排之，側體而入。炎日薄茆上，暑氣蒸鬱，覺悶甚。草下一逕，逶沲僅容蛇伏。顧君濟勝有具，與導人行輒前，余與從者後，五步之內，已各不相見，慮或相失，各聽呼應聲為近遠。&lt;/p&gt;
&lt;p&gt;約行二三里，渡雨小溪，皆履而涉。復入深林中，林木蓊翳，大小不可辨名，老藤纏結其上，若虯龍環繞。風過葉落，有大如掌者。又有巨木裂土而出，兩葉如孽，已大十圍，導人謂栴也。栴之始生，己具全體，歲久則堅，終不加大，蓋與竹笋同理，樹上禽聲萬態，耳所創聞，目不得睹其狀，涼風襲肌，幾忘炎暑。&lt;/p&gt;
&lt;p&gt;復越峻坂五六，值大溪，溪廣四五丈，水潺潺巉石間，與石皆作藍靛色。導人謂此水源出硫穴，下是沸泉也。余以一指試之，猶熱甚，扶杖躡巉石渡，更進二三里，林木忽斷，始見前山。又陟一小山顛，覺履底漸熱，視草色萎黃無生意，望前山半麓，白氣縷縷，如山雲乍吐，搖曳青嶂間。導人指曰：「是硫穴也。」風至，硫氣甚惡。&lt;/p&gt;
&lt;p&gt;更進半里，草木不生，地熱如炙。左右兩山多巨石，為磺氣所觸，剝蝕如粉。白氣五十餘道，皆從地底騰激而出，沸珠噴濺，出地尺許。余攬衣即穴旁視之，聞怒雷震蕩地底，而驚濤與沸鼎聲間之，地復岌岌欲動，令人心悸。蓋周廣百畝間，實一大沸鑊，余身乃行鑊蓋上，所賴以不陷者，熱氣鼓之耳。右旁巨石間，一穴獨大，思巨石無陷理，乃即石上俯瞰之。穴中毒焰撲人，目不能視，觸腦欲裂，急退百步乃止。左旁一溪，聲如倒峽，即沸泉所出源也。&lt;/p&gt;
&lt;p&gt;還就深林小憩，循舊路返，衣染硫氣，累日不散，始悟向之倒峽崩崖，轟耳不輟者，是硫穴中沸聲也。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;勸和論&quot;&gt;勸和論&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：鄭用錫&lt;/li&gt;
&lt;li&gt;朝代：清&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;甚矣，人心之變也，自分類始！其禍倡於匪徒，後遂燎原莫遏，玉石俱焚。雖正人君子，亦受其牽制而或朋從之也。&lt;/p&gt;
&lt;p&gt;夫人與禽各為一類、邪與正各為一類，此不可不分。乃同此血氣、同此官骸、同為國家之良民、同為鄉閭之善人，無分士、無分民，即子夏所言四海皆兄弟是也，況當共處一隅？揆諸出入相友之義，古聖賢所謂同鄉共井者也。在字義，友從兩手、朋從兩肉。是朋友如一身左右手，即吾身之肉也。今試執塗人而語之曰：爾其自戕爾手、爾其自噬爾肉，鮮不拂然而怒。何今分類至於此極耶？&lt;/p&gt;
&lt;p&gt;顧分類之害，甚於臺灣。臺屬尤甚於淡之新艋。臺為五方雜處，自林逆倡亂以來，有分為閩、粵焉，有分為漳、泉焉。閩、粵以其異省也，漳、泉以其異府也。然同自內府播遷而來，則同為臺人而已。今以異省、異府苦分畛域，王法在所必誅。矧更同為一府，而亦有秦、越之異，是變本加厲，非奇而又奇者哉？夫人未有不親其所親而能親其所疏。同居一府，猶同室之兄弟，至親也。乃以同室而操戈，更安能由親及疏，而親隔府之漳人、親隔省之粵人乎？淡屬素敦古處，新、艋尤為菁華所聚之區，遊斯土者，嘖嘖稱羨。自分類興，元氣剝削殆盡，未有如去年之甚也！干戈之禍愈烈，村市半成邱墟。問為漳、泉而至此乎？無有也。問為閩、粵而至此乎？無有也。蓋孽由自作，釁起鬩牆，大抵在非漳泉、非閩粵間耳。&lt;/p&gt;
&lt;p&gt;自來物窮必變，慘極知悔。天地有好生之德，人心無不轉之時。予生長是邦，自念士為四民之首，不能與在事諸公竭誠化導，力挽而更張之，滋愧實甚。願今以後，父誡其子、兄告其弟，各革面、各洗心，勿懷夙忿、勿蹈前愆。既親其所親、亦親其所疏，一體同仁，斯內患不生、外禍不至。漳、泉、閩、粵之氣習，默消於無形。譬如人身血脈節節相通，自無他病；數年以後仍成樂土，豈不休哉！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;臺灣通史序&quot;&gt;臺灣通史序&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作者：連橫&lt;/li&gt;
&lt;li&gt;朝代：清&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;台灣固無史也。荷人啟之，鄭氏作之，清代營之，開物成務，以立我丕基，至於今三百有餘年矣。而舊志誤謬，文采不彰，其所記載，僅隸有清一朝；荷人、鄭氏之事，闕而弗錄，竟以島夷海寇視之。烏乎！此非舊史氏之罪歟？且府志重修於乾隆二十九年，臺、鳳、彰、淡諸志，雖有續修，侷促一隅，無關全局，而書又已舊。苟欲以二三陳編而知台灣大勢，是猶以管窺天，以蠡測海，其被囿也亦巨矣。&lt;/p&gt;
&lt;p&gt;夫台灣固海上之荒島爾！蓽路藍縷，以啟山林，至於今是賴。顧自海通以來，西力東漸，運會之趨，莫可阻遏。於是而有英人之役，有美船之役，有法軍之役，外交兵禍，相逼而來，而舊志不及載也。草澤群雄，後先崛起，朱、林以下，輒啟兵戎，喋血山河，藉言恢復，而舊志亦不備載也。續以建省之議，開山撫番，析疆增吏，正經界，籌軍防，興土宜，勵教育，綱舉目張，百事俱作，而台灣氣象一新矣。&lt;/p&gt;
&lt;p&gt;夫史者，民族之精神，而人群之龜鑑也。代之盛衰，俗之文野，政之得失，物之盈虛，均於是乎在。故凡文化之國，未有不重其史者也。古人有言：「國可滅而史不可滅。」是以郢書燕說，猶存其名；晉乘楚杌，語多可採；然則台灣無史，豈非台人之痛歟？&lt;/p&gt;
&lt;p&gt;顧修史固難，修台之史更難，以今日修之尤難，何也？斷簡殘編，蒐羅匪易；郭公夏五，疑信相參；則徵文難。老成凋謝，莫可諮詢；巷議街譚，事多不實；則考獻難。重以改隸之際，兵馬倥傯，檔案俱失；私家收拾，半付祝融，則欲取金匱石室之書，以成風雨名山之業，而有所不可。然及今為之，尚非甚難，若再經十年二十年而後修之，則真有難為者。是台灣三百年來之史，將無以昭示後人，又豈非今日我輩之罪乎？&lt;/p&gt;
&lt;p&gt;橫不敏，昭告神明，發誓述作，兢兢業業，莫敢自遑，遂以十稔之間，撰成台灣通史。為紀四、志二十四、傳六十，凡八十有八篇，表圖附焉。起自隋代，終於割讓，縱橫上下，鉅細靡遺，而台灣文獻於是乎在。&lt;/p&gt;
&lt;p&gt;洪惟我祖先，渡大海，入荒陬，以拓殖斯土，為子孫萬年之業者，其功偉矣！追懷先德，眷顧前途，若涉深淵，彌自儆惕。烏乎！念哉！凡我多士，及我友朋，惟仁惟孝，義勇奉公，以發揚種性；此則不佞之幟也。婆娑之洋，美麗之島，我先王先民之景命，實式憑之。&lt;/p&gt;
&lt;/blockquote&gt;</content>
    <category term="excerpt" />
  </entry>
  <entry>
    <title>對國中生介紹程式設計師這個職業</title>
    <link href="https://fntsr.tw/articles/introduce-the-programmer-for-students-of-junior-high/" />
    <id>https://fntsr.tw/articles/introduce-the-programmer-for-students-of-junior-high/</id>
    <updated>2017-07-07T15:39:43.000Z</updated>
    <published>2017-07-07T15:39:43.000Z</published>
<content type="html">&lt;p&gt;這篇文章是前陣子受到擔任中學教師的朋友邀稿，寫給國中生看的職業專欄。嘗試在有限的篇幅以及制式模板下，盡量以國中生看得懂的描述去介紹這個行業，雖然難免還是會混進許多專有名詞，但朋友說近來因為資訊科技普及，許多學生多少會把這個行業想得太簡單，留點專有名詞，至少讓這些學生知道這行沒有想像中的簡單，好吧，希望不會讓這些小孩一看到這篇文章就直接拿去墊便當了。 XDrz&lt;/p&gt;
&lt;p&gt;既然都寫完了，也就順便發佈到部落格，希望能給對資訊圈有興趣的朋友，簡單了解程式設計圈的產品、專案大概是怎麼劃分、又大概分哪些職責。因為我也沒有真正踏進業界，所以或許有些見解偏離實際狀況，在這邊還請讀者多多見諒。願意幫忙糾正以及想知道其他人給予建議的朋友，可以訪問&lt;a href=&quot;https://docs.google.com/document/d/1KQshU9yCGeGR_pv4RIndJ_VD00RJjvoJHDEFFb2fJFM/edit?usp=sharing&quot;&gt;這篇Google 文件&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。最後感謝 &lt;a href=&quot;https://github.com/freetsubasa&quot;&gt;freetsubasa&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;https://github.com/iblis17&quot;&gt;iblis17&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、michaelnity、&lt;a href=&quot;https://github.com/tjjh89017&quot;&gt;tjjh89017&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;https://github.com/xatier&quot;&gt;xatier&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 在這篇文章編寫時，提供建議與修正。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本篇文章授權台南慈中國中部輔導室使用，並得以不經同意直接修改、發佈在學校的生涯發展專欄中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;隨著智慧型手機普及，資訊科技從庶民化再次突破，跨越了年齡，很直接的走進老少青壯的世界裡，各種琳瑯滿目的手機應用程式融入了我們的生活，各類遊戲也成為學生裡聊不完的話題。&lt;/p&gt;
&lt;p&gt;這些程式背後都是有一群程式設計師進行編寫的，這是個很常聽到，但想去了解才發現被雲霧所包圍的職業。太多形象來自於電影中快速敲打鍵盤，瞬間入侵電腦的駭客，或是動漫畫裡厚重眼鏡盯著電腦的人物。到底程式設計師是一個怎樣的職業？喜歡玩電腦是否就代表適合成為一個程式設計師？我想這也是現代青少年心中免不了的疑惑。&lt;/p&gt;
&lt;h2 id=&quot;簡介定義&quot;&gt;簡介（定義）&lt;/h2&gt;
&lt;p&gt;程式設計師（又稱程式工程師、軟體工程師、開發人員等），其職責主要在於編寫軟體，軟體的定義很廣泛，舉凡在資訊領域，和硬體電路設計、製造無關的，都能算是軟體的範疇。一般人比較常聽到的軟體程式通常是高階應用的部分，像是指直接運行在作業系統（Windows, macOS, Linux, Android, iOS）的應用程式，像是 Office Word&lt;br&gt;
、遊戲軟體、手機 App 等；或是透過瀏覽器（（IE、Chrome、Safari）瀏覽的網站；另外作業系統本身以及與其相關的工具程式，也是軟體一部分，其中當然也包括讓硬體與作業系統溝通的驅動程式等等。除了軟體的編寫外，伺服器維運、資訊硬體設備管理通常也會是程式設計師的工作範圍。&lt;/p&gt;
&lt;p&gt;雖然程式設計師在台灣薪水，相較於其他職業高，且有可能在家工作或是有彈性的工作空間。但是，工時也是比其他職業還要長，甚至需要隨呼隨到（On Call），如果自已負責的程式、軟體發生重大錯誤，加班到天亮或是半夜被叫醒，也都是很正常的事情。雖然在電影中很常看到駭客或是程式設計師以神乎其技的方式達成任務，但那通常都是需要數十年的累積，且以在旁人看起來孤獨、枯燥的方式去自我學習才能趨近這種功力。&lt;/p&gt;
&lt;p&gt;在台灣的就職市場，常因為程式設計很難單純透過視覺展示其成果與背後努力的多寡，導致工作成果被認為廉價或是簡單。與和其他職業溝通也很有著難以跨越的鴻溝，很難和外人分享自己的成果與喜悅。加上時間多用在進修技術上，所以交友也多局限於資訊圈中，&lt;/p&gt;
&lt;h2 id=&quot;特質&quot;&gt;特質&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;充滿好奇與求知慾&lt;/li&gt;
&lt;li&gt;樂於分享知識、參與社群（Community）&lt;/li&gt;
&lt;li&gt;真心熱愛寫程式&lt;/li&gt;
&lt;li&gt;專業主義（Profesionalism）&lt;/li&gt;
&lt;li&gt;謙虛，永遠知道自己所學的還只是冰山一角&lt;/li&gt;
&lt;li&gt;不被既有框架束縛&lt;/li&gt;
&lt;li&gt;追求品質&lt;/li&gt;
&lt;li&gt;駭客文化（Hacker Culture）&lt;/li&gt;
&lt;li&gt;自造文化（Maker Culture）&lt;/li&gt;
&lt;li&gt;開放文化（Open Culture）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;工作內容&quot;&gt;工作內容&lt;/h2&gt;
&lt;p&gt;因為軟體的範疇很廣，所以工作內容也很多元，但觀念上都是以程式設計理論為基礎，只是使用的程式語言（programming language）與框架（framework）不同而已。若要簡單區分，通常會以平台或領域的不同作為劃分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;桌面程式：平時電腦、筆電使用的軟體就是桌面軟體，例如 Microsoft Office。&lt;/li&gt;
&lt;li&gt;手機程式：在手機上的各個 App，就是手機程式。&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;p&gt;&lt;strong&gt;一、規劃&lt;/strong&gt;&lt;br&gt;
主要負責根據軟體需求來去定主要使用的技術、設計系統的主體框架，並負責指導其他程式設計師進行程式碼的開發工作。負責這項職責的通常稱為系統架構師（System Architect）和系統分析師（System Analyst）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、開發&lt;/strong&gt;&lt;br&gt;
程式開發的主力，通常所稱的程式設計師就是泛指負責這項職責的人員，通常稱為開發者（Developer）。開發者根據架構師訂定的系統架構與專案經理（PM）提出的時程規劃和整理好的客戶需求，去開發程式。除了熟悉規格所要求使用的工具——程式語言與框架外，對資訊科學相關的基礎理論也要有所了解，尤其是計算機概論、計算機結構、資料結構、演算法、網路概論等，如此才能夠針對需求做程式設計、並編寫出有效率且少有錯誤的程式。另外設計模式、物件導向、軟體工程等知識，則會增進開發者在程式編寫上的品質與可維護性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、測試、品質控管&lt;/strong&gt;&lt;br&gt;
一套軟體從開發完成到交予使用者前，都需要經過測試，確保程式邏輯正常、軟體的功能有如預期，且不容易發生意料之外的錯誤，進而造成程式停止運作。這邊會特別指有能力根據軟體功能需求去設計一套測試流程的人員，而非遵從流程重複機械性動作去測試一次又一次的勞力。另外測試也分為數個階段，從最單純的驗證程式模組單一功能性的單元測試、到程式組件整合後的整合測試，再來是確認軟體是否符合需求和預期效能的系統測試，以及為了檢驗軟體原有功能在修改後是否保持一致的回歸測試等。負責這項職責的人員通常稱為品質確保（Quality Control，簡稱QC），但近年來開發者通常也要自備簡單的測試能力，尤其是單元測試的設計與編寫自動化測試程式的職責。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四、維運&lt;/strong&gt;&lt;br&gt;
現代的軟體、程式幾乎很難離開網路，舉凡網路服務（線上購物、部落格、Facebook）、雲端軟體（像是 Google Docs、Dropbox）、線上遊戲、可以課金或是和其他人簡單互動的手遊皆是如此，而除了使用者所使用的軟體外，這背後都需要有程式在伺服器接收資訊、運算，並回傳資訊給使用者的軟體。程式除了經由上述四項職責共同生產，建置能讓程式正常運作的環境，則是在正式營運前必須通過的最後一道關卡。其中要考慮的事情很多，包括該程式所相依的其他程式是否已經安裝、版本是否與開發使用的相同、現有的運算資源是否能夠撐起多少人同時訪問（簡單的比喻就是，這款線上遊戲能夠讓多少人同時上線）、能不能簡單快速的將程式部署，且行為模式ㄧ樣等等，這些與維護和營運相關的職責就簡稱維運（Operations，簡稱Ops）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五、資訊安全&lt;/strong&gt;&lt;br&gt;
程式在編寫時，很容易因為開發者的疏忽，或是對該技術的不了解，進而產生漏洞（vulnerabilities）。這些漏洞或許不會造成軟體使用上的困擾或是錯誤，程式照樣能照使用者所預期的進行，但這些漏洞卻會被有心人士利用，成為入侵或破壞的管道。最近很猖狂的勒索病毒 Wanna Cry 就是利用 Windows 作業系統的漏洞進行入侵、感染、並破壞，最後勒索要求還原的贖金。利用這些漏造成危害的人，稱為黑帽駭客（Black Hat）、破壞者（Cracker），相對的，ㄧ樣會去探索軟體是否有漏洞，但是會通報作者或是協助修補的人，則稱為白帽駭客（White Hat）、駭客（Hacker），也就是主要負責資訊安全職責的人員。這部分是另一個專業，也是台灣資訊社群近來正積極投入的領域之一。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;不管程式設計師事負責哪項職責，主要都是從開發者為基礎去延伸的，且由於資訊科技快速的，除了理論上的進步，技術的實作更是推陳出新，各種框架後浪推前浪，如果程式設計師停下學習的腳步，很容易就會被潮流給淘汰。除了原有理論的必須不斷溫故知新外，對技術的掌握更是不能懈怠，也不能故步自封的單純守著自己得職責。像近年由於軟體工程的進步，興起一個名詞稱為 DevOps，主要是將開發、測試、維運串起來，透過自動化「軟體交付」和「架構變更」的流程，來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。也顯示出近年程式設計師不再只單純負責一項職責，對其他職責也必須有所了涉獵、甚至參與。&lt;/p&gt;
&lt;p&gt;上述只是針對職責去闡述工作內容，但要更了解程式設計師，則必須了解其日常生活。由於是靠資訊吃飯的，程式設計師在工作上也幾乎是整天看著電腦，長時間坐在電腦前思考、編寫程式只能算是家常便飯，更甚至會為了某項問題加班甚至通宵。若不是有「想把問題解決不然不罷休」的特質，是很難在這行堅持著，事實上在外行看來覺得枯燥的行為下，對程式設計師而言卻像解謎一樣有趣，儘管樂趣難向外行所言，但是一但把問題解決時的成就感就像是觸碰到世界真理一樣，令人雀躍且滿足。每位程式設計師的心裡頭，都有一個駭客的靈魂，熱衷解決問題，突破限制，並享受電腦按照自己指令按部就班進行的成就感。&lt;/p&gt;
&lt;h2 id=&quot;待遇&quot;&gt;待遇&lt;/h2&gt;
&lt;p&gt;程式設計師的初步待遇依照地區與資歷有所不同，初級程式設計師（Junior）約為28K到50K，資深程式設計師（Senior）約33K到80K，中南部大概都在待遇比較低的區間，北部則是在待遇比較高的區間，尤其是雙北市和中南部的待遇差異甚大。也因為北部職缺多且待遇較好，多數程式設計師都會前往北部尋找工作。&lt;/p&gt;
&lt;p&gt;傳統產業公司的資訊部分對待程式設計師與其他職業差不多。但若是在新創公司或是純軟公司裡，程式設計師通常會得到一個比較好的開發環境，像是公司配給的電腦與週邊設備、提供書籍預算添購所需書籍，有些甚至會提供零食、飲料或是每週一次的下午茶時間，為的就是讓急需專注力的程式設計師能夠心無旁騖地投入到工作中。&lt;/p&gt;
&lt;h2 id=&quot;延伸閱讀&quot;&gt;延伸閱讀&lt;/h2&gt;
&lt;p&gt;這邊提供一些書單，讓有興趣的朋友可以透過這些讀來了解這個行業與其文化。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;賀元著（1995），《資訊遊俠列傳》，臺北市：資訊人文化&lt;/li&gt;
&lt;li&gt;黃志賢等著（1995），《我的電腦探索》，臺北市：資訊人文化&lt;/li&gt;
&lt;li&gt;Daniel Hillis著，林遠志，陳振男譯，《電腦如何思考（The Pattern on The Stone）》，臺北市：天下文化&lt;/li&gt;
&lt;li&gt;Frederick P. Brooks, Jr.著，錢一一譯（2004），《人月神話：軟體專案管理之道》，臺北市：經濟經潮社&lt;/li&gt;
&lt;li&gt;Paul Graham著，莊友欣、莊惠淳譯（2006），《駭客與畫家》，臺北市：碁峰資訊&lt;/li&gt;
&lt;li&gt;Dave Hoover, Adewale Oshineye著，莊弘祥譯（2011），《學徒模式：優秀軟體開發者的養成之路》，臺北市：碁峰資訊&lt;/li&gt;
&lt;li&gt;Steven Levy著，Jedi, Pluto譯（2012），《黑客列傳：電腦革命俠客誌（25週年紀念版）》，臺北市：碁峰資訊&lt;/li&gt;
&lt;li&gt;Robert C. Martin著，陳錦輝譯（2013），《無瑕的程式碼 番外篇：專業程式設計師的生存之道》，臺北市：博碩文化&lt;/li&gt;
&lt;li&gt;夏海公司著，志麻、蔡長弦譯（2011），《奮鬥吧！系統工程師》，臺北市：台灣角川&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>有關 Docker 開源專案改名為 Moby 的相關討論收集</title>
    <link href="https://fntsr.tw/articles/collection-about-why-docker-project-rename-to-moby/" />
    <id>https://fntsr.tw/articles/collection-about-why-docker-project-rename-to-moby/</id>
    <updated>2017-05-09T14:59:44.000Z</updated>
    <published>2017-05-09T14:59:44.000Z</published>
<content type="html">&lt;h2 id=&quot;緣起&quot;&gt;緣起&lt;/h2&gt;
&lt;p&gt;在 2017 年 4 月 18 日的 DockerCon，正式發布了 &lt;a href=&quot;https://mobyproject.org/&quot;&gt;Moby&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 專案，並且將原本在 Github 上的 &lt;code&gt;docker/docker&lt;/code&gt; 倉庫轉移到 &lt;code&gt;moby&lt;/code&gt; 下，變成 &lt;code&gt;moby/moby&lt;/code&gt;，造成開源圈的一陣討論。這篇文章主要是搜集相關報導、評論以及社群對此的討論，方便了解這件事的始末與生態圈對此的看法。&lt;/p&gt;
&lt;p&gt;本篇不是懶人包，不會帶入任何主觀評論，僅提供相關報導和討論串，希望能讓大家對這件事比較有概念。若有其他相關報導或討論沒在本篇裡，也歡迎留言提供，我會再更新上來，感激不盡。&lt;/p&gt;
&lt;h2 id=&quot;關於-moby&quot;&gt;關於 Moby&lt;/h2&gt;
&lt;p&gt;Youtube 影片：DockerCon 介紹 Moby 的影片片段&lt;br&gt;
&lt;/p&gt;&lt;figure class=&quot;youtube-embed&quot;&gt;
  &lt;div class=&quot;youtube-embed-frame&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/hwkqju_BXEo&quot; title=&quot;YouTube video&quot; loading=&quot;lazy&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;
&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/af71adac-2cdd-11e7-805e-b8a7c4b0b1f6 1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/af71adac-2cdd-11e7-805e-b8a7c4b0b1f6 1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;圖：Github &lt;code&gt;moby/moby&lt;/code&gt; Issue &lt;a href=&quot;https://github.com/moby/moby/issues/32867&quot;&gt;#32867&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 中留言提到的圖片&lt;/p&gt;
&lt;h2 id=&quot;報導&quot;&gt;報導&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2017-04-18 &lt;a href=&quot;https://blog.docker.com/2017/04/introducing-the-moby-project/&quot;&gt;Docker Blog –&lt;br&gt;
INTRODUCING MOBY PROJECT: A NEW OPEN-SOURCE PROJECT TO ADVANCE THE SOFTWARE CONTAINERIZATION MOVEMENT&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-18 &lt;a href=&quot;https://thenewstack.io/docker-seeds-two-new-projects-building-containerized-infrastructure/&quot;&gt;THENEWSTACK – Docker Launches LinuxKit and the Moby Project for Building Containerized Infrastructure&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fn-826-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fn-826-2&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-19 &lt;a href=&quot;http://www.ithome.com.tw/news/113525&quot;&gt;iThome – Docker 推出 Linux 容器套件 LinuxKit 與客製化容器專案Moby&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-20 &lt;a href=&quot;http://www.cio.com/article/3191344/linux/why-docker-created-the-moby-project.html&quot;&gt;CIO – Why Docker created the Moby Project&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-21 &lt;a href=&quot;https://www.theregister.co.uk/2017/04/21/docker_renames_open_source_code_moby/&quot;&gt;The Register – Wait, we can explain, says Moby, er, Docker amid rebrand meltdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fn-826-3&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-22 &lt;a href=&quot;https://kknews.cc/tech/vmq3by4.html&quot;&gt;每日頭條 – Docker 改名為 Moby 了嗎？: https://kknews.cc/tech/vmq3by4.html&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kknews.cc/tech/vmq3by4.html&quot;&gt;2017-04-24&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;https://www.chinatt.news/6412767639164158465.html&quot;&gt;中文頭條 – Docker更名Moby，也是無奈之舉&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-25 &lt;a href=&quot;http://blog.fntsr.tw/articles/826/(https://mp.weixin.qq.com/s?__biz=MzA3MTQ1NzE5NQ%3D%3D&amp;#x26;mid=2247483781&amp;#x26;idx=1&amp;#x26;sn=4cbb2ee4f5b832a9b3df6f7dd4e248ba&amp;#x26;chksm=9f2c0141a85b88577a897253a6a828b8139c9655d98e7001e53e5466ac66a24a821d9fb58d34&amp;#x26;mpshare=1&amp;#x26;scene=1)&quot;&gt;开源之道 – Docker 切出 Moby 背后的真实原因分析&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-25 &lt;a href=&quot;https://yq.aliyun.com/articles/74437&quot;&gt;阿里雲 – Docker 改名啦？什么是 Moby Project&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-04-29 &lt;a href=&quot;https://linux.cn/article-8461-1.html?utm_source=rss&amp;#x26;utm_medium=rss&quot;&gt;Linux 中國 – 十分钟带你看遍 DockerCon 2017&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-05-03 &lt;a href=&quot;http://www.infoq.com/cn/news/2017/05/Moby-LinuxKit-Docker&quot;&gt;InfoQ – 全面解读 Moby 和 LinuxKit，Docker 称沟通不善招致误解&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-05-03 &lt;a href=&quot;https://mp.weixin.qq.com/s/Iue0rCGvNHeMIbl1FLOeKg&quot;&gt;“从此社区再无 Docker？” 那 “Moby” 又是什么？&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/Iue0rCGvNHeMIbl1FLOeKg&quot;&gt;2017-05-04&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://www.networkworld.com/article/3193904/open-source-tools/what-is-dockers-moby-project.html&quot;&gt;NETWORKWORLD – What is Docker’s Moby Project?&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2017-05-06 &lt;a href=&quot;http://www.ithome.com.tw/voice/113892&quot;&gt;iThome – 動見觀瞻的 Container 技術發展&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;討論&quot;&gt;討論&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/moby/moby/issues/32867&quot;&gt;Moby Issues: Splitting moby and docker #32867&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/moby/moby/pull/32691&quot;&gt;Moby PR: A new upstream project to break up Docker into independent components #32691&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zhihu.com/question/58805021&quot;&gt;对于 Docker 改名 Moby ，大家怎么看？&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zhihu.com/question/58805021&quot;&gt;簡中譯本：&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://dockone.io/article/2259&quot;&gt;DockOne.io – Docker 发布 LinuxKit和 Moby 项目，剑指组件化容器基础架构&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; by 杨峰 &lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fnref-826-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;簡中譯本：&lt;a href=&quot;https://tw.wxwenku.com/d/100044745&quot;&gt;微文庫 – Docker 重磅發佈：LinuxKit 和 Moby 開源項目&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fnref-826-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;簡中譯本：&lt;a href=&quot;https://sdk.cn/news/6843&quot;&gt;SDK.cn – 别生气，先听我们解释，Docker还在只是改名叫Moby了&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; by 鲁行云 &lt;a href=&quot;http://blog.fntsr.tw/articles/826/#fnref-826-3&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="docker" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：軍事建築通用單位與科技翻譯對照表</title>
    <link href="https://fntsr.tw/articles/aoe-ii-chinese-translation-of-units-and-technology-of-military-building/" />
    <id>https://fntsr.tw/articles/aoe-ii-chinese-translation-of-units-and-technology-of-military-building/</id>
    <updated>2017-05-07T15:27:59.000Z</updated>
    <published>2017-05-07T15:27:59.000Z</published>
<content type="html">&lt;p&gt;本篇主要為世紀帝國 II 各文明在原版、HD、以及 Zoey 的工作坊&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;三種中文翻譯的對照表，也順便在開頭附上本體和各資料片的翻譯對照。本文沒有任何點評和探討，純粹作為資料整理與參考用。日後有時間再另外針對各文明史地做簡單研究與講解。&lt;/p&gt;
&lt;p&gt;表1：軍營（Barracks）通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Militia&lt;/td&gt;&lt;td&gt;民兵&lt;/td&gt;&lt;td&gt;民兵&lt;/td&gt;&lt;td&gt;民兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Man-at-Arms&lt;/td&gt;&lt;td&gt;裝甲步兵&lt;/td&gt;&lt;td&gt;裝甲步兵&lt;/td&gt;&lt;td&gt;劍士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Long Swordsman&lt;/td&gt;&lt;td&gt;長劍兵&lt;/td&gt;&lt;td&gt;長劍兵&lt;/td&gt;&lt;td&gt;長劍士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Two-Handed Swordsman&lt;/td&gt;&lt;td&gt;雙手劍兵&lt;/td&gt;&lt;td&gt;雙手劍兵&lt;/td&gt;&lt;td&gt;雙手劍士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Champion&lt;/td&gt;&lt;td&gt;劍兵勇士&lt;/td&gt;&lt;td&gt;劍兵勇士&lt;/td&gt;&lt;td&gt;冠軍劍士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spearman&lt;/td&gt;&lt;td&gt;槍兵&lt;/td&gt;&lt;td&gt;長槍兵&lt;/td&gt;&lt;td&gt;長槍兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pikeman&lt;/td&gt;&lt;td&gt;重裝長槍兵&lt;/td&gt;&lt;td&gt;重裝長槍兵&lt;/td&gt;&lt;td&gt;長矛兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Halberdier&lt;/td&gt;&lt;td&gt;戟兵&lt;/td&gt;&lt;td&gt;斧槍兵&lt;/td&gt;&lt;td&gt;長戟兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Eagle Scout&lt;/td&gt;&lt;td&gt;鷹斥候&lt;/td&gt;&lt;td&gt;鷹斥候&lt;/td&gt;&lt;td&gt;鷹斥候&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Eagle Warrior&lt;/td&gt;&lt;td&gt;鷹勇士&lt;/td&gt;&lt;td&gt;鷹勇士&lt;/td&gt;&lt;td&gt;鷹勇士&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Elite Eagle Warrior&lt;/td&gt;&lt;td&gt;精銳鷹勇士&lt;/td&gt;&lt;td&gt;精銳鷹勇士&lt;/td&gt;&lt;td&gt;精銳鷹勇士&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tracking&lt;/td&gt;&lt;td&gt;追蹤技術&lt;/td&gt;&lt;td&gt;跟蹤術&lt;/td&gt;&lt;td&gt;追蹤術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Squires&lt;/td&gt;&lt;td&gt;護衛技術&lt;/td&gt;&lt;td&gt;護衛&lt;/td&gt;&lt;td&gt;護衛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Arson&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;縱火&lt;/td&gt;&lt;td&gt;縱火&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表2：射箭場（Archery Range）通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Archer&lt;/td&gt;&lt;td&gt;弓兵&lt;/td&gt;&lt;td&gt;弓兵&lt;/td&gt;&lt;td&gt;步弓手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Crossbowman&lt;/td&gt;&lt;td&gt;弩兵&lt;/td&gt;&lt;td&gt;弩兵&lt;/td&gt;&lt;td&gt;弩手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Arbalest&lt;/td&gt;&lt;td&gt;強弩兵&lt;/td&gt;&lt;td&gt;勁弩兵&lt;/td&gt;&lt;td&gt;勁弩手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Skirmisher&lt;/td&gt;&lt;td&gt;矛兵&lt;/td&gt;&lt;td&gt;戰矛兵&lt;/td&gt;&lt;td&gt;擲矛手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Elite Skirmisher&lt;/td&gt;&lt;td&gt;戰矛兵&lt;/td&gt;&lt;td&gt;精銳戰矛兵&lt;/td&gt;&lt;td&gt;精銳擲矛手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Imperial Skirmisher&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;帝王躑矛手&lt;/td&gt;&lt;td&gt;帝王擲矛手&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cavalry Archer&lt;/td&gt;&lt;td&gt;馬騎弓兵&lt;/td&gt;&lt;td&gt;馬弓騎兵&lt;/td&gt;&lt;td&gt;騎射手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heavy Cavalry Archer&lt;/td&gt;&lt;td&gt;重裝馬騎弓兵&lt;/td&gt;&lt;td&gt;重裝馬弓騎兵&lt;/td&gt;&lt;td&gt;重裝騎射手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hand Cannoneer&lt;/td&gt;&lt;td&gt;火槍兵&lt;/td&gt;&lt;td&gt;手銃兵&lt;/td&gt;&lt;td&gt;火槍手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Slinger&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;投石手&lt;/td&gt;&lt;td&gt;投石手&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Thumb Ring&lt;/td&gt;&lt;td&gt;拇指環&lt;/td&gt;&lt;td&gt;拇指環&lt;/td&gt;&lt;td&gt;扳指&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Parthian Tactics&lt;/td&gt;&lt;td&gt;安息人戰術&lt;/td&gt;&lt;td&gt;帕提亞戰術&lt;/td&gt;&lt;td&gt;帕提亞戰術&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表3： 馬廄（Stable）通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Scout Cavalry&lt;/td&gt;&lt;td&gt;斥候騎兵&lt;/td&gt;&lt;td&gt;斥候騎兵&lt;/td&gt;&lt;td&gt;斥候騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Light Cavalry&lt;/td&gt;&lt;td&gt;輕騎兵&lt;/td&gt;&lt;td&gt;輕騎兵&lt;/td&gt;&lt;td&gt;輕騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hussar&lt;/td&gt;&lt;td&gt;匈牙利輕騎兵&lt;/td&gt;&lt;td&gt;翼騎兵&lt;/td&gt;&lt;td&gt;翼騎兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Knight&lt;/td&gt;&lt;td&gt;騎士&lt;/td&gt;&lt;td&gt;騎士&lt;/td&gt;&lt;td&gt;騎士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cavalier&lt;/td&gt;&lt;td&gt;騎兵&lt;/td&gt;&lt;td&gt;騎兵&lt;/td&gt;&lt;td&gt;重裝騎士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Paladin&lt;/td&gt;&lt;td&gt;遊俠&lt;/td&gt;&lt;td&gt;聖騎士&lt;/td&gt;&lt;td&gt;遊俠&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Camel&lt;/td&gt;&lt;td&gt;駱駝騎兵&lt;/td&gt;&lt;td&gt;駱駝騎兵&lt;/td&gt;&lt;td&gt;駱駝兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heavy Camel&lt;/td&gt;&lt;td&gt;重裝駱駝騎兵&lt;/td&gt;&lt;td&gt;重裝駱駝騎兵&lt;/td&gt;&lt;td&gt;重裝駱駝兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Imperial Camel&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;帝王骆驼兵&lt;/td&gt;&lt;td&gt;帝王駱駝兵&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Battle Elephant&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;矛象伕&lt;/td&gt;&lt;td&gt;象兵&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Elite Battle Elephant&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;精銳矛象伕&lt;/td&gt;&lt;td&gt;精銳象兵&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bloodline&lt;/td&gt;&lt;td&gt;品種&lt;/td&gt;&lt;td&gt;品種&lt;/td&gt;&lt;td&gt;血統&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Husbandry&lt;/td&gt;&lt;td&gt;耕種技術&lt;/td&gt;&lt;td&gt;畜牧培育&lt;/td&gt;&lt;td&gt;畜牧&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表4：攻城器製造所（Siege Workshop）通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Battering Ram&lt;/td&gt;&lt;td&gt;輕型衝撞車&lt;/td&gt;&lt;td&gt;輕型衝車&lt;/td&gt;&lt;td&gt;輕型衝撞車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Capped Ram&lt;/td&gt;&lt;td&gt;裝甲衝撞車&lt;/td&gt;&lt;td&gt;中型衝車&lt;/td&gt;&lt;td&gt;裝甲衝撞車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Siege Ram&lt;/td&gt;&lt;td&gt;重型衝撞車&lt;/td&gt;&lt;td&gt;重型衝車&lt;/td&gt;&lt;td&gt;重型衝撞車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mangonet&lt;/td&gt;&lt;td&gt;輕型投石車&lt;/td&gt;&lt;td&gt;輕型投石車&lt;/td&gt;&lt;td&gt;輕型投石車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Onager&lt;/td&gt;&lt;td&gt;中型投石車&lt;/td&gt;&lt;td&gt;中型投石車&lt;/td&gt;&lt;td&gt;中型投石車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Siege Onager&lt;/td&gt;&lt;td&gt;重型投石車&lt;/td&gt;&lt;td&gt;重型投石車&lt;/td&gt;&lt;td&gt;重型投石車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scorpion&lt;/td&gt;&lt;td&gt;弩砲&lt;/td&gt;&lt;td&gt;弩砲&lt;/td&gt;&lt;td&gt;弩砲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heavy Scorpion&lt;/td&gt;&lt;td&gt;重型弩砲&lt;/td&gt;&lt;td&gt;重型弩砲&lt;/td&gt;&lt;td&gt;重型弩砲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Siege Tower&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;攻程塔&lt;/td&gt;&lt;td&gt;圍城塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bombard Cannon&lt;/td&gt;&lt;td&gt;火炮&lt;/td&gt;&lt;td&gt;手推炮&lt;/td&gt;&lt;td&gt;火炮&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表5：城堡（Castle）通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Petard&lt;/td&gt;&lt;td&gt;炸藥桶&lt;/td&gt;&lt;td&gt;爆破兵&lt;/td&gt;&lt;td&gt;炸藥桶&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Trebuchet&lt;/td&gt;&lt;td&gt;巨型投石器&lt;/td&gt;&lt;td&gt;巨型投石機&lt;/td&gt;&lt;td&gt;巨型投石器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hoarding&lt;/td&gt;&lt;td&gt;圍籬&lt;/td&gt;&lt;td&gt;圍牆&lt;/td&gt;&lt;td&gt;外架式棚樓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sappers&lt;/td&gt;&lt;td&gt;兵工學&lt;/td&gt;&lt;td&gt;工兵&lt;/td&gt;&lt;td&gt;坑道工兵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Conscription&lt;/td&gt;&lt;td&gt;徵兵技術&lt;/td&gt;&lt;td&gt;徵招&lt;/td&gt;&lt;td&gt;徵兵技術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spies / Treason&lt;/td&gt;&lt;td&gt;間諜 / 叛國者&lt;/td&gt;&lt;td&gt;間諜 / 叛徒&lt;/td&gt;&lt;td&gt;間諜 / 叛國者&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;AGE II HD TChinese Zoey’sWork Release Ver5.04&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;鷹勇士系列（Eagle Warrior）是美洲文明通用的特有單位。 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2-2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2-3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;雖然帝王擲矛手（Imperial Skirmisher）是越南的特有單位，但屬於同盟加成的共享單位，越南與其同盟（除了土耳其）皆可訓練。 &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;投石手（Slinger）是印加的特有單位。 &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;駱駝騎兵（Camel]）是中東、非洲、遠東（除日本）文明的特有單位，而帝王駱駝騎兵（Imperial Camel）則是印度（Indians）的特有兵種，但因為其仍為駱駝一系，故在本章翻譯對照表列出。 &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;象兵（Battle Elephant）是東南亞文明通用的特有單位。 &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-6-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 6-2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：經濟建築通用單位與科技翻譯對照表</title>
    <link href="https://fntsr.tw/articles/aoe-ii-chinese-translation-of-units-and-technology-of-economic-building/" />
    <id>https://fntsr.tw/articles/aoe-ii-chinese-translation-of-units-and-technology-of-economic-building/</id>
    <updated>2017-04-19T10:47:41.000Z</updated>
    <published>2017-04-19T10:47:41.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/805/&quot;&gt;世紀帝國 II 系列：經濟建築通用單位與科技翻譯對照表 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;世紀帝國 II 系列：經濟建築通用單位與科技翻譯對照表&lt;br&gt;
AOE II: Chinese Translation of Units and Technology of Economic building&lt;/p&gt;
&lt;p&gt;本篇主要為世紀帝國 II 各文明在原版、HD、以及 Zoey 的工作坊1三種中文翻譯的對照表，也順便在開頭附上本體和各資料片的翻譯對照。本文沒有任何點評和探討，純粹作為資料整理與參考用。日後有時間再另外針對各文明史地做簡單研究與講解。&lt;/p&gt;
&lt;p&gt;表1：城鎮中心通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Villager&lt;/td&gt;&lt;td&gt;村民&lt;/td&gt;&lt;td&gt;村民&lt;/td&gt;&lt;td&gt;村民&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Loom&lt;/td&gt;&lt;td&gt;織布技術&lt;/td&gt;&lt;td&gt;織布機&lt;/td&gt;&lt;td&gt;紡織機&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Town Watch&lt;/td&gt;&lt;td&gt;瞭望技術&lt;/td&gt;&lt;td&gt;城鎮瞭望&lt;/td&gt;&lt;td&gt;城鎮瞭望&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Town Patrot&lt;/td&gt;&lt;td&gt;城鎮巡邏&lt;/td&gt;&lt;td&gt;城鎮巡邏&lt;/td&gt;&lt;td&gt;城鎮巡邏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wheelbarrow&lt;/td&gt;&lt;td&gt;輪軸技術&lt;/td&gt;&lt;td&gt;獨輪手推車&lt;/td&gt;&lt;td&gt;獨輪推車&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hand Cart&lt;/td&gt;&lt;td&gt;手推車&lt;/td&gt;&lt;td&gt;手推車&lt;/td&gt;&lt;td&gt;手推車&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表2：資源採集通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Horse Collar&lt;/td&gt;&lt;td&gt;獸耕技術&lt;/td&gt;&lt;td&gt;馬軛&lt;/td&gt;&lt;td&gt;馬軛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heavy Plow&lt;/td&gt;&lt;td&gt;重型耕犁&lt;/td&gt;&lt;td&gt;重犁&lt;/td&gt;&lt;td&gt;重犁&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Crop Rotation&lt;/td&gt;&lt;td&gt;論耕制度&lt;/td&gt;&lt;td&gt;輪作&lt;/td&gt;&lt;td&gt;輪耕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Double-Bit Axe&lt;/td&gt;&lt;td&gt;雙面斧&lt;/td&gt;&lt;td&gt;雙刃斧&lt;/td&gt;&lt;td&gt;雙刃斧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bow Saw&lt;/td&gt;&lt;td&gt;弓形鋸&lt;/td&gt;&lt;td&gt;弓鋸&lt;/td&gt;&lt;td&gt;弓鋸&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Two-Man Saw&lt;/td&gt;&lt;td&gt;雙人鋸&lt;/td&gt;&lt;td&gt;雙人鋸&lt;/td&gt;&lt;td&gt;雙人鋸&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gold Mining&lt;/td&gt;&lt;td&gt;採金技術&lt;/td&gt;&lt;td&gt;採金法&lt;/td&gt;&lt;td&gt;採金技術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gold Shaft Mining&lt;/td&gt;&lt;td&gt;採金裝置&lt;/td&gt;&lt;td&gt;鑽井採金法&lt;/td&gt;&lt;td&gt;鑽井採金&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stone Mining&lt;/td&gt;&lt;td&gt;採石技術&lt;/td&gt;&lt;td&gt;採石法&lt;/td&gt;&lt;td&gt;採石技術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stone Shaft Mining&lt;/td&gt;&lt;td&gt;採石裝置&lt;/td&gt;&lt;td&gt;鑽井採石法&lt;/td&gt;&lt;td&gt;鑽井採石&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表3：市集通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Trade Cart&lt;/td&gt;&lt;td&gt;貿易車隊&lt;/td&gt;&lt;td&gt;貿易車&lt;/td&gt;&lt;td&gt;貿易車隊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cartography&lt;/td&gt;&lt;td&gt;製圖學&lt;/td&gt;&lt;td&gt;繪圖法&lt;/td&gt;&lt;td&gt;製圖法&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Caravan&lt;/td&gt;&lt;td&gt;商隊&lt;/td&gt;&lt;td&gt;大篷車&lt;/td&gt;&lt;td&gt;大商隊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Coinage&lt;/td&gt;&lt;td&gt;鑄幣術&lt;/td&gt;&lt;td&gt;鑄幣術&lt;/td&gt;&lt;td&gt;鑄幣術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Banking&lt;/td&gt;&lt;td&gt;銀行制度&lt;/td&gt;&lt;td&gt;銀行業&lt;/td&gt;&lt;td&gt;銀行制度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Guilds&lt;/td&gt;&lt;td&gt;公會制度&lt;/td&gt;&lt;td&gt;行會&lt;/td&gt;&lt;td&gt;行會制度&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表4：兵工廠通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Padded Archer Armor&lt;/td&gt;&lt;td&gt;弓兵護甲&lt;/td&gt;&lt;td&gt;射手軟甲&lt;/td&gt;&lt;td&gt;弓兵布甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Leather Archer Armor&lt;/td&gt;&lt;td&gt;弓兵皮甲&lt;/td&gt;&lt;td&gt;射手皮甲&lt;/td&gt;&lt;td&gt;弓兵皮甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ring Archer Armor&lt;/td&gt;&lt;td&gt;弓兵鏈甲&lt;/td&gt;&lt;td&gt;射手鎖甲&lt;/td&gt;&lt;td&gt;弓兵環甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fletching&lt;/td&gt;&lt;td&gt;絕世好箭&lt;/td&gt;&lt;td&gt;箭羽&lt;/td&gt;&lt;td&gt;箭羽&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bodkin Arrow&lt;/td&gt;&lt;td&gt;羽箭&lt;/td&gt;&lt;td&gt;錐子箭&lt;/td&gt;&lt;td&gt;錐狀箭頭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bracer&lt;/td&gt;&lt;td&gt;強力護腕&lt;/td&gt;&lt;td&gt;護腕&lt;/td&gt;&lt;td&gt;護腕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Forging&lt;/td&gt;&lt;td&gt;鍛造技術&lt;/td&gt;&lt;td&gt;鍛造&lt;/td&gt;&lt;td&gt;鍛造&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Iron Casting&lt;/td&gt;&lt;td&gt;鑄鐵技術&lt;/td&gt;&lt;td&gt;鑄鐵&lt;/td&gt;&lt;td&gt;鑄鐵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blast Furnace&lt;/td&gt;&lt;td&gt;鼓風爐&lt;/td&gt;&lt;td&gt;鼓風爐&lt;/td&gt;&lt;td&gt;鼓風爐&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scale Barding Armor&lt;/td&gt;&lt;td&gt;鱗鎧甲&lt;/td&gt;&lt;td&gt;騎兵鱗甲&lt;/td&gt;&lt;td&gt;騎兵鱗甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chain Barding Armor&lt;/td&gt;&lt;td&gt;鏈鎧甲&lt;/td&gt;&lt;td&gt;騎兵鎖甲&lt;/td&gt;&lt;td&gt;騎兵鎖甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Plate Barding Armor&lt;/td&gt;&lt;td&gt;鐵鎧甲&lt;/td&gt;&lt;td&gt;騎兵鋼甲&lt;/td&gt;&lt;td&gt;騎兵板甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scale Mail Armor&lt;/td&gt;&lt;td&gt;鄰甲&lt;/td&gt;&lt;td&gt;步兵鱗甲&lt;/td&gt;&lt;td&gt;步兵鱗甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chain Mail Armor&lt;/td&gt;&lt;td&gt;鏈甲&lt;/td&gt;&lt;td&gt;步兵鎖甲&lt;/td&gt;&lt;td&gt;步兵鎖甲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Plate Mail Armor&lt;/td&gt;&lt;td&gt;版甲&lt;/td&gt;&lt;td&gt;步兵鋼甲&lt;/td&gt;&lt;td&gt;步兵板甲&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表5：學院通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Masonry&lt;/td&gt;&lt;td&gt;磚瓦技術&lt;/td&gt;&lt;td&gt;石匠&lt;/td&gt;&lt;td&gt;磚瓦技術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Architecture&lt;/td&gt;&lt;td&gt;建築學&lt;/td&gt;&lt;td&gt;建築學&lt;/td&gt;&lt;td&gt;建築學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Guard Tower&lt;/td&gt;&lt;td&gt;防禦箭塔&lt;/td&gt;&lt;td&gt;警戒箭塔&lt;/td&gt;&lt;td&gt;防禦箭塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Keep&lt;/td&gt;&lt;td&gt;大型箭塔&lt;/td&gt;&lt;td&gt;大型箭塔&lt;/td&gt;&lt;td&gt;大型箭塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chemistry&lt;/td&gt;&lt;td&gt;化學&lt;/td&gt;&lt;td&gt;化學&lt;/td&gt;&lt;td&gt;化學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bombard Tower&lt;/td&gt;&lt;td&gt;火炮塔&lt;/td&gt;&lt;td&gt;炮塔&lt;/td&gt;&lt;td&gt;火炮塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fortified Wall&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ballistics&lt;/td&gt;&lt;td&gt;彈道學&lt;/td&gt;&lt;td&gt;彈道學&lt;/td&gt;&lt;td&gt;彈道學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heated Shot&lt;/td&gt;&lt;td&gt;火箭&lt;/td&gt;&lt;td&gt;預熱射擊&lt;/td&gt;&lt;td&gt;預熱射擊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Murder Hole&lt;/td&gt;&lt;td&gt;城垛射孔&lt;/td&gt;&lt;td&gt;近射孔&lt;/td&gt;&lt;td&gt;剁底射孔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Treadmill Crane&lt;/td&gt;&lt;td&gt;磨坊水車&lt;/td&gt;&lt;td&gt;腳踏起重機&lt;/td&gt;&lt;td&gt;踏碖起重機&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Siege Engineer&lt;/td&gt;&lt;td&gt;攻城工程師&lt;/td&gt;&lt;td&gt;攻城技師&lt;/td&gt;&lt;td&gt;攻城工程師&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Arrow Slits&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;射箭槽&lt;/td&gt;&lt;td&gt;箭狹槽&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表6：碼頭通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Fish Ship&lt;/td&gt;&lt;td&gt;漁船&lt;/td&gt;&lt;td&gt;漁船&lt;/td&gt;&lt;td&gt;漁船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Transport Ship&lt;/td&gt;&lt;td&gt;運輸船&lt;/td&gt;&lt;td&gt;運輸船&lt;/td&gt;&lt;td&gt;運輸船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Trade Cog&lt;/td&gt;&lt;td&gt;貿易商旅&lt;/td&gt;&lt;td&gt;貿易船&lt;/td&gt;&lt;td&gt;貿易商船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fire Galley&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;火艨艟&lt;/td&gt;&lt;td&gt;火艨艟&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fire Ship&lt;/td&gt;&lt;td&gt;火戰船&lt;/td&gt;&lt;td&gt;噴火船&lt;/td&gt;&lt;td&gt;火戰船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fast Fire Ship&lt;/td&gt;&lt;td&gt;重型火戰船&lt;/td&gt;&lt;td&gt;快速噴火船&lt;/td&gt;&lt;td&gt;快速火戰船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Demolition Raft&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;爆破筏&lt;/td&gt;&lt;td&gt;自爆筏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Demolition Ship&lt;/td&gt;&lt;td&gt;神風船&lt;/td&gt;&lt;td&gt;爆破船&lt;/td&gt;&lt;td&gt;爆破船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heavy Demolition Ship&lt;/td&gt;&lt;td&gt;重型神風船&lt;/td&gt;&lt;td&gt;重型爆破船&lt;/td&gt;&lt;td&gt;重型爆破船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Galley&lt;/td&gt;&lt;td&gt;戰船&lt;/td&gt;&lt;td&gt;箭船&lt;/td&gt;&lt;td&gt;槳帆船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;War Galley&lt;/td&gt;&lt;td&gt;弩砲戰船&lt;/td&gt;&lt;td&gt;戰艦&lt;/td&gt;&lt;td&gt;槳帆戰船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Galleon&lt;/td&gt;&lt;td&gt;重型弩砲戰船&lt;/td&gt;&lt;td&gt;大型戰艦&lt;/td&gt;&lt;td&gt;加利恩帆船&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Careening&lt;/td&gt;&lt;td&gt;航海技術&lt;/td&gt;&lt;td&gt;修船廠&lt;/td&gt;&lt;td&gt;傾側維修術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dry Dock&lt;/td&gt;&lt;td&gt;船塢&lt;/td&gt;&lt;td&gt;乾船塢&lt;/td&gt;&lt;td&gt;旱碼頭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shipwright&lt;/td&gt;&lt;td&gt;造船員&lt;/td&gt;&lt;td&gt;造船匠&lt;/td&gt;&lt;td&gt;造船匠&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gillnets&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;刺網&lt;/td&gt;&lt;td&gt;刺網&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表7：修道院通用單位與科技翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Monk&lt;/td&gt;&lt;td&gt;僧侶&lt;/td&gt;&lt;td&gt;僧侶&lt;/td&gt;&lt;td&gt;僧侶&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Missionary&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;td&gt;傳教士&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Redemption&lt;/td&gt;&lt;td&gt;救贖思想&lt;/td&gt;&lt;td&gt;救贖&lt;/td&gt;&lt;td&gt;信仰救贖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Atonement&lt;/td&gt;&lt;td&gt;贖罪思想&lt;/td&gt;&lt;td&gt;贖罪&lt;/td&gt;&lt;td&gt;贖罪&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Herbal Medicine&lt;/td&gt;&lt;td&gt;草藥治療&lt;/td&gt;&lt;td&gt;草藥&lt;/td&gt;&lt;td&gt;草藥學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Heresy&lt;/td&gt;&lt;td&gt;異端邪說&lt;/td&gt;&lt;td&gt;異教&lt;/td&gt;&lt;td&gt;異端邪說&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sanctity&lt;/td&gt;&lt;td&gt;神聖思想&lt;/td&gt;&lt;td&gt;聖潔&lt;/td&gt;&lt;td&gt;聖潔虔誠&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fervor&lt;/td&gt;&lt;td&gt;宗教狂熱&lt;/td&gt;&lt;td&gt;熱情&lt;/td&gt;&lt;td&gt;宗教狂熱&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Faith&lt;/td&gt;&lt;td&gt;忠誠信仰&lt;/td&gt;&lt;td&gt;信念&lt;/td&gt;&lt;td&gt;忠誠信仰&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Illumination&lt;/td&gt;&lt;td&gt;啟示思想&lt;/td&gt;&lt;td&gt;啟發&lt;/td&gt;&lt;td&gt;啟發教化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Block Printing&lt;/td&gt;&lt;td&gt;印刷技術&lt;/td&gt;&lt;td&gt;雕版印刷術&lt;/td&gt;&lt;td&gt;雕版印刷術&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Theocracy&lt;/td&gt;&lt;td&gt;神權政治&lt;/td&gt;&lt;td&gt;神權&lt;/td&gt;&lt;td&gt;神權統治&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：通用建築翻譯對照表</title>
    <link href="https://fntsr.tw/articles/aoe-ii-chinese-translation-of-common-buildings/" />
    <id>https://fntsr.tw/articles/aoe-ii-chinese-translation-of-common-buildings/</id>
    <updated>2017-04-16T17:02:24.000Z</updated>
    <published>2017-04-16T17:02:24.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/805/&quot;&gt;世紀帝國 II 系列：經濟建築通用單位與科技翻譯對照表 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本篇主要為世紀帝國 II 各文明在原版、HD、以及 Zoey 的工作坊1三種中文翻譯的對照表，也順便在開頭附上本體和各資料片的翻譯對照。本文沒有任何點評和探討，純粹作為資料整理與參考用。日後有時間再另外針對各文明史地做簡單研究與講解。&lt;/p&gt;
&lt;p&gt;表 1：通用經濟建築翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;House&lt;/td&gt;&lt;td&gt;居住房舍&lt;/td&gt;&lt;td&gt;房屋&lt;/td&gt;&lt;td&gt;居住房舍&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mill&lt;/td&gt;&lt;td&gt;磨坊&lt;/td&gt;&lt;td&gt;磨坊&lt;/td&gt;&lt;td&gt;磨坊&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mining Camp&lt;/td&gt;&lt;td&gt;採礦營地&lt;/td&gt;&lt;td&gt;採礦場&lt;/td&gt;&lt;td&gt;採礦營地&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lumber Camp&lt;/td&gt;&lt;td&gt;伐木場&lt;/td&gt;&lt;td&gt;伐木場&lt;/td&gt;&lt;td&gt;伐木廠&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dock&lt;/td&gt;&lt;td&gt;碼頭&lt;/td&gt;&lt;td&gt;船塢&lt;/td&gt;&lt;td&gt;碼頭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Farm&lt;/td&gt;&lt;td&gt;農田&lt;/td&gt;&lt;td&gt;農田&lt;/td&gt;&lt;td&gt;農田&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fish Trap&lt;/td&gt;&lt;td&gt;漁網&lt;/td&gt;&lt;td&gt;養魚場&lt;/td&gt;&lt;td&gt;漁網&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blacksmith&lt;/td&gt;&lt;td&gt;兵工廠&lt;/td&gt;&lt;td&gt;鐵匠鋪&lt;/td&gt;&lt;td&gt;兵工廠&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Market&lt;/td&gt;&lt;td&gt;市集&lt;/td&gt;&lt;td&gt;市場&lt;/td&gt;&lt;td&gt;市集&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MONASTERY&lt;/td&gt;&lt;td&gt;修道院&lt;/td&gt;&lt;td&gt;修道院&lt;/td&gt;&lt;td&gt;修道院&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;University&lt;/td&gt;&lt;td&gt;學院&lt;/td&gt;&lt;td&gt;大學&lt;/td&gt;&lt;td&gt;大學&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Town Center&lt;/td&gt;&lt;td&gt;城鎮中心&lt;/td&gt;&lt;td&gt;城鎮中心&lt;/td&gt;&lt;td&gt;城鎮中心&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wonder&lt;/td&gt;&lt;td&gt;世界奇觀&lt;/td&gt;&lt;td&gt;世界奇觀&lt;/td&gt;&lt;td&gt;世界奇觀&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 2：通用軍事建築翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Barracks&lt;/td&gt;&lt;td&gt;軍營&lt;/td&gt;&lt;td&gt;兵營&lt;/td&gt;&lt;td&gt;軍營&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Archery Range&lt;/td&gt;&lt;td&gt;射箭場&lt;/td&gt;&lt;td&gt;靶場&lt;/td&gt;&lt;td&gt;射箭場&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stable&lt;/td&gt;&lt;td&gt;馬廄&lt;/td&gt;&lt;td&gt;馬廄&lt;/td&gt;&lt;td&gt;馬廄&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Siege Workshop&lt;/td&gt;&lt;td&gt;攻城器製造所&lt;/td&gt;&lt;td&gt;攻城武器廠&lt;/td&gt;&lt;td&gt;攻城器製造所&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Outpost&lt;/td&gt;&lt;td&gt;哨站&lt;/td&gt;&lt;td&gt;哨站&lt;/td&gt;&lt;td&gt;哨站&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Palisade Wall&lt;/td&gt;&lt;td&gt;木牆&lt;/td&gt;&lt;td&gt;木柵欄&lt;/td&gt;&lt;td&gt;木柵欄&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stone Wall&lt;/td&gt;&lt;td&gt;石牆&lt;/td&gt;&lt;td&gt;石牆&lt;/td&gt;&lt;td&gt;石牆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fortified Wall&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;td&gt;垛牆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Palisade Gate&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;木城門&lt;/td&gt;&lt;td&gt;木城門&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gate&lt;/td&gt;&lt;td&gt;城門&lt;/td&gt;&lt;td&gt;城門&lt;/td&gt;&lt;td&gt;城門&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Watch Tower&lt;/td&gt;&lt;td&gt;瞭望台&lt;/td&gt;&lt;td&gt;瞭望箭塔&lt;/td&gt;&lt;td&gt;瞭望箭塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Guard Tower&lt;/td&gt;&lt;td&gt;防禦箭塔&lt;/td&gt;&lt;td&gt;警戒箭塔&lt;/td&gt;&lt;td&gt;防禦箭塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Keep&lt;/td&gt;&lt;td&gt;大型箭塔&lt;/td&gt;&lt;td&gt;大型建塔&lt;/td&gt;&lt;td&gt;大型箭塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bombard Tower&lt;/td&gt;&lt;td&gt;火炮塔&lt;/td&gt;&lt;td&gt;砲塔&lt;/td&gt;&lt;td&gt;火炮塔&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Castle&lt;/td&gt;&lt;td&gt;城堡&lt;/td&gt;&lt;td&gt;城堡&lt;/td&gt;&lt;td&gt;城堡&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：各文明名稱翻譯對照表</title>
    <link href="https://fntsr.tw/articles/aoe-ii-chinese-translation-of-civilizations/" />
    <id>https://fntsr.tw/articles/aoe-ii-chinese-translation-of-civilizations/</id>
    <updated>2017-03-01T00:22:42.000Z</updated>
    <published>2017-03-01T00:22:42.000Z</published>
<content type="html">&lt;p&gt;本篇主要為世紀帝國 II 各文明在原版、HD、以及 Zoey 的工作坊1三種中文翻譯的對照表，也順便在開頭附上本體和各資料片的翻譯對照。本文沒有任何點評和探討，純粹作為資料整理與參考用。日後有時間再另外針對各文明史地做簡單研究與講解。&lt;/p&gt;
&lt;p&gt;表 1：資料片名稱翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Age of Empires&lt;/td&gt;&lt;td&gt;世紀帝國&lt;/td&gt;&lt;td&gt;帝國時代&lt;/td&gt;&lt;td&gt;世紀帝國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Age of Kings&lt;/td&gt;&lt;td&gt;帝王世紀&lt;/td&gt;&lt;td&gt;國王時代&lt;/td&gt;&lt;td&gt;帝王世紀&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The Conquerors&lt;/td&gt;&lt;td&gt;征服者入侵&lt;/td&gt;&lt;td&gt;征服者&lt;/td&gt;&lt;td&gt;征服者入侵&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The Forgotten&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;失落帝國&lt;/td&gt;&lt;td&gt;失落的帝國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The African Kingdoms&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;非洲王國&lt;/td&gt;&lt;td&gt;非洲王國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The Rise of the Rajas&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;蠻王崛起&lt;/td&gt;&lt;td&gt;王者崛起&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 2：Age of Kings 文明翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Britons&lt;/td&gt;&lt;td&gt;不列顛人&lt;/td&gt;&lt;td&gt;不列顛&lt;/td&gt;&lt;td&gt;不列顛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Byzantines&lt;/td&gt;&lt;td&gt;拜占庭人&lt;/td&gt;&lt;td&gt;拜占庭&lt;/td&gt;&lt;td&gt;拜占庭&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Celts&lt;/td&gt;&lt;td&gt;塞爾特人&lt;/td&gt;&lt;td&gt;凱爾特&lt;/td&gt;&lt;td&gt;凱爾特&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chinese&lt;/td&gt;&lt;td&gt;中國人&lt;/td&gt;&lt;td&gt;中國&lt;/td&gt;&lt;td&gt;中國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Franks&lt;/td&gt;&lt;td&gt;法蘭西人&lt;/td&gt;&lt;td&gt;法蘭克&lt;/td&gt;&lt;td&gt;法蘭克&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Goths&lt;/td&gt;&lt;td&gt;哥德人&lt;/td&gt;&lt;td&gt;哥特&lt;/td&gt;&lt;td&gt;哥德&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Japanese&lt;/td&gt;&lt;td&gt;日本人&lt;/td&gt;&lt;td&gt;日本&lt;/td&gt;&lt;td&gt;日本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mongols&lt;/td&gt;&lt;td&gt;蒙古人&lt;/td&gt;&lt;td&gt;蒙古&lt;/td&gt;&lt;td&gt;蒙古&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Persians&lt;/td&gt;&lt;td&gt;波斯人&lt;/td&gt;&lt;td&gt;波斯&lt;/td&gt;&lt;td&gt;波斯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Saracens&lt;/td&gt;&lt;td&gt;薩拉森人&lt;/td&gt;&lt;td&gt;薩拉森&lt;/td&gt;&lt;td&gt;薩拉森&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Teutons&lt;/td&gt;&lt;td&gt;條頓人&lt;/td&gt;&lt;td&gt;條頓&lt;/td&gt;&lt;td&gt;條頓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Turks&lt;/td&gt;&lt;td&gt;土耳其人&lt;/td&gt;&lt;td&gt;土耳其&lt;/td&gt;&lt;td&gt;土耳其&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vikings&lt;/td&gt;&lt;td&gt;維京人&lt;/td&gt;&lt;td&gt;維京&lt;/td&gt;&lt;td&gt;維京&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 3：The Conquerors 文明翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Aztecs&lt;/td&gt;&lt;td&gt;阿茲特克人&lt;/td&gt;&lt;td&gt;阿茲特克&lt;/td&gt;&lt;td&gt;阿茲特克&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Huns&lt;/td&gt;&lt;td&gt;匈奴人&lt;/td&gt;&lt;td&gt;匈奴&lt;/td&gt;&lt;td&gt;匈奴&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Koreans&lt;/td&gt;&lt;td&gt;韓國人&lt;/td&gt;&lt;td&gt;高麗&lt;/td&gt;&lt;td&gt;韓國&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mayans&lt;/td&gt;&lt;td&gt;馬雅人&lt;/td&gt;&lt;td&gt;瑪雅&lt;/td&gt;&lt;td&gt;瑪雅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spanish&lt;/td&gt;&lt;td&gt;西班牙人&lt;/td&gt;&lt;td&gt;西班牙&lt;/td&gt;&lt;td&gt;西班牙&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 4：The Forgotten 文明翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Incas&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;印加&lt;/td&gt;&lt;td&gt;印加&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Indians&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;印度&lt;/td&gt;&lt;td&gt;印度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Italians&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;意大利&lt;/td&gt;&lt;td&gt;義大利&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Magyars&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;馬扎爾&lt;/td&gt;&lt;td&gt;馬扎爾&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Slavs&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;斯拉夫&lt;/td&gt;&lt;td&gt;斯拉夫&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 5：The African Kingdoms 文明翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Berbers&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;柏柏爾&lt;/td&gt;&lt;td&gt;柏柏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ethiopians&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;埃塞爾比亞&lt;/td&gt;&lt;td&gt;衣索比亞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Malians&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;馬里&lt;/td&gt;&lt;td&gt;馬利&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Portuguese&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;葡萄牙&lt;/td&gt;&lt;td&gt;葡萄牙&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表 6：The Rise of the Rajas 文明翻譯對照表&lt;/p&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;HD&lt;/th&gt;&lt;th&gt;工作坊&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Burmese&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;緬甸&lt;/td&gt;&lt;td&gt;緬甸&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Khmer&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;高棉&lt;/td&gt;&lt;td&gt;高棉&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Maley&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;馬來&lt;/td&gt;&lt;td&gt;馬來&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vietnamese&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;越南&lt;/td&gt;&lt;td&gt;越南&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>部落格主題更新</title>
    <link href="https://fntsr.tw/announce/update-blog-theme-on-feb-2017/" />
    <id>https://fntsr.tw/announce/update-blog-theme-on-feb-2017/</id>
    <updated>2017-02-14T22:20:19.000Z</updated>
    <published>2017-02-14T22:20:19.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/745/&quot;&gt;部落格主題更新 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本部落格從 2017-01-31 開始，陸續針對主題（Theme）的程式碼進行重構、除蟲，也稍微更動了版面設計的部分。&lt;/p&gt;
&lt;h2 id=&quot;更新要點&quot;&gt;更新要點&lt;/h2&gt;
&lt;h5 id=&quot;外觀&quot;&gt;外觀&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;更動文章發佈日期的格式。&lt;/li&gt;
&lt;li&gt;更動表格（Table）的樣式風格。&lt;/li&gt;
&lt;li&gt;更動強調（Emphasis）文字的樣式風格。&lt;/li&gt;
&lt;li&gt;更動行內程式碼的樣式風格。&lt;/li&gt;
&lt;li&gt;更動網站頁腳（Foooter）作者文字的樣式風格。&lt;/li&gt;
&lt;li&gt;更動列印頁面時，程式碼區塊的風格樣式。&lt;/li&gt;
&lt;li&gt;新增圖片（Figure）和表格（Table）的標題樣式。&lt;/li&gt;
&lt;li&gt;新增 Facebook 至網站頁腳（Foooter）社交平台選項。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;程式&quot;&gt;程式&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;修復已發布非公開文章會在首頁頭條文章出現的漏洞。&lt;/li&gt;
&lt;li&gt;重構程式碼，將 HTML 與 PHP 邏輯分離。&lt;/li&gt;
&lt;li&gt;重構網站頁腳（Foooter）社交平台引入的程式碼。&lt;/li&gt;
&lt;li&gt;建立主題專用模型（Model）取代直接呼叫 WordPress API。&lt;/li&gt;
&lt;li&gt;更新 Disqus 的引入程式碼。&lt;/li&gt;
&lt;li&gt;更動 Disqus 文章頁面參數的定義。&lt;/li&gt;
&lt;li&gt;更動 Disqus 的引入時機，只有文章屬於公開發布狀態時才會引入 Disqus。&lt;/li&gt;
&lt;li&gt;更動 Disqus ID 的取得方式，由寫死在程式碼中改為從主題的欄位讀取。&lt;/li&gt;
&lt;li&gt;申請新的 Disqus ID ，以分離 Production 和 Development 環境的留言空間。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;文章樣式更動展示&quot;&gt;文章樣式更動展示&lt;/h2&gt;
&lt;h3 id=&quot;文章發佈日期格式&quot;&gt;文章發佈日期格式&lt;/h3&gt;
&lt;p&gt;首頁文章顯示的日期格式原為&lt;code&gt;F j, Y H:i:s&lt;/code&gt;，如「February 14, 2017 02:01:17」、「二月 14, 2017 02:01:17」；文章頁面的顯示日期為&lt;code&gt;Y 年 m 月 j 日&lt;/code&gt;，如「2017 年 02 月 14 日」。現在統一改為由文章模型輸出，格式為&lt;code&gt;Y-m-d H:i:s&lt;/code&gt;，顯示如「2017-02-04 02:01:17」，並在 &lt;code&gt;title&lt;/code&gt; 屬性設置為 &lt;code&gt;Y 年 n 月 j 日 H:i:s&lt;/code&gt;，顯示如「2017 年 2 月 4 日 02:01:17」。&lt;/p&gt;
&lt;h3 id=&quot;表格圖片程式碼&quot;&gt;表格、圖片、程式碼&lt;/h3&gt;
&lt;p&gt;表格標題列的背景色做了調整，由&lt;code&gt;#e0e0e0&lt;/code&gt; 加深至 &lt;code&gt;#cccccc&lt;/code&gt;，並修正偶數列會沒有背景色的錯誤。&lt;/p&gt;
&lt;p&gt;另外新增了如論文寫作圖片與表格會有用來作為編號與說明的標題。但因為本身是使用 Markdown 進行寫作，如果 Markdown 語法包在 HTML 語法中，就會視為一般來說文字，不會轉換成 HTML 標籤。所以這邊利用 CSS 技巧繞果以實現這個功能。只要在圖片、表格、程式碼前分別加入 &lt;code&gt;class&lt;/code&gt; 有 &lt;code&gt;figure&lt;/code&gt;、&lt;code&gt;table&lt;/code&gt; 和 &lt;code&gt;code&lt;/code&gt; 的空 &lt;code&gt;div&lt;/code&gt; 標籤即可達到效果，如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/dsufth2l.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;圖 2-1&lt;/strong&gt;：圖片標題示例&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;表 2-1&lt;/strong&gt;：表格標題示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;原文&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;傳統&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;HD&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;工作坊&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Militia&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Man-at-Arms&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;裝甲步兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;裝甲步兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Long Swordsman&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Two-Handed Swordsman&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Champion&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍兵勇士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;冠軍劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍兵勇士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;程式碼的展示效果請見 2.5 節。&lt;/p&gt;
&lt;h3 id=&quot;強調emphasis文字&quot;&gt;強調（Emphasis）文字&lt;/h3&gt;
&lt;p&gt;在修飾字句的方法上，有分為強調（emphasis）和重點（strong），這兩種方法預設的表現方式為斜體（Italic）和粗體（bold）。&lt;strong&gt;強調&lt;/strong&gt;表示內容的著重點（stress emphasis），通常代表該字句語氣加重，隨著放置的位置不同，可能會改變所在句子的含義。&lt;strong&gt;重點&lt;/strong&gt;用以凸顯內容的重要性（strong importance），且不會改變所在句子的語意。&lt;/p&gt;
&lt;p&gt;而本部落格有採用&lt;a href=&quot;http://css.hanzi.co/&quot;&gt;漢字標準格式&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，所以修飾中文字的強調（emphasis）是使用著重號來呈現。本次更新則稍微更動了顏色，讓樣式風格從黑色調整為深紅色。如下：&lt;/p&gt;
&lt;p&gt;我想_知道_這件事是怎麼發生的？&lt;/p&gt;
&lt;h3 id=&quot;行內程式碼&quot;&gt;行內程式碼&lt;/h3&gt;
&lt;p&gt;原本的行內程式碼是灰底黑字，和一般文字相比較無能明顯辨別不同的特徵，所以在本次更新中，將字體改為紅色，且調淡灰底保持其為程式碼的象徵。如 &lt;code&gt;code&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&quot;列印模式下的程式碼&quot;&gt;列印模式下的程式碼&lt;/h3&gt;
&lt;p&gt;原本並沒有針對這部份做調整，導致本來是暗底亮字的程式碼到了列印後會失去底色，導致顯示不清。這次更新則是將列印模式下的程式碼，採用 Visual Studio 亮底的程式碼高亮風格，也讓過長的程式碼會自動換行。如此更動希望能讓有需要將部落格文章列印或存成 PDF 離線備讀的訪客，在程式碼依然能有良好體驗。可用下方程式碼作為範例：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程式碼 2-1&lt;/strong&gt;：圖片標題程式碼暨程式碼標題示例&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;div class=&quot;figure&quot;&gt;&amp;#x3C;/div&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;![](http://s14.directupload.net/images/141110/dsufth2l.png)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;**圖 3-1**：Militia 示意圖。[&amp;#x3C;來源&gt;][photo of infantry]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;部落格主要是書寫下自己的近況和學習的筆記，能有一個良好的閱讀體驗是我所追求的。利用過年至今得閒餘時間，開始整頓部落格主題，也總算在今天算是告一段落，之後會把這些時間拿來繼續寫文章與筆記。也希望這樣的改變能讓訪客有良好的體驗囉。&lt;/p&gt;</content>
    <category term="markdown" />
    <category term="web" />
    <category term="wordpress" />
  </entry>
  <entry>
    <title>Markdown 表格語法原則</title>
    <link href="https://fntsr.tw/articles/principle-of-markdown-table-syntax/" />
    <id>https://fntsr.tw/articles/principle-of-markdown-table-syntax/</id>
    <updated>2017-02-07T15:01:52.000Z</updated>
    <published>2017-02-07T15:01:52.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/726/&quot;&gt;Markdown 表格語法原則 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;緣起&quot;&gt;緣起&lt;/h2&gt;
&lt;p&gt;儘管 &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 語法中的表格不在最初的標準裡，但近來多數 Markdown 的實作都有擴充產生表格的語法。雖然這些擴充讓使用 Markdown 編寫文章更加多元，不過 Markdown 的表格語法在繪製上仍是有點麻煩，尤其是最近自己許多文章都需要使用表格輔助呈現，不斷的手刻 Markdown 表格實在是很耗費心力與時間，所以就在想說何不自己實作一個 CSV 資料格式和 Markdown Table 語法的轉換器！而在實作轉換器之前，了解 Markdown 主流實作對於 Table 語法的定義就很重要，遂有這篇文章作為實驗筆記與總結。&lt;/p&gt;
&lt;p&gt;本篇文章會以符合下列兩種實作為主：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://michelf.ca/projects/php-markdown/extra/&quot;&gt;PHP Markdown Extra&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;: WordPress Jetpack 採用的實作，也就等於本部落採用的實作。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown&quot;&gt;GitHub Flavored Markdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;: Github 在 Markdown 標準上提出的擴充。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;摘要tldr&quot;&gt;摘要（TL;DR）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Markdown Table 的組成以是否有&lt;strong&gt;標題列&lt;/strong&gt;和&lt;strong&gt;分隔列&lt;/strong&gt;做為判定，資料列的有無不影響其判定。&lt;/li&gt;
&lt;li&gt;表格的欄位數以標題列的欄位數作為基準，有少則補。有多的，PHP 是直接判斷為文字，GFM 則是隱藏。&lt;/li&gt;
&lt;li&gt;分隔列每欄至少要有三個 &lt;code&gt;-&lt;/code&gt; (dash)，可在 &lt;code&gt;-&lt;/code&gt; 的最左最右插入 &lt;code&gt;:&lt;/code&gt; 指定文字對齊方式， &lt;code&gt;:&lt;/code&gt;也算在最少三個 &lt;code&gt;-&lt;/code&gt; 的數量裡。&lt;/li&gt;
&lt;li&gt;欄位以 &lt;code&gt;|&lt;/code&gt; (pipe) 劃分，表格外側可有可不有，但若只有單一欄位，則每欄至少要有一個 &lt;code&gt;|&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;欄位裡，文字與 &lt;code&gt;|&lt;/code&gt; 之間的空白符號對程式來說無意義，但對於編寫者能加強可讀性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;解說與展示&quot;&gt;解說與展示&lt;/h2&gt;
&lt;h3 id=&quot;基本構成&quot;&gt;基本構成&lt;/h3&gt;
&lt;p&gt;標準的 Markdown 表格應該長得像是這樣：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age           | Time  | Food | Gold | Requirement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------|:-----:|-----:| ----:|------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age    | 02:40 |  800 |  200 | Feudal Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age  | 03:30 | 1000 |  800 | Castle Age building x 2    &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顯示結果如下：&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Age&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;Time&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Food&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Gold&lt;/th&gt;&lt;th&gt;Requirement&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Feudal Age&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;02:10&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;500&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;td&gt;Dark Age building x 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Castle Age&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;02:40&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;800&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;200&lt;/td&gt;&lt;td&gt;Feudal Age building x 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Imperial Age&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;03:30&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1000&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;800&lt;/td&gt;&lt;td&gt;Castle Age building x 2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&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;ol&gt;
&lt;li&gt;第一列為標題列&lt;/li&gt;
&lt;li&gt;第二列為分隔列&lt;/li&gt;
&lt;li&gt;第三列與之後都是資料列&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age           | Time  | Food | Gold      &amp;#x3C;--標題列 (必要)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------|-------|------|------     &amp;#x3C;--分隔列 (必要)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age    | 02:10 |  500 |    0      &amp;#x3C;--資料列 (選填)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age    | 02:40 |  800 |  200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age  | 03:30 | 1000 |  800 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;標題列和分隔列是必要存在&lt;/em&gt;，可以沒有資料列，但若沒有標題和分隔列，則不會被視為一個 Makrdown 表格，例如下面幾種都不會被判定為 Markdown 表格：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 錯誤：沒有標題列&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------|:-----:|-----:| ----:|------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age    | 02:40 |  800 |  200 | Feudal Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age  | 03:30 | 1000 |  800 | Castle Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 錯誤：沒有分隔列&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age           | Time  | Food | Gold | Requirement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age    | 02:40 |  800 |  200 | Feudal Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age  | 03:30 | 1000 |  800 | Castle Age building x 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;欄位數量&quot;&gt;欄位數量&lt;/h3&gt;
&lt;p&gt;欄位數量由_標題列的欄位數_決定的。標題列有幾欄，資料列就會顯示幾欄，少的補空，有多的，PHP 是直接判斷為文字，GFM 則是隱藏。。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;State   | Age           | Time  | Food &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;------- | --------------|-------|------|------|------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;More    | Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Conform | Castle Age    | 02:40 |  800 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Less    | Imperial Age&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;State   | Age           | Time  | Food&lt;br&gt;
------- | --------------|-------|------|------|------------------------&lt;br&gt;
More    | Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;br&gt;
Conform | Castle Age    | 02:40 |  800&lt;br&gt;
Less    |&lt;/p&gt;
&lt;h3 id=&quot;水平分隔列&quot;&gt;水平分隔列&lt;/h3&gt;
&lt;p&gt;分隔線列中，每欄的水平分隔符號數量至少要有 3 個，3 個以上無論多寡皆不影響。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正確&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age           | Time  | Food | Gold | Requirement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;------------  | ----  | ---  | ---  | ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age    | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age    | 02:40 |  800 |  200 | Feudal Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age  | 03:30 | 1000 |  800 | Castle Age building x &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;錯誤&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age            | Time  | Food | Gold | Requirement&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;------- -------|-------|---   |  --- | --&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age     | 02:10 |  500 |    0 | Dark Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age     | 02:40 |  800 |  200 | Feudal Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age   | 03:30 | 1000 |  800 | Castle Age building x 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;第一欄被空白中斷                          第五欄少於三個。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;文字對齊&quot;&gt;文字對齊&lt;/h3&gt;
&lt;p&gt;預設的文字對齊方式是標題列置中，資料列靠左。若要改變對其方式可以在分隔列的各欄位插入 &lt;code&gt;:&lt;/code&gt; 作為文字位置的指示符號。在分隔符號 &lt;code&gt;-&lt;/code&gt; 最左插入 &lt;code&gt;:&lt;/code&gt; 就是靠左，若是在最右插入就是靠右，若兩邊都有就是置中，並且會一併套用在標題列和資料列。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Default    | Left       | Center     | Right&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-----------| :--------- | :--------: | ---------: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         x |          x |          x |          x &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;效果如下表：&lt;/p&gt;









&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Default&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Left&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;Center&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Right&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     x |          x |          x |          x &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx&lt;/p&gt;
&lt;p&gt;另外 &lt;code&gt;:&lt;/code&gt; 是可以算進分隔符號最低數量要求的，像是下面的語法是可以正確顯示的：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Default    | Left       | Center     | Right&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---        | :--        | :-:        | --: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         x |          x |          x |          x &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx | xxxxxxxxxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;垂直分隔符號&quot;&gt;垂直分隔符號&lt;/h3&gt;
&lt;p&gt;在 Markdown 裡，是以 &lt;code&gt;|&lt;/code&gt; 作為垂直分隔符號來區分欄位，主要是需要放置在兩欄之間，至於外側的垂直分隔符號可放可不放，但若只有一欄，則每列至少一定要有一個垂直分隔符號。&lt;/p&gt;
&lt;p&gt;下方的範例展示外側垂直分隔線都是正確的。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 外側皆有&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Age           | Time  | Food | Gold |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| ------------  | ----  | ---  | ---  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Feudal Age    | 02:10 |  500 |    0 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Castle Age    | 02:40 |  800 |  200 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Imperial Age  | 03:30 | 1000 |  800 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 左側有、右側沒有&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Age           | Time  | Food | Gold &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| ------------  | ----  | ---  | ---  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Feudal Age    | 02:10 |  500 |    0 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Castle Age    | 02:40 |  800 |  200 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Imperial Age  | 03:30 | 1000 |  800 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 右側有、左側沒有&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age             | Time  | Food | Gold |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------- | ----  | ---  | ---  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age      | 02:10 |  500 |    0 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age      | 02:40 |  800 |  200 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age    | 03:30 | 1000 |  800 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 兩側皆無&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age             | Time  | Food | Gold &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------- | ----  | ---  | ---  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age      | 02:10 |  500 |    0 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age      | 02:40 |  800 |  200 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age    | 03:30 | 1000 |  800 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 外側時有時無&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Age           | Time  | Food | Gold&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| ------------  | ----  | ---  | ---  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Feudal Age    | 02:10 |  500 |    0 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Castle Age    | 02:40 |  800 |  200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Imperial Age  | 03:30 | 1000 |  800&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;空白不影響排版&quot;&gt;空白不影響排版&lt;/h3&gt;
&lt;p&gt;使用空白排版 Markdown 表格的好處是讓編寫者好懂，但對於程式來說有沒有空白都不影響程式的判讀。下面兩種表表格顯示的結果是一樣的：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 有用空白排版&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age             | Time  | Food | Gold &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--------------- | ----  | ---  | ---  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age      | 02:10 |  500 |    0 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age      | 02:40 |  800 |  200 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age    | 03:30 | 1000 |  800 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 沒有用空白排版&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Age|Time|Food|Gold &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---|---|---|---  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Feudal Age|02:10|500|0 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Castle Age|02:40|800|00 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Imperial Age|03:30|1000|800 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;總結&quot;&gt;總結&lt;/h2&gt;
&lt;p&gt;有了這些語法的認知，就可以開始著手寫轉換工具了。比較麻煩的部分大概是在垂直分隔符號的彈性導致判讀欄位需要多花點心思吧。&lt;/p&gt;
&lt;p&gt;個人比較喜歡的排版方式大致是外側無垂直分隔符號，垂直分隔符號與文字中間至少隔一個空白，並且排版成每列欄位等寬。比較細節的部分大概就是會將文字靠左，數字與時間靠右。&lt;/p&gt;
&lt;p&gt;整體來說也就是本文最上面語法展示那樣。所以可能比較難在現成的套件庫裡找到完全符合我的需求，這也就是我為什麼打算自己手刻的原因囉。&lt;/p&gt;
&lt;p&gt;最後希望這篇文章能幫助讀者對於 Markdown Table 語法細節的認知。&lt;/p&gt;</content>
    <category term="markdown" />
  </entry>
  <entry>
    <title>正規表達式符號速查表</title>
    <link href="https://fntsr.tw/articles/regular-expression-cheatsheet/" />
    <id>https://fntsr.tw/articles/regular-expression-cheatsheet/</id>
    <updated>2017-02-05T01:38:22.000Z</updated>
    <published>2017-02-05T01:38:22.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/694/&quot;&gt;正規表達式符號速查表 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;正規表達式符號速查表&quot;&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/694/&quot;&gt;正規表達式符號速查表&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;/h2&gt;
&lt;h2 id=&quot;regular-expression-cheatsheet&quot;&gt;Regular Expression Cheatsheet &lt;/h2&gt;
&lt;p&gt;正規表達式（Repgular Expression）是一個很好用的技能，雖然很常用，但有時候會一時忘記想要功能的符號是什麼，所以寫了篇速查用的整理筆記，幫助自己需要時可以回來查詢。尤其是最近有考慮幫助《世紀帝國 II》的隨機地圖腳本在本部落格呈現時，有程式碼高亮的風格，所以有在研究如何編寫 highlight.js 的語言擴充，就很常用到正規表達式，這也是寫這篇的主要原因。&lt;/p&gt;
&lt;p&gt;請注意，本篇不是正規表達式的教學。&lt;/p&gt;
&lt;h2 id=&quot;限制符&quot;&gt;限制符&lt;/h2&gt;
&lt;p&gt;通常前面會接 1 字元（Character）或匹配模式（Pattern），這裡以 &lt;code&gt;x&lt;/code&gt; 代稱。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x?&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 0 ~ 1 次&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x*&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 0 ~ N 次 [^1]&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x+&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 1 ~ N 次 [^1]&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x{n}&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;確定符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; n 次&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x{n,}&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;至少符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; n 次&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x{n,m}&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; n ~ m 次&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;特殊符號&quot;&gt;特殊符號&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;^&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合輸入字串的開始位置，或是單行的開始處&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;$&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合輸入字串的結束位置，或是單行的結尾處&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;?&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;非貪婪模式搜尋 [^2]&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\b&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個單詞邊界 [^3]&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\B&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合非單詞邊界&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;匹配模式&quot;&gt;匹配模式&lt;/h2&gt;
&lt;p&gt;這邊以 &lt;code&gt;x&lt;/code&gt;、&lt;code&gt;y&lt;/code&gt; 代稱 1 字元（Character）或匹配模式（Pattern）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;紀錄&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;(x)&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 x&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;是&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;(?:x)&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 x&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;否&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x(?=y)&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;正向肯定預查，符合後面接 &amp;#x3C;code&gt;y&amp;#x3C;/code&gt; 的 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;否&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x(?!y)&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;正向否定預查，符合後面不接 &amp;#x3C;code&gt;y&amp;#x3C;/code&gt; 的 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;否&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;(?&amp;#x26;lt;=x)y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;反向肯定預查，符合前面接 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 的 &amp;#x3C;code&gt;y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;否&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;(?&amp;#x26;lt;!x)y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;反向否定預查，符合後面不接 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 的 &amp;#x3C;code&gt;y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;否&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;自訂字元集合&quot;&gt;自訂字元集合&lt;/h2&gt;
&lt;p&gt;這邊以 &lt;code&gt;x&lt;/code&gt;、&lt;code&gt;y&lt;/code&gt; 代稱 1 字元（Character）或匹配模式（Pattern）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;x|y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合 &amp;#x3C;code&gt;x&amp;#x3C;/code&gt; 或 &amp;#x3C;code&gt;y&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[abc]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;字元集合&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^abc]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;排除型字元集合&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[a-z]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;字元範圍&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^a-z]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;排除型字元範圍。&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;內建可視字元集合&quot;&gt;內建可視字元集合&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;等價&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;.&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;除了 &amp;#x3C;code&gt;\n&amp;#x3C;/code&gt; 以外的任何單字&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^\n]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\d&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;數字字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[0-9]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\D&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;非數字字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^0-9]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\w&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;包括底線的單詞字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[A-Za-z0-9_]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\W&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;任何非單詞字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^A-Za-z0-9_]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;內建空白字元集合&quot;&gt;內建空白字元集合&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;等價&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\s&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;任何空白字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[ \f\n\r\t\v]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\S&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;任何非空白字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[^ \f\n\r\t\v]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\f&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個換頁符&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[\x0c\cL]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\n&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個換行符&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[\x0a\cJ]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\r&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個 Enter 符&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[\x0d\cM]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\t&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個制表符&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[\x09\cI]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\v&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;符合一個垂直制表符&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;[\x0b\cK]&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;特殊字元&quot;&gt;特殊字元&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;符號&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;說明&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;等價&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;轉譯字元&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;code&gt;\cX&amp;#x3C;/code&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;控制字元，X 為 A-Z。也就是 Ctrl + [A-Z] 的意思&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;這邊的 N 表示為自然數、正整數。 &lt;/li&gt;
&lt;li&gt;非貪婪模式儘可能少的符合所搜尋的字串。 &lt;/li&gt;
&lt;li&gt;也就是指單詞和空格間的位置&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="regexp" />
  </entry>
  <entry>
    <title>在 MacOS X 的 Terminal 中，使用指令開啟 Visual Studio Code</title>
    <link href="https://fntsr.tw/articles/run-visual-studio-code-from-terminal-on-mac-os-x/" />
    <id>https://fntsr.tw/articles/run-visual-studio-code-from-terminal-on-mac-os-x/</id>
    <updated>2017-01-30T00:18:18.000Z</updated>
    <published>2017-01-30T00:18:18.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/635/&quot;&gt;在 MacOS X 的 Terminal 中，使用指令開啟 Visual Studio Code - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;在-macos-x-的-terminal-中使用指令開啟-visual-studio-code&quot;&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/635/&quot;&gt;在 MacOS X 的 Terminal 中，使用指令開啟 Visual Studio Code&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;/h2&gt;
&lt;h2 id=&quot;run-visual-studio-code-from-terminal-on-macos-x&quot;&gt;Run Visual Studio Code from Terminal on MacOS X &lt;/h2&gt;
&lt;h2 id=&quot;緣由&quot;&gt;緣由&lt;/h2&gt;
&lt;p&gt;之前使用 Sublime Text 的時候，習慣透過 Terminal 移動當前資料夾，然後再用 &lt;code&gt;subl&lt;/code&gt; 指令去呼叫 Sublime Text，或是開啟當前資料夾為專案，或是開啟特定檔案。在使用 Visual Studio Code 時，也在想是否有類似功能，於是稍微搜尋了一下，結果發現官方已經有提供這項功能，詳細可參考&lt;a href=&quot;https://code.visualstudio.com/docs/setup/mac&quot;&gt;這份文件&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。本篇則簡略紀錄一下如何進行這項需求的設定。&lt;/p&gt;
&lt;h2 id=&quot;方法&quot;&gt;方法&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;開啟 Visual Studio Code。&lt;/li&gt;
&lt;li&gt;開啟「命令選擇區（Command Palette）」。可以透過「檢視」選單，或使用熱鍵 &lt;code&gt;⇧⌘P&lt;/code&gt; 開啟。&lt;/li&gt;
&lt;li&gt;輸入 &lt;code&gt;shell command&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;選擇「殼層命令：在 PATH 中安裝 ‘code’ 命令（Shell Command: Install code command in PATH）」&lt;br&gt;
&lt;a href=&quot;assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2017-01-30-%E4%B8%8A%E5%8D%8812.02.40.png&quot;&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2017-01-30-上午12.02.40.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在指令安裝後，重啟 Terminal。&lt;/li&gt;
&lt;li&gt;在 Terminal 中輸入 &lt;code&gt;code&lt;/code&gt; 即可開啟 Visual Studio Code。&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="editor" />
    <category term="macos" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：《隨機地圖腳本指南》緒論</title>
    <link href="https://fntsr.tw/articles/aoe-ii-random-map-scripting-guide-introduction/" />
    <id>https://fntsr.tw/articles/aoe-ii-random-map-scripting-guide-introduction/</id>
    <updated>2017-01-28T14:59:46.000Z</updated>
    <published>2017-01-28T14:59:46.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/629/&quot;&gt;世紀帝國 II 系列：《隨機地圖腳本指南》緒論 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本文件譯自 &lt;a href=&quot;http://aok.heavengames.com/blacksmith/showprofile.php?author=Bultro&quot;&gt;Bultro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;http://steamcommunity.com/id/zetnus&quot;&gt;Zetnus&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所編寫的&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=ct&amp;#x26;f=28,42485,0,365&quot;&gt;《Updated New RMS Guide (v2.0.0)》，&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;並取得作者同意以標示名稱為翻譯授權。&lt;/p&gt;
&lt;h2 id=&quot;正文&quot;&gt;正文&lt;/h2&gt;
&lt;p&gt;隨機地圖腳本（Random Map Scripts）可以定義一般類型的地圖，像是阿拉伯（Arabia）、波羅的海（Baltic）。&lt;strong&gt;千萬不要&lt;/strong&gt;把隨機地圖（random map）和劇情（scenario）搞混：隨機地圖在每一場遊戲看起來都不同，而且&lt;strong&gt;不能&lt;/strong&gt;使用劇情編輯器去設計。&lt;/p&gt;
&lt;p&gt;「標準隨機地圖腳本」位在遊戲的 &lt;code&gt;DOCS&lt;/code&gt; 子資料夾[^1]，雖然它有講述細節，但裡面卻有非常多的缺失和錯誤。隨機地圖必須以純文字格式檔案作儲存，並且以 &lt;code&gt;.RMS&lt;/code&gt; 為副檔名[^2]、名稱全長不得超過 20 字元。雖然超過長度的名字在 HD 版中不會造成遊戲崩潰，但會造成在遊戲中只看得到前面部分的名稱[^3]。你可以透過任何文字編輯器編寫腳本，像是 Notepad / Notepad++ 或是 Word，只要記得透過「另存新檔」去設置檔案類型為「所有檔案 (&lt;em&gt;.&lt;/em&gt;)」或是純文字格式。你也可以透過本文件 5.2 節（5.2. Editors and Generators）所提到的任一隨機地圖腳本編輯器或產生器進行編寫。透過這些編輯器程式碼高亮的功能可以幫助你減少錯字！&lt;/p&gt;
&lt;p&gt;在原版裡，腳本必須放在 &lt;code&gt;Random&lt;/code&gt; 的子資料夾。在 HD 版，資料夾則改到 &lt;code&gt;resources\_common\random-map-scripts&lt;/code&gt;。腳本會在多人連線時，傳送給其他玩家。但如果你有一個使用相同名稱的新版腳本，其他玩家必須手動刪除舊版的檔案。&lt;/p&gt;
&lt;p&gt;你必須讓大家知道你的地圖是否適用於單人遊戲，因為遊戲通常不會去區別。只要地圖不要太奇特，電腦 AI 通常可以在自製地圖中玩得很好。請記得電腦 AI 需要以下元素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要廣闊的建築空間&lt;/li&gt;
&lt;li&gt;可以簡單地取得所有類型的資源&lt;/li&gt;
&lt;li&gt;他們不會透過運輸船去運送村民&lt;/li&gt;
&lt;li&gt;他們不會援助中立單位 &lt;a href=&quot;http://blog.fntsr.tw/articles/629/#fn-629-%E4%B8%AD%E7%AB%8B%E5%96%AE%E4%BD%8D&quot;&gt;4&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;這邊指的是官方原版文件。 &lt;/li&gt;
&lt;li&gt;大小寫不分，但通常還是以小寫 &lt;code&gt;*.rms&lt;/code&gt; 為主。 &lt;/li&gt;
&lt;li&gt;在 HD 版中若以中文命名，會完全看不到名稱。 &lt;/li&gt;
&lt;li&gt;只有玩家接觸到中立單位，中立單位才會轉換陣營，若是電腦 AI 接觸則會保持中立。&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：在翻譯《隨機地圖腳本指南》之前</title>
    <link href="https://fntsr.tw/articles/aoe-ii-before-translate-random-map-scripting-guide/" />
    <id>https://fntsr.tw/articles/aoe-ii-before-translate-random-map-scripting-guide/</id>
    <updated>2017-01-24T11:09:53.000Z</updated>
    <published>2017-01-24T11:09:53.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/619/&quot;&gt;世紀帝國 II 系列：在翻譯《隨機地圖腳本指南》之前 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/01/18/aoe2-barracks-units-translation/&quot;&gt;〈世紀帝國 II 系列：軍營單位翻譯探討〉&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;一文中，有提到最近在研究隨機地圖產生腳本的編寫，其中對腳本格式的了解來自於 &lt;a href=&quot;http://aok.heavengames.com/blacksmith/showprofile.php?author=Bultro&quot;&gt;Bultro&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;http://steamcommunity.com/id/zetnus&quot;&gt;Zetnus&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 所編寫的&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=ct&amp;#x26;f=28,42485,0,365&quot;&gt;《UPDATED NEW RANDOM MAP SCRIPTING GUIDE》&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;（後簡稱本文件）。最近也寫信詢問 Zetnus 是否能將文件翻譯成中文，目前也得到授權了，打算在近日開始動工，先以章節為單位依序翻譯並且發表在部落格上，並依照授權條件附上原文手冊的連結與作者名稱。等所有章節翻譯完成後，再編輯成一份完整的 PDF 文件釋出。&lt;/p&gt;
&lt;p&gt;在張貼在部落格上時，除了譯文外，我也會在同一篇文章的下面附上筆記、整理表格、補充等，不會完全只有譯文。未來在整合成 PDF 檔案時，則會完全依照原文的方式做排版。&lt;/p&gt;
&lt;p&gt;本文件的目錄如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0. Introduction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Language Reference&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    1.1. Scheme of a RMS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    1.2. Command Descriptions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    1.3. General Syntax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Terrains &amp;#x26; Objects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    2.1. Terrains&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    2.2. Player Objects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    2.3. Gaia Objects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    2.4. AoF and AK Objects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Testing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Example Script&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5. Links and Resources&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本文件會在 Introduction 講述劇情和隨機地圖腳本上簡單的差異、如何編輯腳本、腳本放置的位置、以及設計腳本應該遵循的幾大原則。在第一章 Language Reference 則是專注講述關於腳本的格式、指令和語法；第二章 Terrains &amp;#x26; Objects 則是講述地形和單位物件，多是以表格呈現物件名稱與其序號：第三章 Testing 則是講述如何測試自己寫的腳本；第四章 Example Script 則是提供一個範例，並附上註解說明；最後第五章 Links and Resources 附上關於本文件和 RMS 的相關連結與資源。&lt;/p&gt;
&lt;p&gt;未來有關翻譯上的一些附註，我也會補充到&lt;a href=&quot;https://blog.fntsr.tw/articles/2017/09/24/aoe-ii-annotation-of-rmsg-translation/&quot;&gt;〈《隨機地圖腳本指南》翻譯說明〉。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content>
    <category term="aoe" />
    <category term="random-map-script" />
    <category term="rmsg" />
    <category term="translation" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：時代升級所需時間</title>
    <link href="https://fntsr.tw/articles/aoe-ii-time-of-upgrade-ages/" />
    <id>https://fntsr.tw/articles/aoe-ii-time-of-upgrade-ages/</id>
    <updated>2017-01-23T16:49:49.000Z</updated>
    <published>2017-01-23T16:49:49.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/613/&quot;&gt;世紀帝國 II 系列：時代升級所需時間 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;網路上多是描述幾分點擊封建、幾分要升上城堡時代，倒是沒特別說升級時代需要多少時間。所以在這邊簡短紀錄一下。&lt;/p&gt;
&lt;h2 id=&quot;一般文明&quot;&gt;一般文明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;升級封建時代：2 分 10 秒&lt;/li&gt;
&lt;li&gt;升級城堡時代：2 分 40 秒&lt;/li&gt;
&lt;li&gt;升級帝王時代：3 分 10 秒&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以若要在 18 分以前升上城堡時代，大約 15:20 前就要點升級了。另外在主流的 N + 2 打法，也就是升上封建後，訓練兩隻村民再升城堡，中間的時間就拿來建造需要升級城堡時代的兩棟建築物，訓練一隻村民需要 25 秒，所以這中間大約就是 50 秒的時間，那也就是說需要 14:30 升上封建時代，再往前推就是 11:20 前要點升級封建時代。整體算下來來從點擊升級封建時代到升級完城堡時代所需的時間約 5 分 40 秒，如果要在 16 分升城，那最慢就是要在 10:20 要有辦法點升封了。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;升城所需時間 = 130 + 25 * 2 + 160 = 340 (秒)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;要在 14:00 升上城堡，需在 08:20 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 15:00 升上城堡，需在 09:20 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 16:00 升上城堡，需在 10:20 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 17:00 升上城堡，需在 11:20 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 18:00 升上城堡，需在 12:20 時點擊封建時代&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以要做升城練習的第一步，就是想辦法在你需要點擊封建時代的那個時間點，訓練出 N 隻村民，並擁有 500 食物了。&lt;/p&gt;
&lt;h2 id=&quot;馬來西亞&quot;&gt;馬來西亞&lt;/h2&gt;
&lt;p&gt;馬來西亞的種族特性為「Advancing to Ages takes only 60% of the usual time」，字面上的意思就是他在升級時代的速度，只需正常時間的 60%。[^1]&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;馬來西亞升級時代所需時間 = 原本升級所需時間 * 0.6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;升級封建時代：1 分 18 秒 (快 52 秒)&lt;/li&gt;
&lt;li&gt;升級城堡時代：1 分 36 秒 (快 64 秒，累計快 116 秒)&lt;/li&gt;
&lt;li&gt;升級帝王時代：1 分 54 秒 (快 76 秒，累計快 192 秒)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;承上面 N+2 打法的公式，整體算下來，馬來西亞從點擊升級封建時代到升級完城堡時代所需的時間約 3 分 44 秒。如果要在 16 分升城，那最慢只要在 12:16 秒有辦法點升封就可以了。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;升城所需時間 = 78 + 25 * 2 + 96 = 224 (秒)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;要在 12:00 升上城堡，需在 08:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 13:00 升上城堡，需在 09:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 14:00 升上城堡，需在 10:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 15:00 升上城堡，需在 11:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 16:00 升上城堡，需在 12:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 17:00 升上城堡，需在 13:16 時點擊封建時代&lt;/li&gt;
&lt;li&gt;要在 18:00 升上城堡，需在 14:16 時點擊封建時代&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;值得注意的是，儘管馬來西亞在升級時代速度上有著顯著的優勢，但在升級時代之間，因為時間變少了，所以採集資源的數量變少了，進而在封建時代時，可能會無法在訓練兩隻村民的 50 秒內，存夠能升城堡的資源量，導致節奏被打亂。因此建議馬來西亞在升級封建時代的時間，可以比平時慢 50 秒，也就是多兩隻村民訓練時間，不但避免經濟卡住，又能增加經濟優勢。最後再利用升城速度的優勢，進行城快攻勢。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[1]: 馬來西亞在種族加成部分，升級時代的加速加成在 &lt;a href=&quot;http://ageofempires.wikia.com/wiki/Malay&quot;&gt;Wikia&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 裡的說明是正確的數據「原本的 60%」，但在遊戲裡科技樹裡似乎還是寫「快 80%」，這個「快 80%」不知是否另有意義，還是純粹數據沒有更新，不得而知。至少敝人實測的結果是「原本的 60%」沒錯。&lt;/p&gt;</content>
    <category term="aoe" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：軍營單位翻譯探討</title>
    <link href="https://fntsr.tw/articles/aoe-ii-barracks-units-translation/" />
    <id>https://fntsr.tw/articles/aoe-ii-barracks-units-translation/</id>
    <updated>2017-01-18T23:35:08.000Z</updated>
    <published>2017-01-18T23:35:08.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/491/&quot;&gt;世紀帝國 II 系列：軍營單位翻譯探討 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這篇文章主要是主要是透過世紀帝國軍營（Barracks）單位的原譯文，搭配當時西方歷史背景，去討論翻譯的精確度以及個人認為更好翻譯。希望能透過這篇文章讓有玩過這款經典遊戲的玩家們莞爾並且對當時的文化有所了解。&lt;/p&gt;
&lt;p&gt;這篇文章我會以劍兵系列、槍兵系列、鷹勇士系列、兵營科技分別討論，其餘可以在兵營生產的特殊兵種例如 Goths（哥德）的 Huskarl（歌德衛隊）和 Italians 的 Condottiero 就留到未來若有寫城堡（Castle）篇時，再進行討論。&lt;/p&gt;
&lt;h2 id=&quot;緣起&quot;&gt;緣起&lt;/h2&gt;
&lt;p&gt;最近世紀帝國 II 出了新資料片《The Rise of the Rajas》，趁著冬季特賣也就回鍋去玩了。途中因為想和友人玩一個沒有狼，資源又跟綠色阿拉伯一樣公平的黑森林地圖，就不小心就跌入了隨機地圖產生腳本的編寫。在學習編鞋時，看英文文件倒不是問題，但對於各單位的英文名稱就顯得陌生，於是想要整理出各單位原文與譯文的對照表。一整理就發現了更有趣的事，除了三種翻譯版本時同時異，再看了原文才發現礙於東西文化差異，有些中文翻譯並沒有把原文的意思很精準地表達出來，在思考原文的意思與查詢相關歷史背景資料下，就不禁越鑽越深，於是有了這篇文章。&lt;/p&gt;
&lt;h2 id=&quot;關於翻譯&quot;&gt;關於翻譯&lt;/h2&gt;
&lt;h3 id=&quot;版本&quot;&gt;版本&lt;/h3&gt;
&lt;p&gt;本文進行比較的中文翻譯有三種版本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;傳統中譯：以前_實體包裝_繁體中文版的翻譯版。&lt;/li&gt;
&lt;li&gt;HD 中譯：現在 Steam 上 _HD 版本_官方提供的簡體中文的翻譯版&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-HD%E7%84%A1%E7%B9%81%E4%B8%AD&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;工作坊中譯：&lt;a href=&quot;http://steamcommunity.com/id/ZoeyHsieh&quot;&gt;Zoey&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 在 Steam HD 版本的_工作坊_提供的&lt;a href=&quot;http://steamcommunity.com/sharedfiles/filedetails/?id=466768643&quot;&gt;繁體中文化插件&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;的翻譯版。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;傳統中譯&lt;/strong&gt;是多數人，尤其是早期玩家特別熟悉的版本。後來微軟於 2013 年時，在 Steam 上面推出 &lt;strong&gt;HD 版&lt;/strong&gt;，此時就只有提供簡體中文了，翻譯上也和傳統中譯有些出入。後來 &lt;a href=&quot;http://steamcommunity.com/id/ZoeyHsieh&quot;&gt;Zoey&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 針對 HD 版再作進一步的繁體中文化，並聲稱不會按照傳統中譯，而會再經過一些調整，所以也就成為另一個翻譯版本。&lt;/p&gt;
&lt;h3 id=&quot;註解&quot;&gt;註解&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;本文會盡量用原文去稱呼翻譯有爭議或未定論的名詞。&lt;/li&gt;
&lt;li&gt;若內文有提到「騎士」，即為 knight 的翻譯，專指遵從騎士精神、效忠領主、屬於貴族階級底層的軍人。若提到「騎兵」，即為 cavalryman，泛指有坐騎的兵種。這邊比較容易搞混，所以特此註解。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;swordsman劍兵系列&quot;&gt;Swordsman（劍兵系列）&lt;/h2&gt;
&lt;p&gt;劍兵，需要 60 食物和 20 黃金。通常會出的都是步兵強國，作為打擊建築物的主力之一。劍兵共分五個階級，每升一個時代可以進階一個，到了帝王則有兩個。這邊翻譯比較值得玩味的大概就是 Man-at-Arms 和 Champion。三種中文翻譯版與原文的對照表可參照&lt;strong&gt;表 3-1&lt;/strong&gt;。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;table&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;原文&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;傳統&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;HD&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;th&gt;工作坊&amp;#x3C;/th&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/thead&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Militia&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;民兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Man-at-Arms&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;裝甲步兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;裝甲步兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Long Swordsman&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;長劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Two-Handed Swordsman&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;雙手劍兵&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;Champion&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍兵勇士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;冠軍劍士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;td&gt;劍兵勇士&amp;#x3C;/td&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/tbody&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;表 3-1&lt;/strong&gt;：劍兵系列原譯文對照表&lt;/p&gt;
&lt;h3 id=&quot;militia&quot;&gt;Militia&lt;/h3&gt;
&lt;p&gt;Militia 翻成民兵比較沒有爭議，三個版本都是這樣翻，且該單字本來也就是民兵的意思。民兵通常是指有受過簡單的軍事訓練，但非專業的士兵，在中世紀多為履行封建義務徵召而來的農民組成的隊伍。比較有趣的是，似乎在反應民兵的非專業性或是烏合之眾的特色，如&lt;strong&gt;圖 3-1&lt;/strong&gt;，遊戲裡民兵是拿著木製狼牙棒，和之後晉升階級都是拿劍有著明顯的不同。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/dsufth2l.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-1&lt;/strong&gt;：Militia 示意圖。&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=st&amp;#x26;fn=9&amp;#x26;tn=43899&amp;#x26;f=,,,&amp;#x26;st=280&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;man-at-arms&quot;&gt;Man-at-Arms&lt;/h3&gt;
&lt;p&gt;原以為 Man-at-Arms 是世紀帝國創造的單字組合，經友人指正後，才知道原本就有這個字詞。&lt;a href=&quot;https://en.wikipedia.org/wiki/Man-at-arms&quot;&gt;Wikipedia&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;給出的形容是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A man-at-arms was a soldier from the High Medieval to Renaissance periods who was typically well-versed in the use of arms and served as a fully armoured heavy cavalryman. A man-at-arms could be a knight or nobleman, a member of a knight or nobleman’s retinue or a mercenary in a company under a mercenary captain. Such men could serve for pay or through a feudal obligation. The terms knight and man-at-arms are often used interchangeably, but while all knights equipped for war certainly were men-at-arms, not all men-at-arms were knights.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;這段大意是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Man-at-Arms 是一種從中世紀到文藝復興時期的士兵。專指精通武器的使用，並且披全套盔甲的重騎兵。可能是由騎士、貴族擔任、也可能是他們的侍從、或是同個指揮系統下的雇傭軍。通常 man-at-arms 和 knight 這兩個詞會互換使用，不過儘管所有為戰爭準備好的 knights 都可以稱為 man-at-arms，但是 man-at-arms 不一定都是 knight。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;雖然文中說 Man-at-arms 是重騎兵（heavy cavalryman），但遊戲中卻是把它當作步兵兵種。在想這可能是取自 Man-at-Arms 有「武裝起來的人」之意，或是有其他想法，遊戲公司怎麼想就不得而知了。至少遊戲在繪製上保有武裝的意思，多了盔甲、盾牌和一把劍，如&lt;strong&gt;圖 3-2&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;從原意大概就能了解為何傳統和工作坊的版本會翻成「裝甲步兵」。不過比較矛盾的是，僅管 Man-at-arms 是身著重裝的戰士，但是在遊戲裡，Militia 和 Man-at-Arms 之間，&lt;em&gt;裝甲值是沒有差異的&lt;/em&gt;，都是&lt;code&gt;0/1&lt;/code&gt;，兩者的差距在於 Man-at-Arms 多了 &lt;em&gt;2 點攻擊力和 5 點生命&lt;/em&gt;，我想這可能就是為什麼 HD 是直接翻譯成「劍士」的原因。&lt;/p&gt;
&lt;p&gt;兩者沒有絕對的對錯，只是兩者強調的特色不太一樣，「裝甲步兵」比較強調厚重的盔甲，「劍士」比較強調武裝這件事。但就遊戲的屬性質差異而言，裝甲步兵可能會有種防禦變高的誤解，而劍士就比較有對應到遊戲屬性的差異，所以這邊比較支持「劍士」的翻法。又，為了配合後面的進階兵種的名稱一致性，個人比較偏好翻成「劍兵」，至於為什麼是採用「兵」而不是「士」，將在下面提到。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/qf7dygb8.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-2&lt;/strong&gt;：Man-at-Arms 示意圖。&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=st&amp;#x26;fn=9&amp;#x26;tn=43899&amp;#x26;f=,,,&amp;#x26;st=280&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;long-swordsman&quot;&gt;Long Swordsman&lt;/h3&gt;
&lt;p&gt;Long Swordsman 在翻譯上比較沒有問題，三個版本的差異主要在於 HD 是用「士」作為軍種的結尾，而不是「兵」。基本上兩種沒有對錯，意思都是一樣的，但「劍士」會比較有種類似「劍客」或是貴族身份的印象，比較沒有像「劍兵」表示該單位指示軍隊中的基層那麼到味。「士」若用在該單位的最頂階，的確會有稱讚該單位劍術精湛或是身份不凡的味道，但在還沒封頂前，稱「兵」或許是比較符合的。&lt;/p&gt;
&lt;p&gt;另外武器 long sword，也稱為 hand and a half sword，直翻分別為「長劍」和「一手半劍」，後者的意思是指此種劍的長度約為 1.5 個手長（整隻手，約肩膀到手指），大約 90 ~ 110 公分左右，重量大概在 1.1 ~ 1.8 公斤之間，可單手或雙手持握&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-hand-and-a-half%20sword&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，在遊戲裡則是單手持握，如&lt;strong&gt;圖 3-3&lt;/strong&gt;。此種劍大約在 13 ~ 17 世紀最為活躍。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/5xm36l9p.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-3&lt;/strong&gt;：Long Swordsman 示意圖。&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=st&amp;#x26;fn=9&amp;#x26;tn=43899&amp;#x26;f=,,,&amp;#x26;st=280&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;two-handed-swordsman&quot;&gt;Two-Handed Swordsman&lt;/h3&gt;
&lt;p&gt;Two-Handed Swordsman 的翻譯同 Long Swordsman，也是較無爭議的。在 14 ~ 16 世紀，隨著裝甲改變，長劍也在不斷地改進，最主要的就是劍柄和劍刃的加長，讓攻擊範圍以及刺、砍的能力都增強，但也導致重量的增加，必須改以雙手持握，形成雙手劍，在遊戲裡也有強調這點改變，如&lt;strong&gt;圖 3-4&lt;/strong&gt;。改進之後的劍身大約 180 公分，重量則是在 2 ~ 3.2 之間&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-7&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/9mew8z4g.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-4&lt;/strong&gt;：Two-Handed Swordsman 示意圖。&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=st&amp;#x26;fn=9&amp;#x26;tn=43899&amp;#x26;f=,,,&amp;#x26;st=280&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;champion&quot;&gt;Champion&lt;/h3&gt;
&lt;p&gt;Champion 直譯為冠軍，這也是為什麼 HD 會翻成冠軍劍士的原因。冠軍原意是指將領當中的第一人，現多引申為競賽中的第一名。而事實上，champion 本身在現代的確也是指競賽的第一名。但 champion 本身有另一個意思：「a person who fights or argues for a cause or on behalf of someone else」&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-champion&quot;&gt;4&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，意即「為某件事或代表他人奮鬥者」，這是來自於歷史上意思延伸，也就是「a knight who fought in single combat on behalf of the monarch.」&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-champion&quot;&gt;4&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，意即「代表君主進行單挑的騎士」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.wp.com/s14.directupload.net/images/141110/qcdw3ac7.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 3-5&lt;/strong&gt;：Champion 示意圖。&lt;a href=&quot;http://aok.heavengames.com/cgi-bin/forums/display.cgi?action=st&amp;#x26;fn=9&amp;#x26;tn=43899&amp;#x26;f=,,,&amp;#x26;st=280&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而這邊的 champion 應該是指第二種意思較為正確，但要怎麼翻成中文又是另一個問題，這邊用「劍士」作為軍種名的確會有種技術精湛以及保護君主的印象在裡面，只是在前方該加什麼形容詞去修飾，能更凸顯代表君主或是擁護君主的意思，就是這邊翻譯難的地方。我想當初會傳統版本會翻成劍兵勇士應該就是往第二個意思去做詮釋吧。但東方和西方歷史和文化的差異，雖都有名為「封建」的時代，但是東方起因是由上而下，西方起因是由下而上&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E5%B0%81%E5%BB%BA%E5%B7%AE%E7%95%B0&quot;&gt;5&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，因此東方沒有詞彙可以精準表達「代表君主進行單挑的騎士」，頂多就是有保護皇帝、君主的軍隊，像是「禁軍」、「禁衛」、「近衛」、「御林」、「羽林」、「虎賁」等等。這部分有沒有比較好的翻譯，我一直沒有一個定論，頂多只能使用上述的詞彙去翻譯，並期望有更懂西方史的人提出更精準的答案了。&lt;/p&gt;
&lt;h3 id=&quot;總結&quot;&gt;總結&lt;/h3&gt;
&lt;p&gt;一路研讀下來，對於這系列兵種大概也有個概念了，對於如何翻譯也是有點想法。首先，Milittia 沒有爭議地翻譯成「民兵」即可；而 Man-at-Arms 與其翻譯成「裝甲劍兵」或是直譯「拿武器的男人」(?)，不如直接翻譯成「劍兵」就足夠了。既有符合原意，也能區別與民兵的不同，又能代表劍兵系列的開端；之後的 Long Swordsman 和 Two-Handed Swordsman 也是沒有爭議地直接翻譯成「長劍兵」和「雙手劍兵」即可。最後比較有爭議性的 Champion，原本有考慮「御劍兵」作為翻譯，既有代表君王的味道，又不會太有皇家的直白感。不過最終決定採取較有氣勢的「虎賁」，能直白地表達勇士的印象，又有保衛君王的實質意涵，另外「虎賁」後面不加「劍兵」也是仿效 champion 用簡單的名詞去營造的氣勢。翻譯總結如&lt;strong&gt;表 3-2&lt;/strong&gt; 。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;Militia&lt;/td&gt;
  &lt;td&gt;民兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Man-at-Arms&lt;/td&gt;
  &lt;td&gt;劍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Long Swordsman&lt;/td&gt;
  &lt;td&gt;長劍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Two-Handed Swordsman&lt;/td&gt;
  &lt;td&gt;雙手劍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Champion&lt;/td&gt;
  &lt;td&gt;虎賁&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
**表 3-2**：劍兵系列推薦譯文對照
&lt;h2 id=&quot;spearman槍兵系列&quot;&gt;Spearman（槍兵系列）&lt;/h2&gt;
&lt;p&gt;槍兵，在遊戲裡俗稱垃圾兵，蓋因為生產此系列兵種只需要 35 食物和 25 木頭即可，不需要黃金，通常為中後期消耗戰的主力。槍兵共有三個階級，槍兵系列的翻譯在各中譯版本的結果都不太相同，可見&lt;strong&gt;表 4-1&lt;/strong&gt;。&lt;/p&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;HD&lt;/th&gt;
  &lt;th&gt;工作坊&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;Spearman&lt;/td&gt;
  &lt;td&gt;槍兵&lt;/td&gt;
  &lt;td&gt;長槍兵&lt;/td&gt;
  &lt;td&gt;長槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Pikeman&lt;/td&gt;
  &lt;td&gt;重裝長槍兵&lt;/td&gt;
  &lt;td&gt;長矛兵&lt;/td&gt;
  &lt;td&gt;重裝長槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Halberdier&lt;/td&gt;
  &lt;td&gt;戟兵&lt;/td&gt;
  &lt;td&gt;長戟兵&lt;/td&gt;
  &lt;td&gt;斧槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
**表 4-1**：槍兵系列原譯文對照表
&lt;p&gt;原文組成是由武器名稱加上 &lt;code&gt;man&lt;/code&gt; 或 &lt;code&gt;er&lt;/code&gt; 組成，所以在翻譯上要著重於釐清 &lt;a href=&quot;https://en.wikipedia.org/wiki/Spear&quot;&gt;spear&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Pike_(weapon)&quot;&gt;pike&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Halberd&quot;&gt;halberd&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 這三種武器的差異。根據 Reddit 上 &lt;a href=&quot;https://www.reddit.com/r/AskHistorians/comments/2q11pd/what_are_the_differences_between_a_spear_pike/&quot;&gt;What are the differences between a spear, pike, lance, and halberd?&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;的說法表示，spear 和 pike 差距在長度，前者為 1.2 ~ 2.4 公尺，後者為 4 ~ 6 公尺，兩者都屬於前端只有尖刺的武器。而 halberd 比較特別，他的前端多了斧刃和尖鉤，長度只有 1.5 ~ 1.8 公尺。&lt;/p&gt;
&lt;h3 id=&quot;spear&quot;&gt;Spear&lt;/h3&gt;
&lt;p&gt;Spear 的歷史比較久遠，從 40 萬年前的木製槍頭&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E6%9C%A8%E8%A3%BD%E6%A7%8D%E9%A0%AD&quot;&gt;6&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，到尼安德特人（Neanderthals）在 30 萬年前的石製槍頭，到後來青銅器時代和鐵器時代，陸續強化槍頭。除了材質上的改革，在槍頭的形狀和槍柄的長度也陸續有些變化，演化出pike（長柄槍）、 lance（騎槍）、pulum（羅馬重標槍）、hakberd（斧槍）、naginata（薙刀）、glaive（長柄刀）、bill（長柄鍥）等等。&lt;/p&gt;
&lt;h3 id=&quot;pike&quot;&gt;Pike&lt;/h3&gt;
&lt;p&gt;Pike 就屬於槍柄上的變化，約 3 ~ 8 公尺長、2.5 ~ 6 公斤重，主要是用來刺殺、不太能投擲。當兩方軍陣都使用 pike 時，就會形成看誰的槍柄比較長的軍備競賽，這也是為什麼長度會越來越長，長短範圍差距甚大的原因。也因為長度的導致 pike 重量增加，必須使用雙手才能把持，可以參考&lt;strong&gt;圖 4-1&lt;/strong&gt;做理解。著名用此武器的軍隊有 Landsknecht（國土傭僕、日爾曼雇傭兵）和 Swiss mercenaries（瑞士僱傭兵），也是中古世紀晚期（十四、十五世紀）主力軍隊之一。pike 組成的 pike square（長槍方陣）對騎兵有著致命的殺傷力。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/8/81/Pike_square_img_3653.jpg&quot; alt=&quot;spear square&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 4-1&lt;/strong&gt;：2009 年於日內瓦重現的長槍方陣。 &lt;a href=&quot;https://en.wikipedia.org/wiki/Pike_(weapon)#/media/File:Pike_square_img_3653.jpg&quot;&gt;(Rama, Cc-by-sa-2.0-fr)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;halberd&quot;&gt;Halberd&lt;/h3&gt;
&lt;p&gt;Halberd 則是在槍頭上有了變化，除了原本的尖刺加長外，多了斧刃和鉤子，長度介約 1.5 ~ 1.8 公尺，也是雙手持握的武器。槍頭的變化可參照&lt;strong&gt;圖 4-2&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Halberd 單字本身可能來自於德語的 halm（桿，staff）和 barte（斧，axe），在現代德語稱作 hellebarde。&lt;/p&gt;
&lt;p&gt;Halberd 在 14 ~ 15 世紀間表現較為突出，隨著 halberd 的精煉，除了比 spear 和 pike 更能發揮將騎兵推回去的特色，更能利用斧刃後面鉤子，將騎兵拉下馬。Halberd 造價便宜，是瑞士陸軍的主要武器，並佐以 pike 組成方陣對抗騎兵，再交鋒時使用 pike 做刺殺，並在近身以 halberd、hand-and-a-half sword（長劍）、the dagger（匕首）戰鬥。Landsknecht 後來也仿以此種方式，以 pike 為主，以 halberd 為輔進行戰鬥。&lt;/p&gt;
&lt;p&gt;Halberd 在槍兵陣交鋒時，是良好的輔助武器，但在保護裝填較慢的火槍兵種避免騎兵襲擊的作用就較為低落，到了十六世紀中期，halberd 已經不再是一般士兵會使用的武器。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/27/Svenska_hillebarder_%281500-talet%29%2C_Nordisk_familjebok.png&quot; alt=&quot;halberd photo&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 4-2&lt;/strong&gt;：Nordisk familjebok 中 halberd 的示意圖。&lt;a href=&quot;https://en.wikipedia.org/wiki/Halberd#/media/File:Svenska_hillebarder_(1500-talet),_Nordisk_familjebok.png&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;總結-1&quot;&gt;總結&lt;/h3&gt;
&lt;p&gt;首先整理上述的敘述，得出&lt;strong&gt;表 4-2&lt;/strong&gt;，再來論述 Spearman、Pikeman、Halberdier 翻譯的精準度。&lt;/p&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;th&gt;活躍年代&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;spear&lt;/td&gt;
  &lt;td&gt;槍&lt;/td&gt;
  &lt;td&gt;1.2 ~ 2.4&lt;/td&gt;
  &lt;td&gt;40 萬年前即有雛型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;pike&lt;/td&gt;
  &lt;td&gt;長柄槍&lt;/td&gt;
  &lt;td&gt;3 ~ 8&lt;/td&gt;
  &lt;td&gt;中古世紀 ~ 17 世紀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;halberd&lt;/td&gt;
  &lt;td&gt;斧槍&lt;/td&gt;
  &lt;td&gt;1.5 ~ 1.8&lt;/td&gt;
  &lt;td&gt;14 世紀 ~ 16 世紀初期&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;表 4-2&lt;/strong&gt;：長柄武器比較表&lt;/p&gt;
&lt;p&gt;首先，先針對 Halberdier 做討論。在中文翻譯上，多把 halberd 翻譯為戟，這其實是錯誤的。Halberd 是_斧跟槍_的結合，維基條目翻為斧槍，戟則為_戈和槍_的結合&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E6%88%9F&quot;&gt;7&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，最大的差異在_槍頭的刀刃_上，會搞混可能是 halberd 和青龍戟（&lt;strong&gt;圖 4-3&lt;/strong&gt;，右二）外型相似，但仔細比較就知道在刃的地方是有差異的，且青龍戟在刃後無鉤。當初官方會翻譯成戟兵或是誤翻、或是考量戟比起斧槍叫耳熟能詳、或是認為 halberd 對應到中國大概就是類似戟的關係，就暫不得而知了。至少確定 halberdier 翻成斧槍兵才是正確的翻法。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Chinese_dagger-axe_and_related_polearms.svg/1000px-Chinese_dagger-axe_and_related_polearms.svg.png&quot; alt=&quot;Ji&quot;&gt;&lt;br&gt;
&lt;strong&gt;圖 4-3&lt;/strong&gt;：左到右方別為戈（Ge）、戟（Ji）、青龍戟（Qingling Ji）、方天戟（Fantian Ji）&lt;a href=&quot;https://en.wikipedia.org/wiki/Ji_(polearm)#/media/File:Chinese_dagger-axe_and_related_polearms.svg&quot;&gt;&amp;#x3C;來源&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在論述 Spearman 和 Pikeman 之前，可能得先提及「矛」與「槍」。這兩者定義光從網路上去考究是太過草率，在網路上說發紛紜，或言差在_槍柄的韌性_，「矛偏硬、槍偏韌」&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E6%A7%8D%E7%9F%9B%E5%B7%AE%E7%95%B0%E7%A1%AC%E5%BA%A6&quot;&gt;8&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;；或言差在_槍頭的樣式_不同，「槍刃長、矛刃短、槍棱錐開刃、矛圓錐無刃」&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E6%A7%8D%E7%9F%9B%E5%B7%AE%E7%95%B0%E5%88%83&quot;&gt;9&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;；或差在_槍身的長度_，有道是「過三米為矛、短三米為槍」&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E6%A7%8D%E7%9F%9B%E5%B7%AE%E7%95%B0%E9%95%B7%E5%BA%A6&quot;&gt;10&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;…等等。到底實際為何？在沒實際爬書面文獻做功課前，在下也不敢做定論。但在遊戲中，矛這個武器已被用在射箭場的 Skirmisher ，將其翻譯成矛兵&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-%E7%9F%9B%E5%85%B5&quot;&gt;11&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，那姑且能推斷遊戲裡認定的標準是_槍為刺殺用，矛為投擲用_。事實上，若依照槍柄的韌性而言，槍柄較硬的矛的確是比較適合投擲的。&lt;/p&gt;
&lt;p&gt;那 Spearman 和 Pikeman 到底該怎麼翻呢？從上文的介紹我們得知兩者最大的差異在於槍柄的長度。傳統和工作坊的版本的著重點在於「重裝」與否，pike 的確比 spear 重，但重裝感覺比較像是在裝備上就厚實，而不是指武器，在遊戲中 Pikeman 是比 Spearman 多 &lt;em&gt;10 點 HP 和 1 點攻擊力&lt;/em&gt;，但在_裝甲值上都相同_，並無優勢。所以在下認為重裝的翻譯是不到位的，也容易讓人誤會 Pikeman 比 Spearman 防禦較高，但事實上是沒有的。HD 版本則翻為長槍兵和長矛兵，會這樣翻可能是把槍、矛差異認定是在長度上的關係，但在槍、矛定義眾說紛紜，這樣翻譯暫時不能說錯，但也容易讓人滿腔疑惑差在哪，況且矛兵一詞已經用在射箭場的 Skirmisher，更讓人難以理解差異的標準。&lt;/p&gt;
&lt;p&gt;若真要給出一個答案，或許先將槍、矛定義釐清為如上所述，槍為刺殺用、矛為投擲用，儘管在史實上不一定是一個精準的認知，但至少能避開標準混淆的狀況。再來，既然 spear 和 pike 差異在槍柄長短，那就在名稱上特別強調這點作為翻譯要點。所以或許以「槍兵」、「長槍兵」、「斧槍兵」作為一個翻譯是一個較妥當的答案，如&lt;strong&gt;表 4-3&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;Spearman&lt;/td&gt;
  &lt;td&gt;槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Pikeman&lt;/td&gt;
  &lt;td&gt;長槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Halberdier&lt;/td&gt;
  &lt;td&gt;斧槍兵&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;表 4-3&lt;/strong&gt;：槍兵系列推薦譯文對照&lt;/p&gt;
&lt;h2 id=&quot;eagle-warrior-鷹勇士系列&quot;&gt;Eagle Warrior (鷹勇士系列)&lt;/h2&gt;
&lt;p&gt;Eagle Warrior 在遊戲中是阿茲特克人（Aztecs）、印加人（Incas）、馬雅人（Mayans）都有的單位，以取代沒有馬廄的劣勢。但在現實中，Eagle Warrior 是_阿茲特克人才有的兵種_，和 Jaguar warrior（豹勇士）同屬于阿茲特克的菁英，只有在戰爭俘虜過四、五位敵人才能獲得此頭銜。Eagle Warrior 屬於阿特特克社會中的兩大領導階層之一，並沒有像是在遊戲中如此廉價，會出現 Eagle Scout 大概也只是遊戲平衡下的產物。如&lt;strong&gt;表 5-1&lt;/strong&gt;，由於這系列各家翻譯的結果都一樣，在下也沒有特別的疑慮，所以就不多贅述，有興趣的可以去研究阿茲特克的歷史和軍事文化。&lt;/p&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;HD&lt;/th&gt;
  &lt;th&gt;工作坊&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;Eagle Scout&lt;/td&gt;
  &lt;td&gt;鷹斥候&lt;/td&gt;
  &lt;td&gt;鷹斥候&lt;/td&gt;
  &lt;td&gt;鷹斥候&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Eagle Warrior&lt;/td&gt;
  &lt;td&gt;鷹勇士&lt;/td&gt;
  &lt;td&gt;鷹勇士&lt;/td&gt;
  &lt;td&gt;鷹勇士&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Elite Eagle Warrior&lt;/td&gt;
  &lt;td&gt;精銳鷹勇士&lt;/td&gt;
  &lt;td&gt;精銳鷹勇士&lt;/td&gt;
  &lt;td&gt;精銳鷹勇士&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;表 5-1&lt;/strong&gt;：鷹勇士系列原譯對照表&lt;/p&gt;
&lt;h2 id=&quot;technologies-科技&quot;&gt;Technologies (科技)&lt;/h2&gt;
&lt;p&gt;科技這邊就比較不知道如何從歷史背景下手，姑且就以名稱和實質加成作討論吧。三種翻譯版本與效果可見&lt;strong&gt;表 6-1&lt;/strong&gt;。&lt;/p&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;HD&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;Tracking&lt;/td&gt;
  &lt;td&gt;追蹤技術&lt;/td&gt;
  &lt;td&gt;跟蹤術&lt;/td&gt;
  &lt;td&gt;追蹤術&lt;/td&gt;
  &lt;td&gt;所有步兵視野 +2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Squires&lt;/td&gt;
  &lt;td&gt;護衛技術&lt;/td&gt;
  &lt;td&gt;護衛&lt;/td&gt;
  &lt;td&gt;護衛&lt;/td&gt;
  &lt;td&gt;步兵移動速度快 10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Arson&lt;/td&gt;
  &lt;td&gt;-&lt;/td&gt;
  &lt;td&gt;縱火&lt;/td&gt;
  &lt;td&gt;縱火&lt;/td&gt;
  &lt;td&gt;步兵對建築造成的傷害 +2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;表 6-1&lt;/strong&gt;：軍營科技原譯文對照表與效果解說&lt;/p&gt;
&lt;h3 id=&quot;tracking&quot;&gt;Tracking&lt;/h3&gt;
&lt;p&gt;Tracking 這個字滿常聽到的，在劍橋英英字典表示「to follow a person or animal by looking for proof that they have been somewhere, …」，簡單的來說就是「根據某人或動物在某處留下的證據去跟蹤他們」。&lt;/p&gt;
&lt;p&gt;在這裡翻成「追蹤」會比「跟蹤」好，跟蹤比較像是單純隱匿行蹤跟隨某人，但追蹤才會比較有_根據蹤跡、證據_去跟蹤某人到意涵。&lt;/p&gt;
&lt;h3 id=&quot;squires&quot;&gt;Squires&lt;/h3&gt;
&lt;p&gt;在牛津字典裡關於 squire 有 3 種解釋：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a man of high social status who owned most of the land in a particular country area&lt;/li&gt;
&lt;li&gt;a young man who was an assistant to a knight before becoming a knight himself&lt;/li&gt;
&lt;li&gt;Squire used by a man as a friendly way of addressing another man &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;翻成中文大意為：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在國家特定地區擁有大部分土地，且具有高社會地位的人。&lt;/li&gt;
&lt;li&gt;在成為騎士（knight）前，擔任騎士侍從的年輕人。&lt;/li&gt;
&lt;li&gt;在英式英文中，男人間之間的一種幽默的、非正式的稱呼。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這邊是名詞，後來引申為動詞，意為「To attend as a squire.」，attend&lt;br&gt;
有「to be with somebody and help them」的意思&lt;a href=&quot;http://blog.fntsr.tw/articles/491/#fn-491-attend&quot;&gt;12&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，所以大意上就是「像 squire 一樣幫助我」，那樣 squire 應該就偏向第二種意思，也就是「像騎士侍從對待騎士一樣隨侍、護送我」，我想這也是為什麼麼會翻譯成「護送」的意思。&lt;/p&gt;
&lt;p&gt;原本研究到這邊就打算定案，不過突然想到可以參考日文版的翻譯，赫然發現 Squire 翻的是「武者修行」，而不是「護送」，明顯是從第二個意思衍伸出來的。接著又在 Wikia 裡世紀帝國的維基空間裡的&lt;a href=&quot;http://ageofempires.wikia.com/wiki/Squires&quot;&gt;「Squires」&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;找到以下的介紹：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Prior to becoming a knight, young men put in a long apprenticeship as a squire. Squires were assigned to a knight for their training in weapons and social graces. In return they cared for the knight’s equipment and horses, dressed him for combat, guarded him, and accompanied him into battle. All knights were squires at an early age, but not all squires became knights. Squires without noble birth, financial backing, or the support of superior lord might live out their life without becoming a knight. Squires fought alongside the knights, although their weapons and armor were of a lower standard. The support of squires made armies more effective.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;這段大致可看為上面第二種意思的詳細說明，講述「squire 會被指派給一名騎士（knight），由騎士訓練他們的武器使用能力和優雅的社交技巧。作為回報，squire 會幫忙照顧騎士的坐騎和裝備、在戰鬥中提供輔助、守衛、並在戰鬥中被隨歧視。所有的騎士都曾經是 squires，但不是所有的 squires 都能成為騎士。若沒有貴族的出身、良好的經濟狀況做後盾、或是來自於上位領主的支持，squire 都只會繼續他們的生活，而不是成為一名騎士。雖然 squires 的武器和裝甲的檔次比較低，但他們仍伴隨騎士身邊戰鬥。來自於 squires 的支援，讓軍隊更有效率。」&lt;/p&gt;
&lt;p&gt;根據維基百科騎士條目的說法是：「首先要出生於中古時代歐洲的貴族家庭。在七歲時，其將被送到另一個騎士家裡作侍童（page），以學習各種騎士的禮儀。在十四歲那年，將成為侍從（squire），接受各種訓練及學習『俠義精神』。」&lt;/p&gt;
&lt;p&gt;再說，Squires 的圖案是描繪一雙手，將劍柄朝外遞出一把劍的姿勢，與其說是護衛，不如說是在戰鬥中將武器遞給騎士的模樣。如此翻譯成護衛就顯得有些牽強。&lt;/p&gt;
&lt;p&gt;所以 Squires 在這邊應該翻譯成有「騎士侍從的修煉」意涵的名詞，類似官方日語的「武者修行」。若是翻成「騎士修行」或「騎士修煉」，又會因為慣例把 knight 翻成騎士的關係，誤會成和騎兵有關。目前還想不出比較適合的翻譯，姑且就翻譯成「侍從修行」吧。&lt;/p&gt;
&lt;h3 id=&quot;arson&quot;&gt;Arson&lt;/h3&gt;
&lt;p&gt;Oxford 給出的解釋是「the crime of deliberately setting fire to something, especially a building」，毫無疑問就是縱火，不多贅述。&lt;/p&gt;
&lt;h3 id=&quot;總結-2&quot;&gt;總結&lt;/h3&gt;
&lt;p&gt;基本上科技這邊除了 Squires 以外，比較沒有爭議性，唯一不同的「追蹤」和「跟蹤」也很好抉擇。其他比較有分歧的地方就是科技名稱後面要加「技術」或「術」，或是都不加。我的想法與 HD 和工作坊的翻法相同，就是不用為了加而加，像是 Tracking 很適合翻成「追蹤術」，但是 Squires 若翻成「侍從修行技術」就顯得不倫不類了。總結上述討論，決定翻成如&lt;strong&gt;表 6-2&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;Tracking&lt;/td&gt;
  &lt;td&gt;追蹤術&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Squires&lt;/td&gt;
  &lt;td&gt;侍從修行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Arson&lt;/td&gt;
  &lt;td&gt;縱火&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;表 6-2&lt;/strong&gt;：兵營科技推薦翻譯&lt;/p&gt;
&lt;h2 id=&quot;總結-3&quot;&gt;總結&lt;/h2&gt;
&lt;p&gt;透過對原文的詞義的研究，並搭配西方中世紀歷史的知識與文獻，大致可以了解為什麼當初這些兵種會這樣命名、為什麼會這樣翻譯，以及可能還有什麼翻譯的方向。&lt;/p&gt;
&lt;p&gt;也透過劍兵系列了解了西方劍兵器在長度和重量上的演化與 Champion 的詞源和意思；透過槍兵系列暸解到西方在槍兵器上的變化，以及槍、矛、戟、斧槍的不同；也知道鷹勇士實際上的地位，以及只有阿茲特克才有的事實；最後透過科技了解 squire 與 knight 之間的關係。&lt;/p&gt;
&lt;p&gt;本篇文章不太算是一個正式的研究文章，比較多是個人的筆記與想法，並不算是對這些翻譯一個堅決的定論，也無法保證對於西方中世紀文化和英文上有沒有誤解，但僅能以這篇文章拋磚引玉，讓對中世紀或世紀帝國有興趣的人一起交流、指正、寫文章分享所思所得。&lt;/p&gt;
&lt;h2 id=&quot;後話&quot;&gt;後話&lt;/h2&gt;
&lt;p&gt;耗費了近 9 天左右的時間，終於把這篇文章寫完了。這篇文章可以算是個人對《世紀帝國 II》軍營單位簡單的歷史以及翻譯上的研究，除了是對遊戲的熱枕外，也是對於歷史學和翻譯學上的興趣，並且給自己一個練習英文的機會。寫了這篇文章才深覺得自己對西方史的認知多麽淺薄，對於當初大學在修西方史相關課程沒有認真聽講，並趁機找延伸閱讀擴展知識感到遺憾，不過倒也不算太遲，也很享受這種透過有興趣的事物去研究專業領域的快樂。&lt;/p&gt;
&lt;p&gt;當初沒想到會耗費這麼多時間在這篇文章上，之後雖有打算續寫射箭場、馬廄和城堡，做成一系列的文章，不過可能要先歇個幾天才陸續補完了。之間可能會先把精力放在比較不需要歷史考究的純文件翻譯上，如緣起所說，最近正準備翻譯隨機地圖產生腳本的相關文件，有了這篇文章給予的暖身，我想應該會比較有能力了。&lt;/p&gt;
&lt;p&gt;也感謝友人遊風在發布前的審稿，並指正敝人對於 Man-at-Arms 的認知錯誤。&lt;/p&gt;
&lt;p&gt;最後，謝謝大家看完這篇近六千字的長文。 = )&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;現在 Steam 上販售的世紀帝國二與其擴充，在官方支援語言裡只有簡體中文，沒有繁體中文。 &lt;/li&gt;
&lt;li&gt;以 &lt;a href=&quot;http://blog.fntsr.tw/articles/491/Longsword&quot;&gt;hand-and-a-half sword&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的資料為樣本。 &lt;/li&gt;
&lt;li&gt;以 &lt;a href=&quot;https://en.wikipedia.org/wiki/Zweih%C3%A4nder&quot;&gt;Zweihänder&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的資料為樣本。 &lt;/li&gt;
&lt;li&gt;來自牛津字典中關於 [champion][Oxford champion] 的敘述&lt;br&gt;
[Oxford champion]: &lt;a href=&quot;http://www.oxfordlearnersdictionaries.com/definition/english/champion_1?q=champion&quot;&gt;http://www.oxfordlearnersdictionaries.com/definition/english/champion_1?q=champion&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;br&gt;
5.  「西方封建社會乃起於北方蠻族入侵、羅馬帝國崩潰之後。此時不僅在上無一個統一政府，連地方政府亦無法存在。社會上各自投靠依附於較大勢力者以求自保。如是自下而上，逐漸築起一種封建的架構。我們通常說，西方封建社會中，有貴族與平民兩階級。自經濟觀點言，貴族即是大地主，平民則是地主屬下所統轄的農奴。但在中國歷史上，自秦迄清，在上始終有一統一政府。統一政府之下，並有郡縣地方政府。」——錢穆，《中國歷史研究法》(台北：東大圖書，2010），頁34-35。&lt;br&gt;
6.  “Lower Palaeolithic hunting spears from Germany”. Nature.com. 1997-02-27. Retrieved 2017-01-09. &lt;br&gt;
7.  事實上是戈和矛的結合，但為了方便比較，且做槍。槍跟矛相似，但細節差在哪，或說槍柄的韌性、或說槍頭的樣式不同，要另外做功課考證，本文暫不討論。 &lt;br&gt;
8.  &lt;a href=&quot;https://www.douban.com/group/topic/3453847/&quot;&gt;豆瓣小組 – 矛、枪、槊的个人分析&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;br&gt;
9.  &lt;a href=&quot;http://www.weimengtw.com/p/zzvev.html&quot;&gt;這些兵器你分的清嗎？（矛、槍、槊、鈹、殳、鋌、鋋的區別）&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;br&gt;
10.  &lt;a href=&quot;https://home.gamer.com.tw/creationDetail.php?sn=421573&quot;&gt;巴哈姆特 r19870814的小屋 – 談槍與矛之間的分別&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;br&gt;
11.  Skirmisher 在維基條目裡，譯為&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E6%95%A3%E5%85%B5&quot;&gt;散兵&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。 &lt;br&gt;
12.  &lt;a href=&quot;http://www.oxfordlearnersdictionaries.com/definition/english/attend?q=attend&quot;&gt;線上牛津字典&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;解釋的第五項。&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="aoe" />
    <category term="translation" />
  </entry>
  <entry>
    <title>將本站的執行環境更新到最新穩定版</title>
    <link href="https://fntsr.tw/announce/upgrade-system-and-php/" />
    <id>https://fntsr.tw/announce/upgrade-system-and-php/</id>
    <updated>2017-01-16T08:32:53.000Z</updated>
    <published>2017-01-16T08:32:53.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/562/&quot;&gt;將本站的執行環境更新到最新穩定版 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;利用了點時間，將伺服器的套件升級到目前最新的穩定版，Docker-Engine 同樣升到了最新版。也把 WordPress 的映像檔換成 PHP 7.1 的執行環境，希望能帶給各位讀者在瀏覽效能上更好的體驗。&lt;/p&gt;</content>
    <category term="php" />
  </entry>
  <entry>
    <title>駐守學校於下班時間遇不理性訪客處理守則</title>
    <link href="https://fntsr.tw/articles/code-of-school-guard-when-meeting-irrational-visitor-on-off-hours-of-school/" />
    <id>https://fntsr.tw/articles/code-of-school-guard-when-meeting-irrational-visitor-on-off-hours-of-school/</id>
    <updated>2017-01-08T16:37:35.000Z</updated>
    <published>2017-01-08T16:37:35.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/488/&quot;&gt;駐守學校於下班時間遇不理性訪客處理守則 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;情境&quot;&gt;情境&lt;/h2&gt;
&lt;p&gt;學校下班時間，替代役在警衛室值勤或是休息空間備勤，遇到訪客按電鈴、敲門詢問，並有不理性行為時。&lt;/p&gt;
&lt;h2 id=&quot;守則&quot;&gt;守則&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;以自己生命安全為第一守則。&lt;/li&gt;
&lt;li&gt;請記下離學校最近派出所的電話在手機中，會比通報 110 還要更快得到處理。&lt;/li&gt;
&lt;li&gt;若有自身難以回答或決斷事宜時，請訪客於明日上班時間電洽或訪問學務處。&lt;/li&gt;
&lt;li&gt;若訪客有急事或要求與教職員聯絡，請用校內電話打給該教職員，不要直接給電話號碼。（教職員電話屬於個資）&lt;/li&gt;
&lt;li&gt;若訪客嘗試進入校園進行不合法動作時，請立即通報警。不要親身去擋，請以自己生命安全為第一守則。&lt;/li&gt;
&lt;li&gt;若訪客難以溝通，且有暴力行為傾向時，請假藉通知教職員的情況，立即報警處理。&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>獲取 Google Drive, Dropbox, OneDrive 中檔案直接下載的連結</title>
    <link href="https://fntsr.tw/articles/generate-google-drive-dropbox-one-drive-directly-download-link/" />
    <id>https://fntsr.tw/articles/generate-google-drive-dropbox-one-drive-directly-download-link/</id>
    <updated>2016-12-21T15:13:23.000Z</updated>
    <published>2016-12-21T15:13:23.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/468/&quot;&gt;http://blog.fntsr.tw/articles/468/&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本篇主要就是要講述如何將 &lt;a href=&quot;https://drive.google.com/&quot;&gt;Google Drive&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://dropbox.com/&quot;&gt;Dropbox&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://onedrive.live.com/&quot;&gt;OneDrive&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; _下載頁面_的網址轉成_直接下載檔案_的網址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2017-10-20: 補充 Google Drive 對於文件處理格式檔案的直接下載方式。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;緣由&quot;&gt;緣由&lt;/h2&gt;
&lt;p&gt;使用雲端硬碟分享檔案已經是現在文書處理、行政事務的常態，但隨著這些網路服務愈趨完善，也就逐漸放棄對太老舊瀏覽器的支援。如 Google 在 2012 下半年時宣布旗下網路應用程式放棄對 IE8 以下的支援&lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fn-468-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，此舉無疑是把 Windows XP 的多數用戶打入冷宮&lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fn-468-2&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。在以往我們或許可以另外安裝 Chrome 或 Firefox 作為配套措施，然而，Google 在 2015 年時已經宣布 Chrome 之後的版本不再支援 Windows XP，Firefox 也在今年傳出將在 Firefox53 之後的版本放棄對 Windows XP 的支援&lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fn-468-4&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。若要能繼續在 XP 上正常使用雲端硬碟下載檔案，勢必要多用點技巧去繞過可能無法正常檢視頁面的問題。&lt;/p&gt;
&lt;p&gt;而當瀏覽器版本過低不被支援時，可能就會導致連下載頁面都無法正常瀏覽，遑論下載該檔案了，這困境我已是親身經歷。為了要直接透過網路下載檔案，而不必再尋找一個隨身碟協助，就需要直接下載檔案的網址。但是在產生分享檔案的網址時，通常這些雲端硬碟供應商都是讓我們連到下載「頁面」，而不是「直接下載的網址」，這時候知道如何轉換就很重要了。&lt;/p&gt;
&lt;h2 id=&quot;轉換&quot;&gt;轉換&lt;/h2&gt;
&lt;h3 id=&quot;google-drive&quot;&gt;Google Drive&lt;/h3&gt;
&lt;h4 id=&quot;一般檔案&quot;&gt;一般檔案&lt;/h4&gt;
&lt;p&gt;當透過 Google Drive 分享功能獲得的連結會是下列其中一這種格式：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://drive.google.com/file/d/{檔案亂碼序號}/view?usp=sharing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://drive.google.com/open?id={檔案亂碼序號}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只需要把檔案亂數序號記下來，改以下列格式訪問即可直接下載。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://drive.google.com/uc?export=download&amp;#x26;id={檔案亂碼序號}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;文書處理格式的檔案&quot;&gt;文書處理格式的檔案&lt;/h4&gt;
&lt;p&gt;如果遇到 doc, ppt, xls 等常見的文書處理格式的檔案，使用上面的方式就會出現 404 Not Found 的錯誤。這是因為這些文件有不只一種的輸出格式，以文件檔來說，就有 docx, odt, pdf, txt, html 等格式可以下載。所以為了要成功下載，必須使用另一種網址格式，並指定下載格式，如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://docs.google.com/document/u/0/d/{檔案亂碼序號}/export?format={檔案輸出格式}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;當然，如果覺得麻煩，比較通俗的方式就是將要提供直接下載的檔案封裝成壓縮黨重新上傳，再透過第一種方式產生下載網址囉。&lt;/p&gt;
&lt;h3 id=&quot;dropbox&quot;&gt;Dropbox&lt;/h3&gt;
&lt;p&gt;當透過 Dropbox 分享功能獲得的連結會是這種格式：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://www.dropbox.com/s/{檔案亂碼序號}?dl=0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://www.dropbox.com/s/{檔案亂碼序號}/{檔名}?dl=0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要直接下載直接把當中的 &lt;code&gt;dl=0&lt;/code&gt; 改成 &lt;code&gt;dl=1&lt;/code&gt; 即可。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://www.dropbox.com/s/{檔案亂碼序號}?dl=1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://www.dropbox.com/s/{檔案亂碼序號}/{檔名}?dl=1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;onedrive&quot;&gt;OneDrive&lt;/h3&gt;
&lt;p&gt;當透過 OneDrive 分享功能獲得的連結會以下列格式呈現。這是類似縮網址後的結果，裡面沒有我們所需要的檔案亂數序號。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://1drv.ms/b/s!{縮網址亂數序號}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;為了更方便、更快取得直接下載的網址，我們改以複製「內嵌網址」去做轉換。若是取得 HTML Code，會得到：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;iframe src=&quot;{網址}&quot; width=&quot;476&quot; height=&quot;288&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&amp;#x3C;/iframe&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接複製該網址，或是你是直接取得內嵌網址，會得到：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://onedrive.live.com/embed?{各種參數}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接把 &lt;code&gt;embed&lt;/code&gt; 改成 &lt;code&gt;download&lt;/code&gt; 即可。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://onedrive.live.com/download?{各種參數}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;後話&quot;&gt;後話&lt;/h2&gt;
&lt;p&gt;「Windows XP 不死！」這句話不是說假的，筆者現在工作場所連接影印機的電腦仍是 Windows XP 搭配 IE6，也因為瀏覽器版本過低，導致 Google Drive, Dropbox, Onedrive 的頁面讀取失敗，從而無法下載要影印的文件下來。在身邊沒有隨身碟的情況，只好透過這種方式取的直接下載的網址，然後記下網址（當然，有用 goo.gl 縮過），再到該電腦去下載、進行影印了。&lt;/p&gt;
&lt;h2 id=&quot;參考項目&quot;&gt;參考項目&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.syncwithtech.org/p/direct-download-link-generator.html&quot;&gt;Direct Link Generator – Google Drive, Dropbox, Onedrive&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://metadataconsulting.blogspot.tw/2014/05/how-to-get-direct-download-link-from.html&quot;&gt;How to Get Direct Download Link From OneDrive – WORKING – Power IT Pro Tip&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://gsuiteupdates.googleblog.com/2012/09/supporting-modern-browsers-internet.html&quot;&gt;Supporting modern browsers: Internet Explorer 8 support discontinued&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fnref-468-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows XP 上的 IE 只能更新到 IE8。 &lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fnref-468-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1305453&quot;&gt;Prevent non-esr stand alone installers from installing on XP/Vista (Fx53 and up)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/468/#fnref-468-4&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="cloud" />
  </entry>
  <entry>
    <title>更新 Jetpack 後造成 WordPress 後台出錯的處理方式</title>
    <link href="https://fntsr.tw/articles/fatal-error-of-wordpress-dashboard-after-updated-jetpack-plugin/" />
    <id>https://fntsr.tw/articles/fatal-error-of-wordpress-dashboard-after-updated-jetpack-plugin/</id>
    <updated>2016-11-30T21:40:22.000Z</updated>
    <published>2016-11-30T21:40:22.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/434/&quot;&gt;http://blog.fntsr.tw/articles/434/&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;更新-jetpack-後造成-wordpress-後台出錯的處理方式&quot;&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/434/&quot;&gt;更新 Jetpack 後造成 WordPress 後台出錯的處理方式&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;/h2&gt;
&lt;h2 id=&quot;fatal-error-of-wordpress-dashboard-after-updated-jetpack-plugin&quot;&gt;Fatal error of Wordpress dashboard after updated Jetpack plugin &lt;/h2&gt;
&lt;p&gt;今天在更新 Jetpack 插件後，Wordpress 就出現了下列訊息&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Fatal error: Call to undefined method Jetpack::validate_sync_error_idc_option() in /var/www/html/wp-content/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php on line 42&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用 &lt;code&gt;Fatal error: Call to undefined method Jetpack&lt;/code&gt; 為關鍵字稍微餵了狗，搜尋到類似的議題，官方的回覆是要求使用者透過 FTP 或 CPanel，將位於 &lt;code&gt;plugin&lt;/code&gt; 目錄底下的 &lt;code&gt;jetpack&lt;/code&gt; 資料夾整個刪除，並到後台重新安裝。&lt;/p&gt;
&lt;p&gt;該回覆並沒有回答原因。但是我使用 SSH 登入主機照做後，問題的確就解決了。推測可能是在更新上沒有完全將有更動的檔案同步，導致 include 有誤。實際原因是什麼，之後有閒實再推敲吧。&lt;/p&gt;</content>
    <category term="wordpress" />
  </entry>
  <entry>
    <title>用 highlight.js 作為 wordpress 程式碼著色的程式</title>
    <link href="https://fntsr.tw/articles/use-highlight-js-to-be-code-highlight-program-to-instead-of-crayon-syntax-highlighter/" />
    <id>https://fntsr.tw/articles/use-highlight-js-to-be-code-highlight-program-to-instead-of-crayon-syntax-highlighter/</id>
    <updated>2016-09-22T20:44:22.000Z</updated>
    <published>2016-09-22T20:44:22.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/402/&quot;&gt;http://blog.fntsr.tw/articles/402/&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;原本本部落格是使用 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon Syntax Highlighter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 這套 WordPress 套件作為程式碼著色的程式，雖未說得上好用，但也算是符合需求。但該套件是不支援 &lt;a href=&quot;https://jetpack.com/support/markdown/&quot;&gt;JetPack Markdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 渲染 HTML 標籤的格式，導致我每次更新套件時都要重新修正程式碼 (詳見&lt;a href=&quot;https://blog.fntsr.tw/articles/2016/02/15/from-jekyll-to-wordpress/&quot;&gt;從 Jekyll 遷移至 WordPress&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 4.2 節)，不堪其擾，遂有想改用其他程式碼著色程式的念頭。&lt;/p&gt;
&lt;p&gt;當初轉移部落格到 WordPress 時，就有試過 &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，但已經忘記當初沒有選擇這個著色程式的原因。不過今天嘗試改用這套程式時，發現體驗良好，既有喜歡的 Theme 又有支援多種語言，重點是該程式的規格和 &lt;a href=&quot;https://jetpack.com/support/markdown/&quot;&gt;JetPack Markdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 渲染出來的標籤是同規格！所以就立即改用 &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 作為著色程式。&lt;/p&gt;
&lt;h2 id=&quot;比較&quot;&gt;比較&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 最大的優勢在能夠與 &lt;a href=&quot;https://jetpack.com/support/markdown/&quot;&gt;JetPack Markdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 相容，我可以不用再另外處理就可以直接使用。除此之外，在語言支援度上 &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的 166 種程式語言也遠多於 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的 65 種，Themes 的數量也是略多，&lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的更新頻率更是遠遠高過於 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，更遑論 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的文件因為作者換部落格的關係，圖片都已經失效了。&lt;/p&gt;
&lt;p&gt;若要說 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 優勢，大概就是使用上比較適合非程式設計師背景的 wordpress 使用者，不用修改程式透過後台的介面勾勾選選就可以客製化自己想要的著色效果，也有提供標題、純文字化等效果，除此之外還有許多客製化設定選項可以套用。但對於我來說許多功能都是多餘的，所以並不是很有吸引力。&lt;/p&gt;
&lt;h2 id=&quot;套用-highlightjs&quot;&gt;套用 highlight.js&lt;/h2&gt;
&lt;h3 id=&quot;cdn&quot;&gt;CDN&lt;/h3&gt;
&lt;p&gt;最快的套用方式就是透過修改 wordpress 主題 (theme) 加入該程式的 cdn 連結：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- 你可以將 `default` 換成任何你想要的主題名稱。 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- 如本站的 `monokai-sublime`。記得要保留 `.min`。 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;link rel=&quot;stylesheet&quot; href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/default.min.css&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- 這邊會包含常用的 22 種語言。 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- 若所要套用的語言不含在其中，可另外到官網下載客制化的版本。 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/highlight.min.js&quot;&gt;&amp;#x3C;/script&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- 呼叫程式在 HTML 文件讀取完畢後進行程式碼著色 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;script&gt;hljs.initHighlightingOnLoad();&amp;#x3C;/script&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;客製化&quot;&gt;客製化&lt;/h3&gt;
&lt;p&gt;若要使用的語言不含在常用的語言裡，如 &lt;code&gt;Dockerfile&lt;/code&gt;、&lt;code&gt;Go&lt;/code&gt;、&lt;code&gt;Erb&lt;/code&gt;、&lt;code&gt;YAML&lt;/code&gt;等，就需要另外&lt;a href=&quot;https://highlightjs.org/download/&quot;&gt;到官網下載客製化版本&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。套用方式和上一節差不多，先把下載下來的套件放到主題專案裡，或是任何可以外連的空間，然後用上節的語法去引用即可。&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;本篇雖然主要是講述利用 &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 作為 WordPress 的程式碼著色程式，但只要任何可以把 &lt;code&gt;~~~lang&lt;/code&gt; 轉換成 &lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;”lang”&quot;&gt;…&lt;/code&gt;&lt;/pre&gt; 的部落格系統或靜態網頁產生器都可以簡單如上述的方式簡單套用。若是不是以 &lt;pre&gt;&lt;code class=&quot;”lang”&quot;&gt;…&lt;/code&gt;&lt;/pre&gt; 作為輸出格式，官方亦有在首頁上示範利用 JavaScript 腳本去指定要套用的標籤樣板，使用文件也有示範利用 jQuery 的選擇器協助指定目標。比較進階的用法可以參考官方提供的 &lt;a href=&quot;http://highlightjs.readthedocs.io/en/latest/api.html&quot;&gt;API 文件&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，裡面也有講述如何新增語言和樣式格式。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;透過 &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 取代 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，使得本站相依的套件又少一個。能利用主題 (theme) 直接處理的功能，就少用套件，如此也可減少伺服器的負擔，並且讓渲染專心在前端實作，前後端職責更加分明。&lt;/p&gt;</content>
    <category term="javascript" />
    <category term="web" />
    <category term="wordpress" />
  </entry>
  <entry>
    <title>十四經脈國際名稱與縮寫</title>
    <link href="https://fntsr.tw/literatures/name-of-meridian-and-it-s-alphabetic-code/" />
    <id>https://fntsr.tw/literatures/name-of-meridian-and-it-s-alphabetic-code/</id>
    <updated>2016-09-18T19:33:12.000Z</updated>
    <published>2016-09-18T19:33:12.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/379/&quot;&gt;十四經脈國際名稱與縮寫 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;取自 WHO 於西元 1993 年所公佈的 &lt;a href=&quot;http://apps.who.int/medicinedocs/documents/s7143e/s7143e.pdf&quot;&gt;Standard Acupuncture Nomenclature (針灸經穴名稱標準) 第二版&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fn-379-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。日本標準縮寫與國際標準一致&lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fn-379-2&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。中國標準縮寫原本三焦經 (SJ)、督脈 (DU)、任脈 (RN) 是與國際不同的，在 2006 年頒布的&lt;a href=&quot;http://www.cmaph.org/attachment/2013530/1369881555029.pdf&quot;&gt;「腧穴名称与定位」新標準 (GB/T 12346-2006)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 已和國際標準一致&lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fn-379-3&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&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;Lung Meridian&lt;/td&gt;
  &lt;td&gt;LU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;大腸經&lt;/td&gt;
  &lt;td&gt;Large Intestine Meridian&lt;/td&gt;
  &lt;td&gt;LI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;胃經&lt;/td&gt;
  &lt;td&gt;Stomach Meridian&lt;/td&gt;
  &lt;td&gt;ST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;脾經&lt;/td&gt;
  &lt;td&gt;Spleen Meridian&lt;/td&gt;
  &lt;td&gt;SP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;心經&lt;/td&gt;
  &lt;td&gt;Heart Meridian&lt;/td&gt;
  &lt;td&gt;HT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;小腸經&lt;/td&gt;
  &lt;td&gt;Small Intestine Meridian&lt;/td&gt;
  &lt;td&gt;SI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;膀胱經&lt;/td&gt;
  &lt;td&gt;Bladder Meridian&lt;/td&gt;
  &lt;td&gt;BL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;腎經&lt;/td&gt;
  &lt;td&gt;Kidney Meridian&lt;/td&gt;
  &lt;td&gt;KI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;心包經&lt;/td&gt;
  &lt;td&gt;Pericardium Meridian&lt;/td&gt;
  &lt;td&gt;PC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;三焦經&lt;/td&gt;
  &lt;td&gt;Triple Energizer Meridian&lt;/td&gt;
  &lt;td&gt;TE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;膽經&lt;/td&gt;
  &lt;td&gt;Gallbladder Meridian&lt;/td&gt;
  &lt;td&gt;GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;肝經&lt;/td&gt;
  &lt;td&gt;Liver Meridian&lt;/td&gt;
  &lt;td&gt;LR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;督脈&lt;/td&gt;
  &lt;td&gt;Governor Vessel&lt;/td&gt;
  &lt;td&gt;GV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;任脈&lt;/td&gt;
  &lt;td&gt;Conception Vessel&lt;/td&gt;
  &lt;td&gt;CV&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;表 1：經絡中英文對照表&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standard Acupuncture Nomenclature p.4 &lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fnref-379-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;「第二次日本経穴委員会」網站資料：&lt;a href=&quot;http://point.umin.jp/361/06_1989/code.htm&quot;&gt;http://point.umin.jp/361/06_1989/code.htm&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fnref-379-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;腧穴名称与定位 (GB/T 12346-2006) p.I &lt;a href=&quot;http://blog.fntsr.tw/articles/379/#fnref-379-3&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="excerpt" />
  </entry>
  <entry>
    <title>讓 jQuery 在 webpack 中成為全域變數</title>
    <link href="https://fntsr.tw/articles/expose-jquery-to-global-variable-with-webpack/" />
    <id>https://fntsr.tw/articles/expose-jquery-to-global-variable-with-webpack/</id>
    <updated>2016-09-13T14:19:24.000Z</updated>
    <published>2016-09-13T14:19:24.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/363/&quot;&gt;讓 jQuery 在 webpack 中成為全域變數 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;這兩三年，可謂前端技術更迭不斷、框架不斷推陳出新的尖峰時期，本來就比較沒有再碰前端技術、以及專注在碩士求學生涯的我也算是落後許多。在拿到碩士學位後，又重新開始投入 Web 開發，不斷學習新知，尤其是在前端技術方面。最近開始使用 webpack 做為 module bundler，這篇主要就是紀錄初期使用 webpack 時遇到的一個撞牆點。&lt;/p&gt;
&lt;p&gt;儘管前端框架越來越多，angular.js、react.js 以及最近竄起的 vue.js 開始主導整個網頁前段的流程控制以及事件觸發，但是許多 CSS 框架仍是相依在 jQuery 上，且可能沒有對其他 JavaScript 框架有著完整的支援，所以在使用 JavaScript 框架之餘，仍需要使用 jQuery 作為驅動 CSS 框架的手段。最近開始嘗試使用 vue.js 與 webpack 的組合去做網站開發，在套用 semantic-ui 和 materialize 這兩門前端設計框架時，就遇到了找不到 jQuery 套件庫的錯誤，導致網站的 JavaScrit 程序被中斷，無法繼續執行下去。&lt;/p&gt;
&lt;h2 id=&quot;誤區&quot;&gt;誤區&lt;/h2&gt;
&lt;p&gt;依照 webpack 去引入 JavaScript 的套件，以為只要在 js 檔案中加入下面兩行程式碼即可。但首先遇到的就是 JSLint 發出重複 import 的錯誤，直接否決掉這個做法。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Error: no-duplicate-imports  &#39;jquery&#39; import is duplicated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import $ from &#39;jquery&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import jQuery from &#39;query&#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;為了避開這個錯誤，改只有 import 一次，用變數賦值去改善這個問題。在引入 semantic-ui 或 materialize 時，仍然出現了 &lt;code&gt;ReferenceError: Can&#39;t find variable: jQuery&lt;/code&gt; 的錯誤。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Error: ReferenceError: Can&#39;t find variable: jQuery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import $ from &#39;jquery&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;var jQuery = $&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接著稍微 Google，有人提到要讓 jQuery 掛載 window 物件下成為全域變數，就可以解決問題了。所以嘗試以下面程式碼解決問題，但仍然得到 &lt;code&gt;ReferenceError: Can&#39;t find variable: jQuery&lt;/code&gt; 的錯誤。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Error: ReferenceError: Can&#39;t find variable: jQuery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import jquery from &#39;jquery&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;window.$ = jquery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;window.jQuery = jquery&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上解法都失敗。目前對於 webpack 還不甚熟悉，只有在同一個檔案內的程式碼可以使用 &lt;code&gt;$&lt;/code&gt;、&lt;code&gt;jQuery&lt;/code&gt; 呼叫 jQuery，但若是 import 的 JavaScript 套件需要 jQuery 時就會找不到，在網頁開啟開發者工具區呼叫這兩個變數時也會找不到。推估是因為 webpack 對於每個檔案的變數宣告的作用範圍 (scope) 都侷限在檔案裡，不會真的成為全域變數，所以就算把 jQuery 掛在 &lt;code&gt;window&lt;/code&gt; 物件內，仍無法解決問題。這個假設等未來對前端更熟悉後，再來嘗試驗證。&lt;/p&gt;
&lt;h2 id=&quot;解法&quot;&gt;解法&lt;/h2&gt;
&lt;p&gt;既然無法從單個檔案解決問題，就只好換個方向，嘗試使用設定檔解決問題。繼續嘗試 Google 尋找資料，得到大致有兩種解法，且都是可以運作的。&lt;/p&gt;
&lt;p&gt;不管是何種解法，首先就是要透過 npm 安裝 jQuery：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install --save jquery&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一種是使用 webpack plugin 的方式，透過 Provide Plugin &lt;a href=&quot;http://blog.fntsr.tw/articles/363/#fn-363-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 讓 jQuery 成為全域變數。編輯 webpack 的設定檔，在 module.exports.plugins 中加入 Webpack ProvidePlugins，並把 &lt;code&gt;$&lt;/code&gt;、&lt;code&gt;jQuery&lt;/code&gt; 這兩個全域變數指向 &lt;code&gt;jquery&lt;/code&gt; 套件庫。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;plugins: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // other plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  new webpack.ProvidePlugin({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     $: &quot;jquery&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     jQuery: &quot;jquery&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第二種解法則是使用 expose-loader。首先先透過 npm 安裝 expose-loader：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install expose-loader --save&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然後編輯 webpack 的設定檔，在 module.exports.loaders 中加入下面的程式碼，把 &lt;code&gt;jquery&lt;/code&gt; 套件庫揭露 (expose) 成 &lt;code&gt;$&lt;/code&gt;、&lt;code&gt;jQuery&lt;/code&gt; 這兩個全域變數。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;loaders: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // other loaders&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    test: require.resolve(&#39;jquery&#39;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    loader: &#39;expose?jQuery!expose?$&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;設定檔完成後，重新啟動伺服器。此時網頁仍會顯示 &lt;code&gt;ReferenceError: Can&#39;t find variable: jQuery&lt;/code&gt; 的錯誤。這時打開網頁的腳本，加入下面的程式碼即可解決這個問題。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import &#39;jquery`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;補充：後來在參考資料第二項的文章裡，發現還有許多其他解法，有興趣的可以前往該頁面閱讀。&lt;/p&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/29080148/expose-jquery-to-real-window-object-with-webpack&quot;&gt;Expose jQuery to real Window object with Webpack&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/28969861/managing-jquery-plugin-dependency-in-webpack&quot;&gt;Managing Jquery plugin dependency in webpack&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://react-china.org/t/webpack-jquery-bootstrap/1669&quot;&gt;React China – 求大牛帮忙，用webpack 打包jquery、bootstrap时出错。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rhadow.github.io/2015/05/30/webpack-loaders-and-plugins/&quot;&gt;Rhadow’s Tech Note – 深入了解 Webpack Plugins&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;「Provide Plugin 的主要功能是當在程式中遇到特定字元且沒被定義時會自動載入特定模組。」via Ref-4 &lt;a href=&quot;http://blog.fntsr.tw/articles/363/#fnref-363-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="javascript" />
    <category term="web" />
  </entry>
  <entry>
    <title>Tr: 在 Docker Container 裡應該避免的 10 件事</title>
    <link href="https://fntsr.tw/literatures/10-things-to-avoid-in-docker-containers/" />
    <id>https://fntsr.tw/literatures/10-things-to-avoid-in-docker-containers/</id>
    <updated>2016-03-06T08:57:50.000Z</updated>
    <published>2016-03-06T08:57:50.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/311/&quot;&gt;Tr: 在 Docker Container 裡應該避免的 10 件事 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;來源&quot;&gt;來源&lt;/h2&gt;
&lt;p&gt;本篇文章譯自 &lt;a href=&quot;https://github.com/rafabene&quot;&gt;Rafael Benevides&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 在 2016/02/24 於 &lt;a href=&quot;http://developerblog.redhat.com/&quot;&gt;RED HAT DEVELOPER BLOG&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 上發表的 &lt;a href=&quot;http://developerblog.redhat.com/2016/02/24/10-things-to-avoid-in-docker-containers/&quot;&gt;10 things to avoid in docker containers&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 一文。已寫信徵得原作者得同意以進行翻譯。&lt;/p&gt;
&lt;p&gt;希望能透過本篇翻譯，讓臺灣社群對於 Docker container 的使用與理解有所幫助。 = )&lt;/p&gt;
&lt;h2 id=&quot;譯文&quot;&gt;譯文&lt;/h2&gt;
&lt;p&gt;嘿，看來您終於也投入 Container（譯註：本文若沒特別說明，Container 皆是指 Docker container）&lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的懷抱了，相信您也發現它能夠解決很多問題並擁有很多優點：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;不可變的（immutable）：&lt;br&gt;
因為作業系統、函式庫（library）版本、設定、資料夾、應用程式都被包裝在 Container 裡頭，所以您能確保相同的 Image（譯註：本文若沒特別說明，Image 皆是指 Docker image）&lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-2&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，在 QA 的測試下與正式環境中，都會擁有同樣的行為。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;輕量的：&lt;br&gt;
Container 只使用少量的記憶體。不再需要耗費成千上百 MB 的記憶體，Container 只會使用主程序所需的用量，再多加上數十 MB 的記憶體而已。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;快速的：&lt;br&gt;
您可以啟動 Container 就像是平時啟動 Linux 程序一樣快。不再需要耗費數分鐘，您可以在幾秒內就啟動一個全新的 Container 。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然而，很多使用者仍然對待 Container 像是以往對待虛擬機器一般，認為虛擬化技術該有的優點 Container 都沒落下，卻忘記了 Container 除此之外的另一個絕大優勢：&lt;strong&gt;它是一次性的（disposable）。&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Container 的使用哲學：「容器用於一時」&lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-3&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;assets/containers_are_-ephemeral.png&quot;&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/containers_are_-ephemeral.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;Containers are ephemeral&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;這個特性「本身」促使使用者改變他們對於處理與管理 Container 的習慣。接下來我會解釋您不應在 Container 裡做什麼，以確保它能發揮最大效益。&lt;/p&gt;
&lt;h5 id=&quot;一不要在-container-裡儲存資料data&quot;&gt;一、不要在 Container 裡儲存資料（data）&lt;/h5&gt;
&lt;p&gt;Container 是可以被停止、摧毀、或是取代的。一個運行 1.0 版應用程式的 Container 應該要可以輕易被運行 1.1 版的 Container 輕易地取代，且不會影響或失去任何資料。如果您真的需要儲存資料，請將它存在 volume &lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-4&quot;&gt;4&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。不過如果兩個 Container 都對同一個 volume 寫進資料，要注意是否可能造成出錯，並確保您的應用程式是否有設計寫入共同資料的功能。&lt;/p&gt;
&lt;h5 id=&quot;二不要將應用程式分兩部份搬移&quot;&gt;二、不要將應用程式分兩部份搬移&lt;/h5&gt;
&lt;p&gt;如同有些人會將 Container 視為虛擬機器，裡頭的多數人也會傾向認為應該要將應用程式部署在一個運行中的 Container。當您在開發階段這麼做倒無可厚非，因為您可能要持續地部署與除錯。但在持續交付&lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-5&quot;&gt;5&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;通往 QA 和正式環境的自動化 pipeline 流程裡，您的應用程式應該是 Image 的一部份。記住：&lt;strong&gt;Container 是不可變的&lt;/strong&gt;。&lt;/p&gt;
&lt;h5 id=&quot;三不要建立大型的-image&quot;&gt;三、不要建立大型的 Image&lt;/h5&gt;
&lt;p&gt;一個大型的 Image 只會讓它難以被散佈。確認您是否只放置應用程式/程序所需的檔案和函式庫，不要在建置時安裝多餘的套件或是進行套件更新（像是 &lt;code&gt;yum update&lt;/code&gt; 或 &lt;code&gt;apt-get upgrade&lt;/code&gt;）&lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fn-311-6&quot;&gt;6&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，這樣會下載過多的檔案加進新的 Image 層。&lt;/p&gt;
&lt;h5 id=&quot;四不要使用單層式的-image&quot;&gt;四、不要使用單層式的 Image&lt;/h5&gt;
&lt;p&gt;為了有效率地使用分層式檔案系統（layered filesystem），請總是為 OS 建置您專屬的 Base Image，然後為&lt;a href=&quot;https://github.com/jboss-dockerfiles/base/blob/master/Dockerfile&quot;&gt;使用者名稱定義&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;https://github.com/jboss-dockerfiles/wildfly/blob/master/Dockerfile&quot;&gt;執行時期所需安裝&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、設定、您的應用程式各獨立建置一層。這會讓您在 Image 的重建和管理更加簡易，並易於散佈。&lt;/p&gt;
&lt;h5 id=&quot;五不要用執行中的-container-建立-image&quot;&gt;五、不要用執行中的 Container 建立 Image&lt;/h5&gt;
&lt;p&gt;以行話來說，就是不要使用 &lt;code&gt;docker commit&lt;/code&gt; 去建立 Image。這種方式建立的 Image 是難以重現的，應該要徹底避免。請務必使用 Dockerfile 或時其他可以完全重現的 &lt;a href=&quot;https://github.com/openshift/source-to-image&quot;&gt;S2I（source-to-image）&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;方式去做這件事。另外，若是您使用程式碼版本控制系統（如 git）去儲存 Dockerfile，您就可以追蹤 Dockerfile 的變動。&lt;/p&gt;
&lt;h5 id=&quot;六不要只使用latest標籤&quot;&gt;六、不要只使用 &lt;code&gt;latest&lt;/code&gt; 標籤&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;latest&lt;/code&gt; 標籤就像是 Maven 使用者的 SNAPSHOT。多使用標籤，以善用分層式檔案系統的特性。您不會希望在您建置 Image 的幾個月後，驚訝的發現您的應用程式竟然不能執行，探究原因後才發現是因為父層級（Dockerfile 中的 &lt;code&gt;FROM&lt;/code&gt;）被一個無法向下相容的新版本給取代了，或是因為從建置快取中取得錯誤的 &lt;code&gt;latest&lt;/code&gt; 導致。&lt;code&gt;latest&lt;/code&gt; 標籤也應該避免使用在正式環境下部署 Container，因為您不能追蹤您的 Container 到底是跑哪一個 Image 版本。&lt;/p&gt;
&lt;h5 id=&quot;七不要在一個-container-跑超過一個程序&quot;&gt;七、不要在一個 Container 跑超過一個程序&lt;/h5&gt;
&lt;p&gt;程序可以完美的去執行一個程序（像是 http daemon、application server、database），但如果您執行超過一個程序，您可能會在管理、讀取紀錄或獨立更新上都感到棘手。&lt;/p&gt;
&lt;h5 id=&quot;八不要在-image-儲存憑証請使用環境變數&quot;&gt;八、不要在 Image 儲存憑証，請使用環境變數&lt;/h5&gt;
&lt;p&gt;不要將您的使用者名稱或是密碼寫死（hard-code）在 Image 中。請使用環境變數從 Container 外面取得這些資訊。像是 &lt;a href=&quot;https://github.com/docker-library/postgres/blob/443c7947d548b1c607e06f7a75ca475de7ff3284/9.5/docker-entrypoint.sh&quot;&gt;Postgres Image&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 就是一個很好的典範。&lt;/p&gt;
&lt;h5 id=&quot;九使用非-root-的使用者去執行程序&quot;&gt;九、使用非 root 的使用者去執行程序&lt;/h5&gt;
&lt;p&gt;「Docker container 預設會使用 root 去執行程序。….隨著 docker 越來越成熟，會有更多安全的預設設定可以使用。現在，需要用 root 對其他人是有危險的，且可能無法在所有環境中使用。您的 Image 應該使用 USER 指令去指定非 root 的使用者讓 container 執行。….」——&lt;a href=&quot;http://www.projectatomic.io/docs/docker-image-author-guidance/&quot;&gt;Guidance for Docker Image Authors&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&quot;十不要相依-ip-位址&quot;&gt;十、不要相依 IP 位址&lt;/h5&gt;
&lt;p&gt;每個 Container 都擁有他們自己內部的 IP 位址，並可能會在您啟動或停止 Container 時被改變。如果您的應用程式或是微服務需要跟另一個的 Container 溝通，請利用環境變數將合適的 hostname 和 port 從一個 Container 傳遞給另一個 Container 。&lt;/p&gt;
&lt;p&gt;更多關於 Container 的資訊，請參考並註冊 &lt;a href=&quot;http://developers.redhat.com/containers/&quot;&gt;http://developers.redhat.com/containers/&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/containers.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;[][containers]&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;譯註&quot;&gt;譯註&lt;/h2&gt;
&lt;p&gt;深刻體會到讀懂英文與翻譯成中文是兩回事。若有任何覺得翻譯不妥，或是覺得可以更好的建議，歡迎留言告知。最後特別感謝 &lt;a href=&quot;https://www.facebook.com/groups/docker.taipei/&quot;&gt;Docker.Taipei&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 社群的先進 &lt;a href=&quot;https://www.facebook.com/philipzh&quot;&gt;Philip Zheng&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;https://www.facebook.com/william.yeh?fref=ufi&quot;&gt;William Yeh&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 及友人 &lt;a href=&quot;https://github.com/david50407&quot;&gt;Davy&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;http://saru.moe/&quot;&gt;猴子&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、Micheal、Chorld 提供諮詢與建議。&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;Container，中文多翻為容器，本文特別指 Docker container，而非泛指所有 container。考證臺灣社群與相關報導，決定在文本維持英文，並採用原文&lt;del&gt;使用小寫。，且為了與一般容器區隔，刻意使用首字大寫表示其為狹義性。 &lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fnref-311-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/del&gt; &lt;/li&gt;
&lt;li&gt;&lt;del&gt;Image，中文在台灣社群多翻為映像檔，中國社群則為鏡像，本文特別指 Docker image，與虛擬機器的 image 概念不盡相同。考證臺灣社群與相關報導，決定在文本維持英文，並採用原文&lt;/del&gt;使用小寫。，且為了與虛擬機器的 image 區隔，刻意使用首字大寫表示其為狹義性。 &lt;a href=&quot;http://blog.fntsr.tw/articles/311/#fnref-311-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;~~~~ &lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <category term="docker" />
    <category term="translate" />
  </entry>
  <entry>
    <title>解決 MySQL 使用 utf8mb4 編碼導致 Rails 資料庫遷移失敗的問題</title>
    <link href="https://fntsr.tw/articles/my-sql-utf-8-mb-4-breaks-active-record-schema-setup/" />
    <id>https://fntsr.tw/articles/my-sql-utf-8-mb-4-breaks-active-record-schema-setup/</id>
    <updated>2016-02-21T23:30:29.000Z</updated>
    <published>2016-02-21T23:30:29.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/293/&quot;&gt;解決 MySQL 使用 utf8mb4 編碼導致 Rails 資料庫遷移失敗的問題 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;當 MySQL 使用 utf8mb4 編碼，會導致 Rails 資料庫遷移失敗，並輸出此錯誤訊息的問題：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;~/app $ RAILS_ENV=production rake db:migrate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;== 20150226092347 DeviseCreateUsers: migrating================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-- create_table(:users)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   -&gt; 0.0070s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-- add_index(:users, :email, {:unique=&gt;true})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;rake aborted!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;StandardError: An error has occurred, all later migrations canceled:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `index_users_on_email`  ON `users` (`email`) ~/.rvm/gems/ruby-2.2.2/gems/mysql2-0.4.2/lib/mysql2/client.rb:107:in `_query&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;......&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面那段訊息的重點在於：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mysql2::Error: Specified key was too long; max key length is 767 bytes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也就說，作為 index 的欄位，他的長度（bytes）已經超過 MySQL 規定的 767 bytes 了，所以被 MySQL 拒絕繼續進行操作。&lt;/p&gt;
&lt;h2 id=&quot;什麼時候會採用utf8mb4作為-mysql-的編碼&quot;&gt;什麼時候會採用 utf8mb4 作為 MySQL 的編碼？&lt;/h2&gt;
&lt;p&gt;在一般的情況下，其實 utf8 編碼就已經很夠用了，然而在 MySQL 6.0 前， 使用 utf8 一個字元最多只使用 3-Byte，所以他並不能表達所有 unicode 的字符。若是你的網站會使用的一些罕見字符或是有使用者是用罕見字元當做人名，就可能會不在 utf8 所支援的字符中。所以在 MySQL 5.5 時，新增了 utf8mb4 作為擴充，使最大佔用長度增為 4-byte。&lt;/p&gt;
&lt;p&gt;或許你會以為這種情況離生活很遠，但事實上在這個行動裝置隨處可見的情況下，這種情況反而更容易發生。為什麼？因為現在手機、平板等的輸入法，都多會附上表情符號諸如 [😎][😀][😁][😂][😃][😄][😅][😆]，這 8 個表符都各佔了 4-byte，也就是超過 utf8 的支援。我想讀者應該對這些符號都挺有印象的，所以這種採用 utf8mb4 作為 MySQL 的編碼的需求其實是離我們開發者越來越近。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2016-02-20-%E4%B8%8A%E5%8D%883.12.53.png&quot;&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-20-上午3.12.53.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;為什麼-rails-改用utf8mb4編碼就會超過長度呢&quot;&gt;為什麼 Rails 改用 utf8mb4 編碼就會超過長度呢？&lt;/h2&gt;
&lt;p&gt;那是因為 Rails ActiveRecord 的 &lt;code&gt;:string&lt;/code&gt; 資料欄位，等同於 MySQL 長度為 255 的 VARCHAR 欄位類型，所以使用 utf8 時，會使用 &lt;code&gt;255 * 3 = 765&lt;/code&gt; (bytes)。&lt;/p&gt;
&lt;p&gt;當編碼改成 utf8mb4 後，每個字元固定長度為 4-byte，所以大小就會有 &lt;code&gt;255 * 4 = 1020&lt;/code&gt; (bytes) ，而超過 MySQL 用來當作索引的鍵值長度的最大值。這也就是為什麼在資料庫 Migrate 會報錯的原因所在。&lt;/p&gt;
&lt;h2 id=&quot;解決方案-1&quot;&gt;解決方案 (1)&lt;/h2&gt;
&lt;h3 id=&quot;方向&quot;&gt;方向&lt;/h3&gt;
&lt;p&gt;那我們該如何解決這個問題呢？&lt;em&gt;這裡提供的方案僅限於目前網站在開發，並沒有擁有需要保存資料的情況下才能實行&lt;/em&gt;。因為這個方案是透過修改 Rails 在資料表架構上，VARCHAR 類型欄位的預設長度。若是已經有資料的網站，可能會因為修改長度比現存的資料小，導致無法執行。&lt;/p&gt;
&lt;p&gt;承襲上章所闡述的問題原因，為了改善這個問題，我們在這裡將 VARCHAR 的長度改成鍵值長度最大值以內。由算式 &lt;code&gt;767 / 4 = 191 ... 3&lt;/code&gt; 可得知，在這個範圍內若以 4-byte 來儲存 1 個字符，我們共可以儲存 191 個字符，最大長度就只會到 764 bytes，符合 MySQL 標準，因而解決這個問題。所以解決方向就如前面所述，要將 Rails 的 VARCHAR 類型欄位的預設長度改成 191 個字符。&lt;/p&gt;
&lt;h3 id=&quot;方法&quot;&gt;方法&lt;/h3&gt;
&lt;p&gt;這個方法來自於 Github Rails/Rails 專案中的 &lt;a href=&quot;https://github.com/rails/rails/issues/9855&quot;&gt;Issue #9885&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 中 @nanaya 的留言。&lt;/p&gt;
&lt;p&gt;我們在專案目錄下新增 &lt;code&gt;./config/initializers/mysqlpls.rb&lt;/code&gt; 這個檔案，然後將下面的程式碼貼近檔案中儲存，就會將 VARCHAR 類型欄位的預設長度從 255 個字符改成 191 個字符，解決了這個問題。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# config/initializers/mysqlpls.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;require &#39;active_record/connection_adapters/abstract_mysql_adapter&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;module ActiveRecord&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  module ConnectionAdapters&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    class AbstractMysqlAdapter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      NATIVE_DATABASE_TYPES[:string] = { :name =&gt; &quot;varchar&quot;, :limit =&gt; 191 }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這個程式碼主要是覆蓋掉原本 Rails 在這部分的設定，也就是說我要針對 ActiveRecord module 下的 ConnectionAdapters module 中的 AbstractMysqlAdapter Class 裡的 NATIVE_DATABASE_TYPES 雜湊常數中的 &lt;code&gt;:string&lt;/code&gt; 鍵值所代表的值做重新定義。講得這麼密麻麻，可能有點不懂，我們可以先看看原始針對這部份的定義，如下&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NATIVE_DATABASE_TYPES = {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  primary_key: &quot;int auto_increment PRIMARY KEY&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  string:      { name: &quot;varchar&quot;, limit: 255 },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  text:        { name: &quot;text&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  integer:     { name: &quot;int&quot;, limit: 4 },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  float:       { name: &quot;float&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decimal:     { name: &quot;decimal&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  datetime:    { name: &quot;datetime&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  time:        { name: &quot;time&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  date:        { name: &quot;date&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  binary:      { name: &quot;blob&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  boolean:     { name: &quot;tinyint&quot;, limit: 1 },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  json:        { name: &quot;json&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這部份就是將 migration 中定義的資料類型轉成 MySQL 的欄位類型，而我們就是將原本 &lt;/p&gt;&lt;div&gt;&lt;/div&gt; 類型定義的長度做了修改並覆蓋。這樣解釋應該好懂很多。想要更深入了解的可以直接看 Rails 關於這部分的&lt;a href=&quot;https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L37&quot;&gt;原始碼&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;囉。&lt;p&gt;&lt;/p&gt;
&lt;h3 id=&quot;總結&quot;&gt;總結&lt;/h3&gt;
&lt;p&gt;本解決方案是直接縮減 Rails 在 ActvieRecord 裡 &lt;code&gt;:string&lt;/code&gt; 資料類型中的長度，以符合 MySQL 所支援的大小。&lt;/p&gt;
&lt;p&gt;但如前面所述，若是你已經有資料，且你無法確保現有資料中 &lt;code&gt;:string&lt;/code&gt; 資料類型的值都在 191 以下的話，就會比較麻煩。可能就要先將結構與資料分別 dump，改完結構後，再將資料中超過長度的值做縮減，最後再重新 import 到資料庫裡。這部分可參考 XDite 關於這部分所書寫的&lt;a href=&quot;http://blog.xdite.net/posts/2013/12/19/mysql-with-utf8mb4&quot;&gt;部落格文章&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&quot;解決方案-2&quot;&gt;解決方案 (2)&lt;/h2&gt;
&lt;p&gt;這個方案我不打算如前一個方案般詳述，主要是因為我沒有實際去實驗，而只是將網路上看到的資料做個整理、筆記而已，實際運作上狀況如何，就不敢保證了，但至少紀錄了一個方向。&lt;/p&gt;
&lt;h3 id=&quot;方向-1&quot;&gt;方向&lt;/h3&gt;
&lt;p&gt;在 MySQL 5.5.14 時，新增了一個名為 &lt;code&gt;innodb_large_prefix&lt;/code&gt; 的功能，啟用後可將鍵值長度擴充到 3072 bytes。而這個功能相依於 MySQL 5.5 新增的一個叫做 Barracuda 的 innodb 的檔案格式（File Formate），這個檔案格式除了支援 innodb 原有的資料列格式（Row Formats），還包括了新的資料列格式：COMPRESSED 和 DYNAMIC。&lt;/p&gt;
&lt;p&gt;所以要解決這個問題，就是修改 MySQL 的選項，將檔案格式改成 Barracuda，並且啟用 innodb_large_prefix 這個選項去擴充鍵值長度。最後在 Rails 建立表格時，指定使用 DYNAMIC 的資料列格式即可。&lt;/p&gt;
&lt;h3 id=&quot;方法-1&quot;&gt;方法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;在進行本方法前，請先將資料庫備份，或是使用虛擬機器或是容器開一個新的資料庫伺服器作為練習、試驗&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 MySQL 的設定檔 &lt;code&gt;my.conf&lt;/code&gt; 加入下面內容：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[mysqld]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;innodb_file_format = Barracuda&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;innodb_file_per_table = 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;innodb_large_prefix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 Rails 部分有兩個選項，擇一即可，見仁見智。有興趣的可以參考在同一篇 Issue 裡，從&lt;a href=&quot;https://github.com/rails/rails/issues/9855#issuecomment-57666389&quot;&gt;這篇回覆&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;開始的討論，主要就是 @NaN1488 和 @yyyc514 兩人回覆的部分。&lt;/p&gt;
&lt;h4 id=&quot;rails-1&quot;&gt;Rails (1)&lt;/h4&gt;
&lt;p&gt;在 migration 中的 &lt;code&gt;create_table&lt;/code&gt; 方法加入 &lt;code&gt;option&lt;/code&gt; 參數：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;create_table :table_name, options: &#39;ROW_FORMAT=DYNAMIC&#39; do |t|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;rails-2&quot;&gt;Rails (2)&lt;/h4&gt;
&lt;p&gt;若是覺得要在每個有建立資料表的 migration 一一加入上述選項的參數太麻煩的話，也可以直接加入一個 MonkeyPatch。這個 patch 會幫你在建立資料表時直接幫你加入該參數。&lt;/p&gt;
&lt;p&gt;在專案目錄下新增 &lt;code&gt;./config/initializers/ar_innodb_row_format.rb&lt;/code&gt; 這個檔案，並貼上程式碼：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ActiveSupport.on_load :active_record do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  module ActiveRecord::ConnectionAdapters   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    class AbstractMysqlAdapter &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      def create_table_with_innodb_row_format(table_name, options = {}) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        table_options = options.reverse_merge(:options =&gt; &#39;ENGINE=InnoDB ROW_FORMAT=DYNAMIC&#39;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        create_table_without_innodb_row_format(table_name, table_options) do |td|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         yield td if block_given? &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      alias_method_chain :create_table, :innodb_row_format &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;總結-1&quot;&gt;總結&lt;/h3&gt;
&lt;p&gt;與前一方案是透過修改 Rails 對 string 欄位類型的預設長度達到目的，這個方案則是透過升級、修改 MySQL 的設定檔，擴大鍵值長度去修正這個錯誤。&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;兩個方案方向不一樣，所以也沒有孰優孰劣，就看開發者當前的專案適合哪個方案了。若是沒有資料庫修改權限的，第一個方案我想就是一個挺貼切的做法，也讓專案在部署的難度降低。若是擁有資料庫伺服器管理權限，也可以使用第二個方案，直接一勞永逸囉。&lt;/p&gt;
&lt;h2 id=&quot;附錄unicode-與-utf&quot;&gt;附錄：Unicode 與 UTF&lt;/h2&gt;
&lt;p&gt;Unicode 是一種文字、符號在電腦科學領域的業界標準，由非營利機構 The Unicode Consortium 負責。在 1991 年 10月發布第一個版本，隔年 6 月發布 1.0.1 擴增了中日韓統一表意文字最初的 20,902 個字，之後陸陸續需編修與擴增。最近的發布是在 2015 年 6 月時的 8.0 版本，總計有 120,737 個字符。&lt;/p&gt;
&lt;p&gt;UTF 為 Unicode Transformation Format，中文為 Unicode轉換格式，即為 Unicode 的實作方式。&lt;/p&gt;
&lt;h3 id=&quot;utf-8&quot;&gt;UTF-8&lt;/h3&gt;
&lt;p&gt;UTF-8 的全名為 8-bit Unicode Transformation Format，即以 1 個位元組（1-byte = 8-bit）為單位，用 1 到 4 個位元組表示一個字符編碼&lt;a href=&quot;http://blog.fntsr.tw/articles/293/#fn-293-2&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;由於 UTF-8 的長度是可變動的，所以 ASCII 可以作為 UTF-8 的一個子集，所以現存的 ASCII 文字不需要轉換。&lt;/p&gt;
&lt;h4 id=&quot;utf8mb3utf8mb4&quot;&gt;utf8mb3、utf8mb4&lt;/h4&gt;
&lt;p&gt;utf8mb3、utf8mb4 都是 MySQL 所支援的 Unicode 編碼實作，兩者的差別在於 utf8mb3 最大佔用長度為 3-byte，utf8mb4 則為 4-byte。所以其實兩者幾乎是一樣的，但是 utf8mb4 多了對擴充字符的支持，如本篇文章所提到的表情符號。&lt;/p&gt;
&lt;p&gt;utf8mb4 是 MySQL 5.5 所新增的，因為原本 MySQL 5.5 的 utf8 只有支持最大佔用長度為 3-byte，所以新增這個實作作為擴充。到了 MySQL 6.0，原本的 utf8 被更名為 utf8mb3，並加入新的 utf8 編碼實作，並預設支最大佔用長度為 4-byte。&lt;a href=&quot;http://blog.fntsr.tw/articles/293/#fn-293-3&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rails/rails/issues/9855&quot;&gt;MySQL utf8mb4 breaks ActiveRecord schema setup&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mathiasbynens.be/notes/mysql-utf8mb4&quot;&gt;How to support full Unicode in MySQL databases&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://encoding.spec.whatwg.org/#utf-8&quot;&gt;Encoding: Living Standard&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.utf8-chartable.de/unicode-utf8-table.pl?start=128512&quot;&gt;UTF-8 encoding table and Unicode characters&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mothereff.in/byte-counter&quot;&gt;UTF-8 string length &amp;#x26; byte counter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.kamipo.net/entry/2012/11/13/102024&quot;&gt;MySQL(InnoDB) で “Index column size too large. The maximum column size is 767 bytes.” いわれるときの対策&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;原來的規範允許長達 6 位元組，但是在 2003 年 11 月 UTF-8 被 RFC 3629 重新規範，只能使用原來 Unicode 定義的區域，即 &lt;code&gt;U+0000&lt;/code&gt; 到 &lt;code&gt;U+10FFFF&lt;/code&gt; 。 &lt;a href=&quot;http://blog.fntsr.tw/articles/293/#fnref-293-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;這部分可以參照 &lt;a href=&quot;http://forums.mysql.com/read.php?3,199803,199803&quot;&gt;MySQL 6.0.4 Alpha 的 Release Note&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。 &lt;a href=&quot;http://blog.fntsr.tw/articles/293/#fnref-293-3&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="database" />
    <category term="mysql" />
    <category term="ruby-on-rails" />
    <category term="web" />
  </entry>
  <entry>
    <title>從 Jekyll 遷移至 WordPress</title>
    <link href="https://fntsr.tw/announce/from-jekyll-to-wordpress/" />
    <id>https://fntsr.tw/announce/from-jekyll-to-wordpress/</id>
    <updated>2016-02-15T19:53:14.000Z</updated>
    <published>2016-02-15T19:53:14.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/259/&quot;&gt;從 Jekyll 遷移至 WordPress - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;。這段時間雖然沒發文，卻也是有在做部落格的更新，主軸就如標題所述，將部落格的系統從靜態網站產生器的 Jekyll 移至 WordPress。原因就如&lt;a href=&quot;https://www.facebook.com/permalink.php?story_fbid=1717797918453517&amp;#x26;id=100006699756364&quot;&gt;去年 12 月的 Facebook 貼文&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;所述，主要是圖片管理不易。雖然 &lt;a href=&quot;https://www.facebook.com/xdite&quot;&gt;XDite&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 創辦的 &lt;a href=&quot;http://logdown.com/&quot;&gt;Logdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的確在這部分做得很好，但 &lt;a href=&quot;http://logdown.com/&quot;&gt;Logdown&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 也如創辦人自己所述是疏於經營的，讓我對他的信心不高XD。&lt;a href=&quot;https://www.facebook.com/wake.gs&quot;&gt;Wake&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 推薦的方式挺有趣，但最近實在沒時間投入一個成熟度不高且又要多項服務自己整合的方式 Orz。所以決定還是回到以前碰過 WordPress 作為部落格的基底。&lt;/p&gt;
&lt;p&gt;對於部落格系統、服務使用歷程大概是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pixnet&lt;/li&gt;
&lt;li&gt;Blogger&lt;/li&gt;
&lt;li&gt;WordPress + VPS&lt;/li&gt;
&lt;li&gt;Octpress + Github&lt;/li&gt;
&lt;li&gt;Jekyll + Github&lt;/li&gt;
&lt;li&gt;WordPress + Docker on VPS&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;繞了一圈，還是回到 WordPress，這個結果也是挺讓人啼笑皆非的。不過這些年來 WordPress 的確是也變滿多的，介面上、客製化、外掛數量等。而且有了 Docker 後，在架設與部署上對環境的規劃時間也減少了，耗費了一段時間去重新投入這塊，本篇主要就是在講述從 Jekyll 遷移到 WordPress 的歷程，包括了主題客製化（Theme Customize）的開發、漢字標準格式的整合、外掛（Plugin）、環境部署與架設幾個部分。&lt;/p&gt;
&lt;h5 id=&quot;目錄&quot;&gt;目錄&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;WordPress 的改變&lt;/li&gt;
&lt;li&gt;主題客製化&lt;/li&gt;
&lt;li&gt;漢字標準格式&lt;/li&gt;
&lt;li&gt;外掛（Plugin）
&lt;ol&gt;
&lt;li&gt;Jetpack 由 WordPress.com 團隊開發&lt;/li&gt;
&lt;li&gt;Crayon Syntax Highlighter&lt;/li&gt;
&lt;li&gt;UpdraftPlus – Backup/Restore&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;環境部署與架設&lt;/li&gt;
&lt;li&gt;結語&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;wordpress-的改變&quot;&gt;WordPress 的改變&lt;/h2&gt;
&lt;p&gt;這裡的改變不是指 WordPress 近年改變的觀察，畢竟是我沒有一直關注這個社群，而是指自己很久以前接觸 WordPress 到現在重新接觸後，感受變化特別多的部分。但其實我也久沒使用 WordPress 了，有種我是在使用一個新的 CMS 的感覺XD。也聽說最近幾年 WordPress 已從一個 Blog System 演化成一個成熟的 CMS 了呢。&lt;/p&gt;
&lt;p&gt;最直觀的改變大概就是管理後台的介面吧。會想從靜態網站產生器換到 WordPress 無非就是希望管理上能更加簡易、直觀和自動，有一個簡潔、美觀的後台的確是挺對我的胃口的。值得一提的是 WordPress 的後台也有支援 RWD 的瀏覽，或許之後可以用平板做簡單的管理。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-下午8.12.13.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-下午8.12.13.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;另一個比較友善的部分，系統、外掛與主題若有更新，後台都會提醒你，讓你手動去更新。說是手動，事實上也就是一鍵更新，不用其他的操作XD，雖然很多人都說 WordPress 可能資安漏洞比較多，但是有發現的漏洞官方應該都會迅速更新補上，並提醒使用者可更新，我覺得至少減輕了在資安上的不少疑慮。當然，若要和靜態網站產生器的部落格比起來，是不可能沒有漏洞的，這部分就看個人的平衡點和抉擇了。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-下午8.19.48.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-下午8.19.48.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;在 WordPress 進階功能的補足上，官方也有推出一個外掛叫做 &lt;a href=&quot;https://wordpress.org/plugins/jetpack/&quot;&gt;Jetpack&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，一次幫你補充滿多後台的功能。在寫作與閱讀上，比較讓我注重的就是有&lt;a href=&quot;https://en.support.wordpress.com/markdown-quick-reference/&quot;&gt;提供 Markdown 語法的支援&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;（對，就算換到 WordPress 我還是離不開 Markdown。 XD)，以及能使用 Latex 語法去加入較美觀的數學式，再來就是也有提供許多媒體或社交網站的 Shortcode Embeds，讓內嵌 Facebook 的發文、Instgram 的照片、Youtube 的影片、SlideShare 的簡報更加的方便。這些寫作上的方便性也算是拉近了 WordPress 與 Logdown 的差異，也算是我願意回到 WordPress 的原因之一。&lt;/p&gt;
&lt;p&gt;比較可惜的是，儘管在寫作上多了不少進階功能，甚至提供了 Markdown 語法，但在程式設計師最關注的程式碼上色仍沒有實作。&lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fn-259-1&quot;&gt;1&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;雖然能理解這不是一般使用者的必備需求，但是多少還是有點遺憾。不過還好在 WordPress 社群中已經有不少程式碼上色的外掛創作，我會在後面的章節提到我是如何實作這個需求。&lt;/p&gt;
&lt;h2 id=&quot;主題客製化theme-customize&quot;&gt;主題客製化（Theme Customize）&lt;/h2&gt;
&lt;p&gt;一開始要投入這塊時，在網路上一直找不到一個有系統的整裡，直接去去看官網的文件，也比較偏向工具書，沒辦法以比較快速的途徑帶過整體概念。所幸後來找到了 &lt;a href=&quot;http://fundesigner.net/&quot;&gt;FunDesigner&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 提供的 &lt;a href=&quot;http://fundesigner.net/wordpress-theme-development-guide/&quot;&gt;免費 WORDPRESS 佈景主題開發指南電子書&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，讓我得以把整體概念暸解一遍，再透過&lt;a href=&quot;https://codex.wordpress.org/Function_Reference&quot;&gt;官方的文件&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;做比較細節的暸解，總算將在 Jekyll 已經有基礎的前端設計移植過來了。&lt;/p&gt;
&lt;p&gt;早在使用 Jekyll 時，我已經針對自己偏好的風格去做部落格主題的實作，要移植過來主要就是將 Jekyll 的語法轉換成 WordPress 提供的 PHP 函式。這部分如上述，透過該電子書以及官方文件一一完成移植了。&lt;/p&gt;
&lt;p&gt;不過因為原本的設計仍有許多地方要加強，尤其是後面 Sass 的程式碼凌亂不堪，所以也順勢重新整理，並加上原本缺乏的 RWD，開始做比較細節的改動，讓部落格在手機、平板、電腦上都能有比較良好的瀏覽體驗。&lt;/p&gt;
&lt;p&gt;我將這個主題命名為 Modest，即為&lt;strong&gt;謙虛的&lt;/strong&gt;意思，與部落格名稱相呼應，希望讓讀者感受的風格是比較平淡無華，但在內容瀏覽上是舒適的。&lt;/p&gt;
&lt;p&gt;這部分唯一遇到的問題大概就是由於我不是公開的主題，每次有修改後都要重新上傳，導致一些主題的客製化欄位資料遺失。後來改用 Docekr 將這部分的程式 Volume 到伺服器上，再透過 Git 去做更新，就算是改善了這個問題，這部分的實作我也會後面提到。&lt;/p&gt;
&lt;h2 id=&quot;漢字標準格式&quot;&gt;漢字標準格式&lt;/h2&gt;
&lt;p&gt;既然是一個注重內容以及其瀏覽舒適度為訴求的主題，那對於字體、字型、排版等都會有比較注重的調整，在這部分我使用了&lt;a href=&quot;https://css.hanzi.co/&quot;&gt;漢字標準格式&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;這套前端框架，幫我處理漢字瀏覽上的一些細節調整，包括字型、縮進、強調等，去取代西方的一些不適用在漢字瀏覽的慣例。細節可以到官方使用手冊瀏覽。&lt;/p&gt;
&lt;p&gt;比較有趣的是該框架還有提供高級排版功能，我啟用了&lt;strong&gt;章節的編排&lt;/strong&gt;這個功能，讓框架自動幫我在標題加上計數，以方便讀者瞭解文章的結構。&lt;/p&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;p&gt;我在中國的知乎網站上找的一篇名為&lt;a href=&quot;https://www.zhihu.com/question/19646540&quot;&gt;〈中国的文言文为什么没有标点符号？〉&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;的討論串，裡面最高評分的解答去搜集了許多古籍資料做考證，讓我了解到在古文中標點符號的形式與沿革。不過重點是在於幾乎所有的句讀都是偏右的形式做排版（古文多以直書做書寫排版），換成現代網頁排版形式，也就是偏下。&lt;/p&gt;
&lt;p&gt;之後我又透過變數設定分別使用同一篇文章去比較這兩種排版在閱讀上的感受差異，如下圖：&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-上午12.02.29.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-上午12.02.29.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-上午12.02.43.jpg&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-15-上午12.02.43.jpg&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;雖然還是覺得比較習慣居中的排版方式，但是撇除習慣，偏下的排版方式，在閱讀上能將句子斷的更明顯，閱讀上更加容易，所以最後還是決定採用偏下的排版方式。不過倒也想知道讀者的感覺，你們覺得是採居中的方式比較好閱讀呢？還是偏下呢？若可以，透過留言讓我知道吧。&lt;/p&gt;
&lt;h2 id=&quot;外掛plugin&quot;&gt;外掛（Plugin）&lt;/h2&gt;
&lt;p&gt;因為才剛從 Jekyll 移植過來，所以安裝的外掛到不會太多，畢竟原本的環境就偏向簡單，所以也不太會有額外的需求，另一方面也是讓部落格的系統盡量簡化。會安裝外掛的主要就是針對三大需求：Markdown 語法支援、程式碼上色、部落個資料備份。所以我也就只安裝三個外掛，在這邊我會針對這三個外掛做些簡介。&lt;/p&gt;
&lt;h3 id=&quot;jetpack-由-wordpresscom-團隊開發&quot;&gt;Jetpack 由 WordPress.com 團隊開發&lt;/h3&gt;
&lt;p&gt;這個外掛在前面已經有約略提過了，在目前 &lt;code&gt;3.9.1&lt;/code&gt; 的版本裡提供了 37 項服務，多數服務都挺實用的，尤其是 Markdown 語法的支援還算完整（可惜沒有辦法自行擴充或調整）。當然，除了前面提過的在寫作上的支援外，也有針對安全性去封鎖惡意 IP 的服務、監聽網站是否離線的服務、減輕主機負擔的圖片快取服務等等，有興趣的可以自行安裝該外掛去查看。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-16-下午7.06.42.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-16-下午7.06.42.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;另外他也有簡單的網誌統計功能，讓你簡單直觀了解訪客流量的統計，這一方面也算是解決了我一項使用 Jekyll 的苦惱，讓我不用每次想看訪客資料都要到 Google Analysis，而可以先透過這邊的統計去了解。有想要比較深入的報表再去閱讀 Google Analysis 的資料即可。&lt;/p&gt;
&lt;h3 id=&quot;crayon-syntax-highlighter&quot;&gt;Crayon Syntax Highlighter&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;2016-09-22: 本站已改用 highlight.js 作為著色工具，可以參照 &lt;a href=&quot;https://blog.fntsr.tw/articles/2016/09/22/from-crayon-to-highlightjs/&quot;&gt;用 highlight.js 作為 wordpress 程式碼著色的程式&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;身為一個程式設計師，怎麼可以忍受部落格的程式碼沒有上色呢？不能嘛！XD&lt;/p&gt;
&lt;p&gt;於是我在 WordPress 的外掛以&lt;code&gt;Syntax Highlight&lt;/code&gt;為關鍵字去尋找，最後選定了目前活躍安裝度最高的 &lt;a href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon Syntax Highlighter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。這款外掛的優點是彈性選項多，你可以針對目前的需求去做功能的勾選，另外他也能針對程式碼上色去選擇你喜歡的風格，甚至基於該風格再另外做客製化修正。而最重要的語言支援度上，它支援了 63 種語言，其中包括我常用的 C#, CSS, Java, JavaScript, PHP, Python, Ruby, Sass, Shell, YAML 等，最近比較出名的 Go, Swift 也有納入支援。有興趣進一步知道它支援哪些上色風格和語言的可以到他的 &lt;a href=&quot;https://github.com/aramk/crayon-syntax-highlighter&quot;&gt;Github Ropository&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 做瀏覽。&lt;/p&gt;
&lt;p&gt;不過儘管 Crayon 提供許多彈性的設定，但對我來說仍然有些地方不足。比如說他會直接把 &lt;code&gt;&amp;#x3C;pre&gt;&lt;/code&gt; 標籤轉換成自己的標籤以提供上色服務，但是他的上色的預設風格（例如純文字的環境）又有奇怪的上色，當我希望能提供單一色調 &lt;code&gt;&amp;#x3C;pre&gt;&lt;/code&gt; 時就會衝突。所以我將他的 Paser 說了點變化，讓它只會抓取有 &lt;code&gt;crayon&lt;/code&gt; 屬性並以其結尾的 &lt;code&gt;&amp;#x3C;pre&gt;&lt;/code&gt; 標籤，像是這樣 &lt;code&gt;&amp;#x3C;pre class=&quot;...&quot; crayon&gt;...&amp;#x3C;/pre&gt;&lt;/code&gt;，這樣我就可以讓一般的 &lt;code&gt;&amp;#x3C;pre&gt;&lt;/code&gt; 標籤和給 Crayon 上色的部分共存了。&lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fn-259-2&quot;&gt;2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;修改方式很簡單，使用外掛編輯器打開 &lt;code&gt;wp.php&lt;/code&gt; 這份檔案，如下所述修改 &lt;code&gt;capture_crayons()&lt;/code&gt; 的內容即可。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if ((CrayonGlobalSettings::val(CrayonSettings::CAPTURE_PRE) || $skip_setting_check) &amp;#x26;&amp;#x26; $in_flag[CrayonSettings::CAPTURE_PRE]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # 刪除這行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $wp_content = preg_replace_callback(&#39;#(?&amp;#x3C;!\$)&amp;#x3C;\s*pre(?=(?:([^&gt;]*)\bclass\s*=\s*([&quot;\&#39;])(.*?)\2([^&gt;]*))?)([^&gt;]*)&gt;(.*?)&amp;#x3C;\s*/\s*pre\s*&gt;#msi&#39;, &#39;CrayonWP::pre_tag&#39;, $wp_content);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # 以這行取代之&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $wp_content = preg_replace_callback(&#39;#(?&amp;#x3C;!\$)&amp;#x3C;\s*pre(?=(?:([^&gt;]*)\bclass\s*=\s*([&quot;\&#39;])(.*?)\2([^&gt;]*))?)([^&gt;]*)crayon&gt;(.*?)&amp;#x3C;\s*/\s*pre\s*&gt;#msi&#39;, &#39;CrayonWP::pre_tag&#39;, $wp_content);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;另外，我也希望能整合 Markdown 語法去支援類似 &lt;code&gt;~~~php&lt;/code&gt; 的語法，但是 Jetpack 提供的 Markdown 會自動將這種用法將 &lt;code&gt;~~~&lt;/code&gt; 轉成 &lt;code&gt;&amp;#x3C;pre&gt;&amp;#x3C;code&gt;&lt;/code&gt; 、將 &lt;code&gt;~~~php&lt;/code&gt; 轉成 &lt;code&gt;&amp;#x3C;pre&gt;&amp;#x3C;code class=&quot;php&quot;&gt;&lt;/code&gt; ，而不是 Crayon 可以 Parse 的語法。所以我做了以下修改。首先一樣修改 &lt;code&gt;wp.php&lt;/code&gt;的 &lt;code&gt;capture_crayons()&lt;/code&gt; 方法，在剛剛修改的 &lt;code&gt;if&lt;/code&gt; 判斷是裡新增一行去抓取 &lt;code&gt;&amp;#x3C;pre&gt;&amp;#x3C;code class=&quot;php&quot;&gt;...&amp;#x3C;/code &gt;&amp;#x3C;/pre&gt;&lt;/code&gt; &lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fn-259-3&quot;&gt;3&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的敘述改成 Crayon 可以讀取的格式，如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if ((CrayonGlobalSettings::val(CrayonSettings::CAPTURE_PRE) || $skip_setting_check) &amp;#x26;&amp;#x26; $in_flag[CrayonSettings::CAPTURE_PRE]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # 加入這行，要放在這個判斷式裡的首行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $wp_content = preg_replace_callback(&#39;#(?&amp;#x3C;!\$)&amp;#x3C;\s*pre\s*&gt;\s*&amp;#x3C;code&gt;(.*?)&amp;#x3C;/code&gt;\s*&amp;#x3C;\s*/\s*pre\s*&gt;#msi&#39;, &#39;CrayonWP::pre_code_tag&#39;, $wp_content);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # 這是我們在上面加入，不過本次修改不相依上面的修改，不一定改過這行。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $wp_content = preg_replace_callback(&#39;#(?&amp;#x3C;!\$)&amp;#x3C;\s*pre(?=(?:([^&gt;]*)\bclass\s*=\s*([&quot;\&#39;])(.*?)\2([^&gt;]*))?)([^&gt;]*)crayon&gt;(.*?)&amp;#x3C;\s*/\s*pre\s*&gt;#msi&#39;, &#39;CrayonWP::pre_tag&#39;, $wp_content);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然後在 &lt;code&gt;wp.php&lt;/code&gt; 的 &lt;code&gt;class CrayonWP {}&lt;/code&gt; 中加入一個靜態方法：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;class CrayonWP {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ....&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # 加入此方法去轉換格式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    public static function pre_code_tag($matches) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $lang = $matches[1];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $content = $matches[2];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        # 這邊要注意如果你沒有套用上面 `&amp;#x3C;pre crayon&gt;` 的修改，要將 ` crayon` 刪除&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $result = &quot;&amp;#x3C;pre class=\&quot;lang:{$lang}\&quot; crayon&gt;{$content}&amp;#x3C;/pre&gt;&quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        return $result;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如此就可以成功支援 &lt;code&gt;~~~language&lt;/code&gt; 的語法了。&lt;/p&gt;
&lt;h3 id=&quot;updraftplus--backuprestore&quot;&gt;UpdraftPlus – Backup/Restore&lt;/h3&gt;
&lt;p&gt;這是用來作為備份和還原的外掛，這部分就見仁見智了，你可使用 Jetpack 提供的付費備份還原服務，也可以使用其他比較知名的外掛，以關鍵字 &lt;code&gt;Backup&lt;/code&gt; 去搜尋就會找到挺多的。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-16-下午11.59.22.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-16-下午11.59.22.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;本部落格一樣是採用目前活躍安裝度最高的外掛，叫做 UpdraftPlus Backup/Restore，他擁有我需要的基本功能如最基本的備份和還原、還有定期備份、將備份檔同步到雲端空間，基本上我只要有這三個就足以滿足我的需求了。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-17-上午12.03.42.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-17-上午12.03.42.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;另外我也針對備份做了雙保險，就是利用 Docker 將 WordPress 存放的資料的 &lt;code&gt;wp-content&lt;/code&gt; 以及 MariaDB 的資料庫檔案 Volume 出來，然後再透過排程去執行腳本，定期將這兩個資料夾壓縮備份到 Nas 上，這部分我會在下一個章節細述。&lt;/p&gt;
&lt;h2 id=&quot;環境部署與架設&quot;&gt;環境部署與架設&lt;/h2&gt;
&lt;p&gt;自從會使用 Docker 後，要架設一個服務我都會率先尋找是否已經有相關映像檔（Image），以節省安裝環境與架設服務的時間。Wordpress 身為知名的部落格系統，官方很早就有提供其映像檔，詳細資訊可看 &lt;a href=&quot;https://hub.docker.com/_/wordpress/&quot;&gt;WordPress 在 Docker Hub 的頁面&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;而隨著 Docker Compose 逐漸普遍與成熟，官方也有提供 &lt;code&gt;docker-compose.yml&lt;/code&gt; 的設定樣本給使用者，事實上該設定檔已足以讓我架設 WordPress。但為了開發方便以及避免不小心把容器砍掉導致資料消逝，或是未來升級版本更加方便，我都會習慣把&lt;strong&gt;資料&lt;/strong&gt;所在資料夾做 Volume，讓其資料與 Host 上同步。在新增 Volumes 的設定後，我的 &lt;code&gt;docker-compose.yml&lt;/code&gt; 設定檔如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wordpress:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: wordpress:4.7.1-php7.1-apache&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  restart: always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  environment:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    WORDPRESS_DB_PASSWORD: YOUR_PASSWORD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  links:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - db:mysql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ports:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - 8080:80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - ./wp-content:/var/www/html/wp-content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;db:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: mariadb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  restart: always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  environment:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    MYSQL_ROOT_PASSWORD: YOUR_PASSWORD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - ./database:/var/lib/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;幸運的是，這些映像檔都有針對這部份做最佳化，你不用擔心在 Host 上無資料，因而將空資料夾取代掉容器中原本有檔案的資料夾，導致容器建立失敗。Wordpress 的映像檔會先建立容器後，再把 WordPress 的程式檔案丟到 &lt;code&gt;/var/www/html/&lt;/code&gt; 中以進行安裝。同樣的 MariaDB 的映像檔也有類似的支援。因此儘管一開始沒有資料，仍可直接以此設定檔建立容器。&lt;/p&gt;
&lt;p&gt;所以環境建立與部署很簡單，只要伺服器上有 Docker 和 Docker-Compose 即可。隨後建立一個資料夾，並將上面的設定檔寫在該資料夾下的 &lt;code&gt;docker-compose.yml&lt;/code&gt; 中，最後在該資料夾下輸入指令 &lt;code&gt;docker-compose up&lt;/code&gt;，Wordpress 就建立起來啦！&lt;/p&gt;
&lt;p&gt;最後，我們就透過 Host 的命令列，移動到 &lt;code&gt;wp-content/themes/&lt;/code&gt; 資料夾下，使用 git 將自己客製化的主題複製（&lt;code&gt;git clone&lt;/code&gt;）到此目錄下，再利用 WordPress 後台的佈景主題頁面去啟用，就成功將我的主題套用在 WordPress 上啦！&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-17-上午6.06.43.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/螢幕快照-2016-02-17-上午6.06.43.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;從去年十二月開始有念頭要將部落格從 Jekyll 遷移到 WordPress 上，到實際完成大概經歷了兩個月，實際動工的時間大概就是從農曆新年假期開始的約莫兩週左右。這一週耗費最多時間的大概就是在主題的移植與改進，也趁機弄熟了 WordPress 主題的製作方式，再來大概就是去將程式碼高亮、資料備份等雜事都推上軌道。&lt;/p&gt;
&lt;p&gt;另外耗費許多時間的大概就是將文章轉過來，這部分我就沒有透過程式處理了，畢竟網路上的程式大概都是幫你從 WordPress 轉移到 Jekyll，我這種遷移反而是小眾了，況且文章還不多，比起自己在寫程式或正規表達式，手動轉倒是比較省事。另一方面自己手動轉過來也是為了重新審視自己以前寫的文章，知道未來有空要針對哪些文章做維護，尤其是 Docker 相關的文章，可能過期不少了。&lt;/p&gt;
&lt;p&gt;嘛，耗費不少時間做這件事，希望算有移除以前懶得寫文章的障礙，讓自己能願意再多寫文章充實這個部落個囉。接下來半年算是自己的論文衝刺期，或許也會將蒐集到的資料與想法，局部的放在這個地方作為筆記。&lt;/p&gt;
&lt;p&gt;最後，新的西元年、農曆年，還請大家多多指教。 &amp;#x3C;(_ _)&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;雖然 WordPress 官方的 Markdown Quick Reference 有提到是有支援的，但我自行嘗試後是沒有成功上色的，不知道問題是出在哪裡（版本不同、文件過期之類的？）。若是有讀者實驗後是有的，還煩請跟我說一聲，我們再討論交流一下。w &lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fnref-259-1&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;另一種方案就是新增一個語言支援（例如取名為 txt），然後不使用任何配色。 &lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fnref-259-2&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在寫這邊文章時，發現 Jetpack Markdown 只要使用到含有 &lt;code&gt;&amp;#x3C;/code&gt;&lt;/code&gt; 的 code 語法時就會 Parser 錯誤，如 &lt;code&gt;...&amp;#x3C;/code&gt;...&lt;/code&gt; 。但若中間有加空格如 &lt;code&gt;&amp;#x3C;/ code&gt;&lt;/code&gt; 或 &lt;code&gt;&amp;#x3C;/code &gt;&lt;/code&gt; 就沒事，所以在這裡我們才這樣表示。在註解裡則是裡用 Markdown 可以使用 HTML Tag，且 Parser 不會去解析 HTML Tag 中的文字的特性，使用 &lt;code&gt;&amp;#x3C;code&gt;&amp;#x26;lt;/code&amp;#x26;gt;&amp;#x3C;/code&gt;&lt;/code&gt; 這種較難維護的語法做表示。 &lt;a href=&quot;http://blog.fntsr.tw/articles/259/#fnref-259-3&quot;&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/svg/21a9.svg&quot; alt=&quot;↩&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
    <category term="docker" />
    <category term="jekyll" />
    <category term="wordpress" />
  </entry>
  <entry>
    <title>世紀帝國 II 系列：HD 4.4 Patch 目前已知問題</title>
    <link href="https://fntsr.tw/articles/aoe-ii-awful-patch-4-4/" />
    <id>https://fntsr.tw/articles/aoe-ii-awful-patch-4-4/</id>
    <updated>2015-11-08T01:15:33.000Z</updated>
    <published>2015-11-08T01:15:33.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/794/&quot;&gt;世紀帝國 II 系列：HD 4.4 Patch 目前已知問題 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;昨天跟朋友打了一場，遇到了數個問題：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.「閒置村民」功能無法使用&lt;/strong&gt;&lt;br&gt;
不是快捷鍵的問題，是連介面上的案件都一樣。當你按下這個功能沒有反應，別以為你的村民變聰明自己找工作了，點開經濟小地圖，上面還是一堆點在閃的唷！ o_&amp;#x3C;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 一直掉線&lt;/strong&gt;&lt;br&gt;
我朋友是只要在遊戲中打 16，就會掉線。嗚嗚，只是想打快攻告知盟友說「發現敵人了」，就被 AI 國防布了嗎？QQ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 無法恢復多人遊戲&lt;/strong&gt;&lt;br&gt;
掉線就算了。重點是，「恢復」功能也炸了啊！！！完全沒辦法恢復剛剛存檔離開的遊戲，只能重新開始。囧&lt;/p&gt;
&lt;p&gt;搜索了一下這些問題，發現 Reddit 鄉民也有人在講，才知道是 Patch 寫壞了。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/aoe2/comments/3rvb66/the_44_patch_is_completely_broken/?ref=share&amp;#x26;ref_source=embed&amp;#x26;utm_content=body&amp;#x26;utm_medium=post_embed&amp;#x26;utm_name=bb24c8d7713742a09520d3f8379bc2b4&amp;#x26;utm_source=embedly&amp;#x26;utm_term=3rvb66&quot;&gt;Reddit - Dive into anything&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;現在只能希望官方趕快釋出好的更新，而不是上演為了修一個 Bug 而跑出更多 Bug 的慘劇。&lt;/p&gt;
&lt;p&gt;嗚嗚，老師說釋出前要做回歸測試，你有沒有在聽？沒有，因為你只想到你自己！ m9&lt;/p&gt;</content>
    <category term="aoe" />
  </entry>
  <entry>
    <title>如何用 Docker 生態系遷移您的專案</title>
    <link href="https://fntsr.tw/articles/ship-your-projects-with-docker-ecosystem/" />
    <id>https://fntsr.tw/articles/ship-your-projects-with-docker-ecosystem/</id>
    <updated>2015-11-01T16:00:44.000Z</updated>
    <published>2015-11-01T16:00:44.000Z</published>
<content type="html">&lt;p&gt;本簡報是為 PHPConf2015 議程所準備的，但陸續會在針對簡報做維護，並且在這邊回答會眾對於當天大會聽講但是沒有聽懂的部分。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;影片： &lt;a href=&quot;https://www.youtube.com/watch?v=B0Xw38EkFf8&amp;#x26;feature=youtu.be&quot;&gt;Youtube&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;簡報： &lt;a href=&quot;http://www.slideshare.net/ruoshiling/ship-your-projects-with-docker-ecosystem&quot;&gt;SlideShare&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://speakerdeck.com/fntsrlike/dang-zhuan-an-jian-gan-dang-qian-yi-ye-bu-zai-na-mo-nan-ship-your-projects-with-docker-ecosystem&quot;&gt;SpeakerDeck&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;會眾-q--a&quot;&gt;會眾 Q &amp;#x26; A&lt;/h2&gt;
&lt;h5 id=&quot;如何從-vagrant-轉移到-docker-compose&quot;&gt;如何從 Vagrant 轉移到 Docker-Compose&lt;/h5&gt;
&lt;p&gt;因為敝人之前對於 vagrant 的使用經驗不多，日後會再研究，並轉寫有關此問題實驗後的經驗分享。&lt;/p&gt;
&lt;h2 id=&quot;簡報修正紀錄&quot;&gt;簡報修正紀錄&lt;/h2&gt;
&lt;h5 id=&quot;2015-11-01&quot;&gt;2015-11-01&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;修正 p45 單字錯誤（ VALUME -&gt; VOLUME），感謝 &lt;a href=&quot;https://github.com/tjjh89017&quot;&gt;@date&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 告知。&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
    <category term="php" />
    <category term="talks" />
    <category term="web" />
  </entry>
  <entry>
    <title>2015 年 6 月到 10 月紀錄</title>
    <link href="https://fntsr.tw/announce/from-jun-to-oct-of-2015/" />
    <id>https://fntsr.tw/announce/from-jun-to-oct-of-2015/</id>
    <updated>2015-10-26T04:07:43.000Z</updated>
    <published>2015-10-26T04:07:43.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/197/&quot;&gt;2015 年 6 月到 10 月紀錄 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;自上次寫部落格，已經是六月初的事了。接下來就開始準備期末考、期末考後就開始正式接實驗室專案，然後一路忙到了現在。這段時間忙到時間都不是自己了，但也盡量在這段期間做了些改變。在此紀錄自己這段時間做的事以及對自己的改變吧。&lt;/p&gt;
&lt;h2 id=&quot;實驗室專案&quot;&gt;實驗室專案&lt;/h2&gt;
&lt;p&gt;這部分應該算是我忙碌的主因吧。我負責的實驗室專案預計在 2015 下半年要改版，然後要在年底釋出正式版。所以在六月時我開始搜集廠商（客戶）對於新版希望增加的功能或改善的項目，並且寫成改版計畫書。到了七月則開始繪製 Protoype，這裡我是用 OS X 提供的 Keynote 製作。&lt;/p&gt;
&lt;p&gt;到了八月則開始研究要怎麼去寫，原本就是用 Visual C# + .NET Framework 的 Winform 去實作，但因為客戶希望能在介面上更加專業點（嗯？好像客戶都很喜歡這樣形容自己想要的介面），基於 WPF 在使用者介面渲染能力較 WinForm 的能力較強，我開始研究 WPF，也算是趁這個機會學學新的東西。基本上 WinForm 和 WPF 我都沒有碰過，直接碰 WPF 的成本不會高多少，況且我又是網頁出身的，WPF 提供使用 XAML 編寫介面對我來說比 WinForm 的 Deisigner.cs 友善的多。&lt;/p&gt;
&lt;p&gt;不過在這邊我遇到的瓶頸反而不是 WPF 的 XAML 該怎麼寫，而是在於原本 Visual C# + .NET Framework 的程式編寫上我經驗不足、不習慣使用 IDE（Visual Studio）做開發，加上原本的程式碼歷經各個學長的編寫（研究所實驗室的專案，通常都這樣，一到兩年就會換一組開發人員），既沒有一致的風格，也沒留下完整的文件，讓我吃了不少苦頭。&lt;/p&gt;
&lt;p&gt;在使用 WPF 刻 UI 介面上顯得輕而易舉，難的是在邏輯的部份要怎麼跟原本方案中的相依專案做串接，還有要怎麼寫才能夠彈性的擴充。於是我的研究方向從 WPF 轉向了架構，開始研究各個 Pattern，最後被 MVVM 給吸引住，也看了很多範例與實作，學了很多新知識。最後也終於成功實作這部分。也對微軟發表的 prism 感到興趣，尤其是 Shell 和 Dependency Injection 的概念，讓我眼界大開，也希望導入這種風格在新版的介面。但最後遇到了不少瓶頸，遲遲未導入。儘管在知識上已經逐漸融會貫通，但在進度上仍停留在介面不知道怎麼跟舊有的邏輯整合而停滯。&lt;/p&gt;
&lt;p&gt;到了九月初，承受客戶壓力的老闆，認為我這邊的進度太慢了，跟我詢問原因。或許是表達不夠清楚，老闆認為我進度停滯的主因在於 WPF，於是下了決定宣布說，放棄 WPF，改用 WinForm 去做。聽到這個決議的當下其實我很震驚，一個月研究的成果就這樣被扼殺，其實我是感到憤怒與心灰意冷的。原版連 GUI 介面都刻的和 Prototype 幾乎相近了，現在卻要我改用 WinForm 重刻，還要求介面要一樣「專業」。&lt;/p&gt;
&lt;p&gt;隨後老闆又找了兩個大四的學弟，整個專案變成 4+2 個成員，然後老闆要求我們把我當初估需要四個月的進度，壓縮到兩個月內要完成。於是整個九月我就陷入了加班潮，全心全力的投入專案的趕稿。&lt;/p&gt;
&lt;p&gt;雖然八月的研究成果被截斷了，但其中得到概念仍深深影響我，比如說善用 Data Binding、MVVM、Shell 與 Dependency Injection 等，雖然還沒有熟練，但也嘗試在用 WinForm 時也導入這些概念。包括把各個功能都分成個專案，最後再導入取名 Shell 的專案，讓 Shell 專案單純當個 Shell，不包含太多邏輯。使用 MVVM 加上狀態機，去控制按鈕的狀態。也在專案中使用前人都未使用的 NuGet 去管理相依套件等。&lt;/p&gt;
&lt;p&gt;直到十月初，整個專案的趕工期在算是有些趨緩。我也必須抓緊時間完成 PHPConf 2015 的演講準備。於是跟實驗室告了假，專心去準備演講，這部分會在後面補述。&lt;/p&gt;
&lt;p&gt;演講完後到現在，也是陸續在整合功能。也是在這個月開始使用 Resharp 這個套件，他讓我在整理舊有程式碼風格上省下很多時間，也讓我寫的程式能夠有一定的品質，根本是開發 Visual C# 的神兵利器。整個開發大概會在十月底告一段落，接下來就是不斷的測試和 Debug，我也打算在十一月漸漸放手，將自己的部分寫好文件、交接給學弟，之就要開始將重心放在論文上了。&lt;/p&gt;
&lt;p&gt;在這次專案的負責上，也是摸索、學習了不少，從一個 Web 起家的 Programer，到現在算是正式涉獵到視窗程式設計（雖然大學有修過課，但是都是寫小玩具）。碰到了許多新觀念，也了解到業界趕進度時到底會怎樣發展。中途雖然也和老闆有過爭論，最後也都逐漸妥協。雖然在這個專案的中，我的角色算是一個比較複合型、主要的位置，從收集客戶意見、想法寫成文件、設計介面以及功能呈現概念、負責整體架構的設計以及與模組的整合，但最終這個專案的總負責是老闆，要和客戶扛責任的也是老闆，這不是我自己的專案，我所能做的也就是在盡量苦中作樂的在其中挖掘學習的樂趣以及趕著進度，好讓我在十一月時能開始準備我的亂文。&lt;/p&gt;
&lt;p&gt;雖然學習了不少，但這段時間我其實沒有很愉快、充滿挫折的，甚至被負面情緒填滿，生活開始無趣。老闆說，其實這就是業界的殘酷現實。我不清楚是不是業界都是這樣，但是在這過程中，研究與開發的樂趣，仍然無法抵抗一種工程師不被尊重（比如說建議不被採納、估算時程沒被相信）的挫敗感，以及整日重心全部都在趕工上，沒有太多時間在其他的領域或生活的痛苦，尤其是與開源社群沒時間接觸的枯竭感，越讓我心中沒了熱枕與衝勁。&lt;/p&gt;
&lt;p&gt;值得高興的事，這五個月我還是有所成長，而且專案也算是趨向穩定，我也將和老闆提出他當時答應的事，開始讓我在十一月專心弄論文，自己的時間總算是開始回歸，我想對未來的期望會讓我逐漸走出這段時間的迷惘與憂鬱吧。嘛，樂觀一點，苦過之後會更好。&lt;/p&gt;
&lt;p&gt;附註：因為這邊帶有情緒的紓發，為避免誤會，這邊要做個聲明。在對開發專案上，難免會遇到想法不同的時候，爭論在所難免，並不是壞事，畢竟每個人都有不同的角度、困難、立場與信仰。我們做的只是討論出一個彼此能接受的平衡點，把這件事做完，或是選擇離開。我在這篇幅所表述的只是自己主觀的感受、單方面說詞，並沒有爭吵或是刻意批評，請不要過度解讀。或許十年後我回來看這邊，會有不同的看法，或是仍感到如此。但是只少這時的感受的確就是這樣，我只是想紓發、做個記錄，僅此而已。&lt;/p&gt;
&lt;h2 id=&quot;自身生活的改變&quot;&gt;自身生活的改變&lt;/h2&gt;
&lt;p&gt;大概是六月中旬的時候，我搬家了。從學校附近搬到了市區，主要是自己要開始治療自己的一口爛牙，住市區取得醫療資源比較方便，除此之外，與生活相關的各式項也方便很多。自己也搬到了一個有流理台的房間格局，可以自己烹煮正餐，避開充斥油炸的外食。也算是一個新的開始。&lt;/p&gt;
&lt;p&gt;而原本不愛吃水果的我，也因為搬到市區後，取得蔬果變得非常方便（全聯就在家裡車程不到五分鐘的地方，附近還一堆水果店），開始嘗試吃水果，去改善自己的偏食習慣，也讓水果去取代宵夜，減少垃圾食物的攝取。&lt;/p&gt;
&lt;p&gt;家裡附近也一條沿溪步道，全長 3.6 公里，我搬家後最愛的就是晚上走完步道一圈，邊走邊好好沈澱、思考。七月下旬後的每晚，我都這樣散步、沈澱心情。之後也發現了當地青年活動中心的健身，在八月中旬開始培養了上健身房的習慣，雖然在十月中旬因為忙碌有點斷斷續續，但這個習慣我想會在十月下旬繼續保持吧。體重也降到了 80 以下，期望儘早將到 70 以下，降低脂肪肝對我身體健康的危害。&lt;/p&gt;
&lt;p&gt;最後，就是開始如上述的治療我的一口爛牙吧。展開幾乎每週的定期回診，從跟管、牙雕到牙冠，陸陸續續的療程。這也造成我自我經濟上的負擔，不過我認為這是我自己以往不重視刷牙這件事，導致的結果，不應該讓父母負擔這個費用，所也是私下透過友人介紹接點程式的案子作為外快存錢做這件事。到現在已經鮮有牙痛的問題，且已經將右上的三顆根管過的牙齒都做了牙冠，接下來就是繼續存錢做左邊的牙齒了。希望能在畢業前徹底解決我牙齒的問題。&lt;/p&gt;
&lt;p&gt;基本上，自從搬家後，對自身的改變是好的，雖然因為專案趕工的關係，熬了不少夜，但隨著即將交接開始弄論文，我想之後會越來越好的。&lt;/p&gt;
&lt;h2 id=&quot;phpconf-2015&quot;&gt;PHPConf 2015&lt;/h2&gt;
&lt;p&gt;十月十號，禮拜五，第二次擔任 PHPConf 的講者。&lt;/p&gt;
&lt;p&gt;這次是仍是講 Docker，不過這次主打是 Docker Compose。感謝這次大會仍給我有機會上去演講。雖然時間有把握好，順利講完，但是問答時間讓我知道我火候沒到，比起去年演講更遜一籌。我沒有抓到現在會眾對於這部分最想知道的疑問，也就是如何將架設開發環境從 Vagrant 轉移到 Docker-Compose，而只是單純敘述 Docker-Compose 是幹嘛的、有什麼用？而無法深深地將價值深植聽眾的心上。&lt;/p&gt;
&lt;p&gt;看了其他議程，也發現 PHPConf 的議程也真是越來越貼近使用以及活潑，相比之下我還停留在純粹講技術面就顯得有些枯燥，較無法帶動。這部分也是我深深反省的，也是未來要改進的。尤其要在一個語言的 Conference 下講 DevOp 為主的議程，要怎麼結合一直我在思考的部分，但我在 PHP 開發上的經驗近年是不如以往，與社群的接觸也因為忙碌的關係較少，使得我這次沒辦法將 Docker-Compose 的演講講得更貼近，這部分也是未來需要加強的。&lt;/p&gt;
&lt;p&gt;反省之後，接下來就是花時間研究 Vagrant 以及目前大家的痛處，再重新寫一篇文章講述這個議題。如此，我想心裡有好過很多，不愧對買門票來聽演講的會眾們吧。&lt;/p&gt;
&lt;h2 id=&quot;後記&quot;&gt;後記&lt;/h2&gt;
&lt;p&gt;其實我一直很喜歡透過寫文章的方式抒發心情，他會讓我混亂的思緒沈澱下來，讓我知道我自己要的是什麼，該做的是什麼。從中學開始寫部落格後，這方式一直都對我很有安撫效果。最近真是越覺得自身思緒渙散、無法凝聚，感到無力與痛苦。還好，我還可以寫點文章，嘗試找回自己。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>身體狀況報告：20150607</title>
    <link href="https://fntsr.tw/announce/health-report-20150607/" />
    <id>https://fntsr.tw/announce/health-report-20150607/</id>
    <updated>2015-06-07T01:13:07.000Z</updated>
    <published>2015-06-07T01:13:07.000Z</published>
<content type="html">&lt;p&gt;最近去因為右上角牙齒崩裂一小塊，不得不提前原本是打算暑假開始的牙齒根治的路程。這次經由友人的介紹下，總算在現在學校城鎮尋覓到一個小具規模、服務品質良好、醫師資源充足的診所。因為在這間診所初診，所以也重新做了全面的牙齒檢查、拍攝，狀況真的不太樂觀，因為之前根管治療的牙齒不少，這次裂牙齒警訊明確，預計之後要至少要做四個牙套，才能避免牙齒突然斷裂，導致可能需要拔牙、植牙的後果。&lt;br&gt;
檢查完畢之後，醫護教導了我正確的刷牙方式——貝氏刷牙法，讓我深感以前刷牙根本胡亂刷，怪不得止不了蛀牙，慚愧萬分。醫護的輔導完畢後，就是醫師的看診和洗牙，並預約下禮拜再進行牙裂那顆的觀察。&lt;/p&gt;
&lt;p&gt;之後幾天勤用貝氏刷牙法，三餐飯後、睡前都是。但不知是否原本洗牙後就有些為傷口，或因牙齦本來就在發炎，刷牙又太用力，導致刷牙很容易流血。初時不以為意，到了禮拜五已回故鄉時，牙齦開始遽然腫大，甚至連淋巴腺也發炎，才驚覺事態不妙。隔天一早先去小兒科看診、吃消炎藥、抗生素，並在打算之後回牙醫複診時告知。診斷結果確定是牙齦遭感染影響到淋巴，並有牙齦流膿，看來這是狀況沒很好，雖然吃過一天消炎藥後有好轉，但刷牙時仍是疼痛不堪。&lt;/p&gt;
&lt;p&gt;禍不單行，在牙齦、淋巴發炎的不久，我右手腕舊傷也再度發作，跟著發炎，疼痛不堪，甚至疼痛起來連打字、寫程式都有點痛苦，也無力做其餘事情。在看牙醫當天晚上，再度由女友陪同下，前去中醫複診，並經由熱敷、針灸、敷藥後，有稍微好些，但在藥效退去之後仍然感到疼痛。看來回學校之後，仍要再找地方看診，嘗試在牙醫中醫雙管齊下，趁畢業前好好根治我這陳年舊疾。&lt;/p&gt;
&lt;p&gt;這大概是我目前身體狀況欠佳的部分，寫此文記錄，告誡警剔。順便試用 Medium 作為部落格的評估。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>運動雲端，雲科大休運所演講</title>
    <link href="https://fntsr.tw/articles/clould-talks-at-yun-tech/" />
    <id>https://fntsr.tw/articles/clould-talks-at-yun-tech/</id>
    <updated>2015-06-03T14:19:34.000Z</updated>
    <published>2015-06-03T14:19:34.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/193/&quot;&gt;運動雲端，雲科大休運所演講 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;敝人有幸在 2015 年 5 月 22 日（週五）晚上，受國立雲林科技大學休閒運動研究所之邀演講。本文所附的即是這場演講所使用的簡報，裡面內容也是針對這次演講所準備。因前段時間私事繁忙，直到今日才將投影片修好釋出，對等待敝人釋出投影片的同學，表示歉意。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;簡報：&lt;a href=&quot;https://speakerdeck.com/fntsrlike/yun-ke-da-xiu-yun-suo-du-shu-hui-jiang-zuo-yun-dong-yun-duan&quot;&gt;SpeakerDeck&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.slideshare.net/ruoshiling/ss-48925329#&quot;&gt;SlideShare&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;主辦：&lt;a href=&quot;http://www.ghl.yuntech.edu.tw/&quot;&gt;國立雲林科技大學 休閒運動研究所&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;所長：&lt;a href=&quot;http://www.ghl.yuntech.edu.tw/author/chungcc/&quot;&gt;鍾志強 教授&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;主持：&lt;a href=&quot;http://www.ghl.yuntech.edu.tw/author/suweisan/&quot;&gt;蘇維杉 副教授&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本演講主要針對休閒運動研究所的研究生同學，分享有關雲端科技和其如何與運動結合的方法。先以比較耳熟能詳的名稱或廠牌帶過這幾已年資訊科技的發展，然後簡述目前資訊網路與其他領域的結合應用，再延伸到何種例子不是只有單純與資訊網路結合，而是真的結合雲端運算，之後再和同學簡述雲端科技的_四種部署方式_與_三種服務模式_。最後導入正題，我們要如何利用資訊與體育結合，並以目前有的應用作為舉例，讓同學能更直觀的了解。待簡報介紹完畢後，播放數段短片，開始以較輕鬆、聊天為主的形式與同學分享，其實運動雲端的重點不在於資訊，技術更不是這方面的門檻，運動雲端的精髓應該在於_利用資訊、雲端，將運動和其他領域作結合_，例如餐飲、醫療、活動。所以想要走運動雲端，在於敢不敢發想，願不願意嘗試，如果能夠踏出第一步，資訊只會是你的助力，不會是你的高牆。在最後問答的時候，亦告訴同學與教授，如何結識資訊夥伴，為本場演講劃下句點。&lt;/p&gt;
&lt;h2 id=&quot;後續&quot;&gt;後續&lt;/h2&gt;
&lt;p&gt;雲科大休運所有許多充滿幹勁的同學與對於運動和資訊結合有開放態度的師長，若對運動跨領域結合有興趣的夥伴，可以聯絡蘇維杉副教授，給這些同學一些接觸跨領域的資源與機會，並將所學能夠貢獻在我們親愛的土地，臺灣。&lt;/p&gt;
&lt;h2 id=&quot;演講相關資料&quot;&gt;演講相關資料&lt;/h2&gt;
&lt;h3 id=&quot;參考論文&quot;&gt;參考論文&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;〈WU Hong-jiang, Zhao Hai-yan, Zhao Jing – Application of the Cloud Computing Technology in the Sports Training〉&lt;/li&gt;
&lt;li&gt;〈范智明 – 雲端運算服務對運動休閒俱樂部經營方式之影響—以花蓮亞緻會館為例〉&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;參考資料&quot;&gt;參考資料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;〈張保榮 – 雲端應用之現況與未來〉&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;本場演講所舉例項目&quot;&gt;本場演講所舉例項目：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eztable.com/&quot;&gt;（食）網路訂位 EZTABLE&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lativ.com.tw/&quot;&gt;（衣）網路購物 lativ&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.airbnb.com.tw/&quot;&gt;（住）網路訂房 Airbnb&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thsrc.com.tw/&quot;&gt;（行）網路訂票 台灣高鐵&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://compiler.oolab.fntsr.tw/&quot;&gt;（育）九宮格審題系統&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.moedict.tw/&quot;&gt;g0v – 萌典&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://env.g0v.tw/air/&quot;&gt;g0v – 台灣空污指標即時監控&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://earth.nullschool.net/&quot;&gt;Cameron Beccario – 全球氣流、洋流即時動態&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.apple.com/tw/ios/whats-new/health/&quot;&gt;Apple Inc. – HealthKit&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.nike.plusgps&quot;&gt;Google Play – NIKE+ Running&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.nike.ntc&quot;&gt;Google Play – NIKE+ TRAINING CLUB&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.google.android.apps.fitness&amp;#x26;hl=zh_TW&quot;&gt;Google Play – Google Fit&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.xiaomi.hm.health&amp;#x26;hl=zh_TW&quot;&gt;Google Play – 小米運動&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="cloud" />
    <category term="talks" />
  </entry>
  <entry>
    <title>Docker 初探，實驗室中的運貨鯨</title>
    <link href="https://fntsr.tw/articles/docker-talks-on-nos-of-ncu/" />
    <id>https://fntsr.tw/articles/docker-talks-on-nos-of-ncu/</id>
    <updated>2015-05-28T22:36:04.000Z</updated>
    <published>2015-05-28T22:36:04.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/191/&quot;&gt;Docker 初探，實驗室中的運貨鯨 - 深藏若虛&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;敝人有幸在 2015 年 5 月 28 日（週四）晚上，受中大網路開源社之邀的演講。本文所附的即是這場演講所使用的簡報，裡面內容也是針對這次演講所準備。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;活動：&lt;a href=&quot;http://nos.kktix.cc/events/d1fe178c&quot;&gt;NOS – KKTIX&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;簡報：&lt;a href=&quot;https://speakerdeck.com/fntsrlike/docker-chu-tan-shi-yan-shi-zhong-de-yun-huo-jing&quot;&gt;SpeakerDeck&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.slideshare.net/ruoshiling/docker-48710374&quot;&gt;SlideShare&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本次演講主要是針對實驗室中，想要使用 Docker 去架設簡單服務的需求，所做的一個 docker 入門講座。和以往講比較詳細部分有所不同，只去講需要使用的指令和概念。這次簡報也以比較明亮色系為風格，並且盡量不去使用清單和冗長的文字去做講述，而是以示意圖的方式搭配講說向聽眾解釋。但因時間有限，尚未將以前簡報的素材完全轉換過來，所以沿革和觀念的部分，還是會先跳到之前的簡報，搭配圖表解說。希望日後有時間將這份簡報編寫完善，然後在有機會受邀演講時，能搭配完善的簡報作為教材，讓更多人了解 Docker。 =D&lt;/p&gt;
&lt;h2 id=&quot;台灣相關社群與同好&quot;&gt;台灣相關社群與同好&lt;/h2&gt;
&lt;p&gt;如果對 Docker 有興趣，歡迎加入 Docker.Taipei 的 Facebook 社團和 Slack 討論平台。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.facebook.com/groups/docker.taipei/&quot;&gt;Docker.Taipei FB Club&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ruoshi1.typeform.com/to/bCZMsw&quot;&gt;Docker.Taipei Slack 平台 – 自己的邀請自己拿&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在中央大學的同學或在桃園、中壢地區的朋友們，歡迎加入或追蹤網路開源社一起討論，這裡聚集滿多中大對資訊技術有興趣的同學，一起來當好朋友唄。另外幫忙桃園 RoR 讀書會打廣告，在桃園對 RoR 有興趣的朋友也可以加入他們唷。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://preview.nos.ncu.edu.tw/&quot;&gt;中央大學網路開源社 官網&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.facebook.com/NCUNOS&quot;&gt;中央大學網路開源社 FB Fans&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.facebook.com/groups/tyror/&quot;&gt;桃園Ruby on Rails讀書會&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;演講相關資料&quot;&gt;演講相關資料&lt;/h2&gt;
&lt;p&gt;有關 Docker 的連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/&quot;&gt;Docker Hub (Registry)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/&quot;&gt;Docker Docs&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kitematic/kitematic&quot;&gt;Docker GUI tool – Kitematic&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gitbook.com/book/philipzheng/docker_practice/details&quot;&gt;《Docker —— 從入門到實踐­》正體中文版 電子書&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.books.com.tw/products/0010676115&quot;&gt;《Docker入門與實戰》實體書&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本場演講所使用的範例，皆已列出其在 Docker Hub 上的連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/_/wordpress/&quot;&gt;WordPress&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/_/ubuntu/tags/manage/&quot;&gt;Ubuntu&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/_/mysql/&quot;&gt;MySQL&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/u/sameersbn/gitlab/&quot;&gt;GitLab&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/u/sameersbn/redmine/&quot;&gt;Redmine&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/discourse/discourse_docker&quot;&gt;Discourse&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.hub.docker.com/u/itzg/minecraft-server/&quot;&gt;Minecraft&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;同學若想要研究，可以參考 &lt;a href=&quot;http://blog.fntsr.tw/articles/2014/12/11/student-docker-resource/&quot;&gt;讓學生透過 DigitalOcean 嘗試 Docker！ 去申請 DigitalOcean 拿額度開機器來玩。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/2014/12/11/student-docker-resource/&quot;&gt;&lt;br&gt;
&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content>
    <category term="docker" />
    <category term="talks" />
  </entry>
  <entry>
    <title>2015，上半年</title>
    <link href="https://fntsr.tw/announce/first-half-year-of-2015/" />
    <id>https://fntsr.tw/announce/first-half-year-of-2015/</id>
    <updated>2015-03-03T17:12:20.000Z</updated>
    <published>2015-03-03T17:12:20.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/195/&quot;&gt;2015，上半年&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;約在半年前，我寫了篇網誌&lt;a href=&quot;http://blog.fntsr.tw/articles/2014/11/30/december-of-2014/&quot;&gt;〈來到 2014 年的 12 月，半年回顧〉。&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;不知不覺，已經又過了半年，碩士班生活也過了一年。在這個六個月，依然發生了不少事，獲得不少機會與經驗，就讓我在這篇文章簡述、紀錄吧。&lt;/p&gt;
&lt;h2 id=&quot;十二月&quot;&gt;十二月&lt;/h2&gt;
&lt;p&gt;這個月比較特別的事，大概就是和朋友 &lt;a href=&quot;https://github.com/sntc06&quot;&gt;sntc06&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;、&lt;a href=&quot;https://github.com/scwuaptx&quot;&gt;scwuaptx&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 去參加芬安全《獵駭行動》資安競賽吧。原本只抱著當砲灰的嘗試心態參加比賽，沒想到卻幸運獲得第一名。當主持人宣布冠軍隊伍的名稱時，我們三個都愣住了XD。還被採訪與被系辦丟到系館跑馬燈佈告欄上，真的是怪不好意思的。能拿第一名真的要感謝隊友夠凱瑞，我只是負責貢獻我的幸運值而已。 XD&lt;/p&gt;
&lt;p&gt;也同樣在月中，去台科大程式設計社作演講，大概是將當初 PHP Conf 講的內容去掉比較重 PHP 的部分，位同學們做 Docker 的入門引導，同時也修正當初回饋單所收到的錯誤提醒與建議。&lt;/p&gt;
&lt;p&gt;額外的，除了簡單的日常事務。大概就是和實驗室一同吃了元宵，花了超過一個禮拜的時間準備女友的聖誕禮物，然後在平安夜衝回台中聽鐘聲之類的生活小確幸吧。也算是緩解當時課業的困境、挫折的情緒。w&lt;/p&gt;
&lt;h2 id=&quot;一月&quot;&gt;一月&lt;/h2&gt;
&lt;p&gt;新的一年，抑是期末，所以大概也是在準備期末考試與報告中度過。成績公佈後，應用密碼學還是慘遭封殺被當，也是本學期唯一低於 90 分的科目，看著其他科目的表現，也還算有所安慰。自此，大概也知道自己對於需要數學基礎的科目真的是一個目前難以克服的高峰。遂在之後的選課放棄需要類似理論的課程。&lt;/p&gt;
&lt;p&gt;另外比較開心的大概就是建立了幼稚鬼團專屬的 Slack Team，將四散各地的朋友加進來聊天，有個穩定的管道維繫大家的聯絡、揪團。也是大概這時候開始 fork &lt;code&gt;g0v/slack-irc-plugin&lt;/code&gt; 的 slack irc 訊息同步插件，然後踏進了 node.js 的開發，這段時間也是我 node.js 經驗正是累積的時期。&lt;/p&gt;
&lt;h2 id=&quot;二月&quot;&gt;二月&lt;/h2&gt;
&lt;p&gt;這個月去了久違的中彰竹高中電資相關社團與交大中友會合作所辦的聯合寒訓。已經約兩年沒去了，這次重返心態更是大不同，純粹以一個路過，額外幫忙拍照的角色帶入，看看以前自己忙得天昏地暗的活動，現在變得怎麼樣了，順便和許久不見的老人聚聚，也算是小有感嘆。&lt;/p&gt;
&lt;p&gt;接下來就是農曆年了。這個月基本上就是和家人相伴，與朋友相聚的月份囉w。看看自家的開心農場、去泰安賞夜櫻、和女友家人騎腳踏車、收了情人節禮物等等。&lt;/p&gt;
&lt;h2 id=&quot;三月&quot;&gt;三月&lt;/h2&gt;
&lt;p&gt;開始編寫老師開編譯器課程要用的網路應用程式——九宮格審題系統。這個系統主要是將原本紙本型式的流程，透過網路應用程式電子化。這是一個用於翻轉教育的審題系統，由助教新建章節、題目，讓學生可以挑戰每一個章節中隨機產生的九道題目。提交的答案會交由助教審核是否通過，並給予建議。只要能讓位於九宮個的九道題目連成一條線，該章節就會通過。由於流程都電子化了，所以可以簡單整理出數據，幫助助教追蹤學生學習狀況，以及題目難易調整。&lt;/p&gt;
&lt;p&gt;這同時也是我第一個 Ruby on Rails 程式，也算是我開始寫 Ruby 的原因。見識到用 Ruby on Rails 開發的快速以及對開發者友善的 Ruby 語法，還有完善的文件以及豐富的 Gem，真的有種回不去的感覺。XD&lt;/p&gt;
&lt;p&gt;也是在這個月底，開始加入實驗室 KORAT Project 的維護與開發，所以九宮格系統在月底的開發速度漸緩，到現在目前只做維護的狀態。&lt;/p&gt;
&lt;h2 id=&quot;四月&quot;&gt;四月&lt;/h2&gt;
&lt;p&gt;因為加入實驗室 KORAT Project 的開發與維護，也開始接觸 C#。雖然現在仍不算熟捻，但對於開發與維護現有的專案，倒是勉強到位（邊 Coding 邊查 Reference）。也導入從 EZTABLE 學來的開發流程（Git Flow、Commit message style），讓整個團隊版本控制上，更俱系統化與增強維護性。&lt;/p&gt;
&lt;p&gt;這個月同時也因為朋友介紹，有私下和另外幾位朋友接下一個需要用 C 語言寫的案子。很久沒有碰 C 語言了（大概升大學後就很少碰了），對於這個案子其實是既期待（能練到功），又害怕扛不起傷害到隊友ＸＤ。還好，到最後開發還算順利，總算利用課業和實驗時之外的晚上時間，和朋友合作將這個案子大致完成，只剩之後的驗收與維護。&lt;/p&gt;
&lt;h2 id=&quot;五月&quot;&gt;五月&lt;/h2&gt;
&lt;p&gt;這個月份也是很特別，接了兩場演講。一個是受到好友 Ben 的推薦，到雲林科技大學休閒運動研究所講「運動雲端」。另一個是在校內網路開源社，再次講有關 Docker 的入門，但比較偏項應用面的。這兩個演講雖然都耗費了我不少時間和精力去準備，也讓我又得到不少經驗，也讓我台風更加穩健，比較不怯場了。很高興自己能夠被朋友認可，從而有機會去當講師，這一直都是我很願意去挑戰的部分。&lt;/p&gt;
&lt;p&gt;這個月也去了 ModernWeb Conf 2015。雖然這次研討有別於 WebConf 2013 會採取收費的形式，但仍有開放免費學生票申請，也很幸運的申請上了。也算是有所收穫，雖然連續兩天都通車跑台北南港真的挺累的。Orz&lt;/p&gt;
&lt;h2 id=&quot;六月&quot;&gt;六月&lt;/h2&gt;
&lt;p&gt;現在這個月份。這個月算是開始承接、沈澱吧，沒有再接外務，專心忙課業上和實驗室的專案，尤其要趁學長離校前將他們之前提的 issues 修正完畢。準備稍微規劃一下暑假沒有課但仍要上班的日子。也打算去參加母校的畢業典禮，且從這個月開始，將我的一口爛牙醫療到位（看來之後還是得多賺錢補貼這塊”），多早睡早起，補個眠，避免暑假回去複檢時，肝指數還是超標。之類的總總，好好休息吧。&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;時間飛也似的過了半年，這半年也發生了不少事，學了不少，也驚覺得很多自己的變化，好的壞的都有。開心的是自己的能力是有在增長的，學了更多技術，課業也不再那麼沮喪。難過的大概是發現自己越來越工程師腦了，這與我的初衷不合，之後需要努力多接觸其他領域的事情，不能讓自己的視野與思考面向狹隘。這半年也比較少在關心社會，比較少去接觸政治，這也是我所不樂見的。&lt;/p&gt;
&lt;p&gt;期許自己在未來的日子，能夠好好平衡自己平時所接受的廣度，除了持續加深資訊、軟工領域的專業知識以外，也要積極去接觸其他領域的知識和時事。積極把握各項機會囉，不要怕挑戰，要怕的是沒有機會挑戰。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>Docker 指令示意圖</title>
    <link href="https://fntsr.tw/articles/docker-command-diagram/" />
    <id>https://fntsr.tw/articles/docker-command-diagram/</id>
    <updated>2014-12-15T00:45:27.000Z</updated>
    <published>2014-12-15T00:45:27.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/189/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/Docker-Command-Diagram.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/Docker-Command-Diagram.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;看到《Docker —— 從入門到實踐­》正體中文版&lt;a href=&quot;http://philipzheng.gitbooks.io/docker_practice/content/appendix_command/README.html&quot;&gt;附錄一：命令查詢&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;裏有「一張圖總結 Docker 的命令」的圖，一時興起，就嘗試重畫一張圖，把所有指令都排進去。&lt;/p&gt;
&lt;p&gt;若有什麼認為需要修正的，歡迎在本篇文章留言、討論。&lt;/p&gt;
&lt;h5 id=&quot;更新紀錄&quot;&gt;更新紀錄&lt;/h5&gt;
&lt;h6 id=&quot;2017-01-16&quot;&gt;2017-01-16&lt;/h6&gt;
&lt;p&gt;這篇文章的指令示意圖的版本大約是 v1.10 前後，目前已經到了 v1.12，有些新增的指令並沒有收錄在這篇文章，記錄在下面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;network: Manage Docker networks&lt;/li&gt;
&lt;li&gt;node: Manage Docker Swarm nodes&lt;/li&gt;
&lt;li&gt;rename: Rename a container&lt;/li&gt;
&lt;li&gt;service: Manage Docker services&lt;/li&gt;
&lt;li&gt;swarm: Manage Docker Swarm&lt;/li&gt;
&lt;li&gt;update: Update configuration of one or more containers&lt;/li&gt;
&lt;li&gt;volume: Manage Docker volumes&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&quot;2014-12-14&quot;&gt;2014-12-14&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;經 @yorkoliu 指出，修正了 export 的關係。並將 Tar files 分成兩個部分。&lt;/li&gt;
&lt;li&gt;修改標題顏色。&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
  </entry>
  <entry>
    <title>讓學生透過 DigitalOcean 嘗試 Docker！</title>
    <link href="https://fntsr.tw/articles/let-students-try-docker-at-digtial-ocean/" />
    <id>https://fntsr.tw/articles/let-students-try-docker-at-digtial-ocean/</id>
    <updated>2014-12-11T01:20:22.000Z</updated>
    <published>2014-12-11T01:20:22.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/187/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;。適逢最近要去&lt;a href=&quot;http://ntustcoding.club/&quot;&gt;台科大程式設計社&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;演講，希望在演講時，聽眾也能在下方一起操作。但是一項技術在推廣時，第一個遇到的門檻就是安裝，為了避免在網路上已經很多教學文的安裝花費太多時間，所以希望能讓聽眾透過 VPS 去使用 Docker，所以寫了這邊文章去推廣這種方式。這樣既避免安裝的過程，也讓現場省下許多下載 Image 頻寬，避免網路爆炸。&lt;/p&gt;
&lt;p&gt;本文章主要是教導如何透過 DigitalOcean 開一個已經有 Docker 的 VPS。在過程中會順便推廣 Github 的 Student Developer Pack 有關 DigitalOcean 100 美金的資源。若不是學生身份，亦可透過本文的連結註冊，得到 10 美金的 Referral 額度。&lt;/p&gt;
&lt;h2 id=&quot;註冊-digitalocean&quot;&gt;註冊 DigitalOcean&lt;/h2&gt;
&lt;p&gt;開啟 &lt;a href=&quot;https://goo.gl/P9rn2B&quot;&gt;DigitalOcean&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的首頁，然後在中間的表單填上您的 電子郵件與密碼。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;送出表單後，就會被引導到使用者後台。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_2.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_2.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;然後我們要去收信，驗證我們的電子郵件。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_3.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_3.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;如果你是透過上面的連結申請，會因為是透過 referral code link 申請的使用者，而收到另一封信，說您已經得到 10 美金的額度。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_4.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_4.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;驗證後，您就會被轉到&lt;a href=&quot;https://cloud.digitalocean.com/user_payment_profiles&quot;&gt;使用者付款頁面&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，請你填寫您的信用卡資訊去啟用服務。若是沒有信用卡，亦可請朋友透過 Paypal 幫忙轉五美金的一次性付款去啟用。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_5.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_1_5.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;申請-github-的-student-developer-pack&quot;&gt;申請 Github 的 Student Developer Pack&lt;/h2&gt;
&lt;p&gt;若是還沒有註冊 &lt;a href=&quot;https://github.com/&quot;&gt;Github&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，請先去註冊一個帳號，然後登入。&lt;/p&gt;
&lt;p&gt;接著到 &lt;a href=&quot;https://education.github.com/&quot;&gt;Github Education&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的 &lt;a href=&quot;https://education.github.com/pack&quot;&gt;Student Developer Pack&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 網頁，點選頁面中間的「Get Your Pack」，或是右上角的 Request a discount。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;點選後會出現表單，在步驟一，只需要選取你的身份和你要把這個優惠用在使用者帳號還是組織帳號。這裏只需選取 Student 和 Individual account 即可。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_2.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_2.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;步驟二裡，你填寫你的名稱、學校信箱、學校名稱、畢業年份以及你打算怎麼使用Github。這裏都要填寫英文，可去學校首頁找找學校的英文名稱。比較重要的是選擇你的學校信箱，若是你還沒通過這類驗證，你可以點選「&lt;a href=&quot;https://github.com/settings/emails&quot;&gt;add and verify it&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」，去個人後台驗證你的學校信箱。至於如何使用，你就照實填寫就好，像我就是寫 Practice coding and git。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_3.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_3.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;等認證通過後，到 Student Developer Pack 頁面重新整理，或是再次點選「Get Your Pack」，就可以看到頁面原本的「Get Your Pack」消失了，而改成一個以黃底黑字的「My Pack」。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_4.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_4.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;然後我們在下方服務中，尋找 DigitalOcean 。你會看到旁邊就會有你的 Promo Code 囉。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_5.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_5.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;將 Code 複製下來，然後來到&lt;a href=&quot;https://cloud.digitalocean.com/user_payment_profiles&quot;&gt;使用者付款頁面&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;，看到 Promo Code 的部分，將我們 Code 貼上，他就會自動認證。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_6.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_2_6.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;認證成功後，來到 &lt;a href=&quot;https://cloud.digitalocean.com/billing&quot;&gt;Billing&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 頁面，你就會發現你多了 100 美金的額度，夠讓你使用一陣子。&lt;/p&gt;
&lt;h2 id=&quot;建立-vps&quot;&gt;建立 VPS&lt;/h2&gt;
&lt;p&gt;接著點選左邊導覽列的 &lt;a href=&quot;https://cloud.digitalocean.com/droplets/new&quot;&gt;Create&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; ，我們要來開始建立我們 VPS 囉！&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;droplet-hostname&quot;&gt;Droplet Hostname&lt;/h3&gt;
&lt;p&gt;這裏是填寫你的 VPS 名稱，看你習慣怎麼命名。我自己是把我的 VPS 用魔戒系列人物命名啦。=P&lt;/p&gt;
&lt;h3 id=&quot;select-size&quot;&gt;Select Size&lt;/h3&gt;
&lt;p&gt;選擇 VPS 的使用方案，一般來說只需使用 5 美金的方案即可。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_2.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_2.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;select-region&quot;&gt;Select Region&lt;/h3&gt;
&lt;p&gt;選擇地區，也就是選擇 VPS 的機房所在。為了保持較良好的連線速度，選擇位在亞洲的新加坡機房是比較好的。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_3.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_3.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;available-settings&quot;&gt;Available Settings&lt;/h3&gt;
&lt;p&gt;這裏目前不需要設定。若是懂項目意思的可以自行斟酌。&lt;/p&gt;
&lt;h3 id=&quot;select-image&quot;&gt;Select Image&lt;/h3&gt;
&lt;p&gt;選擇你 VPS 所使用的初始映像檔，並分別有五個分頁。為了讓我們能快速使用 Docker ，我們選擇 Applications 分頁的 Docker 1.3.2 on 14.04 的映像檔。DigitalOcean 會在建立 VPS 時，安裝 Ubuntu 14.04 的作業系統，並在裡面裝好 Docker！&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_4.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_3_4.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;add-ssh-keys&quot;&gt;Add SSH Keys&lt;/h3&gt;
&lt;p&gt;增加 SSH 金鑰。這是選填項目，但是基於安全性考量，我極度建議你使用。關於相關說明，可以Google 「&lt;a href=&quot;https://www.google.com.tw/webhp?#newwindow=1&amp;#x26;q=SSH+%E7%99%BB%E5%85%A5&quot;&gt;SSH 登入&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」去學習。&lt;/p&gt;
&lt;h2 id=&quot;連線與測試&quot;&gt;連線與測試&lt;/h2&gt;
&lt;p&gt;當 VPS 建立完成後，進到 VPS 狀態頁面，在上方就可以看到自己的 IP。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_1.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_1.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;因為我們前面有設定 SSH 登入，所以就可以不用打密碼，直接透過 terminal 下 SSH 連線到 VPS。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_2.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_2.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;最後，在 terminal 輸入&lt;code&gt;docker version&lt;/code&gt;的指令，若有安裝成功，就會顯示 Docker 的版本資訊囉！&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_3.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/student-docker-resource_4_3.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;</content>
    <category term="docker" />
    <category term="vps" />
    <category term="cloud" />
  </entry>
  <entry>
    <title>來到 2014 年的 12 月，半年回顧</title>
    <link href="https://fntsr.tw/announce/december-of-2014/" />
    <id>https://fntsr.tw/announce/december-of-2014/</id>
    <updated>2014-11-30T23:58:59.000Z</updated>
    <published>2014-11-30T23:58:59.000Z</published>
<content type="html">&lt;p&gt;在 11 月的倒數三分鐘開始寫起了這篇文章，&lt;br&gt;
並在 12 月的第一天發表。&lt;/p&gt;
&lt;p&gt;學期來到了尾聲，十二月到了，&lt;br&gt;
是一個值得沈澱的時期，把過去的種種做個收尾。&lt;br&gt;
回首半年，是一個很好的開始。&lt;/p&gt;
&lt;h2 id=&quot;六月&quot;&gt;六月&lt;/h2&gt;
&lt;p&gt;與家人去了日本，彌補了自己沒有畢旅的憾。&lt;br&gt;
走過畢業典禮的儀式，在還來不及紀念下，結束了期末考。&lt;br&gt;
然後，與歷史學系道別，我走向了另一條路。&lt;/p&gt;
&lt;p&gt;感謝歷史系、學生會在這四年給了我許多經驗與回憶，&lt;br&gt;
對於身邊的人的幫助與砥礪，只有感謝與感謝。&lt;/p&gt;
&lt;p&gt;隨後，整理房間散落的回憶，我搬離的台中，回到了老家休息。&lt;br&gt;
匆匆的一週過後，我就又帶著新整理出來的行囊，來到了中壢。&lt;br&gt;
簡單佈置了新租處後，開始了新生活。&lt;/p&gt;
&lt;h2 id=&quot;七月&quot;&gt;七月&lt;/h2&gt;
&lt;p&gt;走進了 EZTABLE，開始為時兩個月暑期實習，&lt;br&gt;
在 Kernel Team 展開了全新的團隊開發的冒險。&lt;/p&gt;
&lt;p&gt;期間參加了大拜拜 COSCUP，與舊雨新知聚聚吃飯。&lt;br&gt;
然後繼續實習，桃園與台北之間，日日來回。&lt;/p&gt;
&lt;h2 id=&quot;八月&quot;&gt;八月&lt;/h2&gt;
&lt;p&gt;進度算是超前，與公司告了假，去了高雄約會玩耍。&lt;br&gt;
天搖地動，竟然遭遇了氣爆事件，至今仍心有餘悸。&lt;/p&gt;
&lt;p&gt;逐漸收尾公司的進度，因為月底要到了，&lt;br&gt;
結束前一週 Presentation，接著在最後一週嘗試報了 Docker。&lt;br&gt;
很珍惜這些演說的機會。&lt;/p&gt;
&lt;p&gt;感謝 EZTABLE 在這兩個月給予我的新視野，&lt;br&gt;
我體驗了一個美式文化的開發經驗，認識了許多強大的前輩，&lt;br&gt;
在這工作很愉快，很喜歡這裡的夥伴，希望畢業後有機會能回來。&lt;/p&gt;
&lt;h2 id=&quot;九月&quot;&gt;九月&lt;/h2&gt;
&lt;p&gt;結束了實習，在開學前趕緊著放自己假，出去走走，&lt;br&gt;
去年遇到颱風擱置的花蓮旅，終於如願以償，感謝親愛的。&lt;/p&gt;
&lt;p&gt;開學，走進了實驗室，從那時起，我不再只是歷史學徒，&lt;br&gt;
軟體工程所，讓我聽著就興奮的新方向，我走回了資訊本科。&lt;/p&gt;
&lt;h2 id=&quot;十月&quot;&gt;十月&lt;/h2&gt;
&lt;p&gt;這是一個特殊的月份，&lt;br&gt;
慶祝了兩週年紀念日以及二十四歲生日（老），&lt;br&gt;
都這把年紀了感覺還一事無成呢。&lt;/p&gt;
&lt;p&gt;接著就是讓我全力以備的 PHPConf 2014，&lt;br&gt;
講述 Docker 這個火熱的工具，很感謝會眾的喜愛，受寵若驚。&lt;br&gt;
會後問卷調查的建言與指教，我銘記在心，謝謝您們點出我的不足。&lt;/p&gt;
&lt;h2 id=&quot;十一月&quot;&gt;十一月&lt;/h2&gt;
&lt;p&gt;這大概是最挫敗與沮喪的月份，我面臨了學業的困境。&lt;br&gt;
尤其是牽扯到數論的應用密碼學，我深深感受到自己的弱點。&lt;/p&gt;
&lt;p&gt;歷經期中考，我逃避了一段時間。&lt;br&gt;
我開始打起遊戲、陷入渾渾噩噩、作息又幾近日夜顛倒。&lt;/p&gt;
&lt;p&gt;但是，夠了。沒有目標的靈魂是迷茫地。該清醒了。&lt;br&gt;
回台中休養了，投下第二次市長選舉，同時也給自己一巴掌。&lt;/p&gt;
&lt;p&gt;看著柯文哲不斷的努力與成功，我得到了鼓勵。&lt;br&gt;
對於台灣大環境我不再絕望與恐懼，不再封鎖自己。&lt;br&gt;
這次的選舉也點燃我對於新社會的希望。&lt;/p&gt;
&lt;p&gt;社會在進步，我不能停滯，&lt;br&gt;
我也希望加入改革，從自己做起。&lt;/p&gt;
&lt;p&gt;最後，來到了十二月，一年的尾聲。&lt;/p&gt;
&lt;h2 id=&quot;十二月&quot;&gt;十二月&lt;/h2&gt;
&lt;p&gt;沈澱後，訂定目標，努力執行。&lt;/p&gt;
&lt;p&gt;「當你真心渴望追求某種事物的話，整個宇宙都會聯合起來幫你完成。」— 牧羊少年奇幻之旅&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>Docker 無法解析 github.com</title>
    <link href="https://fntsr.tw/articles/docker-cant-resolve-github-com/" />
    <id>https://fntsr.tw/articles/docker-cant-resolve-github-com/</id>
    <updated>2014-11-08T02:30:19.000Z</updated>
    <published>2014-11-08T02:30:19.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/183/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在 Ubuntu 環境下，使用 Docker 架設 Discourse 時遇到了問題，錯誤訊息如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fatal: unable to access &#39;https://github.com/SamSaffron/pups.git/&#39;: Could not resolve host: github.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fb4e120a8b107f0ec1e07b3e21a3a1f31e3a5879d30da65242e0333b30533efa&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAILED TO BOOTSTRAP&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這個問題的是 DNS 相關的錯誤，我們只要幫 Docker 指定 DNS Server 即可。解決辦法依照你安裝 Docker 的方式而異。&lt;/p&gt;
&lt;h2 id=&quot;via-ubuntu-package&quot;&gt;via Ubuntu Package&lt;/h2&gt;
&lt;p&gt;首先，打開 docker 的設定檔。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ vim /etc/default/docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然後，將下面這行取消註解。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DOCKER_OPTS=&quot;--dns 8.8.8.8 --dns 8.8.4.4&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後，重啟 Docker Server&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ sudo service docker restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;via-binary&quot;&gt;via Binary&lt;/h2&gt;
&lt;p&gt;如果你是透過二進位檔案執行 Docker server，你只需在啟動 Docker daemon 時，加上 DNS 參數即可。如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ sudo docker -d -D --dns 8.8.8.8 --dns 8.8.4.4 &amp;#x26;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;8.8.8.8&lt;/code&gt;和&lt;code&gt;8.8.4.4&lt;/code&gt;都是 Google 的 DNS，你也可以增修你喜歡的 DNS Server。&lt;/p&gt;
&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-discourse-on-ubuntu-14-04&quot;&gt;How To Install Discourse on Ubuntu 14.04&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/afatal-unable-to-access-https-github-com-samsaffron-pups-git-could-not-resolve-host-github-com/18611&quot;&gt;A fatal: unable to access ‘….’: Could not resolve host: github.com&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/24151129/docker-network-calls-fail-during-image-build-on-corporate-network&quot;&gt;Docker – Network calls fail during image build on corporate network&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://linux.vbird.org/linux_server/0350dns.php#DNS_resolver_file&quot;&gt;鳥哥的 Linux 私房菜 – 第十九章、主機名稱控制者： DNS 伺服器&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
  </entry>
  <entry>
    <title>如何使用 Docker 架設 Discourse</title>
    <link href="https://fntsr.tw/articles/how-to-build-discourse-with-docker/" />
    <id>https://fntsr.tw/articles/how-to-build-discourse-with-docker/</id>
    <updated>2014-11-07T15:15:29.000Z</updated>
    <published>2014-11-07T15:15:29.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/180/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Discourse 是一個使用 Ruby on Rails 編寫的開源論壇程式。與傳統論壇以看版（Boards）為單位去收束文章的方式不同，他是直接使用分類（Categories）作為篩選，讓你去檢視你想要看的文章。這種方式比較適合作為文章性質相近的討論平台，然後再去做比較細的分類。例如：&lt;del&gt;「&lt;a href=&quot;http://community.g0v.tw/&quot;&gt;新・g0v 後勤中心&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」就是討論有關零時政府的專案開發、或是&lt;/del&gt;「&lt;a href=&quot;http://railsfun.tw/&quot;&gt;RailsFun&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;」則專門針對 Ruby、Ruby on Rails 做手把手教學的討論與問答。&lt;/p&gt;
&lt;p&gt;會特別以這篇論壇作為教學題材，除了它本身真的滿好用以外，重要得是官方有提供 Docker 支援！它讓我們可以輕鬆使用它寫好的設定，去架設 Discourse ，甚至同時架設數個都輕而易舉！官方都如此貼心了，那我們還不來試試嗎？&lt;/p&gt;
&lt;h2 id=&quot;requirement&quot;&gt;Requirement&lt;/h2&gt;
&lt;p&gt;在開始前，你必須先安裝下列項目，相關安裝方法，網路上已經滿多教學文了，可以喂狗問問。因為我們是把論壇架設在 Container 中，所以你不需要再去安裝 Ruby on Rails 或其他開發工具。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;開始之前before-beginning&quot;&gt;開始之前（Before Beginning）&lt;/h2&gt;
&lt;p&gt;在開始前，先做個說明。與官方教學文件不同，我這裡會將一些沒有提到可以改的地方做修改，讓讀者知道原來那邊是可以更換的，而不是以為「我只能這樣做」。比較大的改變如下，希望這些小改變能讓讀者懂得更加彈性的架設論壇。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;官方的安裝路徑是在&lt;code&gt;/var&lt;/code&gt;下，本文則是使用&lt;code&gt;/srv&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;官方的設定檔名稱是&lt;code&gt;app.yml&lt;/code&gt;，本文則是用&lt;code&gt;childish.yml&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;官方的 Port 設定是將 container &lt;code&gt;port 80&lt;/code&gt; 對應到 host &lt;code&gt;port 80&lt;/code&gt;，本文改成對應到 host &lt;code&gt;port 10080&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;設定與安裝set-up&quot;&gt;設定與安裝（Set Up）&lt;/h2&gt;
&lt;h3 id=&quot;step-1-install-discourse&quot;&gt;Step 1: Install Discourse&lt;/h3&gt;
&lt;p&gt;首先，我們要把官方寫好的工具 &lt;a href=&quot;https://github.com/discourse/discourse_docker&quot;&gt;discourse/discourse_docker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; &lt;code&gt;git clone&lt;/code&gt; 下來。然後複製一份設定檔範例到該專案的 containers 資料夾下。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 先移動到你想要放置專案的資料夾，通常會是 /var ，本例則是使用 /srv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;~ $ cd /srv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 將 discourse_docker 專案 git clone 下來，並將資料夾名稱改為 discourse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv $ git clone https://github.com/discourse/discourse_docker.git discourse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv $ cd discourse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 把 All in one 的設定範例複製一份到 container 資料夾，並改為自己想要的名稱，這裡是用`childish`。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ cp samples/standalone.yml containers/childish.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-2-edit-configuration&quot;&gt;Step 2: Edit Configuration&lt;/h3&gt;
&lt;h5 id=&quot;2017-01-16-補充&quot;&gt;2017-01-16 補充：&lt;/h5&gt;
&lt;p&gt;現在只需要執行 &lt;code&gt;./discourse-setup&lt;/code&gt; 就會透過一系列命令列問題的互動去幫我們建立名為 &lt;code&gt;app.yml&lt;/code&gt; 的設定檔，不須再使用下面的方式進行。除非有需要修改問題沒有詢問的設定，再另行修改設定檔&lt;/p&gt;
&lt;p&gt;接下來我們要編輯設定，可以使用你熟悉的軟體去做編輯，這邊是使用&lt;code&gt;vim&lt;/code&gt;。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ vim containers/childish.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這裡會依照原本設定項目的順序，把需要修改的部分列出來。並且已做修改，可以和原值做比較。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## /srv/discourse_docker/containers/childish.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 設定你要輸出的 Port，可以配合你網頁伺服器的設定，這裡是將`10080`對到`80`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 若不想使用網頁伺服器，可以直接將`80`對到`80`，這樣就可以直接讀取你的 domain 做拜訪。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;expose:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - &quot;10080:80&quot;  # 把 host 的 port 10080 轉到 container 的 port 80 (http)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - &quot;2222:22&quot;   # 把 host 的 port 2222 轉到 container 的 port 22 (ssh)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 分給資料庫的記憶體，如果你的記憶體有 1 GB，設定 128MB ，若有 4GB ，則建議設為 1GB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;db_shared_buffers: &quot;256MB&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## Unicorn 的 workers 數量，如果你的記憶體有 1 GB ，則設定 2：若是有 2 GB ，則建議 3 或 4。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;UNICORN_WORKERS: 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 設定 DISCOURSE_DEVELOPER_EMAILS 為您的 Email，記得加單引號。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_DEVELOPER_EMAILS: &#39;diz@childish.tw&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 設定 DISCOURSE_HOSTNAME 為您的 hostname ，記得加單引號。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 若只是架設在本機上，可以寫 localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_HOSTNAME: &#39;diz.childish.tw&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 設定郵件伺服器資訊，這裡很重要，若是沒設定好就無法使用論壇。非常不建議直接使用 Gmail。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 建議：這部分可以使用 Mandrill 的服務，詳細可參見本文的 Mail Test 說明。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_SMTP_ADDRESS: smtp.mandrillapp.com       # 必填&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_SMTP_PORT: 587                           # 選填&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_SMTP_USER_NAME: diz@childish.tw          # 選填&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_SMTP_PASSWORD: MANDRILL_APP_PASSWORD     # 選填&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 這裡是放置你論壇資料的目錄，包括 Database。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 將 /var/discourse/ 改為你專案的路徑，就是你 git clone 的目錄。這裡是改 /srv/discourse/。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## 建議：可以把原本的 standalone 改成你的設定檔名稱或 hostname，讓以後要架多重論壇時可以方便管理。這裡是改成 diz.childish.tw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - volume:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      host: /srv/discourse/shared/diz.childish.tw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      guest: /shared&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - volume:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      host: /srv/discourse/shared/diz.childish.tw/log/var-log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      guest: /var/log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;command&quot;&gt;Command&lt;/h3&gt;
&lt;p&gt;在你&lt;code&gt;git clone&lt;/code&gt;下來的專案根目錄中，有一個檔名為&lt;code&gt;launcher&lt;/code&gt;的腳本執行檔，它可以幫助我們快速使用 docker 架設論壇。在該資料夾下，使用&lt;code&gt;./launcger&lt;/code&gt;去呼叫。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ ./launcher&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Usage: launcher COMMAND CONFIG [--skip-prereqs]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Commands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    start:      Start/initialize a container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    stop:       Stop a running container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    restart:    Restart a container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    destroy:    Stop and remove a container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    enter:      Use nsenter to enter a container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ssh:        Start a bash shell in a running container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    logs:       Docker logs for container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    mailtest:   Test the mail settings in a container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    bootstrap:  Bootstrap a container for the config based on a template&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    rebuild:    Rebuild a container (destroy old, bootstrap, start new)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    --skip-prereqs   Don&#39;t check prerequisites&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它的使用方式就是程式&lt;code&gt;./launcher&lt;/code&gt;，接著一個 COMMAND 參數，最後加上你的設定檔名稱（不含&lt;code&gt;.yml&lt;/code&gt;）。在接下來的步驟中，會一一提及各 COMMAN 的使用時機。在這裡先知道它的使用方法就好。&lt;/p&gt;
&lt;h3 id=&quot;step-3-mail-test&quot;&gt;Step 3: Mail Test&lt;/h3&gt;
&lt;p&gt;在設定檔裡有提到 Mail Server 的設定很重要，這是因為在申請會員時，會寄信請你啟用帳號，否則就無法使用。而這也包括了我們要建立的第一個帳號，管理員帳號。若是這部分設定錯誤，將會導致連管理員帳號都無法登入的窘境。為了讓你知道設定是否正確，這個工具也提供了測試的程式，讓你在建立論壇前，先寄一封信自己，以測試設定是否正常。&lt;/p&gt;
&lt;p&gt;在下指令後，他會要求你輸入要寄送的信箱位址，填寫後送出即可。若是有收到信，就代表你的設定是正常的囉。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# launcher mailtest &amp;#x3C;config_name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ ./launcher mailtest childish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Enter your email address: diz@childish.tw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DISCOURSE_SMTP_ settings:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; DISCOURSE_SMTP_PASSWORD = (hidden)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; DISCOURSE_SMTP_USER_NAME = diz@childish.tw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; DISCOURSE_SMTP_ADDRESS = smtp.mandrillapp.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; DISCOURSE_SMTP_PORT = 587&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You are correctly configured to use: Mandrill&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Success!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因為這隻程式會使用到 python 去讀取 yml ，若是你的伺服器環境有缺 &lt;code&gt;python3-yaml&lt;/code&gt;這個套件，他會提示你去安裝，按照他給的訊息去安裝缺的套件就可以了。若你的作業系統是 Debian / Ubuntu ，可以下 &lt;code&gt;sudo apt-get install python3-yaml&lt;/code&gt; 去安裝。&lt;/p&gt;
&lt;h4 id=&quot;mandrill&quot;&gt;Mandrill&lt;/h4&gt;
&lt;h5 id=&quot;2017-01-16-補充-1&quot;&gt;2017-01-16 補充：&lt;/h5&gt;
&lt;p&gt;Mandrill 已經變成 MAILCHIMP 的付費外掛了，有需要免費使用類似服務的夥伴可能就要另外找了。&lt;/p&gt;
&lt;p&gt;若是你沒有自己的 Mail Server ，可以去申請 &lt;a href=&quot;https://mandrill.com/&quot;&gt;Mandrill&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 的服務。它是一個免費的 Mail Server 服務，特別針對網站系統信件的部分。他會提供您去建立多組 SMTP &amp;#x26; API Credentials ，讓我們減少泄漏帳號密碼的危險（這也是我不建議直接使用 Gmail的原因，而且還會時常無法連線，讓你收不到確認信，囧）。總之，若沒有自己的 Mail Server ，就去申請吧！&lt;/p&gt;
&lt;h3 id=&quot;step-4-bootstrap&quot;&gt;Step 4: Bootstrap&lt;/h3&gt;
&lt;p&gt;設定檔編輯好、Mail Servrt 測試後，可以來產生 image 了。這裡使用&lt;code&gt;bootstrap&lt;/code&gt;去建立。ˊ這部分會需要花一段時間，取決伺服器的網路速度和效能。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# launcher bootstrap &amp;#x3C;config_name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ ./launcher bootstrap childish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.........&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這邊若是遇到無法解析 github.com 的錯誤，可以參考 &lt;a href=&quot;http://blog.fntsr.tw/articles/2014/11/08/docker-cant-resolve-github-dot-com/&quot;&gt;Docker Can’t Resolve github.com&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 這篇文章去解決。&lt;/p&gt;
&lt;p&gt;產生成功後，可以用&lt;code&gt;docker images&lt;/code&gt;做確認。程式會產生以&lt;code&gt;local_discourse/&amp;#x3C;config_name&gt;&lt;/code&gt;格式為命名的 image 。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ docker images&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;local_discourse/childish   latest              61004de94a0c        22 hours ago        1.489 GB&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-5-start&quot;&gt;Step 5: Start&lt;/h3&gt;
&lt;p&gt;有了 image 後，就使用&lt;code&gt;start&lt;/code&gt;來初始化 contianer 吧。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# launcher start &amp;#x3C;config_name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/discourse $ ./launcher start childish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;No cid found, creating a new container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Calculated ENV: .............. # Your enveironment setting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;945342195fc05cbfa706f3d1875ab6383fbf5d21a73488367908d9ece21e1abd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接著，我們可以使用&lt;code&gt;docker ps&lt;/code&gt;做確認。程式會產生以你設定檔名稱命名的 container。若是 STATUS 是顯示 Up 即代表成功了！&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/srv/docker/discourse $ docker ps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CONTAINER ID        IMAGE                             COMMAND       CREATED         STATUS         PORTS                                         NAMES&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;945342195fc0        local_discourse/childish:latest   &quot;/sbin/boot&quot;  52 seconds ago  Up 51 seconds  0.0.0.0:2222-&gt;22/tcp, 0.0.0.0:10080-&gt;80/tcp   childish&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-6-browse&quot;&gt;Step 6: Browse&lt;/h3&gt;
&lt;p&gt;最後，您就可以透過你前面坐的設定來瀏覽網站啦。若是在本機可以拜訪 &lt;code&gt;http://localhost&lt;/code&gt; ，或是去拜訪該伺服器的 hostname 。若 container 的 port 80 不是對應到 host 的 port 80 ，記得加上 port。&lt;/p&gt;
&lt;p&gt;以本範例來說就是拜訪 &lt;code&gt;http://diz.childish.tw:10080&lt;/code&gt;。會這樣做設定，是因為我會再透過 nginx 去監聽 10080 port，讓後 bind 到透過 &lt;code&gt;diz.childish.tw&lt;/code&gt; 訪問伺服器的連線。當然，這是延伸應用了。&lt;/p&gt;
&lt;p&gt;之後，就是 Discourse 相關的操作了，也不在本文的範疇內，按照網站上，官方給的提示去做就行啦。&lt;/p&gt;
&lt;p&gt;架設出來大致就如同 &lt;a href=&quot;http://diz.childish.tw/&quot;&gt;http://diz.childish.tw/&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;。希望大家都能架設成功囉！&lt;/p&gt;
&lt;h2 id=&quot;後記&quot;&gt;後記&lt;/h2&gt;
&lt;p&gt;這是第一篇 Docker 實例應用的教學文，推廣性質還是比較重，主要還是讓讀者能夠跟著步驟，透過 Docker 將論壇建立起來。之後會想再寫一篇延伸，大概是關於使用 &lt;code&gt;launcher&lt;/code&gt; 的其他管理，以及如何備份資料以及搬遷，展現使用 Docker 的靈活性。還請大家期待囉。&lt;/p&gt;
&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.discourse.org/&quot;&gt;Discourse&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/discourse/discourse_docker&quot;&gt;discourse/discourse_docker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-discourse-on-ubuntu-14-04&quot;&gt;How To Install Discourse on Ubuntu 14.04&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/discourse/discourse/blob/master/docs/INSTALL-digital-ocean.md&quot;&gt;discourse / docs / INSTALL-digital-ocean.md&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
  </entry>
  <entry>
    <title>在 OS X 上，透過 boot2docker 使用 docker 的 data volume</title>
    <link href="https://fntsr.tw/articles/use-docker-data-volume-on-os-x/" />
    <id>https://fntsr.tw/articles/use-docker-data-volume-on-os-x/</id>
    <updated>2014-10-31T22:05:04.000Z</updated>
    <published>2014-10-31T22:05:04.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/175/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Docker 1.3 在 2014-10-16 釋出。其中，在方便性上最讓人注目的更新，除了 exec 指令以外，就是 boot2docker 在 Mac OS X 資料夾分享功能的改進，本文主要是針對後者去做講述。&lt;/p&gt;
&lt;h6 id=&quot;2017-01-16-補充&quot;&gt;2017-01-16 補充&lt;/h6&gt;
&lt;p&gt;有別於以往，現在 Docker 已經到了 1.12.6，在 Mac OS X 上的安裝方式也不再是 boot2docker，而是另外有安裝程式去做最佳化，包括 data volume 的使用也更加方便了，所以關於 boot2docker 的操作已經不適用了。不過現在的掛載原理其實是大同小異的，本篇提到在 Mac OS X 是如何建立 Volume 功能的概念還是可以去了解的。&lt;/p&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;由於 Docker 只支持 Linux 作業系統，倘若要於 OS X 使用 Docker ，會使用 boot2docker 這個工具，在 VirtualBox 上建立一個 boot2docker-vm 的映像檔。然後，透過這個 Linux VM 去操作 Docker。&lt;/p&gt;
&lt;p&gt;但是，在 Docker 1.3 之前，因為 boot2docker 的映像檔沒有支援 VirtualBox Guest Additions ，所以無法使用 Virtualbox 分享資料夾的功能，將 OS X 的資料夾掛載到虛擬機器裡。因此必須另外自行製作有支援該 VirtualBox Guest Additions 的映像檔（或是下載別人做好的），然後設定 Virtual Box ，把 OS X 的資料夾自動掛載到虛擬機器裡。&lt;/p&gt;
&lt;p&gt;不過，隨著 Docker 1.3 釋出，boot2docker 也一併將這個功能引入。使用者可以直接透過 boot2docker 的映像檔使用這功能，而且它會自動把 &lt;code&gt;/Users&lt;/code&gt; 資料夾掛載到虛擬機器裡，不需要另外設定！&lt;/p&gt;
&lt;p&gt;下圖是在 OS X 上，使用 boot2docker 建立 data volume 的示意圖，希望能幫助各位了解運作原理。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;assets/2014-10-31-use-docker-data-volume-on-os-x-001-300x225.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;assets/2014-10-31-use-docker-data-volume-on-os-x-001-300x225.png&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;前置作業&quot;&gt;前置作業&lt;/h2&gt;
&lt;p&gt;在開始前，必須先安裝或更新 docker 和 boot2docker 到 1.3.0 以上的版本，更新的方法在我前一篇文章 &lt;a href=&quot;http://blog.fntsr.tw/articles/2014/10/31/upgrade-docker-and-boot2docker-on-os-x/&quot;&gt;Upgrade Docker and Boot2docker on OS X&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 已經說明了，可以參考看看，這邊就不多贅述。&lt;/p&gt;
&lt;p&gt;接著在 Terminal 下 &lt;code&gt;$ boot2docker ssh &#39;ls -al /Users&#39;&lt;/code&gt; 的指令，確認是否已經成功掛載。如果成功，應該會出現 &lt;code&gt;/Users&lt;/code&gt; 的目錄。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker ssh &#39;ls -al /Users&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x    1 docker   staff          204 Mar 29  2014 .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x   17 root     root           400 Oct 31 10:29 ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--    1 docker   staff            0 Aug 25  2013 .localized&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxrwxrwx    1 docker   staff          306 Oct 18 04:08 Shared&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x    1 docker   staff         3774 Oct 31 17:52 user5566&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;data-volume&quot;&gt;Data Volume&lt;/h2&gt;
&lt;p&gt;本文利用 ubuntu 的 images 去做建立 data volume 的示範。開始前，再次強調，因為 boot2docker 只有把 OS X 的 &lt;code&gt;/Users&lt;/code&gt; 資料夾掛載到虛擬機上，所以 data volume 的 host 資料夾必須在 &lt;code&gt;/Users&lt;/code&gt; 底下。&lt;/p&gt;
&lt;h3 id=&quot;首先&quot;&gt;首先&lt;/h3&gt;
&lt;p&gt;把想建立 data volume 的資料夾與檔案準備好。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ mkdir ~/docker-volume/test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ touch ~/docker-volume/test/volume-test.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ ls -al ~/docker-volume/test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# total 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  3 user5566  staff  102 11  1 02:01 .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  3 user5566  staff  102 11  1 02:01 ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 user5566  staff    0 11  1 02:01 volume-test.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;接著&quot;&gt;接著&lt;/h3&gt;
&lt;p&gt;建立一個 Container 。&lt;/p&gt;
&lt;p&gt;並且，將剛才建立的資料夾，透過 data volume 掛載到 &lt;code&gt;/volume_test&lt;/code&gt; 的位置。並且確認是否成功。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 建立 Container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ docker run -it -v ~/docker-volume/test:/volume_test ubuntu:latest /bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;root@d0d097097657:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 測試 data volume 是否成功&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;root@d0d097097657: ls -al /volume_test/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# total 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  1 1000 staff  102 Oct 31  2014 ./&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x 50 root root  4096 Oct 31 17:51 ../&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 1000 staff    0 Oct 31  2014 volume-test.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;最後&quot;&gt;最後&lt;/h3&gt;
&lt;p&gt;在 OS X 和 Container 中，都建立一個檔案，以測試同步與否。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# OS X&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ touch ~/docker-volume/test/file-from-osx.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;root@d0d097097657: touch /volume_test/file-from-container.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看起來是成功了，歡呼囉！&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# OS X 確認&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ ls -al ~/docker-volume/test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# total 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  5 user5566  staff   170B 11  1 02:12 .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  3 user5566  staff   102B 11  1 02:01 ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 user5566  staff     0B 11  1 01:58 file-from-container.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 user5566  staff     0B 11  1 02:12 file-from-osx.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 user5566  staff     0B 11  1 02:01 volume-test.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Container 確認&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;root@d0d097097657: ls -al /volume_test/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# total 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x  1 1000 staff  170 Oct 31  2014 .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# drwxr-xr-x 50 root root  4096 Oct 31 17:51 ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 1000 staff    0 Oct 31 17:58 file-from-container.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 1000 staff    0 Oct 31  2014 file-from-osx.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# -rw-r--r--  1 1000 staff    0 Oct 31  2014 volume-test.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;後記&quot;&gt;後記&lt;/h2&gt;
&lt;p&gt;Data Volume 是 docker 在應用 LXC 時，一個非常重要的功能。在初學 Docker 前，因為不懂 boot2docker 的運作原理，在這功能鬼打牆好多次，都無法成功。後來知道原理後，卻覺得在 OS X 實作這功能太麻煩了，改用 VPS 直接用 Linux 去玩 Docker 。還好，現在 boot2docker 已經做好這件事了，讓我們可以更快樂的在 OS X 上面玩 Docker ，尤其是進行開發啦！(rock)&lt;/p&gt;
&lt;p&gt;剛好，這塊是我在 &lt;a href=&quot;http://blog.fntsr.tw/articles/2014/10/18/how-to-deploy-php-projects-with-docker/&quot;&gt;PHPConf 演講&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 裡，只有稍微帶過的部分，希望這篇文章能補足當時因為時間關係，而沒講明的部分。在之後，我也會把握空閒時間，多寫幾篇有關 Docker 的文章，補足演講的缺口，希望大家會喜歡。 =D&lt;/p&gt;
&lt;p&gt;最後，祝各位在 OS X 上，愜意地 Docker 囉！&lt;/p&gt;
&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c&quot;&gt;boot2docker together with VirtualBox Guest Additions: How to mount /Users into boot2docker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/userguide/dockervolumes/&quot;&gt;Managing Data in Containers&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/&quot;&gt;DOCKER 1.3: SIGNED IMAGES, PROCESS INJECTION, SECURITY OPTIONS, MAC SHARED DIRECTORIES&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/boot2docker/boot2docker&quot;&gt;boot2docker/boot2docker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/boot2docker/boot2docker/issues/282#issuecomment-44601104&quot;&gt;Volumes: vboxguest + vboxsf modules #282&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.facebook.com/groups/docker.taipei/permalink/1522080854693939/&quot;&gt;Post of Docker.Taipei&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
    <category term="macos" />
  </entry>
  <entry>
    <title>在 OS X 更新 Docker 和 Boot2docker</title>
    <link href="https://fntsr.tw/articles/upgrade-docker-and-boot-2-docker-on-os-x/" />
    <id>https://fntsr.tw/articles/upgrade-docker-and-boot-2-docker-on-os-x/</id>
    <updated>2014-10-31T17:59:25.000Z</updated>
    <published>2014-10-31T17:59:25.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/171/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在 OS X 安裝 Docker 和 Boot2docker 有兩種方式，一種是下載 *.pkg 進行安裝，一種是使用 homebrew 進行安裝。本文前面會描述兩者更新的方式，然後說明如何把 Boot2docker 的 VM Image 更新，也就是把 Docker Server 更新到新版。&lt;/p&gt;
&lt;h6 id=&quot;2017-01-16-補充&quot;&gt;2017-01-16 補充&lt;/h6&gt;
&lt;p&gt;現在 Docker 的安裝方式已經方便非常多了，在 Linux 平台可以使用套件管理工具安裝、更新；在 Windows 和 Mac OS X 平台上也有安裝程式可以使用，並且和作業系統整合的非常好，甚至會幫忙自動更新。所以本篇已經不再適用於現在的環境，有需要使用 Docker 的朋友請直接到官方網站依照平台去選擇文件，並下載安裝程式進行安裝。&lt;/p&gt;
&lt;h2 id=&quot;更新步驟&quot;&gt;更新步驟&lt;/h2&gt;
&lt;h3 id=&quot;step-1-turn-off-boot2docker&quot;&gt;Step 1: Turn Off Boot2docker&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker stop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-2-upgrade-boot2docker&quot;&gt;Step 2: Upgrade Boot2docker&lt;/h3&gt;
&lt;p&gt;依照您安裝 boot2docker 的方式進行更新&lt;/p&gt;
&lt;h4 id=&quot;homebrew&quot;&gt;Homebrew&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ brew update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ brew upgrade docker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ brew upgrade boot2docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;packge-installer&quot;&gt;Packge Installer&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;到 &lt;a href=&quot;https://github.com/boot2docker/osx-installer/releases&quot;&gt;boot2docker/osx-installer&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; 下載最新版本的安裝檔。&lt;/li&gt;
&lt;li&gt;點擊安裝檔進行安裝。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;step-3-upgrade-boot2docker-image&quot;&gt;Step 3: Upgrade Boot2docker Image&lt;/h3&gt;
&lt;p&gt;按照「正常程序」升級映像檔即可。&lt;/p&gt;
&lt;p&gt;官網是說如果你是 &lt;code&gt;0.11.1-pre1&lt;/code&gt; 之前的版本，建議刪除原有映像檔，但是這已經是很早之前的版本了。所以除非有什麼無法升級的意外，才需要「刪除原有映像檔」的方式更新。&lt;/p&gt;
&lt;h4 id=&quot;正常程序&quot;&gt;正常程序&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker download&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;刪除原有映像檔&quot;&gt;刪除原有映像檔&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker delete     # 注意：本指令會刪除現有的 VM 映像檔&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker download&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-4-check-version&quot;&gt;Step 4: Check Version&lt;/h3&gt;
&lt;p&gt;確認你的版本是否都為最新版了。寫本文時最新版是1.3.0。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ boot2docker version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Boot2Docker-cli version: v1.3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Git commit: deafc19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ docker version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Client version: 1.3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Client API version: 1.15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Go version (client): go1.3.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Git commit (client): c78088f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# OS/Arch (client): darwin/amd64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Server version: 1.3.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Server API version: 1.15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Go version (server): go1.3.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Git commit (server): 4e9bbfa&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.docker.com/installation/mac/#upgrading&quot;&gt;Installing Docker on Mac OS X #Upgrading&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.javabien.net/2014/03/17/upgrade-docker-and-boot2docker-on-osx/&quot;&gt;UPGRADE DOCKER AND BOOT2DOCKER ON OSX&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
    <category term="macos" />
  </entry>
  <entry>
    <title>跨領域學習的挑戰</title>
    <link href="https://fntsr.tw/articles/challenge-of-interdisciplinary-learning/" />
    <id>https://fntsr.tw/articles/challenge-of-interdisciplinary-learning/</id>
    <updated>2014-10-31T15:29:02.000Z</updated>
    <published>2014-10-31T15:29:02.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/169/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;十月結束了，開學已有三旬半月，&lt;br&gt;
第一次感受到自己對新生活上，調試得極度不適應。&lt;/p&gt;
&lt;p&gt;研究生生活。&lt;/p&gt;
&lt;h2 id=&quot;困境&quot;&gt;困境&lt;/h2&gt;
&lt;p&gt;從歷史系跳到資工系軟工所，仍有一個很大的鴻溝，&lt;br&gt;
儘管我名義上已經踏入了，但是學識上仍浮載浮沈。&lt;br&gt;
或許，是我之前太過於樂觀，以為自己實作的經驗能替我克服，&lt;br&gt;
深刻體驗後，卻深深感受到許多沮喪與挫折。&lt;/p&gt;
&lt;p&gt;在理論上，我是有太多不足需要補齊。&lt;br&gt;
尤其是數學面向，一向是我的罩門，此時更倍感艱辛，&lt;br&gt;
面對應用密碼學和各演算法，我感到被高牆籠罩的壓迫。&lt;/p&gt;
&lt;p&gt;在報 Paper 這件事，也是重重打擊了自己，&lt;br&gt;
原本以為在時間內能完成，隨著時間逼近，越是慌亂。&lt;br&gt;
還好，可能是因為第一次報論文，才沒被盯到牆上。&lt;br&gt;
但是這種上台充滿著焦慮與沒信心的感受，&lt;br&gt;
卻也讓我感到丟臉與沮喪，和之前在PHPConf的感受大相徑庭。&lt;/p&gt;
&lt;p&gt;這些日子以來，讓我缺乏時間管理的弱點，暴露得更明顯。&lt;br&gt;
做事喜歡隨心而起的個性，也讓我每件事都有做，卻都做不好。&lt;br&gt;
一直在事情沒做完與做不好的恐懼下度過。&lt;/p&gt;
&lt;p&gt;我是知道會這樣的，&lt;br&gt;
只是真的在這些事發生時，才發現自己根本心理建設不夠。&lt;/p&gt;
&lt;h2 id=&quot;別日&quot;&gt;別日&lt;/h2&gt;
&lt;p&gt;我很懷念以前在歷史系時，&lt;br&gt;
偶爾讀讀歷史，然後自由時間都玩資訊的時光，&lt;br&gt;
儘管不用太認真上課，卻也能夠遊刃有餘的Pass每科考試。&lt;br&gt;
（儘管分數不高，但讀考試時卻也很開心）&lt;/p&gt;
&lt;p&gt;但我已經無法再用這種態度面對自己現在的生活了，&lt;br&gt;
其實這也是理所當然的。&lt;/p&gt;
&lt;p&gt;我好想繼續鑽研自己喜歡的技術，去實作自己想做的作品，&lt;br&gt;
但是我現在讓自己走了這條路，這些事已經不能當作主要目標，&lt;br&gt;
心裡充滿了許多矛盾。&lt;/p&gt;
&lt;p&gt;有太多事情無法再用過去的生活方式去面對，&lt;br&gt;
我也沒有太多時間埋手在過去的時光，&lt;br&gt;
而必須認真思考，思考我該怎麼做，怎麼改變。&lt;/p&gt;
&lt;h2 id=&quot;面對&quot;&gt;面對&lt;/h2&gt;
&lt;p&gt;研究生生活兩年，其實不長，&lt;br&gt;
卻也是能讓人洗髓、脫胎換骨。&lt;/p&gt;
&lt;p&gt;我可以選擇繼續逃避，整日在惶恐或焦慮中度過，&lt;br&gt;
然後兩年後勉強頂一個碩士頭銜，卻不一定名副其實。&lt;/p&gt;
&lt;p&gt;那我幹麻浪費兩年時間讀研究所？愚蠢至極。&lt;/p&gt;
&lt;p&gt;我要做的事情就是面對，&lt;br&gt;
去想辦法，去調試，去做規劃，去取捨。&lt;/p&gt;
&lt;p&gt;這條路是我選的，就是要去充實原本自己不熟的理論層面，&lt;br&gt;
都知道是不熟的，會遇到困境是正常的，會挫折和沮喪也是，&lt;br&gt;
但是，不應該被這些負面情緒佔據太久。&lt;/p&gt;
&lt;p&gt;我會嘗試去面對與克服，去改變。&lt;br&gt;
期許自己，兩年後，能夠滿意自己這兩年的努力與進步。&lt;/p&gt;
&lt;p&gt;2014 年 10 月 31 日，寫於萬聖節之時，若虛。&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
  <entry>
    <title>如何用 Docker 部署 PHP 專案</title>
    <link href="https://fntsr.tw/articles/how-to-deploy-php-projects-with-docker/" />
    <id>https://fntsr.tw/articles/how-to-deploy-php-projects-with-docker/</id>
    <updated>2014-10-18T17:00:33.000Z</updated>
    <published>2014-10-18T17:00:33.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/162/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本簡報是為 PHPConf2014 議程所準備的，但陸續會在針對簡報做維護，並且在這邊回答會眾對於當天大會聽講但是沒有聽懂的部分。&lt;/p&gt;
&lt;h2 id=&quot;關於演講&quot;&gt;關於演講&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;影片： (請耐心等候主辦單位釋出)&lt;/li&gt;
&lt;li&gt;簡報： &lt;a href=&quot;https://speakerdeck.com/fntsrlike/how-to-deploy-php-projects-with-docker&quot;&gt;SpeakerDeck&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.slideshare.net/ruoshiling/how-to-deploy-php-projects-with-docker&quot;&gt;SlideShare&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;更新紀錄&quot;&gt;更新紀錄&lt;/h2&gt;
&lt;h5 id=&quot;2014-10-25-sat-v21&quot;&gt;2014-10-25 Sat. v2.1&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;因為SpeakDeck原本的項目一直無法轉檔成功，於是另外再開一個項目重新上傳，網址不變。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;2014-10-24-fri-v2&quot;&gt;2014-10-24 Fri. v2&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;修正演講時發現的小錯。&lt;/li&gt;
&lt;li&gt;補上缺少的Expose Port的投影片。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;聽眾回饋&quot;&gt;聽眾回饋&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;講起來太快，很像在趕行程。&lt;/li&gt;
&lt;li&gt;實戰經驗說的不足。缺少了運用在正式伺服器上面的相關實作經驗&lt;/li&gt;
&lt;li&gt;缺少實務面 Scalability in Mind&lt;/li&gt;
&lt;li&gt;講者還只是學生沒有真正在軟體業待過，對軟體公司複數伺服器的自動化部署應該是完全沒有概念。&lt;/li&gt;
&lt;li&gt;AUFS 的理解不太正確。&lt;/li&gt;
&lt;li&gt;LXC 是 Docker 0.38 的限制，Docker 1.0 已經開發了自己的 container lib 而不再以 linux container 為預設值。&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="docker" />
    <category term="php" />
    <category term="talks" />
    <category term="web" />
  </entry>
  <entry>
    <title>二十四歲生日</title>
    <link href="https://fntsr.tw/announce/24-years-old/" />
    <id>https://fntsr.tw/announce/24-years-old/</id>
    <updated>2014-10-16T23:59:02.000Z</updated>
    <published>2014-10-16T23:59:02.000Z</published>
<content type="html">&lt;p&gt;今天是我二十四歲生日。 （噢不，個資外洩了）&lt;/p&gt;
&lt;p&gt;今年生日算是過得比較清淡的吧！一來是到了一個新環境了，暫時與熟識的人分開了，比較不會有些瘋狂的慶生行為。二來自己最近也在忙著準備10/18禮拜六的演講，不斷利用閑餘時間修簡報，所以就算有人想幫我慶生大概也找不到我的人（炸）。嘛，清淡歸清淡，但因為網路發達，還是有許多人留了祝賀的言語，也是挺溫暖的。&lt;/p&gt;
&lt;p&gt;二十四歲這一年是研究所的開端，到二十五歲，是我人生中難得有時間可以全心精儘自己的時候。希望在明年過生日時，能明顯看到自己的成長。去PHPConf演講，或許就是我強迫自己要成長的第一步。&lt;/p&gt;</content>
    <category term="announcement" />
  </entry>
  <entry>
    <title>我為什麼以及如何使用 Sublime Text 2</title>
    <link href="https://fntsr.tw/articles/why-and-how-i-use-sublime-text-2/" />
    <id>https://fntsr.tw/articles/why-and-how-i-use-sublime-text-2/</id>
    <updated>2013-12-15T15:03:12.000Z</updated>
    <published>2013-12-15T15:03:12.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/157/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ST2 是我在 Programming 時必備的編輯器（Editor），從原本使用 Notepad++ 跳槽到 ST2，就回不去了，更遑論筆電換成 Mac 後，更是確定使用 ST2 作為我的開發利器（雖然也不是不會使用神器 Vim，但是很多快捷鍵還不熟，通常只有在連線到 server 才會用ＸＤ）。而在處理 MBA 2013 年中升級到 OS X 10.9的 續航問題而嘗試重新安裝 OS 後，便利用這機會，把我有關 ST2 的相關設定作為筆記寫成這篇文章囉。&lt;/p&gt;
&lt;h2 id=&quot;為什麼使用st2&quot;&gt;為什麼使用ST2&lt;/h2&gt;
&lt;h3 id=&quot;我的理由&quot;&gt;我的理由：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;跨平台：Linux, OS X, Windows 皆有支援。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;配色佳：尤愛預設的Monokai Color Scheme，深底色會讓眼睛舒適。&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;套件多：豐富的套件與簡單好用的套件管理器，讓我簡單擴充我想要的功能。&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;自訂強：非常彈性與強大的自訂設定，讓我打造屬於自己的編輯器。&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;st設計原則&quot;&gt;******ST設計原則：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;專注在文字與程式碼上，而不是讓人眼花撩亂的工具列；&lt;/li&gt;
&lt;li&gt;對話框訊息不使用晦澀難懂的文字；&lt;/li&gt;
&lt;li&gt;善用螢幕的每個空間，使全螢幕、多螢幕模式一起編輯檔案，儘可能很容易&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;下載&quot;&gt;下載&lt;/h2&gt;
&lt;p&gt;下載頁面：&lt;a href=&quot;http://www.sublimetext.com/2&quot;&gt;http://www.sublimetext.com/2&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
因為 ST3 在此時還在 Beta，有些套件可能仍還未升級到可以支援 ST3，所以本人還是繼續使用 ST2。&lt;/p&gt;
&lt;h2 id=&quot;套件packages&quot;&gt;套件（Packages）&lt;/h2&gt;
&lt;h3 id=&quot;安裝套件管理器&quot;&gt;安裝套件管理器&lt;/h3&gt;
&lt;p&gt;Ctrl + ` 呼叫 Console（控制台），然後輸入以下 Script（腳本），並且送出：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; urllib2,os; pf=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39;Package Control.sublime-package&#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; ipp=sublime.installed_packages_path(); os.makedirs(ipp) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; os.path.exists(ipp) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(os.path.join(ipp,pf),&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39;wb&#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).write(urllib2.urlopen(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39;http://sublime.wbond.net/&#39;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;pf.replace(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39;%20&#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)).read()); &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&#39;Please restart Sublime Text to finish installation&#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如此一來就可以使用套件管理器了！&lt;/p&gt;
&lt;h3 id=&quot;使用套件管理器&quot;&gt;使用套件管理器&lt;/h3&gt;
&lt;p&gt;使用command + shift + p 呼叫 Command Palette。然後你可以使用下列指令來做套件管理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Package Control: Install Package&lt;/li&gt;
&lt;li&gt;Package Control: Litst Package&lt;/li&gt;
&lt;li&gt;Package Control: Remove Package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Command Palette的搜尋是只要輸入目標擁有的關鍵字即可搜尋到，所以通常我們只輸入後方的單字。還有其他指令可輸入Package Control 查詢&lt;/p&gt;
&lt;p&gt;以下套件名稱都是可以點擊的超連結，會連結該套件在Package Control的對應頁面。有些套件不是安裝就能使用，或是需要透過按鍵觸發，建議安裝前都閱讀一下他們自己的頁面哦。&lt;/p&gt;
&lt;h3 id=&quot;推薦套件&quot;&gt;推薦套件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Package%20Control&quot;&gt;Package Control&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 就是上面安裝的套件管理器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/AdvancedNewFile&quot;&gt;AdvancedNewFile&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 在指定路徑新增檔案。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Alignment&quot;&gt;Alignment&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 讓程式碼能多行將’=’或自定義符號對齊的套件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/BracketHighlighter&quot;&gt;BracketHighlighter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 將括號高亮顯示。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/ConvertToUTF8&quot;&gt;ConvertToUTF8&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 解決中文顯示亂碼的問題（將Big5, GBK轉為UTF8讓編輯器顯示）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Color%20Highlighter&quot;&gt;ColorHighlighter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 當的游標移至文字中如顏色相關的色碼會自動顯示對應的顏色。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/ColorPicker&quot;&gt;ColorPicker&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 呼叫調色盤，讓你直接用選的來選顏色。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Emmet&quot;&gt;Emmet&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 原Zend Coding，能加速程式開發的神器，詳細使用方法請見官方文件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/search/LiveReload&quot;&gt;LiveReload&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 此套件搭配對應瀏覽器擴充，可以讓你儲存檔案時，自動重新整理網頁。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/SFTP&quot;&gt;SFTP&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 能夠讓你使用SFTP/FTP的方式，直接用本機的ST去修改檔案並且儲存。對於Vim苦手可說是必備套件！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/SideBarEnhancements&quot;&gt;SideBarEnhancements&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – Enhancements to Sublime Text sidebar. Files and folders.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/SublimeLinter&quot;&gt;SublimeLinter&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 能用高亮提示使用者程式碼中，不是規範內或錯誤的寫法。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/SublimeCodeIntel&quot;&gt;SublimeCodeIntel&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 多數語言的程式碼提示與追蹤。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;選用套件&quot;&gt;選用套件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Console%20API%20Snippets%20(JavaScript)&quot;&gt;Console API Snippets (JavaScript)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – JavaScript Console API Snippets for Sublime Text&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/CSS%20Less(ish)&quot;&gt;CSS Less(ish)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 讓你用註解的方式，在CSS達到LESS用變數、嵌套的功能。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/DocBlockr&quot;&gt;DocBlockr&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 自動完成PHP, JS, CoffeeScript, ActionScript, C, C++的DocBlock註解。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Git&quot;&gt;Git&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 能在ST下使用Git指令，免於在ST和Terminal間頻繁地切換。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/HTML5&quot;&gt;HTML5&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – HTML5程式碼高亮與自動完成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/jQuery&quot;&gt;jQuery&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – jQuery程式碼高亮與自動完成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/JsFormat&quot;&gt;JsFormat&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 幫你格式化JavaScript排版，尤其使用在壓縮過的js檔上。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/LESS&quot;&gt;LESS&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – LESS程式碼高亮&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Prefixr&quot;&gt;Prefixr&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 能透過Prefixr API協助處理CSS跨瀏覽器的相容問題。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Sass&quot;&gt;Sass&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – SASS程式碼高亮與自動完成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/SCSS&quot;&gt;SCSS&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – SCSS程式碼高亮與自動完成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/Tag&quot;&gt;Tag&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; – 重新格式化HTML/XML的排版。適合用在外來的dirty code。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;自定義設定檔&quot;&gt;自定義設定檔&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;font_size&quot;: 14.0,   // 字體大小&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;rulers&quot;: [120],     // 邊線寬度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;wrap_width&quot;: 120,   // 邊界寬度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;tab_size&quot;: 4,       // tab寬度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;spell_check&quot;: true, // 拼音檢查&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;translate_tabs_to_spaces&quot;: true,          // tab轉成空白&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;trim_trailing_white_space_on_save&quot;: true, // 存檔時將句子後面多餘的空白清除&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;highlight_line&quot;: true,        // 高亮當前行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;match_brackets_angle&quot;: true,  // 顯示對應的尖型括號 &quot;&amp;#x3C;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;save_on_focus_lost&quot;: true,        // 當不再專注當前文件時，自動存檔&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;ignored_packages&quot;:[&quot;Vintage&quot;] // 忽略套件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.sublimetext.tw/&quot;&gt;Sublime Text 手冊&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sublime.wbond.net/&quot;&gt;Package Control&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.kkbruce.net/2012/12/useful-sublime-text-2-package-list.html#.Uq1ewGQW1B8&quot;&gt;KingKong Bruce記事 – 實用SUBLIME TEXT 2套件整理(2012/12)&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cnblogs.com/lhb25/archive/2013/05/02/sublimelinter-for-js-css-coding.html&quot;&gt;梦想天空 – 借助 SublimeLinter 编写高质量的 JavaScript &amp;#x26; CSS 代码&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kevintsengtw.blogspot.tw/2012/03/sublime-text-2-part5-alignmentcode.html#.Uq1lu2QW1B8&quot;&gt;mrkt 的程式學習筆記 – Sublime Text 2 – 好用的前端程式編輯器 Part.5 使用Alignment對齊你的Code&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ihower.tw/blog/archives/7375&quot;&gt;ihower {blogging} – Sublime Text 資源整理&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eugg.blogspot.tw/2013/05/sublime-text-2-livereload-plug-in.html&quot;&gt;{euSpark*} U閃亮 – [開發筆記] 幫你的 Sublime Text 2安裝 LiveReload Plug-in&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://rritw.com/a/JAVAbiancheng/ANT/20120910/220800.html&quot;&gt;Sublime Text初始設置&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</content>
    <category term="editor" />
  </entry>
  <entry>
    <title>國立中央大學軟體工程研究所推甄心得</title>
    <link href="https://fntsr.tw/articles/recommendation-experience-of-master-of-software-engineering/" />
    <id>https://fntsr.tw/articles/recommendation-experience-of-master-of-software-engineering/</id>
    <updated>2013-12-04T16:37:30.000Z</updated>
    <published>2013-12-04T16:37:30.000Z</published>
<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fntsr.tw/articles/152/&quot;&gt;Site is undergoing maintenance&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本文採用&lt;a href=&quot;https://goo.gl/TwbVOk&quot;&gt;CC授權 姓名標示─非商業性─禁止改作 3.0 台灣&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&quot;2016-11-30-補充&quot;&gt;2016-11-30 補充：&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;中央大學從我那屆進去時早就沒有軟體工程研究所了，應該正名為國立中央大學資訊工程學系軟體工程碩士班。在這邊補充，就不另外修改標題了。&lt;/li&gt;
&lt;li&gt;目前軟工碩士班推甄的複試已經改成仿業界的闖關面試，不再是上機考了，所以本篇心得的參考價值已經失效了。請另外搜尋 2015 年（含）後的推甄心得。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;緒論&quot;&gt;緒論&lt;/h2&gt;
&lt;p&gt;國立中央大學軟體工程研究所（簡稱軟工所）今年第一次嘗試以上機考為主的推甄方式，且不看重課業成績，這不但意味這造福原本是資工系會 Programming 但課業成績不佳的同學，更為大學讀非本科系卻對資訊有濃厚興趣的學生開拓的一條路，敝人就是此次考試的受惠者，因為要感謝的人太多，所以只好藉由發心得文給未來想參加此考試的同學參考，作為回報。&lt;/p&gt;
&lt;p&gt;關於本次考試說明可以參考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;COSCUP 2013 Lighting Talk: &lt;a href=&quot;https://goo.gl/Rn44Xj&quot;&gt;http://goo.gl/Rn44Xj&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;軟工所粉絲專頁： &lt;a href=&quot;https://goo.gl/JqdHdb&quot;&gt;http://goo.gl/JqdHdb&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;強者的心得文參考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pioneerlike：&lt;a href=&quot;https://goo.gl/mKmqbb&quot;&gt;http://goo.gl/mKmqbb&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt; （#1IcBND8r (graduate) @ PTT ）&lt;/li&gt;
&lt;li&gt;0w0：&lt;a href=&quot;https://goo.gl/Oq7D34&quot;&gt;http://goo.gl/Oq7D34&lt;span aria-hidden=&quot;true&quot; class=&quot;external-link-icon inline align-text-top ml-px text-[0.75em] text-gray-500 dark:text-gray-300 i-fluent-window-new-24-regular&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上強者有敘述過的部分我就儘量不重複了，他們心得寫的很好，已經不需重新闡述，所以我會著重在從實務經驗較多的同學的角度去做心得分享。&lt;/p&gt;
&lt;h2 id=&quot;關於我&quot;&gt;關於我&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;國立中興大學歷史系，系排 85.5%，無輔系、雙主修，修過資工系幾堂課。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;國立文華高中 中區資訊能力競賽(無得名) / BBS 校站 NF 創站長 / 電研社社長 *&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;國立中興大學 學生會資訊長 / 圖書館網頁工讀生&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2013全國⼤大專校院開放軟體創作競賽 佳作 / Indie Speed Run 2013 / g0v.tw hackath5n&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;報考 40 名，取 11 名，正取10&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;關於推甄&quot;&gt;關於推甄&lt;/h2&gt;
&lt;h3 id=&quot;誰適合報名who-is-object&quot;&gt;誰適合報名？（Who is Object?）&lt;/h3&gt;
&lt;p&gt;正如 pioneerlike（後簡稱 p9e ）所言：『「只寫過網站」的同學不太適合參加本次推甄』，但不必沮喪，這不代表這類人要放棄參加推甄，反而要利用這項經驗去發展。像是敝人就是偏向網站開發的類型，與P大比起來，敝人在程式競賽（ACM-like）的經驗是比較缺乏的，比較常觸碰的是專案開發與維護的部分，也算是比較偏向網站開發的同學，但仰賴高中維護過 BBS 站（Maple-Itoc，純 C 寫成）與簡單的資訊競賽的經驗，對於 C 語言有所了解，但和競賽比起來，走的是不太一樣的方向。&lt;/p&gt;
&lt;p&gt;也就是說，你不一定需要透過 ACM、CPE 等資訊競賽的路線，只要是對專案開發有興趣的同學，可以嘗試用 C、C++、Java 等，開發一項專案，去了解軟體程式設計和網頁程式設計的不同，以及其中的思考邏輯，會對你幫助很大。比起一般人，你們擁有網頁開發的基礎，要跳入這塊應該是比較容易的。&lt;/p&gt;
&lt;h3 id=&quot;第一階段備審資料&quot;&gt;第一階段：備審資料&lt;/h3&gt;
&lt;p&gt;正如 p9e 和 0w0 所說，成績在這個階段不是重點。他們系排都在 50% 左右，而敝人甚至是非相關科系的，備審資料要求填寫的科目分數，一概沒有修過，但這階段的分數仍然有 8X，可以做在校成績所占比重不高的最大驗證。&lt;/p&gt;
&lt;p&gt;和 p9e 不同的，我想強調這階段的重點是代表作。&lt;/p&gt;
&lt;p&gt;雖然敝人在高中曾在校內資訊競賽拿到第一名，但到了中區後仍然慘當炮灰。在大學時也未曾參加過 CPE，所以我認為 CPE 應該不是唯一重點。而我走的正是另一條路，我寫過許多小作品，雖然不是很強大，但至少都是一個可以獨立運作的（網頁）程式，且都附在備審資料中。&lt;/p&gt;
&lt;p&gt;而為了這次推甄，我把以前的思考已久的想法用網頁程式實作出來，當作代表作與備審資料共同交出去。而在第二階段考試開始前，考試老師也說他們有請研究生幫忙把每個報考生的作品試跑過，看能不能正常運作。所以我想只要寫個能正常運作的作品，附上安裝或使用說明，這階段的分數都能有80上下。&lt;/p&gt;
&lt;p&gt;複習並總結一下，因為本次推甄的重點是上機考，所以這階段是不會刷掉任何人，只有分數的差異（大概 10 ~ 15 分），如果你有上傳能正常運作的代表作，分數應該都會有不錯的表現。&lt;/p&gt;
&lt;h3 id=&quot;第二階段上機考&quot;&gt;第二階段：上機考&lt;/h3&gt;
&lt;p&gt;今年上機考考了七題，題型說明，p9e 和 0w0 都說得差不多了，我一樣儘量不重複他們所說過的部分。想要了解詳細的同學，可參考 p9e 的心得，他寫的很清楚。&lt;/p&gt;
&lt;p&gt;而我把它分為四題簡單題（1, 2, 3, 5）與三題複雜題。但這是根據敝人的實力所做的判斷啦ＸＤ。搞不好有人覺得全部都很簡單之類的。但我會這麼做憑據的是，四題簡單題只要了解 key point 時，不用十五分鐘就可以解決（甚至不用三分鐘），敝人在四題簡單題所花的時間大概占整個考試時間的 1/3 左右。&lt;/p&gt;
&lt;p&gt;建議習慣開發專案的同學，在上機考前，至少在兩個禮拜之前，能到比較著名的 Online Judge 系統去做練習。或許有同學會問，前面不有大大說是偏向考資訊科學、業界實作而不是 ACM 嗎？Indeed～ 但在這邊的練習是去熟悉 online judge 的模式，還有怎麼在限定時間內去解出最多的題數，這會在你上機考時讓你較為從容，比較知道怎麼掌握節奏。&lt;/p&gt;
&lt;p&gt;而練習這類題目有一個好處，就是每題通常會有一個需要你去解決的key answer，透過解題能讓你快速熟悉許多技巧。當解題完成後，可以在思考有什麼更好的寫法。如果經濟允許，可以去買些競賽相關的書籍，去理解有哪些技巧是常被題目所用到的。敝人考前就買了一本對岸出版的《 ACM 程序設計》，對我這次考試幫助很大。&lt;/p&gt;
&lt;p&gt;最後，在程式語言的部分，會希望你能至少掌握 C 與 C++ 的基本技巧，尤其是 C++ 物件導向和 STL 的部分，敝人原本是只會C語言而已，但認為這種競賽會重視物件導項相關概念，所以在考試前兩個禮拜之前開始研讀 C++，結果很幸運的，幾乎所有題目都可以用 C++ 去解，這也是讓敝人得以正取的關鍵之一。當然，你也可以靠Java打遍所有題目，但仍然建議你，至少要能讀懂 C++ 的語法，這樣若題目規定你必須要用 C++ 編寫時，才不會愣在那裡。至於在使用 Java 參加上機考的相關問題與經驗，可以私下詢問 p9e，我想他會很樂意分享的。&lt;/p&gt;
&lt;h2 id=&quot;ending&quot;&gt;Ending&lt;/h2&gt;
&lt;p&gt;很幸運的能在今年考研究所的時候，中央大學軟工所開放了這樣考試方式。讓敝人得以從歷史系的身份，成功考取資訊相關的研究所，在以前相關系所只要看到文學院，90% 都會直接刷掉的。當然這不代表說資工系廉價，連歷史系都能考上相關研究所的意思。敝人在大學四年中，也花了許多時間在資訊上的研讀，包括程式語言的練習、接案子，參加有興趣的Conference，把握機會參加競賽與社群，這都是讓一個非本科系的學生能夠累積基礎的管道。&lt;/p&gt;
&lt;p&gt;我想要說的是，如果身在非資訊相關科系卻對資訊有著濃厚興趣的夥伴（很多原因會產生這種結果，不多贅述），不要放棄你對資訊的渴望，好好在課餘時間去多結交資訊背景的朋友，大家一起討論、分享相關訊息、參加活動，接個案子、多寫專案，慢慢累積實力，到了大四，就來嘗試中央軟工所吧！我想這是對我們這類人，敞開的另一扇大門與歸途。&lt;/p&gt;
&lt;p&gt;最後，資訊科學的基本學科，還是要在入學前儘量掌握。敝人已經打算在下學期只有九學分的生活，好好研讀作業系統、資料結構、演算法等，展開另一趟有趣的學習之路。&lt;/p&gt;
&lt;p&gt;我的分享大概就是這樣。也在漢敝校系主任討論過後，&lt;br&gt;
之後可能會再寫一篇鼓勵學弟妹多多實作的心得延伸，到時候會再分享出來。&lt;br&gt;
有什麼問題，也歡迎寫信給我：&lt;code&gt;fntsrlike+ptt [at] gmail.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;祝所有對資訊領域有興趣的夥伴，皆能在這類考試中得到肯定。&lt;br&gt;
Just do it, hack for fun.&lt;/p&gt;</content>
    <category term="knowledge" />
  </entry>
</feed>
