顯示具有 程式 標籤的文章。 顯示所有文章
顯示具有 程式 標籤的文章。 顯示所有文章

2017-04-04

在 Visual Studio Web 專案增加異常處理


示範用的是 VS 2007, 但其它本版的 Visual Studio 操作過程幾乎是完全相同.



首先在項目中增加全域應用程式類別 Global.asax



在 Global.asax 中找到 Application_Error, 裡面放進送給自己 Mail Code.

Exception 是一定要有.

Dns.GetHostName() 可以知道是哪台機器送出來的.

HttpContext.Current.Request.Url 可以知道是哪個網頁有問題.

完成後只要系統有任何 Exception, 都會 Mail 出來.



但還有個很大的問題, 就是系統會把 Exception 的資訊傳給使用者, 包含程式碼. 萬一 Exception Code 位置有敏感資料, 如系統 id password 那就麻煩大了.



製作一個異常顯示頁面, 就是 Exception 發生時想讓使用者看到的畫面.

然後到 Web.config 裡找到 system.web, 把 customErrors 裡面的 defaultRedirect 指向異常畫面.

如此萬一有 Exception 發生, 就不再出現有 Code 但使用者覺得莫名其妙的畫面.



2017-03-25

Google Code Jam

Google Code Jam 是世界上最大的程式設計競賽之一, 2003 年開始舉辦, 每年 4 月開始. Google Code Jam 也是為數不多可使用 C# 的程式競賽.

今年 2017-03-07 19:00(UTC) 開始報名, 只要擁有 GMail 帳號就可參加. 晉級方式如下圖所示.



首先是資格賽. 三或四道題, 時間二十七小時, 只要能達到合格分數晉級人數不限.

Round 1 有三場, 兩個小時三十分鐘, 每場的前一千名才能晉級, 基本上能晉級選手都能在時間內完成所有題目, 所以就是最快完成題目的前一千名. 應該是配合全球一起比賽的時間, 三場時間正好分別是台灣的早上, 下午, 深夜. 最近規則做了修改, 只要選手通過其中一場比賽, 其它場 Roind1 就不能參加, 應該是先前有高手三場都參加, 佔了其他選手晉級的名額.

比賽題目以 2015 年資格賽為例. 在 Google Code Jam 官方網站, 點選 PAST CONTESTS.



找到 2015 的題目, 點選 Qualification Round 的 Problem



正式比賽看到的畫面就是這樣. 左邊顯示這個 Round 有 A B C D 四道題, 底下有四道題的配分及目前提交和成績. 中間就是題目說明.



比賽方式是寫完程式後下載輸入資料, 經由所寫的程式跑出輸出檔案, 再把輸出檔案上傳驗證. 資格賽檔案上傳會立刻判斷答案是否正確, 答案錯誤只會告訴你答案有問題, 至於是題目理解錯誤, 或解題邏輯有問題, 還是程式 Bugs 只能自己想辦法.

輸入檔案有兩個, 一個小資料一個大資料, 檔案下載後會開始計時, 一分鐘未上傳答案算一次失敗. 小資料應該是驗證解題邏輯, 大資料是驗證程式有沒有優化過, 有時程式可以通過小資料測試, 可是遇到大資料程式會在規定時間跑不完.

同一道題大小資料有時分數差很多, 這可能表示這道題目不難理解, 解題方式也不難, 困難的地方是優化的技巧.