2009/02/06

.Net 新手之global.asax - application 的用法 (1)

今天 .Net 新手看到了gloabl.asax 的用法,試了幾次後,上來寫寫筆記,感覺上 global.asax 這一個檔案集合了 Web Application 中的所有共用事件,我依網路上提供的範例做了練習,並稍微改寫一下下:
  1. 每一個網頁的 header 都要出現 "歡迎光臨"
  2. 每一個網頁的 footer 都要看到網頁出現的時間
  3. 當有 Error 時,網頁上要出現 "資料庫忙錄中"
首先請先建立在專案的目錄中,一個名為 global.asax 的檔案,檔案內容如下:
<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(Object sender, EventArgs e) {
}

void Application_OnBeginRequest(Object sender, EventArgs E)
{
Response.Write("歡迎光臨<br>");
}

protected void Application_OnEndRequest()
{
Response.Write("<hr>This page was served at " +DateTime.Now.ToString());
}

protected void Application_Error(Object sender, EventArgs e)
{
Response.Write("<span >");
Response.Write("資料庫忙碌中<hr></font>");
Response.Write("<font face=\"Arial\" size=\"2\">");
Server.ClearError();
}

</script>

在 Application_Error 裡頭,也可以將 Error message 寫入 log file 或是以 email 呈現在網頁上,以下是我在網路上所看到的範例
void Application_Error(object sender, EventArgs e)
{
string Message = "";
Exception ex = Server.GetLastError();
Message = "發生錯誤的網頁:{0}錯誤訊息:{1}堆疊內容:{2}";
Message = String.Format(Message, Request.Path + Environment.NewLine, ex.GetBaseException().Message + Environment.NewLine, Environment.NewLine + ex.StackTrace);

//寫入事件撿視器,方法一
System.Diagnostics.EventLog.WriteEntry("WebAppError", Message, System.Diagnostics.EventLogEntryType.Error);

//寫入文字檔,方法二
System.IO.File.AppendAllText(Server.MapPath(string.Format("Log\\{0}.txt", DateTime.Now.Ticks.ToString())), Message);

//寄出Email,方法三
//此方法請參考System.Net.Mail.MailMessage

//清除Error
Server.ClearError();

Response.Write("系統錯誤,請聯絡系統管理員!!");

}

而我們也可以利用 web.config file,依據錯誤的類型而導到不同的網頁,xml tag 是 <customErrors>,如下:
<customErrors defaultRedirect="GeneralError.htm" mode="on">
<error statuscode="404" redirect="FileNotFound.htm"/>
</customErrors>

可以利用Application_BeginRequest,在使用瀏灠網頁時,記錄user id, current time(System.DateTime.Now) 以及 Path(Request.AppRelativeCurrentExecutionFilePath) 等等資訊,可以做為使用者的喜好分析或是檔案下載分析……

2009/02/05

尋求建議與提供建議

在中文來說,我們常常問「你覺得我這樣做如何?」、「你有沒有什麼好的建議?」、「你覺得我該怎麼辦」,我們英文可以這樣子說:
  • Have you got any ideas about ... 你對於…有什麼樣的想法嗎?
  • I'm thinking of ... What do you think? 我考慮…你覺得如何?
  • Can I ask your opinion about ... 關於…我可以問你的意見嗎?
  • I need some advice ... 我需要一些關於…建議
當然除了尋求建議之外,我們有時候也會被問,或是提供建議,例如說,「如果我是你,我就會…」、「最好的辦法就是…」、「我有一個不錯的小妙方」、「你可能要考慮一下…」這個時候英文要怎麼說呢?我們可以這樣說:
  • I suggest you ... 我建議你…
  • Here's a good tip. 我有一個好辦法
  • It seems to me ... 在我看來…
  • What you need is ... 你所需要的是…
  • Why don't you ... 你為什麼不…
  • What I would do is ... 是我的話我就會…
  • If I were you, ... 如果我是你…
  • The best thing to do ... 最好的辦法是…
  • You might want to think ... 你或許該考慮…
當然,有時候別人給的建議可能不是很好,那我們也應該要很客氣的回答,免得潑對方冷水,我們會常說「你的建意是不錯,但是我覺得不是好很耶」或是說「你確定是這樣嗎 ?」,在英文中我們也應該要客氣的回答哦:
  • That’s a good idea, but ... 這是一個好的建議,但是…
  • Good suggestion, but I ... 這辦法,但是…
  • I am not really sure about that. 我對這樣不是很確定耶
  • Do you think so? 你真的是這樣想嗎?

2009/02/04

.Net 的第一堂課的筆記

公司交待了新任務,就是要學習 .Net ,這對我來說也是好事一件,一樣的,在這一個不景氣的時代,公司交待什麼就去做就對了,畢竟保住飯碗是目前最重要的事情,而且多學一樣技術,對未來的發展應該是只有好沒有壞,感謝公司的同仁擔任老師,今天學的還不少,像是學會怎麼使用Visual Studio 來開發程式啦~~還有 Label, TextBox, Button, DropDownList, FileUpload 等元件的使用等等。
一開始,老師先教我怎麼啟動Visual Studio以及如何開一個新的WebSite,並且做相關的喜好設定,不過這些設定依個人喜歡進行設定,沒有一定的規則。
  1. 「工具」-->「選項」:在左下方先勾選「顯示所有設定」:會發現上方的選項會增加許多。
  2. 點選上方選項「專案和方案」,在選邊勾選「永遠顯示方案」
