Thứ Bảy, 9 tháng 4, 2011

Đen đủi



Ngã xe chẳng đâu vào đâu, may mà người không bị sao chỉ mất mấy triệu thôi. Tận cùng của đen đủi rồi không hiểu còn khó khăn nào đón chờ nữa đây.

Lúc ngã nghĩ quẩn : "nhỡ không may lăn đùng ra đấy thì toi, mà mình thì chưa con cái gì, nhục! Phải cưới vợ sớm thôi cho an tâm, còn có đứa nối dõi... "

Lúc mới ngã xe, cái xe bị thằng Oto Hoàng Long đâm vỡ tan đít xe biển số, đứng dậy thì bình thường không cảm giác thấy vấn đề gì, về nhà mới thấy đau ê ẩm chân trái, không biết xương cốt có vấn đề gì không ? hy vọng là không sao, chỉ chùn chân chút thôi thì may.

Tiền thì mình cũng chẳng thèm bắt đền thằng lái xe khách Hoàng Long làm gì, mặc dù thằng mất dạy đi đứng láo toét. Đành tự an ủi "của đi thay người thôi, sống là may rồi".

Giờ tự dưng còn bồn chồn bất an nữa chứ, ... :(

Buồn bực quá.

Thứ Ba, 29 tháng 3, 2011

Sẽ kết thúc tình yêu vớ vẩn này

Không yêu đường gì hết, nhố nhăng vớ vẩn nhăng nhít (HaiHai). Không có gì là phù hợp cả. :( chỉ buồn cười vì cuối cùng lại ghi thêm 1 tên 1 em không thành vào danh sách các bạn gái. Cố gắng chờ người phù hợp vậy.

Chủ Nhật, 20 tháng 3, 2011

Cây sẽ cho lộc và cây sẽ cho hoa


Lâu lâu mới nghe lại bài này và thấm thía triết lý cuộc sống. Nếu bạn là lãnh đạo, bạn sẽ là người phải lo âu đầu tiên khi nghe những thông tin kinh tế không mấy sáng sủa, nhất là khủng hoảng kinh tế, lạm phát, thắt chặt chi tiêu công ... Thật khó để bạn có thể tìm kiếm nguồn khách hàng mới, và bạn sẽ u sầu cả ngày mà nghĩ hoài chẳng ra làm cách nào để đảm bảo doanh số như những năm trước đó.

Nhưng vấn đề chính là "cây sẽ sinh lộc rồi thì cây sẽ sinh hoa", chẳng phải lo đâu. Cái cây (cty) bạn dựng lên tự nó sẽ tìm ra con đường sống và phát triển cho nó, bạn có buồn, có suy tư cũng chỉ làm bạn thêm mệt mà thôi.

Hehe, vớ vẩn thế thôi.

Thứ Sáu, 18 tháng 3, 2011

Đăng nhập với LDAP dotnet 2,0

Dotnet 2.0 thực chất cung cấp cho chúng ta tương đối nhiều hàm (function) cũng như các object để có thể can thiệp trực tiếp vào việc quản lý tài khoản trên ActiveDirectory. Tất cả các đối tượng này nằm trong dll có namespace là System.DirectoryServices

Một trong những ứng dụng quan trọng nhất của AD đó là làm sao có thể truy cập vào tài khoản của AD rồi xác thực tài khoản này có đúng với username và password đó không.

Câu lệnh đơng giản như sau :


using System.DirectoryServices;

public static bool Authenticate(string userName, string password, string domain)
{
bool authentic = false;
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,
userName, password);
object nativeObject = entry.NativeObject;
authentic = true;
}
catch (DirectoryServicesCOMException e) { }
return authentic;
}


Để tìm hiểu chi tiết và đầy đủ hơn nữa mời bà con vào coi tại địa chỉ

http://www.codeproject.com/KB/system/everythingInAD.aspx#35

Chị chạy 1 application tại một thời điểm

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Process currentProcess = Process.GetCurrentProcess();
Process[] processItems = Process.GetProcessesByName(currentProcess.ProcessName);
foreach (Process item in processItems)
{
if (item.Id != currentProcess.Id)
{
MessageBox.Show("Another instance running");
return;
}
}

Application.Run(new MForm());
}


Only 1 instance application run at a time

Chữ tín - trách nhiệm công việc - sống đểu

Tiêu đề toàn là những đức tính chẳng liên quan khỉ gì đến nhau, thế mà nó lại liên quan đến nhau đấy. Đại để là có 1 thằng khách hàng (cơ quan nhà nước), vốn bản tính quan liêu, thành ra họ củ hành củ tỏi mình đủ điều (mình là bên B - thi công). Các vị nhà nước thì vốn hứa hươu hứa vượn.

Lần 1

B: bao giờ thì bên anh thanh toán tiền?
CQ NN : làm xong chức năng A + B + C là xong, sẽ thanh toán ngay sau 7 ngày.

7 ngày sau.
B: Các chức năng A + B + C xong rồi, đã qua 7 ngày vẫn chưa thấy tiền?
CQ NN : Bên kế toán họ đang làm, chắc cuối tuần sau là có tiền về tài khỏan thôi.

