Archive

Archive for the ‘1. General Programming’ Category

Ideas

I am currently having some fancy ideas about various topics that I can dive in. The bad news is I have too little time for them right now, so although I intended to start very soon, but I’m not sure when I can really dig into these messes.

These ideas are very straightforward:

1. Security in Cloud computing, data mining/querying on encrypted databases and practical facts.

This idea came to me in the RIVF conference last month. The general consideration is how can we trust the Cloud service provider (i.e. Windows Azure, Amazon Web Service…) that they will not steal our data, how much our data is secured? When we performing queries, how can we know if the provider is faithful enough?

One of possible solutions is encrypting the data before sending it to the provider. The problem hence raise, since how could we do data mining, query “our” encrypted data which are stored on provider’s infrastructure?

This is really a hard (and interesting!) problem, and it draws many attentions from academic scholars. It is pretty useful to apply the academic idea on commercial service like Windows Azure or AWS…

2. The second idea comes from my experiences on GPU computing with CUDA.

DirectCompute has been announced in PDC 2009, and it seems promising in cross-platform GPU computing. Nonetheless, the documentation of DirectCompute seems to be lacking (even on MSDN DirectX). I want to dig into DirectCompute, perform some benchmarks to check it performance, and then comparing with CUDA or OpenCL. I believe this will point out some interesting conclusions.

So if one of the readers of this blog would like to investigate to these problems, please contact me. I’m not sure this will lead to anywhere, but at least it can help you improving some skills 😉

Advertisements

An CFG for Roman numerals

In one of my assignments for Compiler course at my university, I have to deal with this problem: build an attributed grammar tree in order to recognize Roman numbers, and convert it into Arabic format. Well, it doesn’t seem a simple mission.

Read more…

CG_Thuật toán Quay lơ (Weiler)

Bài tập môn CG của tớ, 2 ngày code cái này thật là… !%^&$#@@#$%&

Những kinh nghiệm rút ra như sau:

1/ Trừ khi bị ép buộc, ko cài những thứ gì liên quan tới con trỏ bằng C++ nữa! Cái cảm giác 1 object nhưng có tới 3-4 con trỏ trong mấy cái list thật là… >”< Cuối cùng thì tớ cứ viết ẩu, new ào ào mà chả thèm delete…. hix… Cảm thấy có lỗi với thầy Phương, thầy Khiết, thầy Thư… nhiều wá… :”>

2/ Tớ đã ngồi cài lại cái hàng đợi bằng dslk đôi. Ngu thế là cùng!

3/ Post lên đây chơi ha!

http://cid-75f5081ae5375f06.skydrive.live.com/self.aspx/Shared%20source%20code/0612578|_Weiler.rar

Singleton “plus”, or yet another way to improve Singleton pattern

Có thể xem Singleton là một trong những mẫu thiết kế (Design Pattern) dễ cài đặt nhưng cũng rất hiệu quả trong thiết kế phần mềm. Ở đây không nhắc lại về mẫu này, chỉ xin trình bày một số “cải tiến” nhỏ đối với Singleton mà tác giả đã sử dụng cho phần mềm của mình trong thực tế.

1. Thread-safe Singleton objects

Mục đích: Mẫu Singleton chuẩn có thể sử dụng cho các lớp chỉ có duy nhất 1 instance trong chương trình. Tuy nhiên trong các ứng dụng có nhiều thread, mà các thread này đều phải truy xuất chung đến một đối tượng Singleton thì sẽ nảy sinh nguy cơ xung đột. Do đó cần có cơ chế đảm bảo việc truy xuất đối tượng Singleton sao cho không xảy ra hiện tượng này.

Cài đặt:

public class TSSingleton
{

private static object SyncRoot = new object();

private static TSSingleton m_Instance;

protected TSSingleton()
{

// Initialize code goes here…

}

public static TSSingleton Instance
{
get
{

lock(SyncRoot)
{
if(m_Instance == null)
m_Instance = new TSSingleton();
}
return m_Instance;
}
}

}

Cài đặt khá đơn giản. Một đối tượng SyncRoot được dùng để đảm bảo tại một thời điểm, chỉ có đúng 1 thread truy xuất đối tượng TSSingleton. Kĩ thuật này hiệu quả khi đối tượng Singleton là một phần tử trong giao diện, và có vài thread đang chạy nền có như cầu truy xuất đến nó.

2. “Multi”-ton

Ứng dụng thực tế: Các chương trình chat như Yahoo Messenger, Microsoft Live Messenger v.v… có thể quản lý nhiều cửa sổ chat cùng một lúc, nhưng mỗi cửa sổ là duy nhất cho một nick. Giả sử bạn đang chat với nick A, thì chỉ duy nhất 1 cửa sổ chat được tạo ra, ứng với nick chat này. Như vậy nảy sinh yêu cầu có một tập các đối tượng Singleton. Cài đặt cái này trong C# cũng không quá khó:

using System.Collections.Generic;

public class Multiton
{

private static Dictionary<string, Multiton> m_arrInstances = new Dictionary<string, Multiton>();

private readonly string m_sID;

protected Multiton(string sID)
{
m_sID = sID;
// Initialize code goes here…
}

public static GetInstance(string ID)
{
if(!m_arrInstances.ContainsKey(ID))
m_arrInstances[ID] = new Multiton(ID);

return m_arrInstances[ID];
}

}

Trong destructor của lớp, ta cần thêm vào câu lệnh:

m_arrInstances.Remove(m_sID);

để loại đối tượng này khỏi danh sách!