PowerShell - 即時回報處理進度
要徹底惹毛急性子使用者,我有個好法子 - 讓程式跑慢一點,然後不要回報執行進度,等上幾次,對方便會變身浩克怒摔滑鼠鍵盤,嚴重一點說不定會氣急攻心中風身亡,別人我不敢說,這招對我絕對有效。 反之,開發程式遇到等待的耗時作業,即時回報處理進度可大大安撫使用者心情,願意耐心等待,依經驗,只要保持幾十秒內數... Read More
View Article從前端整合 WebForm 的各種方法
即便前端發展已十分成熟,幾乎無所不能,但仍有些必須依賴 ASP.NET WebForm 的場合 - 例如,在前端專案中整合既有系統的 WebForm 網頁。如果該系統成熟且穩定,年資還比你多三倍,嚷著把它換掉改用前端重寫,通常老闆想換掉的會是你。另外,有些技術目前只有 WebForm 解決方案,Re... Read More
View Article【茶包射手筆記】Chrome 莫名佔用 CPU
Windows 剛重新開機,登入先開好 Chrome 準備 Google 爬文,還在想關鍵字時聽到筆電散熱風扇聲變大,莫非有程式在吃 CPU? 開啟工作管理員證實了這點,而兇手意外是停在 Google 首頁什麼事還沒做的 Chrome,正在耗用 50% ~ 90% CPU,起初還以為被埋了程式挖礦,... Read More
View ArticleCoding4Fun - Arduino/ESP u8g2 中文字庫自動化工具
玩了一陣子 SSD1306 OLED 顯示器,也玩了幾回點陣中文字型,是時侯把它們結合在一起 - 試試在單色 OLED 上顯示中文。 之前我主要用 Adafruit 驅動程式庫接 SSD1306 OLED,其文字顯示侷限在 ASCII 字元集,要顯示 Unicode 字元,大部分人會使用 U8g2 ... Read More
View ArticleSQL Server View、Function 及 Stored Procedure 定義之快速備份
我有個快速備份 SQL 資料庫 View、Function 以及 Stored Procedure 定義的需求,顯然球又飛進 PowerShell 的守備範圍。 SQL Server 有個 sys.sql_modules 資料表,包含 View、Function、Stored Procedure、T... Read More
View Article前端單兵基本教練 - X-Frame-Options、CSP frame-ancestors 網站內嵌限制實測
基於安全考量,現代網站通常會加上 HTTP Header X-Frame-Options 或 Content-Scurity-Policy(CSP) 防止 Clickjacking (點擊劫持)。(不知道 Clickjacking 的同學可參考 淺談 IFrame 式 Clickjacking 攻擊... Read More
View Article【答客問】NSwag WebAPI 回傳 DataTable 發生 JSON property 'Item' is defined multiple...
讀者 Bike 提到「NSwag 遇到回傳 DataTable 的 Action 會回傳 The JSON property 'Item' is defined multiple times on type 'System.ComponentModel.ComponentCollection' 錯誤... Read More
View Article非典型 Out Of Memory 茶包
幫忙看了一個 Excel 批次匯出作業記憶體不足錯誤,是我之前沒見過的樣態,增廣見聞之餘順手記錄一下。 問題情境是有個能批次匯出 Excel 報表檔的 Windows Form 程式,負責查詢資料庫後以來源代碼為單位,一個來源匯成一個 Excel 檔案,程式以 VB.NET 撰寫 (哈,好久沒看到你... Read More
View Article.NET 記憶體管理探索(1) - Managed Heap、SOH、LOH 與 GC
前幾天解決完非典型 Out Of Memory 茶包,感覺自己雖然寫了這麼多年 .NET,對記憶體管理的了解仍偏虛浮,只知道背後有個強大的 GC 會負責找記憶體空間放物件,物件不用了會自動回收空間,完全不用我們操煩。需要物件時 new 一下,超出變數範圍(Scope)後不要殘留變數、屬性指向它,.N... Read More
View Article.NET 記憶體管理探索(2) - 記憶體還剩很多為什麼 Out Of Memory?
昨天文章提到,85000 Bytes 以下的物件會建立在 SOH、超過的大型物件則會建立在 LOH。LOH 與 SOH 的一項重要差異是 - LOH 會隨 G2 回收回收不用的物件記憶體,但不會進行壓實(Compact,搬移物件讓物件緊密相鄰),因此被清掉物件會形成空洞穿插在留存物件間,空洞可重複利... Read More
View Article.NET 記憶體管理探索(3) - 為什麼程式爆記憶體,用工作管理員卻看不出來?
今天講另一個大家可能遇過的狀況:程式噴出 Out Of Memory 記憶體不足錯誤,也確信它用到大量記憶體,但打開工作管理員檢查,該程式的記憶體用量卻只有幾百 MB,看起來很平常。 要探討這個問題,先要用範例程式重現情境。 昨天文章最後有個持續建立大型 byte[] 物件耗光記憶體的程式範例,32... Read More
View ArticleChrome/Edge 92 版起禁止跨網站 IFrame 呼叫 alert/confirm
同事分享一個 Chrome 92 版引發的新問題 - IFrame 內嵌的跨來源網頁將無法呼叫 alert/confirm/prompt。 依據 Chrome 官方資料 - Feature: Remove alert(), confirm(), and prompt for cross origin... Read More
View Article前端單兵基本教練 - 使用 postMessage 與 IFrame 跨網站網頁互動
昨天講 Chrome 92 起禁止 IFrame 內嵌跨網站網頁 alert/confirm/prompt 一事時提到,IFrame 內嵌跨網站網頁時原本就有諸多限制,基於安全考量,禁止被內嵌的第三方網頁存取母網頁,也不允許母網頁存取第三方網頁的 DOM、JavaScript 物件,甚至想看一下 l... Read More
View Article【茶包射手日記】解開 32 位元 .NET 程式 800M 記憶體上限之謎,終於!
【前言】 這是一次難得的辦案經驗。 上週處理 Out Of Memory 茶包在爬文時查到好幾篇文章提到 「.NET 32bit 程式的可用記憶體上限是 800M」,與我所知的 1.6G 明顯不符,但官方文件卻指證歷歷,在我心中成為不解之謎。 想挖掘真相,但發現自己根基不穩技能不足,第一次為了破案去... Read More
View ArticleGit 小技巧 - 產生從零開始的 git diff 報告
這是我自己常遇到的問題 - 先寫了專案雛型,用 git init 就地建立 Git Repository,在第一次 Commit 放入雛型版本,之後陸續修改加入新的 Commit。 專案第一次上線用 git diff 產出 Compare List,卻發現我無法列舉所有專案檔案。原因是產生 git ... Read More
View Article網頁瀏覽到一半被問是不是機器人 - Cloudflare CAPTCHA
在瀏覽某些熱門網站時,你可能會看到如下的 noCAPTCHA 介面,要求你證明自己不是機器人: 由網頁右下角(上圖[1])的 Cloudflare 字樣,可以推敲該網站正使用 Cloudflare 服務,如 DDoS 防護、CDN 或 WAF (Web Application Firewall) ... Read More
View ArticlePowerShell 練習 - Git diff 瘦身工具
之前寫過小工具將 git diff 程式差異報告轉成網頁好讀版,讓版本控管流程更符合人性,但挑戰總是會接踵而來。同事通報,網頁好讀版在處理某個 Commit 差異報告時爆炸了。未看先猜檔案過大,果然,git diff 輸出檔高達 77MB!! 程式碼是純文字,77MB 都可以寫出賈維斯 Jarvis... Read More
View Article使用 C#/PowerShell 執行 SSMS 所產生包含 GO 的 SQL Script
SSMS 有個方便功能,在 Table、View、Function、Stored Procedure 等物件用右鍵選單可以產生建立該物件的 SQL Script。 產生的資料表 Script 連 Description 註解都有,拿到新資料庫執行可建立一模一樣的資料表,十分方便: USE DB_N... Read More
View ArticleCoding4Fun - 12 行 PowerShell 搞定批次下載 Podcast MP3
最近慢跑聽膩 MP3 耳機裡現存的百年歌單,加上近幾個月都跑六分半配速,聽快節奏歌曲蠻不搭的,想抓些 Podcast 來聽解悶。 把 Podcast 抓成 MP3 的事兩年前做過一次,當時是先找到有完整集數列表的網頁,寫 JavaScript 抓 DOM 轉成 URL 與標題清單,再用 C# 寫程式... Read More
View Article使用 C#/PowerShell 實現檔案下載續傳功能
從網站下載大檔案,若下載一半中斷,從中斷處繼續下載已是所有瀏覽器的基本功能。其背後原理是透過 HTTP 1.1 協定加入的 HTTP Accept-Ranges 及 Range 規格,網站透過 Response Header Accept-Ranges: byte 表明自己接受分段下載;客戶端發送 ... Read More
View Article