Thứ Tư, 31 tháng 12, 2008

Thơ Chúc Xuân

Xuân này hơn hẳn mấy xuân qua.
Phúc lộc đưa nhau đến từng nhà.
Vài lời cung chúc tân niên mới.
Vạn sự an khang vạn sự lành

Năm mới chúc nhau sức khỏe nhiều.
Bạc tiền rủng rỉnh thoải mái tiêu.
Gia đình hạnh phúc bè bạn quý.
Thanh thản vui chơi mọi buổi chiều.

Đầu xuân năm mới chúc BÌNH AN,
Chúc luôn TUỔI TRẺ chúc AN KHANG.
Chúc sang năm mới nhiều TÀI LỘC,
Công thành danh toại chúc VINH QUANG..

CUNG kính mời nhau chén rượu nồng
CHÚC mừng năm đến, tiễn năm xong
TÂN niên phúc lộc khơi vừa dạ
XUÂN mới tài danh khởi thỏa lòng
VẠN chuyện lo toan thay đổi hết
SỰ gì bế tắc thảy hanh thông
NHƯ anh, như chị, bằng bè bạn
Ý nguyện, duyên lành, đẹp ước mong

Cung chúc tân niên một chữ nhàn.
Chúc mừng gia quyến đặng bình an.
Tân niên đem lại niềm Hạnh Phúc.
Xuân đến rồi hưởng trọn niềm vui

Năm mới chúc nhau sức khỏe nhiều.
Bạc tiền rủng rỉnh thoải mái tiêu.
Gia đình hạnh phúc bè bạn quý.
Thanh thản vui chơi mọi buổi chiều

Thứ Ba, 9 tháng 12, 2008

Programmatic Output Cache Entry Removal

Introduction

A frequently asked question I get when I present or write about ASP.NET’s caching features is, “How do I programmatically remove a page from the output cache?” For a long time now I’ve been unsure of the answer to this. I finally broke down and learned that yes, you can do this, and discovered two methods for implementing the solution. Download this article’s sample code and you’ll quickly see how each method works -- the code required is minimal.

Remove One Page from the Cache

The first technique is simply to specify a particular page and have its output cache entry removed. This is accomplished using the HttpResponse.RemoveOutputCacheItem(string path) method. The path expected is an “absolute virtual path” which means it must be of the form “/foldername/pagename.aspx”. From the sample code, you could create a button that, when pressed, removes the cache entry for a particular page. The code in Listing 1 shows how this would be implemented.

Listing 1: Remove Output Cache for One Page

private void RemoveButton_Click(object sender, System.EventArgs e)
{
HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
}

This works provided that there is a page named CacheForever.aspx in the folder /caching. On that page, you would implement output caching by using the <%@ OutputCache %> directive as usual -- nothing special needs to be done to the cached page for this technique to work.

Remove Many Pages from the Cache

Another technique involves linking many pages together through the use of a key-based cache dependency. This technique requires a little bit more code, but is still very simple to implement. The simple implementation provided with the sample code download took three lines of code. The most important one is added to the page (every page) that is output cached. Listing 2 shows how the cache dependency is added to the page in its Page_Load event handler.

Listing 2: Add Key Dependency to Page

private void Page_Load(object sender, System.EventArgs e)
{
Response.AddCacheItemDependency("Pages");
}

At this point, the page depends on the cache key “Pages”. In a real application, you would want this string value to be read from a configuration file, since it will be used in several places and it’s bad practice to use a string literal in more than one place if at all avoidable. If you test out your page after adding this, and before you do anything else, you’ll find that it has disabled your output caching. The reason for this is that a cache key dependency automatically fails if the key does not exist in the cache. At this point, we haven’t done anything to insert an item into the cache with a key of “Pages”. That’s the next step. Listing 3 shows how to add such a key in Application_Start so that we can be sure it is always present.

Listing 3: Configure Global.asax to Create Key

protected void Application_Start(Object sender, EventArgs e)
{
HttpContext.Current.Cache.Insert("Pages", DateTime.Now, null,
System.DateTime.MaxValue, System.TimeSpan.Zero,
System.Web.Caching.CacheItemPriority.NotRemovable,
null);
}

Finally, to refresh all pages that depend on this key, we simply need to do this exact same thing inside another page or control. For instance, you might create a button called “Expire Page Cache” in your website’s admin menu. Listing 4 shows what that button’s click event handler would look like.

Listing 4: Button Click Handler to Expire Output Cache Pages

private void RemoveKeyButton_Click(object sender, System.EventArgs e)
{
HttpContext.Current.Cache.Insert("Pages", DateTime.Now, null,
System.DateTime.MaxValue, System.TimeSpan.Zero,
System.Web.Caching.CacheItemPriority.NotRemovable,
null);
}




protected void Page_Load(object sender, EventArgs e)
{
Response.Buffer=true;
Response.ExpiresAbsolute=DateTime.Now.AddDays(-1d);
Response.Expires =-100;
Response.CacheControl = "no-cache";
//Your code that follows here
}

Thứ Hai, 8 tháng 12, 2008

Convert nvarchar to ANSII sqlserver

Đầu tiên ta tao 1 bang chua các ký tự thay doi trong sql server

create table ToASCII(target_char CHAR(1), source_char NVARCHAR(50))


viết 1 function dùng để chuyển đổi với nội dung như sao

CREATE FUNCTION ConvertToASCII (@input nvarchar(200))
RETURNS nvarchar(200)
AS
BEGIN
DECLARE @x_target CHAR(1), @x_source NVARCHAR(30), @t_leng int, @t_runner int, @t_char NVARCHAR(1)
DECLARE Get_Cursor CURSOR FOR SELECT target_char, source_char FROM ToASCII
OPEN Get_Cursor
FETCH NEXT FROM Get_Cursor INTO @x_target, @x_source
WHILE @@FETCH_STATUS = 0
BEGIN
SET @t_leng = LEN(@x_source)
SET @t_runner = 1
WHILE @t_runner <= @t_leng
BEGIN
SET @t_char = SUBSTRING(@x_source, @t_runner, 1)
SET @input = REPLACE(@input, @t_char, @x_target)
SET @t_runner = @t_runner +1
END
FETCH NEXT FROM Get_Cursor INTO @x_target, @x_source
END
CLOSE Get_Cursor
DEALLOCATE Get_Cursor
RETURN @input
END


để test thử function nay ta thử thực hiện như sao
vào table vừa tạo nhập vào như sao

o ô
u ú

lúc này ta sẽ thực hiện cậu lệnh select xem thử kết quả nhé

select [dbo].ConvertToASCII('ngô gia phúc') as ten


lúc này table sẽ trả về với giá trị là 'ngo gia phuc'

bạn đã thấy sự khác biệt này chứ
thử làm nhé!!!

Thứ Tư, 3 tháng 12, 2008

C# 3.0 (C# 2008)

Những cái mới trong C# .NET 3.0

Một số bạn hỏi tôi rằng có phải C# 3.0 nằm trong .NET 3.0 Framework hay không? Xin thưa là không? Mà C# 3.0 được giới thiệu trong .NET 3.5. [Xem thêm ở đây]

Trong C# 3.0 có một số tính năng mới đã được giới thiệu, dưới đây là liệt kê tóm tắt các tính năng đó:

* Khai báo biến kiểu không tường minh (Implicitly typed local variables)
* Tạo kiểu (lớp) tạm thời (Anonymous types)
* Các phương thức mở rộng (Extension methods)
* Khởi tạo các Object và Collection (Object and collection initializers)
* Biểu thức Lambda (Lambda expressions)
* Biểu thức truy vấn LINQ (Query expressions)
* Biểu thức cây (Expression Trees)
* Tự động xây dựng Properties (Auto-Implemented Properties)

Nội dung dưới đây sẽ đi sâu chi tiết vào một số các tính năng mới này.
Implicitly Typed Local Variables

C# 3.0 đưa thêm 1 từ khoá mới gọi là "var". Từ khoá var cho phép định nghĩa 1 biến mà không cần khai báo kiểu tường minh, như ví dụ dưới đây là hợp lệ trong C# 3.0

var i = 1;

Một điểm lưu ý khi sử dụng khai báo này là giá trị gán vào phải được thực hiện ngay sau lệnh khai báo. Khi thực hiện lệnh gán thì biến đã được ngầm định khai báo kiểu tương ứng. Trong ví dụ:

var i = 1; // Correct
var i; //Incorrect

thì dòng lệnh thứ nhất khai báo là hợp lệ, và i được hiểu là kiểu int. Nhưng đối với dòng lệnh thứ 2, thì không được chấp nhận. Ngoài ra, kiểu dữ liệu được gán vào cũng không được là kiểu null.

Nếu ai đã từng sử dụng VB6 thì cũng lưu ý, đây không phải là kiểu Object cũng không phải là kiểu variant.

Đối với khởi tạo các kiểu dữ liệu mảng, thì có thể sử dụng syntax hơi khác một chút như ví dụ:
var intArr = new[] { 1, 2, 3, 4 };// Declare an array

Dòng code trên có thể được hiểu là intArr as int[];

Ngoài ra, var còn dùng để khai báo các biến có kiểu dùng tạm (Anonymous Types) sẽ được làm rõ trong phần kế tiếp.
Anonymous Types

C# 3.0 cho phép tạo ra các class dùng tạm thời mà không cần phải định nghĩa class đó trước. Ví dụ, mình cần 1 class tạm thời dùng để khai báo 1 mẫu xe có các thuộc tính là năm SX (manf), màu sắc (color) và số chỗ ngồi (seats) thì dưới đây là 1 ví dụ cho phép khai báo như vậy:

var mycar = new { manf = 2007, color = System.Drawing.Color.Black, seats = 4 };
mycar.manf = 2006;
mycar.color = System.Drawing.Color.White;

Trong dòng code trên, từ khoá new cho phép định nghĩa ra 3 thuộc tính là manf, color và seats. Khi compile, C# Compiler sẽ tạo ra 1 class tương tự vậy

class __Anonymous1 {

private int _manf = 2007;
private int _seats = 4;
private System.Drawing.Color _color = System.Drawing.Color.Black;
public string manf
{
get { return _manf; }
set { _manf = value; }
}

public string seats
{
get { return _seats; }
set { _seats = value; }
}

public int color
{
get { return _color; }
set { _color = value; }
}

}
Ngoài ra, nếu như có 1 khai báo khác tương tự để tạo 1 instances mới cho 1 class kiêủ như vậy, thì C# Compiler cũng đủ thông minh để tạo ra 1 class cho >2 khai báo như vậy, và thậm chí, trong code, có thể gán giá trị cho nhau (vì chung 1 type)
Extension Methods

Extension Method là 1 tính năng rất hay trong C# 3.0 này.

Giả sử bạn có được 1 class từ đâu đó, tuy nhiên, bạn không có code mà chỉ có file dll mà thôi. Bạn muốn mở rộng và thêm 1 số hàm của class MyPoint chẳng hạn, thì thông thường bạn sẽ làm cách nào? Inherit , viết Wrapper ...?

Với Extension methods, thì C# cho phép lập trình viên viết các method cho các lớp khác một cách khá dễ dàng. Hãy xem ví dụ sau, class MyPoint là 1 class không có sẵn source, và mình muốn thêm 1 hàm để tính Distance giữa 2 điểm (2 object MyPoint) là từ chính MyPoint đang xét tới 1 MyPoint khác.

Rất đơn giản, khai báo 1 class khác và khai báo thêm hàm cần thêm vào, lưu ý từ khoá this trong Parameter đầu tiên

public static class MyExtend{

public static int DistanceTo(this MyPoint mp, MyPoint another){

//Process the method here
return (mp.x + mp.y) - (another.x + another.y);

}

}

