<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4877487320781767952</id><updated>2026-07-04T11:24:04.126+08:00</updated><category term="生活"/><category term="Python"/><category term="網購"/><category term="好書"/><category term="物聯網"/><category term="好站"/><category term="網頁技術"/><category term="樹莓派"/><category term="電腦"/><category term="還書"/><category term="機器學習"/><category term="ESP8266"/><category term="Raspberry Pi"/><category term="Arduino"/><category term="評論"/><category term="MicroPython"/><category term="主機"/><category term="ESP32"/><category term="理財"/><category term="能源"/><category term="jQuery"/><category term="人工智慧"/><category term="PHP"/><category term="食譜"/><category term="Java"/><category term="網路爬蟲"/><category term="Javascript"/><category term="音樂"/><category term="量化投資"/><category term="旅行"/><category term="LLM"/><category term="小狐狸"/><category term="Linux"/><category term="網路"/><category term="歷史"/><category term="NLP"/><category term="其他"/><category term="EasyUI"/><category term="語言學"/><category term="醫藥"/><category term="Streamlit"/><category term="工作"/><category term="手機"/><category term="資料科學"/><category term="雲端"/><category term="索引"/><category term="HTML5"/><category term="Google"/><category term="R 語言"/><category term="GAE"/><category term="硬體"/><category term="Django"/><category term="自動化"/><category term="Mapleboard"/><category term="OpenAI"/><category term="jQuery UI"/><category term="電子零件"/><category term="App"/><category term="C 語言"/><category term="PyTorch"/><category term="資料視覺化"/><category term="Ubuntu"/><category term="Bootstrap"/><category term="創客"/><category term="Windows"/><category term="飛控"/><category term="jQuery Mobile"/><category term="單晶片"/><category term="tkinter"/><category term="戲劇"/><category term="AIGC"/><category term="Flask"/><category term="ChatGPT"/><category term="數學"/><category term="木工"/><category term="Praat"/><category term="ExtJS"/><category term="筆電"/><category term="農業"/><category term="TensorFlow"/><category term="修行"/><category term="小狐狸生態"/><category term="科學"/><category term="養生"/><category term="Telegram"/><category term="WordPress"/><category term="無人機"/><category term="Line"/><category term="♥"/><category term="♥♥♥"/><category term="專案"/><category term="Excel"/><category term="Gemini"/><category term="電子學"/><category term="Fintech"/><category term="Node.js"/><category term="p5.js"/><category term="AWS"/><category term="Stable Diffusion"/><category term="gradio"/><category term="教育"/><category term="邏輯設計"/><category term="SQL"/><category term="架站"/><category term="AutoIt"/><category term="Gemini CLI"/><category term="Ollama"/><category term="保險"/><category term="線上工具"/><category term="電腦技術"/><category term="Android"/><category term="C++"/><category term="Git"/><category term="Julia"/><category term="Matplotlib"/><category term="vibe coding"/><category term="旅遊"/><category term="英文"/><category term="Azure"/><category term="Jetson"/><category term="LangChain"/><category term="LoRa"/><category term="ASP"/><category term="Banana Pi"/><category term="CSS"/><category term="LINE Bot"/><category term="MacOS"/><category term="新軟體"/><category term="物理學"/><category term="Chatbot"/><category term="IC 設計"/><category term="♥♥"/><category term="多媒體"/><category term="統計學"/><category term="計算語言學"/><category term="語音辨識"/><category term="資安"/><category term="韓劇"/><category term="GAS"/><category term="Pandas"/><category term="日文"/><category term="深度學習"/><category term="演算法"/><category term="生活雜記"/><category term="讀書劄記"/><category term="遠端桌面"/><category term="Colab"/><category term="GitHub"/><category term="借書"/><category term="軟體開發"/><category term="Blynk"/><category term="Bokeh"/><category term="Claude Code"/><category term="Micro:bit"/><category term="OpenCV"/><category term="Vue"/><category term="大數據"/><category term="好文"/><category term="影像處理"/><category term="機器人"/><category term="自作專案"/><category term="資料庫"/><category term="Antigravity"/><category term="D3.js"/><category term="GCP"/><category term="Lua"/><category term="Nginx"/><category term="Plotly"/><category term="Swift"/><category term="TCP/IP"/><category term="占星術"/><category term="書籤"/><category term="量子計算"/><category term="Altair"/><category term="NLTK"/><category term="WSH"/><category term="信號處理"/><category term="語音技術"/><category term="Appfog"/><category term="DSP"/><category term="GPU"/><category term="SDD"/><category term="SciPy"/><category term="Seaborn"/><category term="SpaCy"/><category term="scikit-learn"/><category term="區塊鏈"/><category term="相術"/><category term="系統"/><category term="紫微斗數"/><category term="統計"/><category term="AMB82"/><category term="Corona"/><category term="Firebase"/><category term="Hugging Face"/><category term="Joomla"/><category term="MQTT"/><category term="MongoDB"/><category term="Node-RED"/><category term="OpenSpec"/><category term="React"/><category term="SQLite"/><category term="Transformer"/><category term="UAV"/><category term="WebGL"/><category term="tensorflow.js"/><category term="動畫"/><category term="排版"/><category term="繪圖"/><category term="虛擬幣"/><category term="通訊"/><category term="Chart.js"/><category term="Cheatsheet"/><category term="Highcharts"/><category term="JSP"/><category term="Keras"/><category term="Mathematics"/><category term="Midjourney"/><category term="Numpy"/><category term="OpenClaw"/><category term="RAG"/><category term="STM32"/><category term="Verilog"/><category term="Wireshark"/><category term="ml5.js"/><category term="reflex"/><category term="備忘"/><category term="影像辨識"/><category term="比特幣"/><category term="股市"/><category term="藝術"/><category term="API"/><category term="AngularJS"/><category term="Anime"/><category term="Big Data"/><category term="CKeditor"/><category term="Canva"/><category term="Claude"/><category term="DALL-E"/><category term="Data Mining"/><category term="FPGA"/><category term="FastAPI"/><category term="Gimini"/><category term="Go"/><category term="Home Assistant"/><category term="JavaFX"/><category term="Kali"/><category term="Kotlin"/><category term="MCP"/><category term="Make"/><category term="Masonite"/><category term="Next.js"/><category term="NoSQL"/><category term="NotebookLM"/><category term="Notion"/><category term="OrangePi"/><category term="Ruby"/><category term="Scrapy"/><category term="Three.js"/><category term="TinyMCE"/><category term="TinyML"/><category term="VHDL"/><category term="VoIP"/><category term="YOLO"/><category term="brython"/><category term="bubble.io"/><category term="jqPlot"/><category term="mermaid.js"/><category term="no-code"/><category term="中醫"/><category term="人工"/><category term="保養品"/><category term="儀錶板"/><category term="八字學"/><category term="出版"/><category term="園藝"/><category term="控制系統"/><category term="新產品"/><category term="新知識"/><category term="易經"/><category term="智慧音箱"/><category term="監控"/><category term="線上學習"/><category term="線上課程"/><category term="線性代數"/><category term="論文"/><category term="運動"/><category term="電路學"/><category term="韓文"/><title type='text'>小狐狸事務所</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default?start-index=26&amp;max-results=25'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6373</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-4662728531386605188</id><published>2026-07-04T07:42:09.080+08:00</published><updated>2026-07-04T07:42:55.634+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="樹莓派"/><category scheme="http://www.blogger.com/atom/ns#" term="網路爬蟲"/><title type='text'>Python 學習筆記 : 市圖借書與預約爬蟲程式改版 v14</title><content type='html'>&lt;div&gt;由於 6/18 市圖網站登入網頁改版, 加上了數字圖片驗證碼功能, v13 的爬蟲程式立馬崩潰無法登入帳戶擷取借閱與預約資訊, 整個六月又在忙著復原 MSI 電競桌機, 所以爬蟲改版事宜只好擺著, 直到今天才動手, 這次我使用剛上手的 Antigravity CLI 來重構舊版程式, 加上 OCR 圖形辨識功能, 選擇 Claude Sonnet 模型來規劃與實作, 參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/07/google-antigravity.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 重構市圖網站爬蟲&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;原始碼放在 GitHub :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://github.com/tony1966/antigravity_cli/blob/main/projects/ksml-crawler/ksml_lib_14.py&quot; target=&quot;_blank&quot;&gt;https://github.com/tony1966/antigravity_cli/blob/main/projects/ksml-crawler/ksml_lib_14.py&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但因為新版程式辨識驗證碼需要用到 Numpy 與其底層依賴庫, 必須安裝 OpenBLAS 與 tesseract-ocr 等套件, 這樣&amp;nbsp; ksml_lib_14.py 才能順利在 Pi 3 與 Pi 3A+ 上執行.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 更新套件清單&lt;/div&gt;&lt;div&gt;sudo apt-get update&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;安裝 OpenBLAS 及其相關的底層依賴庫&lt;/div&gt;&lt;div&gt;sudo apt update
sudo apt install -y libopenblas-dev libatlas-base-dev&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 安裝 tesseract-ocr 套件 :&lt;/div&gt;&lt;div&gt;sudo apt-get install tesseract-ocr&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 安裝 pytesseract 與 Pillow 套件 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;pip install pytesseract Pillow&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 把 ksml_lib_14.py 傳送到樹莓派後, 先用 chmod 添加可執行權限 :&lt;/div&gt;&lt;div&gt;&lt;div&gt;chmod +x ksml_lib_14.py&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 修改 ksml_lib_14.py 中的 render.com 網址&lt;/div&gt;&lt;div&gt;# kaopi3 -&amp;gt; 5e6i&amp;nbsp;&lt;/div&gt;&lt;div&gt;# pi3aplus -&amp;gt; fdof&amp;nbsp;&lt;/div&gt;&lt;div&gt;# pi400 -&amp;gt; fdof (備用)&amp;nbsp;&lt;/div&gt;&lt;div&gt;nano ksml_lib_14.py&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 測試程式功能是否正常 :&lt;/div&gt;&lt;div&gt;python&amp;nbsp; ksml_lib_14.py &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# 更改 crontab 設定, 把 ksml_lib_13.py 改成 ksml_lib_14.py&lt;/div&gt;&lt;div&gt;crontab -e&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/4662728531386605188/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/4662728531386605188' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/4662728531386605188'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/4662728531386605188'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/python-v14.html' title='Python 學習筆記 : 市圖借書與預約爬蟲程式改版 v14'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-7774683687993199747</id><published>2026-07-03T17:43:31.342+08:00</published><updated>2026-07-03T17:44:15.616+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><category scheme="http://www.blogger.com/atom/ns#" term="資料視覺化"/><category scheme="http://www.blogger.com/atom/ns#" term="還書"/><title type='text'>高科大還書 2 本 : Python資料可視化攻略 + LLM核心攻略制霸生成式AI</title><content type='html'>&lt;div&gt;因有兩本預約書已到館, 中午拿下面兩本去換 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://nkust.primo.exlibrisgroup.com/discovery/fulldisplay?vid=886NKUST_INST:86NKUST&amp;amp;id=991003992496304121&amp;amp;inst=886NKUST_INST&amp;amp;context=L&quot; target=&quot;_blank&quot;&gt;Python資料可視化攻略&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nkust.primo.exlibrisgroup.com/discovery/fulldisplay?vid=886NKUST_INST:86NKUST&amp;amp;id=991004205250104121&amp;amp;inst=886NKUST_INST&amp;amp;context=L&quot; target=&quot;_blank&quot;&gt;LLM核心攻略制霸生成式AI : ChatGPT、嵌入技術、微調與多模態AI最佳實踐&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;No.1 沒時間看, No.2 市圖可借. 炎夏的中午真是熱爆.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/7774683687993199747/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/7774683687993199747' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7774683687993199747'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7774683687993199747'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/2-python-llmai.html' title='高科大還書 2 本 : Python資料可視化攻略 + LLM核心攻略制霸生成式AI'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-3209112398818904955</id><published>2026-07-03T16:39:57.563+08:00</published><updated>2026-07-03T16:39:57.564+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : 重構市圖網站爬蟲</title><content type='html'>&lt;div&gt;經過前面的 todo list 專案練習後, 我已大致熟悉 agy 的用法了, 本篇要先來解決一個實務問題. 我之前手刻的市圖爬蟲程式在 6/18 早上突然失靈了, 檢視市圖網站才知道登入頁面多了一個數字驗證碼輸入欄位, 需判讀數字輸入正確號碼才能登入成功.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGRIqaO71YAh-f52Fqr8mI19vNS-KKxZivmUEairHuVjH5fCZg4E6sHwJOLIKF7udRLqPLkHhbnKglnVX1mD6utEQhBiKafTHotk0tR1NQTBH0da29fIy0TrsLidgYcOW-vgwqocI2Jv0-3vVyPqio393C_uGURI5Uu4pmPqNcza6PuGx8HtzhyphenhyphenI0YMCnl/s1064/ksml_login.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1064&quot; data-original-width=&quot;1051&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGRIqaO71YAh-f52Fqr8mI19vNS-KKxZivmUEairHuVjH5fCZg4E6sHwJOLIKF7udRLqPLkHhbnKglnVX1mD6utEQhBiKafTHotk0tR1NQTBH0da29fIy0TrsLidgYcOW-vgwqocI2Jv0-3vVyPqio393C_uGURI5Uu4pmPqNcza6PuGx8HtzhyphenhyphenI0YMCnl/s320/ksml_login.jpg&quot; width=&quot;316&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;爬蟲停擺兩周了, 如果還是要手刻來解決恐怕曠日廢時, 這次要改用 agy 來升版.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;本系列之前的文章參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-agy.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 安裝命令列程式代理 agy&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 學習地圖&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-cli-to-do-list.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/07/google-antigravity-gui-to-do-list.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : GUI 待辦清單 (to-do list) 專案&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關於市圖爬蟲程式參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2025/03/blog-post_10.html&quot; target=&quot;_blank&quot;&gt;Python 網頁爬蟲筆記索引&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 建立專案目錄並啟動 agy :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;首先在 projects 下建立專案目錄 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli\projects&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;mkdir ksml-clawler&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli\projects&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;ksml-clawler&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;然後將之前的爬蟲程式 ksml_lib_13.py 與從市圖網站抓下來的登入頁面截圖 jpg 檔 ksml_login.jpg 複製到專案目錄底下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli\projects\ksml-crawler&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;dir&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; 目錄: D:\antigravity_cli\projects\ksml-crawler&lt;/div&gt;&lt;div&gt;Mode&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LastWriteTime&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Length Name&lt;/div&gt;&lt;div&gt;----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-------------&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;------ ----&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2026/6/5&amp;nbsp; 上午 12:43&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8858 &lt;span style=&quot;background-color: #fcff01;&quot;&gt;ksml_lib_13.py&lt;/span&gt;&amp;nbsp; (舊版爬蟲)&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/27&amp;nbsp; 上午 01:13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;240936 &lt;span style=&quot;background-color: #fcff01;&quot;&gt;ksml_login.jpg&lt;/span&gt;&amp;nbsp; (新登入頁面截圖)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接著啟動 agy :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli\projects\ksml-clawler&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;agy&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;輸入下列提示詞 :&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;div&gt;這個現有的圖書館爬蟲程式因為網站最近在登入頁面加入了「數字圖形驗證碼」，導致舊的 Selenium 程式無法順利登入。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我已經把現有的爬蟲程式 `ksml_lib_13.py` 與登入頁面的實體截圖 `ksml_login.jpg` 放在當前目錄下了。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;專案目標：&lt;/div&gt;&lt;div&gt;- 目標網址：https://webpacx.ksml.edu.tw/personal/&lt;/div&gt;&lt;div&gt;- 核心任務：&lt;span style=&quot;background-color: #fcff01;&quot;&gt;只修改「登入功能」&lt;/span&gt;，使其能夠成功處理數字圖形驗證碼，&lt;span style=&quot;background-color: #fcff01;&quot;&gt;其餘資料擷取邏輯保持不變&lt;/span&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;重構方向提示：&lt;/div&gt;&lt;div&gt;在 Python 中引入輕量級的 OCR 套件（例如 pytesseract 或 ddddocr），自動對驗證碼圖片進行局部截圖與辨識後自動輸入。&lt;/div&gt;&lt;div&gt;如果 OCR 辨識失敗導致登入錯誤，請讓程式具備自動重新整理驗證碼、重新截圖辨識並重試（Retry）最多 3 次的機制。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;💡 【關鍵：帳密讀取與 Cron Job 相容性需求】&lt;/div&gt;&lt;div&gt;- 我原本的程式是在 Cron Job 中透過命令列參數帶入帳密執行的，格式為：`python ksml_lib_13.py &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;`。&lt;/div&gt;&lt;div&gt;- 為了不破壞現有的排程自動化，重構後的登入機制必須採用命令列參數設計：&lt;/div&gt;&lt;div&gt;&amp;nbsp; 檢查是否有命令列參數（`sys.argv`），若有則直接使用排程帶入的帳密。否則跳出程式.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;請先不要修改程式碼。&lt;/div&gt;&lt;div&gt;1. 請先閱讀 `ksml_lib_13.py` 了解現有登入邏輯，並結合 `ksml_login.jpg` 截圖與目標網址，分析驗證碼的 HTML 結構與更新機制。&lt;/div&gt;&lt;div&gt;2. 為我產出一個重構的 Implementation Plan (實作計畫)，並說明你需要安裝哪些額外的 Python 套件或工具（如 OCR 相關依賴）。&lt;/div&gt;&lt;div&gt;3. 專案成果為新版爬蟲程式 `ksml_lib_14.py`&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTZfSswjg4_X19MZS_N5Cy5Cwnr4Zx-PBBrYlKboiT4dQ8iajssmmdjttt6HBBOXR7ZfhnGM8qgXti9I1hfaPU10bI7bqsWmjCZQB_XGq4Xba3u0DPzq-7EIlrkpTEMaHCwdLiZHE2PuuUKrEcZxWThgymDdq50P48Z8uz8fK0CTZl6vUiNi7c3XMCeV9S/s1811/agy-project-ksml-crawler-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1341&quot; data-original-width=&quot;1811&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTZfSswjg4_X19MZS_N5Cy5Cwnr4Zx-PBBrYlKboiT4dQ8iajssmmdjttt6HBBOXR7ZfhnGM8qgXti9I1hfaPU10bI7bqsWmjCZQB_XGq4Xba3u0DPzq-7EIlrkpTEMaHCwdLiZHE2PuuUKrEcZxWThgymDdq50P48Z8uz8fK0CTZl6vUiNi7c3XMCeV9S/s320/agy-project-ksml-crawler-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Claude 規劃結果如下 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 5s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants me to first analyze the existing crawler program and the login pa...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 好的，我先來閱讀現有程式碼與截圖，然後分析目標網站的登入結構。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_13.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/ksml-crawler/ksml_login.jpg) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 截圖已清楚看到驗證碼樣式，接著我去實際抓取目標網站的 HTML 結構，了解驗證碼&amp;nbsp; &amp;lt;img&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 元素與刷新機制。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ReadURL(https://webpacx.ksml.edu.tw/personal/)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(C:/Users/tony1/.gemini/antigravi...tem_generated/steps/7/content.md) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 這個 HTML&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 是高度壓縮的，難以直接找到驗證碼結構。讓我用搜索的方式在原始碼中尋找驗證碼相關關鍵字。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● WebSearch(webpacx.ksml.edu.tw captcha img src HTML structure login)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Search(Captcha keyword search in HTML) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 網站的 HTML&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 是壓縮過的，我已從截圖中收集到足夠的視覺資訊了。現在我整合所有分析，產出重構計畫。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(C:/Users/tony1/.gemini/antigrav...5b6a6fe1/implementation_plan.md) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 以下是完整的分析報告與實作計畫：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 📋 分析摘要&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 現有登入邏輯（ ksml_lib_13.py ）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;步驟&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 程式碼&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 說明&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ---------------------------|-----------------------------------|---------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; find_element(By.ID, &#39;logxinid&#39;)&amp;nbsp; | 填帳號&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; find_element(By.ID, &#39;pincode&#39;)&amp;nbsp; &amp;nbsp;| 填密碼&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; .btn_grp&amp;nbsp; →&amp;nbsp; input&amp;nbsp; →&amp;nbsp; .click()&amp;nbsp; | 點登入按鈕&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;❌&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 跳過驗證碼&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 導致失敗&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 驗證碼特性（從截圖分析）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 從&amp;nbsp; ksml_login.jpg&amp;nbsp; 可觀察到：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 類型：4-5 位純數字，彩色交錯（紫/藍/橘）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 背景：白色，干擾少 → OCR 友善&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 旁邊有刷新按鈕（🔄） → 可程式化刷新重試&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 🔧 實作計畫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 詳細計畫請見 → implementation_plan.md&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 核心決策&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; #### 1. OCR 套件選型：選用&amp;nbsp; ddddocr&amp;nbsp; ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; pip install ddddocr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 優點：專為中文圖形驗證碼訓練、純 Python、無外部系統依賴&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 比較： pytesseract&amp;nbsp; 需額外安裝 Tesseract 可執行檔，在 Cron Job 環境更麻煩&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; #### 2. 新版登入流程（含 3 次重試）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; 填帳號 → 填密碼 → [最多3次迴圈]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;→ 截取驗證碼圖片（Selenium element.screenshot_as_png）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;→ ddddocr 辨識 → 填入驗證碼欄位&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;→ 點登入 → 判斷成功？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ✓ 找到 .redblock → 登入成功，繼續爬取&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ✗ 找不到 → 點 🔄 刷新 → 重試&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;→ 3次仍失敗 → return (None, None)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; #### 3. 命令列相容性：完全不動 ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 原有&amp;nbsp; sys.argv[1]&amp;nbsp; /&amp;nbsp; sys.argv[2]&amp;nbsp; 的 Cron Job 格式完全保留：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; python ksml_lib_14.py &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## ⚠️ 實作前的必要確認步驟&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 由於網站 HTML 是壓縮的，在正式撰寫&amp;nbsp; ksml_lib_14.py&amp;nbsp; 前，需要確認以下 3 個元素的確切&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ID/selector：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;元素&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 預測可能的 ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 確認方法&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; -----------------------------|----------------------------|--------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼圖片&amp;nbsp; &amp;lt;img&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; captchaImg 、 vcode_img&amp;nbsp; &amp;nbsp;| F12 /&amp;nbsp; browser.page_source&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼輸入框&amp;nbsp; &amp;lt;input&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; vcode 、 captcha&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | F12 / placeholder 含「驗證碼」&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;刷新按鈕&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; refreshCaptcha&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | F12 / onclick 含 refresh&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## ✅ 確認後即可開始撰寫&amp;nbsp; ksml_lib_14.py&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 請問您是否要：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 1. 直接授權我產出&amp;nbsp; ksml_lib_14.py （我會在程式碼中加入自動偵測元素的邏輯）？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. 或先用瀏覽器 F12 確認驗證碼元素的 ID 後再告訴我？&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Claude 要求我確認驗證碼圖片, 輸入框, Refresh 按鈕的 ID, 我用 F12 去查網頁原始碼, 發現只有輸入框元件有 ID, 其它兩個元件沒有 ID :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; 驗證碼相關的三個元件如下 :&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;input name=&quot;captcha&quot; id=&quot;captcha&quot; type=&quot;text&quot; placeholder=&quot;請輸入驗證碼，並區分大小寫&quot; value=&quot;&quot;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAAyCAIAAAABYqRsAAAK/0lEQVR42u2beVTTVxbH/WOmZ452nHaO03amdWqrVj0erfuG1W7TVqtDrdXO6LR2mWkVN1y&lt;/div&gt;&lt;div&gt;... (略) ... ZCeQGuR1Bf0pWWwE+70pQPJME6H6Dik/4GGQ8Ih4Q2HhEPCGw4JbzgkHBLecEh4wyHhkPCGQ8Ih4Q2HhDcc0v9v+y/alGmPzd5YpQAAAABJRU5ErkJggmh5dzE3ODMwMDU1NDYxODllYg==&quot; class=&quot;captcha&quot; alt=&quot;驗證碼圖片如無法讀取可以移到右邊替代方案&quot; style=&quot;background: none;&quot;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn reflashbtn&quot;&amp;gt;更換驗證碼&amp;lt;/button&amp;gt;&lt;/div&gt;&lt;div&gt;其中只有驗證碼輸入框有 ID, 你可能需要用 class 或 xpath 來定位.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Claude 規劃如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 1m 4s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user has provided the HTML for the three captcha elements:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 完美！三個元素都確認了：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;元素&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Selector&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ---------------------------------------------|---------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼輸入框&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.ID, &#39;captcha&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼圖片&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.CSS_SELECTOR, &#39;img.captcha&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;刷新按鈕&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.CLASS_NAME, &#39;reflashbtn&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 還有一個重要發現：驗證碼圖片的&amp;nbsp; src&amp;nbsp; 是&amp;nbsp; data:image/png;base64,...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 內嵌格式，這讓我可以直接從屬性取得 base64 bytes 餵給&amp;nbsp; ddddocr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ，比截圖更精確、更快！現在直接產出&amp;nbsp; ksml_lib_14.py ：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_14.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ksml_lib_14.py 已建立完成。以下是重點說明：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 🔑 關鍵實作細節&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 驗證碼圖片處理（最乾淨的方式）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 由於&amp;nbsp; src&amp;nbsp; 是&amp;nbsp; data:image/png;base64,...&amp;nbsp; 內嵌格式，不需要任何 HTTP 請求，直接解碼即可：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; img_src = captcha_img.get_attribute(&#39;src&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; b64_data = img_src.split(&#39;,&#39;, 1)[1]&amp;nbsp; &amp;nbsp;# 去掉 &quot;data:image/png;base64,&quot; 前綴&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; img_bytes = base64.b64decode(b64_data) # 得到 PNG bytes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; result = ocr.classification(img_bytes) # ddddocr 辨識&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### Implicit Wait 衝突處理&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 登入成功判斷用&amp;nbsp; WebDriverWait(5秒)&amp;nbsp; 而非&amp;nbsp; find_element ，為避免與&amp;nbsp; implicitly_wait(60)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 衝突，採用暫時停用再恢復的方式：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; browser.implicitly_wait(0)&amp;nbsp; &amp;nbsp;# 暫停，讓 WebDriverWait 的 5 秒生效&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; try:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WebDriverWait(browser, 5).until(...)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; finally:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; browser.implicitly_wait(60)&amp;nbsp; # 無論成敗都恢復&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 確認的三個 Selector&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;用途&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Selector&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ---------------------------------------------|---------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼圖片&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.CSS_SELECTOR, &#39;img.captcha&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;驗證碼輸入框&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.ID, &#39;captcha&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;刷新按鈕&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; By.CLASS_NAME, &#39;reflashbtn&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 📦 部署前安裝套件&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 在執行 Cron Job 的主機上安裝：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; pip install ddddocr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## ✅ 與舊版相容性&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • Cron Job 指令 完全不變： python ksml_lib_14.py &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 借閱/預約資料擷取邏輯一行未動&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 舊版&amp;nbsp; ksml_lib_13.py&amp;nbsp; 保留不受影響&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cluade 已經完成重構實作, 由於爬蟲程式是在樹莓派執行, 先將 ksml_lib_14.py 傳送到樹莓派上, 然後安裝 ddddocr 套件, 但是此套件之依賴套件有些無法在 Pi 3 Bulleye 的 Python 3.9.2 上安裝, 所以要求 Claude 改用替代方案解決, 因為市圖驗證碼是簡單的數字圖片, 只要用經典的開源文字識別套件 Tesseract 就可以達到很高識別精確度 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 你在此專案使用的 ddddocr 套件無法在目標主機樹莓派 Pi 3B Bulleye 的 Python 3.9.2 安裝執行,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 請改用經典的 Tesseract OCR 實作&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants to replace ddddocr with Tesseract OCR (pytesseract) because ddddo...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 30s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 了解，Raspberry Pi 3B Bullseye 的 ARM 架構對&amp;nbsp; ddddocr&amp;nbsp; 的 ONNX 依賴支援不佳。改用&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; pytesseract&amp;nbsp; +&amp;nbsp; Pillow&amp;nbsp; 搭配影像預處理是在樹莓派上最穩定的方案。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_14.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 確認了需要修改的範圍，現在一次完成所有 OCR 相關的替換：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Edit(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_14.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 修改完成，來驗證最終的&amp;nbsp; solve_captcha&amp;nbsp; 與&amp;nbsp; login_with_captcha&amp;nbsp; 函式完整正確：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_14.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 第 107 行有一個多餘的空行，順手清掉：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Edit(D:/antigravity_cli/projects/ksml-crawler/ksml_lib_14.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ksml_lib_14.py 已更新完成。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 📝 變更摘要&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 替換內容&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;項目&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 舊版（ddddocr）&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 新版（pytesseract）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ------------|---------------------------------|--------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;imports&amp;nbsp; &amp;nbsp; |&amp;nbsp; import ddddocr&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; import io ,&amp;nbsp; import pytesseract ,&amp;nbsp; from&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| PIL import Image&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;OCR 物件&amp;nbsp; &amp;nbsp;|&amp;nbsp; ocr =&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 不需要，pytesseract 為靜態呼叫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ddddocr.DdddOcr(show_ad=False)&amp;nbsp; |&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;辨識呼叫&amp;nbsp; &amp;nbsp;|&amp;nbsp; ocr.classification(img_bytes)&amp;nbsp; |&amp;nbsp; pytesseract.image_to_string(img,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| config=...)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;影像預處理 | 無&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 灰階 → 二值化 → 放大3倍&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ###&amp;nbsp; solve_captcha()&amp;nbsp; 的影像預處理邏輯&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; 彩色 PNG&amp;nbsp; →&amp;nbsp; 灰階 (L mode)&amp;nbsp; →&amp;nbsp; 二值化 threshold=200&amp;nbsp; →&amp;nbsp; 放大 3× (LANCZOS)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • threshold=200：彩色文字（紫/藍/橘）在灰階下通常 &amp;lt; 200，白色背景 ≥ 200，切分乾淨&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 放大 3×：原始驗證碼圖片較小，Tesseract 對低解析度圖片準確率差，放大後顯著改善&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 白名單&amp;nbsp; 0-9 ：排除 Tesseract 誤判為字母的情況&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; •&amp;nbsp; re.sub(r&#39;[^0-9]&#39;, &#39;&#39;, raw) ：最後一道過濾，清除 Tesseract 殘留的換行或空白&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 🔧 樹莓派部署指令&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; # 1. 安裝系統套件（只需一次）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; sudo apt-get install tesseract-ocr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; # 2. 安裝 Python 套件&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; pip install pytesseract Pillow&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; # 3. 執行（與舊版完全相同）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; python ksml_lib_14.py &amp;lt;帳號&amp;gt; &amp;lt;密碼&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣就完成實作了.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 驗收專案成果 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;修改為 tesseract 版後, 將此新版程式傳送到樹莓派, 但要先安裝必要套件 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;安裝底層 OCR 套件 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;pi@kaopi3:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;sudo apt-get install tesseract-ocr&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;正在讀取套件清單... 完成&lt;/div&gt;&lt;div&gt;正在重建相依關係... 完成&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;正在讀取狀態資料... 完成&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The following packages were automatically installed and are no longer required:&lt;/div&gt;&lt;div&gt;&amp;nbsp; chromium-codecs-ffmpeg-extra freeglut3 libfuse2 libglu1-mesa libmikmod3&lt;/div&gt;&lt;div&gt;&amp;nbsp; libportmidi0 libqt5designer5 libqt5help5 libqt5test5 librtimulib-dev&lt;/div&gt;&lt;div&gt;&amp;nbsp; librtimulib-utils librtimulib7 libsdl-mixer1.2 libsdl-ttf2.0-0 libturbojpeg0&lt;/div&gt;&lt;div&gt;&amp;nbsp; python3-kms++ python3-libcamera python3-opengl python3-piexif python3-prctl&lt;/div&gt;&lt;div&gt;&amp;nbsp; python3-pyqt5 python3-pyqt5.sip python3-rtimulib python3-v4l2&lt;/div&gt;&lt;div&gt;Use &#39;sudo apt autoremove&#39; to remove them.&lt;/div&gt;&lt;div&gt;下列的額外套件將被安裝：&lt;/div&gt;&lt;div&gt;&amp;nbsp; liblept5 libtesseract4 tesseract-ocr-eng tesseract-ocr-osd&lt;/div&gt;&lt;div&gt;下列【新】套件將會被安裝：&lt;/div&gt;&lt;div&gt;&amp;nbsp; liblept5 libtesseract4 tesseract-ocr tesseract-ocr-eng tesseract-ocr-osd&lt;/div&gt;&lt;div&gt;升級 0 個，新安裝 5 個，移除 0 個，有 15 個未被升級。&lt;/div&gt;&lt;div&gt;需要下載 6,859 kB 的套件檔。&lt;/div&gt;&lt;div&gt;此操作完成之後，會多佔用 21.6 MB 的磁碟空間。&lt;/div&gt;&lt;div&gt;是否繼續進行 [Y/n]？ [Y/n] y&lt;/div&gt;&lt;div&gt;下載:1 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf liblept5 armhf 1.79.0-1.1+deb11u1 [899 kB]&lt;/div&gt;&lt;div&gt;下載:2 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libtesseract4 armhf 4.1.1-2.1+rpi1 [1,082 kB]&lt;/div&gt;&lt;div&gt;下載:3 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf tesseract-ocr-eng all 1:4.00~git30-7274cfa-1.1 [1,592 kB]&lt;/div&gt;&lt;div&gt;下載:4 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf tesseract-ocr-osd all 1:4.00~git30-7274cfa-1.1 [2,991 kB]&lt;/div&gt;&lt;div&gt;下載:5 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf tesseract-ocr armhf 4.1.1-2.1+rpi1 [295 kB]&lt;/div&gt;&lt;div&gt;取得 6,859 kB 用了 15s (468 kB/s)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 liblept5:armhf。&lt;/div&gt;&lt;div&gt;（讀取資料庫 ... 目前共安裝了 106135 個檔案和目錄。）&lt;/div&gt;&lt;div&gt;正在準備解包 .../liblept5_1.79.0-1.1+deb11u1_armhf.deb……&lt;/div&gt;&lt;div&gt;Unpacking liblept5:armhf (1.79.0-1.1+deb11u1) ...&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 libtesseract4:armhf。&lt;/div&gt;&lt;div&gt;正在準備解包 .../libtesseract4_4.1.1-2.1+rpi1_armhf.deb……&lt;/div&gt;&lt;div&gt;Unpacking libtesseract4:armhf (4.1.1-2.1+rpi1) ...&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 tesseract-ocr-eng。&lt;/div&gt;&lt;div&gt;正在準備解包 .../tesseract-ocr-eng_1%3a4.00~git30-7274cfa-1.1_all.deb……&lt;/div&gt;&lt;div&gt;Unpacking tesseract-ocr-eng (1:4.00~git30-7274cfa-1.1) ...&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 tesseract-ocr-osd。&lt;/div&gt;&lt;div&gt;正在準備解包 .../tesseract-ocr-osd_1%3a4.00~git30-7274cfa-1.1_all.deb……&lt;/div&gt;&lt;div&gt;Unpacking tesseract-ocr-osd (1:4.00~git30-7274cfa-1.1) ...&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 tesseract-ocr。&lt;/div&gt;&lt;div&gt;正在準備解包 .../tesseract-ocr_4.1.1-2.1+rpi1_armhf.deb……&lt;/div&gt;&lt;div&gt;Unpacking tesseract-ocr (4.1.1-2.1+rpi1) ...&lt;/div&gt;&lt;div&gt;設定 tesseract-ocr-eng (1:4.00~git30-7274cfa-1.1) ...&lt;/div&gt;&lt;div&gt;設定 liblept5:armhf (1.79.0-1.1+deb11u1) ...&lt;/div&gt;&lt;div&gt;設定 libtesseract4:armhf (4.1.1-2.1+rpi1) ...&lt;/div&gt;&lt;div&gt;設定 tesseract-ocr-osd (1:4.00~git30-7274cfa-1.1) ...&lt;/div&gt;&lt;div&gt;設定 tesseract-ocr (4.1.1-2.1+rpi1) ...&lt;/div&gt;&lt;div&gt;執行 man-db (2.9.4-2) 的觸發程式……&lt;/div&gt;&lt;div&gt;執行 libc-bin (2.31-13+rpt2+rpi1+deb11u13) 的觸發程式……&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;安裝 Pillow 與 pytesseract 套件 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@kaopi3:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;pip install pytesseract Pillow&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple&lt;/div&gt;&lt;div&gt;Collecting pytesseract&lt;/div&gt;&lt;div&gt;&amp;nbsp; Downloading https://www.piwheels.org/simple/pytesseract/pytesseract-0.3.13-py3-none-any.whl (14 kB)&lt;/div&gt;&lt;div&gt;Requirement already satisfied: Pillow in /usr/lib/python3/dist-packages (8.1.2)&lt;/div&gt;&lt;div&gt;Requirement already satisfied: packaging&amp;gt;=21.3 in ./.local/lib/python3.9/site-packages (from pytesseract) (26.2)&lt;/div&gt;&lt;div&gt;Installing collected packages: pytesseract&lt;/div&gt;&lt;div&gt;Successfully installed pytesseract-0.3.13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;執行結果可以正常運作 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@kaopi3:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python ksml_lib_14.py xyz 123456&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;主機 : kaopi3&lt;/div&gt;&lt;div&gt;[嘗試 1/3] 驗證碼辨識結果: 65495&lt;/div&gt;&lt;div&gt;登入成功（第 1 次嘗試）&lt;/div&gt;&lt;div&gt;擷取借閱紀錄 ... OK&lt;/div&gt;&lt;div&gt;擷取預約紀錄 ... OK&lt;/div&gt;&lt;div&gt;資源已釋放&lt;/div&gt;&lt;div&gt;產生借書到期摘要 ... OK&lt;/div&gt;&lt;div&gt;產生預約書摘要 ... OK&lt;/div&gt;&lt;div&gt;{&#39;message&#39;: &#39;xyz 的資料已更新&#39;, &#39;status&#39;: &#39;success&#39;}&lt;/div&gt;&lt;div&gt;執行時間:86.35315299034119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;也有驗證兩次才過關的 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@kaopi3:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python ksml_lib_14.py abc 123456&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;主機 : kaopi3&lt;/div&gt;&lt;div&gt;[嘗試 1/3] 驗證碼辨識結果: 301&lt;/div&gt;&lt;div&gt;[嘗試 1/3] 登入失敗，準備重試...&lt;/div&gt;&lt;div&gt;[嘗試 2/3] 驗證碼辨識結果: 75530&lt;/div&gt;&lt;div&gt;登入成功（第 2 次嘗試）&lt;/div&gt;&lt;div&gt;擷取借閱紀錄 ... OK&lt;/div&gt;&lt;div&gt;擷取預約紀錄 ... OK&lt;/div&gt;&lt;div&gt;資源已釋放&lt;/div&gt;&lt;div&gt;產生借書到期摘要 ... OK&lt;/div&gt;&lt;div&gt;產生預約書摘要 ... OK&lt;/div&gt;&lt;div&gt;{&#39;message&#39;: &#39;abc 的資料已更新&#39;, &#39;status&#39;: &#39;success&#39;}&lt;/div&gt;&lt;div&gt;執行時間:155.63533067703247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢查 render.com 上的爬蟲結果已更新 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd9BDCQqBeKTb0S3u5yu-Nln__Hr3Mq86ptsVOryo9lz8OyLanXFkkEUe8I17s1BQfdDrM7FS4nB_1oytNhIe4jW6L3vxxNg9YSE2kaNc-8hhtdpv0HA4EYxp_A-LiRvMg86DfggCsMdJaLwTPAZQw1DTK15PZyUo6v0voCfnVFfXUP8mp1_9YCGAJtd23/s2183/ksml_lib_14_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;905&quot; data-original-width=&quot;2183&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd9BDCQqBeKTb0S3u5yu-Nln__Hr3Mq86ptsVOryo9lz8OyLanXFkkEUe8I17s1BQfdDrM7FS4nB_1oytNhIe4jW6L3vxxNg9YSE2kaNc-8hhtdpv0HA4EYxp_A-LiRvMg86DfggCsMdJaLwTPAZQw1DTK15PZyUo6v0voCfnVFfXUP8mp1_9YCGAJtd23/s320/ksml_lib_14_1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;哇, 原本要折騰一個禮拜以上的工作半天就搞定了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 上傳 GitHub :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;在 repo 根倉庫 antigravity_cli 下, 用 git add . 指令追蹤新加入的專案 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git add &lt;/span&gt;&lt;/b&gt;.&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/ksml-crawler/ksml_lib_14.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;用 git commit 提交變更 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git commit -m &quot;feat: add ksml-crawler&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;[main c7e4816] feat: add ksml-crawler&lt;/div&gt;&lt;div&gt;&amp;nbsp;3 files changed, 581 insertions(+)&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/ksml-crawler/ksml_lib_13.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/ksml-crawler/ksml_lib_14.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/ksml-crawler/ksml_login.jpg&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;最後用 git push 推送專案至 repo :&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git push origin main&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Enumerating objects: 9, done.&lt;/div&gt;&lt;div&gt;Counting objects: 100% (9/9), done.&lt;/div&gt;&lt;div&gt;Delta compression using up to 16 threads&lt;/div&gt;&lt;div&gt;Compressing objects: 100% (7/7), done.&lt;/div&gt;&lt;div&gt;Writing objects: 100% (7/7), 210.16 KiB | 8.41 MiB/s, done.&lt;/div&gt;&lt;div&gt;Total 7 (delta 3), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;remote: Resolving deltas: 100% (3/3), completed with 2 local objects.&lt;/div&gt;&lt;div&gt;To https://github.com/tony1966/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;601e3ee..c7e4816&amp;nbsp; main -&amp;gt; main&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成後檢視 GitHub 已有此專案 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif2_Ipmt28UVypVN34kSXa2EeB9RFX-pV9jGqM5X4WYCIiKISkJCAwEU5yoMNjcZHe2lXHoHpdRnNo-WIZCkiuiN3rJeBnDU-29lWKXqylGQ8Hvy7oWcsYYCjEJPFUKWxk3XBsYX6vwSainarAaqgUVNk9HDMMkoYMUqueYC-HzOxECtxGHBBtoZhApPTg/s1582/ksml_lib_14_2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;914&quot; data-original-width=&quot;1582&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif2_Ipmt28UVypVN34kSXa2EeB9RFX-pV9jGqM5X4WYCIiKISkJCAwEU5yoMNjcZHe2lXHoHpdRnNo-WIZCkiuiN3rJeBnDU-29lWKXqylGQ8Hvy7oWcsYYCjEJPFUKWxk3XBsYX6vwSainarAaqgUVNk9HDMMkoYMUqueYC-HzOxECtxGHBBtoZhApPTg/s320/ksml_lib_14_2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢視 token 用量餘額 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBtzsP6BUJ-GxhQKjMDVi9dgow4AJ1Naxh9xUgemamDPR-r7vRHaJUf__cSEavXKXFrNrcj6kZuXIZTlsAA9FuwVMCn6WzCGt9Ik2X2kCZ-D_6jdRrDhY9VyicDPkk2BLPQqvlPlQfocNSJt9g0rFm5M2_gibkdLiFGi_rjUtQis_YjWnjYVUN-r68Y2YM/s1302/ksml_lib_14_3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1116&quot; data-original-width=&quot;1302&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBtzsP6BUJ-GxhQKjMDVi9dgow4AJ1Naxh9xUgemamDPR-r7vRHaJUf__cSEavXKXFrNrcj6kZuXIZTlsAA9FuwVMCn6WzCGt9Ik2X2kCZ-D_6jdRrDhY9VyicDPkk2BLPQqvlPlQfocNSJt9g0rFm5M2_gibkdLiFGi_rjUtQis_YjWnjYVUN-r68Y2YM/s320/ksml_lib_14_3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/3209112398818904955/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/3209112398818904955' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3209112398818904955'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3209112398818904955'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/google-antigravity.html' title='Google Antigravity 學習筆記 : 重構市圖網站爬蟲'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGRIqaO71YAh-f52Fqr8mI19vNS-KKxZivmUEairHuVjH5fCZg4E6sHwJOLIKF7udRLqPLkHhbnKglnVX1mD6utEQhBiKafTHotk0tR1NQTBH0da29fIy0TrsLidgYcOW-vgwqocI2Jv0-3vVyPqio393C_uGURI5Uu4pmPqNcza6PuGx8HtzhyphenhyphenI0YMCnl/s72-c/ksml_login.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1135589070503893406</id><published>2026-07-02T22:23:38.822+08:00</published><updated>2026-07-02T22:54:21.014+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : 網頁版待辦清單 (to-do list) 專案</title><content type='html'>&lt;div&gt;在前兩篇測試中, 已利用 agy 完成 CLI 與 GUI 版的待辦清單專案, 本篇則是要製作網頁版的待辦清單, 並繼續使用 Coding 的王者 Claude Sonnet 4.6 模型來執行此專案.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;本系列之前的文章參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-agy.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 安裝命令列程式代理 agy&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 學習地圖&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-cli-to-do-list.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/07/google-antigravity-gui-to-do-list.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : GUI 待辦清單 (to-do list) 專案&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 建立專案目錄並啟動 agy :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;為了將專案成果上傳到 GitHub, 我將專案工作目錄調整為與 GitHub 一致 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;tree antigravity_cli&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;列出磁碟區 新增磁碟區 的資料夾 PATH&lt;/div&gt;&lt;div&gt;磁碟區序號為 00000233 1258:16B8&lt;/div&gt;&lt;div&gt;D:\ANTIGRAVITY_CLI&lt;/div&gt;&lt;div&gt;└─projects&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; ├─todo-cli-app&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; └─todo-gui-app&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在 projects 下建立專案目錄 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli\projects&amp;gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;mkdir todo-web-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli\projects&amp;gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd todo-web-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\antigravity_cli\projects\todo-web-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;agy&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因為上個專案使用 Claude Sonnet, 所以登入 agy 後自動套用此底層模型, 如果要改用別的模型, 要用 /model 指令切換. 輸入下列網頁版待辦清單的提示詞 (Gemini 生成) :&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請幫我建立一個全新的 Todo Web App (網頁版)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;需求與技術規格：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;1. 後端 (Backend)：使用 Python Flask 框架建立輕量級 Web Server。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;2. 前端 (Frontend)：HTML5 / CSS3，介面設計要求現代、乾淨且具備 RWD 行動裝置響應式排版（可引進 Bootstrap 5 CDN 簡化美化）。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;3. 核心功能：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;- 支援完整操作：add (新增) / list (檢視) / done (標記完成) / delete (刪除)。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;- 前後端互動：前端操作時，使用 AJAX (JavaScript Fetch API) 非同步與後端通訊，點擊「完成」或「刪除」時網頁不重新整理，即時更新畫面。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;4. 資料持久化：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;- 使用 JSON 檔案儲存資料。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;- 【關鍵相容性】：資料欄位格式與邏輯，必須與之前 CLI 和 GUI 版本的 todo.json 保持完全相容。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請先不要寫程式碼。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請先為我產出這個 Web 專案的 Implementation Plan (實作計畫) 以及預計的檔案架構 (File Structure)。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKiPV2TXq6h5EojlppzcBZ6rKrxMGMzrvPmUvsS4wiI7rCbPOal4bumFOpIncuqlulPGFec1ZUl58_82O9Mj3Vc_3hT_3S-1IJPGPSX0VH2DCyhOgwGyzzVlfXhCEzMfG9nPkIYUtz7lga10qBo7znqr1dJIgL6FBvTapybBu8CRP8AiCmyFm0WQUfuy42/s1661/agy-todo-list-web-app-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1061&quot; data-original-width=&quot;1661&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKiPV2TXq6h5EojlppzcBZ6rKrxMGMzrvPmUvsS4wiI7rCbPOal4bumFOpIncuqlulPGFec1ZUl58_82O9Mj3Vc_3hT_3S-1IJPGPSX0VH2DCyhOgwGyzzVlfXhCEzMfG9nPkIYUtz7lga10qBo7znqr1dJIgL6FBvTapybBu8CRP8AiCmyFm0WQUfuy42/s320/agy-todo-list-web-app-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Claude 開始進行規劃, 首先它先要求授權去之前的 CLI 與 GUI 版專案蒐集相關資料 (CLI 是用 Gemini 實作的, 它怎麼知道的?), 比較之後才進行規劃 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 1s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants me to create an implementation plan and file structure for a Todo...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 讓我先看看現有的專案結構與 todo.json 格式，以確保相容性。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects/todo-web-app)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Search(Searching for todo.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects/todo-cli-app)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects/todo-gui-app)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/todo-cli-app/todo_data.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects/todo-gui-app/data)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/antigravity_cli/projects/todo-cli-app/todo)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/todo-gui-app/data/todos.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Read(D:/antigravity_cli/projects/todo-cli-app/todo/manager.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 資料已收集完畢，現在產出完整的實作計畫。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(C:/Users/tony1/.gemini/antigrav...dcec356eca/todo_web_app_plan.md) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 以下是完整的實作計畫，請確認後點擊「Proceed」開始實作。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 🔍 調查結果摘要&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 在分析現有的兩個版本後，發現資料格式有一個關鍵差異：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | CLI 版&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| GUI 版&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ------------------------------|------------------------------|-----------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; id&amp;nbsp; 型別&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; int （自動遞增）&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; str （UUID）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;標題欄位&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; title&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; text&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; Web 版將以 CLI 版為基準，使用&amp;nbsp; int&amp;nbsp; id +&amp;nbsp; title&amp;nbsp; 欄位，因為 CLI&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 版設計更嚴謹且易於遞增管理。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 📐 計畫亮點&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 1. REST API — 4 個語意清晰的端點，標準 HTTP 動詞設計&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. 模組化後端 —&amp;nbsp; storage.py&amp;nbsp; +&amp;nbsp; manager.py&amp;nbsp; 架構沿用自 CLI 版，邏輯一致&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. AJAX 零重新整理 — 所有操作透過 Fetch API 非同步完成&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. 資料安全 —&amp;nbsp; threading.Lock&amp;nbsp; 防止並發寫入損毀 JSON&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 5. UI 設計 — Dark Mode + Glassmorphism + 微動畫，視覺震撼&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 如果計畫符合您的期待，請點擊「Proceed」，我將立即開始逐步建立所有檔案！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiriG3vVPNqmd4nb0_cNSglnjEpcH7xGnCJRAqNUNWHT4j9fVLKQPn0NXu1l2XU32CRCorBUUVofFmM9WcTDvR3C6X4JYuYXnlCpxtfJJfmFgV9EhVtM2bkrEiPmp3U3pe-1rkDrtlMDQ3d-cJmklhnN_soszRrwkaqsuRFzsjveAxqHkvCze9Y1bwQHf9Z/s1815/agy-todo-list-web-app-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;677&quot; data-original-width=&quot;1815&quot; height=&quot;119&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiriG3vVPNqmd4nb0_cNSglnjEpcH7xGnCJRAqNUNWHT4j9fVLKQPn0NXu1l2XU32CRCorBUUVofFmM9WcTDvR3C6X4JYuYXnlCpxtfJJfmFgV9EhVtM2bkrEiPmp3U3pe-1rkDrtlMDQ3d-cJmklhnN_soszRrwkaqsuRFzsjveAxqHkvCze9Y1bwQHf9Z/s320/agy-todo-list-web-app-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixC5kjRJDjUGWdkMNmXJ6SyvCg9TCNNGvOyVbTduf5eUgGyFe57plcB-kxQZm3vH3S1MouNd6cl650q6hBKoWa1CxpJr5GuCuhu1jVsnwj3heKvgle0rgafUaGJOVEZ84E3BeFpkwoRJT0eGv0QJqJOQArBj9_2Fwn2YEJlwD2TFxxH99QZJUVRih1nSja/s1819/agy-todo-list-web-app-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1819&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixC5kjRJDjUGWdkMNmXJ6SyvCg9TCNNGvOyVbTduf5eUgGyFe57plcB-kxQZm3vH3S1MouNd6cl650q6hBKoWa1CxpJr5GuCuhu1jVsnwj3heKvgle0rgafUaGJOVEZ84E3BeFpkwoRJT0eGv0QJqJOQArBj9_2Fwn2YEJlwD2TFxxH99QZJUVRih1nSja/s320/agy-todo-list-web-app-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;輸入 Proceed 就開始實作表演了, 共有 4 個 phase :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;Proceed&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 1s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants to proceed with implementing the Todo Web App. Let me start build...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 開始實作！我將分階段建立所有檔案。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Requested Permission: write_file(D:\antigravity_cli\projects\todo-web-app) (ctrl+o to expand&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### Phase 1 — 後端核心&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 建立後端所有 Python 模組：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/todo/__init__.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/requirements.txt)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/todo/storage.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/todo/manager.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/app.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### Phase 2 — 前端頁面&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/static/css/style.css)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/static/js/app.js)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/templates/index.html) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### Phase 3 — README &amp;amp; 安裝、啟動&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/antigravity_cli/projects/todo-web-app/README.md) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 現在安裝相依套件並啟動伺服器：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(pip install -r requirements.txt) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; Flask 已就緒，啟動開發伺服器：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(python app.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ManageTask(Task: ca264670-3c07-430e-8a8b-48dcec356eca/task-45) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 伺服器已成功啟動！讓我快速預覽一下畫面：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● GenerateImage(todo_web_app_preview) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 🎉 Todo Web App 完成！&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 所有檔案已建立完成，Flask 伺服器正在運行中。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 📁 建立的檔案清單&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;檔案&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 說明&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ---------------------------------------------|---------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;app.py&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Flask 主程式 + REST API 路由&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;storage.py&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Thread-safe JSON 讀寫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;manager.py&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 業務邏輯（add/list/done/delete）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;index.html&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 語義化 HTML5 主頁面&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;style.css&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Dark Mode + Glassmorphism 主題&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;app.js&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Fetch API AJAX 前端邏輯&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;requirements.txt&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Python 相依套件&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;README.md&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 專案說明文件&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## 🚀 現在就開啟&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; → http://localhost:5000&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## ✨ 實作重點&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 資料相容性 —&amp;nbsp; todo_data.json&amp;nbsp; 使用與 CLI 版相同的 Schema（ id: int ,&amp;nbsp; title&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 欄位），可直接共用現有資料&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • AJAX 零重整 — 完成、刪除操作全程透過 Fetch API，搭配淡入/滑出動畫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • Thread-safe —&amp;nbsp; threading.Lock&amp;nbsp; 保護所有 JSON 寫入操作&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • 無框架前端 — 純 Vanilla JS，無 jQuery 或其他相依&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ● [13:04:46] python app.py running&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30-l6bnnNUkebLTOLFWUmVXWa42IrJyVBHy9PBUiAbAg_J1hgBKvdC8c9xmG9FHZTwr2uTS0GhF8OWPu1pErGLSPxKv3dFZw7wyNFJYTmGYkMUEI3HFi-MumywgDf5Mrf6l6yeOBk_w0LDhr23hOT7g53oaes1BfN4AQOf82lRhuir5bTurqT2uw0YUyc/s1813/agy-todo-list-web-app-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1282&quot; data-original-width=&quot;1813&quot; height=&quot;226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30-l6bnnNUkebLTOLFWUmVXWa42IrJyVBHy9PBUiAbAg_J1hgBKvdC8c9xmG9FHZTwr2uTS0GhF8OWPu1pErGLSPxKv3dFZw7wyNFJYTmGYkMUEI3HFi-MumywgDf5Mrf6l6yeOBk_w0LDhr23hOT7g53oaes1BfN4AQOf82lRhuir5bTurqT2uw0YUyc/s320/agy-todo-list-web-app-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOq-0egzYYp4XGfAFtkEuZCsBmb-B3V3eY0mHzX89ANGdQ0VgYntPsVaiA8mD6COsUCFe5JlK159qMdaW08atufosS4x_Z1iWPF529mmPqy_hTL1YFoUrd-ZsGZ3m3tnD-0tC3mDu44qd2rgCPuoq-zvSjN2C7aZW1jVfI371vJ1Fio85JerQI7G4g3x3Y/s1788/agy-todo-list-web-app-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1313&quot; data-original-width=&quot;1788&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOq-0egzYYp4XGfAFtkEuZCsBmb-B3V3eY0mHzX89ANGdQ0VgYntPsVaiA8mD6COsUCFe5JlK159qMdaW08atufosS4x_Z1iWPF529mmPqy_hTL1YFoUrd-ZsGZ3m3tnD-0tC3mDu44qd2rgCPuoq-zvSjN2C7aZW1jVfI371vJ1Fio85JerQI7G4g3x3Y/s320/agy-todo-list-web-app-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;至此便完成整個專案的實作了, 後端測試伺服器已啟動, 專案網址為 http://localhost:5000.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 驗收專案成果 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;用 tree 檢視專案檔案目錄 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli\projects&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;tree todo-web-app /f&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;列出磁碟區 新增磁碟區 的資料夾 PATH&lt;/div&gt;&lt;div&gt;磁碟區序號為 0000029A 1258:16B8&lt;/div&gt;&lt;div&gt;D:\ANTIGRAVITY_CLI\PROJECTS\TODO-WEB-APP&lt;/div&gt;&lt;div&gt;│&amp;nbsp; app.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; README.md&lt;/div&gt;&lt;div&gt;│&amp;nbsp; requirements.txt&lt;/div&gt;&lt;div&gt;│&amp;nbsp; todo_data.json&lt;/div&gt;&lt;div&gt;│&lt;/div&gt;&lt;div&gt;├─static&lt;/div&gt;&lt;div&gt;│&amp;nbsp; ├─css&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; style.css&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; └─js&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app.js&lt;/div&gt;&lt;div&gt;│&lt;/div&gt;&lt;div&gt;├─templates&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; index.html&lt;/div&gt;&lt;div&gt;│&lt;/div&gt;&lt;div&gt;└─todo&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; manager.py&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; storage.py&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; __init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; │&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; └─__pycache__&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; manager.cpython-312.pyc&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; storage.cpython-312.pyc&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __init__.cpython-312.pyc&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用瀏覽器開啟網址&amp;nbsp;http://localhost:5000 即可看到成果 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhITVvnR94eXErZujy0lJ-d8oXlACmyuSM7xHM0uw-7xNJifPTwRBGsHN6akw7HZ-rtwyFM2T0H5o0pUTSxkYhuIXjXS8XAzI8IYWqtdEYZANezPZPcxck_9IUt9wMT4Eihcq0Vlo_0Gb609hXHOCLCoWamPWUdShhMwk0btUisQXvzsRGjB8PHZ1mQY7H1/s1236/agy-todo-list-web-app-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1236&quot; data-original-width=&quot;1236&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhITVvnR94eXErZujy0lJ-d8oXlACmyuSM7xHM0uw-7xNJifPTwRBGsHN6akw7HZ-rtwyFM2T0H5o0pUTSxkYhuIXjXS8XAzI8IYWqtdEYZANezPZPcxck_9IUt9wMT4Eihcq0Vlo_0Gb609hXHOCLCoWamPWUdShhMwk0btUisQXvzsRGjB8PHZ1mQY7H1/s320/agy-todo-list-web-app-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;手動驗證功能正確.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 上傳 GitHub :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;在 repo 根倉庫 antigravity_cli 下,&amp;nbsp;用 git add . 指令追蹤新加入的專案 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git add &lt;/span&gt;&lt;/b&gt;.&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/README.md&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/app.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/requirements.txt&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/static/css/style.css&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/static/js/app.js&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/templates/index.html&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/todo/__init__.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/todo/manager.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-web-app/todo/storage.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這些 warning 可以忽略.&amp;nbsp;接下來用 git commit 提交變更 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git commit -m &quot;feat: add todo-web-app&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;[main 601e3ee] feat: add todo-web-app&lt;/div&gt;&lt;div&gt;&amp;nbsp;9 files changed, 1103 insertions(+)&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/README.md&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/app.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/requirements.txt&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/static/css/style.css&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/static/js/app.js&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/templates/index.html&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/todo/__init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/todo/manager.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-web-app/todo/storage.py&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後用 git push 推送專案至 repo :&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git push origin main&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Enumerating objects: 20, done.&lt;/div&gt;&lt;div&gt;Counting objects: 100% (20/20), done.&lt;/div&gt;&lt;div&gt;Delta compression using up to 16 threads&lt;/div&gt;&lt;div&gt;Compressing objects: 100% (13/13), done.&lt;/div&gt;&lt;div&gt;Writing objects: 100% (18/18), 10.89 KiB | 1.56 MiB/s, done.&lt;/div&gt;&lt;div&gt;Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;remote: Resolving deltas: 100% (2/2), completed with 2 local objects.&lt;/div&gt;&lt;div&gt;To https://github.com/tony1966/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;5efe72e..601e3ee&amp;nbsp; main -&amp;gt; main&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成後檢視 GitHub 已有此專案 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLFjQ7znb1QS5GySqOQcLDy0zGEOSaWopo2ex-GkT6itRgjzmpD3vzKUTadUWDiJFWogx6l9Ul5xCROr4VjNKB34DTfzcNG618eY29zNmq1KwmUT5x8xRf36rVIMjhx_ywZ_yf9qy_2V5As99AbgpcgfRPmYlQiQ8TG8WF-htco1qJiZOia_5AmWqffpq3/s1605/agy-todo-list-web-app-7.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1034&quot; data-original-width=&quot;1605&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLFjQ7znb1QS5GySqOQcLDy0zGEOSaWopo2ex-GkT6itRgjzmpD3vzKUTadUWDiJFWogx6l9Ul5xCROr4VjNKB34DTfzcNG618eY29zNmq1KwmUT5x8xRf36rVIMjhx_ywZ_yf9qy_2V5As99AbgpcgfRPmYlQiQ8TG8WF-htco1qJiZOia_5AmWqffpq3/s320/agy-todo-list-web-app-7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本專案 repo 網址如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-web-app&quot; target=&quot;_blank&quot;&gt;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-web-app&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後用 /usage 檢視 token 用量餘額 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHjjnWtfsJNre-2LDwrWS6W1tjYsY-FCjwBsdytW0ny1d4POUxC6l6ZGvG40IFJjMbuT_qz8fFJ-mCsZ6285c3RTogWJQyBokdYx75gYuMPyIGfUbcN6kVUpav0RPo3s9mmyYe-TeZzPaAP_utaGLpWBAjQ2z87tURu9jIpR9e9MlL8LBXDzdzW7won6-/s1506/agy-todo-list-web-app-8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1229&quot; data-original-width=&quot;1506&quot; height=&quot;261&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHjjnWtfsJNre-2LDwrWS6W1tjYsY-FCjwBsdytW0ny1d4POUxC6l6ZGvG40IFJjMbuT_qz8fFJ-mCsZ6285c3RTogWJQyBokdYx75gYuMPyIGfUbcN6kVUpav0RPo3s9mmyYe-TeZzPaAP_utaGLpWBAjQ2z87tURu9jIpR9e9MlL8LBXDzdzW7won6-/s320/agy-todo-list-web-app-8.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;即使是玩具專案, 還是很吃 Claude 的 token.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1135589070503893406/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1135589070503893406' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1135589070503893406'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1135589070503893406'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/google-antigravity-to-do-list.html' title='Google Antigravity 學習筆記 : 網頁版待辦清單 (to-do list) 專案'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKiPV2TXq6h5EojlppzcBZ6rKrxMGMzrvPmUvsS4wiI7rCbPOal4bumFOpIncuqlulPGFec1ZUl58_82O9Mj3Vc_3hT_3S-1IJPGPSX0VH2DCyhOgwGyzzVlfXhCEzMfG9nPkIYUtz7lga10qBo7znqr1dJIgL6FBvTapybBu8CRP8AiCmyFm0WQUfuy42/s72-c/agy-todo-list-web-app-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-809965178201813263</id><published>2026-07-02T10:07:27.028+08:00</published><updated>2026-07-02T10:07:27.029+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="網購"/><title type='text'>蝦皮購買充電傳輸線 (Type C/Lightening/MicroUSB)</title><content type='html'>由於五月初去沖繩玩時發現帶去的充電線 (Type C, Lightening) 居然只剩一條能用, 今天上蝦皮各買三條, 另外有顆舊硬碟使用 MicroUSB 介面, 且樹莓派也要用, 也買三條 :&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRoP6egKvoWyqBpHMzvX56JMPVoeCRZmIqyXz9QVyj8a4ayIlKGnxOByJ6-TwOhowew3OFRbKY_QFVASqtbB0KBJojqoXHUDPj9sfptC14ptyKlB7YY5A-o5-2MI0RSa5wL4aZveo7TBYBCQZ6Fja0qOLf-el2bshSB11RwEak5BLAXwmsSfva4ErrQyMB/s1931/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E5%85%85%E9%9B%BB%E5%82%B3%E8%BC%B8%E7%B7%9A.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;832&quot; data-original-width=&quot;1931&quot; height=&quot;138&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRoP6egKvoWyqBpHMzvX56JMPVoeCRZmIqyXz9QVyj8a4ayIlKGnxOByJ6-TwOhowew3OFRbKY_QFVASqtbB0KBJojqoXHUDPj9sfptC14ptyKlB7YY5A-o5-2MI0RSa5wL4aZveo7TBYBCQZ6Fja0qOLf-el2bshSB11RwEak5BLAXwmsSfva4ErrQyMB/s320/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E5%85%85%E9%9B%BB%E5%82%B3%E8%BC%B8%E7%B7%9A.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;明華智取 522 元.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/809965178201813263/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/809965178201813263' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/809965178201813263'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/809965178201813263'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/type-clighteningmicrousb.html' title='蝦皮購買充電傳輸線 (Type C/Lightening/MicroUSB)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRoP6egKvoWyqBpHMzvX56JMPVoeCRZmIqyXz9QVyj8a4ayIlKGnxOByJ6-TwOhowew3OFRbKY_QFVASqtbB0KBJojqoXHUDPj9sfptC14ptyKlB7YY5A-o5-2MI0RSa5wL4aZveo7TBYBCQZ6Fja0qOLf-el2bshSB11RwEak5BLAXwmsSfva4ErrQyMB/s72-c/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E5%85%85%E9%9B%BB%E5%82%B3%E8%BC%B8%E7%B7%9A.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-6571884123283886323</id><published>2026-07-01T15:23:33.076+08:00</published><updated>2026-07-02T15:31:51.216+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : GUI 待辦清單 (to-do list) 專案</title><content type='html'>&lt;div&gt;在前一篇測試中, 使用 Antigravity CLI 規劃並執行了一個製作 CLI 介面的待辦清單 (to-do list) 專案, 透過預設的 Gemini 模型完成程式碼撰寫與測試, 最後人工驗證功能符合 AI 的規劃, 也完全與我們的預期一致. 本篇則是要製作 GUI 版的待辦清單, 並改用使用 Claude 模型來執行專案.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另外, 本篇還要嘗試改用 Claude 模型來執行此專案.&amp;nbsp;Google 的 Antigravity 平台在 2026 年的全新架構中採用了 &quot;多模型聯合訂閱&quot; 模式, 購買 Google AI Pro 或 Ultra 的方案後, 課金就已涵蓋了平台內整合的所有跨廠牌旗艦模型 (包括 Claude 3.5/4.6 系列, GPT-OSS 等). 以 Google 帳號授權登入後, Antigravity 的雲端後台會自動處理所有的 API 轉接與計費,&amp;nbsp;所有的 Token 用量會在計算扣除後反映在 /usage 輸出的剩餘額度中.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本系列之前的文章參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-agy.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 安裝命令列程式代理 agy&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 學習地圖&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-cli-to-do-list.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 建立專案目錄並啟動 agy :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;mkdir todo-gui-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd todo-gui-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-gui-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;agy&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後在提示號下斜線指令 /model 選擇 Claude Sonnet 做為執行此專案之底層模型 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLHG5hKIO-tirVry7V4YGitaLJHqbl9OoIQ4eYydAnxItxQJslnOAyFozEHnmrr2gc-nQ_J1I7gqxWbAIt1nozs2B-vTcdgDHVi7dY6zcvB9LgZcV2QRKQZlySXJFnMdYs-wvtcjvtypjJfBdV4xBRf-2Ok3N7PrCHAMgvALqfovCypIzk7tq2Sgr_Daqi/s1170/agy-todo-list-gui-app-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;1170&quot; height=&quot;294&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLHG5hKIO-tirVry7V4YGitaLJHqbl9OoIQ4eYydAnxItxQJslnOAyFozEHnmrr2gc-nQ_J1I7gqxWbAIt1nozs2B-vTcdgDHVi7dY6zcvB9LgZcV2QRKQZlySXJFnMdYs-wvtcjvtypjJfBdV4xBRf-2Ok3N7PrCHAMgvALqfovCypIzk7tq2Sgr_Daqi/s320/agy-todo-list-gui-app-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接下來就可以輸入專案需求了 :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 請幫我將目前的 Todo 專案升級/建立一個 GUI 版本&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;需求 :&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Python GUI (使用 tkinter 與 ttk 套件)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;支援完整功能 : add / list / done / delete&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;資料持久化 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;使用 JSON 儲存資料&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;介面要求 : 外觀要現代 &amp;amp; 乾淨 (使用 ttk 佈局) 並具備良好的使用者提示 (例如刪除時跳出確認視窗)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請先不要寫程式碼.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請先針對這個 GUI 專案產出 Implementation Plan (實作計畫) 以及預計的檔案架構 (File Structure).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Claude 回覆的專案實作計畫如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 7s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants me to create an Implementation Plan and File Structure for a Pyth...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 讓我先看看現有的專案結構。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/agy/todo-gui-app) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 專案目前是空目錄，我來為您產出完整的實作計畫。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(C:/Users/tony1/.gemini/antigrav...0-b697217b954f/todo_gui_plan.md) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 以上是完整的實作計畫，幾個重點決策說明：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 🔑 關鍵設計決策&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 1. 元件化架構&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 把 Header、InputBar、TodoItem、TodoList&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 拆成獨立檔案，方便逐步開發與維護，而非全部塞在一個大檔案裡。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. 單向資料流&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 所有 CRUD 操作都走&amp;nbsp; TodoStorage ，UI 元件只負責呈現，避免狀態散落難以追蹤。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. 自訂 ConfirmDialog vs&amp;nbsp; messagebox&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 使用&amp;nbsp; tk.Toplevel&amp;nbsp; 自製刪除確認視窗，才能套用一致的深色主題；系統&amp;nbsp; messagebox&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 外觀無法客製化。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. 深色主題&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;ttk&amp;nbsp; 的樣式透過&amp;nbsp; ttk.Style&amp;nbsp; 全域設定，讓整個 App 色調一致，不必在每個元件重複指定顏色。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 請確認計畫後點選 Proceed 開始實作！若有任何調整（例如改用淺色主題、增加功能等）請告訴我。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_KOOBDH7TGC_jSEv8eNqjTQXFzg9q01TQCuWKEbnIG95GAKKEPbNCwHYdVmWRB9CCcgnMtlF-vUPAiZ6X2bs1ZjoljIiGnH8SvmrwXRtfvgb5cvshphh4UIqfQhKMfInzLsO2fJNFT25XlKQZq7W4nvKjMYToaBJkDZt9sfKIu4QpCsAee6hI0Lh-5QfB/s1841/agy-todo-list-gui-app-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1309&quot; data-original-width=&quot;1841&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_KOOBDH7TGC_jSEv8eNqjTQXFzg9q01TQCuWKEbnIG95GAKKEPbNCwHYdVmWRB9CCcgnMtlF-vUPAiZ6X2bs1ZjoljIiGnH8SvmrwXRtfvgb5cvshphh4UIqfQhKMfInzLsO2fJNFT25XlKQZq7W4nvKjMYToaBJkDZt9sfKIu4QpCsAee6hI0Lh-5QfB/s320/agy-todo-list-gui-app-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;輸入下列提示詞, 讓 agy 按照規劃進行實作 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 這規劃可以, 請依照此 Implementation Plan 逐步實作專案&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;每一步請先說明要做什麼再執行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Claude 回覆 Phase 1 要做的項目並徵求核准實作 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;▸ Thought for 2s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; The user wants me to implement the project step by step according to the impleme...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 好的，我們依照計畫逐步實作。先從 Phase 1 開始。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## Phase 1 — 建立目錄結構與設計系統&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 要做什麼：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 1. 建立所有必要的資料夾與&amp;nbsp; __init__.py&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. 實作&amp;nbsp; theme.py （全域設計 Token：色彩、字體、樣式）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. 實作&amp;nbsp; main.py （程式進入點）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 先建立完整的目錄骨架：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(New-Item -ItemType Directory -Force -Path &quot;app&quot;, &quot;app\components&quot;, &quot;...) (ctrl+o to&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Command&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; Requesting permission for:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;New-Item -ItemType Directory -Force -Path &quot;app&quot;, &quot;app\components&quot;, &quot;app\dialogs&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &quot;data&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Do you want to proceed?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 1. Yes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. Yes, and always allow in this conversation for commands that start with &#39;New-Item&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. Yes, and always allow for commands that start with &#39;New-Item&#39; (Persist to settings.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. No&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimz5x2IDIhn2BG4668Ct_xA_KSK9P8evGdBQyiatDEeF2XFgujWyV3SzhUGhot1AQgC8gt0WGeeSW0xz2lK5ruuhdQePDoaHm-_31PK8CAsVdkYiZ_aQ1ktXjop3AjC7CbF8Y3nB_zRWh4SBEeIFazEeXWryik0Lf6nBgDKE8OHtYLbWGQUfY8rigtF0Ij/s1822/agy-todo-list-gui-app-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1235&quot; data-original-width=&quot;1822&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimz5x2IDIhn2BG4668Ct_xA_KSK9P8evGdBQyiatDEeF2XFgujWyV3SzhUGhot1AQgC8gt0WGeeSW0xz2lK5ruuhdQePDoaHm-_31PK8CAsVdkYiZ_aQ1ktXjop3AjC7CbF8Y3nB_zRWh4SBEeIFazEeXWryik0Lf6nBgDKE8OHtYLbWGQUfY8rigtF0Ij/s320/agy-todo-list-gui-app-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 Yes 建立資料夾結構並要求授權建立 __init__.py :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 先建立完整的目錄骨架：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(New-Item -ItemType Directory -Force -Path &quot;app&quot;, &quot;app\components&quot;, &quot;...) (ctrl+o to&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 目錄建立完成，現在建立所有&amp;nbsp; __init__.py ：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(New-Item -ItemType File -Force -Path &quot;app\__init__.py&quot;, &quot;app\compone...) (ctrl+o to&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Command&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; Requesting permission for:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;New-Item -ItemType File -Force -Path &quot;app\__init__.py&quot;, &quot;app\components\__init__.py&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &quot;app\dialogs\__init__.py&quot; | Out-Null; Write-Host &quot;Done&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Do you want to proceed?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 1. Yes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. Yes, and always allow in this conversation for commands that start with &#39;New-Item -&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;ItemType File -Force -Path &quot;app\__init__.py&quot;, &quot;app\components\__init__...&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. Yes, and always allow for commands that start with &#39;New-Item -ItemType File -Force -Path&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&quot;app\__init__.py&quot;, &quot;app\components\__init__...&#39; (Persist to settings.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. No&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-6O8LMcQ2nUxP8afkyloey1sQSo_ZbfihloiEv0SBkxKmDeb91JZtf7btJAoER0s7WJF768hkNkR-Gwlb3VtT0iiJPn1rjhMex-oxqwZE1VA4hNdBNGcrnSMR_vFCy03lMHd-Bgf6dJ5fpyrj2cyG9E0HIT83Tf2Cn26vzuRoTy5z4mx4mMVBOa4x9bz2/s1821/agy-todo-list-gui-app-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;853&quot; data-original-width=&quot;1821&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-6O8LMcQ2nUxP8afkyloey1sQSo_ZbfihloiEv0SBkxKmDeb91JZtf7btJAoER0s7WJF768hkNkR-Gwlb3VtT0iiJPn1rjhMex-oxqwZE1VA4hNdBNGcrnSMR_vFCy03lMHd-Bgf6dJ5fpyrj2cyG9E0HIT83Tf2Cn26vzuRoTy5z4mx4mMVBOa4x9bz2/s320/agy-todo-list-gui-app-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 Yes 繼續實作到 Phase 5 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 目錄建立完成，現在建立所有&amp;nbsp; __init__.py ：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(New-Item -ItemType File -Force -Path &quot;app\__init__.py&quot;, &quot;app\compone...) (ctrl+o to&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 現在實作&amp;nbsp; theme.py&amp;nbsp; — 全域設計系統的核心：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/theme.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## Phase 2 — 資料層（TodoStorage）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 要做什麼： 實作資料模型，負責 JSON 讀寫、add / toggle / delete 操作。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/storage.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## Phase 3 — UI 元件開發&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 要做什麼： 逐一建立四個 UI 元件：Header → InputBar → TodoItem → TodoList&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 3-1 Header（頂部標題列）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/components/header.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 3-2 InputBar（新增輸入列）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/components/input_bar.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 要做什麼： 先建立對話框，因為 TodoItem 會依賴它。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/dialogs/confirm_dialog.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 3-4 TodoItem（單筆 Todo 列）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/components/todo_item.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 3-5 TodoList（可捲動列表容器）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ### 3-3 ConfirmDialog（刪除確認視窗）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/components/todo_list.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## Phase 4 &amp;amp; 5 — 主 App 與進入點整合&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 要做什麼： 實作&amp;nbsp; app.py （主控制器，整合所有元件與資料層），以及&amp;nbsp; main.py&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; （視窗初始化、置中、快捷鍵）。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/app/app.py)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/main.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 最後建立&amp;nbsp; requirements.txt ：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Create(D:/agy/todo-gui-app/requirements.txt) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 所有檔案就緒！現在執行看看：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Bash(python main.py) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Command&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; Requesting permission for:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;python main.py&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;Do you want to proceed?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;gt; 1. Yes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. Yes, and always allow in this conversation for commands that start with &#39;python main.py&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. Yes, and always allow for commands that start with &#39;python main.py&#39; (Persist to&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;settings.json)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. No&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFBq3lIAi7F8NiVucjtDDNL6KWbRKBmwIFU0qs1egFKYdhwCWRgU_xNLwoZ6oB9eBwu649Til4qaED6JmO7fwZMqEetSm3zkfTL-rAj_IVp6NAJ3iPbf2rR2da4USTKGbrYL1GjtC5n6URkitUOGe03CvyXjzCSp6N4sUB6eEQqoGozLLwPNdqhFVyfb5A/s1741/agy-todo-list-gui-app-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1281&quot; data-original-width=&quot;1741&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFBq3lIAi7F8NiVucjtDDNL6KWbRKBmwIFU0qs1egFKYdhwCWRgU_xNLwoZ6oB9eBwu649Til4qaED6JmO7fwZMqEetSm3zkfTL-rAj_IVp6NAJ3iPbf2rR2da4USTKGbrYL1GjtC5n6URkitUOGe03CvyXjzCSp6N4sUB6eEQqoGozLLwPNdqhFVyfb5A/s320/agy-todo-list-gui-app-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd-fcfQaQV4hlWOFBWvDji6CUiYW2w0jbyORi_EMvCvP1pdRezUaN3RjKRVXuHBR2hp6pgon5FNyKRkf-Yohvm7gWSxR7CvuWLJMazSN0ed_8P1fDvCUYav6CFvB84Det2Q8KZe_awoGIY7TRBzdr68peowRR5_tm9at_kxMh3p3e2xKUTsxINYK3Cqs7a/s1831/agy-todo-list-gui-app-7.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1312&quot; data-original-width=&quot;1831&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd-fcfQaQV4hlWOFBWvDji6CUiYW2w0jbyORi_EMvCvP1pdRezUaN3RjKRVXuHBR2hp6pgon5FNyKRkf-Yohvm7gWSxR7CvuWLJMazSN0ed_8P1fDvCUYav6CFvB84Det2Q8KZe_awoGIY7TRBzdr68peowRR5_tm9at_kxMh3p3e2xKUTsxINYK3Cqs7a/s320/agy-todo-list-gui-app-7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;至此 Claude 已完成所有實作, 按 Yes 執行程式 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ManageTask(Task: f7de5e33-ecc3-4c99-93d0-b697217b954f/task-34)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● Requested Permission: read_file(C:\Users\tony1\.gemini\antigravity-cli\brain\f7de5e33-ecc3-&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;4...)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(C:/Users/tony1/.gemini/antigrav...17b954f/.system_generated/tasks) (ctrl+o to expand&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; App 正在運行中（無 crash 錯誤）。視窗應該已在您螢幕上開啟了。讓我驗證一下最終的檔案結構：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/agy/todo-gui-app)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;● ListDir(D:/agy/todo-gui-app/app) (ctrl+o to expand)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 專案結構完整， __pycache__&amp;nbsp; 出現表示 Python 已成功載入模組。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ──────&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; ## ✅ 實作完成總結&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 所有 5 個 Phase 都已完成，App 正在運行中：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 內容&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 狀態&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; -------------|----------------------------------------------------------------|------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase 1&amp;nbsp; &amp;nbsp; &amp;nbsp;| 目錄結構 +&amp;nbsp; theme.py&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase 2&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; storage.py （資料層 + JSON 持久化）&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase 3&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; header.py&amp;nbsp; /&amp;nbsp; input_bar.py&amp;nbsp; /&amp;nbsp; todo_item.py&amp;nbsp; /&amp;nbsp; todo_list.py&amp;nbsp; | ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase 4&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; confirm_dialog.py （自訂刪除確認視窗）&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp;Phase 5&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; app.py&amp;nbsp; +&amp;nbsp; main.py （整合 &amp;amp; 進入點）&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ✅&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 已實作的功能：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ Add — 輸入框 + Enter / 點擊按鈕新增，空輸入紅框警示&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ List — 捲動列表，最新項目在頂，時間戳記顯示&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ Done — 勾選框切換完成，刪除線文字 + 灰化效果&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ Delete — 🗑 按鈕 + 自訂深色確認對話框（淡入動畫）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ JSON 持久化 — 關閉後重開資料不遺失&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; • ✅ 快捷鍵 —&amp;nbsp; Ctrl+N&amp;nbsp; 聚焦輸入、 Esc&amp;nbsp; 關閉對話框、 Enter&amp;nbsp; 確認&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 執行方式：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; &amp;nbsp; python main.py&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp;How&#39;s the CLI experience so far? Help us improve:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp;[1] Good&amp;nbsp; [2] Fine&amp;nbsp; [3] Bad&amp;nbsp; [0] Skip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 驗收專案成果 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟一個新的 PS 視窗, 切到專案目錄下, 用 tree /f 檢視專案結構 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-gui-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;tree /f&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;列出磁碟區 新增磁碟區 的資料夾 PATH&lt;/div&gt;&lt;div&gt;磁碟區序號為 000000AF 1258:16B8&lt;/div&gt;&lt;div&gt;D:.&lt;/div&gt;&lt;div&gt;│&amp;nbsp; main.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; requirements.txt&lt;/div&gt;&lt;div&gt;│&lt;/div&gt;&lt;div&gt;├─app&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; app.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; storage.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; theme.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; __init__.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; ├─components&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; header.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; input_bar.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; todo_item.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; todo_list.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; __init__.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; └─__pycache__&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; header.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; input_bar.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todo_item.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todo_list.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __init__.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; ├─dialogs&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; confirm_dialog.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&amp;nbsp; __init__.py&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; └─__pycache__&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; confirm_dialog.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __init__.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; │&lt;/div&gt;&lt;div&gt;│&amp;nbsp; └─__pycache__&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; storage.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; theme.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __init__.cpython-312.pyc&lt;/div&gt;&lt;div&gt;│&lt;/div&gt;&lt;div&gt;└─data&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos.json&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可見 Claude 將此專案做了結構化設計, 元件與對話框放在不同資料夾裡面, 程式碼就不一一檢視了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 驗證程式功能 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在專案目錄下執行主程式 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-gui-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;執行結果可正常增刪待辦事項 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh93CC5l7DFB5LxgeL4vrf62_bCaX4JNAUyKkc8oXM6aGPOz0hr2RbZax2R031z-S1aAs9jtM1nk6hURUQcR30N1O2aiWWBqOELff03on5obZWdSQ1ibIgVinQ3_2SvVHYQI4ENLVxpf5KMLdj51BqbzgpRAd2hdH-bD6FfFg8wgaLDNYBO0kiAN6A2BmqB/s1829/agy-todo-list-gui-app-8.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1383&quot; data-original-width=&quot;1829&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh93CC5l7DFB5LxgeL4vrf62_bCaX4JNAUyKkc8oXM6aGPOz0hr2RbZax2R031z-S1aAs9jtM1nk6hURUQcR30N1O2aiWWBqOELff03on5obZWdSQ1ibIgVinQ3_2SvVHYQI4ENLVxpf5KMLdj51BqbzgpRAd2hdH-bD6FfFg8wgaLDNYBO0kiAN6A2BmqB/s320/agy-todo-list-gui-app-8.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgym7YcuZAOkufQNJLTFMEvvUR2UuikHDDs6nmnT3FHik_-SNeuizyJ1IeR1P9VDVuTaHYzPf5BEj8v0p44X-mH_cy3muv9ttJLaZdjtvn4rBkmglBpkcTFszozmGck98lI6DWPgrkKLggHAp7TrgTXsK0Dq8ONQRkOXBGexOme8yExgB4owG3q0BguMzfS/s1189/agy-todo-list-gui-app-9.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1068&quot; data-original-width=&quot;1189&quot; height=&quot;287&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgym7YcuZAOkufQNJLTFMEvvUR2UuikHDDs6nmnT3FHik_-SNeuizyJ1IeR1P9VDVuTaHYzPf5BEj8v0p44X-mH_cy3muv9ttJLaZdjtvn4rBkmglBpkcTFszozmGck98lI6DWPgrkKLggHAp7TrgTXsK0Dq8ONQRkOXBGexOme8yExgB4owG3q0BguMzfS/s320/agy-todo-list-gui-app-9.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitvqYyt9X5YGu4Otzqp90cwLMhVboy8rK2OJYpLm24SAj0SsBV_FPAR3zCrUSERqQseTbBgRuLzvpVkzWJuIEApkJTWtZsDIJcDBk-hxFIZZFOB7GV4ythQTeANBTnrTyJqDaIO0ajUaxfSj9mYLERQOFTK6NJaAtPmG5vOSZM4VdK3C01f2MrpAmVbNTE/s1192/agy-todo-list-gui-app-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1057&quot; data-original-width=&quot;1192&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitvqYyt9X5YGu4Otzqp90cwLMhVboy8rK2OJYpLm24SAj0SsBV_FPAR3zCrUSERqQseTbBgRuLzvpVkzWJuIEApkJTWtZsDIJcDBk-hxFIZZFOB7GV4ythQTeANBTnrTyJqDaIO0ajUaxfSj9mYLERQOFTK6NJaAtPmG5vOSZM4VdK3C01f2MrpAmVbNTE/s320/agy-todo-list-gui-app-10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;整體外觀設計有專業感, 唯一美中不足的是, 點選待辦事項時字的顏色會改變為與背景色類似, 導致無法看清, 這可以叫 agy 進一步修改.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後用 /usage 指令檢視執行此專案耗用了多少 Claude 模型額度 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlyR8QrCyiTLmTFu4b3PjHF16rFvl3EYgnEuxrBN4Xk7LerSbsWw2l13WRwhRPNi42g8o9xApxerFx79JsFzb7_8t4EPxx-AifIAIUFzTDWmeFDo2qi3_GVTex9w2u28jiAm-s93hn2ExXHfW68Shu5TttlT8v4qWixf8QchQ7vvCJJPyVQAX8S7xWdNWz/s1342/agy-todo-list-gui-app-11.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1120&quot; data-original-width=&quot;1342&quot; height=&quot;267&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlyR8QrCyiTLmTFu4b3PjHF16rFvl3EYgnEuxrBN4Xk7LerSbsWw2l13WRwhRPNi42g8o9xApxerFx79JsFzb7_8t4EPxx-AifIAIUFzTDWmeFDo2qi3_GVTex9w2u28jiAm-s93hn2ExXHfW68Shu5TttlT8v4qWixf8QchQ7vvCJJPyVQAX8S7xWdNWz/s320/agy-todo-list-gui-app-11.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;吃掉 8% 額度, 看起來比之前跑 Gemini 的 CLI App (不到 1%) 還耗得兇啊!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;4. 上傳 GitHub :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;參考前一篇測試作法, 將 todo-gui-app 專案上傳到 GitHub :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用 git add. 指令讓 Git 開始追蹤新加入的專案 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git add .&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/app.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/components/header.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/components/input_bar.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/components/todo_item.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/components/todo_list.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/dialogs/confirm_dialog.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/storage.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/app/theme.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/main.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-gui-app/requirements.txt&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這些 warning 無妨. 接下來用 git commit 提交變更 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git commit -m &quot;feat: add todo-gui-app&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;[main 5efe72e] feat: add todo-gui-app&lt;/div&gt;&lt;div&gt;&amp;nbsp;13 files changed, 1497 insertions(+)&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/__init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/app.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/components/__init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/components/header.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/components/input_bar.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/components/todo_item.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/components/todo_list.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/dialogs/__init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/dialogs/confirm_dialog.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/storage.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/app/theme.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/main.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-gui-app/requirements.txt&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後用 git push 推送專案至 repo :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git push origin main&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Enumerating objects: 20, done.&lt;/div&gt;&lt;div&gt;Counting objects: 100% (20/20), done.&lt;/div&gt;&lt;div&gt;Delta compression using up to 16 threads&lt;/div&gt;&lt;div&gt;Compressing objects: 100% (17/17), done.&lt;/div&gt;&lt;div&gt;Writing objects: 100% (18/18), 17.15 KiB | 3.43 MiB/s, done.&lt;/div&gt;&lt;div&gt;Total 18 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;remote: Resolving deltas: 100% (1/1), completed with 1 local object.&lt;/div&gt;&lt;div&gt;To https://github.com/tony1966/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;239b617..5efe72e&amp;nbsp; main -&amp;gt; main&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成後檢視 GitHub 已有此專案 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2FS_JFn3EtERFLT2XPNuGqsDEb2HnP8Z7yu_td69u3p6MtlUhnTdGpMiMp1a5g3sqhTgDsrkOwNubSSLpkulzICYFnSxqjpI_Tb58UAcJLeEZ-VzB_r_U2recjU_kEEnZsCgKgbOhXviNo_BH3eAzw8uzP3OvGV8aXOtODUDgjxRU6Ql0rOKCpTM48E4F/s1582/agy-todo-list-gui-app-12.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;712&quot; data-original-width=&quot;1582&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2FS_JFn3EtERFLT2XPNuGqsDEb2HnP8Z7yu_td69u3p6MtlUhnTdGpMiMp1a5g3sqhTgDsrkOwNubSSLpkulzICYFnSxqjpI_Tb58UAcJLeEZ-VzB_r_U2recjU_kEEnZsCgKgbOhXviNo_BH3eAzw8uzP3OvGV8aXOtODUDgjxRU6Ql0rOKCpTM48E4F/s320/agy-todo-list-gui-app-12.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本專案 repo 網址如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-gui-app&quot; target=&quot;_blank&quot;&gt;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-gui-app&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/6571884123283886323/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/6571884123283886323' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6571884123283886323'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6571884123283886323'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/google-antigravity-gui-to-do-list.html' title='Google Antigravity 學習筆記 : GUI 待辦清單 (to-do list) 專案'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLHG5hKIO-tirVry7V4YGitaLJHqbl9OoIQ4eYydAnxItxQJslnOAyFozEHnmrr2gc-nQ_J1I7gqxWbAIt1nozs2B-vTcdgDHVi7dY6zcvB9LgZcV2QRKQZlySXJFnMdYs-wvtcjvtypjJfBdV4xBRf-2Ok3N7PrCHAMgvALqfovCypIzk7tq2Sgr_Daqi/s72-c/agy-todo-list-gui-app-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1042089119284914743</id><published>2026-07-01T00:33:42.791+08:00</published><updated>2026-07-01T00:33:42.791+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="生活"/><title type='text'>離屆退還有五年</title><content type='html'>今天是耳順之年的七月了, 離屆退破五年&amp;nbsp;:&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggT8SNnYvhdNVmeSoAU99_h_C4PzZnBap3X1oIqX572JdkulZ5th9MH910HPhQeqIRtfFqQHSUnv1VBSlR2G6I1PxaCX49Y5wDZYr8d1DyDJxytapUzm0xTMT1NA1BKfso3x06M7sSKy_XuWp6VFD7vkKxgsFAq6N3yy3AT4MtTQYJdDn3jsZD7i824iVm/s1324/5-years-before-retirement.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;936&quot; data-original-width=&quot;1324&quot; height=&quot;226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggT8SNnYvhdNVmeSoAU99_h_C4PzZnBap3X1oIqX572JdkulZ5th9MH910HPhQeqIRtfFqQHSUnv1VBSlR2G6I1PxaCX49Y5wDZYr8d1DyDJxytapUzm0xTMT1NA1BKfso3x06M7sSKy_XuWp6VFD7vkKxgsFAq6N3yy3AT4MtTQYJdDn3jsZD7i824iVm/s320/5-years-before-retirement.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這幾年老同事一個個陸續退了, 有些還提早退, 心裡也不免心動, 身為小田僑, 其實我也有資格申請早退, 只是不曉得退了要幹嘛. 如果爸失智情況能一直維持現在初期健忘狀態不惡化, 是可以考慮繼續做到屆退啦, 但想退其實隨時可退.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1042089119284914743/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1042089119284914743' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1042089119284914743'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1042089119284914743'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/07/blog-post.html' title='離屆退還有五年'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggT8SNnYvhdNVmeSoAU99_h_C4PzZnBap3X1oIqX572JdkulZ5th9MH910HPhQeqIRtfFqQHSUnv1VBSlR2G6I1PxaCX49Y5wDZYr8d1DyDJxytapUzm0xTMT1NA1BKfso3x06M7sSKy_XuWp6VFD7vkKxgsFAq6N3yy3AT4MtTQYJdDn3jsZD7i824iVm/s72-c/5-years-before-retirement.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-4241182555077151065</id><published>2026-06-30T16:27:33.208+08:00</published><updated>2026-07-02T15:02:36.447+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案</title><content type='html'>&lt;div&gt;安裝好 Antigravity CLI 後, 接下來要透過實戰演練來熟悉如何使用此工具來開發專案, 本篇的目標是要用它來開發一個 CLI 介面的 to-do list.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本系列之前的文章參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity-agy.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 安裝命令列程式代理 agy&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/google-antigravity.html&quot; target=&quot;_blank&quot;&gt;Google Antigravity 學習筆記 : 學習地圖&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以前開發專案的日常通常是打開程式編輯器 (Thonny, VS Code), 建立專案, 寫程式, 抓臭蟲, 修改程式 ... 直到滿意為止. 但使用 Antigravity, 只需要將需求寫清楚, 叫 AI 規劃要怎麼做, 檢視無誤後叫它開始按規劃完成專案.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 建立專案目錄並啟動 agy :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟 PS 視窗, 建立一個專案資料夾 (例如 todo-cli-app), 切換到專案資料夾, 下 agy 啟動 Google&amp;nbsp; Antigravity 工具 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;mkdir todo-cli-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd todo-cli-app&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;agy&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後輸入專案需求 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請幫我建立一個 Todo CLI App&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;需求：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;- Python CLI&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;- 支援 add / list / done / delete&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;- 使用 JSON 儲存資料&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請先不要寫程式碼&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;先產出 Implementation Plan&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;以及檔案架構&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLlmbfrXgUeplNjddq0Lwp045wAm4nlwoH-pH2Lgoa_UC77Q-A7GFEKFkq0ZAwdOH-qLwPERa5RUmUwn0MHyle4bYqvsWSFmaEjV2bdFT0eJ35hv13cmelagUDIr5zLTG7OPOYrJEtIgtZAxRM_9FOlVZfFMULNtCh8-y82dFutnG_LHDSkzFNyZ8XGKCj/s1122/agy-proj-todo-list-app-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;782&quot; data-original-width=&quot;1122&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLlmbfrXgUeplNjddq0Lwp045wAm4nlwoH-pH2Lgoa_UC77Q-A7GFEKFkq0ZAwdOH-qLwPERa5RUmUwn0MHyle4bYqvsWSFmaEjV2bdFT0eJ35hv13cmelagUDIr5zLTG7OPOYrJEtIgtZAxRM_9FOlVZfFMULNtCh8-y82dFutnG_LHDSkzFNyZ8XGKCj/s320/agy-proj-todo-list-app-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;agy 回應了下列規劃摘要 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;### 本次工作摘要：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 1. 規劃了模組化的專案目錄結構。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 2. 設計了 JSON 資料儲存的 Schema。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 3. 定義了&amp;nbsp; add 、 list 、 done 、 delete&amp;nbsp; 等 CLI 指令與對應的參數。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&amp;nbsp; 4. 規劃了開發階段（儲存層 -&amp;gt; 邏輯層 -&amp;gt; CLI 解析層）。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請確認此計畫是否符合您的需求。若同意此規劃，請點擊「Proceed」或告知我，我將開始為您撰寫程式&lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;碼。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;看起來此規劃沒問題, 輸入如下提示 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;請依照剛剛的 Implementation Plan 逐步實作專案&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;每一步請先說明要做什麼再執行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 Enter 後 agy 便開始執行它所規劃之專案 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;gt; 請依照剛剛的 Implementation Plan 逐步實作專案&lt;/div&gt;&lt;div&gt;&amp;nbsp; 每一步請先說明要做什麼再執行&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 步驟 1：實作儲存層（Storage Layer）&lt;/div&gt;&lt;div&gt;&amp;nbsp; 在這一步中，我們將建立專案的基礎結構與儲存模組：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1. 建立&amp;nbsp; todo&amp;nbsp; 套件目錄及空的&amp;nbsp; __init__.py 。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. 建立&amp;nbsp; todo/storage.py ，其中包含一個&amp;nbsp; Storage&amp;nbsp; 類別。該類別負責讀取與寫入&amp;nbsp; todo_data.&lt;/div&gt;&lt;div&gt;&amp;nbsp; json ，並包含對應的錯誤處理（例如檔案不存在或 JSON 格式錯誤）。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 首先，我們來建立&amp;nbsp; todo/__init__.py&amp;nbsp; 與&amp;nbsp; todo/storage.py 。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/todo/__init__.py)&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/todo/storage.py) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 步驟 2：實作邏輯層（Logic Layer / Business Logic）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 接下來，我們將實作&amp;nbsp; todo/manager.py 。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 這個模組會包含&amp;nbsp; TodoManager&amp;nbsp; 類別，它會調用剛剛建立的&amp;nbsp; Storage&lt;/div&gt;&lt;div&gt;&amp;nbsp; 模組來載入與儲存資料，並實作核心業務邏輯：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 新增（Add）：取得現有的 todo 列表，自動生成唯一的 ID（現有最大 ID +&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1），並記錄建立時間（ISO 8601 格式格式化字串），接著寫回檔案。&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 列表（List）：根據過濾條件（全部、已完成、未完成）傳回對應的 todo 項目。&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 完成（Done）：根據指定的 ID 將 todo 狀態改為&amp;nbsp; done = True 。&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 刪除（Delete）：根據指定的 ID 從列表中移除該項目。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 現在，我們來建立&amp;nbsp; todo/manager.py 。&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/todo/manager.py) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;▸ Thought for 7s, 527 tokens&lt;/div&gt;&lt;div&gt;&amp;nbsp; Defining CLI Interface&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 步驟 3：實作 CLI 解析層與進入點（CLI Parsing &amp;amp; Entry point）&lt;/div&gt;&lt;div&gt;&amp;nbsp; 現在，我們將實作 CLI 解析邏輯。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1. 建立&amp;nbsp; todo/cli.py ：使用 Python 內建的&amp;nbsp; argparse&amp;nbsp; 模組來定義 subcommands（ add 、 list&lt;/div&gt;&lt;div&gt;&amp;nbsp; 、 done 、 delete ）。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; • 當使用者輸入對應指令時，它會調用&amp;nbsp; TodoManager&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ，並以友善的可讀格式輸出結果。例如，已完成事項標記為&amp;nbsp; [x] ，未完成標記為&amp;nbsp; [ ] 。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. 建立專案根目錄的&amp;nbsp; main.py ：做為應用程式的啟動點，直接調用&amp;nbsp; todo/cli.py&amp;nbsp; 中的主函式。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 首先，我們來建立&amp;nbsp; todo/cli.py 。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/todo/cli.py) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 接下來，我們在根目錄建立進入點檔案&amp;nbsp; main.py ，它會直接執行&amp;nbsp; todo.cli&amp;nbsp; 模組中的&amp;nbsp; main()&lt;/div&gt;&lt;div&gt;&amp;nbsp; 函式。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/main.py) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 步驟 4：測試與驗證（Verification &amp;amp; Testing）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 現在我們來驗證實作是否正確運作。我們將執行以下測試步驟：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1. 執行&amp;nbsp; python main.py --help&amp;nbsp; 檢查說明選單是否正確。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. 新增兩個 todo 項目。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 3. 列出所有待辦事項。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 4. 標記其中一個待辦事項為已完成。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 5. 再次列出，確認狀態更新。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 6. 刪除一個事項，確認已被移除。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 首先，我們執行指令來新增事項並列出它們。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Bash(python main.py add &quot;Buy fresh milk&quot;; python main.py add &quot;Practice Py...) (ctrl+o to&lt;/div&gt;&lt;div&gt;expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Command&lt;/div&gt;&lt;div&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Requesting permission for:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;python main.py add &quot;Buy fresh milk&quot;; python main.py add &quot;Practice Python coding&quot;;&lt;/div&gt;&lt;div&gt;&amp;nbsp; python main.py list&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you want to proceed?&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; 1. Yes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. Yes, and always allow in this conversation for commands that start with &#39;python main.py&lt;/div&gt;&lt;div&gt;add &quot;Buy fresh milk&quot;; python main.py add &quot;Practice Python coding&quot;...&#39;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 3. Yes, and always allow for commands that start with &#39;python main.py add &quot;Buy fresh milk&quot;;&lt;/div&gt;&lt;div&gt;python main.py add &quot;Practice Python coding&quot;...&#39; (Persist to settings.json)&lt;/div&gt;&lt;div&gt;&amp;nbsp; 4. No&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 1.Yes 讓 agy 繼續執行專案, 完成工作 ID 1 後會再次詢問是否允許執行下一步 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;接下來，我們測試將 ID 1 的待辦事項標記為「已完成」，然後刪除 ID 2，最後列出清單以驗證。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Bash(python main.py done 1; python main.py delete 2; python main.py list) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Command&lt;/div&gt;&lt;div&gt;───────────────────────────────────────────────────────────────────────────────────────────────&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Requesting permission for:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;python main.py done 1; python main.py delete 2; python main.py list&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you want to proceed?&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; 1. Yes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. Yes, and always allow in this conversation for commands that start with &#39;python main.py&lt;/div&gt;&lt;div&gt;done 1; python main.py delete 2; python main.py list&#39;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 3. Yes, and always allow for commands that start with &#39;python main.py done 1; python main.py&lt;/div&gt;&lt;div&gt;delete 2; python main.py list&#39; (Persist to settings.json)&lt;/div&gt;&lt;div&gt;&amp;nbsp; 4. No&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ↑/↓ Navigate · tab Amend · ctrl+g edit/expand command · ctrl+r Review&lt;/div&gt;&lt;div&gt;esc to cancel&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Gemini 3.5 Flash (Medium)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成所有規劃的工作 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp; ### 步驟 5：撰寫 README.md（Documentation）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 為了讓專案結構更完整，並方便您或其他人日後使用，我們將在專案根目錄下建立一個 README.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; 說明文件，內容會說明如何安裝以及如何執行這些指令。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;● Create(D:/agy/todo-cli-app/README.md) (ctrl+o to expand)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 我們已經按照 Implementation Plan 逐步實作完成整個 Todo CLI App！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 實作檔案與程式結構連結：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1. __init__.py：初始化 todo 套件。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2. storage.py：定義了 storage.py 類別，負責讀寫 JSON 檔案。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 3. manager.py：定義了 manager.py 類別，實作新增、刪除、完成、列出等核心邏輯。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 4. cli.py：處理指令列參數解析 ( argparse ) 與文字輸出格式化。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 5. main.py：專案啟動入口。&lt;/div&gt;&lt;div&gt;&amp;nbsp; 6. README.md：專案的使用說明文檔。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ### 測試結果：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 我們已在終端機中成功測試了下列功能：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 新增事項： python main.py add &quot;Buy fresh milk&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 列出事項： python main.py list&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 完成事項： python main.py done 1&lt;/div&gt;&lt;div&gt;&amp;nbsp; • 刪除事項： python main.py delete 2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 所有程式碼與功能皆已測試完畢並可正常運行！如果您有任何新功能需求或需要微調，請隨時告訴我。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上就是 agy 執行此專案的過程, 至此 AI 已完成全部它所規劃的工作.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 驗收專案成果 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;開啟一個新的 PS 視窗, 切換至專案目錄下, 先檢視專案內容 :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;dir&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; 目錄: D:\agy\todo-cli-app&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mode&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LastWriteTime&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Length Name&lt;/div&gt;&lt;div&gt;----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-------------&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;------ ----&lt;/div&gt;&lt;div&gt;d-----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 02:57&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todo&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 12:39&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;65 main.py&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 03:01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1452 README.md&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 03:01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 127 todo_data.json&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其中 todo 是放專案程式的資料夾; todo_data.json 是用來存放待辦事項的 JSON 格式資料檔; README.md 是整個專案的說明檔, 裡面有此軟體的使用方法; main.py 為程式進入點, 它的內容很簡單, 先從 todo 資料夾下的 cli.py 匯入 main() 含是後是呼叫它而已 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;from todo.cli import main&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;if __name__ == &quot;__main__&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; main()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;真正的邏輯寫在 todo 子目錄下的程式裡面 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app\todo&amp;gt; dir&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; 目錄: D:\agy\todo-cli-app\todo&lt;/div&gt;&lt;div&gt;Mode&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LastWriteTime&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Length Name&lt;/div&gt;&lt;div&gt;----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-------------&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;------ ----&lt;/div&gt;&lt;div&gt;d-----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 02:57&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __pycache__&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 12:39&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3600 cli.py&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 12:39&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2197 manager.py&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 12:39&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1074 storage.py&lt;/div&gt;&lt;div&gt;-a----&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026/6/30&amp;nbsp; 下午 12:39&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;26 __init__.py&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其中 __init__.py 是一個用來符合 Python 結構的空檔案, cli.py 才是主程式 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# cli.py&lt;/div&gt;&lt;div&gt;&lt;div&gt;import argparse&lt;/div&gt;&lt;div&gt;import sys&lt;/div&gt;&lt;div&gt;from datetime import datetime&lt;/div&gt;&lt;div&gt;from todo.storage import Storage&lt;/div&gt;&lt;div&gt;from todo.manager import TodoManager&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def parse_iso_datetime(iso_str: str) -&amp;gt; str:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Parses an ISO format datetime string and returns a user-friendly format.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; try:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dt = datetime.fromisoformat(iso_str)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return dt.strftime(&quot;%Y-%m-%d %H:%M&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; except ValueError:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return iso_str&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def handle_add(manager: TodoManager, args):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if not args.title or not args.title.strip():&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&quot;Error: Todo title cannot be empty.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; new_todo = manager.add(args.title)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; print(f&quot;Added task: [ID: {new_todo[&#39;id&#39;]}] \&quot;{new_todo[&#39;title&#39;]}\&quot;&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def handle_list(manager: TodoManager, args):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # Determine filter status&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if args.done:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; status = &quot;done&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; elif args.pending:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; status = &quot;pending&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; status = &quot;all&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; todos = manager.list_todos(status)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if not todos:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;No {status if status != &#39;all&#39; else &#39;&#39;} tasks found.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; print(f&quot;{&#39;ID&#39;:&amp;lt;4} {&#39;Status&#39;:&amp;lt;8} {&#39;Title&#39;:&amp;lt;40} {&#39;Created At&#39;:&amp;lt;16}&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; print(&quot;-&quot; * 72)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for todo in todos:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; status_str = &quot;[x]&quot; if todo[&quot;done&quot;] else &quot;[ ]&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; created_time = parse_iso_datetime(todo[&quot;created_at&quot;])&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;{todo[&#39;id&#39;]:&amp;lt;4} {status_str:&amp;lt;8} {todo[&#39;title&#39;]:&amp;lt;40} {created_time:&amp;lt;16}&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def handle_done(manager: TodoManager, args):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; success = manager.mark_done(args.id)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if success:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;Success: Marked task {args.id} as completed.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;Error: Task with ID {args.id} not found.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def handle_delete(manager: TodoManager, args):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; success = manager.delete(args.id)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if success:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;Success: Deleted task {args.id}.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;Error: Task with ID {args.id} not found.&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def main():&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; parser = argparse.ArgumentParser(&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; description=&quot;Todo CLI Application - Manage your tasks from the terminal.&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; )&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; subparsers = parser.add_subparsers(dest=&quot;command&quot;, help=&quot;Available subcommands&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # &#39;add&#39; subcommand&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; add_parser = subparsers.add_parser(&quot;add&quot;, help=&quot;Add a new task&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; add_parser.add_argument(&quot;title&quot;, type=str, help=&quot;The title of the task&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # &#39;list&#39; subcommand&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; list_parser = subparsers.add_parser(&quot;list&quot;, help=&quot;List tasks&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; group = list_parser.add_mutually_exclusive_group()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; group.add_argument(&quot;--done&quot;, action=&quot;store_true&quot;, help=&quot;List only completed tasks&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; group.add_argument(&quot;--pending&quot;, action=&quot;store_true&quot;, help=&quot;List only pending tasks&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; group.add_argument(&quot;--all&quot;, action=&quot;store_true&quot;, default=True, help=&quot;List all tasks (default)&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # &#39;done&#39; subcommand&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; done_parser = subparsers.add_parser(&quot;done&quot;, help=&quot;Mark a task as completed&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; done_parser.add_argument(&quot;id&quot;, type=int, help=&quot;ID of the task to mark as done&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # &#39;delete&#39; subcommand&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; delete_parser = subparsers.add_parser(&quot;delete&quot;, help=&quot;Delete a task&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; delete_parser.add_argument(&quot;id&quot;, type=int, help=&quot;ID of the task to delete&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; args = parser.parse_args()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if not args.command:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parser.print_help()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(0)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # Initialize storage and manager&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; storage = Storage(&quot;todo_data.json&quot;)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; manager = TodoManager(storage)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; # Dispatch to handlers&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if args.command == &quot;add&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_add(manager, args)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; elif args.command == &quot;list&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_list(manager, args)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; elif args.command == &quot;done&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_done(manager, args)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; elif args.command == &quot;delete&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_delete(manager, args)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;if __name__ == &quot;__main__&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; main()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;manager.py 負責增刪待辦事項等操作 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# manager.py&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;from datetime import datetime&lt;/div&gt;&lt;div&gt;from typing import List, Dict, Optional&lt;/div&gt;&lt;div&gt;from todo.storage import Storage&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class TodoManager:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Manages todo actions: add, list, done, delete, delegating persistence to Storage.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def __init__(self, storage: Storage):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.storage = storage&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def _load_todos(self) -&amp;gt; List[Dict]:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return self.storage.load()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def _save_todos(self, todos: List[Dict]) -&amp;gt; None:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.storage.save(todos)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def add(self, title: str) -&amp;gt; Dict:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Adds a new todo item and returns it.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos = self._load_todos()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Auto-increment ID&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new_id = max([todo[&quot;id&quot;] for todo in todos], default=0) + 1&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new_todo = {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;id&quot;: new_id,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;title&quot;: title.strip(),&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;done&quot;: False,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;created_at&quot;: datetime.now().isoformat()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos.append(new_todo)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._save_todos(todos)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new_todo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def list_todos(self, status: str = &quot;all&quot;) -&amp;gt; List[Dict]:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Lists todos filtered by status: &#39;all&#39;, &#39;done&#39;, or &#39;pending&#39;.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos = self._load_todos()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if status == &quot;done&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return [todo for todo in todos if todo[&quot;done&quot;]]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; elif status == &quot;pending&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return [todo for todo in todos if not todo[&quot;done&quot;]]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return todos&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def mark_done(self, todo_id: int) -&amp;gt; bool:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Marks a todo item as completed. Returns True if found and updated, False otherwise.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos = self._load_todos()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for todo in todos:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if todo[&quot;id&quot;] == todo_id:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if todo[&quot;done&quot;]:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return True # Already done&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todo[&quot;done&quot;] = True&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._save_todos(todos)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return True&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return False&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def delete(self, todo_id: int) -&amp;gt; bool:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Deletes a todo item. Returns True if found and deleted, False otherwise.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos = self._load_todos()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initial_length = len(todos)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; todos = [todo for todo in todos if todo[&quot;id&quot;] != todo_id]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if len(todos) &amp;lt; initial_length:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._save_todos(todos)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return True&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return False&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;storage.py 為上面的 manager.py 操作 todo_data.json 提供基礎類別 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;import json&lt;/div&gt;&lt;div&gt;import os&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class Storage:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Handles loading and saving todo data from/to a JSON file.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def __init__(self, filepath: str = &quot;todo_data.json&quot;):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.filepath = filepath&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def load(self) -&amp;gt; list:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Loads todo list from JSON file. Returns empty list if file doesn&#39;t exist or is invalid.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not os.path.exists(self.filepath):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return []&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; with open(self.filepath, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data = json.load(f)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not isinstance(data, list):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return []&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return data&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except (json.JSONDecodeError, IOError):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # If the file is corrupted or unreadable, return an empty list&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return []&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; def save(self, data: list) -&amp;gt; None:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;&quot;&quot;Saves todo list to JSON file.&quot;&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; with open(self.filepath, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; json.dump(data, f, ensure_ascii=False, indent=2)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except IOError as e:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;Error saving todo data: {e}&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;可見 agy 規劃的專案架構非常清晰, 可維護性很高.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 驗證程式功能 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;最後手動測試此軟體 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;首先用 python main.py list 檢視代辦清單內容 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py list&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;ID&amp;nbsp; &amp;nbsp;Status&amp;nbsp; &amp;nbsp;Title&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Created At&lt;/div&gt;&lt;div&gt;------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;1&amp;nbsp; &amp;nbsp; [x]&amp;nbsp; &amp;nbsp; &amp;nbsp; Buy fresh milk&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;目前只有一筆資料, Status 欄為 x 表示該備忘事項已完成.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用 python main.py add 新增一筆備忘後再次檢視就會顯示兩筆 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py add &quot;買 A4 影印紙&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Added task: [ID: 2] &quot;買 A4 影印紙&quot;&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py list&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;ID&amp;nbsp; &amp;nbsp;Status&amp;nbsp; &amp;nbsp;Title&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Created At&lt;/div&gt;&lt;div&gt;------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;1&amp;nbsp; &amp;nbsp; [x]&amp;nbsp; &amp;nbsp; &amp;nbsp; Buy fresh milk&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026-06-30 14:57&lt;/div&gt;&lt;div&gt;2&amp;nbsp; &amp;nbsp; [ ]&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;background-color: #fcff01;&quot;&gt;買 A4 影印紙&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026-06-30 15:15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Status 欄空白表示尚未完成. 接下來 python main.py done 2 指令將 ID=2 的備忘標示為已完成, 再次檢視清單就會看見兩筆都被標示為 x :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py done 2&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Success: Marked task 2 as completed.&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py list&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;ID&amp;nbsp; &amp;nbsp;Status&amp;nbsp; &amp;nbsp;Title&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Created At&lt;/div&gt;&lt;div&gt;------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;1&amp;nbsp; &amp;nbsp; [x]&amp;nbsp; &amp;nbsp; &amp;nbsp; Buy fresh milk&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026-06-30 14:57&lt;/div&gt;&lt;div&gt;2&amp;nbsp; &amp;nbsp; [x]&amp;nbsp; &amp;nbsp; &amp;nbsp; 買 A4 影印紙&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2026-06-30 15:15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟 todo_data.json 可以看到所儲存這兩筆待辦事項內容 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;[&lt;/div&gt;&lt;div&gt;&amp;nbsp; {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;id&quot;: 1,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;title&quot;: &quot;Buy fresh milk&quot;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;done&quot;: true,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;created_at&quot;: &quot;2026-07-01T08:15:30.657339&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; },&lt;/div&gt;&lt;div&gt;&amp;nbsp; {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;id&quot;: 2,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;title&quot;: &quot;買 A4 影印紙&quot;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;done&quot;: true,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &quot;created_at&quot;: &quot;2026-07-01T08:15:36.159076&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;]&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後來檢查刪除功能, 連續刪除兩筆後再次檢視清單應為空 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py delete 1&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Success: Deleted task 1.&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py delete 2&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Success: Deleted task 2.&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;python main.py list&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;No&amp;nbsp; tasks found.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可見 agy 實作的專案成果符合預期之功能.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成後回 agy 命令列, 輸入 /usage 斜線指令檢視目前 token 用量餘額 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX8uAse9V8uz92DkiAhQPt5qKW2Hel_6kRHy5QOYaIHCTe-uySsvF6JadlwKZraO1R8jGVJOeZ4U38XBjc6toafQQVBOusdimPaKcdJtvUj96hc_54QKck5GvsjCcEZJdbm6jS5_gfucbkzSWz8yoDNYu03BfFKIk_jHG9TDoppBTOAYBn1q3gN3GRqpGt/s1286/agy-proj-todo-list-app-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1050&quot; data-original-width=&quot;1286&quot; height=&quot;261&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX8uAse9V8uz92DkiAhQPt5qKW2Hel_6kRHy5QOYaIHCTe-uySsvF6JadlwKZraO1R8jGVJOeZ4U38XBjc6toafQQVBOusdimPaKcdJtvUj96hc_54QKck5GvsjCcEZJdbm6jS5_gfucbkzSWz8yoDNYu03BfFKIk_jHG9TDoppBTOAYBn1q3gN3GRqpGt/s320/agy-proj-todo-list-app-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;此用量統計分為兩部分, 上層是 Gemini Flash 與 Gemini Pro 模型的用量餘額, 下層是第三方模型 CLAUDE (Claude Opus/Claude Sonnet) 與 GPT 用量餘額合計, 各自有分 Weekly Limit (每週上限) 與 Five Hour Limit (五小時滾動限制), 以及多久後重置, 98% 以上的周累計餘額表示過去一周都沒用到多少.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;4. 上傳 GitHub :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;先在 GitHub 建立一個名為 antigravity 的 repo, 並在此 repo 下新增一個 projects 資料夾, 作法參考 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2020/03/git-github.html&quot; target=&quot;_blank&quot;&gt;Git 學習筆記 (五) : GitHub 檔案管理&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt5NIJSyTOERd2GDCzPt3kLrqURvgOS0dzOkPvWhevR1Txo2lRLueEXSo5e4S2WudOfafrMnK20gx_Wa80OUBkLozmQXLDnR08lXNC4zN2Ec0ygXXdr2gEVVJwFpZ7Ug3DLEWLVjmDGgt4q3rAKvPeqPMeM0HI1Lh52h-rJBbyNPhutlzCVcKtpL-j_MQA/s1811/agy-proj-todo-list-app-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1079&quot; data-original-width=&quot;1811&quot; height=&quot;191&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt5NIJSyTOERd2GDCzPt3kLrqURvgOS0dzOkPvWhevR1Txo2lRLueEXSo5e4S2WudOfafrMnK20gx_Wa80OUBkLozmQXLDnR08lXNC4zN2Ec0ygXXdr2gEVVJwFpZ7Ug3DLEWLVjmDGgt4q3rAKvPeqPMeM0HI1Lh52h-rJBbyNPhutlzCVcKtpL-j_MQA/s320/agy-proj-todo-list-app-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;跳到專案目錄上一層資料夾 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\agy\todo-cli-app&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd ..&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;PS D:\agy&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用下列指令將上面建立的 GitHub 儲存庫複製到本機 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;git clone https://github.com/你的帳號/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;git clone https://github.com/tony1966/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git clone https://github.com/tony1966/antigravity_cli.git&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Cloning into &#39;antigravity_cli&#39;...&lt;/div&gt;&lt;div&gt;remote: Enumerating objects: 8, done.&lt;/div&gt;&lt;div&gt;remote: Counting objects: 100% (8/8), done.&lt;/div&gt;&lt;div&gt;remote: Compressing objects: 100% (6/6), done.&lt;/div&gt;&lt;div&gt;remote: Total 8 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;Receiving objects: 100% (8/8), done.&lt;/div&gt;&lt;div&gt;Resolving deltas: 100% (1/1), done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢視目錄結構, 確認 antigravity_cli 底下有 projects 資料夾 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;tree antigravity_cli&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;列出磁碟區 新增磁碟區 的資料夾 PATH&lt;/div&gt;&lt;div&gt;磁碟區序號為 00000239 1258:16B8&lt;/div&gt;&lt;div&gt;D:\AGY\ANTIGRAVITY_CLI&lt;/div&gt;&lt;div&gt;└─projects&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;將專案目錄 todo-cli-app&amp;nbsp;移動或複製到 projects 下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS D:\agy\&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd antigravity_cli&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;tree projects&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;列出磁碟區 新增磁碟區 的資料夾 PATH&lt;/div&gt;&lt;div&gt;磁碟區序號為 0000018F 1258:16B8&lt;/div&gt;&lt;div&gt;D:\AGY\ANTIGRAVITY_CLI\PROJECTS&lt;/div&gt;&lt;div&gt;└─&lt;span style=&quot;background-color: #fcff01;&quot;&gt;todo-cli-app&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; └─todo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用記事本編輯一個 .gitignore 檔, 貼上下列萬用內容 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;# Python 相關快取與編譯檔案&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;__pycache__/&lt;/div&gt;&lt;div&gt;*.py[cod]&lt;/div&gt;&lt;div&gt;*$py.class&lt;/div&gt;&lt;div&gt;.pytest_cache/&lt;/div&gt;&lt;div&gt;.poetry/&lt;/div&gt;&lt;div&gt;.venv/&lt;/div&gt;&lt;div&gt;venv/&lt;/div&gt;&lt;div&gt;ENV/&lt;/div&gt;&lt;div&gt;env/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;# 專案實務資料 (避免將測試的待辦清單資料上傳)&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;# 如果你希望每個人 clone 下來都是乾淨的，就排除 json 檔案&lt;/div&gt;&lt;div&gt;# 如果你希望上傳一個範本，可以改為排除特定名稱（例如：todo_db.json）&lt;/div&gt;&lt;div&gt;*.json&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;# 開發工具與編輯器暫存檔&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;.vscode/&lt;/div&gt;&lt;div&gt;.idea/&lt;/div&gt;&lt;div&gt;*.swp&lt;/div&gt;&lt;div&gt;*.bak&lt;/div&gt;&lt;div&gt;.DS_Store&lt;/div&gt;&lt;div&gt;Thumbs.db&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;# 敏感資料與環境變數 (絕對不能上傳)&lt;/div&gt;&lt;div&gt;# ==========================================&lt;/div&gt;&lt;div&gt;.env&lt;/div&gt;&lt;div&gt;.env.local&lt;/div&gt;&lt;div&gt;.env.*.local&lt;/div&gt;&lt;div&gt;*.env&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;存檔後用 git add. 指令讓 Git 開始追蹤新加入的專案 :&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git add .&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/README.md&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/main.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/todo/__init__.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/todo/cli.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/todo/manager.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;div&gt;warning: in the working copy of &#39;projects/todo-cli-app/todo/storage.py&#39;, LF will be replaced by CRLF the next time Git touches it&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這些 warning 無關緊要, 這樣就可以&lt;span class=&quot;hljs-comment&quot;&gt;提交變更了 :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git commit -m &quot;feat: add todo-cli-app to projects folder&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;[main 239b617] feat: add todo-cli-app to projects folder&lt;/div&gt;&lt;div&gt;&amp;nbsp;7 files changed, 300 insertions(+)&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 .gitignore&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/README.md&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/main.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/todo/__init__.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/todo/cli.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/todo/manager.py&lt;/div&gt;&lt;div&gt;&amp;nbsp;create mode 100644 projects/todo-cli-app/todo/storage.py&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;用 git push 指令推送到 GitHub :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;git push origin main&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這時會彈出一個網頁詢問頁面, 點選 manager 與 Always use this from now on 後按 Select 即開始推送 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1B909oa0GAtErQt_MQvnWFhps6gucFDhRBAYarvZOsIKFVr97M_aHS4mCXx1Ms1eBH4N1mdE0E2AAgdAjMFyT7kLtcnJ9Idh6U45fHPUEZugAjOV7na-JDKFGP1cW5DXKsKIbgJ97HTXp0nFKo826ufXpnRpBulj4Ol98KwnVaSlJdPYxLsdj3BfpRTq/s393/agy-proj-todo-list-app-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;234&quot; data-original-width=&quot;393&quot; height=&quot;191&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1B909oa0GAtErQt_MQvnWFhps6gucFDhRBAYarvZOsIKFVr97M_aHS4mCXx1Ms1eBH4N1mdE0E2AAgdAjMFyT7kLtcnJ9Idh6U45fHPUEZugAjOV7na-JDKFGP1cW5DXKsKIbgJ97HTXp0nFKo826ufXpnRpBulj4Ol98KwnVaSlJdPYxLsdj3BfpRTq/s320/agy-proj-todo-list-app-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS D:\agy\antigravity_cli&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git push origin main&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Enumerating objects: 14, done.&lt;/div&gt;&lt;div&gt;Counting objects: 100% (14/14), done.&lt;/div&gt;&lt;div&gt;Delta compression using up to 16 threads&lt;/div&gt;&lt;div&gt;Compressing objects: 100% (11/11), done.&lt;/div&gt;&lt;div&gt;Writing objects: 100% (12/12), 4.21 KiB | 2.11 MiB/s, done.&lt;/div&gt;&lt;div&gt;Total 12 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;To https://github.com/tony1966/antigravity_cli.git&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;a9aea88..239b617&amp;nbsp; main -&amp;gt; main&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這時到 GitHub 就可以看到 todo-cli-app 專案上傳成功 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuD-cz063LyXi7wbaBIH1aZ8aOqftdf7LinWIpCUUvcQ3d_G4cuYy1GSmVE7qHM7KyvutKwXxNTZIm20QziOUk5Ixk6vntVgE_VGr03pwo4Mx-kdmIvbNicmQmsKBiEvTs-uXJkMdQeQ8ntaZTiwWuKdkA4B2xqmMtZ5vwdzj-wtx_iXqc-UM-jG68-Tjo/s1657/agy-proj-todo-list-app-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;962&quot; data-original-width=&quot;1657&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuD-cz063LyXi7wbaBIH1aZ8aOqftdf7LinWIpCUUvcQ3d_G4cuYy1GSmVE7qHM7KyvutKwXxNTZIm20QziOUk5Ixk6vntVgE_VGr03pwo4Mx-kdmIvbNicmQmsKBiEvTs-uXJkMdQeQ8ntaZTiwWuKdkA4B2xqmMtZ5vwdzj-wtx_iXqc-UM-jG68-Tjo/s320/agy-proj-todo-list-app-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本專案的 repo 網址 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-cli-app&quot; target=&quot;_blank&quot;&gt;https://github.com/tony1966/antigravity_cli/tree/main/projects/todo-cli-app&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/4241182555077151065/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/4241182555077151065' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/4241182555077151065'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/4241182555077151065'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/google-antigravity-cli-to-do-list.html' title='Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLlmbfrXgUeplNjddq0Lwp045wAm4nlwoH-pH2Lgoa_UC77Q-A7GFEKFkq0ZAwdOH-qLwPERa5RUmUwn0MHyle4bYqvsWSFmaEjV2bdFT0eJ35hv13cmelagUDIr5zLTG7OPOYrJEtIgtZAxRM_9FOlVZfFMULNtCh8-y82dFutnG_LHDSkzFNyZ8XGKCj/s72-c/agy-proj-todo-list-app-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-6093261327673805601</id><published>2026-06-30T09:58:25.889+08:00</published><updated>2026-06-30T09:58:25.890+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="旅行"/><title type='text'>岡山之旅行前準備</title><content type='html'>即將進入七月了, 月底要帶老同事阿中去日本岡山旅行, 此行主要是應他要求, 教他如何在日本自助旅行, 包括訂機票旅館, 填寫 VJW, 購買行動漫遊, 安裝常用 App (AI, 計程車 &amp;amp; 轉車) 等哩哩扣扣的小細節.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我在五月時就已將行程規劃好, 參考 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/05/2026.html&quot; target=&quot;_blank&quot;&gt;2026 岡山之旅規劃 (07-24~07-29)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/05/blog-post_19.html&quot; target=&quot;_blank&quot;&gt;預約岡山桃茂實苑觀光農場採果&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今天先來教他填寫 VJW, 還有記錄一些備忘事項.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. 填寫 VJW :&amp;nbsp;&lt;a href=&quot;https://www.vjw.digital.go.jp/&quot; target=&quot;_blank&quot;&gt;https://www.vjw.digital.go.jp/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. 委託代購清單 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;合利他命 EX&lt;/li&gt;&lt;li&gt;AD&lt;/li&gt;&lt;li&gt;龍角散&lt;/li&gt;&lt;li&gt;暈車藥 (小舅)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. 備忘清單 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;太陽眼鏡&lt;/li&gt;&lt;li&gt;摺扇&lt;/li&gt;&lt;li&gt;電子行李秤&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其他參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/03/blog-post_12.html&quot; target=&quot;_blank&quot;&gt;日本自助旅遊備忘錄&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;~ 進行中 ~&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/6093261327673805601/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/6093261327673805601' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6093261327673805601'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6093261327673805601'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/blog-post_30.html' title='岡山之旅行前準備'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-2066922699581349478</id><published>2026-06-29T23:36:02.055+08:00</published><updated>2026-06-29T23:36:02.055+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="筆電"/><title type='text'>我的筆電歷史</title><content type='html'>&lt;div&gt;今天在硬碟中找尋 Carbonbook 的備份映像, 為了方便判斷是哪一台筆電的映像, 乾脆搜尋部落格中關於用過的六台筆電購買紀錄, 摘要如下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;D290A : 2010 建國路 ($42000)&lt;/li&gt;&lt;li&gt;技嘉&amp;nbsp;W251U : 水某購買 ($40000)&lt;/li&gt;&lt;li&gt;ACER AOD260 : 2011-06-30 露天拍賣 ($6500)&lt;/li&gt;&lt;li&gt;INHON Carbonbook : 2014-10-23 ($15000) 原廠&lt;/li&gt;&lt;li&gt;ACER Swift 5 (SF515) : 2019-02-23 ($35000) 建國路茂訊&lt;/li&gt;&lt;li&gt;LG Gram : 2023-08-24 ($34317) 遠傳 Friday&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;D290A 大約是 2010 年就讀高師大碩士班時為了寫論文而買的, 非常厚重 (3 公斤左右), 畢業後就很少帶來帶去, 放家裡當成桌機用. 技嘉 W251U 是水某買來研究計畫用的, 但大都是我在使用 (當時拿來學習技術分析用). AOD260 也用了 3~4 年才換 Carbonbook. ACER Swift 5 在 2023 年螢幕出現橫線後當成桌機用, 直到 6 月中被阿咪尿斃歸天.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/2066922699581349478/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/2066922699581349478' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/2066922699581349478'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/2066922699581349478'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/blog-post.html' title='我的筆電歷史'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-893233467902288830</id><published>2026-06-29T15:57:58.580+08:00</published><updated>2026-06-29T15:57:58.580+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : 學習地圖</title><content type='html'>&lt;div&gt;由於 Antigravity CLI 已經脫離 Gemini CLI 時代的一問一答思維, 進化到 AI 代理人協同思維(Agentic System), 開發者使用 AI 的模式也要轉變, 我叫 M365 chat 擬了一個 Antigravity CLI 學習地圖 (似乎只能輸出文本), 交給 Gemini 畫成圖片, 如下所示 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3aC4kfvqqIenx15ktsph3cAiiwMAAPZ_ytkq-J6EtUHLmwQt1XvEPTYPwwJXP93CZ2Xqn9S75lBHFvqW_gSKZja0YRfsktq8kg-BhclVQ3_mplRTQprdmUlR6j28rlmgWKVyY4YCz7bQCGUYXg3PV-nEJKptGChVyKwrY1K8zWKRarwSGcy2ABHNPGEa8/s2816/Google-Antigravity-CLI-%E5%AD%B8%E7%BF%92%E5%9C%B0%E5%9C%96.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2816&quot; height=&quot;175&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3aC4kfvqqIenx15ktsph3cAiiwMAAPZ_ytkq-J6EtUHLmwQt1XvEPTYPwwJXP93CZ2Xqn9S75lBHFvqW_gSKZja0YRfsktq8kg-BhclVQ3_mplRTQprdmUlR6j28rlmgWKVyY4YCz7bQCGUYXg3PV-nEJKptGChVyKwrY1K8zWKRarwSGcy2ABHNPGEa8/s320/Google-Antigravity-CLI-%E5%AD%B8%E7%BF%92%E5%9C%B0%E5%9C%96.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;這張 Google Antigravity CLI 學習地圖的核心意旨, 是為了協助開發者從過去舊時代的 &quot;AI 聊天工具思維&quot; (舊版 Gemini CLI 的一問一答), 全面升級到新世代的 &quot;AI 代理人協同思維 (Agentic System). 此學習地圖透過由淺入深的架構指引開發者如何將 AI 轉化為一個能夠自主思考與規劃, 並執行複雜任務的 &quot;虛擬夥伴&quot;.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;此學習地圖分成上下兩層, 上層是學習的起點, 用來奠定代理人的思維以掌握此新世代 AI 工具, 它由三個平行的支柱組成, 強調工具, 思維, 工程缺一不可 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;基礎操作 (工具熟練) :&lt;br /&gt;開發者必須先熟悉 agy 的全新圖形終端介面 (TUI) 與設定.&lt;/li&gt;&lt;li&gt;Agent 思維 (核心大腦) :&lt;br /&gt;此乃整張地圖最核心部分, 它告訴開發者不能再用以前 &quot;給一個指令吐一個答案&quot; 的線性思維來使用 agy, 必須學會如何給定一個大目標 (Prompt Engineering), 並理解 AI 是如何將大目標拆解成小任務 (Task Decomposition) 與如何自我規劃 (Planning).&amp;nbsp;&lt;/li&gt;&lt;li&gt;工程整合 (實務落地) :&lt;br /&gt;AI 代理人不能脫離現實開發環境, 開發者需學習如何讓 AI 融入現有的 Git 版本控制, 撰寫並執行測試, 以及自動化整合 (CI/CD), 才能確保 AI 寫出的程式碼是安全, 可被驗證且符合工程規範.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;下層為進階匯流部分, 是邁向高效率自動化生產力提升的關鍵. 開發者在融合了上半部的基礎能力後, 軟體開發能力將產生兩大質變 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;基礎操作 ＋ Agent 思維 =&amp;gt; 輕鬆駕馭多代理人系統 (Multi-Agent) :&lt;br /&gt;當開發者既懂操作又懂 Agent 的思考邏輯時, 就能開始扮演 &quot;專案經理的角色, 可以同時調動多個子代理人 (Subagents), 指派不同的技能 (Skills) 與擴充元件 (Plugins), 讓多個 AI 代理在背景非同步地協同開發.&lt;/li&gt;&lt;li&gt;Agent 思維 ＋ 工程整合 =&amp;gt; 建立生產工作流 (Production Workflow) :&lt;br /&gt;當 AI 的規劃能力與實際工程環境結合時就能徹底解放雙手, 透過 MCP 與 Hooks, AI 代理能全自動地巡檢專案, 自動修復 Bug, 甚至優化工作流程, 實現真正的 coding 自動化.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;總之, 此學習地圖昭示開發者 : 不要只把 AI 當成會寫程式的聊天機器人, 要把 AI 當成你的團隊同僚. 它指引了一條清晰的學習路徑, 帶領開發者從基礎的指令輸入者, 進化為能夠編排, 調度, 並與多個 AI 代理人共同協作的新世代 AI 開發總指揮.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接下來我想利用 AI 學習 AI, 透過簡單實用的範例實作來快速掌握此工具. 我去年底買的 Google AI Pro 已過去半年但使用率不高, 下半年要來好好榨乾其價值呵呵.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/893233467902288830/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/893233467902288830' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/893233467902288830'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/893233467902288830'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/google-antigravity.html' title='Google Antigravity 學習筆記 : 學習地圖'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3aC4kfvqqIenx15ktsph3cAiiwMAAPZ_ytkq-J6EtUHLmwQt1XvEPTYPwwJXP93CZ2Xqn9S75lBHFvqW_gSKZja0YRfsktq8kg-BhclVQ3_mplRTQprdmUlR6j28rlmgWKVyY4YCz7bQCGUYXg3PV-nEJKptGChVyKwrY1K8zWKRarwSGcy2ABHNPGEa8/s72-c/Google-Antigravity-CLI-%E5%AD%B8%E7%BF%92%E5%9C%B0%E5%9C%96.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1014183991798522063</id><published>2026-06-29T14:46:21.470+08:00</published><updated>2026-06-29T14:47:11.906+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="生活"/><title type='text'>2026 年第 25 周記事</title><content type='html'>&lt;div&gt;本周花了很多時間在修復舊筆電, 經過一周努力, 周二終於破解水某那台 DELL Vostro 2520 筆電的系統管理員密碼, 這樣才有權限安裝軟體以做為下載機備品. 其次是已退役多年的應宏 INHON Carbonbook 小筆電, 此機疑似 SSD 系統碟毀損無法開機, 周末拆開機子查看, 發現其 SSD 可能是應宏的特規產品, 既非 mSATA 亦非 M.2 SATA (2013~2014 規格上未收斂), 本想在拍賣網站買個二手 128GB SSD 來更換重灌系統, 但無法找到插槽與金手指接點雷同的二手品, 聽從 AI 建議作罷, 只好將金手指擦拭一下插回鎖上, 開機已可讀到 SSD 但無法復原 Win10, 希望能從映像檔順利復原. 至於 ACER Swift 5 筆電, 因電源部分被阿咪尿到無法過電, 確定要丟回收了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上週梅雨季結束後, 天晴沒幾天又有環流帶來豪雨, 周五南部放豪雨假一天, 周五早上我忙完 MSI 主機的 C 碟映像備份後趁雨勢稍歇回鄉下, 順路去三聖領爸的降血壓藥, 護理師告知因院長打算休息, 所以之後要到別家診所拿慢簽了, 所以等這次的藥剩下一周左右時, 要載爸去小太陽那邊掛號拿藥了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;老家要整理的地方很多, 周五下午先清理頂樓的落葉, 避免雨季時阻塞出水口. 然後更換二樓和室的燈泡, 下周要吸塵並清潔木地板. 路旁的蓮霧樹樹枝伸展到祖堂左側露臺, 掉落的樹葉與落果要花很多時間清除, 我拿了柴刀搬了梯子將樹枝截短, 但更高的部分就沒辦法, 需要爬樹去截斷樹幹, 這可不是輕鬆的活. 周六下午清理餐廳旁的浴室轉角所堆放的衛生紙包, 跑進屋裡的貓咪在那邊大便, 清理完後就顯得清爽多了. 下周目標轉向車庫靠牆的鐵架, 騰出空間來放還需要的物品.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1014183991798522063/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1014183991798522063' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1014183991798522063'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1014183991798522063'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/2026-25.html' title='2026 年第 25 周記事'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1228276979761078558</id><published>2026-06-28T14:05:20.689+08:00</published><updated>2026-06-28T14:05:20.690+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Claude"/><category scheme="http://www.blogger.com/atom/ns#" term="好書"/><title type='text'>博客來買書 1 本 : Claude 萬用手冊</title><content type='html'>中午滑臉書看到博客來今天這本 66 折 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://www.books.com.tw/products/0011053532&quot; target=&quot;_blank&quot;&gt;Claude 萬用手冊：Claude.ai | Desktop | Cowork | Code Mode | Design | Computer Use | Skills | Connectors | Plugins&lt;/a&gt;&amp;nbsp;$458&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf_ZWhCysNmPGP4rxLMH4C0J6Io1JQBAlojol94lbbKrth-QQm-RKvMuEEvL0W7KD000-WbIxwvFzMRRvjjdRw2wBeJgB29lJQAvs9rUUlaeZ7XPBJjqdIbWlzmDsReEhgTve2SE4-_ougX2akGQu92YZsEqwie4pzD30AAhRZ-pHLgftGClX4s30Sa7Tc/s1585/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;759&quot; data-original-width=&quot;1585&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf_ZWhCysNmPGP4rxLMH4C0J6Io1JQBAlojol94lbbKrth-QQm-RKvMuEEvL0W7KD000-WbIxwvFzMRRvjjdRw2wBeJgB29lJQAvs9rUUlaeZ7XPBJjqdIbWlzmDsReEhgTve2SE4-_ougX2akGQu92YZsEqwie4pzD30AAhRZ-pHLgftGClX4s30Sa7Tc/s320/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;旗標的書打 66 折機會不多, 而 Claude 我也要用到, 所以就買了,&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ujG66CK8Q9k02uynvGcsr_OvNnKlvnRqy9qOmHUgzzSeSUjjL8NfCspGKfV_eUgNAYEm0f9kww0Wjj-W13oOfDjpe27Sy_0bWpl5FK76cfnSA-TtmZXdzhvbtPFmovjoYYhKWD7sZMar5XRNpvGUcjjya1W54xwQEH6Vr0ULBOSgDP4eRPx087HitR8A/s1365/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1365&quot; data-original-width=&quot;1079&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ujG66CK8Q9k02uynvGcsr_OvNnKlvnRqy9qOmHUgzzSeSUjjL8NfCspGKfV_eUgNAYEm0f9kww0Wjj-W13oOfDjpe27Sy_0bWpl5FK76cfnSA-TtmZXdzhvbtPFmovjoYYhKWD7sZMar5XRNpvGUcjjya1W54xwQEH6Vr0ULBOSgDP4eRPx087HitR8A/s320/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-2.jpg&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC3it0bJa_qNWIDiVpuzTEsU35IZT8CLirt76qR5hhVKGP7_XqTACJgeqk4ZNTEE_i4mmfuxgfoMDnw_xVYYudCtvMBIzEH4tPJM_MNrD3D6WAsor1QQStgSgbwCkJ9MrYJS6GgRGB1ZdEpT4WdaPuPnu05PYbNZbxad-VCG6fqfeYv7cho8JmbiWryRM9/s1638/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1638&quot; data-original-width=&quot;999&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC3it0bJa_qNWIDiVpuzTEsU35IZT8CLirt76qR5hhVKGP7_XqTACJgeqk4ZNTEE_i4mmfuxgfoMDnw_xVYYudCtvMBIzEH4tPJM_MNrD3D6WAsor1QQStgSgbwCkJ9MrYJS6GgRGB1ZdEpT4WdaPuPnu05PYbNZbxad-VCG6fqfeYv7cho8JmbiWryRM9/s320/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-3.jpg&quot; width=&quot;195&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF0dmwYGjUvP8uQAR0h6tVVxlZ4YtnOjJmZTU921www6JeKPFX94kivOJqKqZzB-HIdgY8cNaF04YFPllWRMDG6zNlRXrJzHMAWMQxdHCXXVsEzdNt39YeNeueQIHe2G_jdKKCyUohyK4gEaBbuLJDN_auMiJOJKhfykg34B8ukfZhQbPI5XP8mZ_S-Jjc/s2174/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;892&quot; data-original-width=&quot;2174&quot; height=&quot;131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF0dmwYGjUvP8uQAR0h6tVVxlZ4YtnOjJmZTU921www6JeKPFX94kivOJqKqZzB-HIdgY8cNaF04YFPllWRMDG6zNlRXrJzHMAWMQxdHCXXVsEzdNt39YeNeueQIHe2G_jdKKCyUohyK4gEaBbuLJDN_auMiJOJKhfykg34B8ukfZhQbPI5XP8mZ_S-Jjc/s320/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;折抵 Open 點數 204 元, 實付 258 元. 小七至興店取貨.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1228276979761078558/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1228276979761078558' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1228276979761078558'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1228276979761078558'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/1-claude.html' title='博客來買書 1 本 : Claude 萬用手冊'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf_ZWhCysNmPGP4rxLMH4C0J6Io1JQBAlojol94lbbKrth-QQm-RKvMuEEvL0W7KD000-WbIxwvFzMRRvjjdRw2wBeJgB29lJQAvs9rUUlaeZ7XPBJjqdIbWlzmDsReEhgTve2SE4-_ougX2akGQu92YZsEqwie4pzD30AAhRZ-pHLgftGClX4s30Sa7Tc/s72-c/%E5%8D%9A%E5%AE%A2%E4%BE%86%E8%B2%B7%E6%9B%B8%201%20%E6%9C%AC-Claude%20%E8%90%AC%E7%94%A8%E6%89%8B%E5%86%8A-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-3834340303068833317</id><published>2026-06-27T07:25:47.732+08:00</published><updated>2026-07-01T11:30:46.839+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Antigravity"/><title type='text'>Google Antigravity 學習筆記 : 安裝命令列程式代理 agy</title><content type='html'>&lt;div&gt;自從五月底交完 Hahow 的 SDD 課程作業後就一直沒有使用 Gemini CLI, 今天想要用它來重構我的市圖爬蟲時, 發現以 Google 帳戶登入後出現 &quot;Failed to sign in&quot; 訊息 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrLv8rUhYyaa212eNw1X4tT6v1pQeImpLOi4cqN-UaFVx5DdGYjlvkS6UN7joAgUgMWsThtS13qofKXg9fTbwWhlPvaOTMXNEmIJWNwtDekeS-za511hyphenhyphenVohCtRCZCwepyxBIQ-0cvJhgfx2D-N7hGzVGjShaBXpu0YbkkWjt6zojZvZAC2TxEVEIJTCaP/s2298/gemini_cli_stop_service_1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1189&quot; data-original-width=&quot;2298&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrLv8rUhYyaa212eNw1X4tT6v1pQeImpLOi4cqN-UaFVx5DdGYjlvkS6UN7joAgUgMWsThtS13qofKXg9fTbwWhlPvaOTMXNEmIJWNwtDekeS-za511hyphenhyphenVohCtRCZCwepyxBIQ-0cvJhgfx2D-N7hGzVGjShaBXpu0YbkkWjt6zojZvZAC2TxEVEIJTCaP/s320/gemini_cli_stop_service_1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;搜尋才知道原來 6/18 起 Google 在產品策略上做了一些改變, 正式停用了針對個人用戶, Google AI Pro, 以及 Google AI Ultra 方案的舊版 Gemini CLI 服務,&amp;nbsp;舊版的 Gemini CLI 目前只保留給購買 Google Cloud 企業方案, 或是使用付費企業級 API 密鑰的用戶使用. 一般個人訂閱戶 (免費/Pro/ Ultra) 現在全面由 Antigravity 家族接管, 個人端的開發工具全面整合遷移至全新的智慧 Agent 開發平台 Google Antigravity,&amp;nbsp;若想繼續在終端機 (Terminal) 中使用 Google 的 AI 服務, 須改為安裝 Antigravity CLI, 新版的工具改用 Go 語言重寫, 執行速度更快, 且支援多 Agent 非同步協同作業, 參考 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://ithelp.ithome.com.tw/m/articles/10398920&quot; target=&quot;_blank&quot;&gt;Gemini CLI 遷移：轉移至 Antigravity CLI (agy)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以下是我透過 Gemini, M365 Chat, 與 ChatGPT 等工具所做的知識整理.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;谷歌這次的產品線異動標誌著從 Chat 模式走向 Agentic 模式的工作流革命. 舊的 Gemini CLI 本質上屬於工具型的 API 呼叫包裝, 運作模式為單次提示與回應的對話; 新版的 Antigravity CLI 則升級為 &quot;終端型 AI 工程助手&quot;, 本質上是一個 Agent 系統, 支援如下功能 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;多 Agent 協作&lt;/li&gt;&lt;li&gt;工具呼叫 (Tool use)&lt;/li&gt;&lt;li&gt;MCP (Model Context Protocol)&lt;/li&gt;&lt;li&gt;持續任務執行&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;開發者面對此轉變, 除了須熟悉新工具的介面外, 更重要的是開發模式的轉換 : 從 &lt;span style=&quot;background-color: #fcff01;&quot;&gt;Prompt 工具&lt;/span&gt;的 Gemini CLI 轉換到&lt;span style=&quot;background-color: #fcff01;&quot;&gt;任務執行系統 (Agent Runtime)&lt;/span&gt; 的 agy. 這兩個開發工具的核心差異如下表 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;

&lt;table border=&quot;1&quot; bordercolor=&quot;#888&quot; cellspacing=&quot;0&quot; style=&quot;background-color: white; border-collapse: collapse; border-color: rgb(136, 136, 136); border-width: 1px; color: #534741; font-family: Arial, Verdana, sans-serif; font-size: 13.3333px; margin: 0px;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 100px;&quot;&gt;&amp;nbsp;面向&lt;/th&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 252.011px;&quot;&gt;&amp;nbsp;Gemini CLI&lt;/th&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 312.011px;&quot;&gt;&amp;nbsp;Antigravity CLI (agy)&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;狀態&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;❌ 已退役（個人不能用）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 官方主力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;核心定位&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;API wrapper&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;Agent 平台 CLI&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;互動模式&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;單次 Prompt → 回答&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;持續任務 + 多 Agent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;任務執行&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;❌ 基本無&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 可執行命令 / 改檔案&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;上下文&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;需手動提供&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 自動理解專案&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;Agent 能力&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;❌ 無&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 多 Agent 協作&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;工具呼叫&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;限制很大&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ Tool use（Shell / Git / Browser）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;MCP 支援&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;有但偏初級&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 深度整合&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;工作流&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;線性&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;非同步 / 多步驟&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;架構定位&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;CLI 工具&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;Agent Orchestration Layer&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;模型支援&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;Gemini only&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ 多模型（Gemini / Claude / GPT 等）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;安全性&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;主機直接操作&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;✅ Sandbox 執行&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其中最關鍵的差異在於互動模式, Gemini CLI 是一次問一次答, 不記得上下文 (要靠 GEMINI.md), 也不會自動做事情 (例如開啟瀏覽器進行測試), 同樣一個提示詞, agy 會用不同的 Agent 分別進行結構分析, 撰寫修改程式, 跑測試與修正錯誤等任務.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其次, Gemini CLI 的回應只能告訴你怎麼做而不會幫你真的做; 而 agy 則會直接做 (改檔案, 執行 shell, 跑測試, 查 Git history ...),&amp;nbsp;因為它是 Agent + tool system, 擁有 Gemini CLI 所沒有的工作流 (workflow) 能力.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另外 agy 還有一些值得一提的亮點, 例如它支援多模型 (Gemini CLI 只能使用 Gemini 模型), MCP (所有工具都走 MCP), 企業資安在意的沙箱執行等. 總之, Google 這次進行的是一個架構性的轉變, 舊世界的 Gemin CLI 是一個一問一答的單線對話結構 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;User → Prompt → LLM → Response&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;而 agy 則是多 agent, 多工具整合的任務循環結構&amp;nbsp; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;User → Agent Planner → Sub Agents → Tools (MCP) → Execution + Feedback Loop&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開發者思維必須從 &quot;我用 AI 幫我寫 code&quot; 轉變為 &quot;我用 AI 幫我做工程工作&quot;, 這是從 Prompt → Agent Workflow 的心態轉換. 總之, agy 是 task-driven (任務驅動), 不是&amp;nbsp;command-driven (指令驅動) 的工具.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt;1. 安裝 Antigravity CLI&lt;/span&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;在 Windows 下安裝 Antigravity CLI 比安裝 Gemini CLI 簡單, 無須先安裝 Node.js, 可開啟 PS 視窗輸入下列指令執行官方提供的自動化腳本即可 :&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;irm https://antigravity.google/cli/install.ps1 | iex&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\Users\tony1&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;irm https://antigravity.google/cli/install.ps1 | iex&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;I0627 01:45:51.731347 21576 installer.go:27] Running Antigravity CLI setup...&lt;/div&gt;&lt;div&gt;I0627 01:45:51.811905 21576 installer_windows.go:45] Configuring Windows user PATH registry environment...&lt;/div&gt;&lt;div&gt;I0627 01:45:51.812422 21576 installer_windows.go:117] Successfully added %LOCALAPPDATA%\agy\bin to User PATH registry variable.&lt;/div&gt;&lt;div&gt;I0627 01:45:51.812422 21576 installer_windows.go:148] Broadcasting environment update system-wide...&lt;/div&gt;&lt;div&gt;I0627 01:45:53.794218 21576 installer_windows.go:167] Environment update broadcast completed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Warning: C:\Users\tony1\AppData\Local\agy\bin is not present in your active Environment PATH.&lt;/div&gt;&lt;div&gt;Please restart your active terminal session, or add it manually if needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;✅ Antigravity CLI binary placed successfully at C:\Users\tony1\AppData\Local\agy\bin\agy.exe&lt;/div&gt;&lt;div&gt;Note: The binary is installed, but it is not in your active PATH. Please follow the instructions above to add it, then restart your terminal session.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;安裝完畢須關閉 PS 與所有 CMD 視窗,&amp;nbsp;重新開啟一個新的 PS 視窗 (這樣環境變數才會生效), 輸入 agy --version 檢視版本 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\Users\tony1&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;agy --version&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;1.0.12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現版本號表示 agy 已安裝成功.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt;2. 啟動 Antigravity CLI&lt;/span&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在 PS 視窗輸入 agy 會出現全新的終端機使用者介面 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyUxC5N21BUERUsouviDt_EKCO6iAz3sSvcdF3ehlXH7Lj5WBe7-5t5Isexor7Ir9JQflHLpnH9eTLWJn3nfN0_Z60xS3fp0Xdsn8hDDMdelhYNzgrfEcg0HKo42VBvHNryug12FIMJyu36WvqTDogC4i_yEs4ftK9wRJFSVkKqiCyDm0_QzoiuRjnkTlN/s1282/agy-login-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;598&quot; data-original-width=&quot;1282&quot; height=&quot;149&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyUxC5N21BUERUsouviDt_EKCO6iAz3sSvcdF3ehlXH7Lj5WBe7-5t5Isexor7Ir9JQflHLpnH9eTLWJn3nfN0_Z60xS3fp0Xdsn8hDDMdelhYNzgrfEcg0HKo42VBvHNryug12FIMJyu36WvqTDogC4i_yEs4ftK9wRJFSVkKqiCyDm0_QzoiuRjnkTlN/s320/agy-login-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;選擇預設的 Google OAuth, 這會開啟瀏覽器選擇要登入哪一個谷歌帳戶&amp;nbsp;:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Fda7NBLsaObHleLQ7haCCJCLDxcm3Q6oL0FL5_meH241u5FpAp-OePyNrcVvTs7pgMcQ45aIS1rbvmxKo11HggvKeKipdTbj7NRqCChEr3nhhRvewath15Tpjg2FNNV5iKjgfN_JD5IQA-8TBQnoaoGsRARlG6N2LlzlQ8_I3mmpze5knOxhkc92IQ4j/s1800/agy-login-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;850&quot; data-original-width=&quot;1800&quot; height=&quot;151&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Fda7NBLsaObHleLQ7haCCJCLDxcm3Q6oL0FL5_meH241u5FpAp-OePyNrcVvTs7pgMcQ45aIS1rbvmxKo11HggvKeKipdTbj7NRqCChEr3nhhRvewath15Tpjg2FNNV5iKjgfN_JD5IQA-8TBQnoaoGsRARlG6N2LlzlQ8_I3mmpze5knOxhkc92IQ4j/s320/agy-login-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 &quot;登入&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinFZIxD6SVMLQzvPvLC4lnF2kPG_W55N7FJiID7Y2cHrb9Gzm3YrVtJEeVBK9Ho6NM8P6okGVYB3v7RHtGae99L_SX5RSn_x3JGnoN0FIAvde4RV8RYmVsyxeNyMY9bBiowKqAmHKXGfNcxYzuIlDgALie9Bh0nM_AiSeSzEcYW7POZx9_ZBOz4MEtUkFd/s1780/agy-login-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;834&quot; data-original-width=&quot;1780&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinFZIxD6SVMLQzvPvLC4lnF2kPG_W55N7FJiID7Y2cHrb9Gzm3YrVtJEeVBK9Ho6NM8P6okGVYB3v7RHtGae99L_SX5RSn_x3JGnoN0FIAvde4RV8RYmVsyxeNyMY9bBiowKqAmHKXGfNcxYzuIlDgALie9Bh0nM_AiSeSzEcYW7POZx9_ZBOz4MEtUkFd/s320/agy-login-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現一組驗證碼, 此為一次性動態密碼 (類似信用卡付款之 OTP, 無須保存),&amp;nbsp; 壽命只有 5 到 10 分鐘而已, 請務必在有效期限內用它來完成驗證, 逾時自動失效必須重來. 按 Copy to Clpboard 複製到剪貼簿 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJyt08zkhv5WQAUd8laxOEBkgAGSb3Sd9brqFmubeDRMdGHyp-7_wdTRNFq3lBxd0v1NWFgWC7DTSKo4slWsFKKU5G9xXdMk_zTB-a-ELsQ2EwednvKOMrOXC5jG5prOOL31GrchG0p7Ze5PjwM7xdciMGJOm_FqEy8JC0gN0BNCiJckgQfNluOsWHmJW/s1187/agy-login-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;857&quot; data-original-width=&quot;1187&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJyt08zkhv5WQAUd8laxOEBkgAGSb3Sd9brqFmubeDRMdGHyp-7_wdTRNFq3lBxd0v1NWFgWC7DTSKo4slWsFKKU5G9xXdMk_zTB-a-ELsQ2EwednvKOMrOXC5jG5prOOL31GrchG0p7Ze5PjwM7xdciMGJOm_FqEy8JC0gN0BNCiJckgQfNluOsWHmJW/s320/agy-login-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;貼到 PS 視窗按 Enter 進行帳戶驗證 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpVxYspcwJI7nENJ6aaFwRJC2SLqVc1SFP-R98Kk0X92TFsey2yIFpS43w3QQlgp6FLUmZAWxcsRj5RYltLAz5lcB3M-qy9nCUnMiN7urYHvAiCiJzLNJ4Cf1z3X0cmzB4zbGjBRmDf9tUtmF54BIkNHnP2MDcbIGKgMuIOjMYgtHScxQqH_-7wrXdZEN/s1677/agy-login-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;813&quot; data-original-width=&quot;1677&quot; height=&quot;155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpVxYspcwJI7nENJ6aaFwRJC2SLqVc1SFP-R98Kk0X92TFsey2yIFpS43w3QQlgp6FLUmZAWxcsRj5RYltLAz5lcB3M-qy9nCUnMiN7urYHvAiCiJzLNJ4Cf1z3X0cmzB4zbGjBRmDf9tUtmF54BIkNHnP2MDcbIGKgMuIOjMYgtHScxQqH_-7wrXdZEN/s320/agy-login-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;通過驗證後選擇主題背景 (Theme), 用預設的 Terminal 即可按 Enter :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuYjHBKnpKsZugC8ZBTKR5QFX2vGGOFnZs7GLU8h0pwSj25Mzaxz2qpkwPd7DdBhF7qbxOUNNHuSm0Wl7fptp4xykrIIpL6DFU52GxDsVf0EozeCEbHza0LgKO2Sx0XGWKqUEsfumnRDumQrep3IKdH5CGM-vmCQjyDSU9pwSZUbGAnfQWWn1Yg8AtcWD-/s1867/agy-login-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1096&quot; data-original-width=&quot;1867&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuYjHBKnpKsZugC8ZBTKR5QFX2vGGOFnZs7GLU8h0pwSj25Mzaxz2qpkwPd7DdBhF7qbxOUNNHuSm0Wl7fptp4xykrIIpL6DFU52GxDsVf0EozeCEbHza0LgKO2Sx0XGWKqUEsfumnRDumQrep3IKdH5CGM-vmCQjyDSU9pwSZUbGAnfQWWn1Yg8AtcWD-/s320/agy-login-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現服務條款與詢問是否願意將與 agy 互動資料 (Interactions data) 提供給 Google, 用來幫助改進此 Coding 代理工具 (例如優化模型與功能), 基於隱私保護考量, 建議取消勾選, 用上下方向鍵移動光標到 &amp;gt; [x] Yes, I agree... 這行, 按 SPACE 或 Enter 鍵改成 [ ] :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDo9FEiD4NJOFBdtC3QzJfFGJbFzQqE57PWvsh52YcINFgYH75p88mFEZZcDrLNhfQTMf5hg5_iaOVkBT6sOGgdaNcRdvAjWAXDqGJbhJ26KEBJwJZvW205YMLV4NIhD1lElIPDXB8PoIPGljXleM0qubYp_jKZJc_-0ukG51akazqRWsn-YuyYxUwE3wf/s2200/agy-login-7.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1105&quot; data-original-width=&quot;2200&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDo9FEiD4NJOFBdtC3QzJfFGJbFzQqE57PWvsh52YcINFgYH75p88mFEZZcDrLNhfQTMf5hg5_iaOVkBT6sOGgdaNcRdvAjWAXDqGJbhJ26KEBJwJZvW205YMLV4NIhD1lElIPDXB8PoIPGljXleM0qubYp_jKZJc_-0ukG51akazqRWsn-YuyYxUwE3wf/s320/agy-login-7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接著將光標移動到下方的 [Done] 上, 按 Enter 即可完成設定並進入下一步 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsI-mUKa0LISfnOKrxpf07aLnYiZj-ooiZGv0kJbhiqmLcSKpNx8AJVRVddRHeUmG3N9-SrFRX1N1q80DZxtbAUyVnOUZA5xexiEpL1Lu1e2ny8k_EbSy6qVTaSPu0lFjxum3O1wIZlqbcvwU2cA9JqYsHogFovSlFjOYxS8T2xj03616YiNhKfCGviuct/s2176/agy-login-8.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1117&quot; data-original-width=&quot;2176&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsI-mUKa0LISfnOKrxpf07aLnYiZj-ooiZGv0kJbhiqmLcSKpNx8AJVRVddRHeUmG3N9-SrFRX1N1q80DZxtbAUyVnOUZA5xexiEpL1Lu1e2ny8k_EbSy6qVTaSPu0lFjxum3O1wIZlqbcvwU2cA9JqYsHogFovSlFjOYxS8T2xj03616YiNhKfCGviuct/s320/agy-login-8.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現詢問是否授權 agy 對此資料夾進行讀寫與執行, 按 Enter 同意 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhMqNHZ9V-gWg6MsAq8QUnznGPMFASmxr6m9Cp-XxKR98Z7gQh5RvFkyAJ_6Ijz61Lvn6zMTrfojK1uVeLBEbPeno4c21F6gKPtlMAIGSBG6eQx8mfqXJs7Fa1fZaIQNHWhocBoeHbaHFo0XuukDN9sqO4YPiXiUWX9BcqcsUQGQSD5Zz91ItwvEhja-97/s1446/agy-login-9.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;502&quot; data-original-width=&quot;1446&quot; height=&quot;111&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhMqNHZ9V-gWg6MsAq8QUnznGPMFASmxr6m9Cp-XxKR98Z7gQh5RvFkyAJ_6Ijz61Lvn6zMTrfojK1uVeLBEbPeno4c21F6gKPtlMAIGSBG6eQx8mfqXJs7Fa1fZaIQNHWhocBoeHbaHFo0XuukDN9sqO4YPiXiUWX9BcqcsUQGQSD5Zz91ItwvEhja-97/s320/agy-login-9.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;進入 agy 提示號 &amp;gt; 表示完成全部設定, 可以進行對話了 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9goUh-IXG70KDbruy7-yhSSPc4feZalQKTCZvax_wBgQZAnzdOba1f_8vjBh1nwTMv8ObupjvAEI3QJRDr0mtv_F1pEsCXolo9G4kBbrkETWb2iki375Llf4nux5sisUvmoQaPntzlIdWb1JIy4SwB515bXEeCnvuCKsLHt9gWfglS2ZKPcjxwrOVzVu-/s1661/agy-login-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;871&quot; data-original-width=&quot;1661&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9goUh-IXG70KDbruy7-yhSSPc4feZalQKTCZvax_wBgQZAnzdOba1f_8vjBh1nwTMv8ObupjvAEI3QJRDr0mtv_F1pEsCXolo9G4kBbrkETWb2iki375Llf4nux5sisUvmoQaPntzlIdWb1JIy4SwB515bXEeCnvuCKsLHt9gWfglS2ZKPcjxwrOVzVu-/s320/agy-login-10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上設定是在使用者家目錄下進行, 但通常開發專案通常會建立一個專案資料夾, 然後切換到該專案資料夾下後再啟動 agy, 如果是 Python 專案, 建議用 uv 工具先建立好專案結構後再啟動 agy. 關於 uv 工具用法參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/01/python-python-uv.html&quot; target=&quot;_blank&quot;&gt;Python 學習筆記 : 整合型 Python 版本管理工具 uv&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt;3. 常用指令&lt;/span&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000; font-weight: 700;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Antigravity CLI 常用指令如下表 (付 Gemini CLI 對照) :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;

&lt;table border=&quot;1&quot; bordercolor=&quot;#888&quot; cellspacing=&quot;0&quot; style=&quot;background-color: white; border-collapse: collapse; border-color: rgb(136, 136, 136); border-width: 1px; color: #534741; font-family: Arial, Verdana, sans-serif; font-size: 13.3333px; margin: 0px;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 160px;&quot;&gt;&amp;nbsp;Gemini CLI&lt;/th&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 200px;&quot;&gt;&amp;nbsp;Antigravity CLI (agy)&lt;/th&gt;
      &lt;th style=&quot;background-color: #f2f2f2; font-weight: bold; padding: 3px; width: 370px;&quot;&gt;&amp;nbsp;功能說明&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;agy&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;啟動指令。新版會直接進入互動式圖形介面 (TUI)。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini &quot;prompt&quot;&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;agy &quot;task&quot;&amp;nbsp;或 agy -p &quot;task&quot;&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;單次任務執行 (不進入 TUI，直接在當前終端機交付任務並輸出結果。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini --login&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;agy auth login&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;帳號登入與驗證。引導至瀏覽器綁定你的 Google AI Pro 帳號。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;（無對應）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;/init 或 agy init&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;初始化當前專案，建立代理人設定檔與必要的本地環境。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;（無對應）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;/grill-me&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;&lt;b&gt;【核心新功能】&lt;/b&gt; 重大重構前讓 AI 質詢你的邏輯，確保雙方對齊。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;（無對應）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;/agents&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;開啟專案面板，監控背景正在非同步協同作業的所有子代理人狀態。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini --config&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;/config&lt;/span&gt;&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;調整設定。可在介面中直接開關 Shell 執行、自動核准等權限。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini --model [name]&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;/model&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;即時查詢或切換當前專案使用的 AI 模型（如 Flash 或 Pro）。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;（無對應）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;/skills&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;列出目前專案載入的所有自訂 Skills（技能藍圖）與自訂指令。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;gemini --version&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;agy --version&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;檢查當前本地端 Antigravity CLI 的版本號。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;（無對應）&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;agy plugin import gemini&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;&lt;b&gt;【老用戶專屬】&lt;/b&gt; 一鍵將舊版 Gemini CLI 的擴充套件遷移至新版。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;~/.gemini/plugins/&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;~/.config/antigravity/skills/&lt;/td&gt;
      &lt;td style=&quot;padding: 3px;&quot;&gt;&amp;nbsp;全域 Skills 與自訂擴充功能的存放路徑。&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在提示符號 &amp;gt; 下輸入斜線 / 就會顯示所有斜線指令. 例如跳出 agy (TUI) 可用 /exit 或 /quit 指令 (或按 Ctrl + C); 用&amp;nbsp;/model 指令可以切換底層模型等.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/3834340303068833317/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/3834340303068833317' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3834340303068833317'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3834340303068833317'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/google-antigravity-agy.html' title='Google Antigravity 學習筆記 : 安裝命令列程式代理 agy'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrLv8rUhYyaa212eNw1X4tT6v1pQeImpLOi4cqN-UaFVx5DdGYjlvkS6UN7joAgUgMWsThtS13qofKXg9fTbwWhlPvaOTMXNEmIJWNwtDekeS-za511hyphenhyphenVohCtRCZCwepyxBIQ-0cvJhgfx2D-N7hGzVGjShaBXpu0YbkkWjt6zojZvZAC2TxEVEIJTCaP/s72-c/gemini_cli_stop_service_1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-7017104246240331766</id><published>2026-06-26T10:27:03.509+08:00</published><updated>2026-06-26T10:29:19.683+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="電腦"/><title type='text'>MSI 電競桌機維修 (七)</title><content type='html'>&lt;div&gt;經過近一個月的折騰, MSI 電競桌機的復原工作終於來到尾聲, 今天要來進行收尾作業, 主要是完成下列這三項 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;取消休眠&lt;/li&gt;&lt;li&gt;安裝 UltraViewer 與 AnyDesk&lt;/li&gt;&lt;li&gt;製作備份映像&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;有了映像檔後, 萬一未來系統碟 Win11 毀損或又要換新, 就可以輕鬆地從放在 D 碟的映像檔快速還原, 就不用像過去三周那樣重新安裝環境, Ollama 的進度也因此暫停, 希望下周能恢復測試.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 取消休眠 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最近在安裝執行環境時發現, 臨時走開約十分鐘回來電腦風扇燈不亮, 以為又當機, Power 鍵上面的小藍燈則一閃一閃, 按一下風扇燈就恢復, 電腦也甦醒到原來畫面, 應該是一段時間就進入休眠了. 現在整個本地模型已重建回來, 接下來會安裝 UltraViewer/AnyDesk, 方便回鄉下時可遠端連線進來, 如果進入休眠連線會失敗, 所以要設定為永不休眠 (但五分鐘沒使用可將螢幕關掉).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟 &quot;設定/系統/電源&quot;, 將 &quot;螢幕, 睡眠與休眠逾時/一般電源&quot; 項目下的睡眠與休眠狀態設為 &quot;永不&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqVMsL1PTaSSGPLe2Dd6hW4Y9Y21nkKSPevh4gx3PQtDGXaRAw7OaBK8WemPO1RKdBC0SkeUvYcnyRt3jOtMbvHDan4lO4tzbBAODma5ZWFZJECPuc7NxpPfNeJ4CKYjJMmqnx09znn1ouWWHMY91uD0OMf8U3mzU7ORYE5z4UPn02QBiZZQl4yKRvKMJu/s1185/MSI-desktop-display-power-setup.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;924&quot; data-original-width=&quot;1185&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqVMsL1PTaSSGPLe2Dd6hW4Y9Y21nkKSPevh4gx3PQtDGXaRAw7OaBK8WemPO1RKdBC0SkeUvYcnyRt3jOtMbvHDan4lO4tzbBAODma5ZWFZJECPuc7NxpPfNeJ4CKYjJMmqnx09znn1ouWWHMY91uD0OMf8U3mzU7ORYE5z4UPn02QBiZZQl4yKRvKMJu/s320/MSI-desktop-display-power-setup.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;完成後關閉設定即可.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 安裝 UltraViewer :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;UltraViewer 下載網址 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://www.ultraviewer.net/en/download.html&quot; target=&quot;_blank&quot;&gt;https://www.ultraviewer.net/en/download.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHwRxiggC_TUUgUxMTW4wy_sluKORvEbZ1xGY9M4cBg5dTz07xHP8fxRmowfq4pHBuLP4nK7psUopWF72ZYmXFpkoEs7Kj4iO2M-xJG2u9nhikf_6MaXc2581WfoNlZaG0Aixoi2NBiwHzeOe2MUkZbL-MmQoGbEIFh5F6LCCLwmReDE2oOrsBTu9KRu6W/s958/MSI-desktop-ultraviewer-download.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;694&quot; data-original-width=&quot;958&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHwRxiggC_TUUgUxMTW4wy_sluKORvEbZ1xGY9M4cBg5dTz07xHP8fxRmowfq4pHBuLP4nK7psUopWF72ZYmXFpkoEs7Kj4iO2M-xJG2u9nhikf_6MaXc2581WfoNlZaG0Aixoi2NBiwHzeOe2MUkZbL-MmQoGbEIFh5F6LCCLwmReDE2oOrsBTu9KRu6W/s320/MSI-desktop-ultraviewer-download.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;用預設設定安裝即可, 完成後啟動 UltraViewer, 抄下 9 碼連線 ID, 勾選 &quot;Run Ultraviewer with Windows&quot;, 按 &quot;Custom Password&quot; 右邊的按鈕設定無人值守密碼 (因為在上面已設定電腦不休眠, 所以此處 Prevent Windows from going to sleep 有無勾選都可以) :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifi1tDPv-EWVN0yh7HtJhvACCt0zaac_DWV1aRJuK3tL9hyphenhyphenMBcPn5q14XZD3vqWltrckdZBDcC6VYQp9HVtoCmJuD_f6feSM7NlHwAH6_ZwtmmBqroi_JtcGIco3kfNtGfQqLt7c1XUwWSh_8iZeqQcwpqoD0-EyNPWiygQdr-EL52cwvHCdz6hIfRdNDQ/s691/MSI-desktop-ultraviewer-setup-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;481&quot; data-original-width=&quot;691&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifi1tDPv-EWVN0yh7HtJhvACCt0zaac_DWV1aRJuK3tL9hyphenhyphenMBcPn5q14XZD3vqWltrckdZBDcC6VYQp9HVtoCmJuD_f6feSM7NlHwAH6_ZwtmmBqroi_JtcGIco3kfNtGfQqLt7c1XUwWSh_8iZeqQcwpqoD0-EyNPWiygQdr-EL52cwvHCdz6hIfRdNDQ/s320/MSI-desktop-ultraviewer-setup-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0D6EU2CdTQBSE8znW40vVPyfdXY4AhSgUWlfn26Z1kHizQidI9B3dtcqGnoSIxUvPArnc3LYgisV0mlkLHiyJYqdFvUiFY0L2AAxnbIXR7rYk2DgtyC0LVeGpGMTiDWMUQyIq2ssdimdUYgm_gJI0_lUaFla2w1hWJvOwVEPqi0Mx0HbvErIjy4kpCVlx/s537/MSI-desktop-ultraviewer-setup-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;319&quot; data-original-width=&quot;537&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0D6EU2CdTQBSE8znW40vVPyfdXY4AhSgUWlfn26Z1kHizQidI9B3dtcqGnoSIxUvPArnc3LYgisV0mlkLHiyJYqdFvUiFY0L2AAxnbIXR7rYk2DgtyC0LVeGpGMTiDWMUQyIq2ssdimdUYgm_gJI0_lUaFla2w1hWJvOwVEPqi0Mx0HbvErIjy4kpCVlx/s320/MSI-desktop-ultraviewer-setup-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNlM2CHCu6IY1v4TF_oLJoZtyW6l3kjEM9ChF3ZfvRtPijihySlQ0VG2Cjkizf2jWV4K25LxCmN4OcN0la5YSll2sER9g23yjlVzKTClU22kc8u1yzXEPJ743eyQIjQi1k_JB2fTXn7WmUc0zsPc3O5XupV85Kpa8cur-A7_tNhi0m3S5SCpP7bcTgB4a2/s687/MSI-desktop-ultraviewer-setup-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;483&quot; data-original-width=&quot;687&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNlM2CHCu6IY1v4TF_oLJoZtyW6l3kjEM9ChF3ZfvRtPijihySlQ0VG2Cjkizf2jWV4K25LxCmN4OcN0la5YSll2sER9g23yjlVzKTClU22kc8u1yzXEPJ743eyQIjQi1k_JB2fTXn7WmUc0zsPc3O5XupV85Kpa8cur-A7_tNhi0m3S5SCpP7bcTgB4a2/s320/MSI-desktop-ultraviewer-setup-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;從我 LG 筆電測試遠端連線 OK.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 製作系統備份映像 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;主機復原至此就可以製作映像備份至 D 碟了, 檢查目前系統碟大小約為 80GB :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw8YigV1BfTaPSfME3lDjw1pNfc1YPcJA9EsrsH_ugEPCXgRaZ-WIBQrqsRVpzFg5eyop_LGfTYzQsd_3SZkboPGZqWFtCmn9kTtUzY69JnnkjsbXsvMJl9y2U_jz_NVGNqmT-ZkO5gRRCArx466oMsHAG0OMTZm1R7GH01nmWwUcaxJBOWDojne6iTxtq/s703/MSI-desktop-backup-image-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;229&quot; data-original-width=&quot;703&quot; height=&quot;104&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw8YigV1BfTaPSfME3lDjw1pNfc1YPcJA9EsrsH_ugEPCXgRaZ-WIBQrqsRVpzFg5eyop_LGfTYzQsd_3SZkboPGZqWFtCmn9kTtUzY69JnnkjsbXsvMJl9y2U_jz_NVGNqmT-ZkO5gRRCArx466oMsHAG0OMTZm1R7GH01nmWwUcaxJBOWDojne6iTxtq/s320/MSI-desktop-backup-image-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;按 Win + R 輸入 control 按 Enter 開啟控制台 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZXN86bxk-L50h6v0lUNwLJGll5HEI0i0KCuOxb6_Q1OAyrmMaDi_nMNl6vdcSsAwZjk5lNm9ei7x9_AVXflp5ZP_DS6XjHNq7rnyNxz3tf6P5X7mKdNxDc4HHKd1FhyphenhyphenYgncIEO3rExwVxE5kPEF-3et7nXOWQUdr-EkVBO-zfItOeMSjQxtmjgLgXEKje/s658/MSI-desktop-backup-image-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;378&quot; data-original-width=&quot;658&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZXN86bxk-L50h6v0lUNwLJGll5HEI0i0KCuOxb6_Q1OAyrmMaDi_nMNl6vdcSsAwZjk5lNm9ei7x9_AVXflp5ZP_DS6XjHNq7rnyNxz3tf6P5X7mKdNxDc4HHKd1FhyphenhyphenYgncIEO3rExwVxE5kPEF-3et7nXOWQUdr-EkVBO-zfItOeMSjQxtmjgLgXEKje/s320/MSI-desktop-backup-image-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點選 &quot;系統及安全性&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wZq18nkZkI-7JL9IpboqNTY8TfHENGhufzvGu8pklJpGDVxdff6zNy3xdDvOuVwafUiPcSzqW9zhfk-bPandMhP9yM1TQY5Oj1fijkEVtdSepV5kTNkJviJqQSkZSVYBVyFQq-VvLoFS6kc0dpwdsqXpV_-9_rqZIkkstMyZNT5LD9_PCJI_gGLQElAe/s905/MSI-desktop-backup-image-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;428&quot; data-original-width=&quot;905&quot; height=&quot;151&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wZq18nkZkI-7JL9IpboqNTY8TfHENGhufzvGu8pklJpGDVxdff6zNy3xdDvOuVwafUiPcSzqW9zhfk-bPandMhP9yM1TQY5Oj1fijkEVtdSepV5kTNkJviJqQSkZSVYBVyFQq-VvLoFS6kc0dpwdsqXpV_-9_rqZIkkstMyZNT5LD9_PCJI_gGLQElAe/s320/MSI-desktop-backup-image-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點選 &quot;備份及還原 (Windows 7)&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhthlnD8GqDP9YBPf9mz5QucCHIswnZ8c645YNDUL8baVUuAIXcCCwj4xZl929YW4B5V2MwsWjlWMe3hBVt1Fo8VtRSeA96PnFN4f-tXBfWxKlpbkJMXsIhyG-x2v5c9G2cWN-J96hv5e02BRZWRWhAxwNtBRNoAkF0LqrUEo0DIhKfS2Dtnl5pWstpqhgV/s1025/MSI-desktop-backup-image-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;544&quot; data-original-width=&quot;1025&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhthlnD8GqDP9YBPf9mz5QucCHIswnZ8c645YNDUL8baVUuAIXcCCwj4xZl929YW4B5V2MwsWjlWMe3hBVt1Fo8VtRSeA96PnFN4f-tXBfWxKlpbkJMXsIhyG-x2v5c9G2cWN-J96hv5e02BRZWRWhAxwNtBRNoAkF0LqrUEo0DIhKfS2Dtnl5pWstpqhgV/s320/MSI-desktop-backup-image-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;點選 &quot;建立系統映像&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheP6Ad3f2nYW8m6yRxpTmFk9rRiko8SsSeoeZK7CBB502jiVFYqUO4GzGI8Tip1Hpydoj7IWzxrEvxa-jJG7mB-wQH08LViTACvv9CBKZWgcPOCO1OhcZOxe4YzXVjWbG4KLK3c7zPT73MLDmAC-6TPLEU6tiAGewnOwBDP1f0v_PC6KRzZiSGL_VytMrn/s683/MSI-desktop-backup-image-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;308&quot; data-original-width=&quot;683&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheP6Ad3f2nYW8m6yRxpTmFk9rRiko8SsSeoeZK7CBB502jiVFYqUO4GzGI8Tip1Hpydoj7IWzxrEvxa-jJG7mB-wQH08LViTACvv9CBKZWgcPOCO1OhcZOxe4YzXVjWbG4KLK3c7zPT73MLDmAC-6TPLEU6tiAGewnOwBDP1f0v_PC6KRzZiSGL_VytMrn/s320/MSI-desktop-backup-image-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;選擇備份在資料碟 D, 按下一步 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnaGsOpiwfLfOJ4mXqC04pCaIeRDB1hqW6jAOu97f3H5QEBVS7m-MWoeqU3fAz1XWFXPejHrn0eE0NrCiovK4BDxCenZaawcOIQSSJnCK6lQe-ttPIwtdeRlygcci69raOJbeXvnuSOULTfKsbeGkbRScXsprXLCPY5P6_VF-pF4hX7RWp9GfA8ymP9OMJ/s620/MSI-desktop-backup-image-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;575&quot; data-original-width=&quot;620&quot; height=&quot;297&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnaGsOpiwfLfOJ4mXqC04pCaIeRDB1hqW6jAOu97f3H5QEBVS7m-MWoeqU3fAz1XWFXPejHrn0eE0NrCiovK4BDxCenZaawcOIQSSJnCK6lQe-ttPIwtdeRlygcci69raOJbeXvnuSOULTfKsbeGkbRScXsprXLCPY5P6_VF-pF4hX7RWp9GfA8ymP9OMJ/s320/MSI-desktop-backup-image-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 &quot;開始備份&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVFe19TXepkocrl16orJ2k7OEWMZJqyIn-hTboxnb1Qhh7VNTxRCkzhipjjk91XWCibvYUvpPUjxE-WV9KY0RYnOroE3as8Z4bS01jiQbZ4BNYDeWIXLOxEyKdcAl2VL_DWxe88shg6P6vCLT-bcVF3NZZtygEX0upq7uPqPJs57PldqA7yB3we5PM7chA/s623/MSI-desktop-backup-image-7.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;623&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVFe19TXepkocrl16orJ2k7OEWMZJqyIn-hTboxnb1Qhh7VNTxRCkzhipjjk91XWCibvYUvpPUjxE-WV9KY0RYnOroE3as8Z4bS01jiQbZ4BNYDeWIXLOxEyKdcAl2VL_DWxe88shg6P6vCLT-bcVF3NZZtygEX0upq7uPqPJs57PldqA7yB3we5PM7chA/s320/MSI-desktop-backup-image-7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;備份中 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigqQ16hD_YNq-rt9OEwmLb6nYZOVTwdQCy6smykPBUIevoaBDSJ1TD-RDYTkr4rXCuf_fYEaQZ4deymmiHnCJV4rR46d4jDFLDlKv51sADP6VnrsBAH3YbZDkAQ7dW0dO3T6I5c77B5NfMxXYko5yqsbKUYEhyphenhyphen0kRzUN5pXACgTr61RlaLaclYoc5iJSJk/s612/MSI-desktop-backup-image-8.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;571&quot; data-original-width=&quot;612&quot; height=&quot;299&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigqQ16hD_YNq-rt9OEwmLb6nYZOVTwdQCy6smykPBUIevoaBDSJ1TD-RDYTkr4rXCuf_fYEaQZ4deymmiHnCJV4rR46d4jDFLDlKv51sADP6VnrsBAH3YbZDkAQ7dW0dO3T6I5c77B5NfMxXYko5yqsbKUYEhyphenhyphen0kRzUN5pXACgTr61RlaLaclYoc5iJSJk/s320/MSI-desktop-backup-image-8.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;備份完成, 因無光碟機按 &quot;否&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwWsWDWkBbSmDwB0KQicjdXkOffKeqMQIyhfGx4X8B3SoCpysbjeMPhtiQ_PBNeIIqsWVD2cHZzmcr8uOAmZ1QNFNIfsPMgV0YN58fNv2grpLfw112iAA9gYy5QoyQBtlmrACNShnGxUgOGvPuyzegZmEqQojQU6no2qdilqGTqoIFXdOsg6N3YmCa9mg_/s539/MSI-desktop-backup-image-9.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;282&quot; data-original-width=&quot;539&quot; height=&quot;167&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwWsWDWkBbSmDwB0KQicjdXkOffKeqMQIyhfGx4X8B3SoCpysbjeMPhtiQ_PBNeIIqsWVD2cHZzmcr8uOAmZ1QNFNIfsPMgV0YN58fNv2grpLfw112iAA9gYy5QoyQBtlmrACNShnGxUgOGvPuyzegZmEqQojQU6no2qdilqGTqoIFXdOsg6N3YmCa9mg_/s320/MSI-desktop-backup-image-9.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRxoVojiLZKufUpb4Dm3BSx_UOd4ridy3oU1yBAzCE-GkVYFw17pmqrICBR-my2AXrkZUdPJ-B6jAHoiWRtQ8Ysmg2uv7XASzoBKDBc_d_RtuI4cJvj86fv1Tl0vUbRGbZDXN0ii-KEsKDz2ZBhk6KHZNiIr2t1i7dmjyETP4nSQClPbmXW5WHm97OWvAv/s539/MSI-desktop-backup-image-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;286&quot; data-original-width=&quot;539&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRxoVojiLZKufUpb4Dm3BSx_UOd4ridy3oU1yBAzCE-GkVYFw17pmqrICBR-my2AXrkZUdPJ-B6jAHoiWRtQ8Ysmg2uv7XASzoBKDBc_d_RtuI4cJvj86fv1Tl0vUbRGbZDXN0ii-KEsKDz2ZBhk6KHZNiIr2t1i7dmjyETP4nSQClPbmXW5WHm97OWvAv/s320/MSI-desktop-backup-image-10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢視 D 碟多一個 WindowsImageBackup 資料夾 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFzrZ9fdeuOwNGGv4aXW26VxHVh5xdUhRUUjfX-lml1alEUJWgSvcbXEjwG64i7Od0fA3fDjdCWDrUj72UCjHe9HzPJKbyv5NM0UuqEQMULLzGFCobNgM0adLcQc60bOp3adL_GrAGG7dHbdCWgEKRNRpbUl_5UT9UYMle__jm0P0HSgix8YJOtLnLybLV/s688/MSI-desktop-backup-image-11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;326&quot; data-original-width=&quot;688&quot; height=&quot;152&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFzrZ9fdeuOwNGGv4aXW26VxHVh5xdUhRUUjfX-lml1alEUJWgSvcbXEjwG64i7Od0fA3fDjdCWDrUj72UCjHe9HzPJKbyv5NM0UuqEQMULLzGFCobNgM0adLcQc60bOp3adL_GrAGG7dHbdCWgEKRNRpbUl_5UT9UYMle__jm0P0HSgix8YJOtLnLybLV/s320/MSI-desktop-backup-image-11.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;備份做起來後就比較安心了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/7017104246240331766/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/7017104246240331766' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7017104246240331766'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7017104246240331766'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/msi_01488369447.html' title='MSI 電競桌機維修 (七)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqVMsL1PTaSSGPLe2Dd6hW4Y9Y21nkKSPevh4gx3PQtDGXaRAw7OaBK8WemPO1RKdBC0SkeUvYcnyRt3jOtMbvHDan4lO4tzbBAODma5ZWFZJECPuc7NxpPfNeJ4CKYjJMmqnx09znn1ouWWHMY91uD0OMf8U3mzU7ORYE5z4UPn02QBiZZQl4yKRvKMJu/s72-c/MSI-desktop-display-power-setup.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-8544741503907389417</id><published>2026-06-26T00:44:51.034+08:00</published><updated>2026-06-26T00:44:51.034+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ollama"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦"/><title type='text'>MSI 電競桌機維修 (六)</title><content type='html'>&lt;div&gt;我在上周端午節前已將 Python 執行環境與 Claude Code, Gemini CLI 安裝好, 今天要繼續主機復原作業, 把最重要的 Ollama 重新安裝回來後設定模型位置, 並安裝網頁擴充套件 Page Assist 方便用瀏覽器測試多模態模型.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 安裝 Ollama :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;安裝步驟我就不重貼了, 參考之前的文章 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/05/msi-ollama.html&quot; target=&quot;_blank&quot;&gt;MSI 桌機安裝 Ollama&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關鍵是之前已將所下載的模型都從 C 碟移到 D 碟的 OllamaModels 資料夾下, 所以安裝完 Ollama 後須重新設定, 這樣 Ollama 才知道模型放在哪裡. 設定方法是按 Ollama 對話介面左上角的 Settings 進入設定頁面, 按 &quot;Model location&quot; 項目右方的 &quot;Browse&quot; 鈕, 點選 D:\OllamaModels 資料夾即可. 原始設定如下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj094WHcmkMpXf55XEuF_ozQvclxmPz36j7Pd1_Cb3kBVMcMN-BvVa5dBrVY44EeZYfsvmkBM978wN-xNI_U8UBfQcdvLD1vzRxT9rJhD47-PaHaiSTboTlmVJ2MAQEMzS3tzUJN1ll2-s0Kf2pQLLZiYbY1rVe2jztflUF2akeuFz_elAb5Na0tUI3WDF0/s856/ollama-model-location-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;856&quot; data-original-width=&quot;787&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj094WHcmkMpXf55XEuF_ozQvclxmPz36j7Pd1_Cb3kBVMcMN-BvVa5dBrVY44EeZYfsvmkBM978wN-xNI_U8UBfQcdvLD1vzRxT9rJhD47-PaHaiSTboTlmVJ2MAQEMzS3tzUJN1ll2-s0Kf2pQLLZiYbY1rVe2jztflUF2akeuFz_elAb5Na0tUI3WDF0/s320/ollama-model-location-1.jpg&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;改為 D:\OllamaModels :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9uzX9FlbNp71IBUoO50lyhFW6NZ5O3uJWBDitQMpDpMzAe90Z7eqaj5GFwaqlwp36OKPTg7exhRQiEslEFUE6M6zLWpcA0BgGv0NG22rgi2H1cR4hNyh28XE0WDV_9EMn2ULQk_-IQgcyc5IhpCq-iPRR4T1OGGab2JZFnpX8ERKLh-9mDls3ttQh9SS/s861/ollama-model-location-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;861&quot; data-original-width=&quot;788&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9uzX9FlbNp71IBUoO50lyhFW6NZ5O3uJWBDitQMpDpMzAe90Z7eqaj5GFwaqlwp36OKPTg7exhRQiEslEFUE6M6zLWpcA0BgGv0NG22rgi2H1cR4hNyh28XE0WDV_9EMn2ULQk_-IQgcyc5IhpCq-iPRR4T1OGGab2JZFnpX8ERKLh-9mDls3ttQh9SS/s320/ollama-model-location-2.jpg&quot; width=&quot;293&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;然後開啟一個 PS 視窗, 執行下列指令讓系統模型永久鎖定 D 槽下的&amp;nbsp; OllamaModels 資料夾 (不用去點控制面板) :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;[Environment]::SetEnvironmentVariable(&quot;OLLAMA_MODELS&quot;, &quot;D:\OllamaModels&quot;, &quot;User&quot;)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ollama 原始安裝位置 C:\users\USER\.ollama\models 下面的 blobs 與 manifests 不用管它 (因為安裝 Ollama 後並未下載安裝任何模型所以都是空目錄), 因為 C 碟毀損之前第一次安裝 Ollama 時就已複製過去 D 碟, 且後來還下載 Phi 4 等模型, 所以 D:\OllamaModels 下的這兩個資料夾已新增許多模型資料.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;環境變數寫入後需要重新載入 Ollama, 所以先關閉原生 Ollama 介面, 然後在右下角系統工作列找到 Ollama 的小章魚圖示, 按滑鼠右鍵選 Quit Ollama.&amp;nbsp;重新在開始功能表或桌面點擊 Ollama 圖示把它打開.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;開啟一個新的 PowerShell 視窗, 用 ollama list 檢視目前已下載的模型 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;ollama list&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;NAME&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SIZE&amp;nbsp; &amp;nbsp; &amp;nbsp; MODIFIED&lt;/div&gt;&lt;div&gt;gemma4:e4b&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c6eb396dbd59&amp;nbsp; &amp;nbsp; 9.6 GB&amp;nbsp; &amp;nbsp; 4 weeks ago&lt;/div&gt;&lt;div&gt;llama3.2-vision:11b&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6f2f9757ae97&amp;nbsp; &amp;nbsp; 7.8 GB&amp;nbsp; &amp;nbsp; 4 weeks ago&lt;/div&gt;&lt;div&gt;phi4:14b&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ac896e5b8b34&amp;nbsp; &amp;nbsp; 9.1 GB&amp;nbsp; &amp;nbsp; 4 weeks ago&lt;/div&gt;&lt;div&gt;dagbs/deepseek-coder-v2-lite-instruct:q4_k_m&amp;nbsp; &amp;nbsp; &amp;nbsp;a6f5c73087ad&amp;nbsp; &amp;nbsp; 10 GB&amp;nbsp; &amp;nbsp; &amp;nbsp;4 weeks ago&lt;/div&gt;&lt;div&gt;mannix/deepseek-coder-v2-lite-instruct:q4_k_m&amp;nbsp; &amp;nbsp; 6171206208d0&amp;nbsp; &amp;nbsp; 10 GB&amp;nbsp; &amp;nbsp; &amp;nbsp;4 weeks ago&lt;/div&gt;&lt;div&gt;deepseek-r1:14b&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; c333b7232bdb&amp;nbsp; &amp;nbsp; 9.0 GB&amp;nbsp; &amp;nbsp; 4 weeks ago&lt;/div&gt;&lt;div&gt;qwen3:14b&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bdbd181c33f2&amp;nbsp; &amp;nbsp; 9.3 GB&amp;nbsp; &amp;nbsp; 4 weeks ago&lt;/div&gt;&lt;div&gt;gemma4:latest&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; c6eb396dbd59&amp;nbsp; &amp;nbsp; 9.6 GB&amp;nbsp; &amp;nbsp; 5 weeks ago&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再次開啟 Ollama 原生介面, 按 &quot;新對話&quot;, 選擇模型後開始對話 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigVwZ2lgw6ipYt4vNniqKkpoFrimvwcL8bIuSMTZ2bT9fvIQ_UpHFfQmCq4XCKgKGt8HU7I32gwLF46tSGKW4pNE1kacEUl-LNNdPcXH3menVO_T4K26suiC5T73ZWJHnJYyaBJEmhxDIHlnxugxSQ2r2TZM5ubYZAuPlTJ5fjFEu6X91mELRfYWUmxkeQ/s1047/ollama-gemma4-test-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;581&quot; data-original-width=&quot;1047&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigVwZ2lgw6ipYt4vNniqKkpoFrimvwcL8bIuSMTZ2bT9fvIQ_UpHFfQmCq4XCKgKGt8HU7I32gwLF46tSGKW4pNE1kacEUl-LNNdPcXH3menVO_T4K26suiC5T73ZWJHnJYyaBJEmhxDIHlnxugxSQ2r2TZM5ubYZAuPlTJ5fjFEu6X91mELRfYWUmxkeQ/s320/ollama-gemma4-test-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSlfS1kfqlQdPQ7NoGGCr49YEhpA_aNedpwmyGXxbHlcTTfONuhygrBAv7p8vbc2WZXtzwJeojcf0-mo4hSjVBScAB8AnQiyV241A43RZb_eR_FhWvi9jbRiHv_qqml8Ll7x2gXsHDO15evO3flW82pAvbP9mtD2wn4GX87w1nHEtAUtVavUQvI1JvhKgi/s1051/ollama-gemma4-test-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;700&quot; data-original-width=&quot;1051&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSlfS1kfqlQdPQ7NoGGCr49YEhpA_aNedpwmyGXxbHlcTTfONuhygrBAv7p8vbc2WZXtzwJeojcf0-mo4hSjVBScAB8AnQiyV241A43RZb_eR_FhWvi9jbRiHv_qqml8Ll7x2gXsHDO15evO3flW82pAvbP9mtD2wn4GX87w1nHEtAUtVavUQvI1JvhKgi/s320/ollama-gemma4-test-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本地模型終於回來了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 安裝 Page Assist :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Page Assist 是瀏覽器擴充元件, 在 Edge 與 Chrome 都可安裝, 參考 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/05/ollama-page-assist.html&quot; target=&quot;_blank&quot;&gt;Ollama 學習筆記 : 安裝網頁介面 Page Assist&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但因為之前是在 Chrome 設定的, 擴充元件紀錄會儲存在 Google 帳號, 所以在 Chome 登入 Google 帳號後 Page Assist 擴充元件自動就恢復了 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHzsn3-VlqgEGUuoKLuWxTNhEe6H9yoyI6E3qoSwB-BSIxa746U1rvZYVQr-5wIbVN_K7oVldN-aqxQsF7IEE09yd68e-8HEwi8EHXYNhHsWNHZw99EUCiWqXFSbsTNz_oud7lVW2a8QX4CKNRtnBY5MTaNnHCv2Z790RhEZEqoskLdRgCNQgEKvutYAm/s699/ollama-page-assist-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;260&quot; data-original-width=&quot;699&quot; height=&quot;119&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHzsn3-VlqgEGUuoKLuWxTNhEe6H9yoyI6E3qoSwB-BSIxa746U1rvZYVQr-5wIbVN_K7oVldN-aqxQsF7IEE09yd68e-8HEwi8EHXYNhHsWNHZw99EUCiWqXFSbsTNz_oud7lVW2a8QX4CKNRtnBY5MTaNnHCv2Z790RhEZEqoskLdRgCNQgEKvutYAm/s320/ollama-page-assist-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zwJNkgcEPPtcy0Y4zSh7VNVMw-tHHSnsvCL4mc8iuzfh1wEWhabluhnjqIc4fYmS8fwMeBwHMsWj8Lq5OIYI-oeI0L8gx21yW9QZJ0EK2YoJhsEnW1xczi0Mo6sKAk_XnbqEsi_U4GMn7a45GJL_IIqeOUxhTFbutP7pcHXkUpLE8-j6P3wnXzgsEamz/s1901/ollama-page-assist-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;825&quot; data-original-width=&quot;1901&quot; height=&quot;139&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zwJNkgcEPPtcy0Y4zSh7VNVMw-tHHSnsvCL4mc8iuzfh1wEWhabluhnjqIc4fYmS8fwMeBwHMsWj8Lq5OIYI-oeI0L8gx21yW9QZJ0EK2YoJhsEnW1xczi0Mo6sKAk_XnbqEsi_U4GMn7a45GJL_IIqeOUxhTFbutP7pcHXkUpLE8-j6P3wnXzgsEamz/s320/ollama-page-assist-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/8544741503907389417/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/8544741503907389417' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/8544741503907389417'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/8544741503907389417'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/msi_0655886155.html' title='MSI 電競桌機維修 (六)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj094WHcmkMpXf55XEuF_ozQvclxmPz36j7Pd1_Cb3kBVMcMN-BvVa5dBrVY44EeZYfsvmkBM978wN-xNI_U8UBfQcdvLD1vzRxT9rJhD47-PaHaiSTboTlmVJ2MAQEMzS3tzUJN1ll2-s0Kf2pQLLZiYbY1rVe2jztflUF2akeuFz_elAb5Na0tUI3WDF0/s72-c/ollama-model-location-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-3375362190332610931</id><published>2026-06-25T21:56:24.756+08:00</published><updated>2026-06-26T00:45:36.302+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦"/><title type='text'>MSI 電競桌機維修索引</title><content type='html'>&lt;div&gt;五月初從沖繩回來後開始在 MSI 桌機安裝 Ollama 展開本地模型測試, 哪知不到一個月, 6/1 系統碟 (威剛 ADATA&amp;nbsp; LEGEND 710, 1TB) 就掛掉無法開機, 幸好建國路德源電腦工程師幫我抓出是系統 SSD 毀損 (保固內), 到隔壁威剛換新後回家自己重灌 Win11, 整個六月份就斷斷續續把之前的環境重建回來. 為了以後查考方便, 我把這些復原紀錄整理索引如下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (一)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_01925427461.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (二)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi-game-ready.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (三)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_023469446.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (四)&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_02049945586.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (五)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_0655886155.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (六)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;~進行中~&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/3375362190332610931/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/3375362190332610931' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3375362190332610931'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3375362190332610931'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/msi_01188507962.html' title='MSI 電競桌機維修索引'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1707583218645072626</id><published>2026-06-25T17:56:05.996+08:00</published><updated>2026-06-25T17:56:05.996+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="網購"/><title type='text'>蝦皮購買輕便型 LED 頭燈 x 3</title><content type='html'>&lt;div&gt;最近芒果幾乎採收完畢, 前幾天非常熱, 芒果熟得快, 趕緊切肉放冰箱保存, 常弄到很晚才戴著頭燈把廚餘拿去菜園倒, 但那頭燈的電池似乎老化了, 用沒多久亮度驟減, 今天上蝦皮買了三個替換用 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;【&lt;a href=&quot;https://shopee.tw/%E3%80%90%F0%9F%8F%86%E9%9A%94%E6%97%A5%E5%88%B0%E8%B2%A8%E3%80%91%E8%BC%95%E4%BE%BF%E5%9E%8B%E9%A0%AD%E7%87%88-LED%E9%A0%AD%E7%87%88-%E5%B7%A5%E4%BD%9C%E9%A0%AD%E7%87%88-%E5%BB%A3%E8%A7%92-%E8%81%9A%E7%84%A6-%E9%9C%B2%E7%87%9F%E7%87%88-%E7%85%A7%E6%98%8E%E7%87%88-%E7%99%BB%E5%B1%B1-%E5%BC%B7%E5%85%89%E9%A0%AD%E7%87%88-1200mah-%E5%B7%A5%E4%BD%9C%E9%A0%AD%E7%87%88-i.1503199239.44323550199&quot; target=&quot;_blank&quot;&gt;🏆隔日到貨】輕便型頭燈 LED頭燈 工作頭燈 廣角 聚焦 露營燈 照明燈 登山 強光頭燈 1200mah 工作頭燈&lt;/a&gt;&amp;nbsp;$129 x 3&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKiMAYtu0HKd9cf1rs5Gfiyu_qZadA3732L65DXcYvAarL37zOhSfWM_aRihvtXyrlhnj2jEm8YWKtcIGywIG6nujAjxfI9FB09rSIAxC9jvHCAkUWMO1XsBYWqmGxvlAOvTx2FC6nEAabqcx_tYnt5OQzuCOuCFfXi7UEX-PmxrwxbcjgjHdbvDo5f5T/s2099/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E8%BC%95%E4%BE%BF%E5%9E%8B%20LED%20%E9%A0%AD%E7%87%88-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1218&quot; data-original-width=&quot;2099&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKiMAYtu0HKd9cf1rs5Gfiyu_qZadA3732L65DXcYvAarL37zOhSfWM_aRihvtXyrlhnj2jEm8YWKtcIGywIG6nujAjxfI9FB09rSIAxC9jvHCAkUWMO1XsBYWqmGxvlAOvTx2FC6nEAabqcx_tYnt5OQzuCOuCFfXi7UEX-PmxrwxbcjgjHdbvDo5f5T/s320/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E8%BC%95%E4%BE%BF%E5%9E%8B%20LED%20%E9%A0%AD%E7%87%88-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8SfV6NclbIKCEJlU7TlwbN3sw5FFDt9XZa7cdeTjWD2UHmCUOEA_f8ZlGiB-lRHzrG15mL-SJ73YNDg5P1K4xyBYxxkRKST66nBEtssFrxMJbmGGcLDtHleeD7ly8xbKU0cVuFeeoF9Tx7ZJm2yakYcD9t2jkLH7q3Gu9QDsuFiiR2XLe-vCDev8P2Wgq/s1943/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E8%BC%95%E4%BE%BF%E5%9E%8B%20LED%20%E9%A0%AD%E7%87%88-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;935&quot; data-original-width=&quot;1943&quot; height=&quot;154&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8SfV6NclbIKCEJlU7TlwbN3sw5FFDt9XZa7cdeTjWD2UHmCUOEA_f8ZlGiB-lRHzrG15mL-SJ73YNDg5P1K4xyBYxxkRKST66nBEtssFrxMJbmGGcLDtHleeD7ly8xbKU0cVuFeeoF9Tx7ZJm2yakYcD9t2jkLH7q3Gu9QDsuFiiR2XLe-vCDev8P2Wgq/s320/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E8%BC%95%E4%BE%BF%E5%9E%8B%20LED%20%E9%A0%AD%E7%87%88-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;明華智取 347 元 (1 個原價 1000 元?).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1707583218645072626/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1707583218645072626' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1707583218645072626'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1707583218645072626'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/led-x-3.html' title='蝦皮購買輕便型 LED 頭燈 x 3'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKiMAYtu0HKd9cf1rs5Gfiyu_qZadA3732L65DXcYvAarL37zOhSfWM_aRihvtXyrlhnj2jEm8YWKtcIGywIG6nujAjxfI9FB09rSIAxC9jvHCAkUWMO1XsBYWqmGxvlAOvTx2FC6nEAabqcx_tYnt5OQzuCOuCFfXi7UEX-PmxrwxbcjgjHdbvDo5f5T/s72-c/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%E8%BC%95%E4%BE%BF%E5%9E%8B%20LED%20%E9%A0%AD%E7%87%88-2.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-6569422226851400808</id><published>2026-06-24T16:04:00.312+08:00</published><updated>2026-06-25T21:18:53.847+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="筆電"/><title type='text'>INHON 應宏 Carbonbook 筆電維修 (一)</title><content type='html'>&lt;div&gt;繼搞定 DELL VOSTRO 2520 舊筆電後, 下一個想救活的老筆電是我 12 年前的最愛 : 應宏 INHON 11.6 吋 Carbonbook 輕薄小筆電 (向原廠購於 2024 年 10 月), 此筆電為頂新集團魏家次子魏宏帆所創立的應宏科技設計, 模具架構採用技嘉 Gigabyte X11, 規格如下 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;CPU :&amp;nbsp;Intel Core i5-3317U 或 i5-3337U &lt;br /&gt;雙核心四線程, 第 3 代 Ivy Bridge 架構&lt;br /&gt;內建顯示晶片 : Intel HD Graphics 4000&lt;br /&gt;22 奈米製程, 基礎時脈為 1.7GHz / 1.8GHz&lt;br /&gt;直接焊接在主機板上 (BGA 封裝, 無法更換)&lt;/li&gt;&lt;li&gt;DRAM :&amp;nbsp;4GB DDR3-1600 (1.35V 低電壓版)&lt;br /&gt;Samsung 或 SK 海力士 Hynix DDR3 顆粒&lt;br /&gt;直接焊接在主機板正反面 (無法擴充)&lt;/li&gt;&lt;li&gt;SSD : 128GB mSATA 介面 (ADATA 或 TOSHIBA)&lt;br /&gt;原生晶片組 HM77&lt;/li&gt;&lt;li&gt;鋰電池 :&amp;nbsp;4-cell 鋰聚合物電池 (電容量 4730 mAh, 35Wh)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;記得 2023 年時曾想要從隨身硬碟映像檔復原系統, 卻因操作不慎把那顆 4TB 隨身硬碟格式化掉. 這次檢修唯一能做的是更換 128G 的 SSD, 更換鋰電池應該不用想了, 不可能找到合用的電池包. 檢修作業就是拆掉背板, 查看主機板上的 SSD 固態硬碟是何種款式 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;寬胖型 (約 5 x 3 公分) : mSATA 介面 (可能性較高)&lt;/li&gt;&lt;li&gt;長條型 (寬 2.2 公分, 長 8 公分）：M.2 SATA&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;然後到拍賣網站搜尋 &quot;mSATA SSD 128G&quot; 或 &quot;M.2 SATA 2280 128G&quot;, 買回來之後換裝之前, 先將電池連接到主機板上的那條彩色排線插頭拔開完全斷電,&amp;nbsp;把舊的 128GB SSD 拆下來換上新 SSD 後插回電池排線.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由於此筆電一直都用得順順的 (只出過一次重灌事故), 所以之前留下的紀錄不多 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2014/10/inhon-116-carbonbook.html&quot; target=&quot;_blank&quot;&gt;應宏 Inhon 11.6 吋筆電 Carbonbook&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2015/04/inhon-carbon-book.html&quot; target=&quot;_blank&quot;&gt;應宏 Inhon Carbon Book 系統還原&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2017/10/carbonbook.html&quot; target=&quot;_blank&quot;&gt;購買 Carbonbook 筆電充電器&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2023/12/c-windows.html&quot; target=&quot;_blank&quot;&gt;筆電 C 碟毀損如何回復 Windows&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我昨晚想要用啟動隨身碟開機卻無反應, 發現電源線有破損, 量輸出端沒電壓, 但遍尋不著之前購買的備用充電器, 可能整理客廳櫃子時帶回鄉下去了, 充電器規格如下 :&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;19V, 2.37A, 45W, 輸出端子外徑 5.5mm 內徑 2.5mm&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;此規格充電器市面上還買得到 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://www.ruten.com.tw/item/22531390458271/&quot; target=&quot;_blank&quot;&gt;【PChome 24h購物】Asus變壓器-華碩 19V,3.42A,65W&lt;/a&gt;&amp;nbsp;$780&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://www.ruten.com.tw/item/21604752991860/&quot; target=&quot;_blank&quot;&gt;高質華碩L頭 19V4.74A 3.42A 2.1A 通用 接口5.5*2.5 變壓器&lt;/a&gt;&amp;nbsp;$320&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今天下班回去鄉下再找找, 有找到再來進行檢修. 每次看到 Carbonbook 那黑亮的碳纖維外殼, 就覺得當時頂新小老闆的審美真不錯, 設計出這麼漂亮的機子, 我實在不想讓它淹沒在塵灰中.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2026-06-24 補充 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;晚上回到鄉下在抽屜裡找到備用電源線, 將 Win8 啟動隨身碟插入 USB, 開機後馬上狂按 F12, 出現啟動選項, 點選 &quot;微軟注音&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-fD6Mc_0VmoJNopU5bGOU4v1aYk3g1vfDf-H5AHZDWFkC0u_-d403AZOkMi5oSDxSBqzbpqnghfodzdOI5K1Bq6fzMbjqz5Aj0YhHxaGByh0QDSl38XdbH-AH3mpUO3PF3jShBmtjhgbR3Xi1UtPpjyeZIEmtD983EsBNE-mg25Y7lRR-RUzoFEw6Y4P/s1184/inhon-carbonbook-repair-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;918&quot; data-original-width=&quot;1184&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-fD6Mc_0VmoJNopU5bGOU4v1aYk3g1vfDf-H5AHZDWFkC0u_-d403AZOkMi5oSDxSBqzbpqnghfodzdOI5K1Bq6fzMbjqz5Aj0YhHxaGByh0QDSl38XdbH-AH3mpUO3PF3jShBmtjhgbR3Xi1UtPpjyeZIEmtD983EsBNE-mg25Y7lRR-RUzoFEw6Y4P/s320/inhon-carbonbook-repair-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 &quot;疑難排解&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhryfgiBztFmtngngqs-rBeZFDXkPzF82DKDNHvQCyLAN-QyZgJWVmjMtv0CHGXw9g_YDUAfEs3l7X991pF2wI2RymNxqfYY9WqvZqW-XRcfuKfxqjDNg6GRjP51XPck8Raz9MUzWY_1GNefGQWstCC4hxItKvz8H5M6tDkcnlSlNJJN7h_PL3xhdOuhnXb/s1086/inhon-carbonbook-repair-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;1086&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhryfgiBztFmtngngqs-rBeZFDXkPzF82DKDNHvQCyLAN-QyZgJWVmjMtv0CHGXw9g_YDUAfEs3l7X991pF2wI2RymNxqfYY9WqvZqW-XRcfuKfxqjDNg6GRjP51XPck8Raz9MUzWY_1GNefGQWstCC4hxItKvz8H5M6tDkcnlSlNJJN7h_PL3xhdOuhnXb/s320/inhon-carbonbook-repair-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 &quot;進階選項&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwRMdVUfijNSQ1QVzmqnrt3O_FTPVyzcbrl-EPPC-vchoox4Zb_jgkVMcqlP2c_M9KkTBtCAF4MMGBgfuF8nsrf_trOHbBlDix5BjtSR7hZUNtGGCbQFuy2LXeVGyyEeyiE6AZDEXgHpaMZbvF1xpcPvYxFUk5NyiPGKGd4Gk8xNK50_Qbf6a6TIn54cu/s901/inhon-carbonbook-repair-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;713&quot; data-original-width=&quot;901&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwRMdVUfijNSQ1QVzmqnrt3O_FTPVyzcbrl-EPPC-vchoox4Zb_jgkVMcqlP2c_M9KkTBtCAF4MMGBgfuF8nsrf_trOHbBlDix5BjtSR7hZUNtGGCbQFuy2LXeVGyyEeyiE6AZDEXgHpaMZbvF1xpcPvYxFUk5NyiPGKGd4Gk8xNK50_Qbf6a6TIn54cu/s320/inhon-carbonbook-repair-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 &quot;啟動修復&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWM3yHaUKnQvozL3z7mqBNLSdYxbrQR0p2IDArmVxVzZcqM8ds2H50tu2bHJfT6dQgFqIpjrLb2-pf1GgdC_z1bgfVEvn2ssgKIe3bLhADxy_Ayl2jB4M_8xdm0JCOZLT7u4hcvDY_kRxx0cDAfaYoQp_puSISnZrmKmMKbpEPyswP8zDSQL1E2YaFIcsf/s1079/inhon-carbonbook-repair-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;625&quot; data-original-width=&quot;1079&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWM3yHaUKnQvozL3z7mqBNLSdYxbrQR0p2IDArmVxVzZcqM8ds2H50tu2bHJfT6dQgFqIpjrLb2-pf1GgdC_z1bgfVEvn2ssgKIe3bLhADxy_Ayl2jB4M_8xdm0JCOZLT7u4hcvDY_kRxx0cDAfaYoQp_puSISnZrmKmMKbpEPyswP8zDSQL1E2YaFIcsf/s320/inhon-carbonbook-repair-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現 &quot;未連接必要裝置或無法存取必要裝置&quot; 提示 (錯誤碼 0xc0000225) :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmMg0p_Uhhn8WeylIyAZ56lk-SivFA-31Rr_0oq-pBNdjV6vkXbT05ErxfdCnxGrY2XMj8aCMGKs9RkiDx6xZWNUPAihy2evbofGYBY6WroiTe7HC9iKXLnTTok7KAtthwRp9CTj5mTaY5rtSQSaxMxCMCzyYp9LzFs9xiQYFik41p0Audc0HfHq6e8ndm/s887/inhon-carbonbook-repair-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;805&quot; data-original-width=&quot;887&quot; height=&quot;290&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmMg0p_Uhhn8WeylIyAZ56lk-SivFA-31Rr_0oq-pBNdjV6vkXbT05ErxfdCnxGrY2XMj8aCMGKs9RkiDx6xZWNUPAihy2evbofGYBY6WroiTe7HC9iKXLnTTok7KAtthwRp9CTj5mTaY5rtSQSaxMxCMCzyYp9LzFs9xiQYFik41p0Audc0HfHq6e8ndm/s320/inhon-carbonbook-repair-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;這表示主機板完全找不到可以開機的作業系統硬碟 (C碟) 或是該硬碟的開機引導磁區已經徹底損壞消失了, 換句話說, 這台筆電的 SSD 確實已經實質損毀, 用軟體自動修復方法也救不回來, 只能更換 SSD 重灌系統了. 下一步是拆機殼底板, 檢視 SSD 是 mSATA 還是 M.2 SATA, 再上拍賣網站買二手 SSD.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/6569422226851400808/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/6569422226851400808' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6569422226851400808'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6569422226851400808'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/inhon.html' title='INHON 應宏 Carbonbook 筆電維修 (一)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-fD6Mc_0VmoJNopU5bGOU4v1aYk3g1vfDf-H5AHZDWFkC0u_-d403AZOkMi5oSDxSBqzbpqnghfodzdOI5K1Bq6fzMbjqz5Aj0YhHxaGByh0QDSl38XdbH-AH3mpUO3PF3jShBmtjhgbR3Xi1UtPpjyeZIEmtD983EsBNE-mg25Y7lRR-RUzoFEw6Y4P/s72-c/inhon-carbonbook-repair-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-3024098233096753114</id><published>2026-06-23T10:20:48.643+08:00</published><updated>2026-06-23T22:53:48.580+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="筆電"/><title type='text'>DELL 老筆電 Vostro 2520 修復 (成功)</title><content type='html'>&lt;div&gt;我在端午連假的周六嘗試透過替換系統檔案取得 SYSTEM 權限, 希望能藉此重設水某的 DELL Vostro 2520 舊筆電系統管理員密碼, 但因為以前安裝系統的人把 Administrator 與自己管理者的&amp;nbsp;Account active 設為 No, 使得這些繞道老招數都無效, 參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/dell-vostro-2520.html&quot; target=&quot;_blank&quot;&gt;DELL 老筆電 Vostro 2520 修復 (失敗)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;昨天晚上嘗試使用 Gemini 建議的大殺招, 利用 Ubuntu Linux 隨身碟開機, 繞過 Windows 的安全機制, 直接修改 Windows\system32\config 底下存放密碼的資料庫檔案 (SAM), 抹除系統管理員的密碼後成功取回系統最高掌控權, 以下是此番操作的紀錄.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;先摘要此老筆電配備 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;作業系統 : Win7 Professsional 32-bit OEM (英文版, 機底有產品金鑰貼紙)&lt;/li&gt;&lt;li&gt;CPU Celeron 1000M 1.8 GHz&lt;/li&gt;&lt;li&gt;DRAM : 2GB&amp;nbsp;1600 MHz&amp;nbsp;PC3L-12800&amp;nbsp;DDR3L 1.35V&lt;/li&gt;&lt;li&gt;HD : 512GB HDD&lt;/li&gt;&lt;li&gt;光碟機 : DVD R/W&lt;/li&gt;&lt;li&gt;輸出入 : USB x 3, HDMI x 1, RJ-45 x 1, VGA x 1, 耳機+麥克風&lt;/li&gt;&lt;li&gt;電源 : 輸出 19.5 V 3.34A (型號 LA65NS2-01)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;光碟機至今都還能使用, 以前的電腦都很堅固耐用.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 製作 Unbuntu Linux 開機 USB 隨身碟 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;準備一支 4GB 以上的空隨身碟, 插入別台電腦, 在那台下載 Rufus 與 Ubuntu ISO 檔 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://rufus.ie/zh_TW/&quot; target=&quot;_blank&quot;&gt;https://rufus.ie/zh_TW/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBqrDDAVe73fRYZeAROQ8dkDGd2GdWXWTf5j5Ege7QXKgRqbhF8aZKTRk0M5OPqUxAnKY7ABxVLyciu8Wz9aJGurZ9wde4DSUUTGTSG-hKkkSgKt1fxMZgvAaZN97gWmtvb5OYnZm10e1jPxVc88ZaqbQdfZxCHUXVHKC2L18cIHRQR5N9ONYwAArSrSWa/s1674/rufus-download-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;866&quot; data-original-width=&quot;1674&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBqrDDAVe73fRYZeAROQ8dkDGd2GdWXWTf5j5Ege7QXKgRqbhF8aZKTRk0M5OPqUxAnKY7ABxVLyciu8Wz9aJGurZ9wde4DSUUTGTSG-hKkkSgKt1fxMZgvAaZN97gWmtvb5OYnZm10e1jPxVc88ZaqbQdfZxCHUXVHKC2L18cIHRQR5N9ONYwAArSrSWa/s320/rufus-download-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後到 Lubuntu 官網下載 LUbuntu 24.04 LTS 的 ISO 映像檔 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://lubuntu.me/downloads/&quot; target=&quot;_blank&quot;&gt;https://lubuntu.me/downloads/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisHq3FHoM0vGndIPlxHytx1-Fxizd0KN1gKLabYjE_tc4_u-ckG4g3joVwhDc8-GVARmiaum9AFfTABB0IQnAfFF-SnZjYq377douGVHkCIQlLhrL15wHqRJx8sotSpvQA465rqpDCuo2uJpHtXmTrv7pA1C762BBFjKWlG2f-eXTFvTgVRcjCgCMO1m60/s1032/ubuntu-download-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;830&quot; data-original-width=&quot;1032&quot; height=&quot;257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisHq3FHoM0vGndIPlxHytx1-Fxizd0KN1gKLabYjE_tc4_u-ckG4g3joVwhDc8-GVARmiaum9AFfTABB0IQnAfFF-SnZjYq377douGVHkCIQlLhrL15wHqRJx8sotSpvQA465rqpDCuo2uJpHtXmTrv7pA1C762BBFjKWlG2f-eXTFvTgVRcjCgCMO1m60/s320/ubuntu-download-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這是專為老電腦設計的輕量版 Ubuntu, 才 3.2GB 而已, 要在 2GB DRAM 上跑沒問題, 啟動速度會快很多, 也絕對不會有記憶體被擠爆的問題. 按&amp;nbsp;&lt;span style=&quot;white-space: normal;&quot;&gt;lubuntu-24.04.3-desktop-amd64.iso 超連結下載 (此筆電的 Celron CPU&amp;nbsp;&lt;/span&gt;支援 64 位元)&amp;nbsp;:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYcB2PewAuFB_UC6fW96h8pllAO7H4APgAwWyZwuGKjqomPJEsB8YpY_kXHmepWKGq0Fmofhs9mI_7Pcgtk4-y7HXY2c1h2inWLUcFcC6RqWFM4Lt8N3rT8P8EH85-yCmJ-eTYKGhiWLuDTiRs5JlF9zSvwGFlkfZ9aylUrzRPjENZmH0cM2g1VUk-DX9d/s1345/ubuntu-download-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;937&quot; data-original-width=&quot;1345&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYcB2PewAuFB_UC6fW96h8pllAO7H4APgAwWyZwuGKjqomPJEsB8YpY_kXHmepWKGq0Fmofhs9mI_7Pcgtk4-y7HXY2c1h2inWLUcFcC6RqWFM4Lt8N3rT8P8EH85-yCmJ-eTYKGhiWLuDTiRs5JlF9zSvwGFlkfZ9aylUrzRPjENZmH0cM2g1VUk-DX9d/s320/ubuntu-download-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;點擊執行 rufus-4.14p.exe 開啟 Rufus 後, 先確定最上面的裝置是否為所插入之隨身碟 (這很重要, 別把其它硬碟洗掉了). 然後按 &quot;選擇&quot; 點選前面下載的 Lubuntu 映像檔, 然後檢查以下這兩個設定, 這會決定 DELL Vostro 2520 舊筆電能不能順利讀到隨身碟 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;資料分割配置 (Partition scheme) : 下拉選擇 MBR&lt;/li&gt;&lt;li&gt;目標系統 (Target system) : 選擇 BIOS (或 UEFI-CSM)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;其餘用預設值, 設定好後點擊最下方的 &quot;執行&quot; 鈕 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWBphvCLo7PdsRSQ2DT_meKoc1nRwrl8ie4X3ZUOUpuP20kLSTkKfPyd65MZ19PEIrj1CFiEey6i27dP_rol23ff-TJ-AMmuf270bcgGZkkYMPfUESWPpDZyLB1Z0_HhiwEIqIxwIu-a7xfIYIw3e5_hgdPAui69KqBHPCS49jl_xbPE19J8l8TpJNIckc/s1436/ubuntu-bootable-usb-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1298&quot; data-original-width=&quot;1436&quot; height=&quot;289&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWBphvCLo7PdsRSQ2DT_meKoc1nRwrl8ie4X3ZUOUpuP20kLSTkKfPyd65MZ19PEIrj1CFiEey6i27dP_rol23ff-TJ-AMmuf270bcgGZkkYMPfUESWPpDZyLB1Z0_HhiwEIqIxwIu-a7xfIYIw3e5_hgdPAui69KqBHPCS49jl_xbPE19J8l8TpJNIckc/s320/ubuntu-bootable-usb-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;用建議的 ISO 模式按 OK :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheabYcBRrb9CMu_MmPFXr5DVp9HPbruLwdqvxRIpfn4TbsrWeOZ1tBCMvdE1Mlbmppo_C3Z4ePS_OJ7QNCVsuXtptGYl1OB8bxHFyddu5gkg4ZjEnLEQRVUGwGdaPmgmXz6dgQtwODoSDGId1Wag2sM9TjrOXV9YgS1xdxNex73sDUXsddDKDEH6B3jyHr/s930/ubuntu-bootable-usb-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;481&quot; data-original-width=&quot;930&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheabYcBRrb9CMu_MmPFXr5DVp9HPbruLwdqvxRIpfn4TbsrWeOZ1tBCMvdE1Mlbmppo_C3Z4ePS_OJ7QNCVsuXtptGYl1OB8bxHFyddu5gkg4ZjEnLEQRVUGwGdaPmgmXz6dgQtwODoSDGId1Wag2sM9TjrOXV9YgS1xdxNex73sDUXsddDKDEH6B3jyHr/s320/ubuntu-bootable-usb-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再次確認要燒錄的裝置是所插入之 USB 隨身碟 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFoOfXxZsjWFzCDaAPMO7eC-SG8vE-HM4ZFXQUrdaTU2DvbKLQ85bQrwk1qSPsXehyHFpNs293_CWNubyldY6sah14WNxmHBPkhscx3u44zjuzig6dj1txJzMhfjFXvWnXu_81lDPcHym85i4nySfCV6OFA8qB3qkSs6iqjJDPmBQ4EaTwA7fz3_i35ofc/s783/ubuntu-bootable-usb-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;279&quot; data-original-width=&quot;783&quot; height=&quot;114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFoOfXxZsjWFzCDaAPMO7eC-SG8vE-HM4ZFXQUrdaTU2DvbKLQ85bQrwk1qSPsXehyHFpNs293_CWNubyldY6sah14WNxmHBPkhscx3u44zjuzig6dj1txJzMhfjFXvWnXu_81lDPcHym85i4nySfCV6OFA8qB3qkSs6iqjJDPmBQ4EaTwA7fz3_i35ofc/s320/ubuntu-bootable-usb-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCXdTWro9SzwVCsqLIRFMcf4auij5m6VVTYKX0_qg1ViRi2tXDq-ZqXTHjUeBeXXsjUNOfO1maezH0bGVzb0Kpay7TEXdjstU6R6X4ga8UkRNvK13pE7qRdRV8yr2lhCh0-BVkfZil-rsBDQEAikJ0gnihB-pK5Srd3iBbwgZXoqKl2oq6gApFDTcAOjRz/s1265/ubuntu-bootable-usb-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1265&quot; data-original-width=&quot;698&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCXdTWro9SzwVCsqLIRFMcf4auij5m6VVTYKX0_qg1ViRi2tXDq-ZqXTHjUeBeXXsjUNOfO1maezH0bGVzb0Kpay7TEXdjstU6R6X4ga8UkRNvK13pE7qRdRV8yr2lhCh0-BVkfZil-rsBDQEAikJ0gnihB-pK5Srd3iBbwgZXoqKl2oq6gApFDTcAOjRz/s320/ubuntu-bootable-usb-5.jpg&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;等進度條跑完, 出現 &quot;已就緒&quot; 即燒錄完成 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih37g28AAVkrBpUKiWk2esjFgv2qTJUP0dvtxMA0j3L-kKaJfjxwc0zW7Flqf2llgWl8vHakwkjJ_dL6sa4SYNEBABqFKGPMywUrGjtZaX5yn0FEas5e8ei9Jhzj_GY-vYEReE0HRVl9rdgrqgAkbyNHqZPSrsYr3T5YztZhADGA-zgtUBiIdoU8RVJCjV/s1270/ubuntu-bootable-usb-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1270&quot; data-original-width=&quot;702&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih37g28AAVkrBpUKiWk2esjFgv2qTJUP0dvtxMA0j3L-kKaJfjxwc0zW7Flqf2llgWl8vHakwkjJ_dL6sa4SYNEBABqFKGPMywUrGjtZaX5yn0FEas5e8ei9Jhzj_GY-vYEReE0HRVl9rdgrqgAkbyNHqZPSrsYr3T5YztZhADGA-zgtUBiIdoU8RVJCjV/s320/ubuntu-bootable-usb-6.jpg&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這顆 Ubuntu 終極破解隨身碟就可以拿來給 DELL Vostro 2520 筆電以 Linux 開機了.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 用 Unbuntu Linux&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;&lt;b&gt;隨身碟&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;開機 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;將上面製作好的 Ubuntu Linux 隨身碟插到 DELL Vostro 2520 筆電, 開機後狂按 F12 會出現選單,&amp;nbsp; 選擇 UEFI 的 4GB 隨身碟 (用向下鍵) 按 Enter :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_HsYlMrmcJrgyN4Bk74VtnZGfJtc8jvvOZ96IkRwqXa7FtQR8XEGm1dnFasDsdB-XCE5TDqVCyUt4KQXkCYExxXceP09IinjeMv31ZoIWCYQlVUUT7sXNpf_orHl7l3Wm0V7d1m6m_1zUS7r_TXdYNi5UEg1a8WU0pFlQmyvkFs91JwyCRyzFLEni-6M/s1415/ubuntu-bootable-usb-9.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;704&quot; data-original-width=&quot;1415&quot; height=&quot;159&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_HsYlMrmcJrgyN4Bk74VtnZGfJtc8jvvOZ96IkRwqXa7FtQR8XEGm1dnFasDsdB-XCE5TDqVCyUt4KQXkCYExxXceP09IinjeMv31ZoIWCYQlVUUT7sXNpf_orHl7l3Wm0V7d1m6m_1zUS7r_TXdYNi5UEg1a8WU0pFlQmyvkFs91JwyCRyzFLEni-6M/s320/ubuntu-bootable-usb-9.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;選擇第一個選項 &quot;Try or Install Lubuntu&quot; 按 Enter :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbrHt4EiAO-JFqbwb62IS2kwommXu4ZBo_nYVn8v8Z5PBZy38JquXlru3JKDcyqkvFnpYHts-PvgFlgAtMMdyLNkMuq6_q8eSv0nYZUGjvfl8FHsZQD5SeqNvT5fjXbYxiKnT4OkCDSAJRsbR-CjFBosCehfqON42vqdPR8vXAAsXe1QqWyEGz9Bz5SHA3/s1464/ubuntu-bootable-usb-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;827&quot; data-original-width=&quot;1464&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbrHt4EiAO-JFqbwb62IS2kwommXu4ZBo_nYVn8v8Z5PBZy38JquXlru3JKDcyqkvFnpYHts-PvgFlgAtMMdyLNkMuq6_q8eSv0nYZUGjvfl8FHsZQD5SeqNvT5fjXbYxiKnT4OkCDSAJRsbR-CjFBosCehfqON42vqdPR8vXAAsXe1QqWyEGz9Bz5SHA3/s320/ubuntu-bootable-usb-10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;選擇繁體中文按 Try Lubuntu (這只是暫時載入到記憶體, 完全不會寫入或蓋掉原本的硬碟)&amp;nbsp;:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0SvcoJYGFEbSkuJsKqN5T-ain2MFn3k7LWNOXvJDLi8WlYwGlfJiLJXXjeh0Ij_3mdBQUreRC57fvVLQnxOdhskC3-vyHbTM18p_z6be47m32jLADfkPo5V1SC1uFbUNXozC6IjUSWrVUUn3oAcgpaYQgNLMABswPCfKISd7UGiy3l__UhsK-iA_3xDYk/s1477/ubuntu-bootable-usb-11.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0SvcoJYGFEbSkuJsKqN5T-ain2MFn3k7LWNOXvJDLi8WlYwGlfJiLJXXjeh0Ij_3mdBQUreRC57fvVLQnxOdhskC3-vyHbTM18p_z6be47m32jLADfkPo5V1SC1uFbUNXozC6IjUSWrVUUn3oAcgpaYQgNLMABswPCfKISd7UGiy3l__UhsK-iA_3xDYk/s320/ubuntu-bootable-usb-11.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這時會從隨身碟讀取資料, 約幾分鐘後進入 Lubuntu 桌面 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-z9X2sjzvoaS-uhjBzzkUdEzFc_URpduLjsjauRbN8RcKm_n_bheoDFjkIWSqNHwf6Gm_25iHDF4iUBaRKvOBatBxz2sWt7Q-QBFq00s8oDAUQeyD8C6LTgM4rLgHfj6AdzSf2fzAEZrRVfaaTjUxpAJYUoxfZOzYVqZWNE1EsJRE244FTNTrynMyBTtQ/s1428/ubuntu-bootable-usb-12.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1010&quot; data-original-width=&quot;1428&quot; height=&quot;226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-z9X2sjzvoaS-uhjBzzkUdEzFc_URpduLjsjauRbN8RcKm_n_bheoDFjkIWSqNHwf6Gm_25iHDF4iUBaRKvOBatBxz2sWt7Q-QBFq00s8oDAUQeyD8C6LTgM4rLgHfj6AdzSf2fzAEZrRVfaaTjUxpAJYUoxfZOzYVqZWNE1EsJRE244FTNTrynMyBTtQ/s320/ubuntu-bootable-usb-12.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;按左下角的 PCManFM 開啟檔案總管 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQtJWoBb9TPuoYsWBiOVj-KiOOxycdAd4EEq4na6jk05IQgxd08bGnQxw4gpWVW2R28TwVSnF-8fvLocqybFi1dtMev6FJWNV_RFqhjXa4VbsTRAq7QAf9s6JS8Zti9ZVHNuTN_5hNxEckfeZI_e_Pa4VR7IvO1gKhHL2RWcS13cE4jdBT5CmLhJHoRY__/s1144/ubuntu-bootable-usb-13.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;772&quot; data-original-width=&quot;1144&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQtJWoBb9TPuoYsWBiOVj-KiOOxycdAd4EEq4na6jk05IQgxd08bGnQxw4gpWVW2R28TwVSnF-8fvLocqybFi1dtMev6FJWNV_RFqhjXa4VbsTRAq7QAf9s6JS8Zti9ZVHNuTN_5hNxEckfeZI_e_Pa4VR7IvO1gKhHL2RWcS13cE4jdBT5CmLhJHoRY__/s320/ubuntu-bootable-usb-13.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;點選左邊容量最大的驅動, 那就是 Windows 的系統碟, 切換到 windows/System32 資料夾下, 先來將前一篇失敗的繞道手術遺留之垃圾 Magnify.exe 與 utilman.exe 清掉, 然後從 Maginify.old.exe 與 utilman.old.exe 復原為 Magnify.exe 與 utilman.exe (去除 .old) :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL-UMJq7dWYMfgpw8EKUV-hOhvkD4IDDdCJU_c552QqcvhyphenhyphencGomYrumQAPrRwkjN_gQlCQTr55uNbivstH9ASv13SWROqMdIs-JZxPRcsYXVhKVhRfsq3n6-MJ0VPxUMHY9l4l78c5W6ExUydvcuWoLGZgoFWx-KCGBMEaBpLNqX2EotvQj3GdXeNKdUUe/s1304/ubuntu-bootable-usb-14.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;906&quot; data-original-width=&quot;1304&quot; height=&quot;222&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL-UMJq7dWYMfgpw8EKUV-hOhvkD4IDDdCJU_c552QqcvhyphenhyphencGomYrumQAPrRwkjN_gQlCQTr55uNbivstH9ASv13SWROqMdIs-JZxPRcsYXVhKVhRfsq3n6-MJ0VPxUMHY9l4l78c5W6ExUydvcuWoLGZgoFWx-KCGBMEaBpLNqX2EotvQj3GdXeNKdUUe/s320/ubuntu-bootable-usb-14.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfrVxgevsrmT8gzUzGj1t53Mvze2SAbjEmu_LKWgranjqA7zSvixob8n57T5J5RGVzcLkPxygTOJPxEMwwOAnkkb-JpH03uutHe_jbgJFEHqgDt0gNpH-AoRY5Sc-K-qd3SNwoUdQU_3AuHqwGO5NgNb3nxxfQxbNEx67IFWMFrfxrf-Obk5hDgWVhwZHt/s1477/ubuntu-bootable-usb-15.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfrVxgevsrmT8gzUzGj1t53Mvze2SAbjEmu_LKWgranjqA7zSvixob8n57T5J5RGVzcLkPxygTOJPxEMwwOAnkkb-JpH03uutHe_jbgJFEHqgDt0gNpH-AoRY5Sc-K-qd3SNwoUdQU_3AuHqwGO5NgNb3nxxfQxbNEx67IFWMFrfxrf-Obk5hDgWVhwZHt/s320/ubuntu-bootable-usb-15.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMTqqmz-QCmuE8EEUr4gD8DFRJ5ML6SAI0qADywALz7-7gN3qqIeutbdii34QrmxzI-_wXOwvUWcTVcUZApEh7xPMSSHheftNLsN_WzB5Xua1eb1z_gbowPZU16WCIJLibiRB28AoxxkUmm_lWgaVyqwWRoh6zxfC2stvLRgPDD1Fwiz0O2EFFVNX6Q2pA/s1477/ubuntu-bootable-usb-15.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMTqqmz-QCmuE8EEUr4gD8DFRJ5ML6SAI0qADywALz7-7gN3qqIeutbdii34QrmxzI-_wXOwvUWcTVcUZApEh7xPMSSHheftNLsN_WzB5Xua1eb1z_gbowPZU16WCIJLibiRB28AoxxkUmm_lWgaVyqwWRoh6zxfC2stvLRgPDD1Fwiz0O2EFFVNX6Q2pA/s320/ubuntu-bootable-usb-15.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpWjOt_lyymMuzwUl6GThZcGn5gDwzAKfmoDVXUbQpCwUs624kB7b7R8TWcC1sKckyRLH9IvI4sJPiwYHrYKbZKV9pYYyQO5k9euNAjPTsaCCyI17PHwYcp5y5X0VPh8VBaTABiMYfD-3qmmQau9LXYqDnpKfGwpDAiYFlhj5J0SXSs_HZuR5LpTZoSIC/s1268/ubuntu-bootable-usb-16.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;837&quot; data-original-width=&quot;1268&quot; height=&quot;211&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpWjOt_lyymMuzwUl6GThZcGn5gDwzAKfmoDVXUbQpCwUs624kB7b7R8TWcC1sKckyRLH9IvI4sJPiwYHrYKbZKV9pYYyQO5k9euNAjPTsaCCyI17PHwYcp5y5X0VPh8VBaTABiMYfD-3qmmQau9LXYqDnpKfGwpDAiYFlhj5J0SXSs_HZuR5LpTZoSIC/s320/ubuntu-bootable-usb-16.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 清除系統管理員密碼 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;接下來要用 chntpw 軟體進行密碼抹除作業, 按 Ctrl + Alt + T 打開終端機, 輸入 chntpw -h 檢查 Lubuntu 是否已安裝此軟體, 可惜並未安裝 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjRqtA9J3-lpmXzjpzVtkGrIDlcRs4hJc80VDhPS2kL3esHvkd2CzxOAJZPBD90jT8elIi809UYqkiVCtgi3EXDLLUqhogQrLafF64uRwDO2V1Z1mvhHnIznteupe07nplN6wOJY1oNkOrIZMzlTlf7XhPwdsq2PXYwNJq43F7uxiUWF5GO5LebuGF9nDn/s1402/ubuntu-bootable-usb-18.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;556&quot; data-original-width=&quot;1402&quot; height=&quot;127&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjRqtA9J3-lpmXzjpzVtkGrIDlcRs4hJc80VDhPS2kL3esHvkd2CzxOAJZPBD90jT8elIi809UYqkiVCtgi3EXDLLUqhogQrLafF64uRwDO2V1Z1mvhHnIznteupe07nplN6wOJY1oNkOrIZMzlTlf7XhPwdsq2PXYwNJq43F7uxiUWF5GO5LebuGF9nDn/s320/ubuntu-bootable-usb-18.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接著點 &quot;開始/系統工具/Discover&quot;, 搜尋隨身碟是否有 chntpw 軟體, 可惜也沒找到 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdMw9uExQAbSTi-yMjbibJUbAvqwXuzoIn8NKrNsZHMvSGVHbyfSqxhzKeYXm4Uc3yHkCinSlGTpzn7lRdPnvU77JIkGL9fjYjZMwnhtb0bPFsvCy-J9epk62DdeCxlQONgHJuE98xIOUw1R2sGcuTXk7RY2oBS8AYu6RNvWpV13JluhJAmESZreDzGkPY/s1221/ubuntu-bootable-usb-19.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;994&quot; data-original-width=&quot;1221&quot; height=&quot;261&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdMw9uExQAbSTi-yMjbibJUbAvqwXuzoIn8NKrNsZHMvSGVHbyfSqxhzKeYXm4Uc3yHkCinSlGTpzn7lRdPnvU77JIkGL9fjYjZMwnhtb0bPFsvCy-J9epk62DdeCxlQONgHJuE98xIOUw1R2sGcuTXk7RY2oBS8AYu6RNvWpV13JluhJAmESZreDzGkPY/s320/ubuntu-bootable-usb-19.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbFRWdHI0AYEpVcI3giH9ME2anNe2_zlqf0lNq-P2WvpZLpuSVo8eSv6ENEevLUE9JpsW05dy754MFuIxXvHpHFt9UAlRJ_uhIjwZaeP98zGS-nXQ8E3mU8lHm9_N6MjSwX62c4VBNjl7h8DTyYXnNkG88HDvBgxOzeTtpOrNQgxzi3Ecgwt1-glCEakP5/s1377/ubuntu-bootable-usb-20.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;949&quot; data-original-width=&quot;1377&quot; height=&quot;221&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbFRWdHI0AYEpVcI3giH9ME2anNe2_zlqf0lNq-P2WvpZLpuSVo8eSv6ENEevLUE9JpsW05dy754MFuIxXvHpHFt9UAlRJ_uhIjwZaeP98zGS-nXQ8E3mU8lHm9_N6MjSwX62c4VBNjl7h8DTyYXnNkG88HDvBgxOzeTtpOrNQgxzi3Ecgwt1-glCEakP5/s320/ubuntu-bootable-usb-20.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;只好用我的 LG 筆電下載 chntpw 軟體後, 複製到 DELL 筆電安裝, 下載網址如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://ubuntu.pkgs.org/24.04/ubuntu-universe-amd64/chntpw_140201-1_amd64.deb.html&quot; target=&quot;_blank&quot;&gt;https://ubuntu.pkgs.org/24.04/ubuntu-universe-amd64/chntpw_140201-1_amd64.deb.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhORwGBpDppG_IjM66w4G4SSR19LOPbMszEqoTqFR67xBGtSXX9mIS_9dSEj34AMuHRdaL8c21005X1QV_y-ygpx21SejFoyS8oRiD-zihwKcOSidHQ834N9Ucd27aEOUhYKT77LiYk2AKvMVa9z3BTvtpSeo1VSn-q2weXDEDu8Z_OPeem2Ir1g3pyK1S8/s1885/ubuntu-bootable-usb-21.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1183&quot; data-original-width=&quot;1885&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhORwGBpDppG_IjM66w4G4SSR19LOPbMszEqoTqFR67xBGtSXX9mIS_9dSEj34AMuHRdaL8c21005X1QV_y-ygpx21SejFoyS8oRiD-zihwKcOSidHQ834N9Ucd27aEOUhYKT77LiYk2AKvMVa9z3BTvtpSeo1VSn-q2weXDEDu8Z_OPeem2Ir1g3pyK1S8/s320/ubuntu-bootable-usb-21.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;下列網址也可下載 chntpw :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# &lt;a href=&quot;https://pkgs.org/download/chntpw&quot; target=&quot;_blank&quot;&gt;https://pkgs.org/download/chntpw&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;將 chntpw 軟體用另一支隨身碟儲存後插入 DELL 筆電, 它會跳出視窗詢問是否開啟檔案管理視窗, 按確定 :&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcubLA67Om8KN3tl4mlAVpWpj_jf-EAlCod53WImwlVuokDZYX6Hozqa_9FT-Czl2dqqWhXVWwxc7fq14dHdWQjFA18rtZZZsRy3zxi5kh_JT3PrqSvWPS4TtqGR8vaK-mWFFGpLFI_ueKlRvTQyg9713-PaFcvvXrKmvjlHadqRcXHlFS9vWpRhXNIF5K/s655/ubuntu-bootable-usb-22.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;655&quot; data-original-width=&quot;633&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcubLA67Om8KN3tl4mlAVpWpj_jf-EAlCod53WImwlVuokDZYX6Hozqa_9FT-Czl2dqqWhXVWwxc7fq14dHdWQjFA18rtZZZsRy3zxi5kh_JT3PrqSvWPS4TtqGR8vaK-mWFFGpLFI_ueKlRvTQyg9713-PaFcvvXrKmvjlHadqRcXHlFS9vWpRhXNIF5K/s320/ubuntu-bootable-usb-22.jpg&quot; width=&quot;309&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;將 chntpw 從隨身碟複製到家目錄下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCELwPEIz-F4_VsU4oQo_kfseuq5hEaB_nE3FF-Tlz58vIcCAlskzc4ZER5quFAEDdW-n2qtEJZCxLwsVELWXzcd-XkjKFGGwR4uZaeCE3f01-3SDYtCVk-vsSKgB_KLLj9IRbk9wNxDy-u4MhUVLqqyI65pwa_v2gVUBY-Ho6s1k3fsFx3Fgnf7UStmO/s1101/ubuntu-bootable-usb-23.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;847&quot; data-original-width=&quot;1101&quot; height=&quot;246&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCELwPEIz-F4_VsU4oQo_kfseuq5hEaB_nE3FF-Tlz58vIcCAlskzc4ZER5quFAEDdW-n2qtEJZCxLwsVELWXzcd-XkjKFGGwR4uZaeCE3f01-3SDYtCVk-vsSKgB_KLLj9IRbk9wNxDy-u4MhUVLqqyI65pwa_v2gVUBY-Ho6s1k3fsFx3Fgnf7UStmO/s320/ubuntu-bootable-usb-23.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;回到上面的終端機視窗輸入 sudo dpkg -i chntpw*.deb 安裝 chntpw 軟體 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAQ59DgLdi1ZXPY4a49RhLrLpH365TxArNDuZXyqWqtmUZiAf-K2EZl8n4e_m9ntvLQPZQVPqKtyd8gSgYSadZzLpP34F4Eo1n1s0ZlIKaZ7b8-kfyPKEiUvO_f-q66BeT5F2qsja9I6Se-R39AlqgxdKhZmSYbgY9JN3HE8tWUXvKWGisUCLDPxsSIuBc/s1208/ubuntu-bootable-usb-26.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1208&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAQ59DgLdi1ZXPY4a49RhLrLpH365TxArNDuZXyqWqtmUZiAf-K2EZl8n4e_m9ntvLQPZQVPqKtyd8gSgYSadZzLpP34F4Eo1n1s0ZlIKaZ7b8-kfyPKEiUvO_f-q66BeT5F2qsja9I6Se-R39AlqgxdKhZmSYbgY9JN3HE8tWUXvKWGisUCLDPxsSIuBc/s320/ubuntu-bootable-usb-26.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;安裝完回到檔案管理員視窗, 切換到 Windows/System32/config 資料夾下 :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4hzpNvuJb43jk0Hkk5SlfMFpZtmYRpqxcy6LC9Tm4HOBH35zuBjNUns2k96GIItiIGj6-mxczuKtzGSZhyphenhyphenEprOV1b54w48N3tSa1_dBBxnHkEoEYJXF3iHSSzbvRCNORkQ8mSbscOfVAoF-5eXwH4nWF5noDUdmgr_1jI8fWLdc7aQQAhGAuYrPEOtVq4/s1187/ubuntu-bootable-usb-27.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;882&quot; data-original-width=&quot;1187&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4hzpNvuJb43jk0Hkk5SlfMFpZtmYRpqxcy6LC9Tm4HOBH35zuBjNUns2k96GIItiIGj6-mxczuKtzGSZhyphenhyphenEprOV1b54w48N3tSa1_dBBxnHkEoEYJXF3iHSSzbvRCNORkQ8mSbscOfVAoF-5eXwH4nWF5noDUdmgr_1jI8fWLdc7aQQAhGAuYrPEOtVq4/s320/ubuntu-bootable-usb-27.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;在 config 資料夾下的空白處按滑鼠右鍵, 點選 &quot;在終端機內開啟&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfSEvbxRfh8jk34_lhR9Y4_e2CjhZcHQUvyxaxEIRxQD9lMpg1GjqPJoxLqzMNVkZjQf2JYOLZCR4qOsZqEJTlOPScaQCgoSyrthtd_u9vNT0IgrijEBR674iAq47gk-49rLUpUOiNC24zOVzt2TuCAyCzbbNnCwS1onf2waXm_l-gm1QMOKzKmbHTs2C2/s1305/ubuntu-bootable-usb-28.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;910&quot; data-original-width=&quot;1305&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfSEvbxRfh8jk34_lhR9Y4_e2CjhZcHQUvyxaxEIRxQD9lMpg1GjqPJoxLqzMNVkZjQf2JYOLZCR4qOsZqEJTlOPScaQCgoSyrthtd_u9vNT0IgrijEBR674iAq47gk-49rLUpUOiNC24zOVzt2TuCAyCzbbNnCwS1onf2waXm_l-gm1QMOKzKmbHTs2C2/s320/ubuntu-bootable-usb-28.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;這會開啟一個新的終端機視窗, 輸入&amp;nbsp;sudo chntpw -i SAM 指令後會出現一個互動選單, 依照提示依序輸入即可抹除系統管理員密碼 :&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;輸入 1 (Edit user data and passwords) 按 Enter&lt;/li&gt;&lt;li&gt;畫面上會列出所有帳號, 輸入系統管理員帳號後按 Enter&lt;/li&gt;&lt;li&gt;輸入 1 (Clear [blank] user password, 將密碼清空留白) 後按 Enter&lt;/li&gt;&lt;li&gt;輸入 q 退出使用者編輯&lt;/li&gt;&lt;li&gt;輸入 q 退出 chntpw 工具&lt;/li&gt;&lt;li&gt;最後系統會問 &quot;Write hive files? (y/n) (是否寫入變更), 務必輸入 y 存檔.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;選擇&amp;nbsp;1 (Edit user data and passwords) 按 Enter :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg383uqDqjpfny3ioL5CpQE8ffBqffUA5kLZ3WPq5Tm2KoFq5UhWD0Ha1pxasoN1C3nBMeIZpGG0iHgZqnG7asLOfmoEPzjN0OdUacCwOfI1MAloeaQKePvaRe-TFSEYVD84GVDFe-O0esIq_edZnt5gNtzVd3sE6-Ip4Kki266X7IM6DM1Pl5VV7tYZWEg/s1298/ubuntu-bootable-usb-29.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;959&quot; data-original-width=&quot;1298&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg383uqDqjpfny3ioL5CpQE8ffBqffUA5kLZ3WPq5Tm2KoFq5UhWD0Ha1pxasoN1C3nBMeIZpGG0iHgZqnG7asLOfmoEPzjN0OdUacCwOfI1MAloeaQKePvaRe-TFSEYVD84GVDFe-O0esIq_edZnt5gNtzVd3sE6-Ip4Kki266X7IM6DM1Pl5VV7tYZWEg/s320/ubuntu-bootable-usb-29.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這會顯示使用者清單, 尋找帳戶層級為 ADMIN 者, 其中的 RID=03e8 者就是此電腦的系統管理員帳號, 輸入 03e8 按 Enter :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPev5lLiOJXRs6iBbvHbobavdc03NK5Bka1n0ijSZ7jhKionoPYhPUADVjpJdvPgR1aVPRc72T0FNA5Uc98Ep3_tWpMD1jNyjmuig5W8eWFi971-4U-GQCf7UbXBhufPekIue_F70xt_pAPi9fznX9eHsTRV2K4MK1PfH_Y6No3aBn6wwOvujTHl_krWLc/s1305/ubuntu-bootable-usb-30.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1049&quot; data-original-width=&quot;1305&quot; height=&quot;257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPev5lLiOJXRs6iBbvHbobavdc03NK5Bka1n0ijSZ7jhKionoPYhPUADVjpJdvPgR1aVPRc72T0FNA5Uc98Ep3_tWpMD1jNyjmuig5W8eWFi971-4U-GQCf7UbXBhufPekIue_F70xt_pAPi9fznX9eHsTRV2K4MK1PfH_Y6No3aBn6wwOvujTHl_krWLc/s320/ubuntu-bootable-usb-30.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現編輯選單, 輸入 1 選擇 Clear (blank) user password (抹除密碼) :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2h3pV-Yl3YvqP2D0VRJFeGgCETX5jV1cu2QIPj0Jn7WatzvXWnGKVVaW6b4LDGAGfxoUC-WfJ-VSA1u12JJfeZweci4yZJC7hRUHOIiKTMQSqSl4jOtlAa0JUeC1-TjpxTKWEsJ5VACxg7mxE3Nh-_QAY511n3aAy5650Ciqy_-UtwxjJb-pcMXtEXTed/s1346/ubuntu-bootable-usb-32.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1059&quot; data-original-width=&quot;1346&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2h3pV-Yl3YvqP2D0VRJFeGgCETX5jV1cu2QIPj0Jn7WatzvXWnGKVVaW6b4LDGAGfxoUC-WfJ-VSA1u12JJfeZweci4yZJC7hRUHOIiKTMQSqSl4jOtlAa0JUeC1-TjpxTKWEsJ5VACxg7mxE3Nh-_QAY511n3aAy5650Ciqy_-UtwxjJb-pcMXtEXTed/s320/ubuntu-bootable-usb-32.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;chntpw 軟體開始抹除管理員密碼 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUgv0_TLfxz4QpPbPc8kwktZk87GD0TeF92mILrqFqmw6PFFUg3rxAWAx7YY9X3BD8-b0y2cALMsClvrqVLEV_XgWqz60CP2VJQaM8ZnfhyEkUlHDDyS-4JnaGf4iFPo8K2I0yrv47TOJB90cSGJ-ozkTNQME9JDOdfecqAPvI8K19_3jgXDQCE_5xGpOR/s1359/ubuntu-bootable-usb-33.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1005&quot; data-original-width=&quot;1359&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUgv0_TLfxz4QpPbPc8kwktZk87GD0TeF92mILrqFqmw6PFFUg3rxAWAx7YY9X3BD8-b0y2cALMsClvrqVLEV_XgWqz60CP2VJQaM8ZnfhyEkUlHDDyS-4JnaGf4iFPo8K2I0yrv47TOJB90cSGJ-ozkTNQME9JDOdfecqAPvI8K19_3jgXDQCE_5xGpOR/s320/ubuntu-bootable-usb-33.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKufh5iMGZGriq_gH3Cews09jIyLORwmpktqexBKmF7iaNeaBsXwDL1fV6zPSNwWPsBKGywqxlKb9CrSFUNpyCQkXdJ9I62N8HAacqQpYqn7GQKPME_4W_4VEh-YSFKbn83ld5WTOeRqQ0Fj0jakjQv63_YCviddc3njEJX_7wSUS_u1Il3nhEP3YM3ONl/s1355/ubuntu-bootable-usb-34.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1005&quot; data-original-width=&quot;1355&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKufh5iMGZGriq_gH3Cews09jIyLORwmpktqexBKmF7iaNeaBsXwDL1fV6zPSNwWPsBKGywqxlKb9CrSFUNpyCQkXdJ9I62N8HAacqQpYqn7GQKPME_4W_4VEh-YSFKbn83ld5WTOeRqQ0Fj0jakjQv63_YCviddc3njEJX_7wSUS_u1Il3nhEP3YM3ONl/s320/ubuntu-bootable-usb-34.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;顯示 password is cleared 表示管理員密碼已被抹除, 按 q 跳出編輯畫面 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhNV65WLWsSyCiOCb5VJvTsqJGjeWlcl_p-W-KLsHWvl3yMuurNRJa-0h9ZbtEgtkqdWo5Exq-LKXGxGbiDiLx7Dil-6EP30TIL7sxveHuWQSiHVS8lJf51jf1jQPC1pbpXjSHxLS0mI7gxW2Wlukjpn6vQZw19JJvmS0CAOZ1_sDuABKviadgRD1t2Z8o/s1277/ubuntu-bootable-usb-35.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1009&quot; data-original-width=&quot;1277&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhNV65WLWsSyCiOCb5VJvTsqJGjeWlcl_p-W-KLsHWvl3yMuurNRJa-0h9ZbtEgtkqdWo5Exq-LKXGxGbiDiLx7Dil-6EP30TIL7sxveHuWQSiHVS8lJf51jf1jQPC1pbpXjSHxLS0mI7gxW2Wlukjpn6vQZw19JJvmS0CAOZ1_sDuABKviadgRD1t2Z8o/s320/ubuntu-bootable-usb-35.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8zVwW0BRLswAXBXEJ5vqD-tM41hEKRx8s1H08EPBu0vogyGRXEv1Fi-jIgCR5ef2BFUb4fFpSwOYSHVfrxPp0AMvFxjfjwKoD5HYPPSFewYHkmiFRfUiRBt4Sbf5wFAF27LuT8YrvxtOyiBZITj4taa_Y_LzzYEQOzYVwqO0etcQmeFCHGWK6qb1vhLdI/s1299/ubuntu-bootable-usb-36.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;988&quot; data-original-width=&quot;1299&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8zVwW0BRLswAXBXEJ5vqD-tM41hEKRx8s1H08EPBu0vogyGRXEv1Fi-jIgCR5ef2BFUb4fFpSwOYSHVfrxPp0AMvFxjfjwKoD5HYPPSFewYHkmiFRfUiRBt4Sbf5wFAF27LuT8YrvxtOyiBZITj4taa_Y_LzzYEQOzYVwqO0etcQmeFCHGWK6qb1vhLdI/s320/ubuntu-bootable-usb-36.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;再按一次 q 跳出互動選單 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ4RuLUjjS_9W_2z3HLDZIzB96-c58I7ujzWXFDLRTPDJonolg7zx4KW7AyGZYS4k9l6vT9c_6yYt8t0M9D7bpuYhc0r0lEdc-frscb_Ig29I6IG_AU2uzbEESs4UdlVUkMOkenKWbjB8WurKeDI7Xzsi02ZyVzYJ2AOjFRianJd-v8ppxeD0ZhV1pocC-/s1300/ubuntu-bootable-usb-37.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;984&quot; data-original-width=&quot;1300&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ4RuLUjjS_9W_2z3HLDZIzB96-c58I7ujzWXFDLRTPDJonolg7zx4KW7AyGZYS4k9l6vT9c_6yYt8t0M9D7bpuYhc0r0lEdc-frscb_Ig29I6IG_AU2uzbEESs4UdlVUkMOkenKWbjB8WurKeDI7Xzsi02ZyVzYJ2AOjFRianJd-v8ppxeD0ZhV1pocC-/s320/ubuntu-bootable-usb-37.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;跳出前詢問是否要儲存變更, &lt;span style=&quot;background-color: #fcff01;&quot;&gt;務必按 y&lt;/span&gt; 上面的動作才會生效 (&lt;span style=&quot;background-color: #fcff01;&quot;&gt;此乃關鍵動作&lt;/span&gt;) :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEwx5uUuxh42rwuuNC6rpLMLQ232BhsCW2dhBAajWxoseQVA4TJkFqpmk2QYf-C3_zdtWM1oZ_Dqz0_ofepWVAeOtXceZh2XcmG9eDGmT6a9Y5bmO7cKX1DzW6I2mM7E5xAg8EPFe_NWljMny60TOt9UTV9FdlfIzcCUjzEmMYGZ1KwwDW9you2mYaI4-2/s1275/ubuntu-bootable-usb-38.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;988&quot; data-original-width=&quot;1275&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEwx5uUuxh42rwuuNC6rpLMLQ232BhsCW2dhBAajWxoseQVA4TJkFqpmk2QYf-C3_zdtWM1oZ_Dqz0_ofepWVAeOtXceZh2XcmG9eDGmT6a9Y5bmO7cKX1DzW6I2mM7E5xAg8EPFe_NWljMny60TOt9UTV9FdlfIzcCUjzEmMYGZ1KwwDW9you2mYaI4-2/s320/ubuntu-bootable-usb-38.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣就完成系統管理員密碼抹除作業, 按 &quot;離開 -&amp;gt; 關機&quot; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0m6Ybyf2plN2MHXsSEjy3DGt2-zsm7hKIWQ1L0ZUU7Zny392pQyfzZAz6Rxi-a7AibUZnZxMRea49wX8GqdNP8vYu1iRZqEgu5WEZtISYHfQl_LQQX0lfbWbrBpAU0uNw9NV5oLv6FgNZbMMRLG-y_ArrbNLynEO18POhHxBOmzW63DMMpa1jVTbQZj-u/s1322/ubuntu-bootable-usb-39.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;885&quot; data-original-width=&quot;1322&quot; height=&quot;214&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0m6Ybyf2plN2MHXsSEjy3DGt2-zsm7hKIWQ1L0ZUU7Zny392pQyfzZAz6Rxi-a7AibUZnZxMRea49wX8GqdNP8vYu1iRZqEgu5WEZtISYHfQl_LQQX0lfbWbrBpAU0uNw9NV5oLv6FgNZbMMRLG-y_ArrbNLynEO18POhHxBOmzW63DMMpa1jVTbQZj-u/s320/ubuntu-bootable-usb-39.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現下列畫面要求拔除 Lubuntu 隨身碟才會關機 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizk5-sybyjQE0Ps5XfLke28SepyFk2h1Em4IPBqrWC2F4ojoaS_G1n7fbQGFshqhytIBnq87ILIDR2nikAa8H_eUPYHYW3EIUi2sitKk6un4vFvZhM2q_LDJ4Zm9Hf4g1pVjFtmYwLNIVV64Sq4aTv7Zc2cYta60pn6U9jeCoOwZiDz-aaLZuf5Rvcgody/s1477/ubuntu-bootable-usb-40.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizk5-sybyjQE0Ps5XfLke28SepyFk2h1Em4IPBqrWC2F4ojoaS_G1n7fbQGFshqhytIBnq87ILIDR2nikAa8H_eUPYHYW3EIUi2sitKk6un4vFvZhM2q_LDJ4Zm9Hf4g1pVjFtmYwLNIVV64Sq4aTv7Zc2cYta60pn6U9jeCoOwZiDz-aaLZuf5Rvcgody/s320/ubuntu-bootable-usb-40.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;重開機就會進入 Win7 了, 但預設會用 Power User 身份登入, 按 Log off 登出 :&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGBsq4uijgUK8PeWVUledUqyRjv_u3cGbbPbplAONOitSK9e7uN8t1HnPn3Rp_24GBaCcRVVsJD9SGxWQ1OtwZe0UHdFNsPhR4KzNg2IftjE56e8wbNLidGrnH5Qr_tQGoCT1_bmPCsuimXToilBuA8dcq9ZWCYhwZoh01XD0ugj4ZqGAQPBI3OxMfQ_BN/s1477/ubuntu-bootable-usb-41.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGBsq4uijgUK8PeWVUledUqyRjv_u3cGbbPbplAONOitSK9e7uN8t1HnPn3Rp_24GBaCcRVVsJD9SGxWQ1OtwZe0UHdFNsPhR4KzNg2IftjE56e8wbNLidGrnH5Qr_tQGoCT1_bmPCsuimXToilBuA8dcq9ZWCYhwZoh01XD0ugj4ZqGAQPBI3OxMfQ_BN/s320/ubuntu-bootable-usb-41.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;後點選左邊的管理員帳戶登入, 果然不再顯示密碼輸入頁, 而是直接進入系統 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0bOpdsEzcOO2JH8Q_QqlZRLuhbOvanttuhQ96WpBH9VZ8vb1hZfOyY0RffmCrjExOaGFCus53TBgSQA6ru5z_t2sxZqBp-pv_OSgCPAJSgekz78Bh-jAi5CS_d2XJj2RzyHiJh9ia1jozsRbkRraxDDoMxp2ysQu-cGHvWLPThmQu4mdX5CGAKoTs5sXK/s1477/ubuntu-bootable-usb-42.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0bOpdsEzcOO2JH8Q_QqlZRLuhbOvanttuhQ96WpBH9VZ8vb1hZfOyY0RffmCrjExOaGFCus53TBgSQA6ru5z_t2sxZqBp-pv_OSgCPAJSgekz78Bh-jAi5CS_d2XJj2RzyHiJh9ia1jozsRbkRraxDDoMxp2ysQu-cGHvWLPThmQu4mdX5CGAKoTs5sXK/s320/ubuntu-bootable-usb-42.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyqtSSFuy6pg11un3Vefq9puJCd5aaP9uh8h4Sat2XNRBiFBNja212tXFkM_zJqCY3H9TwXYdtizuuUGtOZEq3cmzWJBJWSpdMdxIO4N9l04y74jkHfKz29e6cl51CuncgdurloW0d3VeQxNxxDZoo9Lvdq2N9pViQQK0XaroqDBNRw77eHQmnvS9uenIm/s1477/ubuntu-bootable-usb-43.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyqtSSFuy6pg11un3Vefq9puJCd5aaP9uh8h4Sat2XNRBiFBNja212tXFkM_zJqCY3H9TwXYdtizuuUGtOZEq3cmzWJBJWSpdMdxIO4N9l04y74jkHfKz29e6cl51CuncgdurloW0d3VeQxNxxDZoo9Lvdq2N9pViQQK0XaroqDBNRw77eHQmnvS9uenIm/s320/ubuntu-bootable-usb-43.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;哈哈! 終於成功拿回電腦主控權啦!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;取回管理員權限後接下來要先做兩件事 :&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;修改系統時間 :&lt;br /&gt;滑鼠點擊右下角的時間, 點選 &quot;變更日期和時間設定值&quot;, 設定正確的日期時間.&lt;/li&gt;&lt;li&gt;重新設定系統管理員密碼 (可做可不做) :&lt;br /&gt;如果希望系統管理員帳號還是有密碼保護, 可以去 &quot;控制台 ➔ 使用者帳戶&quot; 重新設一個新密碼.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;日期時間修正後, 瀏覽器才不會因安全問題無法上網. 為了避免記密碼, 決定不設管理員密碼.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;4. 安裝常用軟體 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;有了管理員權限, 先修改日期時間, 這樣瀏覽器才不會因安全問題無法上網. 然後用 Edge 下載安裝 Chrome 方便後續下載軟體. 以下這些軟體都是我日常都會使用的 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Picpick : 螢幕截圖&amp;nbsp;&lt;/li&gt;&lt;li&gt;UltraViewer : 遠端桌面&lt;/li&gt;&lt;li&gt;Anydesk : 遠端桌面&lt;/li&gt;&lt;li&gt;Thonny : Python 編輯器&lt;/li&gt;&lt;li&gt;ActivePresentor : 螢幕錄影&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;遠端桌面主要是可以從我的 LG Gram 連線遙控檔案下載.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;5. 設定預設登入系統管理員帳號 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;雖然已將管理員密碼抹除, 但由於此筆電開機預設登入 Power User 帳戶, 每次開機後都要先登出 Power User 帳戶再免密碼登入管理員帳戶很麻煩, 下面操作要來設定開機預設登入系統管理員帳戶. 按 Win + R 輸入 netplwiz 按 OK :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4K_VosYyDzkGC7W7Mf0CzCs7g0tjFPAfVRZFrmzqHKXVrY5RvySP4JW2agiNgr2-uOfV34Jf4gRZ1SkH_XotWXkYjIuyMXgQK2XuEzNIemtkFw60pfVT5rBctZCw0gWu10OQ6R1__e6aT3MHdwUS-JCPgTbpxyXklHMFIBgKTOkkOso9mH5jFCwIhOPqH/s509/dell-astro2520-admin-auto-login-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;471&quot; data-original-width=&quot;509&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4K_VosYyDzkGC7W7Mf0CzCs7g0tjFPAfVRZFrmzqHKXVrY5RvySP4JW2agiNgr2-uOfV34Jf4gRZ1SkH_XotWXkYjIuyMXgQK2XuEzNIemtkFw60pfVT5rBctZCw0gWu10OQ6R1__e6aT3MHdwUS-JCPgTbpxyXklHMFIBgKTOkkOso9mH5jFCwIhOPqH/s320/dell-astro2520-admin-auto-login-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;出現使用者帳戶頁面 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3k02LpTUfSpIjmnQerB9jbGhx2EiJNhq36x7OP-FYZjHZXxIoQf0te9faWP7dC1QBY270MPVR71xNGY35Ytbp4hRVziC7966kbeh64vzqcX8593lbdQjIQeM5h8pXfJkOU0balHSdW84PkE0H8176x3nUssymUW4kKCvwVyA_E3o9o-uEjbkl6AvPl8CV/s511/dell-astro2520-admin-auto-login-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;511&quot; data-original-width=&quot;472&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3k02LpTUfSpIjmnQerB9jbGhx2EiJNhq36x7OP-FYZjHZXxIoQf0te9faWP7dC1QBY270MPVR71xNGY35Ytbp4hRVziC7966kbeh64vzqcX8593lbdQjIQeM5h8pXfJkOU0balHSdW84PkE0H8176x3nUssymUW4kKCvwVyA_E3o9o-uEjbkl6AvPl8CV/s320/dell-astro2520-admin-auto-login-2.jpg&quot; width=&quot;296&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;勾選上方 &quot;Users must enter a user name and password to use this computer (使用者必須輸入使用者名稱和密碼修改這台電腦&quot;) 後點選管理員 Administrator 帳戶 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhN7DPvMyhlmSm6AHAZv5-FdvSfIuELvwz7JJAPfKsZbfLdew57kacPhbrzlTf_8YZhOuBs5ru4FlHgH6sM0tWtSvok8B4njW-ei-nkFdeiH3iZruX4m1r6H78LzlwqDtu-dvYRmhv3etrSyQZJTEUENemq52ybDUCpCvb9bLl3ap0qqumS4E1Z3WeEKgm/s509/dell-astro2520-admin-auto-login-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;509&quot; data-original-width=&quot;471&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhN7DPvMyhlmSm6AHAZv5-FdvSfIuELvwz7JJAPfKsZbfLdew57kacPhbrzlTf_8YZhOuBs5ru4FlHgH6sM0tWtSvok8B4njW-ei-nkFdeiH3iZruX4m1r6H78LzlwqDtu-dvYRmhv3etrSyQZJTEUENemq52ybDUCpCvb9bLl3ap0qqumS4E1Z3WeEKgm/s320/dell-astro2520-admin-auto-login-3.jpg&quot; width=&quot;296&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;取消勾選 &quot;Users must enter a user name and password to use this computer&quot; 後按 Apply :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnAV2e7v4PkH7CsTGG1NpZOAasYVqdDJnCkpoThmxe3fHumhPFDCGBwigoUpjzuBh-tEJZH7KaYwWtbidptwnIs2oCt_tVObrAuozSJ_CHq19JyHintZjRqZOXNdzarGwjgDOIask91nY6gEycT_HA157LKWymHEHStofMHUe0j82jWgP9MRvjJaCw2DP6/s508/dell-astro2520-admin-auto-login-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;508&quot; data-original-width=&quot;472&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnAV2e7v4PkH7CsTGG1NpZOAasYVqdDJnCkpoThmxe3fHumhPFDCGBwigoUpjzuBh-tEJZH7KaYwWtbidptwnIs2oCt_tVObrAuozSJ_CHq19JyHintZjRqZOXNdzarGwjgDOIask91nY6gEycT_HA157LKWymHEHStofMHUe0j82jWgP9MRvjJaCw2DP6/s320/dell-astro2520-admin-auto-login-4.jpg&quot; width=&quot;297&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這時系統會跳出一個 &quot;自動登入&quot; 視窗要求輸入預設帳密, 兩個框都留白不要輸入, 直接按 OK 鈕 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1LwrmhQe85mDNYRm35ZLeGeGFparPDv9Dd2Fe9pptgpQJA3zucuh2S8s7PZh-OZzCgp1i96JmI7DDVhEOzHNAVnuHQWKdzF7UNmxS09TYDyMxQBaCAydGgmtJwHZl8XPfdBX7BPaZnxS1pqznYxKUsBc3v2fxo_INKSFbSv3f9PMM3aXSqPOJfMSUjA9e/s457/dell-astro2520-admin-auto-login-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;251&quot; data-original-width=&quot;457&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1LwrmhQe85mDNYRm35ZLeGeGFparPDv9Dd2Fe9pptgpQJA3zucuh2S8s7PZh-OZzCgp1i96JmI7DDVhEOzHNAVnuHQWKdzF7UNmxS09TYDyMxQBaCAydGgmtJwHZl8XPfdBX7BPaZnxS1pqznYxKUsBc3v2fxo_INKSFbSv3f9PMM3aXSqPOJfMSUjA9e/s320/dell-astro2520-admin-auto-login-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 OK 結束設定, 重新開機就會免密碼預設登入管理員帳戶了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;這樣就完成這項浩大工程了.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;此筆電之 Win7 為英文版, 本來想再安裝繁體中文語言包, 但想說有個英文介面的電腦也不錯, 以後若要中文化可參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://www.mobile01.com/topicdetail.php?f=300&amp;amp;t=1237377&amp;amp;p=2&quot; target=&quot;_blank&quot;&gt;分享在 Windows 7 Pro 上安裝繁中語言包的方法&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://vistalizator.en.filerox.com/&quot; target=&quot;_blank&quot;&gt;https://vistalizator.en.filerox.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上筆記是這次取回水某的舊筆電系統掌控權過程的全記錄, 全部來自與 Gemini 的反覆討論與實測, 用 Lubuntu 開機隨身碟繞過 Windows 的帳密保護, 以 chntpw 軟體抹除管理員密碼, 成功地以管理員身分登入筆電, 注意, 以上作法僅供合法擁有者挽救資料之用, 不可用於非法破壞或未經授權之電腦.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2026-06-23 補充 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本篇所使用的方法只對 Windows XP , 7, 8, 8.1 有效, 對於 Windows 10,&amp;nbsp; 11 則只有在硬碟沒有開啟 BitLocker 加密&quot;, 且帳號是傳統本機帳號而非微軟線上帳號的前提下才有效. 原因如下 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Win10/11 開機通常是輸入微軟帳號的密碼或是用 PIN 碼, 指紋, 人臉 (Windows Hello)&amp;nbsp; 登入,&amp;nbsp;chntpw 的只能抹除本機帳號的密碼,&amp;nbsp;如果 Win10/11 綁定的是微軟線上帳號, 用 chntpw 去清除 Windows 底層 SAM 的密碼後, 開機時系統一連上網路就會強制向微軟伺服器驗證線上密碼, 這就會導致抹除失效, 依然進不去桌面.&amp;nbsp;&lt;/li&gt;&lt;li&gt;現在大部分套裝電腦 (如 DELL, ASUS, ACER, HP) 出廠時都會自動啟用 BitLocker 硬碟加密, 以 Ubuntu/Lubuntu 隨身碟開機後, 點進檔案管理員想找 Windows 的硬碟時, Linux 會直接跳出錯誤, 顯示 &quot;此硬碟已加密, 拒絕存取&quot;, 根本沒機會去修改 System32/config/SAM 檔.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;另外, 關於 CMOS CR2032 電池沒電導致開機後不斷發出嗶聲問題, 本來準備拆機殼更換 CMOS, 背板螺絲都拆下來了, 問 Gemini 怎麼拆背板, 才發現這不是簡單的工程, 就打消了拆機念頭. 不過我發現&lt;span style=&quot;background-color: #fcff01;&quot;&gt;開機進入 Win7 後闔蓋逼電腦進入休眠, 再掀開蓋子時它就不會叫了&lt;/span&gt;. 以後若要拿來當下載機就這麼辦吧, 只要有辦法讓它不吵就行了.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/3024098233096753114/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/3024098233096753114' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3024098233096753114'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3024098233096753114'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/dell-vostro-2520_0522440810.html' title='DELL 老筆電 Vostro 2520 修復 (成功)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBqrDDAVe73fRYZeAROQ8dkDGd2GdWXWTf5j5Ege7QXKgRqbhF8aZKTRk0M5OPqUxAnKY7ABxVLyciu8Wz9aJGurZ9wde4DSUUTGTSG-hKkkSgKt1fxMZgvAaZN97gWmtvb5OYnZm10e1jPxVc88ZaqbQdfZxCHUXVHKC2L18cIHRQR5N9ONYwAArSrSWa/s72-c/rufus-download-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-7718660752041458588</id><published>2026-06-21T23:54:07.351+08:00</published><updated>2026-06-21T23:54:07.351+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="生活"/><title type='text'>2026 年第 24 周記事</title><content type='html'>&lt;div&gt;最近很巧幾台原本堆在鄉下庫房的舊筆電陸續重新回到我的視線內, 想要將它們從廢品狀態復活. 繼成功將水某的 ASUS XC550 從 Win8 升版為 Win10 當下載機用後, 這個端午節連假我又清出水某 2013 年的 DELL Astro 2520 舊筆電, 試圖取回系統管理員控制權, 讓這台 Win7 筆電作為另一台備用的下載機. 這兩台都配備 DVD R/W 且都還能正常燒錄, 真是非常稀有.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;端午節在樓上拜完祖先後, 在隔壁庫房看到我的 12 吋應宏小筆電, 幾年前就已故障無法開機只好帶回鄉下堆放, 由於機殼是碳纖維的非常亮麗, 使用了 6 年外表幾乎跟全新的沒兩樣, 拿下樓開機發現還有過電, 但可能系統碟 SSD 毀損 Win10 開不起來. 想說帶回高雄找德源電腦幫我檢修看看, 如果換顆 SSD 重灌 Win11 後能復活 (可能的話更換鋰電), 有個備用小筆電也不錯.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在來是上周一突然掛掉的 ACER Swift 5 舊筆電, 通電後鍵盤燈有閃亮但無法開機, 這就比較棘手, 已買了精密起子組, 打算找時間拆機瞧瞧是否還有挽救的機會. 總之, 能救就救, 畢竟現在電腦騰貴, 堪用的舊電腦就湊合著用吧.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;鄉下家的芒果我已採收得差不多了, 只剩樹梢的長竿勾不到, 只好等它們成熟摔下來切半邊沒摔到的來吃. 今年雖然只套了 200 多顆, 但樹梢沒套的大概超過 400 顆, 我用長竿採摘下來讓它自然熟成, 至少有一半沒被果蠅叮, 切開來完美無損.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今年端午節拜拜只有菁菁與水某回鄉下, 二哥在趕論文, 姊姊在忙策展無法回高雄.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/7718660752041458588/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/7718660752041458588' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7718660752041458588'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/7718660752041458588'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/2026-24.html' title='2026 年第 24 周記事'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-6636438715346130554</id><published>2026-06-21T09:10:42.185+08:00</published><updated>2026-06-21T09:10:42.185+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="手機"/><category scheme="http://www.blogger.com/atom/ns#" term="筆電"/><category scheme="http://www.blogger.com/atom/ns#" term="網購"/><title type='text'>蝦皮購買 TOPFORZA 拓伏銳 115 合一精密螺絲起子組</title><content type='html'>&lt;div&gt;我的舊筆電 ACER Swift 5 上周掛點了, 想說拆開來瞧瞧哪裡出問題, 需要一組精密螺絲來拆機, 上蝦皮找到這款 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://shopee.tw/TOPFORZA%E6%8B%93%E4%BC%8F%E9%8A%B3-115%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-%E6%89%8B%E6%A9%9F%E7%AD%86%E9%9B%BB%E9%9B%BB%E8%85%A6%E7%B6%AD%E4%BF%AE%E6%8B%86%E6%A9%9F%E5%B7%A5%E5%85%B7-SD-7511-i.284730041.23415266357&quot; target=&quot;_blank&quot;&gt;TOPFORZA拓伏銳 115合一精密螺絲起子組 手機筆電電腦維修拆機工具 SD-7511&lt;/a&gt; $299&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH18kI7fryiN4sbWTl-zQgm_nNvSM1JBs-_kXOG_sCHv-_bRSqZ5X1LIbnhRXEgt3TTeS9Jqmfh_NU4K9jf6MhnzjFTDB1cLJP4G1PPW5aMXRq_c_9uohQG2RtKITGDoMtGvB3qQZpwsQdSdkSdUdxSsTcBYB-4WJh6uQvaeqmCMbkXpoEawJowxQSPH07/s2276/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%20TOPFORZA%20%E6%8B%93%E4%BC%8F%E9%8A%B3%20115%20%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;891&quot; data-original-width=&quot;2276&quot; height=&quot;125&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH18kI7fryiN4sbWTl-zQgm_nNvSM1JBs-_kXOG_sCHv-_bRSqZ5X1LIbnhRXEgt3TTeS9Jqmfh_NU4K9jf6MhnzjFTDB1cLJP4G1PPW5aMXRq_c_9uohQG2RtKITGDoMtGvB3qQZpwsQdSdkSdUdxSsTcBYB-4WJh6uQvaeqmCMbkXpoEawJowxQSPH07/s320/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%20TOPFORZA%20%E6%8B%93%E4%BC%8F%E9%8A%B3%20115%20%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMzEQH27v1MHPcFROcEgweEpvGUDnjDelgMjmoDQjdXWRqMdFb_rVWSQlrXC_UiKwzMcKccOOarxCkQi9oVIcAqALd7Eyq51-GNP3Nyr5m3au8Ath4lcJs4S8GVmcSe7GaSgiixSmTtno6d900dJSn-jdqSitxO3fQ0NYQnLsOWcrsrcVp0VnnJPeU6RnL/s1924/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%20TOPFORZA%20%E6%8B%93%E4%BC%8F%E9%8A%B3%20115%20%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;741&quot; data-original-width=&quot;1924&quot; height=&quot;123&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMzEQH27v1MHPcFROcEgweEpvGUDnjDelgMjmoDQjdXWRqMdFb_rVWSQlrXC_UiKwzMcKccOOarxCkQi9oVIcAqALd7Eyq51-GNP3Nyr5m3au8Ath4lcJs4S8GVmcSe7GaSgiixSmTtno6d900dJSn-jdqSitxO3fQ0NYQnLsOWcrsrcVp0VnnJPeU6RnL/s320/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%20TOPFORZA%20%E6%8B%93%E4%BC%8F%E9%8A%B3%20115%20%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;明華智取店取付 299 元.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/6636438715346130554/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/6636438715346130554' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6636438715346130554'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/6636438715346130554'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/topforza-115.html' title='蝦皮購買 TOPFORZA 拓伏銳 115 合一精密螺絲起子組'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH18kI7fryiN4sbWTl-zQgm_nNvSM1JBs-_kXOG_sCHv-_bRSqZ5X1LIbnhRXEgt3TTeS9Jqmfh_NU4K9jf6MhnzjFTDB1cLJP4G1PPW5aMXRq_c_9uohQG2RtKITGDoMtGvB3qQZpwsQdSdkSdUdxSsTcBYB-4WJh6uQvaeqmCMbkXpoEawJowxQSPH07/s72-c/%E8%9D%A6%E7%9A%AE%E8%B3%BC%E8%B2%B7%20TOPFORZA%20%E6%8B%93%E4%BC%8F%E9%8A%B3%20115%20%E5%90%88%E4%B8%80%E7%B2%BE%E5%AF%86%E8%9E%BA%E7%B5%B2%E8%B5%B7%E5%AD%90%E7%B5%84-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-3131070961525461790</id><published>2026-06-20T23:36:29.126+08:00</published><updated>2026-06-21T07:57:26.961+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="筆電"/><title type='text'>DELL 老筆電 Vostro 2520 修復 (失敗)</title><content type='html'>&lt;div&gt;最近把水某 2012 年買的 ASUS 舊筆電成功地從 Win8 升版到 Win10, 拿回高雄家充當下載機 (取代原先的 ACER Swift 5 舊筆電, 上周一無法開機報廢了). 今天端午連假第二天, 著手來修理水某另一台研究計畫結束後留下的十幾年老筆電 DELL&amp;nbsp; Vostro 2520 (2GB DRAM, Win7 Professional), 先拿出來擦拭一番, 雖然可正常開機, 但出現兩個問題 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;一直重複嗶嗶嗶嗶嗶五聲&amp;nbsp;&lt;/li&gt;&lt;li&gt;日期時間停在 2010/01/01, 瀏覽器因安全性問題無法連線網站&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;原因一樣都是 CMOS 鈕扣電池沒電造成, 須拆機更換. 但按右下角日期時間要更改日期時間以便能使用瀏覽器時, 卻因為沒有系統管理員密碼而被拒絕, 所以要先來解決管理員密碼問題. 為了讓電腦在修復過程中日期時間正確避免扯後腿, 先進 BIOS 更改日期時間. 以下測試都是詢問 Gemini 後依據其建議進行.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 進 BIOS 更改日期時間 :&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按開機鈕, 在筆電剛亮起畫面出現 DELL 商標時&lt;span style=&quot;background-color: #fcff01;&quot;&gt;狂按 F2&lt;/span&gt; 進入 BIOS 設定畫面,&amp;nbsp;通常在 Main 或 System Information 分頁中可找到 System Time 與 System Date,&amp;nbsp;使用鍵盤的方向鍵與 Enter 鍵將日期和時間調整為現在的正確時間後按 F10 存檔離開 BIOS.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;注意,&amp;nbsp;這個方法只要不拔掉筆電電池與電源線就能一直維持正確時間, 如果完全斷電 (拔插頭+拔大電池), 下次開機還是得進 BIOS 重新調整一次.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 更改系統管理者密碼 :&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;筆電開機, 在看到 Windows 7 正在啟動的標誌 (四色旗幟) 時, 直接拔掉電源線強制關機. 再次開機時系統會偵測到前次異常關機而出現一個黑底白字的選單, 請選擇 &quot;啟動啟動修復 (推薦)&quot;,&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQcgsvM-iNEXD2-yI0tFvSlF49DB9hwK0hg1lkusgiNx1I_zed8rd2u5zhEXk-H_dyvUChtNHIch67osjGn3_U1CdVuCYnA8q81n7uqkBODFpkdtZqmFpflD5ByVpIj_D4Wdqwc_RfHLpKNcRhT4Ns4NkiXdvqhJjY3Pn7zsu-6rqFvBLkVsAe3zkL5WNJ/s1438/astro-2520-repair-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;621&quot; data-original-width=&quot;1438&quot; height=&quot;138&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQcgsvM-iNEXD2-yI0tFvSlF49DB9hwK0hg1lkusgiNx1I_zed8rd2u5zhEXk-H_dyvUChtNHIch67osjGn3_U1CdVuCYnA8q81n7uqkBODFpkdtZqmFpflD5ByVpIj_D4Wdqwc_RfHLpKNcRhT4Ns4NkiXdvqhJjY3Pn7zsu-6rqFvBLkVsAe3zkL5WNJ/s320/astro-2520-repair-1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按 Cancel 鍵系統會掃描約 5 分鐘 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3vnCxRdzBVZOpEGY74L52pqUqEPRZKEGKY0shoW4atWKvxydHy1-QTxpHS-Dvms3EwsqAez73cZhs8w2ESM89-okcjgLomMxQTbnc0Q5vIMwkWvCdALylCa2DZiD4r_uYphbAdT9v72GoIk6GJtiHi5Bemk-PByS8kgjpz9I1NIiHok4bmfdJNx1RS7Sw/s1464/astro-2520-repair-2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;887&quot; data-original-width=&quot;1464&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3vnCxRdzBVZOpEGY74L52pqUqEPRZKEGKY0shoW4atWKvxydHy1-QTxpHS-Dvms3EwsqAez73cZhs8w2ESM89-okcjgLomMxQTbnc0Q5vIMwkWvCdALylCa2DZiD4r_uYphbAdT9v72GoIk6GJtiHi5Bemk-PByS8kgjpz9I1NIiHok4bmfdJNx1RS7Sw/s320/astro-2520-repair-2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現啟動修復失敗頁面, 按底下 View Problem Detail 鈕 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2PEfFPNtXiGUtJ-xrTXqCYKruJsGV5NaYtXFuTVdeZvaAxkcMVWgni8BxaIz6WErKINTgknmfSHacTAo-E5REILWsFYZrsdQxkntMSgDh36Jltgnh_x1-3XRYloDSjBWh0yWyFME6pGAOkWu6fgRr8T5jcHnAJB2tfimTypKiR3IRlivaOH_k3MtZ3urp/s1462/astro-2520-repair-5.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;862&quot; data-original-width=&quot;1462&quot; height=&quot;189&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2PEfFPNtXiGUtJ-xrTXqCYKruJsGV5NaYtXFuTVdeZvaAxkcMVWgni8BxaIz6WErKINTgknmfSHacTAo-E5REILWsFYZrsdQxkntMSgDh36Jltgnh_x1-3XRYloDSjBWh0yWyFME6pGAOkWu6fgRr8T5jcHnAJB2tfimTypKiR3IRlivaOH_k3MtZ3urp/s320/astro-2520-repair-5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;拉到最底下有一個隱私權 .txt 檔文件超連結, 按它會開啟記事本顯示內容 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM0RheNVJZDe7PCTPCx7bN7IworAm20WQM3rDgpWVRQdT269BtxYQE_2TdG5UEZVy2isJ-dcFPXRJkHRhFpEYGigsjHHoFo8AJbHXzxzSORnp9Aih53SfPvOX0s-49hQyKxT7GGGpWxgpMQGNW0dQek-m9LG5BwGh8RE9kHvWfYO2gvBlmE3qmekLa-c45/s1477/astro-2520-repair-3.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1108&quot; data-original-width=&quot;1477&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM0RheNVJZDe7PCTPCx7bN7IworAm20WQM3rDgpWVRQdT269BtxYQE_2TdG5UEZVy2isJ-dcFPXRJkHRhFpEYGigsjHHoFo8AJbHXzxzSORnp9Aih53SfPvOX0s-49hQyKxT7GGGpWxgpMQGNW0dQek-m9LG5BwGh8RE9kHvWfYO2gvBlmE3qmekLa-c45/s320/astro-2520-repair-3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但我們不是要閱讀或編輯此文件, 而是要利用它來偷天換日, 點選 Open :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBZ5VZNS4yFgEOn02PcoxZiELLR-a015zpu8g8zHEPdsZXwMCc4Ry1NBDcoIMgMjWO1KmcmBiLaz0pV0qkYeXxZ8rwLmvfWmahNbmc0Zg-_krE49YVAE126SL5gMbs04LumlCYOowLbhYVsc6vhwn04m_ICaDVz425QEvoJj3urgdc0mGUl3RoCS0XM7wb/s1354/astro-2520-repair-4.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;808&quot; data-original-width=&quot;1354&quot; height=&quot;191&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBZ5VZNS4yFgEOn02PcoxZiELLR-a015zpu8g8zHEPdsZXwMCc4Ry1NBDcoIMgMjWO1KmcmBiLaz0pV0qkYeXxZ8rwLmvfWmahNbmc0Zg-_krE49YVAE126SL5gMbs04LumlCYOowLbhYVsc6vhwn04m_ICaDVz425QEvoJj3urgdc0mGUl3RoCS0XM7wb/s320/astro-2520-repair-4.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;將記事本下方的檔案類型切換為 &quot;所有檔案&quot; (All files), 尋找並進入 Windows 系統資料夾 (通常在 C:\Windows\System32), 找到 Magnify (放大鏡程式), 按滑鼠右鍵選 Rename 將檔名改成 Magnify.old :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4y-RU1KEwp4CmU3iAxL2n53me6erP-EztdkLx-zAPfSWuW2pLFs8ZNA0LYGWWI-W2zOF5KX2NKJEy0SXGlJlFigvaHadynavzxyyX9i7KUDt4Dcnw8vlgVXH1LiuVamIUldyv3t5dN6WsdlVBq1IMXpOBjK0oKpLL_e0dPMugcecy7iJxSmKn5jM9WrRu/s1435/astro-2520-repair-6.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;893&quot; data-original-width=&quot;1435&quot; height=&quot;199&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4y-RU1KEwp4CmU3iAxL2n53me6erP-EztdkLx-zAPfSWuW2pLFs8ZNA0LYGWWI-W2zOF5KX2NKJEy0SXGlJlFigvaHadynavzxyyX9i7KUDt4Dcnw8vlgVXH1LiuVamIUldyv3t5dN6WsdlVBq1IMXpOBjK0oKpLL_e0dPMugcecy7iJxSmKn5jM9WrRu/s320/astro-2520-repair-6.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi64oryF5NeXE0SmIAYkq0YDvbD5HQ-Ie6SPP5QTfgXE33Ixrarjx8AN6DR5n56-Xg-xc0UuP0ixt0hJrl9dAXzudI_XkJfp75Rs-AEEH7Fe7MVY3dla90X3WFYL5bzuakyH1mDHlKEIQC3gaBtifjY5V4DkHjnMMCJnBANRDysDjQ63391EdTdDI9eumUG/s1420/astro-2520-repair-7.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;873&quot; data-original-width=&quot;1420&quot; height=&quot;197&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi64oryF5NeXE0SmIAYkq0YDvbD5HQ-Ie6SPP5QTfgXE33Ixrarjx8AN6DR5n56-Xg-xc0UuP0ixt0hJrl9dAXzudI_XkJfp75Rs-AEEH7Fe7MVY3dla90X3WFYL5bzuakyH1mDHlKEIQC3gaBtifjY5V4DkHjnMMCJnBANRDysDjQ63391EdTdDI9eumUG/s320/astro-2520-repair-7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後再尋找 cmd 程式, 按滑鼠右鍵選 Copy 建立副本 cmd - Copy :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsyGLowLFhvt3w_s0nWMA4cJfG7sGsieotcoDSiOyNLwiAAUcD7434tNw20q8VaKGvS-VXU0yn88Q5V2Mpk_9jHj4KWEyoums0CRDOT8sHRJZQCApnchElBVl6P5dYEiy_ZSAGPiavT6iW0n6YpVqalVwfxZiGZwt98EkDt_PLGZQ7Tv4Leo-wFHxv5tUu/s1168/astro-2520-repair-8.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;714&quot; data-original-width=&quot;1168&quot; height=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsyGLowLFhvt3w_s0nWMA4cJfG7sGsieotcoDSiOyNLwiAAUcD7434tNw20q8VaKGvS-VXU0yn88Q5V2Mpk_9jHj4KWEyoums0CRDOT8sHRJZQCApnchElBVl6P5dYEiy_ZSAGPiavT6iW0n6YpVqalVwfxZiGZwt98EkDt_PLGZQ7Tv4Leo-wFHxv5tUu/s320/astro-2520-repair-8.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在 cmd - Copy 上按滑鼠右鍵選 Rename, 將其檔名改成 Magnify :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ygyGu45YFwCtFiZjilOGsy3wiD3h7duXvMUXaG597lHgn6Lo8IcNjJFRvR1EXM77IfQ-0G-b5jA9T5FwW2dTceT_RN4emrNnLp9jnl6YLr7VwnZqyBkwRmlJ1YLp8k6reJ9zP25HGp_fLxBbwTX7ntQaYPNyrjA_kLqhXM9oIXyyt8o36bt45THdA3y3/s1421/astro-2520-repair-9.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;895&quot; data-original-width=&quot;1421&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ygyGu45YFwCtFiZjilOGsy3wiD3h7duXvMUXaG597lHgn6Lo8IcNjJFRvR1EXM77IfQ-0G-b5jA9T5FwW2dTceT_RN4emrNnLp9jnl6YLr7VwnZqyBkwRmlJ1YLp8k6reJ9zP25HGp_fLxBbwTX7ntQaYPNyrjA_kLqhXM9oIXyyt8o36bt45THdA3y3/s320/astro-2520-repair-9.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ8OHJbXCIZ4O6ea0kJu1n4A124Gw72vudzsGfGc_j0itK76_9g3cb-6WXiO72lVGTyaa-nW0DES1O_tZU60ImLdSCkLP0QkQvytMSt2ywHUZNjweGmgHVacXbY_XjZmDtLSGP5PxTOkJUMskhUjfF1ogj6ANk5ZoZS2xH_PehnwfH4_0B58TMA5XM84cP/s1342/astro-2520-repair-10.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;816&quot; data-original-width=&quot;1342&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ8OHJbXCIZ4O6ea0kJu1n4A124Gw72vudzsGfGc_j0itK76_9g3cb-6WXiO72lVGTyaa-nW0DES1O_tZU60ImLdSCkLP0QkQvytMSt2ywHUZNjweGmgHVacXbY_XjZmDtLSGP5PxTOkJUMskhUjfF1ogj6ANk5ZoZS2xH_PehnwfH4_0B58TMA5XM84cP/s320/astro-2520-repair-10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關閉記事本, 關閉啟動修復的所有視窗, 點擊 &quot;完成 (Finish)&quot; 鈕關閉電腦 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhayBquERFX5xmnyexbKPZ2jO8Th8nu8xwEUEwJNQr7UI0ufpGxMiw8gLyJVveiagjbnH210SAQruEs_hB0VDODjwo8EtIDNQHubyY_rhWgKpCjZNzzzFwP-NBDDKfYfMt4BUUc1c150Tv3R71Pocy_qZUSnvXe3Ke9shtZju9izp2L-wbSGnK9mXSIq1Rd/s1383/astro-2520-repair-11.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;786&quot; data-original-width=&quot;1383&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhayBquERFX5xmnyexbKPZ2jO8Th8nu8xwEUEwJNQr7UI0ufpGxMiw8gLyJVveiagjbnH210SAQruEs_hB0VDODjwo8EtIDNQHubyY_rhWgKpCjZNzzzFwP-NBDDKfYfMt4BUUc1c150Tv3R71Pocy_qZUSnvXe3Ke9shtZju9izp2L-wbSGnK9mXSIq1Rd/s320/astro-2520-repair-11.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;按電源鍵開啟電腦, 正常進入 Win7 後, 按 Window 與 + 鍵原本會開啟放大鏡, 但經過上面操作其實會開啟 CMD 視窗, 輸入 net user Pasteur 123456 將系統管理員密碼改成 123456, 預期會得到密碼設定成功訊息, 但可惜沒有, 指令被拒絕了 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcuTmA0octQw7CrgGgCYXQEQtXJByXqXQ9he8ri7q9J7dEY_lvHvKGEHxa2OFPupRERyktypT3EFic6_k_JmnpfKcMl5NphlYAjx0Zu6uIUSjiafyTRzb45T_TmPKw8LR0ZpEbRXEMHOLx4xmfwGO2rEHRvRCVvf5nchSc4EKjYqJf0dYMVzNN_crsPINo/s1386/astro-2520-repair-12.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;693&quot; data-original-width=&quot;1386&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcuTmA0octQw7CrgGgCYXQEQtXJByXqXQ9he8ri7q9J7dEY_lvHvKGEHxa2OFPupRERyktypT3EFic6_k_JmnpfKcMl5NphlYAjx0Zu6uIUSjiafyTRzb45T_TmPKw8LR0ZpEbRXEMHOLx4xmfwGO2rEHRvRCVvf5nchSc4EKjYqJf0dYMVzNN_crsPINo/s320/astro-2520-repair-12.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;詢問 Gemini 為何會失敗, 它研判是主要是因為微軟在後期推播了安全更新, 這台電腦被設定了更嚴格的安全性防禦機制,&amp;nbsp;在 Windows 7 的中後期更新中, 像 cmd.exe, magnify.exe 等這些系統核心檔案的擁有者並不是 SYSTEM 或 Administrator, 而是一個叫做 TrustedInstaller 的虛擬內建帳戶. n雖然我們在啟動修復的記事本裡把檔案重新命名了, 但在系統正常開機後, Windows 的 SFC (系統檔案檢查器) 或安全機制偵測到 magnify.exe 的數位簽章不對 (它其實是 CMD), 系統可能會採取時隔離與降權防禦,&amp;nbsp;防止它染指系統檔案.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另一個可能原因是原擁有者調高過安全層級, 本機群組原則裡可能開啟了 &quot;不允許在未登入狀態下執行具有系統管理權限的互動式命令提示字元&quot; 原則, 這項原則會直接鎖死任何想在登入畫面借調 SYSTEM 權限的後門. 總之, 忙了一整天結果是白做工, 任務失敗.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;不過 Gemini 還有一個終極殺招可以攻克系統管理員密碼問題, 它建議在別台電腦製作 Rufus + Ubuntu 隨身碟, 用 Linux 隨身碟開機後, 這台筆電的防禦機制會全部癱瘓, 然後安裝破解工具 chntpw 去編輯 system32 底下的 config 檔, 用它來修改 SAM (密碼資料庫), 直接抹除系統管理員的密碼, 下周來試試看.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2026-06-21 補充 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關於 CMOS 電池與 DRAM 擴充 :&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;此筆電的 CMOS 型號為 &lt;span style=&quot;background-color: #fcff01;&quot;&gt;CR2032&lt;/span&gt; 鈕扣電池, 但並非像一般桌機那樣主機板上有個電池座, 而是用有焊點的兩片小金屬片焊上紅 (正極) 黑&amp;nbsp;(負極) 線, 一上一下夾住電池後用電氣膠布緊緊纏住固定, 線頭為一個插頭插在主機板座上. 所以更換時要先把插頭拔下, 再把包覆的膠布拆下, 取出兩個小金屬片夾住新電池的外殼上 (紅線接平的有＋號那面, 黑線接有顆粒凸起的那面), 再用電器膠布緊緊纏覆後把插頭插回主機板.&amp;nbsp;&lt;/li&gt;&lt;li&gt;這台筆電內部總共有 2 個 DRAM 記憶體插槽,&amp;nbsp;單槽最高支援 4GB, 雙槽總共最大可擴充至 8GB,&amp;nbsp;目前只插一條 2GB, 可購買 DDR3 或 DDR3L 類型之筆電專用薄型短卡 SODIMM 記憶體來擴充 (1600 MHz PC3-12800 或 PC3L-12800), 建議買 DDR3L 1.35V, 因為低電壓記憶體通常向下相容 1.5V, 相容性最穩. 不過 Win7 32 位元作業系統在架構上最高只能讀取到大約 3.25GB 到 3.5GB 左右的記憶體, 即使再買一排 2GB DRAM 來插滿到 4GB, 系统顯示上會寫 &quot;4.00 GB (3.25 GB 可用)&quot;, 剩下的幾百 MB 會被浪費掉, 無法全額發揮 4GB 容量.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;此筆電背板使用一般螺絲, 拆卸方便無須購買特殊起子.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/3131070961525461790/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/3131070961525461790' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3131070961525461790'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/3131070961525461790'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/dell-vostro-2520.html' title='DELL 老筆電 Vostro 2520 修復 (失敗)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQcgsvM-iNEXD2-yI0tFvSlF49DB9hwK0hg1lkusgiNx1I_zed8rd2u5zhEXk-H_dyvUChtNHIch67osjGn3_U1CdVuCYnA8q81n7uqkBODFpkdtZqmFpflD5ByVpIj_D4Wdqwc_RfHLpKNcRhT4Ns4NkiXdvqhJjY3Pn7zsu-6rqFvBLkVsAe3zkL5WNJ/s72-c/astro-2520-repair-1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-174276549968290103</id><published>2026-06-19T01:14:47.844+08:00</published><updated>2026-06-21T08:15:59.584+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Node.js"/><category scheme="http://www.blogger.com/atom/ns#" term="Raspberry Pi"/><category scheme="http://www.blogger.com/atom/ns#" term="樹莓派"/><title type='text'>OpenClaw 學習筆記 : 在樹莓派 Pi 4 安裝 OpenClaw (一)</title><content type='html'>&lt;div&gt;今天在樹莓派 Pi 4B 上安裝 OpenClaw, 由於只有 8GB DRAM, 且樹莓派 GPU 無法用來跑本地模型, 用 CPU 跑的話吐 token 的速度會很慢 (且只能跑 3B 以下的小模型), 必須使用雲端模型跑龍蝦才會順暢, 本篇測試先安裝 nvm 工具, 然後用 nvm 安裝 Node.js 24, 最後用 Node.js 的 npm 安裝 OpenClaw.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 安裝 nvm 版本管理工具 :&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;不要用 apt install nodejs 來安裝 Node.js, 因為 Debian 官方套件庫的版本通常太舊, 建議用 nvm 工具來安裝符合 OpenClaw 要求版本的 Node.js, 最低版本為 Node 22.16+, 但官方強烈推薦安裝 Node 24.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;nvm 安裝指令如下, 使用管線串接的兩個指令, 前者先用 curl 指令下載 nvm 安裝指令稿 install.sh, 並且用 -o- 參數指定下載後不存成檔案, 而是直接把檔案的原始碼內容顯示在螢幕上, 並透過管線丟給 bash shell 執行. 不存檔的好處是免去賦予它執行權限與執行完要刪除的麻煩 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; % Total&amp;nbsp; &amp;nbsp; % Received % Xferd&amp;nbsp; Average Speed&amp;nbsp; &amp;nbsp;Time&amp;nbsp; &amp;nbsp; Time&amp;nbsp; &amp;nbsp; &amp;nbsp;Time&amp;nbsp; Current&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dload&amp;nbsp; Upload&amp;nbsp; &amp;nbsp;Total&amp;nbsp; &amp;nbsp;Spent&amp;nbsp; &amp;nbsp; Left&amp;nbsp; Speed&lt;/div&gt;&lt;div&gt;100 16555&amp;nbsp; 100 16555&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp;0&amp;nbsp; 11793&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; 0:00:01&amp;nbsp; 0:00:01 --:--:-- 11799&lt;/div&gt;&lt;div&gt;=&amp;gt; Downloading nvm from git to &#39;/home/pi/.config/nvm&#39;&lt;/div&gt;&lt;div&gt;=&amp;gt; 正複製到 &#39;/home/pi/.config/nvm&#39;...&lt;/div&gt;&lt;div&gt;remote: Enumerating objects: 436, done.&lt;/div&gt;&lt;div&gt;remote: Counting objects: 100% (436/436), done.&lt;/div&gt;&lt;div&gt;remote: Compressing objects: 100% (363/363), done.&lt;/div&gt;&lt;div&gt;remote: Total 436 (delta 61), reused 196 (delta 45), pack-reused 0 (from 0)&lt;/div&gt;&lt;div&gt;接收物件中: 100% (436/436), 427.36 KiB | 12.00 KiB/s, 完成.&lt;/div&gt;&lt;div&gt;處理 delta 中: 100% (61/61), 完成.&lt;/div&gt;&lt;div&gt;* （開頭指標分離於 FETCH_HEAD）&lt;/div&gt;&lt;div&gt;&amp;nbsp; master&lt;/div&gt;&lt;div&gt;=&amp;gt; Compressing and cleaning up git repository&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;=&amp;gt; Appending nvm source string to /home/pi/.bashrc&lt;/div&gt;&lt;div&gt;=&amp;gt; Appending bash_completion source string to /home/pi/.bashrc&lt;/div&gt;&lt;div&gt;=&amp;gt; Close and reopen your terminal to start using nvm or run the following to use it now:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;export NVM_DIR=&quot;$HOME/.config/nvm&quot;&lt;/div&gt;&lt;div&gt;[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/nvm.sh&quot;&amp;nbsp; # This loads nvm&lt;/div&gt;&lt;div&gt;[ -s &quot;$NVM_DIR/bash_completion&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/bash_completion&quot;&amp;nbsp; # This loads nvm bash_completion&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;nvm 的安裝腳本 install.sh 會把 nvm 的主程式下載到家目錄 ~/.nvm/ 下, 然後在系統設定檔 ~/.bashrc (這是每次開啟新終端機時會自動讀取的檔案) 的最後面悄悄寫入了幾行 nvm 的環境變數路徑.&amp;nbsp;但是目前正在使用的這個終端機視窗是在安裝 nvm 之前就打開的, 它並不知道設定檔已經被修改了, 所以如果馬上輸入 nvm 指令會找不到 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;nvm --version&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;bash: nvm：指令找不到&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;只要用 source 重新讀取系統設定檔 ~/.bashrc 強制目前的終端機視窗立刻載入 nvm 的環境變數, 這樣就可以找到 nvm 指令了 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;source ~/.bashrc&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;nvm --version&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;0.39.7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;2. 安裝 Node.js :&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;有了 nvm 後就可用它來安裝 Node.js, 如前所述, OpenClaw 要求最低 Node 版本為 v22, 建議安裝 Node 24 :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;nvm install 24&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;Downloading and installing node v24.17.0...&lt;/div&gt;&lt;div&gt;Downloading https://nodejs.org/dist/v24.17.0/node-v24.17.0-linux-arm64.tar.xz...&lt;/div&gt;&lt;div&gt;#############################################&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 62.8%curl: (56) Recv failure: 連線被對方重設&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Binary download from https://nodejs.org/dist/v24.17.0/node-v24.17.0-linux-arm64.tar.xz failed, trying source.&lt;/div&gt;&lt;div&gt;grep: /home/pi/.config/nvm/.cache/bin/node-v24.17.0-linux-arm64/node-v24.17.0-linux-arm64.tar.xz: 沒有此一檔案或目錄&lt;/div&gt;&lt;div&gt;Provided file to checksum does not exist.&lt;/div&gt;&lt;div&gt;Binary download failed, &lt;span style=&quot;background-color: #fcff01;&quot;&gt;trying source&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;Detected that you have 4 CPU core(s)&lt;/div&gt;&lt;div&gt;Running with &lt;span style=&quot;background-color: #fcff01;&quot;&gt;3 threads&lt;/span&gt; to speed up the build&lt;/div&gt;&lt;div&gt;Downloading https://nodejs.org/dist/v24.17.0/node-v24.17.0.tar.xz...&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但這指令執行了很久 (超過半小時), 我把上面訊息貼給 Gemini 分析, 它要我立刻按 Ctrl + C 終止執行, 因為台灣連到 Node.js 官方伺服器的網路有時候不太穩定, 下載到 62.8% 時斷線了, 觸發致命的原始碼編譯 (trying source), 因為二進位預編譯檔下載失敗, 所以 nvm 絕望之下決定下載 .tar.xz 原始碼來編譯 (正開啟 3 個執行緒準備進行編譯), 這會讓 CPU 100% 狂飆而且需要耗時 2 到 4 個小時, 甚至可能因為記憶體不足而當機, 所以要我趕快結束程序.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gemini 建議我用 nvm 從亞洲的鏡像站 (Mirror) 去抓已經打包好的二進位檔 (淘寶/華為鏡像站), 速度會快上百倍, 而且絕對不會觸發原始碼編譯, 指令如下 :&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node nvm install 24&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Downloading and installing node v24.17.0...&lt;/div&gt;&lt;div&gt;Downloading https://npmmirror.com/mirrors/node/v24.17.0/node-v24.17.0-linux-arm64.tar.xz...&lt;/div&gt;&lt;div&gt;######################################################################### 100.0%######################################################################### 100.0%&lt;/div&gt;&lt;div&gt;Computing checksum with sha256sum&lt;/div&gt;&lt;div&gt;Checksums matched!&lt;/div&gt;&lt;div&gt;Now &lt;span style=&quot;background-color: #fcff01;&quot;&gt;using node v24.17.0&lt;/span&gt; (npm v11.13.0)&lt;/div&gt;&lt;div&gt;Creating default alias: default -&amp;gt; 24 (-&amp;gt; v24.17.0)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;果然不到 10 分鐘就完成了, 檢查 Node.js 版本 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;node --version&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;v24.17.0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm --version&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;11.13.0&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣便完成 Node.js 的安裝了. 為了以後更新或安裝其他 Node.js 版本時不再卡住, Gemini 建議我把這個鏡像站網址永久加進 .bashrc 中 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;echo &#39;export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node&#39; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;此指令會將鏡像站網址寫入系統設定檔, 用 source&amp;nbsp;重新載入設定檔 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;source ~/.bashrc&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;3. 安裝 OpenClaw :&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;有了 Node.js 後本來想依照阿亮老師大作 &quot;&lt;a href=&quot;https://www.books.com.tw/products/0011049125&quot; target=&quot;_blank&quot;&gt;養成你的 AI 龍蝦管家&lt;/a&gt;&quot; 一書中介紹的方式, 用 npm install 指令安裝 :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;npm install -g openclaw@latest&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但那是在 Windows 的 Power Shell 底下, 環境不同, 所以我先跟 Gemini 討論在樹莓派底下是否可以照做, 回答是可以, 但不建議, 理由是 -g 參數會進行全域安裝, 使 OpenClaw 被塞進 nvm 的深層隱藏目錄中, 這會讓我們很難找到它的 .env 檔案在哪裡, 增加配置的難度, 特別是當要設定大模型的 API Key 時, 會被迫在終端機用很長的環境變數來啟動 OpenClaw.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其次, 有很多新功能以及 Playwright 瀏覽器自動化依賴的初始化腳本在全域安裝模式下容易因為路徑問題噴錯.&amp;nbsp;OpenClaw 在近期的版本更新中更傾向於讓使用者以 git clone 建立獨立專案目錄的方式來運行. Gemini 建議的安裝程序如下 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;(1).&amp;nbsp;安裝 Linux 編譯基礎套件 (Build Tools) :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;用 npm install 安裝 OpenClaw 時, 有些底層的套件 (例如處理加密, 網路或硬體效能的最佳化模組) 會需要在樹莓派上進行 C/C++ 編譯, 先用下列兩個指令把編譯工具補齊 :&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;sudo apt update&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;sudo apt install build-essential python3 libssl-dev -y&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;sudo apt update&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;已有:1 http://deb.debian.org/debian bookworm InRelease&lt;/div&gt;&lt;div&gt;下載:2 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]&lt;/div&gt;&lt;div&gt;下載:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;下載:4 http://archive.raspberrypi.com/debian bookworm InRelease [55.0 kB]&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;下載:5 http://archive.raspberrypi.com/debian bookworm/main arm64 Packages [575 kB]&lt;/div&gt;&lt;div&gt;下載:6 http://archive.raspberrypi.com/debian bookworm/main armhf Packages [575 kB]&lt;/div&gt;&lt;div&gt;取得 1,309 kB 用了 12s (108 kB/s)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;正在讀取套件清單... 完成&lt;/div&gt;&lt;div&gt;正在重建相依關係... 完成&lt;/div&gt;&lt;div&gt;正在讀取狀態資料... 完成&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;189 packages can be upgraded. Run &#39;apt list --upgradable&#39; to see them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;sudo apt install build-essential python3 libssl-dev -y&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;正在讀取套件清單... 完成&lt;/div&gt;&lt;div&gt;正在重建相依關係... 完成&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;正在讀取狀態資料... 完成&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;build-essential is already the newest version (12.9).&lt;/div&gt;&lt;div&gt;python3 is already the newest version (3.11.2-1+b1).&lt;/div&gt;&lt;div&gt;python3 被設定為手動安裝。&lt;/div&gt;&lt;div&gt;建議套件：&lt;/div&gt;&lt;div&gt;&amp;nbsp; libssl-doc&lt;/div&gt;&lt;div&gt;下列【新】套件將會被安裝：&lt;/div&gt;&lt;div&gt;&amp;nbsp; libssl-dev&lt;/div&gt;&lt;div&gt;下列套件將會被升級：&lt;/div&gt;&lt;div&gt;&amp;nbsp; libssl3 openssl&lt;/div&gt;&lt;div&gt;升級 2 個，新安裝 1 個，移除 0 個，有 187 個未被升級。&lt;/div&gt;&lt;div&gt;需要下載 7,342 kB 的套件檔。&lt;/div&gt;&lt;div&gt;此操作完成之後，會多佔用 13.0 MB 的磁碟空間。&lt;/div&gt;&lt;div&gt;下載:1 http://archive.raspberrypi.com/debian bookworm/main arm64 libssl3 arm64 3.0.20-1~deb12u2+rpt1 [2,384 kB]&lt;/div&gt;&lt;div&gt;下載:2 http://archive.raspberrypi.com/debian bookworm/main arm64 libssl-dev arm64 3.0.20-1~deb12u2+rpt1 [3,452 kB]&lt;/div&gt;&lt;div&gt;下載:3 http://archive.raspberrypi.com/debian bookworm/main arm64 openssl arm64 3.0.20-1~deb12u2+rpt1 [1,506 kB]&lt;/div&gt;&lt;div&gt;取得 7,342 kB 用了 1min 26s (85.7 kB/s)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;apt-listchanges: 讀取改變紀錄(changelogs)...&lt;/div&gt;&lt;div&gt;（讀取資料庫 ... 目前共安裝了 131003 個檔案和目錄。）&lt;/div&gt;&lt;div&gt;正在準備解包 .../libssl3_3.0.20-1~deb12u2+rpt1_arm64.deb……&lt;/div&gt;&lt;div&gt;Unpacking libssl3:arm64 (3.0.20-1~deb12u2+rpt1) over (3.0.18-1~deb12u1+rpt1) ...&lt;/div&gt;&lt;div&gt;選取了原先未選的套件 libssl-dev:arm64。&lt;/div&gt;&lt;div&gt;正在準備解包 .../libssl-dev_3.0.20-1~deb12u2+rpt1_arm64.deb……&lt;/div&gt;&lt;div&gt;Unpacking libssl-dev:arm64 (3.0.20-1~deb12u2+rpt1) ...&lt;/div&gt;&lt;div&gt;正在準備解包 .../openssl_3.0.20-1~deb12u2+rpt1_arm64.deb……&lt;/div&gt;&lt;div&gt;Unpacking openssl (3.0.20-1~deb12u2+rpt1) over (3.0.18-1~deb12u1+rpt1) ...&lt;/div&gt;&lt;div&gt;設定 libssl3:arm64 (3.0.20-1~deb12u2+rpt1) ...&lt;/div&gt;&lt;div&gt;設定 libssl-dev:arm64 (3.0.20-1~deb12u2+rpt1) ...&lt;/div&gt;&lt;div&gt;設定 openssl (3.0.20-1~deb12u2+rpt1) ...&lt;/div&gt;&lt;div&gt;執行 man-db (2.11.2-2) 的觸發程式……&lt;/div&gt;&lt;div&gt;執行 libc-bin (2.36-9+rpt2+deb12u13) 的觸發程式……&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;&lt;b&gt;(2). 下載並安裝 OpenClaw&amp;nbsp;:&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;下面指令會略過 GitHub 驗證, 從雲端 (GitHub) 上的 OpenClaw 開源專案完整地複製一份複本到樹莓派使用者目錄下的 openclaw 子目錄, 執行後首先會建立一個&amp;nbsp;~/openclaw 資料夾來存放 OpenClaw 專案 (主程式, 設定範例檔, 與開發者寫好的各種自動化腳本等) :&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;git clone https://github.com/&lt;span style=&quot;background-color: #fcff01;&quot;&gt;openclaw&lt;/span&gt;/openclaw.git&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;正複製到 &#39;openclaw&#39;...&lt;/div&gt;&lt;div&gt;remote: Enumerating objects: 880235, done.&lt;/div&gt;&lt;div&gt;remote: Counting objects: 100% (724/724), done.&lt;/div&gt;&lt;div&gt;remote: Compressing objects: 100% (300/300), done.&lt;/div&gt;&lt;div&gt;remote: Total 880235 (delta 544), reused 426 (delta 424), pack-reused 879511 (from 3)&lt;/div&gt;&lt;div&gt;接收物件中: 100% (880235/880235), 1.48 GiB | 707.00 KiB/s, 完成.&lt;/div&gt;&lt;div&gt;處理 delta 中: 100% (636087/636087), 完成.&lt;/div&gt;&lt;div&gt;正在更新檔案: 100% (20260/20260), 完成.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;完成後切換到 ~/openclaw 資料夾下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;pi@pi4b:~ $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;cd openclaw&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;瀏覽專案內容 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~/openclaw $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;ls -ls&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;總用量 4288&lt;/div&gt;&lt;div&gt;&amp;nbsp; 36 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;36751&amp;nbsp; 6月 18 21:26 AGENTS.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; 48 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;48650&amp;nbsp; 6月 18 21:26 appcast.xml&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;8 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 apps&lt;/div&gt;&lt;div&gt;2528 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi 2587998&amp;nbsp; 6月 18 21:26 CHANGELOG.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;0 lrwxrwxrwx&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9&amp;nbsp; 6月 18 21:26 CLAUDE.md -&amp;gt; AGENTS.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;3 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 config&lt;/div&gt;&lt;div&gt;&amp;nbsp; 16 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;15055&amp;nbsp; 6月 18 21:26 CONTRIBUTING.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;2 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 deploy&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;8 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; 5580&amp;nbsp; 6月 18 21:26 docker-compose.yml&lt;/div&gt;&lt;div&gt;&amp;nbsp; 20 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;19322&amp;nbsp; 6月 18 21:26 Dockerfile&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; 30 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 docs&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x 140 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 extensions&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;773&amp;nbsp; 6月 18 21:26 fly.toml&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;2 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 git-hooks&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; 1170&amp;nbsp; 6月 18 21:26 LICENSE&lt;/div&gt;&lt;div&gt;&amp;nbsp;128 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; 130569&amp;nbsp; 6月 18 21:26 npm-shrinkwrap.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; 24 -rwxr-xr-x&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;20489&amp;nbsp; 6月 18 21:26 openclaw.mjs&lt;/div&gt;&lt;div&gt;&amp;nbsp;112 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; 110947&amp;nbsp; 6月 18 21:26 package.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; 23 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 packages&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;2 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 patches&lt;/div&gt;&lt;div&gt;&amp;nbsp;452 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; 461179&amp;nbsp; 6月 18 21:26 pnpm-lock.yaml&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; 3898&amp;nbsp; 6月 18 21:26 pnpm-workspace.yaml&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;4 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 qa&lt;/div&gt;&lt;div&gt;&amp;nbsp; 88 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;86929&amp;nbsp; 6月 18 21:26 README.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;449&amp;nbsp; 6月 18 21:26 render.yaml&lt;/div&gt;&lt;div&gt;&amp;nbsp; 20 drwxr-xr-x&amp;nbsp; 19 pi pi&amp;nbsp; &amp;nbsp;20480&amp;nbsp; 6月 18 21:26 scripts&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;3 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 security&lt;/div&gt;&lt;div&gt;&amp;nbsp; 36 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;35289&amp;nbsp; 6月 18 21:26 SECURITY.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; 59 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 skills&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; 70 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 src&lt;/div&gt;&lt;div&gt;&amp;nbsp;616 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; 627926&amp;nbsp; 6月 18 21:26 taxonomy.yaml&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; 10 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 test&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; 1575&amp;nbsp; 6月 18 21:26 THIRD_PARTY_NOTICES.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;339&amp;nbsp; 6月 18 21:26 tsconfig.core.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;139&amp;nbsp; 6月 18 21:26 tsconfig.core.projects.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;511&amp;nbsp; 6月 18 21:26 tsconfig.extensions.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;151&amp;nbsp; 6月 18 21:26 tsconfig.extensions.projects.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; 12 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;12257&amp;nbsp; 6月 18 21:26 tsconfig.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;965&amp;nbsp; 6月 18 21:26 tsconfig.plugin-sdk.dts.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;144&amp;nbsp; 6月 18 21:26 tsconfig.projects.json&lt;/div&gt;&lt;div&gt;&amp;nbsp; 32 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp;31151&amp;nbsp; 6月 18 21:26 tsdown.config.ts&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 drwxr-xr-x&amp;nbsp; &amp;nbsp;6 pi pi&amp;nbsp; &amp;nbsp; 4096&amp;nbsp; 6月 18 21:26 ui&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;8 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; 5984&amp;nbsp; 6月 18 21:26 VISION.md&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;4 -rw-r--r--&amp;nbsp; &amp;nbsp;1 pi pi&amp;nbsp; &amp;nbsp; &amp;nbsp;241&amp;nbsp; 6月 18 21:26 vitest.config.ts&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後用 npm install 指令安裝 OpenClaw :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;pi@pi4b:~/openclaw $ &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm install&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; openclaw@2026.6.8 preinstall&lt;/div&gt;&lt;div&gt;&amp;gt; node scripts/preinstall-package-manager-warning.mjs&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[openclaw] &lt;span style=&quot;background-color: #fcff01;&quot;&gt;warning: detected npm for install lifecycle&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;[openclaw] this repo works best with pnpm; npm-compatible installs are slower and much larger here.&lt;/div&gt;&lt;div&gt;[openclaw] prefer: corepack pnpm install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; openclaw@2026.6.8 postinstall&lt;/div&gt;&lt;div&gt;&amp;gt; node scripts/postinstall-bundled-plugins.mjs&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; openclaw@2026.6.8 prepare&lt;/div&gt;&lt;div&gt;&amp;gt; node scripts/prepare-git-hooks.mjs&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;added 728 packages, and audited 729 packages in 6m&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;217 packages are looking for funding&lt;/div&gt;&lt;div&gt;&amp;nbsp; run `npm fund` for details&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;2 moderate severity vulnerabilities&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To address all issues (including breaking changes), run:&lt;/div&gt;&lt;div&gt;&amp;nbsp; npm audit fix --force&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Run `npm audit` for details.&lt;/div&gt;&lt;div&gt;npm notice&lt;/div&gt;&lt;div&gt;npm notice New minor version of npm available! 11.13.0 -&amp;gt; 11.17.0&lt;/div&gt;&lt;div&gt;npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.17.0&lt;/div&gt;&lt;div&gt;npm notice To update run: npm install -g npm@11.17.0&lt;/div&gt;&lt;div&gt;npm notice&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;看到 &quot;added 728 packages, and audited 729 packages in 6m&quot; (在 6 分鐘內成功加入了 728 個套件) 就表示所有的程式碼依賴項目都已經完整下載並安裝到樹莓派上了. 過程中出現一個可以忽略的 warning (有比 npm 速度更快的 pnpm 可用), 以及 2 個中度安全漏洞, 對於沒有要上線當作大型商業網站使用的專案來說可以忽略它.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上便完成 OpenClaw 安裝了, 先關機用 Win32DiskImager 製作映像檔備份系統, 再進行接下來的OpenClaw 設定作業.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/174276549968290103/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/174276549968290103' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/174276549968290103'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/174276549968290103'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/openclaw-pi-4b-openclaw.html' title='OpenClaw 學習筆記 : 在樹莓派 Pi 4 安裝 OpenClaw (一)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4877487320781767952.post-1799881065157720758</id><published>2026-06-18T00:19:08.634+08:00</published><updated>2026-06-18T00:19:08.635+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Claude Code"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini CLI"/><category scheme="http://www.blogger.com/atom/ns#" term="Node.js"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦"/><title type='text'>MSI 電競桌機維修 (五)</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;前一篇我已安裝好 Scoop 工具並用它來安裝系統全域 Python 執行環境, 管理虛擬環境與專案的 uv 工具, Git 與 nvm 以及 Node.js, 本篇要在此基礎上安裝&amp;nbsp; Claude Code 與 Gemini CLI.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本系列之前的文章參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (一)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_01925427461.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (二)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi-game-ready.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (三)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;&lt;a href=&quot;https://yhhuang1966.blogspot.com/2026/06/msi_023469446.html&quot; target=&quot;_blank&quot;&gt;MSI 電競桌機維修 (四)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd; color: #990000;&quot;&gt;1. 安裝 Claude Code :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;在 Windows 上可以安裝原生版 Claude Code 軟體並使用 Git 附帶的 git-bash 指令列作為介面, 參考 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;a href=&quot;https://yhhuang1966.blogspot.com/2025/12/windows-claude-code.html&quot; target=&quot;_blank&quot;&gt;在 Windows 上安裝原生版 Claude Code&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在前一篇測試中已用 Scoop 安裝了 git, 在安裝原生版 Claude Code 之前必須先把 git-bash 的程式位置設在特定的使用者環境變數 CLAUDE_CODE_GIT_BASH_PATH 中, Claude Code 會固定找尋此環境變數來取得 git-bash 程式位置.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我照之前做法用 where.exe 查詢 git-bash 程式的位置 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;where.exe bash&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;資訊: 找不到提供模式的檔案。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;詢問 Gemini 原因, 原來是 Scoop 還沒幫 git-bash 生成墊片 (Shim), 因為 Scoop 預設只會幫該軟體的核心指令建立墊片, 而 git-bash.exe 或 bash.exe 這種附屬的小工具, Scoop 預設不會把它們放進全域的 shims 資料夾裡, where.exe 是一個很笨的工具, 它只會去 Windows 系統的 PATH 捷徑資料夾裡撈東西, 既然 Scoop 預設沒有幫 git-bash.exe 建立全域捷徑, where.exe 自然就回報找不到.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其實用 scoop which git 指令就可以查到 git 的位置了 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;scoop which git&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;~\scoop\apps\git\current\cmd\git.exe&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;注意, 這位置開頭的波浪 ~ 雖然在 Power Shell 視窗可以被辨識 (代表我的使用者目錄 : C:\Users\tony1), 但 Claude Code 作為一個外部引擎去讀取環境變數時可能會看不懂, 必須置換為使用者路徑, 並且將 git.exe 改成 git-bash.exe, 完整的絕對位置如下 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\git\current\cmd\&lt;span style=&quot;background-color: #fcff01;&quot;&gt;git-bash.exe&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接下來可以像之前的做法那樣, 手動到系統設定中新增一個使用者環境變數 CLAUDE_CODE_GIT_BASH_PATH 並設為此位置設定, 也可以用下列 PS 指令一鍵完成設定 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;[Environment]::SetEnvironmentVariable(&quot;CLAUDE_CODE_GIT_BASH_PATH&quot;, &quot;C:\Users\tony1\scoop\apps\git\current\git-bash.exe&quot;, &quot;User&quot;)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;設定好後&lt;span style=&quot;background-color: #fcff01;&quot;&gt;關閉 PS 視窗重開新的&lt;/span&gt;, 用下列指令檢查環境變數是否正確 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;$env:CLAUDE_CODE_GIT_BASH_PATH&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\git\current\git-bash.exe&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣便可以在新開的 PS 視窗安裝 Windows 原生版的 Claude Code 了 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;irm https://claude.ai/install.ps1 | iex&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Setting up Claude Code...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;√ Claude Code successfully installed!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Version: &lt;span style=&quot;background-color: #fcff01;&quot;&gt;2.1.179&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Location: C:\Users\tony1\.local\bin\claude.exe&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Next: Run claude --help to get started&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;‼ &lt;span style=&quot;background-color: #fcff01;&quot;&gt;Setup notes&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; ● Native installation exists but &lt;span style=&quot;background-color: #fcff01;&quot;&gt;C:\Users\tony1\.local\bin&lt;/span&gt; is not in your PATH. Add it by opening: System Properties →&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; Environment Variables → Edit User PATH → New → Add the path above. Then restart your terminal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;✅ Installation complete!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;版本已經來到 v2.1.179 了. 請注意在 Setup notes 中有提醒要將 Claude Code 的執行檔目錄路徑加入使用者環境變數 Path 中, 這樣以後才能在任何路徑下執行 Claude Code.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;當然可以到系統設定中手動將 C:\Users\tony1\.local\bin 加到 使用者環境變數 Path 的最後面, 也可以用下面兩個 PS 指令設定 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;$oldPath = [Environment]::GetEnvironmentVariable(&quot;PATH&quot;, &quot;User&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這指令是抓取目前登入使用者 (tony1) 現有的 User PATH 設定後儲存在 $oldPath 變數中.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;[Environment]::SetEnvironmentVariable(&quot;PATH&quot;, &quot;$oldPath;C:\Users\tony1\.local\bin&quot;, &quot;User&quot;)&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第二個指令是把新路徑接到舊路徑後面 (用分號隔開) 並寫回 Windows 系統的使用者環境變數 Path 中.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢查環境變數異動須重開一個 PS 視窗, 輸入下列指令 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;$env:PATH -split &quot;;&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;C:\WINDOWS\system32&lt;/div&gt;&lt;div&gt;C:\WINDOWS&lt;/div&gt;&lt;div&gt;C:\WINDOWS\System32\Wbem&lt;/div&gt;&lt;div&gt;C:\WINDOWS\System32\WindowsPowerShell\v1.0\&lt;/div&gt;&lt;div&gt;C:\WINDOWS\System32\OpenSSH\&lt;/div&gt;&lt;div&gt;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR&lt;/div&gt;&lt;div&gt;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\nvm\current&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\nvm\current\nodejs\nodejs&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\git\current\cmd&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\persist\uv\tools\shims&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\persist\uv\python\shims&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\python\current\Scripts&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\apps\python\current&lt;/div&gt;&lt;div&gt;C:\Users\tony1\scoop\shims&lt;/div&gt;&lt;div&gt;C:\Users\tony1\AppData\Local\Microsoft\WindowsApps&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;C:\Users\tony1\.local\bin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後一個便是 Claude Code 的執行檔目錄位置.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;輸入 claude 按 Enter 出現如下畫面 :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL11axT-wNyoXyX-nkxQom9IUDnAaQteLh9m2W4VsGDLRjV7qgcm9WqBUM1g6h4jcMZLDDERNn6qgLQdV5-6iPjW_ce0_UocoFeJVt0lWJpxc1NRdQNAJVE8j5iU6Sv0TPkAGz65DrT_Fk4LalFLJjXAIWQEeydz11R7a4b6_HnhHcit3fVhYZDiA7gSRf/s742/claude-code-install-ok.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;742&quot; data-original-width=&quot;580&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL11axT-wNyoXyX-nkxQom9IUDnAaQteLh9m2W4VsGDLRjV7qgcm9WqBUM1g6h4jcMZLDDERNn6qgLQdV5-6iPjW_ce0_UocoFeJVt0lWJpxc1NRdQNAJVE8j5iU6Sv0TPkAGz65DrT_Fk4LalFLJjXAIWQEeydz11R7a4b6_HnhHcit3fVhYZDiA7gSRf/s320/claude-code-install-ok.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣便完成 Claude Code 的安裝了. 接下來安裝 Gemini CLI.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color: #990000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fce5cd;&quot;&gt;2. 用 npm 安裝 Gemini CLI :&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;我們在前一篇測試中已安裝好 Node.js, 接下來參考之前的作法, 在 PS 視窗輸入下列 npm 指令安裝 Gemini CLI :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm install -g @google/gemini-cli&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;changed 7 packages in 2s&lt;/div&gt;&lt;div&gt;npm warn allow-scripts 2 packages have install scripts not yet covered by allowScripts:&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&amp;nbsp; &amp;nbsp;@github/keytar@7.10.6 (install: node script/install.js || npm run build)&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&amp;nbsp; &amp;nbsp;node-pty@1.1.0 (install: node scripts/prebuild.js || node-gyp rebuild; postinstall: node scripts/post-install.js)&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&lt;/div&gt;&lt;div&gt;npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts &amp;lt;pkg&amp;gt;` to allow.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;出現警告而未能安裝 Gemini CLI, 我將上面訊息貼給 Gemini, 原來 @google/gemini-cli 這個工具為了能在終端機裡呈現帥氣的互動介面需依賴兩個非常硬核的底層套件 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;node-pty : 負責模擬 Linux/Unix 終端機介面.&lt;/li&gt;&lt;li&gt;@github/keytar : 負責安全地把 Google API Key 存進 Windows 的憑證保險箱.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;在安裝 @google/gemini-cli 時, 它會執行編譯腳本動作, 將此二套件的 C++ 程式碼編譯成 Windows 的二進位檔,&amp;nbsp;新版的 npm 為了防止惡意軟體偷偷在背後跑腳本, 預設會攔截這些行為跳出警告.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;要解除此攔截需先用下列指令修改 npm 的全域設定, 強迫允許執行腳本 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm config set ignore-scripts false --global&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後用下列指令 --foreground-scripts 參數繞過權限管理員, 強迫 Windows 彈出編譯視窗, 直接在最前面把 node-pty 和 keytar 編譯出來後, 直接進行全域強制覆蓋安裝 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm install -g @google/gemini-cli &lt;span style=&quot;background-color: #fcff01;&quot;&gt;--foreground-scripts&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; @github/keytar@7.10.6 install&lt;/div&gt;&lt;div&gt;&amp;gt; node script/install.js || npm run build&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; node-pty@1.1.0 install&lt;/div&gt;&lt;div&gt;&amp;gt; node scripts/prebuild.js || node-gyp rebuild&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;gt; Checking prebuilds...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; node-pty@1.1.0 postinstall&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; node scripts/post-install.js&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; Cleaning release folder...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;gt; Moving conpty.dll...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;nbsp; Using os.arch(): x64&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;nbsp; Found version 1.23.251008001&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #fcff01;&quot;&gt;&amp;nbsp; Copying&lt;/span&gt; C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\third_party\conpty\1.23.251008001\win10-x64\conpty.dll -&amp;gt; C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\build\Release\conpty\conpty.dll&lt;/div&gt;&lt;div&gt;&amp;nbsp; Copying C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\third_party\conpty\1.23.251008001\win10-x64\OpenConsole.exe -&amp;gt; C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\build\Release\conpty\OpenConsole.exe&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;changed 7 packages in 2s&lt;/div&gt;&lt;div&gt;npm warn allow-scripts 2 packages have install scripts not yet covered by allowScripts:&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&amp;nbsp; &amp;nbsp;@github/keytar@7.10.6 (install: node script/install.js || npm run build)&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&amp;nbsp; &amp;nbsp;node-pty@1.1.0 (install: node scripts/prebuild.js || node-gyp rebuild; postinstall: node scripts/post-install.js)&lt;/div&gt;&lt;div&gt;npm warn allow-scripts&lt;/div&gt;&lt;div&gt;npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts &amp;lt;pkg&amp;gt;` to allow.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;雖然新版 npm 仍然頑固地跳出 npm warn allow-scripts 警告, 但 Gemini CLI 已經安裝成功了 (黃底色部分顯示 node-pty 最核心的底層微軟虛擬終端組件 conpty.dll 和 OpenConsole.exe 已經成功複製, 編譯與就位了), 這樣便可將上面強迫允許執行腳本的 npm 全域設定復原了 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS C:\WINDOWS\System32&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;npm config delete ignore-scripts --global&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;關閉 PS 視窗重開一個, 輸入 gemini 按 Enter 出現如下畫面表示 Gemini CLI 已經安裝成功了 :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitSI6rexYAQZZcwoHjfdKaEHp8LlPA9ideCnMc6YC6AkLMx_GUXEZttk8IiVm4A-oIS5mDwdVRG0thdfnO6M-eygohG94QbXXz5my4h5y5WdbE_cJsJDl20obex3_DYoz0kBse01KC6niLzOePQCb7WrKwlqbsyWijJf8Okfg-gUNNQsbsSMBNOreUe_7z/s1092/gemini-cli-install-ok.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;643&quot; data-original-width=&quot;1092&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitSI6rexYAQZZcwoHjfdKaEHp8LlPA9ideCnMc6YC6AkLMx_GUXEZttk8IiVm4A-oIS5mDwdVRG0thdfnO6M-eygohG94QbXXz5my4h5y5WdbE_cJsJDl20obex3_DYoz0kBse01KC6niLzOePQCb7WrKwlqbsyWijJf8Okfg-gUNNQsbsSMBNOreUe_7z/s320/gemini-cli-install-ok.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://yhhuang1966.blogspot.com/feeds/1799881065157720758/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/4877487320781767952/1799881065157720758' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1799881065157720758'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4877487320781767952/posts/default/1799881065157720758'/><link rel='alternate' type='text/html' href='https://yhhuang1966.blogspot.com/2026/06/msi_02049945586.html' title='MSI 電競桌機維修 (五)'/><author><name>小狐狸事務所</name><uri>http://www.blogger.com/profile/09435160519044041137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL11axT-wNyoXyX-nkxQom9IUDnAaQteLh9m2W4VsGDLRjV7qgcm9WqBUM1g6h4jcMZLDDERNn6qgLQdV5-6iPjW_ce0_UocoFeJVt0lWJpxc1NRdQNAJVE8j5iU6Sv0TPkAGz65DrT_Fk4LalFLJjXAIWQEeydz11R7a4b6_HnhHcit3fVhYZDiA7gSRf/s72-c/claude-code-install-ok.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>