簡單易用的多執行緒 TCP Server 範例

12/30/2011
Switch On The Code 網站上有一個很簡單、立即可用的支援多執行緒的 TCP server 範例(使用 C# 語言)。如果臨時需要寫一個簡易的 TCP Server,這個範例可以節省一些時間。

文章連結:C# Tutorial - Simple Threaded TCP Server

基本上,就算不去看文章內容,直接把文章裡面的前三段程式碼依序貼到你的 Visual Studio 專案裡,然後編譯、執行,你就馬上有一個運行中的 TCP server 了。

文章最後的兩段程式碼,一段是在告訴你如何從 server 端把資料傳回給用戶端,另一段程式碼則示範如何撰寫一個 TCP 用戶端,並傳送資料給我們的 TCP server。

開放原始碼的 .NET 反組譯工具 - ILSpy

12/23/2011

ILSpy 的操作介面有點像 .NET Reflector,雖然功能比較少一點,但基本上還算夠用。就 open source 軟體而言,其實挺不錯的。如果不想花錢買 .NET Reflector,不妨試試 ILSpy。

範例:用 GZipStream 壓縮 JSON 字串

12/23/2011
這是先前寫的測試 code,用來了解 JSON 字串經過 GZip 壓縮後能夠節省多少資料傳輸量。

ASP.NET 效能問題排除筆記

12/16/2011
上回有提到正在協助研判一個 ASP.NET 應用程式的效能問題,該問題的癥結已經找到,這裡記錄一下始末。

ASP.NET 應用程式的效能技巧

12/13/2011
這兩天又碰到有人提出奇妙的 ASP.NET 效能問題(註1),查看之後,又興起了一個念頭,想把有關 ASP.NET 效能有關的東西稍微整理一下,以便日後發現其他與效能有關的東西時,有個地方可以集中存放。

有關「集體智慧」的學習資源

12/03/2011
記錄一些有關集體智慧(Collective Intelligence)的學習資源和工具,也許將來有機會用到。

Dependency Injection 筆記 (6)

11/23/2011
.NET 相依性注入》電子書內容連載 (6)

逐步教學:撰寫 PowerPoint 2010 的 Add-in

11/08/2011

Dependency Injection 筆記 (5)

11/04/2011
.NET 相依性注入》電子書內容連載 (5)

Visual Studio 2010 妙用錦囊

10/29/2011

Dependency Injection 筆記 (4)

10/28/2011
.NET 相依性注入》電子書內容連載 (4)

Dependency Injection 筆記 (3)

10/26/2011
.NET 相依性注入》的試閱章節連載 (3)

軟體專案估計與計畫

10/25/2011

在《Software Estimation》的第一章,有談到估計和計畫的關係:
估計和計畫是兩個相關的議題,但估計不是計畫,計畫也不是估計。..估計應該是客觀的分析過程,而計畫則是主觀的目標求解過程。估計的目的是得到準確的結果,不是尋求特定的結果;而計畫的目的則是尋求特定的結果。我們刻意(適當地)讓計畫傾向某個方面,以得到特定的結果。

Dependency Injection 筆記 (2)

10/15/2011
.NET 相依性注入》的試閱章節連載 (2)

Dependency Injection 筆記 (1)

10/14/2011
.NET 相依性注入》的第一章連載 (1)

YAGNI 原則的一點想法

9/15/2011
YAGNI(You Ain't Gonna Need It)原則是 KISS(Keep It Simple and Stupid)的一個支派,意思是我們不應該為程式碼加入尚未用到的功能。

Windows Identiy Foundation 初體驗

9/10/2011
就真的是初體驗,很粗淺的 WIF ....


裝載 WCF 服務

9/08/2011
WCF(Windows Communication Foundation)服務必須寄人籬下,住在某個房東的家裡。這個房東是一個 Windows 處理序,我們稱它為 host process。把一個 WCF 服務放進一個 host process 中運行,這個動作叫做「裝載」(hosting)。一個 host process 可以裝載多個 WCF 服務,而且裝載的方式有好幾種,包括:使用 IIS 裝載、使用 WAS(Windows Process Activation Service)、或 WAS 加 Windows Server AppFabric,或者自行撰寫裝載的應用程式。

WCF 概念圖 v1.4

9/07/2011
這是新版的 WCF 概念圖,主要補強了裝載(hosting)服務的部分。

分散式版本控制系統:Mercuial

9/05/2011

書摘:心態致勝

9/05/2011
心態致勝》一書的核心圍繞著兩個元素:定型心態與成長心態。書中詳細分析了這兩種心態的成因與行為,並且不厭其煩地舉出許多實例來說明。我想,閱讀這本書的人,多少應該都會有「啊!這裡講的不就是我嗎?」的驚嘆。看了幾章,連我自己都感到有點「老狗或許還能變點新把戲」的幻覺--另一種說法是「燃燒鬥魂」。

書摘:Self-Reliance (by 愛默生)

8/28/2011
Self-Reliance 的作者為愛默生(Ralph Waldo Emerson),以下為書摘,取自《自立》中英雙語版網頁,再加上網路上另一篇摘譯的部分內容(綠色字體是我改動的部分,原文也是我加上去的):

C# 筆記:Expression Trees

8/15/2011
本文要介紹的是 expression trees,屬於進階議題,是寫給喜歡「往下挖深一點」的朋友看的。在進入正題之前,會先簡短複習一下 lambda expressions 的基本觀念。

如果你對匿名函式、匿名方法、lambda 表示式三者間的關係還不是很清楚,在另一篇文章<C# 學習筆記-委派與 Lambda 表示式>裡面有一張匿名函式的概念圖,應該會有些幫助。

泛型、型別參數、建構的型別

8/13/2011
泛型可用於類別、介面、委派、和方法。這裡要先介紹的是宣告泛型類別的基本語法:

《C# 學習筆記》寫作計畫

8/09/2011
曾有個想法,寫一本 .NET 或 C# 程式設計的書。可是,寫完整本書要花好多時間,何況我的動作又慢得像烏龜,老是這裡修一下,那裡補一下,不然就是分心去看別的花花草草。這種寫法,恐怕永遠都無法完成一本書。而且,有些主題,我不是很感興趣,也就很難定下心來寫。最近又有個想法:何不寫成獨立章節,以 chapter 為單位的方式來處理呢?

Lambda 運算式?運算式 Lambda?

8/08/2011
我們知道,lambda expression 的寫法有兩種形式:expression lambda 和 statement lambda。我嘗試按照微軟官方的譯法,將 "expression" 一律譯為「運算式」,可是讀起來總覺得挺彆扭。

《哲學家與狼》:我們最好的部分來自最差的部分

7/25/2011


這本書是在一間小鎮的圖書館新書架上看到,以前有聽過,便借回家翻一下。原以為作者主要是寫他與狼共同生活的一些瑣事(也有,但有些其實還蠻有意思的),想說隨意翻看就好,後來發現並不是這麼單純。如書名所透露的,作者其實是藉由他所觀察到的狼的習性,來表達一些有關人類這種高等生物的一些想法,或者說,人生哲學。

Git v1.7.x 對中文檔名的處理已經沒問題

7/22/2011
剛剛發現,在 commit 一個檔案時,那個檔案放在一個叫做「閱讀」的子目錄下,結果就無法 commit。無論使用 Git Bash、Git Gui、還是 TortoiseGit,都會出錯。

選擇合適的集合類別

7/13/2011
James Michael Hare 有一篇 C# 基礎文章:Choosing the Right Collection Class,整理了一些 .NET 集合類別的特性和適用時機,很值得參考。我嘗試用 if-then-else 語法寫了一個協助挑選集合類別的決策邏輯,也許將來碰到不知該選誰的時候可以派上用場。

為何改用 Git ?

5/29/2011
Subversion 用得好好的,為什麼要改用 Git 呢?

Git 基礎工作流程

5/28/2011
使用 Git 來管理版本時的基礎作業流程:
  1. 建立一個共享的版本庫。
  2. 將遠端主機上的版本庫複製一份至本機。
  3. 修改本機的工作複本,然後提交。
  4. 將提交的檔案推送至遠端主機的版本庫。

Git over HTTPS on Windows

5/25/2011
在<Git Server on Windows 安裝手記>中,我整理了在 Windows 環境上安裝 Apache HTTP Server 和 Git for Windows 的操作步驟。這篇則是要讓 Git(其實主要是 Apache)支援 HTTPS 加密協定。也就是說,連同這篇的設定,你的 Git 伺服器就能夠同時支援 HTTP 和 HTTPS 啦!

Git 的 core.autocrlf 參數

5/24/2011
Git 的 core.autocrlf 參數到底該設為 true 還是 false,網路上有不少討論,而且意見分歧。我第一次用 Git,也有這個疑問。爬文之後,我的理解是這樣:

Git Server on Windows 安裝手記

5/24/2011
這篇主要是記錄我在 Windows 平台安裝 Git 的過程。先描述一下作業需求:
  • 用戶端和伺服器端的作業系統都是 Windows(最近一次試過的版本是 Windows Server 2012)。
  • 用戶端要能透過 HTTP 的方式存取版本庫。
  • 無論是取出檔案還是送交檔案,都需要驗證身分(輸入帳號密碼)。
底下是安裝步驟,如果您是初次安裝,請特別留意加粗的紅字

老師的十二樣見面禮

5/12/2011
書名:老師的十二樣見面禮
作者:簡媜
出版:印刻

這是一本很有趣的書,作者以輕鬆詼諧的筆調描寫他們夫婦倆帶著小學四年級的兒子(姚頭丸;以頭大如丸得此稱號)到美國一所名為 Dunn 的小學遊學的生活點滴。

不只有趣而已,讀著讀著,會開始想到台灣的教育。那間叫做「盪」(Dunn) 的小學,鼓勵小學生多元發展,寫家庭作業的時間不超過四十分鐘,成績單不只是單純的國語、數學、社會、公民等科目的分數,還包括了「超越學科的能力」評量,如社會能力、研究能力、思考能力、交流能力、自我管理能力等等。想到家裡的小孩常常寫功課寫到晚上九點多,跟我小時候比起來,真是辛苦多了。

ImeLib v0.3 已發布

5/11/2011
ImeLib v0.3 已發布至 CodePlex 網站,這次的主要變動如下:
  • 增加對 64 位元 Windows 作業系統的支援。(v0.2 無法在 64 位元作業系統上正常執行)
  • 增加 Phantom 建置腳本。
  • 增加 ASP.NET 範例程式:ImeLibDemoWeb。

讀書心得:教育應該不一樣

5/01/2011

書名:教育應該不一樣
作者:嚴長壽
出版社:天下文化
出版日期:2011-04-28

閱讀嚴總裁的這本書,我深有同感。書中對於文憑社會的現象多有針砭,說出了許多我心裡想說的話。

底下列舉一二。


碰上自稱金石堂客服的詐騙

4/29/2011
昨天傍晚經過重慶南路,就到三民書局裡面,找個角落坐下來看書。過一會,突然聽到隔壁書櫃旁邊有位先生接了通電話,然後很生氣又無奈的跟對方大小聲:「你們很奇怪耶!現在才打來跟我說要分十二期....」這一講竟然講了三五分鐘...突然,我的手機鈴聲響起。

使用 IIS Express 來開發與除錯 ASP.NET 應用程式

4/25/2011
簡單地說,IIS Express 可以取代目前 Visual Studio 2010 內建的 ASP.NET Development Server(又稱為 Cassini),做為 ASP.NET 應用程式的開發與除錯伺服器。

Entity Framework 概念圖

4/19/2011
花了點時間把 Entity Framework 的基礎觀念與各組成元素整理成概念圖。這還只是 0.1 版,沒有涵蓋全部的東西,但做為入門指引,或許有些用處。

EntityDataSource.Select 屬性值裡面的 "it" 是什麼?

4/07/2011
在 Visual Studio 中透過 EntityDataSource 的智慧標籤功能「Configure Data Source」設定好連接的物件和選取的屬性之後,我們可以從 .aspx 網頁原始碼中看到 EntityDataSource 控制項的 Select 屬性值有一些以 "it." 開頭的字串,如底下範例程式碼的第 4 行:

IIS 7 基礎觀念:網站、應用程式、與虛擬目錄

4/05/2011
在 IIS 6 的時代,「應用程式」(application)和「虛擬目錄」(virtual directory)這兩個東西很像,容易搞混,只在功能上有些不同(應用程式比虛擬目錄多了一些功能)。到了 IIS 7,官方網站上提供了一份文件:Understanding Sites, Applications, and Virtual Directories on IIS 7。這份文件更清楚地解釋了這兩個相似概念,有助於釐清我們的疑問。以下整理一些重點:

Visual Studio 2010 自訂 UML Profiles - Part 2

3/30/2011
Part 1 裡面,我們已經建立並安裝好自訂的 UML Profile,在這篇續集中,自然就是要說明如何在模型中套用自訂的 stereotypes 了。

Visual Studio 2010 自訂 UML Profiles - Part 1

3/30/2011
這篇原本有打算要投稿,並錄製教學影片,沒想到中間跑去處理別的事情,就這樣任由它躺在硬碟裡面好幾個月...>_<  有些東西--尤其是資訊技術--時效性是非常重要的。等時效性一過,自己的興頭也大減,就再也沒有動力將它完成了。現在既然發現了這篇筆記,不如稍做整理,讓它重見天日吧(其實 MSDN 上面也有類似的教學文件了)。

圖多,導致篇幅有點長,故分割成兩個部分。這篇是 Part 1,包含基礎觀念和一個練習:建立 UML Profile。Part 2 則會說明如何在模型中套用自己定義的 stereotypes。

學習目標:
  • 瞭解如何建立自訂的 UML profile 和 stereotype 來擴充 UML 的語意。
讀者須具備:
  • 熟悉 Visual Studio IDE 的基本操作。
  • UML 的基本觀念、常用的 UML 圖形元素與表示法。

ASP.NET 應用程式執行於 Windows x64 環境

3/29/2011
原本在 32 位元的 Windows 系統上運作的 ASP.NET 應用程式,改放到 64 位元的環境上跑,瀏覽網頁時出現列錯誤訊息:

無法載入檔案或組件 'YourAssemblyName' 或其相依性的其中之一。 試圖載入格式錯誤的程式。
......
例外詳細資訊: System.BadImageFormatException: 無法載入檔案或組件 'YourAssemblyName' 或其相依性的其中之一。 試圖載入格式錯誤的程式。

[ASP.NET] 關於 RegisterClientScriptInclude 方法

3/19/2011
今天有好幾個人問到這個函式的用法,以及為什麼要傳入 type 和 key 參數,這裡稍微整理一下。

原型宣告:
public void RegisterClientScriptInclude(string key, string url)
public void RegisterClientScriptInclude(Type type, string key, string url)

《柔性管理》書摘

3/15/2011

書名:柔性管理
作者:徐木蘭
出版:天下雜誌 (1998/07)
ISBN:9579079870

十幾年前的書(絕版了),讀起來並沒有太明顯過時的感覺,好像就在講現代管理的一些毛病。因為裡面談的,基本上就是人性的、有人味的管理。

以下是書摘。

微軟已發布 Visual Studio 2010 SP1 及 Feature Packs

3/10/2011

讓 VisualSVN 伺服器同時接受 HTTPS 和 HTTP 請求

2/08/2011
在安裝 VisualSVN Server 時,若有勾選 "Use secure connection (https://)"  選項,用戶端就可以利用 HTTPS 協定來存取版本庫,例如 https://my-server.com/mySvnRepos。可是,如果希望 VisualSVN 伺服器同時接受 HTTPS 和 HTTP 請求,要怎麼設定呢?

使用 Phantom 來自動建置 .NET 專案

2/06/2011
先前嘗試用 IronRuby + Rake,好不容易把必要工具都裝好了,也學了點 Ruby 語法,卻發現它無法正確處理中文字元,於是改用原先 survey 的選項之一:Phantom

這篇筆記會說明 Phantom 的安裝步驟,並展示一個實際專案的建置腳本。

使用 IronRuby 和 Rake 來自動建置 .NET 專案 Part 3

2/05/2011
延續上一篇的範例,這次加入版本編號的控制,也就是在建置過程中自動產生 AssemblyInfo.cs 檔案。

使用 IronRuby 和 Rake 來自動建置 .NET 專案 Part 2

2/04/2011
上次簡單說明了選擇 IronRuby + Rake 來作為建置工具的原因,以及基本的安裝步驟--真的就只是基本的。要能夠用它們來進行建置 .NET 專案,還得再安裝其他套件,同時也必須學習更多 Ruby 語法。

使用 IronRuby 和 Rake 來自動建置 .NET 專案 Part 1

2/03/2011
一直都覺得應該用 NAnt 或 MSBuild 來自動化建置自己的 .NET 專案,可是那些 XML 格式的設定檔實在不是我的菜。就好像一直說服自己應該多熟悉 JavaScript,但心理上依然抗拒,直到碰到 jQuery(可見我有多懶)。對於自動化建置,則是看到 Rake 才眼睛為之一亮:這才是我想要的 build script 編寫方式啊!

Good-bye Collabnet Subversion, Hello VisualSVN

1/30/2011
一直以來,都是使用 Collabnet Subversion Server,而且每隔半年一年,若發現有新版本,就會嘗試將現有的版本升級。幾個月前,看到 Collabnet Subversion Server 改名字了,叫做 Collabnet  Subversion Edge,最近就抽空試裝了一下。好加在,就只是拿自己的 PC 試裝而已,沒有直接升級正式機的 Subversion Server。

技術提供:Blogger.