Và trong lớp cần sử dụng... (trong ví dụ sau có dùng 1 tính năng mới của C# 3.0 là Object, Collection Initilizers sẽ được bàn sau)

List allPoints = new List{

new MyPoint{x = 1, y=2},
new MyPoint{x = 3, y=4},
new MyPoint{x = 4, y=2},
new MyPoint{x = 2, y=5}
};

int result = allPoints[1].DistanceTo(allPoints[2]);

Từ ví dụ trên, có thể thấy hàm DistanceTo được xem như 1 hàm của lớp MyPoint.

Khi sử dụng tính năng này, cần lưu ý:

1. Hàm cần thêm vào phải là hàm static
2. Hàm cần thêm vào phải đặt vào trong 1 class static
3. Kiểu dữ liệu của tham số đầu tiên sẽ tương ứng với kiểu dữ liệu cần thêm vào.
4. Từ khoá this phải đặt ở tham số đầu tiên
5. Để sử dụng, thì class dùng để khai báo phải visible trong context cần sử dụng (dùng using...)

Object and Collection Initializers

C# 3.0 cũng cho phép khởi tạo các đối tượng và khai báo chỉ trong cùng 1 câu lệnh, và class cũng không cần phải có các constructor, hãy xem ví dụ khai báo Class MyPoint dưới đây:

public class MyPoint{

int _x = 0;
public int x {

get { return _x; }
set { _x = value; }

}

int _y = 0;
public int y{

get { return _y; }
set { _y = value; }

}

}

Lưu ý là ở đây, Minh không khai báo bất kỳ Constructor nào. Hãy xem ví dụ ở trên về Extension Method, C# 3.0 cho phép viết khởi tạo các class như đã được nêu ở bên trên

Đơn giản hơn:

MyPoint p = new MyPoint() { x = 1, y = 4 };

Cũng đã có câu hỏi rằng tại sao không gọi vậy cho lẹ:

MyPoint p = new MyPoint(1,4);

Do ở đây không sử dụng Constructor, nên cách gọi này là gọi 1 constructor với 2 tham số 1 và 2...
Auto-Implemented Properties

Trong lúc lập trình, việc khai báo các Properties cho 1 class là chuyện làm rất thường xuyên, như ví dụ ở trên, class MyPoint được khai báo các properties như sau

public class MyPoint{

int _x = 0;
public int x {

get { return _x; }
set { _x = value; }

}

int _y = 0;
public int y{

get { return _y; }
set { _y = value; }

}

}

Đa số các Properties đều thực hiện các thao tác như là ghi và đọc từ 1 biến private nào đó. Trong C# 3.0, nếu như properties của bạn chỉ thực hiện các thao tác như ở trên (đọc và ghi vào biến private) thì không cần phải khai báo như vậy, mà thay vào đó chỉ cần khai báo:

public class MyPoint{

public int x {get ; set;}

public int y {get ; set; }

}
Khi biên dịch, thì C# Compiler sẽ tự động tạo ra các biến private tương tự y như khai báo tường minh ở khai báo trên. Kết quả là 2 khai báo hoàn toàn tương tự nhau.


3 tính năng còn lại bữa sau viết tiếp vô đây, hết giờ ... làm rồi

Tags: dotnet, techniques, csharp, what_new
Wednesday September 19, 2007 - 04:25pm (ICT) Permanent Link | 2 Comments
Chạy theo .NET???? (Phần 2)
Chạy theo .NET???? (Phần 2) magnify

Trong Entry trước đã có nói về các Foundation của .NET 3.0 trở lên là WPF - Windows Presentation Foundation, WCF - Windows Communication Foundation, WF - Windows Workflow Foundation , Windows CardSpace.

Entry này sẽ đi sâu hơn những khác biệt trong các .NET framework, từ 1.x, 2.0, 3.0 và 3.5 (beta)

ADO.NET vNext= LINQ
.NET Compact Framework 1.0 .NET Compact Framework 2.0

* .NET Compact Framework 2.0
* .NET Micro Framework 2.0



* .NET Compact Framework 3.5
* Silverlight 1.1
* .NET Micro Framework 2.0

Từ bảng trên, có thể thấy một số điểm sau đây:

* Từ 1.x lên 2.0 đã có sự thay đổi cơ bản về cấu trúc bên dưới của .NET framework (CLR 1.0 --> CLR 2.0)
* Từ 2.0 lên 3.0 về cơ bản thì không có gì thay đổi nhiều trừ các Foundation được đưa vào. Như vậy, những ứng dụng đã được viết để chạy trên .NET 2.0 hoàn toàn có thể chạy được trên nền 3.0. Từ đó, nếu bạn đang sử dụng .NET 1.x, và bạn muốn nâng cấp lên, tốt nhất là nâng cấp lên 3.0 luôn mà ko cần phải cài .NET 2.0. Ngay cả trong lập trình C#, thì C# vẫn là 2.0. Do đó, nếu đang cài .NET 2.0, và bạn chưa cần phải sử dụng các Foundation mới, thì việc cài đặt 3.0 là không cần thiết.
Như vậy, nếu để đưa ra một lời khuyên cho bạn nên cài .NET framework nào, thì .NET 3.0 vẫn được prefer hơn cả vì nó bao gồm cả 2.0 và .NET 3.5 thì chưa được ổn định (beta)
* .NET 3.0 có chứa 1 compiler mới để xử lý các new features và để xử lý LINQ

Các tính năng mới trong .NET 3.5
Thực thi bên dưới Framework nhanh hơn

1. Bộ thu dọn "Rác" trong bộ nhớ làm việc nhanh hơn
2. Quá trình NGen nhanh hơn, "thông minh" hơn đồng thời cũng yêu cầu ít bộ nhớ hơn.
3. Cải thiện các tính năng hỗ trợ CPU 64 bit
4. Nâng cao performance cuả ThreadPool
5. Security check caching trong quá trình thực thi NGen.

Base Class Library – Các class mới

1. Thêm các kiểu dữ liệu mới: BigInteger, HashSet và DateTime2
2. NSA Suite ”B” and FIPs compliant cryptography
3. Lightweight Reader/Writer Lock Classes
4. Anonymous and Named Pipes IO Classes
5. Tích hợp với Event Tracing for Windows
6. New Addin hosting model for extensibility

Language Integrated Query (LINQ)

1. Đưa LINQ vào ngôn ngữ lập trình (C# và VB .NET) và cả trong framework

Workflow Enabled Services – Process and Messaging together

1. Sử dụng Workflow để tạo ra các Services có khả năng chạy trong thời gian lâu dài và ổn định. Công cụ mới là WF activities and new programming model classes cũng đã được thêm vào để đơn giản hoá quá trình tạo ra các Service có Workflow được ứng dụng sử dụng WF và WCF. Tính năng này cho phép các lập trình viên có thể phát triển các business logic cho các Service sử dụng WF đồng thời gởi message từ Service đó thông qua WCF, điều này cho phép đưa ra những chiến lược tốt hơn và giảm thời gian viết code so với trước đó.

Web 2.0 Friendly and AJAX Enabled WCF Services
Visual Studio Developer Tools for WF, WCF and in Visual Studio “Orcas”
More WS-* Standards Support

1. Implementation in WCF of the latest OASIS specifications Web Services Atomic Transaction (WS-AtomicTransaction) 1.1, WS-ReliableMessaging 1.1, WS-SecureCOnversation and Web Services Coordination (WS-Coordination) 1.1.

RSS and ATOM Syndication API

1. Trong .NET 3.5 hỗ trợ các tính năng có thể sinh ra các RSS và ATOM Syndication một cách dễ dàng hơn.

Partial Trust Support for WCF Hosting

1. Partial trust on the client is provided for ASMX parity focussing mainly on partially trusted WCF applications deployed through click-once. Support is provided for basic HTTP binding provided that the application runs in the Internet zone permissions and have granted the apropriate WebPermission. Secure communication is possible through transport security only. All other features are not available to partially trusted applications including hosting services, duplex communications, non-HTTP transports, WS-* protocols and any WF use.

Rules Data Improvements

1. The rules engine in WF is improved to add support for C# 3.0 extension methods, and for operator overloading . Also the ”new” operator is added to compete the base set of expression types.

Built-in WPF tools for Visual Studio “Orcas”

1. The Visual Studio designer for WPF was previously released as a CTP. It is not integrated into the development environment and is significantly improved.

Additional WPF Features and Improved Performance

1. WPF has smoother animations, faster startup and better overall performance. There are also new data types available for data binding with LINQ. Better integration support is now provided for with codename “WPF/E”.

Trên đây là 1 số tính năng mới bên trong .NET framework 3.5 và Visual Studio .NET Orcas (beta).

Chú thích NGen:

NGen là từ viết tắt của Native Image Generator. Đây là 1 công cụ được đưa vào từ .NET 1.x dùng để tạo 1 "native image" cho 1 assembly. Trong .NET, CLR thực thi các mã IL là mã trung gian của .NET (không phải mã nhị phân). Để máy có thể hiểu được, thì nó cần phải được dịch sang mã máy (mã nhị phân). CLR Excution Engine có chứa 1 bộ biên dịch gọi là JIT (Just In Time) để mà chuyển mã IL này sang mã dạng nhị phân (native code) trong lúc chạy. Tuy nhiên, mã nhị phân này sẽ không được lưu lại trên các thiết bị lưu trữ permanant mà nó chỉ được lưu trên bộ nhớ trong Process lifetime. Khi application được restart thì bộ biên dịch JIT phải compile lại các mã IL sang mã native lại.

Bộ NGen này cho phép tạo 1 cái "Native Image" (như là chụp lại cái đoạn mã máy đã được biên dịch) và lưu trên thiết bị lưu trữ trong 1 vùng đặc biệt gọi là NGen Cache - Native Image Cache.

Qua các .NET framework khác nhau, bộ NGen này được tối ưu hóa nhiều hơn với những giải thuật tốt hơn. Nếu gõ vào Start > Run... %windir%\assembly thì có thể thấy thư mục NGen Cache này

Phần tiếp theo: Những cái mới trong C# 3.0
Tags: dotnet, techniques
Wednesday September 19, 2007 - 11:25am (ICT) Permanent Link | 1 Comment
Chạy theo .NET????
Chạy theo .NET???? magnify

Hic, mấy tuần này đang rảnh, nên ngồi đọc tài liệu, cập nhật kiến thức. Mình đã quyết định đi theo hướng công nghệ của MS, chạy theo nó đúng là hụt hơi luôn. .NET 3.0 vừa mới ra, chưa kịp xài, đã ra .NET 3.5, VSS Orcas và SilverLight… hic hic hic

Tranh thủ viết blog, chia sẻ với bạn bè chút kiến thức mới sưu tầm được.

Bài viết này trước hết giải thích một số nền tảng mới trong .NET 3.0.

Trước hết, thì theo đọc qua taì liệu 1 cách sơ bộ thì có thể đưa ra công thức cho .NET 3.0 là

.NET 3.0 = .NET 2.0 + WPF + WCS + WF + WPF

Riêng đối với .NET 3.5 ngoài WPF + WCS + WF + WPF, phần core sử dụng CLR 3.5 còn có thêm 1 cái khá hay đó là LINQ và ASP .NET AJAX được tích hợp các tính năng MS ASP .NET AJAX 1.0 (trước đó code name là Atlas) từ thời .NET 2.0 và khá nhiều tính năng mới được thêm vào. Có thể nói từ .NET 3.0 sang .NET 3.5 là cả 1 break change.

Okie okie, đi chi tiết cho .NET 3.0 trước, thì dưới đây là 1 số tính năng mới của nó

* WPF - Windows Presentation Foundation
* WCF - Windows Communication Foundation
* WF - Windows Workflow Foundation
* Windows CardSpace
* CNG - Cryptography API: Next Generation
* UAC - User Application Control

Chúng ta sẽ đi sâu hơn chi tiết từng đề mục:
WPF: Windows Presentation Foundation

WPF là một bộ các controls trong đó có khá nhiều cái là trùng lặp với các control đơn giản trong Windows Form. Tuy nhiên, các control mới hỗ trợ các tính năng về đồ họa và các tương tác một cách có ấn tượng hơn.

Ví dụ như các đối tượng có thể chứa các đối tượng khác như là 1 nội dung của nó. 1 cái button có thể chứa cả 1 cái Grid, trong grid có thể chứa nhiều label, textbox, hình hay bất kỳ các control nào khác. Đó là đặc điểm khá tuyệt vời của WPF, nó cho phép các control thể hiện ở rất nhiều dạng khác nhau cùng với các tương tác khác nhau, hơn là chỉ 1 đòng text.

Các control trong WPF cũng có thể được tô gradient phần background. Lập trình viên có thể định ra cacs style và template sẵn để cho toàn bộ form có 1 cái GUI thống nhất. Nếu như mà mình cần thay đổi 1 cái button từ kiểu linear gradient (đổ màu tuyến tính) từ màu đỏ sang vàng thành radial gradient (đổ màu tuyến tính theo tâm vòng tròn) từ màu trắng sang đen, mình có thể làm rất dễ dàng trong vài giây và chỉ tại 1 chỗ.

Một đặc điểm nữa của các Control trong WPF đó là nó có thể chứa các trigger, và thực hiện số số action nào đó khi nhận được “kích thích” . Ví dụ 1 cái button có thể thay đổi màu sắc, làm bự ra, thu nhỏ lại, hay quay vòng vòng hay nói chung, các hiệu ứng mà con chuột được đưa vào hoặc là đc nhấn lên đó.

Một trong những khái niệm quan trọng nhất trong WPF là sự tách biệt giữa giao diện và code của nó. Từ ý tưởng là người thiết kế giau diện có thể dùng 1 cái tool như là Expression để xây dựng giao diện, và developer sẽ xử lý code cho các đối tượng đó. Hiện tại, thì chương trình Expression ko có đc miễn phí mà nó phải đc trả tiền để có nó, và MS cũng chưa có cho biết là Expression có được có trong Visual Studio hay ko? Hiện tại, với cái giao diện design WPF trong Visual Studio thì nó ko có làm việc tốt lắm với các control của WPF. Hi vọng sẽ có những caỉ tiến hơn trong các phiên bản sau.

Trong WPF cũng có đưa them 1 khái niệm là XAML XAML (Extensible Application Markup Language — đọc là "zammel"), đây là ngôn ngữ mà sẽ định dạng câú trúc cuả WPF và cũng là ngôn ngữ chính để tạo ra SilverLight object.

Tuy nhiên, các WPF control lại ko muốn “làm việc” chung với các Windows Form control. Mình có thể dùng 1 control của Win Form để chứa WPF control và ngược lại, tuy nhiên, nó ko có dễ dàng như việc kéo thả những control thông thường trong 1 cái form.

Ví dụ, control trong Win Form sử dụng Text để define cái text của control đó như Button hay Textbox chẳng hạn. Ngược lại, các WPF control sử dụng Content để define cái mà bên trong nó chứa, có thể là 1 control khác hoặc 1 đoạn text chẳng hạn. Ngoại trừ Window object (là 1 phiên bản trong WPF của Form) thì cần có cả Content chứa các controls khác và cả Title để định nghĩa cái tiêu đề form.

Windows Control cũng sử dụng FontFamily, FontSize, FontStretch, FontStyle, và FontWeight một cách riêng biệt để hiển thị text, nhưng với Control WPF thì sử dụng thuộc tính Font duy nhất với các thuộc tính riêng. Điều này cũng đồng nghĩa là Visual Studio's WPF form designer sẽ ko có tạo ra những dialog có những font đẹp hơn theo ý mình.
WCF - Windows Communication Foundation

Windows Communication Foundation là 1 bộ các công cụ để thực hiện theo Dịch vụ hướng Kiến Trúc (SOA). Nó bao gồm các lớp và method để xây dựng các lớp (class) client và server. Những tool này giúp lập trình viên xây dựng cacs Class một cách rất dễ dàng.

WCF cũng đồng thời cho phép client và server giao tiếp với nhau bằng rất nhiều cách như TCP, HTTP, name pipes hay Message Queue. WCF cũng đồng thời bao gồm các tính năng để cung cấp các giải pháp giao tiếp an toàn giữa client và server.

Tuy nhiên, 1 điểm bất lợi là WCF cung cấp tất cả những option này thì đồng thời, nó cũng yêu cầu cấu hình, cấu hình cho WCF là 1 vấn đề. VSS cũng ko cung cấp nhiều thông tin hướng dẫn làm sao để build một file cấu hình bằng file XML để câú hình client và server ở mức độ mong muôns. Vì vậy, vấn đề cấu hình cho WCF là một khó khăn mà cần cân nhắc khi sử dụng WCF.
WF - Windows Workflow Foundation

Hì, trước tiên, chúng ta cần giải thích vì sao MS lại sử dụng WF cho cụm từ Windows Workflow Foundation mà đúng ra là fải sử dụng WFF? Thực ra, WFF là tên viết tắt của tổ chức World Wrestling Federation, nên MS cũng ko muốn bị kiện tụng gì nữa, cuối cùng đã sử dụng là WF vừa ngắn gọn hơn. Vì vậy, ở 1 số tài liệu, thuật ngữ này được sử dụng là Windows Workflow hoặc Workflow.

WF cung cấp 1 nhóm các lớp (class) mà mô hình hoá từng khía cạnh của 1 workflow của 1 ứng dụng. Những lớp khác nhau đại diện cho những action ví dụ như đợi 1 sự kiện, thực thi theo điều kiện (branching), đợi 1 trong nhiều sự việc xảy ra và thực thi các lệnh tuần tự.

Sau khi thiết kế workflow, 1 workflow engine sẽ di chuyển các đối tượng qua rất nhiều trạng thái trong workflow cho tới khi chúng đến được điều kiện kết thúc.
Windows CardSpace

WC - CardSpace (hay InfoCard) là 1 công cụ để xây dựng hệ thống nhận dạng dựa vào CardSpace đã trên máy client. Ví dụ trên Ebay xây dựng 1 hệ thống cho phép xác định tính đáng tin cậy cuả ngươì mua và người bán. Tương tự, người dùng CardSpace cũng sẽ tạo ra các identities mà người khác ko thể làm giả khi thao tác với chương trình ứng dụng.
CNG - Cryptography API: Next Generation

CNG được MS hứa hẹn là 1 mô hình mới, đơn giả trong việc mã hoá. Nó bao gồm nhiều cách để "plug and play" với các component khác nhau ví dụ như bộ sinh số ngẫu nhiên (có thể được customize). Nó cũng bao gồm các giải thuật mã hoá mới trên thế giới.

Tuy nhiên, có vẻ như không phải là ý tưởng hay khi dùng CNG với managed code. Thư viện CNG ko fải là thư viện .NET (.NET assembly), nó cũng không phải là COM, cũng không phải là 1 kiểu thư viện như *.tbl file
UAC - User Application Control

Nếu ai đã từng sử dụng Vista thì sẽ thấy 1 điều rằng, dù đang login vào quyền Administrator, thì khi cài đặt phần mềm hoặc tương tác 1 số phần hệ thống, thì 1 hộp thoại sẽ hiển thị, và đôi khi, hiển thị cả ô nhập password của admin. Cách làm này nhằm bảo vệ hệ thống được phép truy xuất bởi những người được phép.

UAC hướng tới việc điều khiển các quyền sử dụng của người dùng đối với application, vì vậy, khi lập trình, thì cần lưu ý đến mức độ ảnh hưởng và cần dùng quyền càng ít càng tốt.

Trong .NET, thì các quyền như ghi, sửa, xoá Registry được phép thực thi mà không cần quyền Admin.

Phù, mệt quá, entry sau viết tiếp: So sánh giữa .NET 1.0, 2.0, 3.0 và 3.5

Một số tài liệu tham khảo

* WPF - Windows Presentation Foundation
* WCF - Windows Communication Foundation
* WF - Windows Workflow Foundation
* Windows CardSpace
* CNG - Cryptography API: Next Generation
* UAC Described
* UAC article: "Teach Your Apps To Play Nicely With Windows Vista User Account Control"
* UAC article: Developer Best Practices and Guidelines for Applications in a Least Privileged Environment

Tags: techniques, theory, dotnet
Tuesday September 18, 2007 - 02:38pm (ICT) Permanent Link | 2 Comments
Abstract class vs Interface
Abstract class vs Interface magnify
Hum ni ngồi rảnh rảnh đọc cái Design Pattern , lâu lắm rồi ko đọc nó. Thì thấy ra mình còn đang confused giữa Abstract Class và Interface .

Sau 1 hồi tìm hiểu trên net thì túm lại là tìm ra được 1 số câu hỏi và câu trả lời sau:

1. Sự Giống và khác nhau giữa Interface và Abstract Class
2. Khi nào thì dùng Abstract Class
3. Khi nào thì dùng interface

Dươí đây là 1 đống tài liệu sau khi tổng kết, làm biếng dịch sang tiếng Việt (Và cũng không biết để sao) nên để vậy lun
What is an Abstract class?

An abstract class is a special kind of class that cannot be instantiated. So the question is why we need a class that cannot be instantiated? An abstract class is only to be sub-classed (inherited from). In other words, it only allows other classes to inherit from it but cannot be instantiated. The advantage is that it enforces certain hierarchies for all the subclasses. In simple words, it is a kind of contract that forces all the subclasses to carry on the same hierarchies or standards.
What is an Interface?

An interface is not a class. It is an entity that is defined by the word Interface. An interface has no implementation; it only has the signature or in other words, just the definition of the methods without the body . As one of the similarities to Abstract class, it is a contract that is used to define hierarchies for all subclasses or it defines specific set of methods and their arguments . The main difference between them is that a class can implement more than one interface but can only inherit from one abstract class . Since C# doesn't support multiple inheritance, interfaces are used to implement multiple inheritance.

Both together

When we create an interface, we are basically creating a set of methods without any implementation that must be overridden by the implemented classes. The advantage is that it provides a way for a class to be a part of two classes: one inheritance hierarchy and one from the interface.

When we create an abstract class, we are creating a base class that might have one or more completed methods but at least one or more methods are left uncompleted and declared abstract . If all the methods of an abstract class are uncompleted then it is the same as an interface but with the restriction that it cannot make a class inherit from it. The purpose of an abstract class is to provide a base class definition for how a set of derived classes will work and then allow the programmers to fill the implementation in the derived classes.

There are some similarities and differences between an interface and an abstract class that I have arranged in a table for easier comparison:

Feature


Interface


Abstract class

Multiple inheritance


A class may inherit several interfaces.


A class may inherit only one abstract class.

Default implementation


An interface cannot provide any code, just the signature.


An abstract class can provide complete, default code and/or just the details that have to be overridden.

Constants


Static final constants only, can use them without qualification in classes that implement the interface . On the other paw, these unqualified names pollute the namespace. You can use them and it is not obvious where they are coming from since the qualification is optional.


Both instance and static constants are possible.
Third party convenience An interface implementation may be added to any existing third party class. A third party class must be rewritten to extend only from the abstract class.
is-a vs -able or can-do Interfaces are often used to describe the peripheral abilities of a class, not its central identity, e.g. an Automobile class might implement the Recyclable interface , which could apply to many otherwise totally unrelated objects. An abstract class defines the core identity of its descendants. If you defined a Dog abstract class then Damamation descendants are Dogs, they are not merely dogable. Implemented interfaces enumerate the general things a class can do, not the things a class is.

In a Java context, users should typically implement the Runnable interface rather than extending Thread , because they're not really interested in providing some new Thread functionality, they normally just want some code to have the capability of running independently. They want to create something that can be run in a thread, not a new kind of thread.The similar is-a vs has-a debate comes up when you decide to inherit or delegate.
Plug-in You can write a new replacement module for an interface that contains not one stick of code in common with the existing implementations. When you implement the inteface, you start from scratch without any default implementation. You have to obtain your tools from other classes; nothing comes with the interface other than a few constants. This gives you freedom to implement a radically different internal design. You must use the abstract class as-is for the code base, with all its attendant baggage, good or bad. The abstract class author has imposed structure on you. Depending on the cleverness of the author of the abstract class, this may be good or bad.

Core VS Peripheral


Interfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovable interface.


An abstract class defines the core identity of a class and there it is used for objects of the same type.
Maintenance If your client code talks only in terms of an interface , you can easily change the concrete implementation behind it, using a factory method . Just like an interface , if your client code talks only in terms of an abstract class, you can easily change the concrete implementation behind it, using a factory method .

Homogeneity


If the various implementations only share method signatures then it is better to use Interface.


If the various implementations are of the same kind and use common behaviour or status then abstract class is better to use.

Speed


Requires more time to find the actual method in the corresponding classes.


Fast
Terseness The constant declarations in an interface are all presumed public static final , so you may leave that part out. You can't call any methods to compute the initial values of your constants. You need not declare individual methods of an interface abstract . They are all presumed so. You can put shared code into an abstract class, where you cannot into an interface . If interfaces want to share code, you will have to write other bubblegum to arrange that. You may use methods to compute the initial values of your constants and variables, both instance and static. You must declare all the individual methods of an abstract class abstract .

Class vs. interface

Some say you should define all classes in terms of interfaces, but I think recommendation seems a bit extreme. I use interfaces when I see that something in my design will change frequently .

For example , the Strategy pattern lets you swap new algorithms and processes into your program without altering the objects that use them. A media player might know how to play CDs, MP3s, and wav files. Of course, you don't want to hardcode those playback algorithms into the player; that will make it difficult to add a new format like AVI. Furthermore, your code will be littered with useless case statements. And to add insult to injury, you will need to update those case statements each time you add a new algorithm. All in all, this is not a very object-oriented way to program.

With the Strategy pattern, you can simply encapsulate the algorithm behind an object. If you do that, you can provide new media plug-ins at any time. Let's call the plug-in class MediaStrategy . That object would have one method: playStream(Stream s) . So to add a new algorithm, we simply extend our algorithm class. Now, when the program encounters the new media type, it simply delegates the playing of the stream to our media strategy. Of course, you'll need some plumbing to properly instantiate the algorithm strategies you will need.

This is an excellent place to use an interface. We've used the Strategy pattern, which clearly indicates a place in the design that will change. Thus, you should define the strategy as an interface. You should generally favor interfaces over inheritance when you want an object to have a certain type; in this case, MediaStrategy . Relying on inheritance for type identity is dangerous; it locks you into a particular inheritance hierarchy. Java doesn't allow multiple inheritance, so you can't extend something that gives you a useful implementation or more type identity.
Interface vs. abstract class

Choosing interfaces and abstract classes is not an either/or proposition. If you need to change your design, make it an interface. However, you may have abstract classes that provide some default behavior. Abstract classes are excellent candidates inside of application frameworks.
Abstract classes let you define some behaviors; they force your subclasses to provide others. For example, if you have an application framework, an abstract class may provide default services such as event and message handling. Those services allow your application to plug in to your application framework. However, there is some application-specific functionality that only your application can perform. Such functionality might include startup and shutdown tasks, which are often application-dependent. So instead of trying to define that behavior itself, the abstract base class can declare abstract shutdown and startup methods. The base class knows that it needs those methods, but an abstract class lets your class admit that it doesn't know how to perform those actions; it only knows that it must initiate the actions. When it is time to start up, the abstract class can call the startup method. When the base class calls this method, Java calls the method defined by the child class. Many developers forget that a class that defines an abstract method can call that method as well. Abstract classes are an excellent way to create planned inheritance hierarchies. They're also a good choice for nonleaf classes in class hierarchies.

When To Use Interfaces
An interface allows somebody to start from scratch to implement your interface or implement your interface in some other code whose original or primary purpose was quite different from your interface . To them, your interface is only incidental, something that have to add on to the their code to be able to use your package.
When To Use Abstract classes
An abstract class, in contrast, provides more structure. It usually defines some default implementations and provides some tools useful for a full implementation. The catch is, code using it must use your class as the base. That may be highly inconvenient if the other programmers wanting to use your package have already developed their own class hierarchy independently. In Java, a class can inherit from only one base class.
When to Use Both
You can offer the best of both worlds, an interface and an abstract class. Implementors can ignore your abstract class if they choose. The only drawback of doing that is calling methods via their interface name is slightly slower than calling them via their abstract class name.

Các nguyên tắc cần biết khi lập trình.

1. Program To An Interface, Not An Implementation. Lập trình trên các interface, tránh lập trình trên sự hiện thực hóa.

Khi cần gọi hàm, phương thức của một lớp chúng ta nên gọi từ interface mà lớp đó hiện thực hóa tránh gọi chính lớp đó.

2. Favor object composition over class inheritance. Chúng ta nên ưu tiên sự kết hợp hơn là thừa kế.

Khi cần thêm một chức năng nào đó vào nên viết riêng ra một lớp và tạo một instance của lớp đó trong lớp cần gọi thay vì thừa kế từ lớp cần gọi.

3. If your system is too complex, add more objects. Nếu hệ thống của bạn quá phức tạp hãy thêm vào các đối tượng.

Điều này mới nghe có vẻ vô lý :). Thêm vào có thể làm phức tạp hơn chứ. Thực ra khi thêm vào chúng ta sẽ tách hệ thống thành các đối tượng nhỏ hơn, dễ hiểu, dễ quản lý hơn.

4. Rewrite code that needs comments. Hãy viết lại những đoạn code mà cần chú thích.

Các đoạn code mà bạn phải chú thích để người khác hiểu thể hiện rằng nó không rõ ràng, khó hiểu. Hãy viết lại nó theo cách rõ ràng, dễ hiểu.

5. Don't catch or throw base exception types. Đừng bắt hoặc ném những loại exception cơ bản.

Khi bắt hoặc ném các exception cơ bản sẽ làm cho chương trình của bạn lúc nào cũng chạy ngay cả khi có lỗi hoặc cạn bộ nhớ hệ thống. Điều này có thể gây ra những hậu quả nghiêm trọng. Ngoài ra khi làm vậy chính bạn đã dấu đi những lỗi của chương trình. Tóm lại chỉ nên bắt và ném những exception nào mà bạn có thể xử lý.

6. Use finally blocks liberally. Hãy sử dụng finally thoải mái và tùy nghi.

Cho dù có lỗi xảy ra chăng nữa thì đoạn code nằm trong finally bao giờ cũng được chạy. Nó đảm bảo chắc chắn bạn đã làm những điều cần thiết khi lỗi xảy ra với chương trình.

7. Put a single catch (Exception ex) per thread.

Mỗi thread cần được bắt bằng 1 Exception cơ bản. Điều này sẽ giúp bạn truy lỗi dễ dàng hơn.



=========================================================================




1. Sự khác nhau giữa các lớp Trace và Debug?

- Trace dùng để theo dõi các hành động xảy ra. Nó hoạt động trong các đóng gói cả Debug lẫn Release. Trace là khả năng của chương trình tự đưa ra các thông tin về hành động của mình.

- Debug dùng để tìm và sửa các lỗi trong chương trình. Nó chỉ hoạt động trong đóng gói Debug.

2. Sự khác nhau giữa static readonly và const?

- Static readonly là hằng số được khởi tạo khi thực thi chương trình.

- Const là hằng số được khởi tạo khi biên dịch chương trình.

3. Sự khác nhau giữa String và StringBuilder?

- String là lớp không thay đổi. Mọi phương thức sẽ tạo ra một biến String mới.

- StringBuilder là lớp thay đổi. Các phương thức của biến sẽ ảnh hưởng đến đến biến StringBuilder hiện tại.

4. Sự khác nhau giữa "" và String.Empty?

- "" sẽ tạo thêm 1 đối tượng khi làm việc với nó (so sánh, copy...)

- String.Empty không tạo đối tượng nào cả. String.Emtpy nằm trong mscorlib.

Khi kiểm tra 1 String có rỗng hay không nên dùng String.Length == 0 để có tốc độ nhanh nhất.

5. Có thể gán một struct bằng null hay không?

- Có thể nếu bạn lập trình với C# 2.0. Ví dụ: int? var = 1; var = null;

6. Sự khác nhau giữa == và phương thức Equals?

- == so sánh theo kiểu giá trị.

- Equals so sánh theo kiểu tham chiếu.

7. Sự khác nhau giữa throw và throw ex?

- throw đế đưa lại toàn bộ các tầng theo dõi của lỗi ra.

- throw ex bỏ bớt các tầng theo dõi bên dưới phương thức gọi throw ex.

8. Connection Pooling dùng để làm gì?

- Cho phép tăng tốc độ của các ứng dụng Web bằng cách dùng lại các kết nối thay vì tạo các kết nối mới với mỗi yêu cầu.

9. .NET có hỗ trợ thừa kế từ nhiều lớp hay không (multiple inheritance)? Tại sao?

- Không. Vì sẽ không hiểu được khi gọi 1 phương thức mà 2 lớp cha cùng override nó.

10. Sự khác nhau giữa abstract class và interface?

- Có thể thừa kế từ nhiều interface nhưng chỉ có thể thừa kế từ 1 abstract class.

- Có thể viết sẵn các thực thi trong Abstract class, nhưng interface thì không.

- Interface dùng để gom các hành động cần được hiện thực , các khả năng của một đối tượng (ví dụ con người và xe cộ cùng có khả năng đi lại, nhưng con người không cùng tính chất với xe cộ), còn abstract class cho các lớp thừa kế cùng 1 loại, tính chất hay trạng thái (ví dụ đàn ông, phụ nữ, trẻ con, người già đều là con người).

- Abstract class có tốc độ thực thi nhanh hơn interface.

- Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không.

11. Hàm GetHasCode() trong System.Object dùng để làm gì?

- Trả về giá trị của một đối tượng. Chú ý hàm này mặc định không trả về giá trị duy nhất hoặc không đổi. Hàm này có thể override.

12. Sự khác nhau giữa DataSet và DataReader?
- DataSet có thể đọc và ghi trong khi DataReader chỉ có thể đọc.
- DataSet có thể chứa nhiều bảng còn DataReader chỉ có thể chứa 1 bảng.
- DataSet làm việc ở chế độ không kết nối còn DataReader làm việc ở chế độ kết nối.
- DataSet có thể di chuyển tới và trở lại còn DataReader thì chỉ có thể di chuyển tới.
- DataSet truy cập chậm hơn DataReader.

13. Sự khác nhau giữa các phuơng thức Copy và Clone?
- Clone chỉ copy cấu trúc trong khi Copy copy cả cấu trúc lẫn dữ liệu.

14. Sự khác nhau giữa Dispose, Destructor và Finalize?
- Destructor sẽ được chuyển thành Finalize khi biên dịch. Hàm Finalize được gọi bởi .NET Runtime và chúng ta không thể đoàn được nó được gọi khi nào, nhưng nó chắc chắn sẽ được gọi.
- Dispose sẽ giải phóng bộ nhớ ngay khi nó được gọi. Lưu ý nếu lớp nào override Dispose mà quên gọi thì các đối tượng sẽ không tự giải phóng bộ nhớ.

15. Serialization là gì?
- Là sự chuyển chuyển đối tượng thành 1 luồng các bytes.

16. Sự khác nhau giữa XmlSerializer, BinaryFormatter và SoapFormatter?
- XmlSerializer dùng cho dịch vụ Web.
- BinaryFormatter/SoapFormatter dùng cho Remoting.
- SoapFormatter dùng để tuần tự hóa 1 đối tượng thành SOAP.
- BinaryFormatter dùng để tuần tự hóa 1 đối tượng thành dạng nhị phân.
- XmlSerializer chỉ chuyển đổi các tính chất public còn BinaryFormatter/SoapFormatter chuyển đổi cả public lẫn private.

17. Sự khác nhau giữa overriding và shadowing?
- Overriding cung cấp sự hiện thực mới của 1 hàm ở lớp thừa kế nhưng không thay đổi số biến, kiểu trả về, mức truy cập còn shadowing thì có thể thay đổi (từ khóa new trong C#).

18. Sự khác nhau giữa class, object, struct và interface?
- Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Object là một trường hợp cụ thể của class. Class không chiếm bộ nhớ, còn Object được tạo trong bộ nhớ.
- Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Struct là kiểu giá trị được lưu trữ trong stack còn class là kiểu tham chiếu (các object) được lưu trữ trong heap.
- Khi struct được khởi tạo không bằng hàm khởi tạo người dùng sẽ phải khởi tạo tất cả các Fields trước khi sử dụng nó.

- Interface là một hợp đồng gồm một nhóm các phương thức cần được hiện thực.

19. Sự khác nhau giữa Property và Field?
- Property dùng để quản lý sự truy cập đến Field. Dùng Property để đảm bảo Field không bị gán các giá trị không hợp lệ.

20. Sự khác nhau giữa static Method, static constructor với method và constructor thông thường?
- Static method có thể gọi mà không cần khởi tạo biến. Static constructor chỉ được gọi đúng một lần khi object đầu tiên được khởi tạo.

21. Các biến tĩnh và chỉ dẫn chương trình được lưu ở đâu?
- Ở 1 vùng bộ nhớ đặc biệt gọi là Permanent Storage area.

22. Sự khác nhau giữa stack và heap?
- Stack và heap là các vùng bộ nhớ. Heap nằm giữa stack và Permanent Storage area, và độ lớn có thể thay đổi khi thực thi chương trình.

23. Sự khác nhau giữa Boxing and Un-Boxing?
- Boxing là chuyển đổi kiểu giá trị thành kiểu tham chiếu. Un-Boxing ngược lại.

24. Mục đích của thừa kế (inheritance)?
- Để tái sử dụng.

25. Mục đích của đa hình (poymophism)?
- Một hành động có thể xảy ra theo nhiều cách khác nhau.

26. Sự khác nhau giữa Compile Time Polymorphism và Run Time Polymorphism?
- Compile Time Polymorphism - ví dụ Overloading, một hàm có thể có nhiều cách biểu diễn.
- Run Time Polymorphism - ví dụ Overriding, một hàm có thể có nhiều cách xử lý.

27. Sự khác nhau giữa delegate và event?
- delegate là một lớp (class) đại diện cho hàm con trỏ kiểu an toàn hoặc hàm gọi (call backs) chỉ đến địa chỉ tham chiếu của một (hay nhiều) hàm. Con trỏ hàm chứa trong delegate được gắn vào một đối tượng đích (target) và khi delegate được kích hoạt phương thức sẽ được gọi ở đối tượng đích. Sự hữu ích của delegate không nằm ở chỗ giữ địa chỉ tham chiếu của các hàm mà để định nghĩa và dùng các tên hàm khi runtime thay vì compile time.
- event cho phép xác định một delegate sẽ được gọi khi có sự xuất hiện của "sự kiện" nào đó. event là một modifier trong khi delegate là một lớp. event cho phép một delegate được khai báo trong interface.

29. AppDomain là gì?
- Là một miền riêng biệt lưu trữ code và dữ liệu cho một application. Một process có thể chứa nhiều AppDomains.
Khi bạn copy một DLL mới vào bin, ASP.NET runtime sẽ không thể đưa nó vào một AppDomain đang chạy.Nó sẽ dừng từ từ AppDomain cũ (dừng hẳn khi nó dừng tất cả các requests) và mở một AppDomain mới.

30. Sự khác nhau giữa publish và published interfaces.
- publish interface là interface mà bạn có thể sửa tất cả những code nào dùng nó còn published interface là interface mà bạn không thể sửa code dùng nó.

31. Sự khác nhau giữa try{}catch{} và try{}catch{Exception ex}?
- Chúng giống hệt nhau.

32. Sự khác nhau giữa 1/0; và try{1/0;} catch {throw;}
- Chúng giống hệt nhau. Vì vậy nếu không xử lý catch thì đừng catch.

33. Sự khác nhau giữa Remoting và Web service?
- Web service không có trạng thái, không cần biết đến client chỉ sử dụng trên HTTP, hỗ trợ không đồng nhất các môi trường, tốc độ chậm hơn Remoting.
- Remoting có trạng thái kết nối, hỗ trợ nhiều giao thức hơn HTTP, TCP..., đòi hỏi môi trường đồng nhất, tốc độ nhanh đặc biệt khi dùng trên TCP.

34. Sự khác nhau giữa error và exception?
- Error là lỗi của chương trình còn exception là lỗi chương trình được phát hiện và có thể xử lý.

35. Sự khác nhau giữa Procedure và OO?
- Procedure gồm các hàm và các biến, tất cả các hàm đều có thể truy cập đến tất cả các biến. Không thể quản lý các biến.
- OO gom hàm và biến vào các đơn vị object. Các hàm và biến được quản lý trong nội bộ object. Các object tương tác với nhau thông qua các interfaces.

36. CLR, CTS, CLS, MSIL, JIT, PE, GAC là viết tắt của những gì?
- Là Common Language Runtime: môi trường để chạy các ứng dụng .NET
- Là Common Type System: mô tả các loại dữ liệu trong .NET.
- Là Common Language Specification: mô tả các quy định và chuẩn cho các ngôn ngữ trong .NET
- Là Microsoft Intermediate Language: ngôn ngữ thông dịch của .NET.
- Là Just In Time: trình biên dịch MSIL thành mã máy.
- Là Portable Executable: file chứa MSIL.
- Là Global Assembly Cache: nơi lưu trữ các Asembly dùng chung.

37. Các mâu thuẫn giữa OO và RDBMS?
- Cấu trúc cấp bậc trong OO có thể là vô tận trong khi ở RDBMS chỉ có 4 loại table, row, column, cell.
- Các đối tượng trong OO bản thân là phân biệt trong khi trong RDBMS cần phải có primary-key.
- Các đối tượng trong OO có thể tham chiếu đến nhau rất đơn giản nhưng trong RDBMS thì phức tạp thông qua JOIN
- Sự thừa kế trong OO là đơn giản trong khi trong RDBMS hầu như không có khái niệm đó. Một bảng cần chứa tất cả các tính chất, có khi là thừa.
- Các đối tượng trong OO có thể có các hành động tác động đến tối tương khác.trong RDBMS thì phức tạp thông qua TRIGGER
- Khả năng truy cập trong OO là hạn chế trong khi ở RDBMS là không giới hạn.

38. Sự khác nhau giữa Response.Redirect và Server.Transfer.
- Response.Redirect đơn thuần là chuyển bạn đến một trang mới giống như bạn gõ địa chỉ trang đó trên browser và request đến server.
- Server.Transfer cũng chuyển bạn đến trang mới nhưng ở phía server, làm giảm request đến server, giữa nguyên URL của bạn và có thể chuyển cả các query string và biến trên form đên địa chỉ mới, chỉ thực hiện giữa các trang trên cùng 1 host.

39. Vai trò của ASPX page và ASPX page code-behind trong MVC.
- ASPX page là View còn ASPX page code-behind là Controller.

40. Làm thế nào để try/catch trên toàn bộ 1 ASPX page.
- Dùng Page_Error event.

41. Sự khác nhau giữa Cohesion và Coupling
- Cohesion là sự liên kết giữa các thành phần trong một module. Một thiết kế tốt nên có sự liên kết giữa các thành phần thật chặt chẽ.
- Coupling là sự kết nối giữa các module với nhau. Một thiết kế tốt nên có sự kết nối thật lỏng lẽo giữa các module.

42. Refractoring là gì?
- Là sự thiết kế lại cấu trúc của code bằng cách thay đổi cấu trúc bên trong mà không ảnh hưởng đến các hành vi bên ngoài (interface) của đoạn code (module, system) đó.

43. Phân biệt HttpApplication, Session, ViewSate và HttpContext?
- Cả 4 thành phần trên đều dùng để lưu dữ liệu của một Web Application.
- HttpApplication có tác dụng trong toàn bộ quá trình thực thi của Web Application.
- Session có tác dụng trong 1 lần ghé thăm (visit) của người dùng. Nó kết thúc khi gặp timeout.
- ViewState có tác dụng trong trong 1 trang web.
- HttpContext có tác dụng trong 1 request.
__________________


SELECT * FROM GIRLS WHERE (HEIGHT>=1.6M) AND (WEIGHT<=48KG) AND (FACE="BEAUTIFUL") AND (EDUCATION>="UNIVERSITY") AND (AGE<=23)

Thứ Ba, 2 tháng 12, 2008

Mot So Meo Pv cua Microsoft

Trong thời gian qua, trên một số diễn đàn của các bạn sinh viên diễn ra khá nhiều cuộc tranh luận về các bài toán mẹo mà Microsoft thường sử dụng trong việc tuyển chọn nhân tài. Nhiều bạn trẻ đã chứng tỏ được khả năng tư duy logic của mình thông qua việc giải một số bài toán “nát óc” – những kiểu câu hỏi luôn là chủ đề bàn tán của các anh chàng đầu óc sáng láng đang làm việc tại Microsoft trong giờ ăn trưa tại các quán ăn thuộc tòa nhà số 16 ở Redmond.

Chúng tôi xin trân trọng trích đăng một số câu hỏi phỏng vấn mà Microsoft thường sử dụng trong việc tuyển chọn nhân tài.

- Làm thế nào có thể biết được trọng lượng của một chiếc máy bay mà không sử dụng bàn cân?

- Tại sao hầu hết các nắp cống trên đường có hình tròn mà không phải là hình vuông?

- Tại sao khi soi gương, vị trí trái phải đổi chỗ cho nhau mà không phải là trên dưới?

- Mỗi giờ có bao nhiêu lít nước chảy từ sông Mississippi ngang qua New Orleans?

- Tất cả băng trên sân hockey (sân chơi khúc côn cầu) nặng bao nhiêu kg?
cauhoimicrosoft.jpg

- Làm thế nào để chỉ với một nhát cắt thẳng bạn có thể cắt làm hai phần đều nhau một chiếc bánh gatô hình chữ nhật đã bị khoét mất một miếng bên trong cũng hình chữ nhật ở một chỗ bất kỳ với độ lớn bất kỳ và hướng trục bất kỳ?

- Bạn có thể đưa ra mẫu thiết kế như thế nào dành cho phòng tắm của Bill Gates?

- Bạn làm thế nào để có thể tìm thấy cuốn sách mình cần trong một thư viện lớn, nếu tại đây không có hệ thống thư mục, và cũng không được nhờ vào sự hỗ trợ của nhân viên thư viện.

- Chiếc chìa khóa cắm vào ổ khóa cửa xe ô tô nên được quay theo chiều nào khi mở khóa?

- Tại sao trong khách sạn khi bạn mở vòi nước nóng thì nước nóng lập tức chảy ra (trong khi tại các khu nhà ở thì phải chờ một lúc)?

- Kẹo sô-cô-la viên M&M được sản xuất như thế nào?

- Nếu bạn đang bơi trên thuyền và ném một chiếc valy từ thuyền xuống nước thì mực nước sẽ dâng lên hay hạ xuống?

- Có tất cả bao nhiêu người lên dây đàn dương cầm trên thế giới?

- Có bao nhiêu trạm xăng ở nước Mỹ?

- Giả thiết rằng bạn là một nhân viên thuế vụ. Việc bạn được giao làm đầu tiên – kiểm tra xem một công ty cung cấp dịch vụ trông trẻ có gian lận trong việc đóng thuế không? Bạn sẽ thực hiện công việc này như thế nào?

- Bạn có tám viên bi-a, một trong số chúng bị lỗi khi sản xuất nên nặng hơn những viên còn lại. Làm thế nào để chỉ sau hai lần cân so sánh, không dùng quả cân mà bạn có thể tìm được viên bi-a bị lỗi đó?

- Bạn có 5 lọ thuốc. Trong một lọ, tất cả các viên thuốc đều bị “hỏng”. Chỉ có bằng cách sử dụng bàn cân, bạn mới có thể xác định được đâu là viên thuốc “bình thường”, đâu là viên“hỏng”. Tất cả những viên bình thường” đều nặng 10g mỗi viên, trong khi mỗi viên “hỏng” chỉ có trọng lượng 9g. Làm thế nào sau chỉ một lần cân bạn có thể xác định được đâu là lọ thuốc hỏng?

- Trên một hình tam giác đều ở 3 đỉnh có 3 con kiến. Mỗi con bắt đầu chuyển động thẳng theo một hướng bất kỳ theo cạnh tam giác đến một góc khác. Xác suất của sự việc không có con kiến nào đụng nhau là bao nhiêu?

- Có bốn con chó đứng tại 4 góc của một hình vuông. Mỗi con chó bắt đầu đuổi một con chó khác đứng gần nó theo chiều kim đồng hồ. Những con chó chạy với tốc độ bằng nhau và luôn đổi hướng để nhắm thẳng đến kẻ láng giềng theo chiều kim đồng hồ của mình. Hỏi sau bao nhiêu lâu thì những con chó gặp nhau? Và chúng gặp nhau ở đâu?

- Bạn có b cái hộp và n tờ giấy bạc một đô la. Hãy chia tiền vào các hộp sau đó niêm phong hộp lại. Bạn chia thế nào để không cần mở hộp ra có thể lấy bất kỳ một số tiền nào từ 1 đến n đô la. Hỏi có những giới hạn ràng buộc nào dành cho b và n?

- Bạn có 3 giỏ hoa quả. Giỏ thứ nhất chỉ toàn táo, giỏ thứ hai chỉ toàn cam, giỏ thứ ba lẫn lộn cam và táo. Bạn không nhìn thấy trong mỗi giỏ có loại quả gì. Mỗi giỏ đều có một nhãn hiệu nhưng các nhãn hiệu đều ghi sai. Bạn được phép nhắm mắt thò tay vào một giỏ bất kỳ để lấy ra một quả và mở mắt nhìn quả đó. Làm thế nào có thể xác định được trong mỗi giỏ chứa loại quả nào?

- Tại một làng quê có 50 cặp vợ chồng, các ông chồng đều phản bội vợ. Bất cứ người phụ nữ nào trong làng cũng lập tức biết ngay nếu có ai đó trong số các ông chồng khác vừa phản bội vợ mình (bạn biết đấy, chuyện đồn đại lan đi rất nhanh ở các thị trấn nhỏ), nhưng lại không biết nếu đó là chồng mình (kẻ bị phản bội thường là người cuối cùng biết về nỗi đau khổ của mình). Luật của thành phố buộc người phụ nữ, nếu có bằng chứng về sự phản bội của chồng, phải giết anh ta ngay trong ngày hôm đó. Không ai có thể trái lệnh này. Một lần, có nữ hoàng vốn nổi tiếng là người không bao giờ phán đoán sai, đến thăm làng này. Bà thông báo với dân chúng rằng, ít nhất có một người đàn ông của thành phố đã phản bội vợ. Hỏi chuyện gì sẽ xảy ra?

Thứ Tư, 19 tháng 11, 2008

Input Numberic in TextBox

Declare code in script and using it like

<HTML>

<HEAD>
<SCRIPT language=Javascript>

function isNumberKey(evt)
{

var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode <> 57))
return false;
return true;
}
SCRIPT>
HEAD>
<BODY>
<INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
BODY>
HTML>

