大型物件 Json.NET 序列化經驗一則
附檔管理模組裡採用 JSON 格式保存暫存物件,將附檔物件序列化暫存成檔案,稍後寫入資料庫時再還原取出資料,直覺又方便。不料因附檔物件內含檔案內容(byte[])體積龐大,在處理極端案例時踢到記憶體不足的鐵板。批次作業程式為 32 位元模式,依經驗記憶體上限約 1.8 GB,一開始很直覺地將資料用 JsonConvert.SerialObject() 轉成 JSON 字串再用...
View Article使用 DebugDiag Tools 分析 ASP.NET 站台記憶體耗盡問題
同事報案,某測試站台不定期會發生 OutOfMemeoryException 記憶體不足錯誤,接獲通報立刻趕往事故現場,問題網站已吃掉 1.8GB 記憶體,差不多是 32 位元模式可用記憶體的上限。廢話不多說,開啟 32 位元工具管理員(C:\Windows\SysWOW64\TaskMgr.exe 參考) 擷取 Memory Dump 檔。從工具箱搬出 CPU/Memory 茶包分析的小型戰術核武...
View Article【茶包射手日記】新增檔案後卻無權限修改
一個詭異的狀況。為了在測試網站測網頁,我透過該主機的網路分享建立一個 HTML 檔案,測完一回,調整程式想存檔時 Notepad++ 彈出以下訊息:這是 Notepad++ 寫入檔案存取被拒的貼心 SOP,當寫入本機檔案遇到權限不足,改用管理者身分多可克服;但本案例檔案來自網路分享資料夾,切換成本機管理者也無濟於事。但這個訊息指出一項事實 -...
View Article【答客問】ClosedXML 日期資料解析測試
網友 Danny 在舊文留言提問關於 NPOI 讀取 Excel 日期,"2017/9/23"被轉成"23-九月-2017"的問題,我已棄用 NPOI 投向新歡 ClosedXML多年,沒打算再花時間研究,於是題目改成: 面對相同文件,ClosedXML 能否順利過關?取得 Danny...
View ArticleCoding4Fun-試聽 16 進位字串表示的 MP3 內容
鹹蝦專案(利用閒暇經營的 Side Project)遇到的需求,先前把 MP3 音效資料整進 SQL 資料表轉成 IMAGE 資料型別,查詢起來像這樣:如果我想試聽這段聲音該怎麼辦? 網路上可以找到一些 T-SQL 範例,將 SQL 裡的二進位資料匯出成檔案。不過這樣子每次試聽的步驟有點麻煩: 用 SELECT 取得某一筆 IMAGE 內容 -> 以內容及檔名為參數呼叫 Stored...
View Article【茶包射手日記】分離式冷氣出風無冷度故障經驗
小木頭跑來報案,房間冷氣完全不冷。前陣子蝦皮免運時失心瘋採購一批儀器,把居家度量衡全面電子化(左起 PH 酸鹼計,土壤濕度酸鹼日照三用錶,電子游標卡尺,紅外線測溫槍),這回輪測溫槍派上用場了。冷氣機出風強弱、運轉模式、溫度調整等操作一切正常,唯一有問題是即使溫度調到 20 度,出風口溫度還是 30 度,跟室溫相同,毫無冷度可言。先做好基本功,洗了濾網(就像作業系統有問題要先做 Windows...
View Article【茶包射手日記】VAIO 筆電開機卡住經驗
我的 VAIO T13 筆電入手於 2012 年 Windows 8 上市之際,近五歲高齡但狀況不差,直到前陣子異常頻傳: 開始是桌面偶爾凍結,滑鼠游標能移動,但點選及鍵盤操作全無反應,關電重開機有效,但沒多久又再發生,常要重開數次才能完全排除,排除後可正常使用一陣子,但當機頻率愈來愈高。終於來到這一天,某次當機重開後,電腦停在 Windows...
View ArticleJavaScript 開發者 ES6 小抄筆記
在網路上看到這篇 - Modern JavaScript Cheatsheet - Modern JS Cheatsheet,給既有 JavaScript 開發者看的小抄,指出因應 ES6/ES2015 新標準的注意事項。(註:如果你被 ECMAScript 6、ES6、ES2015 等術語搞到頭很昏,可以參考這篇) 而這篇則是我以一個 jQuery/TypeScript/C#...
View Article當心營運資訊裸奔-網站偵錯 Log 檔常犯的資安錯誤
「寫 Log」是很有效的線上系統偵錯手段,就像飛機黑盒子或行車記錄器,能在事故發生後提供寶貴資訊,釐清肇事原因,還能用於責任歸屬舉證。例如:系統不定期爆炸,由 Log 歸納每次發生在某使用者進行某項操作之後 客戶否認下單,調閱 Log 舉證登入時間,來源 IP 以及操作順序,萬一客訴鬧上法院還可當作呈堂證供 資料庫發生 Deadlock,由 Log...
View ArticleTypeScript Template String 中文字元被轉為 \uxxxx 格式
Template String是 TypeScript 1.4 起加入的超好用功能(跟 C# Interpolated Strings 字串插值一樣,是用過就上癮的好物),今天發現一個問題 - Template String 內含的中文字元會被強制轉成 \uxxxx。(這種表示法術語叫 Unicode Escape Sequences)例如以下範例:var t2 =...
View ArticleTIPS-VS2017 無法編譯新版 TypeScript 定義檔
以下為在 Visual Studio 2017 使用 TypeScript 定義檔可能出現的狀況。由 NuGet 或 Github 取得 TypeScript 定義檔,卻噴出大量編譯錯誤無法使用:Visual Studio 2017 已更新至 9/19 才發行的 15.3.5 版本,TypeScript for Microsoft Visual Studio 也被一併更新至...
View Article擦屁股的藝術 – 聊聊前人 Bug 的緊急修補
身為程式開發人員,多少都有這種經驗: 線上系統出錯,原開發者已浪跡天涯,程式碼沒人熟,老闆面色猙獰問誰會修。 (遇到這種擦屁股的屎缺,同事們默契十足全都退了一步 ) 老闆說「很好,想不到你剛進公司就想立此奇功!好好幹,公司不會虧待你的」... 你說「暗陰羊咧,陳近南是你?」「沒問題,這交給我!」(心中滿是狂奔的羚羊)這類狀況跟修自己的 Bug...
View ArticleTypeScript Module 簡單練習
ES6 引進 Module(模組化) 概念,每個 Module 自成獨立 Scope,各 Module 可自由定義變數、型別,要開放外界存取的項目再透過 export 開放。當需要引用其他 Module 時,則必須明確使用 import 匯入才能使用。如此各 Module 可獨立開發維護而不彼此干擾,甚至能實現需要時再動態載入,大幅提升開發及應用彈性。TypeScript 也支援...
View ArticleVue 筆記1–也來寫 Vue.js 好了
觀注 Vue.js 已有很長一段時間,上個月我慣用的前端元件庫-Kendo UI 正式支援 Vue 及 React,感覺時機成熟,是可以投入心力研究的時候了。說來尷尬,手邊已有用 knockout.js 開發的線上系統,開發專案的主力則走 Angular.js 1。短短幾年就在公司裡搞出兩套框架(我還為 KO 跟 NG 都寫了 CRUD...
View Article小黑 ThinkPad 懷舊暨迎新
我人生買的第一台筆電是小黑 ThinkPad X21,CPU 是當年的主流 Pentium III 700MHz,記憶體還插滿封頂直上"384M"呢! 加上 Dock 有的沒的,十幾年前一口氣花掉菜鳥工程師兩個月薪水。仗著經常在外遊走唬爛工作需要,高舉「投資自己」大旗,說穿了也在享受敗家樂趣 XD...
View ArticleVue筆記2-在 ASP.NET 專案使用 Vue.js
相信大家看完官方教學已經躍躍欲試,就讓我們動手在 VS2017 ASP.NET 專案開個網頁試試 Vue.js。好消息是 NuGet 上使用 vue 關鍵字就能找到 Vue.js 作者(Evan You, 尤雨溪)自己維護的 Vue 套件,Developer 版本包含較完整詳細的錯誤訊息,如果你沒有自虐傾向,建議裝 Vue.js.Developers.Version。(註: 這兩天剛好發佈了 Vue...
View ArticleVue筆記3-Vue TypeScript 定義檔簡便做法
要用 TypeScript 寫 Vue 程式,首先要取得 Vue.js TypeScript 定義檔才能享受強型別的好處。Vue 2.0 釋出於 2016/9/30(最新版為 2.5 版),NuGet 上的 vue.TypeScript.DefinitelyTyped 更新時間為 2016/9/26,版本只到 1.0,己不適用最新版 Vue.js。(前端開發者已多改從 npm 體系取得定義檔,猜想...
View ArticleJavaScript 中文排序問題
今天才發現 JavaScript 中文字串排序有個大問題! 下圖是 KendoGrid 在 Chrome 使用 JavaScript 排序的結果,如圖所示,一到七由小到大排序結果為一、七、三、二、五、六、四,既不是依筆劃,也不是依注音: (SQL 的中文定序就區分筆劃跟注音,例如: Chinese_Taiwan_Stroke_CI_AS vs...
View ArticleIE showModalDialog + IFrame 內嵌網頁無法複製貼上
今天遇到的奇妙 IE 問題。同事報案,有個網頁單獨開啟操作正常,使用 ModalDialog 顯示時無法複製貼上。( Ctrl-C/Ctrl-V 快速鍵與右鍵選單同步失效)深入研究後發現這現象在特殊條件下才會發生: 網頁 A 先以 showModalDialog 顯示網頁 B,網頁 B 以 <iframe> 內嵌來自另一站台的網頁 C,此時在網頁 C...
View Article【茶包射手日記】只能跑 32 位元的 AnyCPU .NET 程式
測試某個 COM+ 元件應用專案,開發者所附的範例專案測試成功,我自己新增 Console Application 或 Windows Form 專案則卡在找不到 Registry 無法執行。強烈懷疑與 x86/x64 有關,由於只有註冊 64 位元 COM+,專案跑 x86 找不到 Registry 是意料中事,但詭異之處在於我已確認過範例專案跟我新增的專案都是設 Any CPU...
View Article