Gemini CLI 專案協作筆記:從 Web App 到極簡自動化的開發歷程
總覽
本專案的初始目標是建立一個具備篩選功能的使用者介面,以自動化處理貓咪住宿文件。在開發過程中,我們遭遇了數個與 Google Apps Script 環境相關的挑戰,最終透過簡化架構和採用更穩健的技術決策,成功達成目標。
第一階段:不可行方案與經驗教訓
我們首先嘗試了建立一個功能豐富的前端介面,但最終證明此路不通。(如圖一、二)
方案:獨立 Web App / 側邊欄 (Client-side UI)
-
嘗試過程:
- 建立 Web App:最初構想是建立一個獨立的網頁應用程式(doGet),提供篩選欄位和操作按鈕。(如圖三)
- 遭遇神秘錯誤:即使提供了語法正確的現代 JavaScript (ES6+)程式碼,在執行時依然反覆出現 SyntaxError (語法錯誤),例如Unexpected token。
- 偵錯與降級:為了排除問題,我們將後端 Code.gs 的程式碼全部降級為相容性更強的舊版 ES5 語法。
- 遭遇前端腳本失效:即便後端語法降級,前端網頁的按鈕依然完全沒有反應。進一步偵錯發現,無論是寫在 HTML 中的 onclick屬性,還是使用標準的 addEventListener 事件綁定,前端的 JavaScript 腳本都完全沒有被執行。 (如圖四)
-
根本原因:
Google Apps Script 的 HtmlService 沙箱環境非常特殊且存在諸多限制。標準的網頁開發實踐(如 DOMContentLoaded 事件)可能無法運作,且 Client-side JavaScript 的執行容易受到使用者的 Google 帳號安全設定、瀏覽器版本、擴充功能等我們無法直接控制的因素干擾。
-
教訓:
對於 Google Apps Script 專案,其核心優勢在於與 Google 服務的後端整合。任何複雜的前端 UI 都會引入巨大的不確定性。應優先考慮純後端 (Server-side)執行,只有在絕對必要時才引入前端 UI,並要為其不穩定性做好準備。 (如圖五)
第二階段:最終可行方案與設計決策
在放棄了複雜的前端 UI 後,我們回歸到最原始、最穩定的架構,並解 決了資料處理中的核心難題。
方案:純後端 + 自訂選單 (Server-side Only)
-
設計理念:
- 放棄所有不穩定的前端介面(Web App、側邊欄、HTML)。
- 將所有邏輯都放在 Code.gs 中。
- 僅透過在試算表頂端建立的自訂選單 (onOpen 函式)來觸發後端函式。
- 這是最穩定、最可靠、最容易維護的架構。
-
關鍵的技術決策:
-
語法選擇 (Syntax Choice): 由於使用現代 JavaScript (ES6+) 在該專案環境中反覆出現無法解釋的語法錯誤,最終決定全部採用舊版 ES5語法,以換取最高的相容性與穩定性。
-
資料去重邏輯的演進 (Evolution of Deduplication Logic):
- 目標:integrateData 函式在多次執行時,只新增真正的「 新」資料,而不是重複附加。
- 失敗的嘗試: 最初嘗試在執行時比對「來源日期」和「已存 入的日期」。但因 Google 試算表會自動將「日期文字」轉換為「日期物件」,兩者在 格式和精度上的微小差異導致比對永遠失敗。
- 成功的方案:寫入「唯一識別碼」(EntryKey)
- 在 IntegratedData 工作表中新增 EntryKey 欄位。
- 第一次處理資料時,根據其內容產生一個標準化的字串Key(格式為 手機_貓名_YYYY-MM-DD)並存入此欄。
- 後續執行時,直接進行「字串對比字串」,徹底避免了所有資料格式轉換的問題。這是解決此類重複資料問題最專業、最可靠的方法。 (如圖六、七)
-
程式碼結構優化 (Code Structure Optimization): 為了解決因平台顯示長字串時自動換行,而導致使用者複製貼上程式碼出錯的問題,最終版本將indexOf(‘一個很長的欄位名稱’) 的寫法,全部重構為在迴圈外預先定義好所有欄位的索引變數(如 var ownerNameCol=headers.indexOf(…))。這讓程式碼更乾淨、效率更高,也杜絕了格式問題。 (如圖八)
-
總結
這個專案的成功,關鍵在於透過務實的偵錯,辨識出平台的限制,並做出正確的架構決策。最終,一個由繁化簡、回歸後端核心的設計,搭配一個穩健的資料去重策略,成功地實現了使用者的核心需求。