we can use it in asp.net using
onkeypress="return isNumberKey(event)" in textbox event

heeeeeeee!!!!!!!!!!



Thứ Ba, 28 tháng 10, 2008

Quản trị tri thức – Tầm nhìn lớn của lãnh đạo

Tri thức là tài sản

Rất nhiều lãnh đạo đã nhìn nhận được giá trị của công ty nằm ở chính mỗi nhân sự giỏi mà họ có chứ không phải những cỗ máy sản xuất hữu hình hay những tòa nhà lớn... Chính xác hơn, tri thức (knowledge) của mỗi nhân sự mới thực sự là tài sản quan trọng nhất của công ty. Tri thức, ở đây là sự hiểu biết, kiến thức, kỹ thuật cá nhân và kinh nghiệm của nhân sự trong công việc, quan hệ đối tác... Tuy nhiên, không phải tổ chức nào cũng nắm bắt được ý nghĩa của việc quản lý, phát huy nguồn tài sản tri thức đó.

Ông Hoàng Tô, chủ tịch HĐQT công ty Cổ Phần Công Nghệ Tinh Vân cho biết: Công ty đã không ít hơn một lần phải đối mặt với sự ra đi của những nhân sự quan trọng. Những sản phẩm họ làm ra tuy đã được quản lý tốt, được kế thừa và phát triển nhưng đó chưa phải là tài sản quan trọng nhất. Cái quan trọng nhất là khi đi họ mang theo tri thức, để lại cho công ty một lỗ hổng không dễ gì lấp đầy, đôi khi là kiến thức về cả một lĩnh vực.