如何創建一個網站專案?
  1. 從「檔案」-->「新增專案」,因為我們是要建的是網頁程式(web application)所以請選擇「Visual C#」-->「Web」,在右邊的選項請選擇「ASP .NET Web應用程式」。
  2. 在下方的「名稱」請填寫你專案的名稱,例如 "JulianWebApplication",並且填寫此專案的位置,例如 "d:\Visual Studio 2008\Projects"。
  3. 按下「確定」即可
我所使用的是Visual Studio 2008,搭配的是 .Net 3.5
寫了幾個簡單的元件操作:
  • 在網頁上輸入姓名,然後顯示「xxx 歡迎您」。
  • 創建一個下拉式選單,選擇 item 後,出現 「您最喜歡吃的是 xxx 嗎?」。
  • 上傳檔案到 web server 上。
其實整個使用起來,感覺跟以前學的 VB 有點像,就是每一個元件都有它所屬的屬性,例如一般常見的 "字體大小"、"字體顏色"、"元件名稱" 等等的屬性,並且每一個元件也有相對應的 Action ,例如說,"按了這一個按鈕之後的重作" 、 "輸入完文字欄後的動作" 、 "選擇下拉選項之後的動作" 等等的 Action ,那 Action 裡面就可以呼叫很多的 Function 來做你所想要做的事情。以下就簡單的說明我是怎麼做的囉!
  • 在網頁上輸入姓名,然後顯示「xxx 歡迎您」,如下圖。
  1. 在左邊的「工具箱」-->「標準」拖拉「Label」元件,並修改「屬性」-->「Text」為 "請輸入姓名"
  2. 在左邊的「工具箱」-->「標準」拖拉「TextBox」元件,置於Label右方,並修改「屬性」-->「(ID)」為 "TextName"
  3. 在左邊的「工具箱」-->「標準」拖拉「Button」元件,置於「請輸入姓名」的下方,並修改「屬性」-->「Text」為 "登入"
  4. 在左邊的「工具箱」-->「標準」拖拉「Label」元件,並修改「屬性」-->「Text」將其它容清除。
最終的設計結果如下圖:

之後請雙擊「登入」,即可看到 Button1_Click 的Method,請在Button1_Click Method 中加入以下二行並存檔執行,即可以看到執行結果。
protected void Button1_Click(object sender, EventArgs e)
{
string strName = TextName.Text;
LabelOutput.Text = strName + "歡迎您";

}

在創建一個專案或是網站的之後,會在其相對應的目錄中產生 .sln 的檔案,欲開啟舊專案或網站時,請點選 .sln 的檔案即可。

一個 ASP.NET 的網頁,會產生二個檔案:
當我們創建一個 ASP.NET 的網頁,會產生二個檔案,副檔 .aspx 是網頁的 layout,而副檔 .aspx.cs 是網頁的程式碼,如Button Action。
若要將外部的 ASP.NET 網頁加入現在的網站或專案中,必須將檔案複製或是搬移到網站或專案的目錄中,加入之後,在方案總管的上方點選「重新整理」的按鈕即可。

上了三小時的課,回家做了一些功課,內容如下:
  • 使用者進登入畫面,輸入帳密碼
  • 驗證失敗則回到登入畫面,成功則進入主畫面 (帳號、密碼檔為XML File)
  • 主畫面中有一個連結可以進個人資料畫面
  • 個人資料畫面可以上傳圖檔
檔案可參考這裡…要看更多的範例請看這裡

會議結束時的用法

在還沒有學習這一個章節之前,要結束會議我可能會說「Thank you for join this meeting」,這種用法經由書籍來看,似乎不是一個很好的用法。
事實上,要結束一個會議 biz 在 2/2 中的教材建議可以使用下面例句 (1 ~ 4):
  1. Why don't we call it a day. 今天就到此為止吧。
  2. If there are not other comments, we'll wrap this meeting up ( or wrap up this meeting). 如果沒有其它意見,我們就結束會議吧。
  3. Let's bring this to a close for today. 今天就到這兒吧。
  4. The meeting is finished; we'll meet again next Wednesday. 會議結束;下週三我們再開會
  5. I guess that will be all for today.
例句中的 wrap this meeting up,實際上是利用 wrap up 「結束」這一個片語來說明此會議結束,所以我們也可以說:
  • Anybody got anything else that they desperately want to raise before we wrap up?
  • It's time to wrap up. 該結束會議了
  • If no one has anything else to add, then I think we'll wrap this up.
開會的時間快結束了,已經沒有太多的時間可以討論了,我們可以說:
  • It looks like we've run out of time, so I guess we'll finish here.
