Gemini CLI 專案協作筆記:從 Web App 到極簡自動化的開發歷程

總覽

本專案的初始目標是建立一個具備篩選功能的使用者介面,以自動化處理貓咪住宿文件。在開發過程中,我們遭遇了數個與 Google Apps Script 環境相關的挑戰,最終透過簡化架構和採用更穩健的技術決策,成功達成目標。

第一階段:不可行方案與經驗教訓

我們首先嘗試了建立一個功能豐富的前端介面,但最終證明此路不通。(如圖一、二)

方案:獨立 Web App / 側邊欄 (Client-side UI)

  • 嘗試過程:

    1. 建立 Web App:最初構想是建立一個獨立的網頁應用程式(doGet),提供篩選欄位和操作按鈕。(如圖三)
    2. 遭遇神秘錯誤:即使提供了語法正確的現代 JavaScript (ES6+)程式碼,在執行時依然反覆出現 SyntaxError (語法錯誤),例如Unexpected token。
    3. 偵錯與降級:為了排除問題,我們將後端 Code.gs 的程式碼全部降級為相容性更強的舊版 ES5 語法。
    4. 遭遇前端腳本失效:即便後端語法降級,前端網頁的按鈕依然完全沒有反應。進一步偵錯發現,無論是寫在 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)

  • 設計理念:

    1. 放棄所有不穩定的前端介面(Web App、側邊欄、HTML)。
    2. 將所有邏輯都放在 Code.gs 中。
    3. 僅透過在試算表頂端建立的自訂選單 (onOpen 函式)來觸發後端函式。
    4. 這是最穩定、最可靠、最容易維護的架構。
  • 關鍵的技術決策:

    1. 語法選擇 (Syntax Choice): 由於使用現代 JavaScript (ES6+) 在該專案環境中反覆出現無法解釋的語法錯誤,最終決定全部採用舊版 ES5語法,以換取最高的相容性與穩定性。

    2. 資料去重邏輯的演進 (Evolution of Deduplication Logic):

      • 目標:integrateData 函式在多次執行時,只新增真正的「 新」資料,而不是重複附加。
      • 失敗的嘗試: 最初嘗試在執行時比對「來源日期」和「已存 入的日期」。但因 Google 試算表會自動將「日期文字」轉換為「日期物件」,兩者在 格式和精度上的微小差異導致比對永遠失敗。
      • 成功的方案:寫入「唯一識別碼」(EntryKey)
        • 在 IntegratedData 工作表中新增 EntryKey 欄位。
        • 第一次處理資料時,根據其內容產生一個標準化的字串Key(格式為 手機_貓名_YYYY-MM-DD)並存入此欄。
        • 後續執行時,直接進行「字串對比字串」,徹底避免了所有資料格式轉換的問題。這是解決此類重複資料問題最專業、最可靠的方法。 (如圖六、七)
    3. 程式碼結構優化 (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 外觀
![IMG_3658](https://hackmd.io/_uploads/S11BnjYtel.jpg)
![IMG_3659](https://hackmd.io/_uploads/Hk1r3iFtxx.jpg)
![IMG_3660](https://hackmd.io/_uploads/HJyBniKKgl.jpg)

三、主要特點(引用參考資料 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開發板接頭名稱及定義如下:
![IMG_3661](https://hackmd.io/_uploads/r1JS2sFFxl.jpg)

![IMG_3662](https://hackmd.io/_uploads/S1kS3sKFge.png)

插上電後,有一個閃爍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
![截圖 2025-08-24 15.59.33](https://hackmd.io/_uploads/SJA0jjKKel.png)

4. 利用左邊「開發板」按鈕,搜尋NuMaker UNO M4,並安裝「UnMaker M4」,目前最新版是「13.3.9」。

選擇 Tools → Board → Boards Manager ,
NuMaker M4 會出現在清單底部;點選 NuMaker M4 並按下 Install
![截圖 2025-08-24 16.00.05](https://hackmd.io/_uploads/HJRRoottex.png)
![截圖 2025-08-24 16.00.45](https://hackmd.io/_uploads/SJA0ioFKlg.png)
![截圖 2025-08-24 16.02.59](https://hackmd.io/_uploads/r1R0oitKxl.png)
5. 待軟體包下載安裝完畢,即可在 Tools → Board 選用 NuMaker-UNO-M4
![截圖 2025-08-24 16.03.35](https://hackmd.io/_uploads/HkRAiiKKex.png)
6. 選擇開發板NuMaker-UNO-M4,以及連接埠。
![截圖 2025-08-24 16.29.57](https://hackmd.io/_uploads/ByACsjtKgx.png)

或點選「工具」,再選擇開發板NuMaker-UNO-M4,以及連接埠
![截圖 2025-08-24 16.06.36](https://hackmd.io/_uploads/Bke0CojKYee.png)
![截圖 2025-08-24 16.07.27](https://hackmd.io/_uploads/HJCCsoKtel.png)
7. 開啟範例程式:Blink,並上傳
![截圖 2025-08-24 16.09.13](https://hackmd.io/_uploads/BJA0joKYxx.png)
8. 編譯完成上傳失敗,缺少「isptool」這個程式。
![截圖 2025-08-25 18.13.38](https://hackmd.io/_uploads/SyFDD2Ytll.png)
9. 「isptool」這個程式是一個Windows OS的bat檔,在macOS當然不能用。
![截圖 2025-08-24 16.22.36](https://hackmd.io/_uploads/BkARsiYKgl.png)
10. 經過一個下午,找ChatGPT幫忙,用Python做出了「Nuvoton ISP Tool」GUI程式,但是無法正常連接 NuMaker-UNO-M4。
![截圖 2025-08-24 18.42.41](https://hackmd.io/_uploads/S1CRjoKYeg.png)
11. 使用「UTM」Windows虛擬機,進行測試才順利上傳Blink程式。
![截圖 2025-08-25 17.00.10](https://hackmd.io/_uploads/SkH2jntKgg.png)
![截圖 2025-08-25 17.03.13](https://hackmd.io/_uploads/HJBho2KFxx.png)
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

安裝環境

  1. Macbook pro M1
  2. macOS 15.6

參考各「參考資料」及官網,實際的安裝程序如下:

步驟一:打開終端機

查詢MariaDB資料庫有哪些版本:brew search mariadb

步驟二:安裝MariaDB資料庫

安裝MariaDB資料庫:brew install mariadb

下完安裝命令後,brew 會先自行更新,然後才開始安裝 MariaDB。

截圖 2025-08-19 22.37.25

MariaDB安裝完成後,會自行執行brew cleanup mariadb
截圖 2025-08-19 22.49.27

接著自動執行brew cleanup,清除無用程式庫。
截圖 2025-08-19 22.54.47

步驟三:啟動 MariaDB

啟動MariaDB資料庫:brew services start mariadb

截圖 2025-08-19 22.57.00

步驟四:登入「MariaDB」

MariaDB 伺服器啟動後,您可以以您的使用者身分登入:mysql

或以 root 身分登入:sudo mysql -u root

出現下圖就是安裝完成。
截圖 2025-08-19 23.07.38

離開「MariaDB」:exit
截圖 2025-08-19 23.11.16

重新啟動MariaDB資料庫:brew services restart mariadb
截圖 2025-08-19 23.49.06

步驟五:變更 MariaDB root 密碼

  1. 打開 iTerm2 終端機
  2. 終端機執行指令 sudo mariadb-secure-installation,變更 root 密碼
截圖 2025-08-20 00.11.27
截圖 2025-08-20 00.12.50

步驟六:安裝資料庫管理介面(sequel pro)

因為sequel pro已經沒有繼續維護,無法使用brew install sequel-pro來安裝,搜尋到「參考資料 3」可以下載「sequel-pro-1.1.2.dmg」,直接打開後如下圖:
截圖 2025-08-19 23.36.33

將 Sequel Pro.app 拉到應用程式就可以了。
截圖 2025-08-19 23.37.10

打開 Sequel Pro.app 後如下圖:
截圖 2025-08-19 23.44.42

輸入資料如下:
截圖 2025-08-20 00.19.29

進入MariaDB資料庫後畫面如下:
截圖 2025-08-20 00.16.18

參考:macOS 上安裝 MySQL 與 Sequel Pro 資料庫管理介面

其他資源

  1. mariadb.rb on github
  2. MariaDB Server on macOS: Does it even make sense to try? (video)

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/

參考資料2:https://blog.adafruit.com/2022/10/31/uploading-uf2-files-with-macos-13-0-ventura-apple-microbit_edu-raspberry_pi-circuitpython/

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 安裝完成後,開啟它。


環境設定

  1. 第一次開啟Arduino IDE 2.0 RC3會出現這個新畫面,原先是淺色系,我把它改成暗色系:
  2. 新的使用者介面長這樣,工具列的左側最靠中間有一個 搜尋及選擇開發板 的小視窗,而左側的5個圖示分別是:
    (1)Sketchbook 草稿碼資料夾
    (2)Boards Manager 開發版管理員
    (3)Library Manager 函式庫管理員
    (4)Dubug 偵錯
    (5)Search 搜尋
  3. 點選 File > Preferences :
  4. 接下來就會看到Preferences的相關設定,把常用的都打勾,並點選右下角的符號以增加其他開發板如下圖:
  5. 點選右下角符號後,請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
  6. 接下來點選左邊上面算下來第2個圖示-Boards Manager,並搜尋 ESP8266 ,安裝2.6.3版比較沒有問題。如下圖:
  7. 隨後搜尋 ESP32 ,安裝1.0.4版比較沒有問題。如下圖:
  8. 最後搜尋 Seeed wio terminal ,安裝1.8.2版
  9. 關閉 Arduino IDE 2.0 RC3 ,重新開啟,這樣就完成環境設定了。

測試

  1. 使用 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秒
}
  1. Arduino 2.0 在編輯時,再輸入程式碼時會出現輸入指令格式提示,這應該是Arduino 2.0 除了速度變快之外,最大的改變了!
  2. 程式碼編輯完成,並上傳到ESP32上的完成畫面:
  3. ESP32 + 擴展板相片
  4. ESP32閃爍LED影片

待續!!!

tags: Arduino ESP32 ESP8266 Wio terminal

我把IBM R51 Laptop 開刀了

我很喜歡IBM的筆電,用料紮實,鍵盤操作很順手,尤其喜歡那些個中原一點紅。

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

果然開不了機!

#########################################

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

配備IDE40G硬碟

開機⋯⋯⋯⋯⋯⋯⋯⋯⋯

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

期待又怕受傷害⋯⋯

果然還是不行,但是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」,這樣其他新的部落客也可以找到你。