Nhiều tổ chức dành hàng trăm triệu đồng đào tạo nhân viên mỗi năm. Thế nhưng, tri thức mà nhân viên thu nhận từ đào tạo có mang lại giá trị cho công ty hay không thì rất ít tổ chức tính toán được. Sự lãng phí còn thể hiện rõ hơn khi lượng thời gian bỏ ra để tìm kiếm những tri thức mà thực tế đã tồn tại trong tổ chức là rất lớn.

Ông Tô nhấn mạnh: nếu mỗi tổ chức không biết cách quản trị (QT) tri thức tốt thì tài sản của công ty sẽ rất nhỏ bé và ngược lại, nếu tri thức được tích lũy, phát triển và quản lý tốt sẽ giúp cho khối tài sản của công ty tăng trưởng không ngừng. Nói cách khác, nếu trước đây vấn đề phát triển của doanh nghiệp (DN) phụ thuộc vào thế mạnh quản lý kinh tế thì nay, trong nền kinh tế tri thức, sự tồn tại và phát triển bền vững của mỗi DN phụ thuộc vào chính thế mạnh QT tri thức (Knowledge Management - KM).

Quản lý tài sản tri thức thế nào?

Trong thực tế, tri thức thường tồn tại riêng rẽ trong mỗi cá nhân thông qua quá trình hấp thụ thông tin của riêng họ và chỉ có người đó mới sử dụng được. Không ai ở bên ngoài có thể vận dụng tri thức đó nếu họ không chia sẻ. Để tri thức của mỗi cá nhân biến thành tài sản tri thức của tổ chức, để mọi người có thể cùng khai thác, sử dụng cho sự phát triển chung đòi hỏi phải có một cơ chế, quá trình kiến tạo, lưu giữ, chia sẻ, phát triển trong mỗi tổ chức. Để thực hiện điều này, vai trò của người lãnh đạo có ý nghĩa cực kỳ quan trọng. Không chỉ khuyến khích, ghi nhận việc chia sẻ tri thức, nhà quản lý phải chủ động tham gia chia sẻ tri thức một cách tích cực bên cạnh việc hướng nhân viên cùng phát triển các nguồn tri thức nội bộ như cộng đồng chia sẻ, hội thảo nội bộ... Quá trình này không chỉ làm giàu tri thức của các cá nhân mà còn là động lực cho việc không ngừng học hỏi của từng nhân viên.

