public static bool operator ==(Buddy b1, Buddy b2)
{
if ((object)b2 == null && (object)b1 == null)
{
return true;
}
else if ((object)b2 != null && (object)b1 != null)
{
return (b1.Nick == b2.Nick);
}
else
return false;
}
public static bool operator ==(Buddy b1, Buddy b2)
{
if ((object)b2 == null && (object)b1 == null)
{
return true;
}
else if ((object)b2 != null && (object)b1 != null)
{
return (b1.Nick == b2.Nick);
}
else
return false;
}
I want to put both WinServer 2008 and FreeBSD 7.0 on my laptop. In my first try, I installed WinServer 2k8 first, then installed FreeBSD with the option that let the FreeBSD edit Master Boot Record. After that stupid choice, I lost my Win Server partition. When boot up, Windows said that the winload was fail. Well…
The solution is:
1. Install WinServer 2008.
2. Install FreeBSD with the option that untouch the MBR.
3. After that, your computer eill reboot into FreeBSD. Not straight, ’cause the FreeBSD’s partition is active now. You have to reboot by a boot CD and use a Disk Partition tool (e.g. PQMagic …) to set the WinServer partiton to Active.
4. After reboot into WinServer, use EasyBCD and add a new entry into the BCD:

5. Reboot. All done. You will have two among the most powerful Server OSs on your PC.
WinServer 2008 có thể xem là OS tốt nhất của M$ từ trước đến giờ. Sau khi cài đặt và sử dụng, nó thực sự lôi cuốn cả về tốc độ lẫn tính ổn định. Tuy nhiên vì nó sinh ra để làm server nên để dùng cho 1 cái .. laptop như của tôi thì cần phải chỉnh sửa một số thứ. Và sau đây là những điều mà bạn có thể làm để biến WinServer 2008 thành HĐH lý tưởng cho laptop
Quá trình cài đặt nhanh đến bất ngờ. Sau 3-4 màn hình config gì đó, bạn chỉ phải đợi 30 phút để hoàn tất (mặc dù cài xong thì WinServer chiếm tới … ~8GB). Sau 30 phút cấu hình nữa, tôi có một laptop thật sự mạnh mẽ. Sau đây là những điều chỉnh:
1. Tắt Shutdown Event Tracker: vào Run gõ “gpedit.msc”, Administrative tools->System-> Display Shutdown event tracked -> Disable.
2. Tắt tính năng bảo mật của IE: mặc dù hay d2ng Firefox hơn
, nhưng thỉnh thoảng dùng IE thì những thiết lập Security mặc định của WinServer quả thật hơi phiền phức. Bạn có thể tắt như sau:
Start->Server Manager->Configure IE Sec->Chọn Off ở cả 2.

3. Audio:
Start->Run->”Service.msc”->Windows Audio -> Automatic
4. WMP, Photo Galery, WLAN interface…:
Start->Server Manager->Features->Add Feature-> Chọn cài Desktop Experience và Wireless LAN Service.
5. Live Messenger: Phiên bản mới nhất sẽ không cài được trên WinServer 2008 (hơi khó hiểu). Bạn có thể dùng phiên bản cũ, hoặc copy nguyên folder Live Messenger từ máy XP sang
6. SuperFetch: Công nghệ này sẽ load trước các chương trình thường dùng lên bộ nhớ, được quảng cáo là sẽ giúp máy tính chạy nhanh hơn:
Start->Run->”regedit”
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Thêm 1 key DWORD, tên là EnablePrefetcher , value = 3
Thêm 1 key DWORD, tên là EnableSuperfetch, value = 3
Start->Run->”services.msc”->SuperFetch->Automatic
7. Office 2k7 và VS 2k8 (dĩ nhiên
)
8. Cài IIS:
Start->Server Manager -> Add Roles -> chọn Web Server (IIS), sau đó có thể cài luôn FTP Server trong mục này nếu thích. Nếu đang học mạng thì bạn có thể cài DHCP, Active Directory… để nghịch
9. Active Sync: Do nhu cầu, tôi thường phải dùng nó, nhưng hãy quên ActiveSync đi, Windows Mobile Device Center hấp dẫn hơn nhiều.
Bạn còn có thể enable các tính năng của Vista như Aero, Themes v.v… nhưng với cái máy cà tàng như của tôi thì chắc là không nên. Trên chiếc laptop Pressario C301TU (HDD 160G, RAM 1.25G) cài các ứng dụng “khủng bố” như Office 2k7, VS 2k8, enable Web Server, Server 2k8 vẫn ấn tượng khi boot trong vòng 90s, shutdown trong 30s…
Thử đi, và cho Vista của bạn về vườn là vừa.
Có thể xem Singleton là một trong những mẫu thiết kế (Design Pattern) dễ cài đặt nhưng cũng rất hiệu quả trong thiết kế phần mềm. Ở đây không nhắc lại về mẫu này, chỉ xin trình bày một số “cải tiến” nhỏ đối với Singleton mà tác giả đã sử dụng cho phần mềm của mình trong thực tế.
Mục đích: Mẫu Singleton chuẩn có thể sử dụng cho các lớp chỉ có duy nhất 1 instance trong chương trình. Tuy nhiên trong các ứng dụng có nhiều thread, mà các thread này đều phải truy xuất chung đến một đối tượng Singleton thì sẽ nảy sinh nguy cơ xung đột. Do đó cần có cơ chế đảm bảo việc truy xuất đối tượng Singleton sao cho không xảy ra hiện tượng này.
Cài đặt:
public class TSSingleton
{
private static object SyncRoot = new object();
private static TSSingleton m_Instance;
protected TSSingleton()
{
// Initialize code goes here…
}
public static TSSingleton Instance
{
get
{
lock(SyncRoot)
{
if(m_Instance == null)
m_Instance = new TSSingleton();
}
return m_Instance;
}
}
}
Cài đặt khá đơn giản. Một đối tượng SyncRoot được dùng để đảm bảo tại một thời điểm, chỉ có đúng 1 thread truy xuất đối tượng TSSingleton. Kĩ thuật này hiệu quả khi đối tượng Singleton là một phần tử trong giao diện, và có vài thread đang chạy nền có như cầu truy xuất đến nó.
Ứng dụng thực tế: Các chương trình chat như Yahoo Messenger, Microsoft Live Messenger v.v… có thể quản lý nhiều cửa sổ chat cùng một lúc, nhưng mỗi cửa sổ là duy nhất cho một nick. Giả sử bạn đang chat với nick A, thì chỉ duy nhất 1 cửa sổ chat được tạo ra, ứng với nick chat này. Như vậy nảy sinh yêu cầu có một tập các đối tượng Singleton. Cài đặt cái này trong C# cũng không quá khó:
using System.Collections.Generic;
public class Multiton
{
private static Dictionary<string, Multiton> m_arrInstances = new Dictionary<string, Multiton>();
private readonly string m_sID;
protected Multiton(string sID)
{
m_sID = sID;
// Initialize code goes here…
}
public static GetInstance(string ID)
{
if(!m_arrInstances.ContainsKey(ID))
m_arrInstances[ID] = new Multiton(ID);
return m_arrInstances[ID];
}
}
Trong destructor của lớp, ta cần thêm vào câu lệnh:
m_arrInstances.Remove(m_sID);
để loại đối tượng này khỏi danh sách!