冷知識 - 刪不掉的 Windows 檔案
同事問了一個鬼問題 - "Windows 檔名可不可以只有一個空白?" 答案是不行。測試過程我搞出一個怎麼都砍不掉的檔案,花了點時間才清掉,又學到一個冷知識。 依據微軟文件,檔案或目錄名稱不能包含以下字元: < (less than) > (greater than... Read More
View Article隨想 - 程式開發的老鳥魔咒
最近假日都在玩 Arduino/ESP,重拾小時候的電子夢。 開發工具換成 VSCode + PlatformIO,更貼近日常慣用的專業開發環境,理論上要更順手,但寫來卻很有很重的阻礙感,不時陷入這樣寫怪怪旳,那樣寫好像不太好的左右為難。對 C++ 語言不熟當然是原因,但以前用 Arduino ID... Read More
View Article使用 PowerShell 批次設定 Excel 保護密碼
專案遇到為 Excel (.xlsx) 設定讀取密碼的需求。OpenXML SDK 提供的工作表保護功能,只僅限於防止內容被修改,無法做到輸入密碼才能開啟。有不少 Excel 商業元件可以彌補這個缺口,授權費用約三五百塊美金,並不算貴。但由於其他的需求我用 ClosedXML 或 OpenXML S... Read More
View Article使用 「我的最愛」在 IE 實現 VIP 專屬客製功能
開發網站有時會遇到一種狀況,某位使用者有個特殊需求,為一個人修改網頁設計正當性不足,但該功能確實可為他帶來可觀效益(我一直把增進人類全體之生活當成寫程式的核心價值呀)。因此,實務上偶爾會出現所謂 VIP 版,墮落自我要求不高的開發者會 Copy & Paste 改一版交差,認真精實的開發者會... Read More
View Article物聯網筆記 - 為 OLED 顯示器加入自動捲動顯示功能
Arduino/ESP 程式執行期間要顯示訊息,開發測試期間時可用 Serial.print() 走 USB 線傳回電腦端。實務執行時不可能永遠連著電腦只為了收訊息,一般會外接個小螢幕,古早時代最常用的是照片裡的 1602 液晶螢幕: 內建 I2C 模組的版本只要接四條電線就能動,但它最多只能顯示... Read More
View Article【茶包射手日記】偶發型 Oracle Client 版本不相容錯誤
同事報案,有個 ASP.NET 網站「偶爾」會出現提供者與 Oracle 從屬版本不相容錯誤。這是 Unmanaged ODP.NET 的經典茶包, 舉凡 Oracle Client 沒裝好、存取權限跑掉、多版本並存都很容易踩到雷。(由衷建議大家改用 Managed ODP.NET,能有效改善生活品... Read More
View ArticlePowerShell 小工具 - 盤點及比較 DLL 版本差異
遇到盤點 .NET 組件(.dll)版號比對多個環境版本差異的需求,看起來是 PowerShell 的主場,試寫一下,比想像還簡單: param ( [Parameter(Mandatory = $true)] [string] $path ) Get-ChildItem -... Read More
View Article免費 Java 新選擇 - 微軟版 OpenJDK
幾年前 Oracle 開始對企業追討 Java 授權費,因商業應用付費界線模糊,不少企業為了避免爭議紛紛改用 OpenJDK。但 OpenJDK 官網只提供 Linux 版安裝套件,至於 Windows,依之前評估,開源社群維護的 ojdkbuild 是首選。 現在更好的選擇出現了。微軟在前陣子釋出... Read More
View Article在 Java 信任自訂 CA 根憑證
遇到網站使用自訂 CA 憑證簽發 SSL 憑證,在 Windows 及 .NET 程式需手動匯入並信任 CA 根憑證(做法可參考 使用 OpenSSL 建立 CA 及簽發 SSL 憑證)解決憑證不安全連線被拒問題,但 Java 程式有自己的憑證信任機制,設定方式不同。 為快速驗證 CA 根憑證是否生... Read More
View ArticleIoT 筆記 - 多想十幾個小時(Orz),你可以不要寫死 WiFi 密碼
上回聊到程式開發的老鳥魔咒,提到我在寫 ESP32/ESP8266 程式時有個心魔無法克服 - 幾乎所有 Arduino 範例都把 WiFi 基地台的 SSID 跟密碼寫死在程式裡,讓我頻頻呼喊花惹發?把密碼用明碼寫進程式有安全疑慮並有改密碼要重新編譯的後遺症,嚴重違背了我的信仰。如果是 C#,我用... Read More
View Article【茶包射手筆記】gacutil 坑人記
修維 ASP 古蹟遇到問題 - 大清乾隆年間啟用的 OO4O (Oracle Objects for OLE) 在改連 UTF8 編碼的新版 Oracle DB 後中文變亂碼。不想浪費生命在他 X 的 Oracle Client 上,更甭提是 Oracle 11cR2 之後不再支援的 OO4O,我打... Read More
View Article在 Linux 信任自訂 CA 根憑證
既然講了在 Java 信任自訂 CA 根憑證,就連在 Linux 怎麼做也一起說說。 需要信任自訂 CA 根憑證的場合,除了自行架設的內部網站的 SSL 憑證由自己的 CA 簽發(延伸閱讀:使用 OpenSSL 製作萬用字元 SSL 憑證),還有一種狀況是網站的 SSL 憑證被網管設備置換,而置換憑... Read More
View Article【茶包射手日記】超詭異 Oracle Unicode 難字問題
Oracle 遇難字出錯不算新鮮事,現象不外乎中文字變空白變方格變問號變亂碼,老司機們一眼便知,該怎麼做心裡有數,但這回我遇到超不一樣的變種。(這樣算有吸引詭異茶包的特殊體質嗎?) 碰到一個神奇案例,資料寫入 Oracle NVARCHAR2 時結尾會多出一個 \u0000 (ASCII 0) 字元... Read More
View ArticlePowerShell ConvertFrom-Json 還原陣列無法 Where-Object 篩選
寫了一段 PowerShell 從 JSON 還原陣列,打算濾掉部分內容將另存成 JSON 檔,不料遇到 Where-Object 篩選無效的問題。 以下是重現問題的範例: $json = @" [ { "Nam": "Jeffrey", ... Read More
View Article1 元解決 ESP32 開發板無法全自動上傳問題
ESP32 開發板有多種版本,有些版本有整合 CH340 或 CP2102 USB-to-UART 晶片,開發板上有 Micro USB 孔可以連電腦,除了供電還能從 COM 序列埠上傳程式跟接收 Serial.print() 回傳訊息,開發測試方便許多。 我目前玩過兩塊 ESP8266 及四塊 E... Read More
View ArticleIoT 練習 - ESP Web 介面溫溼度記錄器
寫好 ESP WiFi 設定程式庫,再也不必為了是否要把 WiFi SSID 跟密碼寫進程式天人交戰,在 ESP8266/ESP32 寫 Web 介面控制硬體的基本框架成形,馬上來個小練習。 四年前買新冰箱,當時曾用 DHT11 + Raspberry Pi + Python 搞過 24 小時溫度監... Read More
View ArticleCCW 封裝 .NET 元件範例
都 2021 年了,還需要把 .NET 元件包成 COM+ 給老 ASP/VBScript/IE ActiveX/VB6/Delphi 用的場合如鳳毛麟角,但我有不少文章本來就是寫給有緣人看的 (收到有緣人留言還會一陣激動),這篇文件適合從事古蹟維修的同學,沒聽過 COM+ 的朋友請跳過,把時間花在... Read More
View ArticlePowerShell 模組開發流程最佳化
每次接觸新語言、新工具或新平台,在正式投入生產前,我習慣先做好幾件事:確立專案通用框架並研究如何讓「修改程式 -> 編譯 -> 部署 -> 測試 -> 修改程式 -> ...」開發循環最佳化,消除無意義的重複手工,讓思緒專中在程式碼本身,才有機會進入神馳模式,充分享受 ... Read More
View ArticlePowerShell 小技巧:除錯好幫手 - Write-Verbose()
呼叫 PowerShell 模組函式或跑 .ps1 程式難免會遇到程式跑完但結果不如預期的狀況,要找出哪裡出錯,加 Log 是最直接有效的做法。而 PowerShell 有一件好用武器,允許事先在程式偷偷埋入偵錯資訊,平時不顯示,使用者遇到問題時可打開開關再跑一次,就能藉由顯示的偵錯訊息推測發生什麼... Read More
View Article用 Visual Studio Code 實現完美 IoT 網頁介面開發流程
如前幾天所說,接觸新語言、新工具或新平台,在正式投入生產前,我習慣先做好幾件事:確立專案通用框架並研究如何讓「修改程式 -> 編譯 -> 部署 -> 測試 -> 修改程式 -> ...」開發循環最佳化,消除無意義的重複手工及等待,讓思緒專中在程式碼本身,以享受 Codi... Read More
View Article