Các tổ chức lớn trên thế giới đã đúc kết một số kinh nghiệm về KM như sau:

Các chính sách và quy trình QT tri thức cần được văn bản hóa để tránh những hiểu lầm không đáng có đồng thời dễ dàng cho việc phát hiện sai lầm xảy ra ở giai đoạn nào.

Xây dựng hệ thống tài liệu thống nhất để nắm bắt tri thức. Như đã nói ở trên, tri thức của một người không dễ truyền đạt cho người khác. Bằng cách thể hiện tri thức đó qua viết tài liệu, trao đổi... tổ chức sẽ hoàn thiện được hệ thống tài liệu và kho cơ sở dữ liệu tri thức chung.

Chú trọng đào tạo, chuyển giao tri thức. Văn hoá chia sẻ rất cần thiết trong hoạt động đào tạo. Những người có kinh nghiệm nên được khuyến khích và tự mình thấy có trách nhiệm trong việc chia sẻ, hướng dẫn những người ít kinh nghiệm hơn. Bên cạnh đó, tổ chức có thể tận dụng lượng tri thức của tổ chức khác nếu tri thức đó không được sử dụng đúng nhưng phải biết cách bảo vệ tri thức riêng của tổ chức mình.

• Liên tục cập nhật thông tin mới và học hỏi kinh nghiệm từ những việc đã làm và kinh nghiệm của tổ chức khác