NUVOTON 新唐 NuMaker-UNO-M4 開箱文
作者:順哥
email:palmbear@gmail.com
參考資料 1:NUVOTON 新唐 NuMaker-UNO-M4 產品頁,https://direct.nuvoton.com/tw/numaker-uno-m4?srsltid=AfmBOopFhCXT5ftx5FTkoTcIVZLXr0MX_9o07sI9xKODXf4wINY5kuBc
參考資料 2:Chat Everywhere,https://v2.chateverywhere.app/zh
一、簡介(引用參考資料 1)
新唐 NuMaker-UNO-M4 開發板是使用新唐 MCU 作為微控制器的一款 Arduino 相容硬體。它的功能可以透過 Arduino 相容的擴充板來擴展。使用者可以使用 Arduino 相容的 IDE 來開發他們的應用程式,並充分利用大量的公開範例。
NuMaker-UNO-M4 是一個特別的開發工具,用於新唐 Cortex®-M4 系列的使用者透過其可以開發並容易驗證該應用程式。其目的是提供一套開發及學習的平台,具有 ADC、PWM、I²C、SPI 等周邊功能,使用者可以設定不同功能的 NuMaker-UNO-M4 開發套件,也可根據使用者需求增加外設功能的開發套件,易於上手,提供開發所需的靈活性。
二、外觀
NUVOTON 新唐 NuMaker-UNO-M4 外觀



三、主要特點(引用參考資料 1)
特色:
* 學習/應用/調試:全系列開發工具
* 攜帶方便的開發調試工具包
* 豐富的微控制器周邊設備功能,如ADC、PWM、I²C、SPI、UART…
* 具有高可擴展性:連接電路板可以改變不同的應用模組
* 相容 Arduino UNO R4
* 支持對 USB 的虛擬串口
* 支援 Arduino 的 IDE
* 多元的供電方式
– USB VBUS
– 外部電源支援 5V,可以從其他電源提供給 DC 插座
* LEDs 狀態指示燈
– Power, I/O, UART (Tx, Rx) 和 SPI CLK 狀態…等燈號
* 提供 RESET 按鈕
NuMaker-UNO-M4開發板接頭名稱及定義如下:


插上電後,有一個閃爍3顆LED的程式已預先燒入上去。
四、Arduino IDE 開發環境安裝
1. 至Arduino 官網下載 Arduino IDE 開發環境,執行所下載之安裝檔,並安裝 Arduino IDE。
2. 執行 Arduino IDE。選擇 File → Preferences
3. 並在 Additional Board Manager 的欄位中輸入下列網址: https://raw.githubusercontent.com/OpenNuvoton/NuMaker_UNO/master/package_nuvoton_index.json

4. 利用左邊「開發板」按鈕,搜尋NuMaker UNO M4,並安裝「UnMaker M4」,目前最新版是「13.3.9」。
或
選擇 Tools → Board → Boards Manager ,
NuMaker M4 會出現在清單底部;點選 NuMaker M4 並按下 Install



5. 待軟體包下載安裝完畢,即可在 Tools → Board 選用 NuMaker-UNO-M4

6. 選擇開發板NuMaker-UNO-M4,以及連接埠。

或點選「工具」,再選擇開發板NuMaker-UNO-M4,以及連接埠


7. 開啟範例程式:Blink,並上傳

8. 編譯完成上傳失敗,缺少「isptool」這個程式。

9. 「isptool」這個程式是一個Windows OS的bat檔,在macOS當然不能用。

10. 經過一個下午,找ChatGPT幫忙,用Python做出了「Nuvoton ISP Tool」GUI程式,但是無法正常連接 NuMaker-UNO-M4。

11. 使用「UTM」Windows虛擬機,進行測試才順利上傳Blink程式。


