部落格

  • 用AI寫程式實例

    寫一個程式從一個純文字的文件抽取客戶資料,生成Excel文件。這個純文字文件有固定寛度的欄位,但地址卻是跨欄位的。嘗試將文件截圖,加上標記,告訴AI根據截圖的說明來生成Excel 文件。結果……失敗了。地址被放進錯誤的欄位。我重新思考,用了另一個方法:將想要的結果給AI,即是需要生成的Excel 文件。這次AI給出像樣的程式代碼。

    用AI寫程式要注意:

    1. 去除敏感數據:尤其是使用的是公共AI。

    2. 找有經驗的程式員查看生成的程式代碼,並進行嚴格的測試。

  • 在Firebird (SQL) 運行 View 時出現錯誤訊息”arithmetic exception, numeric overflow, or string truncation”

    分析:

    1. Arithmetic Exception的最常見原因是算式出現除以0。
    2. Numeric overflow的原因是數值超出欄位的最大值。
    3. 字串過長。

    解法:

    1. 尋找除數算式, 可嘗試加入Check確保不會除以0。
    2. 確保數值不超過欄位的最大值。考慮使用最大值更大的data type。
    3. 擴大欄位的字串長度, 或者保存字串到欄位前先trunc到合適長度。
    4. Cast NULL to a Non-Nullable domain/type

    教訓:
    在 Firebird SQL 的 View 中,遇到「算術異常、數值溢出或字串截斷」錯誤時,通常源於資料計算或轉換過程中的邊界條件未妥善處理。

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。

  • 在Delphi 2007開發專案, 運行時出現錯誤訊息”Access violation”

    分析:
    某些Object, Array或Pointer指著的位址超出容許的範圍, 常見的是nil object或null pointer下存取屬性, 或者存取未initialize的Array的Item。

    解法:

    1. 存取object或pointer下的屬性前, 先確保object不是nil或Pointer不是null。
    2. 存取Array的item前, 必須先initialize array (e.g. SetLength to 0)

    教訓:
    在Delphi開發中,”Access violation” 通常代表嘗試存取一個無效的記憶體位址。這往往是因為程式在使用 nil object、null pointer 或尚未初始化的陣列。開發人員必須在操作物件或指標前確認其有效性,並在使用陣列前適當初始化。

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。

  • 讓客戶在網站檢視拆櫃相片

    問題: 從網站讀取本地服務器的相片可能受本地服務器的網速限制而變慢。
    分析: 上傳相片到本地服務器的速度可以很高,但每次經網絡存取本地服務器的相片可能會慢。客戶的體驗應優先於員工的體驗。
    解法: 將相片先上傳至雲端,再將連結存放在本地服務器。在網站顯示雲端的連結供客戶自行檢視。
    教訓:
    以使用者體驗為導向設計系統架構
    在系統設計中,資料的儲存與存取方式不只是技術選擇,更直接影響客戶的使用體驗。雖然將相片儲存在本地服務器能在上傳階段提升效率,但若訪問速度受限於內部網絡頻寬,就會造成客戶端顯示緩慢,影響整體滿意度。
    因此,設計時應優先考慮外部使用者的訪問效率與穩定性,將靜態資源(例如相片)上傳至雲端儲存平台,並透過公開或授權的雲端連結提供存取。此舉可同時兼顧內部操作效率與客戶端體驗,減少本地網絡瓶頸帶來的性能問題。

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。

  • 在Delphi 2007開發專案, 運行時出現錯誤訊息”Invalid Pointer Operation”

    分析: 跟Pointer有關的代碼出問題
    解法: 對照代碼修改了的部份, 發現某些Object Free了兩次。
    教訓: Object Free了後應assign為nil, 即使錯誤地再Free亦不會出錯誤訊息。

  • 使用WinSCP作為SFTP client遇到的問題

    背景:
    使用WinSCP作為SFTP client, 上傳文件時, 會生成 xxx.filepart檔。成功上傳後變回原檔名 (xxx)。

    問題:
    上傳中途斷線, 殘留了 xxx.filepart檔。重新上傳同一檔案會出錯誤。

    分析:
    重新上傳同一檔案時會生成xxx.filepart檔, 因xxx.filepart檔已存在, 估計是因為連接仍然存在, 不能覆蓋, 所以出錯誤。

    解法:
    方案1: 手動刪除xxx.filepart檔: 要先關掉SFTP Server軟件或重啟SFTP Server主機才可以成功刪除。
    方案2: 在SFTP Server軟件設定合理的Idle timeout, 讓xxx.filepart檔適時解鎖。

    教訓:
    使用 SFTP 工具(如 WinSCP)進行檔案上傳時,必須考慮中斷傳輸後的檔案鎖定與清理機制。若未妥善處理,殘留的 .filepart 檔案可能導致後續上傳失敗,影響部署或資料更新流程。

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。

  • AI生成影片的問題

    大家能看出這段用AI生成的影片有甚麼問題嗎?

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。

  • 參考,不是複製:在程式碼重用中尋找平衡

    背景:
    已經有一份「已驗證可用」的源代碼,可作為相同或相似功能的新實作參考。

    問題:
    在「參考既有程式碼」與「避免直接粗暴 copy & paste 帶來錯誤、安全風險或授權問題」之間取得平衡。

    分析:
    直接複製貼上常會把不需要的相依與潛在漏洞一併帶入,而且容易忽略原專案中的前置條件與安全假設。
    若理解既有程式碼背後的演算法與設計,再用重構手法或重新實作,可提升可讀性、可測試性。

    解法:
    先閱讀並畫出既有程式碼的邏輯流程(輸入、輸出、主要步驟與邊界條件),抽象成純文字或流程圖,只保留「演算法與設計」,避免一開始就跟著原碼逐行翻譯。
    依抽象後的流程,在新專案中「從介面開始設計」:先定義函式/類別介面與資料模型,再依需求語言重新實作內部細節,只在必要處借用小段實作並加上註解來源。​

    教訓:
    不要盲目 Copy & Paste:直接複製整段程式碼,常會把不需要的相依與漏洞一併帶進來,之後維護成本和風險都會放大。

    聲明:本作品包含在人工智慧協助下產生的內容。作者已對所有材料進行驗證與編輯,以確保其準確性與完整性。