顯示具有 Programming 標籤的文章。 顯示所有文章
顯示具有 Programming 標籤的文章。 顯示所有文章

2012年3月9日

[Freetalk] 漫談程式設計-II

前篇,本篇就再來舉個例子談談錯誤訊息處理吧

I. 錯誤訊息處理

校方希望全體師生都可以吃青菜,故舉辦了拍附近餐廳的青菜內容上傳的活動
pgs_04 
坎尼也很開心的點開網頁,看看大家的分享內容
但身為一個系統開發人員,注意網址列也是很正常的一件事
asaprogrammer

嗯,如第一張圖所示,是用 Query String 的方式傳送頁面資訊 
很常見的作法,可以節省運算成本,也能有效地達到目的
但好像沒有資料也會顯示該頁,所以坎尼就稍微改了一下參數
pgs_05 在按下Enter鍵的同時坎尼OS「啊啊啊,會不會壞掉?」

pgs_06 嗯…壞掉了 >/////<
但壞掉不要緊,這頁的問題是在它把錯誤訊息給吐出來了

「知道錯誤訊息不好嗎?」
給開發人員知道當然很好,可以馬上了解問題並進行解決

但是!!!

給使用者看到訊息的用意是? 難不成要使用者幫你 Debug 嗎?
還是說這是挑戰,看能不能釣到惡意攻擊的人?

這邊應該要做的是判斷頁數的大小,不合理的數字就該擋掉

II. 同場加映

坎尼想說這個網站會不會還有其他問題,所以就開始隨意瀏覽
除了點連結之外還有改網址…

!!! (出現 FF 中遇敵的音效)
pgs_07 
很明顯的,此站看來是舉辦了大家幫忙一起除錯的全民除錯活動
所以坎尼很好心的連過去 online_resource.php 看有沒有什麼可以幫上忙的

「咦? 奇怪,為什麼顯示 404 page not found? 」
「原來是有做直接存取的限制啊,坎尼放心了不少」
「………」(眉頭一皺,發現事情並不單純)
「不對,是 resource 拼成 resouce 了!!!!」

唉…就算程式沒寫好,英文也要練好啊…

by the way, 如果是系統不能控制的情況,請用 try…catch… 處理
像是 DB Server 當掉,使用者罵的是你而不是管 DB 的人員
(當然如果兩個都是同一個人管的…那…只能說很心酸)

III. 小結

錯誤訊息 (Error Log) 記錄請用 Log 工具
會在頁面上顯示是開發中為了方便做的事,不代表可以在上線之後做

另外最好設計錯誤訊息的顯示格式,到底是 Warning 還是 Fatal
至少要處理的時候可以排出優先順序
Will 保哥在 網站建置不是件簡單的事 @ 打造網站的步驟 的回應也談到
”錯誤訊息在網站企畫階段就要設計。”

至於把訊息曝露給使用者可能會有什麼狀況呢?
可以參考一下同樣是保哥寫的 機會教育:從中華民國總統府網站被發現 XSS 漏洞講起

[Freetalk] 漫談程式設計-I

坎尼自從重回學校之後,寫程式的機會就變少了
但最近在用某些資訊系統時,總覺得怎麼這麼不友善
看來程式魂還是在燒 XD
今天就來舉幾個資訊系統的例子,順便聊一下例子中的問題

I. 資料分類

所有有學過關聯式資料庫設計的人一定都聽過正規化
沒吃過牛肉也要知道瘦肉精,就算不會用也應該會記得1NF、2NF…BCNF …
(不知道正規化有幾階的人請回去找老師或是問維基 資料庫正規化 )

剛好最近用了下面這個XX請修系統
pgs_01

從外表看起來除了 UI 不美觀似乎沒啥大問題
但一打開請修項目:喔喔喔喔喔
pgs_02
幾百個選項一起跳出來,真是令人嘆為觀止
我眼睛也為了找修理項目眼花…

很明顯的,這個請修項目大概只做了第一正規化
坎尼直覺其實可以分為:大類、次類、問題說明 (上圖)
這樣 user 在找的時候可以先選水電類,接著可以找到日光燈,接著再填寫問題
像目前系統做法,日後要是又多了100項
那豈不是要讓下拉選單突破天際瀏覽器邊框了?

當然也有正規化太複雜,導致效能降低的情況,這時候就是要反正規化
但坎尼相信這些資料的量應該還不至於因為正規化而產生瓶頸

當然同頁面的請修地點也有同樣的問題存在
剛好最近又蓋了新宿舍,選單瞬間又加了幾十間房間 orz
pgs_03
 
(1421的同學抱歉啦,如果有看到這篇可以私信給坎尼,再請你們喝飲料)

另外還有個問題,最前面的 610421 很明顯是 primary key 之類的資訊
基本上對使用者是無用的,而且還曝露出自己系統設計原則

設計對白「我是610421的學生,想問幾個問題 (下略)」

除非客服有很好的資訊系統輔助
不然除了通靈之外,鬼才會知道 610421 代表什麼

II. 小結

本來還想多舉個例子的,但篇幅太長就先到這邊
下集待續… (富樫最近都沒休刊,所以坎尼也不能富奸)

2008年12月14日

訓練程式邏輯 – Light-Bot

最近在好幾個地方都不約而同的看到有人推薦 Light-Bot 小遊戲,
說是可以訓練程式邏輯,玩了一下覺得還不錯(共12關),說明畫面是這樣:

image

關卡長得像這樣:

image

右邊有一個「MAIN METHOD」的區塊,就是最後執行的程式,
下面可以自訂「FUNCT.1」和「FUNCT.2」(這應該不用多解釋吧XD),
遊戲目標是要透過 MAIN METHOD 操縱畫面上的機器人走到藍色的格子上去點燈,
機器人可做的動作就是右上方那七種,用拖拉的方式拉到下面的程式區塊即可。

基本上關卡都不太難,不過我莫名的在第六關卡了一段時間,
而且之前同事寄給我第10關第11關的破關方法,害我很懶惰的跳過了第11關 Orz

Anyway,最後我在第10關的作法跟同事寄給我的不一樣(但是忘記抓圖了=.=),
很明顯的每一關都可能有好幾種解法,真的要比的話應該要比誰用的步驟最少,
不過這樣玩起來就有點太過嚴肅了 XD

如果不想在網頁裡面玩的話,也可以到這裡下載

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D