2010年2月11日星期四
2010年1月27日星期三
Why Master Page, But Not Frameset?
[轉載]Published 18 November 2007 06:30 PM 由 Jeffrey
跟同事討論新網站如何讓所有網頁都保持一致的Header/Menu/Footer,我的看法是回歸ASP.NET 2.0建議使用的Master Page、同事則覺得這樣比較笨重,不如保持用FrameSet切割出一塊Frame切換內容的傳統做法即可。想了想,到ASP.NET 2.0後,看到的幾乎都是用Mater Page解決,VS 2005 IDE甚至會在你使用FrameSet時發出警告;另外一方面,除了ASP.NET之外,印象中現在Internet中遊歷到的大小網站,除了一些上了年紀的簡單小網站,已經很難看到用Frame切割Header/Menu的做法。雖然腦中大致了解二者間的差異,但Frame式的設計似乎已快從地球上絕跡了,為什麼?
好奇地針對這個問題,Google了一下,以下是我的心得。
首先,要做出全站一致的Header/Footer,有幾種做法:
•Copy & Paste大法! 把Header/Menu/Footer的Code複製到每一個網頁。
(你瘋了嗎? 誰敢給我用這種方法設計網站,我一定用鍵盤打爆他的頭!!)
•Frameset: 每次只更換Content Frame網頁,缺點是會有Cross-Frame Scripting的Issue,而且有可能Frame間更新狀態不同步。
•利用Server-Side Include: 可用在ASP,但每一頁都要配合排版位置插入。
•利用User Control: 可用在ASPX,但每一頁要配合排版位置擺放。
•Master Page: 利用類似繼承的概念,內容頁不必過問Header/Footer的排版設計,但每次執行都要重新產生Footer/Header元素。
以上這些做法,在ASP.NET 2.0中,大概只剩下Master Page及Frameset兩種要抉擇。Master Page可以確保直接使用內容頁的URL也會看到完整的版面設計,用Frameset則可能瞧見沒有Header/Footer的裸體版內容頁,這在Search Engine點選查詢結果時最可能發生。但Master Page的每一頁都要重新載入、產生及傳輸Header/Footer也是不爭的事實,比Frameset有更多無謂的消耗。
找到一篇不錯的剖析,列舉了採用各架構的最佳實務:
Master Page
•不介意每次全頁更新
•需要彈性化的繼承式版型設計,且使用者不在意全頁更新
•希望每一頁都被獨立檢視時,都可以完整呈現
ICallbackEventHandler
•只想局部更新頁面的部分資料或圖片
•只想局部更新頁面上一些簡單的HTML元素(不含asp: Controls)
XML Data Islands
•在Client建立資料儲存,建少網頁點擊更新次數
FrameSet
•不希望全頁更新
•具有複雜的網頁元件,必須從Server端產生更新(不能只換Data)
•網頁上不同的區域需要用不同的頻率更新
不過,由這些分析,我還是無法理解大部分網站捨棄Frame的理由,看到不少人說"Frames Are Evil"(相信嗎? 居然有個"我恨Frames俱樂部"!),卻沒足夠的理由讓我完全信服。我所知道Frame的缺點包含四點:
1.Cross-Frame Scripting比較曲折,但只要不是Cross-Site,並不難解決。
2.Frame間可能發生更新不同步,例如: Header Frame的Logon User與Content Frame的不是同一人。
3.Browser顯示的URL無法準確反應內容Frame的變動,譹Brower的標籤功能(IE我的最愛)頓成廢材。
4.當使用者使用Content Frame用的URL連上網站,看到的不是完整網站呈現版型。目前Search Engine記錄及Index的特性,這種狀況挺常發生的,但我不敢斷定這就是Frame漸漸被揚棄最主要的理由。
於是我又做了些挖掘,看看可否找出Frame有更多我不知道的黑暗面? 以下是我又挖到的一些補充:
•Frame讓Browser的列印功能變得不直覺
•Frame導致Browser的Refresh行為與使用者的預期有出入
不過,歸納了以上的種種剖析,我認為Frame有些缺點,但罪不至死,不需反應過度。在某些情境下,用Frame仍OK,如果:
•網站為內部使用,不在乎Search Engine Friendly
•Header/Menu/Footer的演算及HTML很複雜,值得省下這個資源成本
•User連線頻寬有限,需要儘可能減少資料傳輸量(Update 2007-11-19)
至於我,應該還是會回歸Master Page,理由是盡量用別人在用的方法做事,出問題時可以多些難兄難弟,也多點相關討論可以參考;萬一被Challenge時還可以說,"嘿! 別怪我,我是照著微軟建議的方式處理的",然後把頭埋到沙子裡繼續睡午覺,哈!!
跟同事討論新網站如何讓所有網頁都保持一致的Header/Menu/Footer,我的看法是回歸ASP.NET 2.0建議使用的Master Page、同事則覺得這樣比較笨重,不如保持用FrameSet切割出一塊Frame切換內容的傳統做法即可。想了想,到ASP.NET 2.0後,看到的幾乎都是用Mater Page解決,VS 2005 IDE甚至會在你使用FrameSet時發出警告;另外一方面,除了ASP.NET之外,印象中現在Internet中遊歷到的大小網站,除了一些上了年紀的簡單小網站,已經很難看到用Frame切割Header/Menu的做法。雖然腦中大致了解二者間的差異,但Frame式的設計似乎已快從地球上絕跡了,為什麼?
好奇地針對這個問題,Google了一下,以下是我的心得。
首先,要做出全站一致的Header/Footer,有幾種做法:
•Copy & Paste大法! 把Header/Menu/Footer的Code複製到每一個網頁。
(你瘋了嗎? 誰敢給我用這種方法設計網站,我一定用鍵盤打爆他的頭!!)
•Frameset: 每次只更換Content Frame網頁,缺點是會有Cross-Frame Scripting的Issue,而且有可能Frame間更新狀態不同步。
•利用Server-Side Include: 可用在ASP,但每一頁都要配合排版位置插入。
•利用User Control: 可用在ASPX,但每一頁要配合排版位置擺放。
•Master Page: 利用類似繼承的概念,內容頁不必過問Header/Footer的排版設計,但每次執行都要重新產生Footer/Header元素。
以上這些做法,在ASP.NET 2.0中,大概只剩下Master Page及Frameset兩種要抉擇。Master Page可以確保直接使用內容頁的URL也會看到完整的版面設計,用Frameset則可能瞧見沒有Header/Footer的裸體版內容頁,這在Search Engine點選查詢結果時最可能發生。但Master Page的每一頁都要重新載入、產生及傳輸Header/Footer也是不爭的事實,比Frameset有更多無謂的消耗。
找到一篇不錯的剖析,列舉了採用各架構的最佳實務:
Master Page
•不介意每次全頁更新
•需要彈性化的繼承式版型設計,且使用者不在意全頁更新
•希望每一頁都被獨立檢視時,都可以完整呈現
ICallbackEventHandler
•只想局部更新頁面的部分資料或圖片
•只想局部更新頁面上一些簡單的HTML元素(不含asp: Controls)
XML Data Islands
•在Client建立資料儲存,建少網頁點擊更新次數
FrameSet
•不希望全頁更新
•具有複雜的網頁元件,必須從Server端產生更新(不能只換Data)
•網頁上不同的區域需要用不同的頻率更新
不過,由這些分析,我還是無法理解大部分網站捨棄Frame的理由,看到不少人說"Frames Are Evil"(相信嗎? 居然有個"我恨Frames俱樂部"!),卻沒足夠的理由讓我完全信服。我所知道Frame的缺點包含四點:
1.Cross-Frame Scripting比較曲折,但只要不是Cross-Site,並不難解決。
2.Frame間可能發生更新不同步,例如: Header Frame的Logon User與Content Frame的不是同一人。
3.Browser顯示的URL無法準確反應內容Frame的變動,譹Brower的標籤功能(IE我的最愛)頓成廢材。
4.當使用者使用Content Frame用的URL連上網站,看到的不是完整網站呈現版型。目前Search Engine記錄及Index的特性,這種狀況挺常發生的,但我不敢斷定這就是Frame漸漸被揚棄最主要的理由。
於是我又做了些挖掘,看看可否找出Frame有更多我不知道的黑暗面? 以下是我又挖到的一些補充:
•Frame讓Browser的列印功能變得不直覺
•Frame導致Browser的Refresh行為與使用者的預期有出入
不過,歸納了以上的種種剖析,我認為Frame有些缺點,但罪不至死,不需反應過度。在某些情境下,用Frame仍OK,如果:
•網站為內部使用,不在乎Search Engine Friendly
•Header/Menu/Footer的演算及HTML很複雜,值得省下這個資源成本
•User連線頻寬有限,需要儘可能減少資料傳輸量(Update 2007-11-19)
至於我,應該還是會回歸Master Page,理由是盡量用別人在用的方法做事,出問題時可以多些難兄難弟,也多點相關討論可以參考;萬一被Challenge時還可以說,"嘿! 別怪我,我是照著微軟建議的方式處理的",然後把頭埋到沙子裡繼續睡午覺,哈!!
2010年1月20日星期三
Apple iPhone Apps開發 VS Google Android Apps開發
來自 亞特蘭提斯 .NET Atlantis 明仔 著
到目前為止,.NET CF 4.0 (.NET Compact Framework) 都沒有任何消息,雖然VS2010 RC推出日期是TBA (原定2月中,但已証實Delay),但就正如我之前所說,.NET CF 4.0是Windows Mobile最後希望,即使未來.NET CF 5.0會有什麼大更新都不可能追過iPhone平台或者Android。
但現在WM已經在垂死邊緣,WM6.5對End User和開發者都沒有驚喜,WM7推出遙遙無期,HTC都開始推Android多過WM。
而且iPhone和Andriod的勢頭實在太強,到處都是相關討論,我想是時候去研究一下其他平台。
如果你和我一樣都想從iPhone和Android中,二擇其一的話,定必要看看以下兩篇文章。
軟體商怎選Apple iPhone與Google Android?
Android versus iPhone Development: A Comparison
http://www.zdnet.com.tw/enterprise/technology/0,2000085680,20137151-1,00.htm
http://greensopinion.blogspot.com/2009/07/android-versus-iphone-development.html
特別是zdnet那一篇,其實我都幾同意,iPhone的門檻較高,先要買部Mac機,學用Mac之餘,再買XCode IDE,再來就是學Objective-C,
而Android就較易入門,Eclipse CDT加上ADT就可以,語言方面則是Java。
我個人則對Android比較有興趣,如果你打算開始的話,我建議先看看這篇文,除了固有Java的Class之外,還有Android的API,和軟件架構。
Android開發筆記
http://code.google.com/p/androidbmi/wiki/DiveIntoAndroid
到目前為止,.NET CF 4.0 (.NET Compact Framework) 都沒有任何消息,雖然VS2010 RC推出日期是TBA (原定2月中,但已証實Delay),但就正如我之前所說,.NET CF 4.0是Windows Mobile最後希望,即使未來.NET CF 5.0會有什麼大更新都不可能追過iPhone平台或者Android。
但現在WM已經在垂死邊緣,WM6.5對End User和開發者都沒有驚喜,WM7推出遙遙無期,HTC都開始推Android多過WM。
而且iPhone和Andriod的勢頭實在太強,到處都是相關討論,我想是時候去研究一下其他平台。
如果你和我一樣都想從iPhone和Android中,二擇其一的話,定必要看看以下兩篇文章。
軟體商怎選Apple iPhone與Google Android?
Android versus iPhone Development: A Comparison
http://www.zdnet.com.tw/enterprise/technology/0,2000085680,20137151-1,00.htm
http://greensopinion.blogspot.com/2009/07/android-versus-iphone-development.html
特別是zdnet那一篇,其實我都幾同意,iPhone的門檻較高,先要買部Mac機,學用Mac之餘,再買XCode IDE,再來就是學Objective-C,
而Android就較易入門,Eclipse CDT加上ADT就可以,語言方面則是Java。
我個人則對Android比較有興趣,如果你打算開始的話,我建議先看看這篇文,除了固有Java的Class之外,還有Android的API,和軟件架構。
Android開發筆記
http://code.google.com/p/androidbmi/wiki/DiveIntoAndroid
2010年1月16日星期六
2009年10月28日星期三
ASP.NET Server Side & Client Side資料加密處理
來自 亞特蘭提斯 著
對於ASPX網頁上暫存資料方面,ServerSide最常用多數都是用Session,ClientSide應該都是ViewState吧,前者應該沒有太多保安問題,但後者的ViewState其實要Decode根本不難,所以加密功夫其實很重要的。近期工作上經常要使用 jQuery + Web Service處理資料,有些敏感資料會經JSON傳回Browser,又或者經Hidden Field傳回Server,有些情況是很難避免的 (特別是上司要求…),我看過有些懶人只用Base64轉碼就當是加密其實真的很危險。
.NET Framework其實本身在System.Security.Cryptography NameSpace下已經提供了大量加密方式,在MSDN看過後,取了幾種針對String加密的,做了少少資料搜集有關 3DES / DES / RSA 和 AES (Rijndael) 的比較,其實4種方法同樣都需要一項Key才可以進行正常解密,所以即使知道你網頁中加密後的字串,而不知道你所設定的Key都不可能正常解密的。
論安全性,粗略評估後的排行應該是 AES (Rijndael) > AES > 3DES > RSA / DES。
至於使用方面,Client-Side可以使用以下的Javascript 解密AES:
http://www.movable-type.co.uk/scripts/aes.html
Server-Side方面,其實MSDN上已有很清晰的Sample,以下就是使用AES (Rijndael)方式對String進行encrypt和decrypt的例子。
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
class RijndaelSample
{
static void Main()
{
try
{
// Create a new Rijndael object to generate a key
// and initialization vector (IV).
Rijndael RijndaelAlg = Rijndael.Create();
// Create a string to encrypt.
string sData = "Here is some data to encrypt.";
string FileName = "CText.txt";
// Encrypt text to a file using the file name, key, and IV.
EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV);
// Decrypt the text from a file using the file name, key, and IV.
string Final = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV);
// Display the decrypted string to the console.
Console.WriteLine(Final);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a new Rijndael object.
Rijndael RijndaelAlg = Rijndael.Create();
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
// Create a StreamWriter using the CryptoStream.
StreamWriter sWriter = new StreamWriter(cStream);
try
{
// Write the data to the stream
// to encrypt it.
sWriter.WriteLine(Data);
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
// Close the streams and
// close the file.
sWriter.Close();
cStream.Close();
fStream.Close();
}
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
}
}
public static string DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a new Rijndael object.
Rijndael RijndaelAlg = Rijndael.Create();
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read);
// Create a StreamReader using the CryptoStream.
StreamReader sReader = new StreamReader(cStream);
string val = null;
try
{
// Read the data from the stream
// to decrypt it.
val = sReader.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
// Close the streams and
// close the file.
sReader.Close();
cStream.Close();
fStream.Close();
}
// Return the string.
return val;
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
return null;
}
}
}
對於ASPX網頁上暫存資料方面,ServerSide最常用多數都是用Session,ClientSide應該都是ViewState吧,前者應該沒有太多保安問題,但後者的ViewState其實要Decode根本不難,所以加密功夫其實很重要的。近期工作上經常要使用 jQuery + Web Service處理資料,有些敏感資料會經JSON傳回Browser,又或者經Hidden Field傳回Server,有些情況是很難避免的 (特別是上司要求…),我看過有些懶人只用Base64轉碼就當是加密其實真的很危險。
.NET Framework其實本身在System.Security.Cryptography NameSpace下已經提供了大量加密方式,在MSDN看過後,取了幾種針對String加密的,做了少少資料搜集有關 3DES / DES / RSA 和 AES (Rijndael) 的比較,其實4種方法同樣都需要一項Key才可以進行正常解密,所以即使知道你網頁中加密後的字串,而不知道你所設定的Key都不可能正常解密的。
論安全性,粗略評估後的排行應該是 AES (Rijndael) > AES > 3DES > RSA / DES。
至於使用方面,Client-Side可以使用以下的Javascript 解密AES:
http://www.movable-type.co.uk/scripts/aes.html
Server-Side方面,其實MSDN上已有很清晰的Sample,以下就是使用AES (Rijndael)方式對String進行encrypt和decrypt的例子。
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
class RijndaelSample
{
static void Main()
{
try
{
// Create a new Rijndael object to generate a key
// and initialization vector (IV).
Rijndael RijndaelAlg = Rijndael.Create();
// Create a string to encrypt.
string sData = "Here is some data to encrypt.";
string FileName = "CText.txt";
// Encrypt text to a file using the file name, key, and IV.
EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV);
// Decrypt the text from a file using the file name, key, and IV.
string Final = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV);
// Display the decrypted string to the console.
Console.WriteLine(Final);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a new Rijndael object.
Rijndael RijndaelAlg = Rijndael.Create();
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
// Create a StreamWriter using the CryptoStream.
StreamWriter sWriter = new StreamWriter(cStream);
try
{
// Write the data to the stream
// to encrypt it.
sWriter.WriteLine(Data);
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
// Close the streams and
// close the file.
sWriter.Close();
cStream.Close();
fStream.Close();
}
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
}
}
public static string DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a new Rijndael object.
Rijndael RijndaelAlg = Rijndael.Create();
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read);
// Create a StreamReader using the CryptoStream.
StreamReader sReader = new StreamReader(cStream);
string val = null;
try
{
// Read the data from the stream
// to decrypt it.
val = sReader.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
// Close the streams and
// close the file.
sReader.Close();
cStream.Close();
fStream.Close();
}
// Return the string.
return val;
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
return null;
}
}
}
2009年10月14日星期三
Project Manager 唔識 Program (轉載)
起香港做電腦行業,要上位做到Manager級,
大概可以分三類,1.高相關學歷 2.真材實料 3.靠吹水 。
第1.和第2. 是無可厚非的,至於第3.認唔認同就因人而異,個人就唔太認同。
在Google上輸入Keyword : Project Manager 唔識 Program ,已經可以找到相關討論:
香港討論區 » 各行各業 » 資訊科技界 I.T. »
唔識寫code的manager有X用咩
Coding 係 IT行業吾係想像中重要
唔識寫code就咪學人做manager啦
唔識寫code的manager/官員, 就係禍港之根本
PM需唔需要識Programming? 我覺得絕對要識,但需唔需要超強?咁又未必。當然如果Coding 都強的話當然就更加好喇,我諗任何人都唔想有事時,PM十問九唔知,話知但又唔肯定的。
Project Manager – 職責就是Project Management : Resource Control / Documentation / Source Control 等等之外,就連Database Design都要。
以近期我做的Project Database做例,就說明現實中PM要不要懂Programming。
這個Table有幾點都有問題 :
1. ParentMenuCode和Code,實際data是INT,但DataType卻有理冇理Set Nvarchar….
2. ParentMenuCode是FK Reference Code,實質就是主Menu和副Menu的關係,但理應分開兩個Table,現在放在一起,就會出現recursive的情況,到需要第三層目錄時就麻煩,再者Code是not null, ParentMenuCode是allow null , 是不是很奇怪…
3. ImageURL和RedirectURL 長度不一,一個是100,另一個是200。雖然好像太吹毛求瑕,但實際寫program時,要set input的max lenght就查一查長度都幾煩。
還有一些不方便公開ScreenShot的,例如Table名有空格,Primary Key / Constraints / Default value,應有則冇等等問題。
出現這些問題,原因就是設計的人沒有由Programming角度出發。
例如Table有空格,沒錯,看起來更清楚,但每次條Query都要用 [ ] (MSSQL) 或 ` ` (MySQL) Quote起來。
明明是應該Default是空白的卻可以Null,令到每次新增一條Record時都可能要特地Insert一個空白入去,或者相反用IsDBNull之類的Function是檢查,首當其衝當然是我這個寫Code的人。
所以現在你問我PM要不要識寫Program,我會答你至少都要”懂”。
大概可以分三類,1.高相關學歷 2.真材實料 3.靠吹水 。
第1.和第2. 是無可厚非的,至於第3.認唔認同就因人而異,個人就唔太認同。
在Google上輸入Keyword : Project Manager 唔識 Program ,已經可以找到相關討論:
香港討論區 » 各行各業 » 資訊科技界 I.T. »
唔識寫code的manager有X用咩
Coding 係 IT行業吾係想像中重要
唔識寫code就咪學人做manager啦
唔識寫code的manager/官員, 就係禍港之根本
PM需唔需要識Programming? 我覺得絕對要識,但需唔需要超強?咁又未必。當然如果Coding 都強的話當然就更加好喇,我諗任何人都唔想有事時,PM十問九唔知,話知但又唔肯定的。
Project Manager – 職責就是Project Management : Resource Control / Documentation / Source Control 等等之外,就連Database Design都要。
以近期我做的Project Database做例,就說明現實中PM要不要懂Programming。
這個Table有幾點都有問題 :
1. ParentMenuCode和Code,實際data是INT,但DataType卻有理冇理Set Nvarchar….
2. ParentMenuCode是FK Reference Code,實質就是主Menu和副Menu的關係,但理應分開兩個Table,現在放在一起,就會出現recursive的情況,到需要第三層目錄時就麻煩,再者Code是not null, ParentMenuCode是allow null , 是不是很奇怪…
3. ImageURL和RedirectURL 長度不一,一個是100,另一個是200。雖然好像太吹毛求瑕,但實際寫program時,要set input的max lenght就查一查長度都幾煩。
還有一些不方便公開ScreenShot的,例如Table名有空格,Primary Key / Constraints / Default value,應有則冇等等問題。
出現這些問題,原因就是設計的人沒有由Programming角度出發。
例如Table有空格,沒錯,看起來更清楚,但每次條Query都要用 [ ] (MSSQL) 或 ` ` (MySQL) Quote起來。
明明是應該Default是空白的卻可以Null,令到每次新增一條Record時都可能要特地Insert一個空白入去,或者相反用IsDBNull之類的Function是檢查,首當其衝當然是我這個寫Code的人。
所以現在你問我PM要不要識寫Program,我會答你至少都要”懂”。
2009年9月25日星期五
3分钟之内答错了 证明你不适合炒股票 (MC Question)
3分钟之内答错了 证明你不适合炒股票 (MC Question)
一道小学三年级数学题,3分钟之内答错了,证明你不适合炒股票!
您3分钟之内的答出的答案是错误的``证明你不适合炒股票!!
一天有个年轻人来到王老板的店里买了一件礼物
这件礼物成本是18元,标价是21元。
结果是这个年轻人掏出100元要买这件礼物。王老板当
时没有零钱,用那100元向街坊换了100元的零钱,找给年轻人79元。
但是街坊後来发现那100元是**
王老板无奈还了街坊100元。现在问题是:
王老板在这次交易中到底损失了多少钱 ?
每人只许发帖答一次,超过3分钟无效哦!!! (DONT CHEAT!!!!!!)
此题10个人作答有9人答错,印证炒股9赔1赚,非常灵验!!!
a) 97
b) 197
c) 121
d) 179
e) 200
f) u
g) 276
一道小学三年级数学题,3分钟之内答错了,证明你不适合炒股票!
您3分钟之内的答出的答案是错误的``证明你不适合炒股票!!
一天有个年轻人来到王老板的店里买了一件礼物
这件礼物成本是18元,标价是21元。
结果是这个年轻人掏出100元要买这件礼物。王老板当
时没有零钱,用那100元向街坊换了100元的零钱,找给年轻人79元。
但是街坊後来发现那100元是**
王老板无奈还了街坊100元。现在问题是:
王老板在这次交易中到底损失了多少钱 ?
每人只许发帖答一次,超过3分钟无效哦!!! (DONT CHEAT!!!!!!)
此题10个人作答有9人答错,印证炒股9赔1赚,非常灵验!!!
a) 97
b) 197
c) 121
d) 179
e) 200
f) u
g) 276
訂閱:
文章 (Atom)