• Chú trọng đến nhân tố con người. Con người có thể tạo ra tri thức mới và chỉ có con người mới có khả năng vận dụng tri thức đó để tiếp tục tạo ra những tri thức mới hơn. Tổ chức cần có chính sách tuyển dụng nhân lực trẻ, tạo điều kiện để những người có kinh nghiệm làm việc với những người mới. Có chế độ đãi ngộ phù hợp... Phải luôn chú ý rằng tri thức của một người vốn nhiều hơn những gì anh ta thể hiện.

Để tri thức của mỗi cá nhân biến thành tài sản tri thức của tổ chức, để mọi người có thể cùng khai thác, sử dụng cho sự phát triển chung đòi hỏi phải có một cơ chế, quá trình kiến tạo, lưu giữ, chia sẻ, phát triển trong mỗi tổ chức.

• Ứng dụng CNTT. Cuối cùng, để các hoạt động chia sẻ, diễn ra một cách hiệu quả thì không thể thiếu vai trò của CNTT. CNTT đóng vai trò hỗ trợ, làm cho việc chia sẻ, lưu giữ, cập nhật và sử dụng tri thức được thực hiện dễ dàng hơn. Hơn nữa, tri thức được kiến tạo liên tục làm cho lượng tri thức của DN ngày càng khổng lồ mà chỉ CNTT mới cho phép lưu giữ, phân loại, cập nhật, chia sẻ, sử dụng và phát triển một cách kịp thời và ổn định. CNTT là công cụ cực kỳ hiệu quả trong việc xây dựng hệ thống cơ sở dữ liệu/tri thức của tổ chức, cho phép nhân viên truy cập phục vụ việc ra quyết định kịp thời cũng như xây dựng mạng lưới KM theo chiều sâu và chiều rộng.

Điều khó khăn nhất để triển khai KM có lẽ chính là vấn đề nhận thức. Chỉ khi nhìn nhận tri thức là tài sản thì lãnh đạo tổ chức đó mới có ý thức bảo vệ, giữ gìn, đầu tư và tôn tạo chúng thành những khối tài sản lớn hơn. Nhận thức còn nằm ở văn hóa công ty, trong mỗi nhân sự của tổ chức. Bởi việc xây dựng bộ máy KM, bản thân nó không phải một dự án mà là một quá trình tích lũy không ngừng nghỉ của rất nhiều cá nhân. Do vậy nếu không bắt đầu ngay từ bây giờ xây dựng KM, có thể một ngày nào đó chính tổ chức, DN này sẽ trở thành những bộ máy rỗng, nghèo nàn và thất bại trên thương trường.

Thứ Hai, 27 tháng 10, 2008

Cho ToolTip Popup tren file flash

Ví dụ này viết bằng ASP.Net

đầu tiên ta phải down cac file javascript cần thiết sao :
http://www.tuoitre.com.vn/Tianyon/tooltip/ajax-dynamic-content.js
http://www.tuoitre.com.vn/Tianyon/tooltip/ajax.js
http://www.tuoitre.com.vn/Tianyon/tooltip/ajax-tooltip.js

create new project website

trong phan header ta khai bao cac phan sao đường dẩn đến các file script


Trong phần body ta sử dụng :


ta khai báo 1 tag hyperlink trong đó ta khai báo sự kiện mouseover và mouseout
như sau :
onmouseover="VietAd_ShowTooltip('http://www.tuoitre.com.vn/Tianyon/Tooltip/Ajax/ArticleToolTip.aspx?ArticleID= 285253'); return false" style="VERTICAL-ALIGN: middle; LINE-HEIGHT: 20px" onmouseout="VietAd_HideTooltip();"


đây là ví dụ mẫu các bạn xem theo mà chỉnh sửa lại cho phù hợp với trang mình nha

chúc các bạn thành công

heee..................

Thứ Hai, 20 tháng 10, 2008

Key xin de update len window server 2003 cai dotnet

Microsoft Windows Server 2003 Enterprise Edition
serial number : JK6JC-P7P7H-4HRFC-3XM7P-G33HM

Nhân ti?n cung c?p thêm 1 serial number này n?a
KV9H3-FCD82-QQ6KY-YQCTX-V2JYB

Chủ Nhật, 5 tháng 10, 2008

RegularExpressionValidator xét nhập chử và nhập chủ có dấu tiếng việt

ErrorMessage="invalid name" ControlToValidate="txtLName" Display="None" ValidationExpression="^([ \u00c0-\u01ffa-zA-Z'])+$">

Thứ Hai, 22 tháng 9, 2008

AJAX RSS Reader

Phan header
AJAX RSS Reader


ket thuc header


AJAX RSS Reader





Thứ Bảy, 16 tháng 8, 2008

10 cách để cân bằng giữa công việc và cuộc sống

