Monday, July 20, 2015

Charizing Operator (#@) Does Not Work On MAC OSX

 #include <iostream>  
 using std::cout;  
 using std::endl;  
 #define Charizing(x) #@x  
 int main()  
 {  
   cout << Charizing(a) << endl;  
   cout << Charizing(b1) << endl;  
 }  
First, let's study above program. The output is
a
25137

Basically, Charizing(x) encloses the parameter x with single quotation mark and treats it as a character. That's why Charizing(a) returns a. However, when x is not a character, the output is some strange number. I guess the number is converted from type of parameter to char.

However, the above program is not compilable in Xcode. The error is '#' is not followed by a macro parameter.

As far as I know, Stringizing operator (#) and Token-pasting operator (##) work fine on Xcode, except Token-pasting operator (##). According to MSDN, Token-pasting operator (##) is a Microsoft specific. This is why it is not supported in Xcode.

To fix the program to work on both Windows and MAC OSX, we can first convert the parameter x to string and then get the first character. We suppose that x always contains one character with "#x[0]".
 #include <iostream>  
 using std::cout;  
 using std::endl;  
 #define Charizing(x) #x[0]  
 int main()  
 {  
   cout << Charizing(a) << endl;  
   cout << Charizing(b1) << endl;  
 }  
Thus,  we can remember #@x is equal to #x[0], assume that x is a one-char string.


Monday, July 13, 2015

Token-Pasting Operator (##) does not concat String as I expect




Let's study below example


#include
using std::cout;
using std::endl;


#define STRINGIFY2( x) #x
#define STRINGIFY(x) STRINGIFY2(x)

#define A1 a2
#define B1 b2

#define concat2(x, y, z) x ## y z
#define concat(x,y, z) concat2(x,y, z)
int main()
{
    cout << STRINGIFY(concat2(A1, B1, A1)) << endl;
    cout << STRINGIFY(concat(A1, B1, A1)) << endl;
    
}

The output is
A1B1 a2
a2b2 a2

According to MSDN, "If a formal parameter in a macro definition is preceded or followed by the token-pasting operator, the formal parameter is immediately replaced by the unexpanded actual argument. Macro expansion is not performed on the argument prior to replacement". Thus, in the function concat2, x and y are not expanded while z is expanded. Therefore, the first line output is "A1B1 a2. Note that the space between x and y is removed. On the other hand, the function concat calls concat2 and 3 arguments, x, y, and z are computed first and send to concat2. Therefore, the output is "a2b2 a2".


Income Tax Rate in Singapore

Income tax rates depend on an individual's tax residency status. You will be treated as a tax resident for a particular Year of Assessment (YA) if you are a : 
  1. Singapore Citizen who normally resides in Singapore except for temporary absences; or
  2. Singapore Permanent Resident (SPR) who has established your permanent home in Singapore; or
  3. Foreigner who has stayed / worked in Singapore (excludes director of a company) for 183 days or more in the previous year. i.e. the year before the YA.
Otherwise, you will be treated as a non-resident of Singapore for tax purposes.

Resident Tax Rates

For YA 2012 to YA 2016

Chargeable Income
Income Tax Rate (%)
Gross Tax Payable ($)
First $20,000
Next $10,000
0
2
0
200
First $30,000
Next $10,000
-
3.50
200
350
First $40,000
Next $40,000
-
7
550
2,800
First $80,000
Next $40,000
-
11.5
3,350
4,600
First $120,000
Next $ 40,000
-
15
7,950
6,000
First $160,000
Next $ 40,000
-
17
13,950
6,800
First $200,000
Next $120,000
-
18
20,750
21,600
First $320,000
Above $320,000
-
20
42,350

Resident Tax Rates

For YA 2012 to YA 2016

Chargeable Income
Income Tax Rate (%)
Gross Tax Payable ($)
First $20,000
Next $10,000
0
2
0
200
First $30,000
Next $10,000
-
3.50
200
350
First $40,000
Next $40,000
-
7
550
2,800
First $80,000
Next $40,000
-
11.5
3,350
4,600
First $120,000
Next $ 40,000
-
15
7,950
6,000
First $160,000
Next $ 40,000
-
17
13,950
6,800
First $200,000
Next $120,000
-
18
20,750
21,600
First $320,000
Above $320,000
-
20
42,350

Tax Rates for Non-Residents

Taxes on Employment Income

The employment income of non-residents is taxed at flat rate of 15% or the progressive resident tax rates (see table above), whichever is a higher tax amount.

Taxes on Director's fee, Consultation fees and All Other Income

Director's fees, consultation fees and all other income, are generally taxed at 20%.

From YA 2017 New!

The tax rates for non- resident individuals (except certain reduced final withholding tax rates) will be raised to 22% from YA 2017. This is to maintain parity between the tax rates of non-resident individuals and the top marginal tax rate of resident individuals.
Type of Income
Non-resident individual tax rate / withholding tax rate from YA 2017
(a)
Director's remuneration 
22%
(b)
Income derived from activity as a non-resident professional (consultant, trainer, coach, etc) 
15% of gross income or 22% of net income

(c)
Income derived from activity as a non-resident public entertainer (artiste, musician, sportsman, etc)
10% concessionary rate (No change)


(d)
Other income e.g. property rental income
22%
(e)
SRS withdrawal by a non-citizen SRS member
22%
(f)
Interest, royalty etc 
Reduced final withholding tax rate (subject to conditions) as follows:
Interest: 15%
Royalty: 10%
OR
22% if reduced final withholding tax rate is not applicable.

(according to IRAS, all the information is copied on 26 Jul 2015)

Monday, June 22, 2015

Ghi Âm Trên MAC OS

Trong bài viết này mình sẽ giới thiệu một cách để ghi âm trên máy tính MAC OS như MacBook. MAC OS cung cấp phần mềm QuickTime Player với nhiều tiện ích bao gồm:

  1. Ghi âm
  2. Quay phim
  3. Quay màn hình
Để ghi âm, bạn chỉ cần mở ứng dụng QuickTime Player, chọn File, rồi chọn New Audio Recording. Để quay phim hay quay màn hình bạn có thể làm tương tự và chọn những lựa chọn khác trong menu File.

Để ghi âm, bấm nút đỏ. Sau đó, để dừng lại cũng bấm nút đỏ. Để lưu lại file ghi âm, chọn File rồi Save. Cuối cùng, chọn nơi để lưu file.



Thursday, March 26, 2015

Chiến Thuật Chơi Settlers of Catan

Tất cả những chiến thuật và kinh nghiệm ở đây được mình tổng hợp từ các nguồn ở Complex Strategies for Settlers of Catan và Settlers of Catan strategy tips. Mình khá thích phong cách đầu vì nó là một phong cách rất nhẹ nhàng nhưng lại hiệu quả. Mình đã áp dụng những gì mình học được và đã dành một vài chiến thắng đầu tiên. Vì thế mình tóm tắt lại các chiến thuật ở đây cho các bạn mới bắt đầu chơi.
  1. Quá trình xây dựng ban đầu
    Việc chọn vị trí để xây dựng ban đầu là cực kì quan trọng. Nhiều người nói rằng nó sẽ quyết định việc thắng hay thua đến 25%. Vậy kinh nghiệm là hãy chọn các vị trí sao cho có càng nhiều số càng tốt, mà không quá quan tâm nhiều đến loại tài nguyên nào. Sau đó, hãy ưu tiên chọn những số có xác suất cao như 6, 8, 5, 9, 4, và 10.  Về sau ta thậm chí có thể xây ở vị trí các số như 2, 3, hoặc 11 nếu ở đó có tài nguyên nào hiếm.

    Thường thì ta sẽ cố gắng lấy số 6 và 8 và xây nhà nằm trên 3 tài nguyên (có thể có số trùng).  Kinh nghiệm là cố gắng đạt được tổng số chấm của các số là từ 11 đến 13. Tuy nhiên nếu vì một lí do nào đó mà còn số 6 nhưng nhà chỉ nằm trên 2 số, ví dụ là 6-2, hoặc 6-12 thì ta không nên xây ở đó. Hãy tìm 8-5-10 rồi 4-9 và sau đó có thể xây đường đến số 6. Nếu tình cờ có 5-6-9 thì hãy xây ở đó ngay. Nếu bạn chơi thứ nhất hoặc thứ 2 thì hãy cố gắng lấy vị trí có sô 6.

    Sau khi đã chọn vị trí nhà, đến chọn vị trí đường. Đừng cố gắng chọn vị trí đường hướng đến các số đẹp vì sẽ có người xây nhà ở đó trước bạn. Thay vì đó xây đường hướng đến các số mà bạn chưa có như 4, 10, 3, hoặc 11. Sau đó ngôi nhà thứ 3 của bạn sẽ nằm trên các số này.

    Những câu hỏi bạn cần hỏi:
    • Số 6, 8 đang ở đâu, những vị trí nào có số 6, hoặc 8 có tốt không? Tìm vì trí 11-13 chấm
    • Tài nguyên nào sẽ khan hiếm?
    • Từ vị trí mình định xây nhà, có vị trí nào khá tốt nằm bên cạnh không? Nếu có thì đừng cố gắng xây đường đến hướng đó vì người ta sẽ xây nhà chặn
    • Mình đã có ít nhất 4 tài nguyên với xác suất ít nhất 2-3 chấm không?
    • Mình đã có nhiều các cặp tài nguyên là Lúa-Đá hoặc Gỗ Gạch chưa?
    • Từ vị trí mình chọn có dễ dàng ra cảng không?
  2. Quan sát đối thủ
    • Xác định những tài nguyên nào mà đối 
  3. Di chuyển quân Cướp
    Có nhiều ý kiến cho vị trí để di chuyển quân Cướp. Ví dụ, di chuyển sang vị trí của người có điểm cao nhất, hoặc ô 6, 8, hoặc ô có nhà của nhiều người. Tuy nhiên cần chú ý rằng, khi bạn di chuyển quân cướp tấn công ai, thì bạn lại có thêm 1 kẻ thù và có nguy cơ kẻ thù sẽ di chuyển quân cướp tấn công bạn.

    Vậy kinh nghiệm là chỉ nên tấn công 1 người duy nhất. Người này chơi trước bạn (nằm bên phải) hoặc ít nhất cũng đối diện bạn và không có quân bài Development. Tuy nhiên thậm chí nếu người này có cũng không sao, người đó phải 2 lượt và ngoài ra ta có thể biết xem quân bài Development người đó có là quân bài Hiệp Sĩ hay không. Để chọn vị trí đặt, thường sẽ đặt vào vị trí có nhiều chấm nhất. Cũng có lúc ta có thể đặt vào ô chứa tài nguyên quan trọng mà đối thủ bạn đang cần dù số chấm có ít.

    Đôi khi cũng có thể tấn công nhiều đối thủ cùng lúc, nhưng hãy chắc chắn rằng bạn có nhiều quân Rider hơn.

    Mẹo: Nếu tình cờ bạn bôc được quân bài Hiệp Sĩ thì hãy giả bộ nói ra. Có như vậy người ta sẽ hạn chế tấn công bạn.
  4. Trao đổi tài nguyên
    Hãy cố gắng tham gia trao đổi tài nguyên càng nhiều càng tốt. Đôi khi đổi dù bạn không được quá lợi. Nhưng làm như vậy sẽ tạo thiện cảm với người khác.
    Tuy nhiên càng về sau, chỉ nên trao đổi với người đang kém bạn hoặc thua bạn, không nên trao đổi với người điểm cao nhất.

    Mẹo: Nếu ai đó hỏi trao đổi tài nguyên mà chỉ có bạn có, hãy cho người đó đợi đến lượt của bạn. Vì lúc đó bạn có thể xây dựng trong khi trước đó thì không. Hãy nói ví dụ: Tôi đang có tài nguyên mà bạn cần, tuy nhiên tôi cũng cần có. Nếu lượt tới mà xúc xắc ra con số tôi cần, tôi sẽ trao đổi với bạn.

    Thông thường tỉ lệ trao đổi 1:1. Bạn không nên đòi hỏi quá cao nếu không mọi người sẽ ghét. Nếu bạn muốn đổi 1 thứ bạn đang có lấy 2 thứ khác. Hãy để người khác tự nguyện, ví dụ bạn có thể hỏi: "Tôi đang có 1 gạch, có ai muốn đổi không?". Nếu ai đó đồng ý đưa bạn 2 thứ thì bạn lấy, còn nếu 1 thứ bạn có thể từ chối. Còn nếu ai đó trực tiếp xin trao đổi với bạn 1 thứ nào đó lấy 1 gạch, bạn có thể từ chối nhẹ nhàng và có thể hỏi xem 2 thứ.
  5. Quân bài Development
    • Quân bài Hiệp Sĩ: Hãy cố gắng sở hữu nó càng sớm càng tốt và lúc nào cũng nên có ít nhất 1 con. Hãy cố gắng sử dụng nó khi bạn đã sử dụng 2 lần và có người khác cũng đã sử dụng 2 lần.
    • Quân bài Xây Đường: Chỉ sử dụng nó khi mà ngay sau đó bạn sẽ xây nhà ở cuối đường. 
    • Quân bài Lấy 2 Tài Nguyên: Nên sử dụng để nâng cấp lên citi.
    • Quân bài Monopoly: Nên sử dụng ở cuối trận. Kinh nghiệm là nhìn bài tài nguyên, xem loại nào còn ít chứng tỏ nó đang được sở hửu rất nhiều. Có một mẹo nữa là trước khi bạn muốn lấy tài nguyên nào, ví dụ Cừu, bạn mang tất cả cừu bạn có để đổi lấy các thứ khác, sau đó dùng quân bài Monopoly để lấy lại hết cừu. Cách này hay nhưng hơi ác. Nó sẽ khiến mọi người ghét bạn, chỉ nên chơi nó trong trận nào quan trọng, 1 mất 1 còn :-)
    • Quân bài 1 Điểm Chiến Thắng: Kinh nghiệm nếu lấy được quân bài Hiệp Sĩ hãy cho mọi người biết, còn các quân bài còn lại hãy nói là quân bài 1 điểm chiến thắng. Có như vậy bạn mới giữ bí mật kế hoạch xây nhà, hoặc Monopoly được. Nhưng nếu đối thủ bạn không có thói quen dò hỏi thì bạn cứ nói là quân bài Hiệp Sĩ. Quân bài 1 điểm chiến thắng luôn là yếu tố bất ngờ. Mình vừa thắng 1 ván khi mà mình chỉ có 3 nhà, nhưng lại có đường dài nhất (+2), có đội quân mạnh nhất với việc sử dụng 3 quân bài Hiệp Sĩ (+2), và trong tay có 2 quân bài 1 Điểm Chiến Thắng. Đến lượt của mình, mình chỉ cần xây thêm 1 nhà và đủ 10 điểm.
  6. Những chú ý khác
    • Tránh xây nhiều nhà trên cùng một ô.
    • Nếu có ý định xây đường dài nhất thì hãy chọn con đường mà khó bị người khác chặn

Tuesday, June 3, 2014

Delimiter Matching

Below is the C# program to check whether the delimiters are opened and closed correctly. The program only supports for 3 kinds of delimiters, including (), {}, and [].

A stack is used to store the opening delimiters including the line and the column whether the delimiter appears.

You can download the complete program at https://dl.dropboxusercontent.com/u/7046415/Blogger/CheckMatchingDelimeter.exe

amespace CheckMatchingDelimeter
{
    class Program
    {
        static private List openDelimeters = new List() { '(', '{', '[' };
        static private List closeDelimeters = new List() { ')', '}', ']' };

        struct DelimiterInfo
        {
            public char c;
            public int line;
            public int col;

            public DelimiterInfo(char c, int line, int col)
            {
                this.c = c;
                this.line = line;
                this.col = col;
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Run this execution file to check delimeter open/close matching of files in the same folder.");
            string directory = Directory.GetCurrentDirectory();

            string name = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;


            foreach (var file in Directory.GetFiles(directory))
            {
                if (Path.GetFileName(file) != name + ".exe")
                {
                    Console.WriteLine("Process " + Path.GetFileName(file));

                    string[] fileContent = File.ReadAllLines(file);
                    Stack delimeters = new Stack();
                    for (int i = 0; i < fileContent.Length; i++)
                    {
                        HandleLine(fileContent[i], i + 1, delimeters);
                    }

                    if (delimeters.Count > 0)
                    {
                        foreach (DelimiterInfo delimeter in delimeters)
                        {
                            Console.WriteLine("Line " + delimeter.line + ", Col " + delimeter.col + ": Lack of close");
                        }

                    }
                }
            }

            Console.WriteLine("Enter to exit!");
            Console.Read();
        }

        static void HandleLine(string line, int lineIndex, Stack delimeters)
        {
            for (int i = 0; i < line.Length; i++ )
            {
                char c = line[i];

                if (openDelimeters.Contains(c))
                {
                    delimeters.Push(new DelimiterInfo(c, lineIndex, i + 1));
                }
                else if (closeDelimeters.Contains(c))
                {
                    if (delimeters.Count == 0)
                    {
                        Console.WriteLine("Line " + lineIndex + ", Col " + (i+1) + ": No open before close");
                    }
                    else if (IsMatch(delimeters.Peek().c, c))
                    {
                        delimeters.Pop();
                    }
                    else
                    {
                        delimeters.Pop();
                        Console.WriteLine("Line " + lineIndex + ", Col " + (i + 1) + ": Mismatch");
                    }
                }
            }
  
        }

        private static bool IsMatch(char current, char next)
        {
            for(int i = 0; i < openDelimeters.Count; i++)
            {
                if(openDelimeters[i] == current && closeDelimeters[i]== next)
                {
                    return true;
                }
            }

            return false;
        }
    }
}

Monday, May 12, 2014

Nếu Bạn Đang Tìm Kiếm Mục Đích Sống Của Mình




“Realize what you really want. It stops you from chasing butterflies and puts you to work digging gold.” ~ William Moulton Marsden

Cố gắng để khám phá mục đích sống có thể sẽ rất khó khăn nếu bạn không biết bắt đầu từ đâu. Thực ra nó sẽ dễ dàng hơn khi bạn biết nhiều hơn về cuộc sống và về chính bạn. Vậy nếu bạn là người muốn bước ra tạo sự khác biệt bằng cách hiểu rõ mục đích sống của mình, trong bài viết này, bạn sẽ học cách khám phá ra mục đích sống bằng cách thực hiện theo các bước hành động. Hãy coi đây là một khóa học nhỏ bởi vì khi bạn đọc xong bài viết này, bạn sẽ thấy ra những điều về bản thân mà tưởng chừng như không quan trọng.

Làm những gì khiến bạn khác biệt
Những thứ làm bạn khác biệt chính là những thứ không dễ hoặc không thể đối với người khác. Bạn chơi game giỏi, đó là thế thế mạnh của bạn. Bạn chụp ảnh đẹp, đó cũng là thế mạnh của bạn. Bạn học toán giỏi, đó cũng là một thế mạnh nữa của bạn. Hãy tìm thế mạnh, niềm đam mê và giá trị của riêng bạn. Bạn có thể bắt đầu với những thứ bình thường và sau đó hãy thứ làm nó theo một cách mới của riêng bạn.

Làm những việc bạn thích thường xuyên hơn
Hãy để ý đến cảm xúc của bạn khi bạn đang làm một cái gì đó? Nó có thể là công việc của bạn, hay sở thích của bạn. Giữ một cuốn sổ tay hoặc sử dụng điện thoại để ghi lại cảm xúc của bạn khi làm một việc gì đó, bạn thích hay không thích. Sau đó hãy xác địch những việc mà bạn thích làm và làm những điều bạn thích thường xuyên hơn.

Khi bạn là một đứa trẻ, bạn đã mơ ước làm khi lớn lên?
Hãy nhớ lại xem hồi nhỏ bạn đã nói với mọi người bạn muốn trở thành ai, bác sĩ, kĩ sư, công an, người mẫu, hay ca sĩ. Bạn thich làm việc gì? Bạn thích đi đâu?

Câu hỏi là bạn thực sự thích làm cái gì?
Vâng tôi đang thực sự hỏi bạn, bạn thích làm cái gì? Bạn đã từng bao giờ tự hỏi mình như vậy chưa? Nếu chưa, hãy làm nó ngay bây giờ!

Cái gì đang làm bạn chần chừ?
Hãy tự hỏi mình cái gì làm bạn chần chừ, ngăn bạn tiến về phía trước. Bạn muốn có thân hình lực lưỡng, tại sao lại nghỉ tập Gym sau 1 tháng. Đối với câu hỏi này,  hãy viết trên một tờ giấy về mục tiêu chính của bạn. Sau đó kẻ ra hai cột. Một cột là danh sách các việc bạn sẽ làm để hoàn thành mục tiêu. Cột thứ hai là những thứ ngăn cản bạn đạt đến mục tiêu . Sau đó hãy ngẫm nghĩ lại nhứng thứ ngăn cản bạn, xem thực sự là bạn có thể vượt qua nó hay không? Hãy gạch bỏ nó nếu bạn cảm thấy chúng là chuyện nhỏ, mỗi lần như vậy hãy hét lên “Chuyện nhỏ”.

Thứ gì mang lại cho bạn giá trị, sự quan trọng, hài lòng nhất?
Với câu hỏi này tôi sẽ yêu cầu bạn nằm xuống hoặc ngồi một nơi nào đó bạn thấy thoải mái và hãy hình dung một vài viễn cảnh nào đó mà bạn cảm thấy bạn có giá trị, quan trọng hoặc hài lòng. Hy vọng điều này sẽ làm giúp bạn hình dung ra những gì bạn nên làm thường xuyên hơn.



Một điều tuyệt vời gì mà bạn mơ đến nếu bạn sẽ không thất bại?
Nếu bạn có ước mơ lớn, thì những điều gì làm cho bạn nghĩ rằng bạn không thể làm được. Cố gắng nhận ra được bản chất của nỗi sợ hãi và sau đó loại bỏ từng cái một.

Nếu bạn có rất nhiều tiền, bạn sẽ làm gì? 
Lập một danh sách những điều tuyệt vời bạn sẽ làm, nơi bạn sẽ đi đến, cách sống của bạn như thế nào?

Hành động 
Tạo một danh sách 10 mục tiêu mà bạn muốn đạt được trong ba năm tớ. Hãy chọn ra từ danh sách đó một mục tiêu mà có thể sẽ có tác động tích cực nhất đến cuộc sống của bạn. Sau đó tạo một danh sách những việc sẽ giúp bạn đạt đến mục tiêu đó. Xác định xem cách mà bạn ước lượng sự tiến bộ và thành công trong việc đạt được mục tiêu này. Ghi nó ra. Và thực hiện ngay ít nhất là một điều.

"The only thing that stands between a man and what he wants from life is often merely the will to try it and the faith to believe that it is possible.” ~ Richard M. DeVos

(theo lifehack.org) 

Monday, February 17, 2014

Ngày Tết Nói Chuyện Chơi Cua Bầu (Bầu Cua Cá Cọp)

Ngày tết, người dân ở các vùng quê thường chơi Cua Bầu. Hình thức chơi là dùng 3 con xúc xắc, mỗi mặt được vẽ 1 hình tượng để phân biệt bao gồm Nai, Bầu, Gà, Cá, Cua, Tôm. Người chơi sẽ đặt tiền vào con vật mà mình nghĩ sẽ xuất hiện. Sau khi nhà các lắc xúc xắc xong, nếu có bao nhiêu con vật xuất hiện đúng như con vật mà người chơi đã chọn, người chơi sẽ nhận số tiên gấp bây nhiêu lần số tiền ban đầu. Ví dụ nều đặt vào cửa con Nai 50,000, và kết quả là Nai, Nai, Cá. Người chơi sẽ nhận được 100,000. Vậy xác suất để người chơi ăn tiền là bao nhiêu? Chúng ta sẽ xét các trường hợp sau:
- Xác suất thua cược: Giả sử bạn chọn 1 con vật và đặt cược 1 số tiền là N vào đó. Vậy xác suất bạn thua cuộc là bao nhiêu? Vì có 3 con xúc xắc, nên số trường hợp có thể xảy ra là 6.6.6 = 216 trường hợp. Bạn sẽ thua cuộc nếu cả 3 con xúc xắc đều ra 1 trong 5 con vật còn lại mà bạn không chọn. Vậy có 5.5.5 = 125 trường hợp. Do đó xác suất bạn thua cược là 125/216 = 0.57 > 0.5. Như vậy bạn có khoảng 43% cơ hội để thắng. Vậy còn xác suất bạn thắng cuộc cho từng trường hợp cụ thể là bao nhiêu. Trước hết ta tính xác suất có 1 con vật như bạn đã chọn xuất hiện. Số trường hợp xảy ra là 3.5.5 = 75. Vậy tỉ lệ thắng N tiền sẽ là 75/216 = 0.33. Tương tự như vậy, xác suất để bạn thắng số tiền 2.N sẽ là 15/216 = 0.06. Xác suất để bạn thắng số tiền 3.N sẽ là 1/216 = 0.004. Cuối cùng thì giá trị kì vọng là -125/216 + 75/216 + 15/216 . 2 + 1/216 . 3 = -0.078 < 0. Nghĩa là trò chơi này không công bằng và trung bình ta mất khoảng 78 đồng cho mỗi 1000 đồng đặt cược.


Xác suất
Thua N
57.87%
Thắng N
34.72%
Thắng 2.N
6.94%
Thắng 3.N
0.46%

- Một số bạn chơi chiến thuật đặt vào 2 cửa, ví dụ số tiền N cho 1 con vật và N cho 1 con vật khác. Xác suất không có cửa nào thắng (thua toàn bộ số tiền) là 4.4.4/6.6.6 = 0.29. Xác suất chỉ trúng 1 cửa (hoà) là 96/216 = 0.44. Xác suất thắng số tiền N (1 con vật xuất hiện 2 lần, còn con kia không ra) là 24/216 = 0.11. Xác suất thắng số tiền 2.N là 26/216 = 0.12. Xác suất thắng số tiền 3.N là 6/216. Giá trị kì vọng là -64/216 . 2 + 96/216 . 0 + 24/216 . 1 + 26/216 . 2 + 6/216 . 3 = -0.157.

Xác suất
Thua 2.N
29.62%
Hòa
44.44%
Thắng N
11.11%
Thắng 2.N
12.03%
Thắng 3.N
2.77%

Monday, January 13, 2014

Tool list for MAC OS


  1. Google Chrome: browser
  2. Evernote: note taking
  3. Jing: screen capture
  4. Spotify: listen music online
  5. Dropbox: store your date on cloud
  6. Viber, Skype: free chat, message, call
  7. Adobe Reader: pdf reader
  8. Picasa: manage and edit your photos
  9. Go2shell: shortcut to open a terminal on the current folder
  10. TeamViewer: remote desktop
  11. MacTeX, TeXShop: TeX editor
  12. TunnelBear: VPN
  13. PDFwriter: Virtual PDF Printer, the output files are stored in /Users/Shared/PDFwriter
  14. VLC media player: flac player

Monday, January 6, 2014

MAC OS tips for Windows users


  1. Rename files: There is no context menu or F2 keystroke to rename files, folders. To rename them in MAC OS, you need to slowly click twice on the files' or folders' name. Then the name will be editable and you can enter a new name. (Note that this is "slowly click twice", not "double click")
  2. Lock Screen: At first glance, you don't see the "lock screen" option with the "shut down" option when you click the Apple symbol. To have a shortcut to quickly lock the screen, in the Launcher, run "Key chain access", in the Preference, General tab, check the selection "Show keychain status in menu bar". After you check this selection, there is a padlock icon in your menu bar. You will find the lock screen shortcut when you click on that padlock.
  3. Mouse scroll direction: The default mouse scroll direction in MAC OS is different from the one in Windows. If you want to set the scroll direction as Windows, go to System Preference, Mouse, and uncheck the selection "Scroll direction: natural".
  4. Click on Trackpad: At my first try, I don't know how to do a mouse click on the Trackpad. Actually you can do a mouse click on the Trackpad by pressing it. However the pressing requires some pressure. To make it easier, you can go to System Preference, Trackpad, Point and Click tab, and check the selection "tap to click". Then you can just tap on the Trackpad to make a mouse click.
  5. Display Desktop: As a habit in Windows OS, you often want to display the desktop. In MAC OS, you can press Fn-F11 to display the desktop. In addition, you can display the desktop by a mouse move. Go to System Preference, Desktop & Screen Save, Hot Corners, then in the new windows, you can set the action when you move the mouse to the corner of the screen.
  6. Change Fn Key Priority: Just go to System Preferences, Keyboard and check the selection "Use all F1, F2, etc. keys as standard function keys.
  7. Associate Program to run file: To change the default program to open a file, In Finder windows, click to select that file, then select File, Get Info. In the Info windows,  click the grey triangle to disclose the Open With panel. Then you can select the program you want to open this file. You may wan to click Change All to apply this setting to all the files are the same type as this file.
  8. Open photo without having to double-click every photo: Select a photo, press Space. Then use Up and Down arrow to move among photos.

Saturday, November 9, 2013

Detect Ipad Mini Available


Apple introduced new product several weeks ago. However so far Ipad Mini is still not available. Recently there is some news that Apple may not have enough Ipad Mini to sell. Therefore it is good to order the Ipad as soon as it is available.

Now if we visit the Ipad Mini homepage at http://www.apple.com/sg/ipad-mini/, there is a notice that "Coming later in November". Therefore I wrote a program to detect the Ipad Mini is on sale by detect that the notice no longer appears in the website. This approach may be not general, but at least it detects the change of the website. In this case, it is likely that the Ipad Mini is available. If it is available, then the program will print a notice on the screen and send an email to your preferred email address.

Then to make the program check frequently, you can create a Task in Windows and set it to run hourly or daily. I prefer hourly.

To use this program, you need to configure "fromaddr" (the email address to send), "toaddrs" (the email address to receive), and username and password are for the email address account to send.

Link to download the program

Monday, September 9, 2013

Can Not Install Applications in Windows 8

Today an student approached to me and asked about why he can not install an application on his computer. He told me that the computer says he has insufficient privilege, even though, he is using administrator account on this computer.

First I tried to right-click on this *.msi file to see its properties. I plan to select "Run this program as an administrator". Unfortunately this section is disabled.

After doing some Googles and trying suggestions, finally I found a suggestion which works. I'm not sure this is a good solution. Anyway it fixes the problem. Below is the solution.

  1. Type secpol.msc in the Start Menu and press Enter.
  2.  Double click on Local Policies then double click on Security Options.
  3. Scroll to the bottom to this entry -
  4. User Account Control: Run all administrators in Admin approval mode.
  5. Double click that line.
  6. Set it to disabled then press OK.
  7. Reboot.
Basically from Windows Vista, there is a so-called  User Account Control (UAC) which limits the softwares to be able to installed. By disable the "User Account Control: Run all administrators in Admin approval mode", all the policies from UAC are disabled and now you become a real administrator without any limitation. If you know what you are doing on your computer, I recommend you to disable this on your computer to have full control.


Friday, September 6, 2013

Read PDF file in Kindle with Larger Text Size

The Kindle satisfies me when I'm reading a PRC-format book. However when it comes to PDF, the screen is too small to display the page. Even I rotate the Kindle, the text is still small to me. I notice that the margins of the PDF book is often large. So I think that why we don't make use of these margins and increase the text size. Below is my solution

  1. You need to have a PDF virtual printer. You computer may  have "Adobe PDF" printer already. Otherwise I recommend PDFCreator.
  2. Open your PDF book, print it and select your PDF virtual printer. In my case, I select PDFCreator. Then in "Page Sizing and Handling", select the "Custom Scale" and select the maximum percentage where your book is still displayed completely. For my example, I can select up to 150%. In other words, I just increase the text font size 1.5 times. On the right of the dialog, you can scroll the horizontal bar to check whether the page is not over the border of the page.


You can apply this technique not only Kindle but any device where the screen is not large. Make sure that the margin of the book you are reading is large enough. Otherwise the scaling up is not sufficient for you.

Sunday, August 11, 2013

Optimize your program

I just find out a heuristic to optimize the program, in term of improving the performance. Your program often requires a check of condition A whether it is True or False. Normally this check is cost.
The rule to optimize this check is to try to find some invariant in your program.  There are some constraints in your program. Combine with these constraints with the invariant you found, we can find a simple, cheaper to check a condition A.

PS: I will try to find a simple example to illustrate this method.

Saturday, July 27, 2013

Hướng dẫn khi đi du lịch Singapore



  • Tiền: Bạn cần chuẩn bị khoảng $500, tiền Sing hay Mỹ đều được. Cho dù bạn có sử dụng thẻ credit card đi nữa, cũng cần chuẩn bị tiền mặt phòng nhân viên hải quan hỏi. Bạn có thể mang vé máy bay ra ngân hàng để mua đô.
  • Visa: Mặc định khi bạn sang Singapore, bạn sẽ được cấp visa 30 ngày. Bạn cần mua vé khứ hồi. Sing rất nhỏ, bạn nên đi khoảng 4-5 ngày là được. Lúc ngồi trên máy bay sang Sing, bán sẽ đươcj cấp 1 phiếu khai hải quan. Sau đó nhân viên hải quan sẽ thu 1 mảnh, bạn cần giữ mảnh còn lại cẩn thận. 
  • Đi lại: Ở Sing bạn sẽ đi bộ rất nhiều, cần mang đôi giày mà bạn thấy thoải mái nhất.  Lúc nào trong người cũng mang chai nước để uống vì đôi khi đi lại mất thời gian. Ngoài ra bạn cần mua 1 thẻ Ezlink để đi lại bằng bus, tàu điện (Mrt). Nếu có smartphone có GPS, bạn nên mua sim Singtel, co gói cước 3G, 1 tuần 1Gb trong 7 ngày giá $7. Google Map là app rất tốt để tìm đường đi. Nếu không gấp nên đi Bus hoặc Mrt cho tiết kiệm. Phương tiện công cộng của Sing rất tốt và đúng giờ. 
  • Ăn uống: Sing là một nước đa sắc tộc, đa tôn giáo, vì vậy thức ăn ở đây rất da dạng. Cố thử các món ăn của các nước khác như Indo, An Do... Một số món ăn nổi tiếng cần thử như: cơm gà, cháo ếch, chili crab. Trong lúc ở Sing, sau mỗi ngày bạn nên mua thức ăn, trái cây ở Fair Price. Trái cây đây khá rẻ, thậm chí còn rẻ hơn ở Việt Nam, mà lại an toàn như dâu, cherry, kiwi. Trong lúc đi chơi bạn có thể ghé các cửa hàng 7Eleven để mua nước và đồ ăn vặt lúc đói bụng. 
  • Mua sắm: Ở Sing, VivoCity và Bugis (gồm Bugis Junction và Bugis Street Market) mua sắm được. Orchard thì toàn hàng hiệu mắc tiền. Nếu muốn mua đồ điện tử, bạn nên né Sim Lim ra nhé, chổ này kiểu như chợ trời, bạn phải trả giá nếu không sẽ bị hớ. Lưu ý là với mỗi hóa đơn trên $100, bạn có thể claim thuế GST 7%. Hoặc bạn có thể gộp tối đa 3 hóa đơn của cùng 1 cửa hàng trong cùng 1 ngày mà trên $100. Nhớ xin cái form claim thuế GST tại cửa hàng bạn mua sắm.
  • Đi chơi: Đầu tiên phải kể đến khu CityHall với các địa điểm nổi tiếng như nhà hát Esplanade, Merlion Park với 2 con sư tử nhỏ hướng ra phía biển và Marina Bay với 3 toà tháp cao đồ sộ nối với nhau bởi 1 hồ bơi bên trên và Gardens by the Bay. Sentosa là một hòn đảo với nhiều hoạt động. Ở đây có tượng con sư tử rất lớn, bảo tàng sáp, casino, thuỷ cung và bãi biển Siloso. Ở đây, bạn nên thử xem nhạc nước (Song of the sea $12). Universal Studio thì có rất nhièu trò hấp dẫn nhưng giá vé khá mắc, khoảng $70 cho 1 cái one-day pass. Trong thành phố có Botanic Garden miễn phí, còn vườn Lan rất đẹp $5. Bạn nên đi vườn Lan để chụp hình. Clarke quay ngày xưa là một bến tàu. Ở đây giờ là khu ăn uống sầm uất. Bạn nên đi River Cruise $18, chạy ra Singapore River, sẽ được thấy nhà hát Esplanade, Marina Bay, Lion park. Cảnh tượng rất đẹp. Ngay Marina Bay có Garden by the Bay $28 với rất nhiều loài hoa và cây đẹp. Bên ngoài có Supertree Grove (miễn phí) thì rất đẹp. Bạn nên đến vào buổi tối trước 9h mới đẹp, đừng đến ban ngày. Với $5 thì có thể lên cao để ngắm thành phố. Sở thú $22 và vườn chim $20 thì thich hợp cho người yêu động vật. Và một số địa điểm khác như Orchard, Bugis, China Town.
  • Để chuyến đi được an toàn, bạn nên mua bảo hiểm du lịch. Theo mình biết bảo hiểm cho 1 tuần ở Sing khoảng 200.000-500.000 VND tùy theo gói bạn muốn mua. Mình thường mua của BIDV, giao dịch online, cực kì tiện lợi. 
  • Chú ý khác: Không mang thuốc lá sang Sing. Theo luật bạn chỉ được mang một gói đang hút và cấm ăn kẹo singum. Ở Sing rất an ninh, nên bạn không cần quá lo lắng chuyện mất cắp, xin đểu... Tuy nhiên nếu bạn có ghé Geylang ăn cháo ếch thì nên cẩn thận. Khu này không được an toàn lắm. 
  • Đặt khách sạn nên ở trung tâm thành phố cho tiện đi lại như Bugis, Little Indian. Nên chọn khách sạn gần MRT.


  • Chúc bạn có một chuyến đi vui vẻ, an toàn ở Singapore