12. Blink.py測試程式
點亮、熄滅內建LED,每0.2秒循環一次內建LED,Blink.py。
“`c++=
//Blink程式,閃爍內建「LED 3」每0.2秒閃爍一次
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(200); // wait for a second
}
“`
測試程式Blink.ino影片
五、結論
目前「NUVOTON 新唐 NuMaker-UNO-M4」在Arduino IDE開發環境,僅支援「Windows OS」,不支援「macOS」。
希望「新唐NUVOTON」早點支援 macOS。
在 macOS 上安裝 MariaDB 伺服器
作者:順哥
email:palmbear@gmail.com
參考資料 1:Installing MariaDB Server on macOS Using Homebrew
參考資料 2:Mac安裝MariaDB資料庫
參考資料 3:macOS 上安裝 Sequel Pro 資料庫管理介面
Table of Contents
[TOC]
前言
因為上宅老大的課程需要使用MariaDB資料庫,但是官網的下載頁面沒有提供下載,查詢google後,找到相關參考資料,將安裝流程記錄一下。
MariaDB官方Download網頁:Download MariaDB Server
安裝環境
- Macbook pro M1
- macOS 15.6
參考各「參考資料」及官網,實際的安裝程序如下:
步驟一:打開終端機
查詢MariaDB資料庫有哪些版本:brew search mariadb
步驟二:安裝MariaDB資料庫
安裝MariaDB資料庫:brew install mariadb
下完安裝命令後,brew 會先自行更新,然後才開始安裝 MariaDB。

MariaDB安裝完成後,會自行執行brew cleanup mariadb。
接著自動執行brew cleanup,清除無用程式庫。
步驟三:啟動 MariaDB
啟動MariaDB資料庫:brew services start mariadb

步驟四:登入「MariaDB」
MariaDB 伺服器啟動後,您可以以您的使用者身分登入:mysql
或以 root 身分登入:sudo mysql -u root
出現下圖就是安裝完成。
離開「MariaDB」:exit
重新啟動MariaDB資料庫:brew services restart mariadb
步驟五:變更 MariaDB root 密碼
- 打開 iTerm2 終端機
- 終端機執行指令
sudo mariadb-secure-installation,變更 root 密碼


步驟六:安裝資料庫管理介面(sequel pro)
因為sequel pro已經沒有繼續維護,無法使用brew install sequel-pro來安裝,搜尋到「參考資料 3」可以下載「sequel-pro-1.1.2.dmg」,直接打開後如下圖:
將 Sequel Pro.app 拉到應用程式就可以了。
打開 Sequel Pro.app 後如下圖:
輸入資料如下:
進入MariaDB資料庫後畫面如下:
參考:macOS 上安裝 MySQL 與 Sequel Pro 資料庫管理介面
其他資源
Pico 及 Micro:bit 的程式或韌體在 macOS 13.01 無法拖拉上傳?請升級到 macOS 13.1
作者:順哥
email:palmbear@gmail.com

先前使用 MacBook pro 將 Pico 及 Micro:bit 的程式或韌體拖拉上傳到裝置的功能,非常方便。


Micro:bit,請參考 Micro:bit官網 Transfer from a computer 直接拖拉hex檔到Micro:bit。
但是在 macOS 更新到 macOS 13.01 後,便無法用拖拉上傳了,後來問了Google 大神才知道這是 macOS 的問題!
請參考下面網址:
參考資料1:https://www.raspberrypi.com/news/the-ventura-problem/
Raspberry Pi 及 Adafruit 這二個單位都鼓勵大家跟 Apple 公司回報問題,希望 Apple 能儘快修正!
未修改前,可以使用終端機命令列來上傳程式或韌體到裝置上,命令參考如下:
cp -X MICROBIT.hex /Volumes/MICROBIT/
Apple 公司這幾天已經發佈了macOS 13.1,經過測試已經解決這個無法拖拉上傳程式的問題了。
如果你使用的朋友,建議大家趕快升級到 macOS 13.1。
Arduino IDE 2.0 RC3 安裝紀實
title: ‘Arduino IDE 2.0 RC3 安裝紀實’
作者:順哥
email:palmbear@gmail.com
前言
Arduino IDE 已經發展很久了,但是編譯的速度一直很慢,因應這個問題以及 Tiny ML 的應用,終於開發出新版本,目前還在 RC3版本,提供大家試用,這邊可以下載嘗鮮Arduino IDE 2.0 RC3 。
下載網頁畫面:
安裝
可以按照自己的系統下載對應的檔案來安裝,我下載 Windows 版本來安裝。
下載後執行檔案就會看到:
安裝畫面-1:
安裝畫面-2:
依照指示完成安裝即可,Arduino IDE 2.0 RC3 安裝完成後,開啟它。
環境設定
- 第一次開啟Arduino IDE 2.0 RC3會出現這個新畫面,原先是淺色系,我把它改成暗色系:

- 新的使用者介面長這樣,工具列的左側最靠中間有一個 搜尋及選擇開發板 的小視窗,而左側的5個圖示分別是:
(1)Sketchbook 草稿碼資料夾
(2)Boards Manager 開發版管理員
(3)Library Manager 函式庫管理員
(4)Dubug 偵錯
(5)Search 搜尋
- 點選 File > Preferences :

- 接下來就會看到Preferences的相關設定,把常用的都打勾,並點選右下角的符號以增加其他開發板如下圖:

- 點選右下角符號後,請copy下面網址貼在框框內,一個網址一行,以增加ESP8266、ESP32 以及 Wio terminal這三塊開發板:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
https://dl.espressif.com/dl/package_esp32_index.json
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
- 接下來點選左邊上面算下來第2個圖示-Boards Manager,並搜尋 ESP8266 ,安裝2.6.3版比較沒有問題。如下圖:

- 隨後搜尋 ESP32 ,安裝1.0.4版比較沒有問題。如下圖:

- 最後搜尋 Seeed wio terminal ,安裝1.8.2版

- 關閉 Arduino IDE 2.0 RC3 ,重新開啟,這樣就完成環境設定了。
測試
- 使用 ESP32 加上 ESP32 擴展版 來寫一個閃爍內建 LED 的程式來測試一下,程式碼如下:
//閃爍內建LED
void setup() {
pinMode(2, OUTPUT); //宣告pin2(內建LED)作為輸出用途
}
void loop() {
digitalWrite(2, HIGH); //宣告pin2(內建LED)輸出高電位(3.3V)
delay(1000); //延遲1秒
digitalWrite(2, LOW); //宣告pin2(內建LED)輸出低電位(0V)
delay(1000); //延遲1秒
}
- Arduino 2.0 在編輯時,再輸入程式碼時會出現輸入指令格式提示,這應該是Arduino 2.0 除了速度變快之外,最大的改變了!

- 程式碼編輯完成,並上傳到ESP32上的完成畫面:

- ESP32 + 擴展板相片

- ESP32閃爍LED影片
待續!!!
tags: Arduino ESP32 ESP8266 Wio terminal
我把IBM R51 Laptop 開刀了
我很喜歡IBM的筆電,用料紮實,鍵盤操作很順手,尤其喜歡那些個中原一點紅。

淘汰之後,一直放著,前幾天發現它的蹤影,就拿出來試看看可否開機?果然不行!看到Windows XP開機畫面不要高興太早,沒有出現藍畫面才是開出來。

果然開不了機!
#########################################
於是拆機清理一下,拆下電池、光碟機、硬碟,看到沒什麼灰,簡單擦乾淨,機殼、鍵盤用牙刷刷一刷,油精擦過消毐一下,螢幕用螢幕拭鏡紙擦乾淨,重新組合起來。

開機⋯⋯⋯⋯⋯⋯⋯⋯⋯
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
期待又怕受傷害⋯⋯
果然還是不行,但是IBM都想到了,使用者這時候最需要什麼呢?
救援模式啟動了⋯⋯
進入了救援畫面,點選了還原,但是沒有還原檔,最後還是還原到出廠的狀態。

經過了一段時間,終於看到Windows XP桌面,開機了!

但是⋯⋯滑鼠不會動,觸控板不能用,中原一點紅也不動了⋯⋯
最重要的是網路也起不來⋯⋯
只能鍵盤按TAB鍵換位置或是快捷鍵⋯⋯
想了一想,來裝看看樹莓派i386版本,看是否可以Run⋯⋯
在這裡下載樹莓派i386版https://www.raspberrypi.org/software/raspberry-pi-desktop/
樹莓派其實就是Debian的Linux OS,現在這台IBM Laptop 比樹莓派4B還要低階,大概是樹莓派3的等級。
下載好檔案,燒入SD卡,插入USB讀卡機,調整IBM的BIOS由USB開機,重新開機⋯⋯
終於⋯⋯
出現安裝畫面⋯⋯

來不及看仔細它就Boot了,跑了一會兒,就出現Raspberry Pi的桌面,原本也是可以在SD卡上直接啟動,不必安裝也可以用,滑鼠可以用,有線、無線網路也都可以用了,現在更加確定這台可以Run 樹莓派了。


