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