而在結束前,也可以問問其它人有沒有其它的意見,如下:
  • Okay - any other business? 還有其它事情嗎?
  • Right, I think that's probably about it. 好了,我想就大概是這些吧。
而主席 ( chairperson) 在問有沒有其它問題時,你也可以說:
  • I would like to say something...
因為會議的時間不夠,須得再安排其它會議時間,我們可以說:
  • We'll meet again on the first of next month.
當然在會議結束後,也提醒與會者別忘了簽名:
  • Oh, before you leave, please make sure to sign the attendance sheet.
等一下下,離開前也別忘了投下您神聖的一票哦!
  • Don't forget to put your ballot in the box on your way out.
什麼!這個會議有人提供餐點,這個時候可別忘了謝謝提供餐點的人
  • Before I let you go let's all give a big thank you (everyone claps) to Thomas for baking these delicious cookies.
會議裡的椅子請歸還到其它會議室,我會非常的感謝的!還有,記得垃圾別忘了帶走
  • If you could all return your chair to Room 7 that would be appreciated.
  • Please take all of your papers with you and throw out any garbage on your way out.
最後,當然是要感謝大家的參與啦~~~
  • Thank You's and Congratulations
  • Again, I want to thank you all for taking time out of your busy schedules to be here today.
更多英文會議內容,可參考 BBC或是這裡

2009/02/03

PHP 課程 (2)

老師說「每天都要學一點點」,所以今天寫了第二個 php 網頁,原來在 php 裡面的分行必需使用 HTML 中的 <br>,並且加在 "" 中,而 php 裡頭所處理的資訊要如何呈現在網頁上呢?可以使用 echo 這一個 function,以下就是我的程式碼:
<?php
echo "以分行符號 <br> 做區隔 <br>";
echo "Hi, I am Julian! <br>";
echo "Who are you?";
?>
<br>
<?php
echo "以不分行符號<br>做區隔<br>";
echo "Hi, I am Julian!";
echo "Who are you?"
?>

而網頁呈現的結果是……
以分行符號 <br> 做區隔
Hi, I am Julian!
Who are you?
以不分行符號 <br> 做區隔
Hi, I am Julian!Who are you?

由上面可以看到其結果,沒有加上分行符合的,即使在程式中看起來是有分行,但實際上,最終的呈現仍未分行。
相關內容可參考此網站 Jollen's PHP 或是這裡

2009/02/02

我 PHP 的第一堂課


因為擔心在這一波經濟衰退的風暴下成為無業遊民的一員,於是乎我決定要培養我的第二專長,就是學習PHP,以免失業後,找不到工作,所以決定啦,要以 PHP + Apache + MySQL 做為以後混飯吃的工具之一,不過在一開始我就遇到了一個問題,在依前輩們的指示,安裝了Apach、MySQL、PHP 之後
第一sample就是創建一個 index.php 的網頁於 htdocs 目錄中,呼叫 phpinfo() function (如下)

<?
phpinfo()
?>

但是卻未如預其出現相關資訊,頁面呈現為空白

經過爬文後,原本以為是 php.ini (於PHP安裝目錄) 中 disable_functions 參數設定的問題,但我將其參數 mark (;disable_functions) 之後並沒有改差,頁面仍然空白,經由不斷的 search 之後,原來要修改的是要將short_open_tag 設定成 On 之後就可以顯示頁面了,修改 php.ini 之後,需要重新啟動 Apach 。

看樣子這是 PHP5 的限制,若沒有將 short_open_tag 設定打開,則需要加上 php ,如下所示:

<?php
phpinfo()
?>


當然在此之前需要修改 Apache 安裝目錄下的 conf\httppd.conf ,中的 ServerName 在這裡我是設定 localhost ,在網址列輸入 http://localhost/index.php

以下是我安裝順序以及安裝的版本:
  1. Apache 2.2 (apache_2.2.11-win32-x86-openssl-0.9.8i.msi)
  2. MySQL 5.1 (mysql-5.1.30-win32.zip)
  3. PHP 5 (php-5.2.8-win32-installer.msi)
更詳細的安裝說明請看這裡

如何將Blogger 的文章加以分類並隱藏 navbar



Blogger 沒有提供分類功能,一直是讓人覺得頭大的事情,我在想是否真的需要以暴力來編輯範本,才能對文章做分類,因為懶~~~~所以我放棄用 Blogger 撰寫 blog 的念頭已經很久了,但上網 search 之後,發現有許多的有心人提供 Blogger 分類的好方法,就是結合 Furl ,經由頁面 Step by Step 的方式,也可以將 Blogger 文章快速的分類哦!
雖然需要花點時加創建頁面以及將文章分類,還好我的文章量很少,所以快快的分類完畢!

還有我一直覺得Blogger navbar 實在不怎麼好看,於是乎又上google search 了一下,發現有很多種隱藏 blogger navbar 的方法,我選擇其中一種方式來隱藏,只要在 header 前面加上下面這二行即可,其它的方式可以看這裡
#navbar-iframe{opacity:0.0;filter:alpha(Opacity=0)}
#navbar-iframe:hover{opacity:1.0;filter:alpha(Opacity=100, FinishedOpacity=100)}