重新開機,正常安裝,先回答一些設定問題後,終於進入安裝程式階段,安裝完成,直接開出桌面,進行幾頊設定後,進入系統更新,把系統各程式更新到最新的版本,重新開機。

Done !
如何在Ubuntu使用Terminal從Github安裝軟體?
立
nhnnnHow do I install a software from Github in Ubuntu using terminal?https://github.com/cli/cli/blob/trunk/docs/install_linux.md
開始建
立你的網誌。https://github.com/cli/cli/blob/trunk/docs/install_linux.md
sudo apt-add-repository https://cli.github.com/packages sudo apt update sudo apt install gh
你今天要發表文章了。不必擔心網誌的外觀配置。此外,如果你還沒有幫網誌命名,或是感到不知所措,也不需要擔心。只要按一下「新增文章」按鈕,並告訴我們你在此撰寫文章的原因即可。
為何要這樣做?
- 因為這樣可讓新讀者瞭解來龍去脈。你打算做什麼?為何讀者應該閱讀你的網誌?
- 這將能協助你專注於自己對網誌的想法,以及你想要使用網誌來做的事情。
文章可長可短,可以是你的個人生活介紹或隨性的使命陳述、對於未來的宣言,或者你也可以針對想要發表的事物擬出簡單的大鋼。
為了協助你開始使用,以下提供一些相關問題:
- 為何你要建立公開網誌,而不是私人日記?
- 你認為自己會撰寫哪些主題?
- 你想透過網誌與哪些人建立連結?
- 如果你在未來一年可以成功持續經營網誌,你希望達成什麼目標?
你不應就此侷限在上述任一問題;網誌的美好之處就是可以觀察它們如何隨著我們學習、成長及互動的步伐不斷演變;不過,瞭解你要從何處著手與開始使用的原因將對你有所幫助,而明確表達自己的目標也許就能提供你一些其他的文章構想。
不知道如何開始嗎?只要寫下心中想到的第一件事就可以了。有一本廣為流傳的寫作相關書籍,作者 Anne Lamott 表示:你需要允許自己寫下「蹩腳初稿」。安妮說到重點:開始寫就對了,編輯的事以後再說。
當你準備發表文章時,為文章提供三至五個能夠說明網誌焦點的標籤,像是寫作、攝影、小說、育兒、食物、車子、電影、運動等。這些標籤將有助於關切你的主題的其他人在「讀取器」中找到你。請確認其中一個標籤為「zerotohero」,這樣其他新的部落客也可以找到你。

作者:順哥
email:palmbear@gmail.com
參考資料 1:ESP32 WeMos LOLIN32 Lite high resolution pinout and specs,https://mischianti.org/esp32-wemos-lolin32-lite-high-resolution-pinout-and-specs/
參考資料 2:Chat Everywhere,https://v2.chateverywhere.app/zh
參考資料 3:WeMos LOLIN32 Lite相片,https://www.hobbyelectronica.nl/en/product/lolin32-lite-esp-32/?srsltid=AfmBOorF4n7AuI2vquJZ4Mr0pyaCws4JqpqrfqukliniuSiYuIzDMXbt
Table of Contents
一、簡介
二、外觀
電池接頭:板上有 JST 2‑pin 電池插座(標示 BAT / BATT / VBAT),靠近 USB 與充電電路區域。
LOLIN32 Lite 外觀
三、主要特點
四、硬體規格
WeMos LOLIN32 Lite 接腳圖如下圖:
五、Arduino Blink 範例程式測試
目的:確認板子與開發環境(Arduino IDE)能正常上傳與執行程式,並驗證內建 LED 的運作。
A. 安裝 Arduino IDE。
B. 在「開發板管理員」中加入 Espressif ESP32 支援:在「偏好設定」→「附加開發板網址」加入https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
,然後在「開發板管理員」搜尋並安裝「esp32 by Espressif Systems」。
相關參數設定如下圖:
內建 LED:多數 LOLIN32 Lite 的 User LED 對應 LED_BUILTIN (以實物為準)。
先在 USB 連接並上傳 Blink;若上傳失敗,檢查 USB 線、驅動與開發板選項。遇到 “Wrong boot mode detected” 之類訊息,先換線或嘗試手動 Reset(Lolin32 Lite 會自動進入燒錄模式),上傳成功後確認 LED 閃爍。
Blink影片如下:
六、注意事項