Theo Vụ Thống kê Lao động thuộc Bộ Lao động Mỹ, trung bình một công nhân Mỹ làm việc khoảng 9,3 giờ mỗi ngày. Riêng ở lĩnh vực công nghệ thông tin (CNTT), nhân viên thường phải làm việc nhiều hơn (khoảng 43-62 giờ/tuần), chấp nhận chế độ luân ca và thường bị đặt trong tình trạng “standby” (túc trực) theo kiểu 24/7. “Kỷ lục” không hề mong đợi này đã làm nóng thêm vấn đề cân bằng công việc với cuộc sống. Nếu là bạn, bạn sẽ làm gì để vượt qua áp lực ấy? CNTT là một nghề hấp dẫn nhưng cũng đầy áp lực. Làm thế nào để có thể chu toàn cả công việc và cuộc sống nếu như công ty của bạn ít quan tâm đến vấn đề này? Dưới đây là mười bí quyết đang được nhiều giám đốc đào tạo, giám đốc CNTT và những chuyên gia muốn chia sẻ. Lập danh mục những việc ưu tiên và luôn thực hiện đúng Áp lực sẽ liên tục gia tăng nếu bạn vẫn giữ thói quen xấu, đó là “nhớ đến đâu làm đến đấy” và “bị sếp thúc bách cái gì, làm ngay cái ấy”, bất chấp những công việc khác còn đang dang dở. Để không bị rơi vào trường hợp nói trên, bạn cần phải sớm thiết lập trật tự ưu tiên cho mọi việc, từ chuyện ở công ty cho đến việc của gia đình. Bà Kathie Lingle, Giám đốc Trung tâm Nghiên cứu và Cải thiện điều kiện làm việc cho ngành CNTT (Alliance for Work-Life Progress – AWLP) của Mỹ, tâm sự: “Cho dù mục tiêu của bạn là gì đi chăng nữa, nếu không xác lập được việc gì làm trước, việc gì làm sau, bạn sẽ bị rối tung. Có quá nhiều thứ đang chờ bạn. Khổ nỗi, quỹ thời gian của chúng ta là hữu hạn. Vì vậy, để có dư ra chút đỉnh thời gian chăm lo cho cuộc sống riêng tư, bạn chỉ còn một cách duy nhất, đó là giới hạn thời lượng làm việc. Hiện tại, thời lượng lao động thường nhật của một nhân viên CNTT là khá nặng. Tôi khuyên bạn, để bảo đảm sức khỏe lâu dài, bạn nên biết nói không với chuyện làm tăng giờ hoặc từ chối nhận thêm một công việc bán thời gian ở một công ty khác cho dù lương thưởng có cao đến mấy.” Brian Schultz, chuyên gia tư vấn CNTT của Viện Nghiên cứu Battelle Memorial, người đã có kinh nghiệm về chuyện bị buộc làm thêm giờ, chia sẻ: “Khi làm việc cho một công ty nọ, tôi đã xác lập trật tự ưu tiên: trước tiên là Thượng đế (dành thời gian để đi nhà thờ mỗi ngày), rồi đến gia đình (chăm sóc người thân), Tổ quốc (sẵn sàng ra trận nếu đất nước bị ngoại xâm), cộng đồng (tham gia các hoạt động xã hội) và cuối cùng mới đến công việc. Tôi đã nói với sếp về điều ấy, giải thích ý nghĩa của trật tự ấy và yêu cầu ông ấy tôn trọng nó, bởi lẽ đó là cách tốt nhất để tôi có thể vừa làm tốt công việc vừa có thời gian cho cuộc sống riêng tư. Và ông ấy đã đồng ý. Nhưng đến một ngày nọ, công ty buộc tôi phải làm tăng giờ (khoảng 60 giờ/tuần) liên tục trong 14 ngày. Tôi từ chối và chấp nhận thôi việc. Sau đó, tôi đã quyết định về với Battelle Memorial vì tại đây tôi chỉ làm việc trung bình không quá 45 giờ/tuần và công ty luôn tôn trọng phương pháp cân bằng giữa công việc và cuộc sống cá nhân. Trừ khi có những cuộc họp đột xuất diễn ra không quá 30 phút, tôi sẽ không phải đi làm vào ngày thứ Bảy hay Chủ nhật và dành thời gian này cho gia đình. Nói như thế là tôi muốn khuyên bạn rằng phải luôn kiên quyết bảo vệ trật tự mà mình đã thiết lập. Đừng vì ngại va chạm với sếp hay sợ bị mất việc mà phá vỡ nó, bởi lẽ bạn không thể làm tốt và sống khỏe với trật tự do... người khác vạch ra.” Thổ lộ tâm tình với đồng nghiệp Không chỉ nói riêng với sếp, bạn cũng nên chia sẻ với đồng nghiệp về trật tự mà bạn đã thiết lập. Bà Lisa Martin, đồng sáng lập viên kiêm Chủ tịch Công ty Tư vấn và Đào tạo CNTT Briefcase Moms, phân tích: “Chẳng ai có thể đọc hay nhìn thấy được những gì mà bạn đang nghĩ. Vì vậy, hãy sớm nói ra với đồng nghiệp những thứ mà bạn luôn ưu tiên và mong muốn người khác tôn trọng. Thà mất lòng trước nhưng sẽ được lòng sau.” Bạn đã từng nói với sếp rằng bạn có thể làm thêm giờ nhưng phải được về nhà trước 8 giờ tối. Thế nhưng, ông ấy vẫn thường xuyên giữ bạn ở lại công ty cho đến tận 10 giờ đêm. Khi ấy, bạn hãy nhẹ nhàng nói với sếp rằng: “Đây là lần thứ bảy trong hai tháng trở lại đây tôi phải về nhà muộn vào ngày thứ Sáu” và nhắc khéo về lời hứa trước đây: “Không biết sếp còn nhớ đến những chuyện khó xử khi tôi phải về nhà muộn trước đây hay không?” Dĩ nhiên, chẳng có sếp nào lại thích thú với phản ứng của bạn. Nhưng bạn hãy tỏ ra kiên quyết, kiên trì cho đến khi thấy không thể cải thiện được nữa thì mới khăn gói chia tay. Để minh họa cho lợi ích của việc thổ lộ tâm tình với đồng nghiệp, ông Bob Keefe, Phó chủ tịch kiêm Giám đốc CNTT của Công ty Mueller và cũng là Chủ tịch danh dự của Cộng đồng Quản trị thông tin (SIM), kể: “Hồi còn làm cho một công ty truyền liệu nọ, có lần cả nhóm chúng tôi gặp phải một sự cố nghiêm trọng đòi hỏi phải được khắc phục khẩn cấp. Thoạt đầu, chúng tôi định liên lạc với người chịu trách nhiệm chính. Cả nhóm cũng thừa biết nếu gọi điện thoại, anh ấy sẽ sẵn sàng trả lời và thậm chí chạy ngay đến công ty. Tuy nhiên, chúng tôi đã không làm như vậy vì chợt nhớ anh ấy đã có nói rằng sau giờ làm việc, anh ấy sẽ vào bệnh viện để chăm sóc cho người vợ đang nằm trên bàn mổ. Vì thế, các thành viên trong nhóm đã không ngại làm thêm giờ, vận dụng tất cả những kỹ năng mà anh bạn này đã nhiều lần hướng dẫn để khắc phục sự cố. Cuối cùng, chúng tôi cũng đã thành công và gọi điện báo tin vui cũng như không quên chúc cho vợ của anh ấy chóng bình phục.” Kiến nghị được làm việc với thời biểu linh hoạt Đối với những người giỏi nghề, ngoài chuyện lương bổng và chế độ nghỉ phép, thời lượng và thời biểu lao động cũng là những vấn đề họ luôn nghiên cứu cẩn thận và thương lượng rõ ràng trước khi đặt bút ký vào bản hợp đồng lao động. Còn như đã vào làm rồi thì cũng chẳng sao. Bạn hoàn toàn có thể trao đổi trực tiếp với sếp về thời biểu làm việc, chẳng hạn như bạn muốn đi làm trễ hơn và về muộn hơn giờ chuẩn vì một nguyên nhân khách quan nào đấy hoặc bạn muốn được làm việc ở nhà đôi ba ngày trong tuần… Sẽ là một yêu cầu không quá đáng nếu bạn có thể giải trình chi tiết với sếp về kiến nghị của mình. Nói cách khác, bạn cần phải thuyết phục và chứng minh được rằng tuy đang ngồi ở nhà, nhưng bạn vẫn hoàn thành tốt nhiệm vụ. Ví dụ, bạn có thể giải bày với sếp rằng sáng nay thời tiết rất xấu, kéo dài trong nhiều giờ liền khiến bạn đi làm muộn. Như vậy, sẽ rất lãng phí thời gian bởi lẽ chỉ với một kết nối Internet tại nhà, bạn đã hoàn toàn có thể làm việc như thể bạn đang có mặt ở công ty... Chủ động kết hợp và lồng ghép các công việc có liên quan Kết quả từ cuộc khảo sát mới đây của dịch vụ cung ứng lao động Office Team (California, Mỹ) cho thấy có khoảng 53% giám đốc CNTT quan tâm và luôn tạo điều kiện cũng như có những chính sách cụ thể để giúp nhân viên cân bằng giữa công việc và sự nghỉ ngơi. Chỉ có 37% chưa thực sự nhiệt tình và số ít còn lại không ủng hộ. Tuy nhiên, ngay cả khi bạn được sếp chăm lo, nếu không nắm bắt cơ hội và vận dụng một cách sáng tạo, những chính sách ấy cũng chẳng thể tự nó phát huy hiệu quả giảm stress cho bạn. Đừng quá cứng nhắc trong hành động. Ví dụ, bạn đang làm việc cho một công ty có xu hướng quản lý nhân viên theo khối lượng và chất lượng công việc hơn là kiểm soát chặt chẽ thời lượng hiện diện của họ ở văn phòng, vậy thì bạn phải chạy đua với thời gian để hoàn thành càng sớm nhiệm vụ được giao càng tốt. Giả sử, sáng nay, bạn được phân công làm việc với đối tác là một công ty ở gần nhà. Thay vì phải mất thời gian cho việc đến công ty để trình diện sếp, rồi đi đến công ty nọ để đàm phán kinh doanh rồi quay trở lại công ty để báo cáo kết quả, bạn có thể không cần đến công ty mà đi thẳng đến đối tác để làm việc rồi ngồi ở nhà gửi e-mail cho sếp. Quỹ thời gian của bạn sẽ được tiết kiệm đáng kể và bạn có thể dùng nó để làm thêm chuyện khác mà không vi phạm nội quy lao động của công ty. Tìm kiếm “quân sư” Brian Abeyta, Phó chủ tịch kiêm Giám đốc CNTT của Tập đoàn Bảo hiểm Aflac, kể: “Tôi rất ngưỡng mộ cách sống và làm việc của một chị giám sát viên trong công ty. Tuy là thuộc cấp, nhưng chị rất xứng đáng để tôi phải học tập. Ngay khi chị được công ty trao quà về thành tích hai giỏi (vừa là một nhà quản lý giỏi, vừa là một bà mẹ tuyệt vời), tôi đã chạy vội đến bên chị và đề nghị được chị chia sẻ kinh nghiệm. Giờ đây, tôi đang áp dụng rất nhiều phương pháp hay của chị, đặc biệt là tính tự quản. Khi đã lên lịch làm gì, chị đều quyết tâm thực hiện đầy đủ và đúng giờ.” Tranh thủ tối đa sự trợ giúp của mọi người "Ngạn ngữ có câu ‘Biết tất cả nghĩa là không biết gì.’ Bởi vậy, khi lâm vào tình trạng bế tắc, bạn đừng quá sĩ diện để rồi phải ôm trong người một bài toán không có lời giải. Hãy tranh thủ sự trợ giúp của người thân. Như tôi chẳng hạn, những lúc công việc vượt khỏi khả năng giải quyết, tôi liền gọi điện cho chồng – cũng là giám đốc CNTT ở một công ty khác – để ông ấy chỉ cách gỡ rối,” Natalie Gahrmann, chuyên gia CNTT của N-R-G Coaching Associates, khuyên. “Bạn cũng đừng quên trưng cầu và tập hợp ý kiến của đồng nghiệp trước khi ra quyết định sau cùng về một công việc khó khăn nào đấy. Ví dụ, mới đây, tôi được giao nhiệm vụ đi mua một máy chủ mới cho công ty. Thú thật, lúc ấy, tôi chưa được tự tin lắm với kiến thức của mình về dòng HP C-Class. Ngoài việc tìm kiếm sự tư vấn từ các nhà cung cấp, tôi cũng đưa vấn đề này ra cuộc họp và mời đồng nghiệp góp ý. Cuối cùng, tôi đã mua được một sản phẩm đúng như mong đợi và tiết kiệm được rất nhiều thời gian.” Hãy chia sẻ “tuyệt chiêu” với đồng nghiệp Trong một môi trường làm việc mang tính cạnh tranh quyết liệt, sẽ chẳng có gì là khó hiểu nếu bạn không muốn để lộ những bí quyết nghề nghiệp. Tuy nhiên, nếp nghĩ và cách làm này đôi lúc lại là “con dao hai lưỡi”. Đừng bao giờ là người duy nhất có thể giải quyết được một lĩnh vực chuyên môn nào đấy, bởi lẽ mỗi khi “đụng chuyện”, bạn đều phải có mặt. Hãy truyền đạt kinh nghiệm, kiến thức của bạn cho những thành viên khác trong nhóm và chủ động kiến nghị với sếp được làm điều đó thông qua các buổi sinh hoạt chuyên môn. Như thế, bạn sẽ không bị “réo gọi” vào những thời điểm mà bạn không hề mong đợi. Khai thác sức mạnh của các thiết bị di động Những phương tiện này sẽ giúp bạn làm việc mọi lúc mọi nơi, thay vì phải “bám trụ” tại bàn làm việc ở công ty. Không chỉ dừng lại ở đó, khả năng tích hợp và chia sẻ dữ liệu giữa chúng và hệ thống mạng máy tính doanh nghiệp hiện được đánh giá là rất cao. Chẳng hạn như, với một thiết bị hỗ trợ cá nhân kỹ thuật số (PDA), bạn hoàn toàn có thể ghi lại nội dung làm việc tại phòng họp công ty. Đến khi trở về máy trạm của mình, bạn chỉ cần kết nối nó với máy tính rồi tiến hành đồng bộ hóa dữ liệu một cách dễ dàng và nhanh chóng. Việc tra cứu những ghi chú đã được số hóa như vậy cũng giúp bạn tiết kiệm được nhiều thời gian hơn so với việc cứ “kè kè” bên mình những quyển sổ tay và cũng đỡ vất vả hơn mỗi khi muốn tìm lại một thông tin nào đó trong một “rừng” chữ… Nhưng cũng phải biết cách sử dụng chúng một cách khôn ngoan Các thiết bị số dẫu thông minh đến mấy cũng sẽ trở thành vật vô dụng nếu chúng bị khai thác sai mục đích hoặc không đúng cách. Hãy xác lập thời điểm sử dụng chúng và khi đã hết giờ, nên tạm chia tay để còn dành thời gian cho cuộc sống gia đình. Đừng mãi “ôm” chúng suốt ngày để kiểm tra và hồi âm thư điện tử hay nhắn tin SMS. Ngoài ra, bạn cũng linh hoạt khai thác các phương tiện liên lạc này, lúc thì e-mail khi thì gọi điện thoại. Đôi lúc, chi phí liên lạc không quan trọng. Vấn đề nằm ở chất lượng và hiệu quả giao tiếp. Ví dụ, thoạt đầu, bạn định nhắn tin SMS cho một đồng nghiệp để trao đổi công việc theo cách tiết kiệm nhất. Thế nhưng, mặc dù đã thư đi tin lại khá nhiều, song cả hai đều vẫn chưa hiểu được nhau. Trong khi, chỉ cần một cuộc gọi ngắn không quá 60 giây, có lẽ mọi thứ sẽ xong. Chẳng những bạn không tiết kiệm được chi phí mà còn cảm thấy bực mình hơn vì chẳng đâu vào đâu cả. Một ức chế tâm lý không đáng có sẽ kéo theo một loạt tác động tiêu cực và âm ỉ cho cả ngày làm việc của bạn đấy. Luôn lạc quan Ngộ nhỡ gặp thất bại trong công việc, tâm trạng và phản ứng của bạn thế nào ? Nếu không biết cách kiềm chế cảm xúc, rất có thể bạn sẽ bị sa sút “phong độ” rất nhanh. Khi ấy, thay vì cứ nghĩ đến cái vị “đắng” của thất bại một cách cục bộ, bạn nên đặt nó lên một trục thời gian dài hơn để thấy rằng đó chỉ là một vấn đề ngắn hạn, trong khi tương lai của bạn vẫn còn rộng mở ở phía trước. Như vậy, bạn sẽ cảm thấy dễ chịu và tự tin trở lại sau cú vấp ngã này. Dẫu sao, thất bại cũng là mẹ của thành công.