14 ngày sau.
B : Lại thêm 14 ngày nữa, tức là 2 tuần rồi vẫn chưa có tiền bạn ơi.
CQ NN : Mình làm thủ tục chuyển rồi, nhưng bên kho bạc và bên kế toán họ làm hơi chậm.
B : tại sao các đơn vị cứ đùn đẩy cho nhau nhỉ ? kỹ thuật đẩy cho kế toán kế toán đẩy cho kho bạc, kho bạc kêu thiếu giấy tờ, vậy cuối cùng ai chịu trách nhiệm, không có ai có trách nhiệm trong việc này sao ???
CQ NN : đừng trẻ con thế.

B : Trẻ con có nghĩa là hứa ngay, và 21 ngày sau vẫn chưa có tiền là người lớn sao bạn ???

Thế này thì ai sống đểu nhỉ ?

Chủ Nhật, 21 tháng 2, 2010

Cache tăng tốc load trang asp.net và Your cache provider (advance)

Thằng DNN cho phép người dùng có thể viết riêng Cache Provider của mình, thằng aspnet cũng thế, chúng ta có thể viết thoải mái. Cache hỗ trợ tăng tốc website (cái này thì rõ rồi).

Theo mô hình chúng ta thường làm web theo mô hình sau :

Data SQL -> Html (trong trang ASPX)

Nếu có cache mô hình sẽ như sau

Data SQL -> Cache -> Html

nếu trong cache tồn tại giá trị rồi thì không cần kết nối vào SQL nữa, vì thông thường để load 1 trang chúng ta dùng tương đối nhiều connection (> 3 connection). Với những đồng chí code không tối ưu số connection có thể lên đến 20 hoặc 50 conn. Tốc độ load trang sẽ rất rùa. Nếu đọc từ cache thì tốc độ load trang sẽ cải tiến hơn nhiều.

Các vấn đề cần giải quyết với cache:
- Cache manager phải tồn tại trong suốt thời gian website chạy (không thì load ra bằng niềm tin). Để tồn tại trong suốt thời gian chạy thì chỉ có biến HttpApplication là active (là sống - alive)
- Hỗ trợ các hàm cơ bản : insert, remove, clear ...
- Hỗ trợ các kiểu dữ liệu khác nhau (, nảy sinh nhiều vấn đề với thằng này)


Vấn đề kiểu dữ liệu (datatype)

Chúng ta biết rằng các kiểu dữ liệu do chúng ta định nghĩa là liên thiên. Các kiểu dữ liệu thường thấy của chúng ta là :

- UserInfo (n trường dữ liệu : Fullname, Email, Address ...)
- PostInfo (m trường : Username, PostedDate, ...)

Vấn đề đặt ra là các biến này có lưu được vào Cache không ? Xin thưa là ông Microsft (viết ASP.NET) chẳng hiểu các kiểu dữ liệu mà các bác định nghĩa nó thế nào đâu. Nên cái Cache Provider (default) của Microsoft chỉ thực sự cache các biến kiểu dữ liệu cơ bản (int, float, long, string...), tức là MS Cache default provider sẽ lưu các biến kiểu dữ liệu cơ bản (int, float, long, string...) vào đâu đó trên disk, còn các kiểu dữ liệu UserInfo, PostInfo ... (do bạn định nghĩa) nó bó tay chẳng lưu nổi vào disk đâu. Bởi vì hệ thống đek làm thế nào mà serialize được (cái này dùng để lưu ra disk). Nên kết luận đưa ra là :


Nếu Cache các kiểu dữ liệu do người dùng định nghĩa thì thực tế là không cache.


Tức là không tồn tại mô hình này :
- Data SQL -> Cache -> Html
Nó chỉ thực hiện cái này
- Data SQL -> Html

Cái này em tìm ra do thực nghiệm (debug) tại function connection vào SQL sau khi đã đặt cache, trong mỗi lần load trang, lần nào em cũng thấy cái query vào DB thực hiện, tức là chả cache keo được cái gì nếu chúng ta cố cache Custom Class Definition. Nhục nhục! Nên nếu bác nào cache thì cache các biến cơ bản thôi nhé.


Vấn đề Live long (sử dụng HttpApplicationState)

Cái cache manager phải sống đủ dài, chứ không thì hệ thống đọc = niềm tin, lại phải connect vào DB tốc độ trang lại rùa. Vấn đề chính ở đây là nếu lưu vào ApplicationState thì 1 biến của bạn thực tế có độ lớn bao nhiêu và kiểu dữ liệu là gì? thực tế cache xong thì hệ thống có chạy nhanh hơn không ? Nó chiếm bao nhiêu RAM ? vì thực tế ApplicationState là lưu trong RAM.

Dùng ApplicationState có 1 cái dở nếu lưu nhiều quá mà IIS Application Pool của bạn được phân bé quá (sảy ra khi thuê host sinh viên giá rẻ) thì bạn sẽ bị lỗi :


Server too bussy


Chẳng làm được việc gì khác. Cho nên mình đã cố tự làm 1 cái serialize cho các loại DataType + code thêm Cache Provider Manager để làm cái việc write các Custom Class ra file text. Nhưng cũng chẳng ăn thua vì lỗi Server too bussy.

Như vậy hệ thống của Microsoft viết Cache giúp chúng ta 1 số chức năng :
- Tránh tràn Application Pool
- Chỉ serialize (ghi ra file) những biến tương đối nhỏ. Tối ưu hóa về bộ nhớ, nếu tràn MS Cache cho phép tự động xóa 1 số biến. Cái này giúp các hệ thống của MS không bị treo hay phát sinh những lỗi kỳ quặc.

Các hệ thống tự viết được cái nhanh thì lại ngốn RAM nhiều, không có khả năng triển khai một cách linh động.