Thứ Tư, 13 tháng 8, 2008

Toán Vui

Có bài toán này: có 12 quả táo , trong đó có 11 quả có khối lượng bằng nhau, còn 1 quả có khối lượng khác với 11 quả còn lại, chỉ biết là khác thôi nhá, không biết là nặng hơn hay nhẹ hơn. bằng 3 lần cân bập bênh, hãy xác định quả có khối lượng khác đó. ai thông minh sáng láng thử nghĩ hộ, vì tui nghĩ toàn bị có trường hợp thành 4 lần cân thội
Lời Giải
L1:Chia thành 3 nhóm mỗi nhóm 4 quả , cân 2 nhóm.
->TH1: 2 Nhóm bằng nhau(thật cả) : đánh số các quả trong nhóm còn lại theo sô 1,2,3,4.
+>L2:cân 3 quả 1,2,3 với 3 quả thường.a, bằng nhau
-> quả thứ 4b,nặng hơn ( nhẹ hơn) thì cân 2 quả 1,2 với nhau->.
-> TH2: 1 trong 2 nhóm nặng hơn, đánh số các quả trong hai nhómNhóm nặng : 1,2,3,4
Nhóm nhẹ :a,b,c,d
+>L2: cân nhóm (1,2,a) và (3,4,b)
i> bằng nhau -> xét cân c,d quả nào nhẹ thì đó là quả cần tìm
ii>nhóm (1,2,a) nặng hơn->3,4,a là các qủa thường
+>L3 : cân 2 quả 1,2 : />bằng -> quả b ( nhẹ hơn)
//>1 quả nặng -> là quả cần tìm
iii> nhóm (3,4,b) nặng hơn ----> tượng tự trên

Thứ Hai, 11 tháng 8, 2008

Add and Call WebService at runtime

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Security.Permissions;
using System.Web.Services.Description;

namespace ConnectionLib
{
internal class WsProxy
{
[SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
System.Net.WebClient client = new System.Net.WebClient(); // Connect To the web service
System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl"); // Now read the WSDL file describing a service.
ServiceDescription description = ServiceDescription.Read(stream); ///// LOAD THE DOM ///////// // Initialize a service description importer.

ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
importer.AddServiceDescription(description, null, null); // Generate a proxy client. importer.Style = ServiceDescriptionImportStyle.Client; // Generate properties to represent primitive values.
importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; // Initialize a Code-DOM tree into which we will import the service.
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace); // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1); if (warning == 0) // If zero then we are good to go
{
// Generate the proxy code
CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp"); // Compile the assembly proxy with the appropriate references
string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences); CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1); // Check For Errors
if (results.Errors.Count > 0)
{ foreach (CompilerError oops in results.Errors)
{ System.Diagnostics.Debug.WriteLine("========Compiler error============");
System.Diagnostics.Debug.WriteLine(oops.ErrorText);
}
throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
}
// Finally, Invoke the web service method
object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
return mi.Invoke(wsvcClass, args);
}
else
{ return null;
}
}
}
}

Các câu lệnh chạy từ Run

Các câu lệnh chạy từ Run

- Accessibility Controls ( chương trình cơ bản trong Win)
access.cpl

- Add Hardware Wizard ( Tự dò tìm phần cứng)
hdwwiz.cpl

- Add/Remove Programs ( Thêm hoặc gỡ bỏ chương trình)
appwiz.cpl

- Administrative Tools ( công cụ quản trị̣)
control admintools

- Automatic Updates ( tự động cập nhật)
wuaucpl.cpl

- Bluetooth Transfer Wizard ( khởi động Bluetooth)
fsquirt

- Calculator ( máy tính )
calc

- Certificate Managercertmgr.msc- Character Map ( bảng ký tự)
charmap

- Check Disk Utility ( kiểm tra đĩa)
chkdsk

- Clipboard Viewer ( mở clipboard)
clipbrd

- Command Prompt (mở cửa sổ Dos)
cmd

- Component Services ( quản lý các thành phần )
dcomcnfg

- Computer Management (quản lý máy)
compmgmt.msc

- Date and Time Properties ( thuộc tính ngày giờ)
timedate.cpl

- DDE Shares ( chia sẻ DDE)
ddeshare

- Device Manager ( quản lý thiết bịdevmgmt.msc- Direct X Control Panel (If Installed)*directx.cpl

- Direct X Troubleshooterdxdiag- Disk Cleanup Utility ( quét rác)
cleanmgr

- Disk Defragment ( chống phân mảnh đĩa)
dfrg.msc

- Disk Management (quản lý đĩa)
diskmgmt.msc

- Disk Partition Manager (quản lý phân vùng)
diskpart

Display Propertiescontrol desktopDisplay Properties
desk.cpl

Display Properties (w/Appearance Tab Preselected)

control color

- Dr. Watson System Troubleshooting Utility (sử lý lỗi hệ thống)
drwtsn32

- Driver Verifier Utility
verifier

- Event
Viewereventvwr.msc

- File Signature Verification Tool
sigverif

- Findfastfindfast.cpl

- Folders Properties
control folders

- Fonts
control fonts

- Fonts
Folderfonts

- Free Cell Card Game
freecell

- Game
Controllersjoy.cpl

- Group Policy Editor (XP Prof)
gpedit.msc

- Hearts Card Game
mshearts

- Iexpress Wizard
iexpress

- Indexing Service
ciadv.msc

- Internet Properties
inetcpl.cpl

- IP Configuration (Display Connection Configuration)
ipconfig /all

- IP Configuration (Display DNS Cache Contents)
ipconfig /displaydns

- IP Configuration (Delete DNS Cache Contents)
ipconfig /flushdns

- IP Configuration (Release All Connections)
ipconfig /release

- IP Configuration (Renew All Connections)
ipconfig /renew

- IP Configuration (Refreshes DHCP & Re-Registers DNS)
ipconfig /registerdns

- IP Configuration (Display DHCP Class ID)
ipconfig /showclassid

- IP Configuration (Modifies DHCP Class ID)
ipconfig /setclassid- ava

Control Panel (If Installed)
jpicpl32.cpl

- Java Control Panel (If Installed)
javaws

- Keyboard Properties
control keyboard

- Local Security Settings
secpol.msc

- Local Users and Group
slusrmgr.msc

- Logs You Out Of Windows
logoff

- Microsoft Chat
winchat

- Minesweeper Game
winmine

- Mouse Properties
control mouse

- Mouse Properties
main.cpl

- Network Connections
control netconnections

- Network Connections
ncpa.cpl

- Network Setup Wizard
netsetup.cpl

- Notepad
notepad

- Nview Desktop Manager (If Installed)
nvtuicpl.cpl

- Object Packager
packager

- ODBC Data Source Administrator
odbccp32.cpl

- On Screen Keyboard
osk

- Opens AC3 Filter (If Installed)
ac3filter.cpl

- Password Properties
password.cpl

- Performance Monitor
perfmon.msc

- Performance Monitor
perfmon

- Phone and Modem
Optionstelephon.cpl

- Power Configuration
powercfg.cpl

- Printers and Faxes
control printers

- Printers Folder
printers

- Private Character Editor
eudcedit

- Quicktime (If Installed)
QuickTime.cpl

- Regional Setting
sintl.cpl

- Registry Editor
regedit

- Registry Editor
regedit32

- Remote Desktop
mstsc

- Removable Storagent
msmgr.msc

- Removable Storage Operator Request
sntmsoprq.msc

- Resultant Set of Policy (XP Prof)
rsop.msc

- Scanners and Camera
ssticpl.cpl

- Scheduled Tasks
control schedtasks

- Security Center
wscui.cpl

- Services
services.msc

- Shared Folder
sfsmgmt.msc

- Shuts Down Windows
shutdown

- Sounds and Audio
mmsys.cpl

- Spider Solitare Card Game
spider

- SQL Client Configuration
cliconfg

- System Configuration Editor
sysedit

- System Configuration Utility
msconfig

- System File Checker Utility (Scan Immediately)
sfc /scannow

- System File Checker Utility (Scan Once At Next Boot)
sfc /scanonce

- System File Checker Utility (Scan On Every Boot)
sfc /scanboot

- System File Checker Utility (Return to Default Setting)
sfc /revert

- System File Checker Utility (Purge File Cache)
sfc /purgecache

- System File Checker Utility (Set Cache Size to size x)
sfc /cachesize=x

- System Properties
sysdm.cpl

- Task Manager
taskmgr

- Telnet Client
telnet
- User Account Management
nusrmgr.cpl

- Utility Manager
utilman
- Windows Firewall ( tường lửa)
firewall.cpl

- Windows Magnifier
magnify

- Windows Management Infrastructure
wmimgmt.msc

- Windows System Security Tool ( công cụ bảo mật)
syskey

- Windows Update Launche
swupdmgr
- Windows XP Tour Wizard
tourstart
- Wordpad