Saturday, May 22, 2010

Small script to build Linux Kernel

Make sure we have busybox, otherwise install it:


sudo apt-get install busybox


And then save the following lines to o file and execute it:


VERSION=2.6.34-p4
make
make modules && sudo make modules_install
sudo make install
sudo mkinitramfs -o /boot/initrd.img-${VERSION} ${VERSION}

Thursday, May 6, 2010

How to calculate tax

The following code is to calculate tax amount we will pay for tax year 2010.





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


typedef struct {
double min;
double max;
double taxPct;
} Bracket_t;


typedef enum {
single,
married_jointly,
married_separately,
head_of_household
} FilingStatus_t;




// married filing separately
Bracket_t BracketTable2008[] = {
{0.0, 8025.0, .10},
{8025.0,32550.0, .15},
{32550.0,65725.0, .25},
{65725.0,100150.0, .28},
{100150.0,178850.0, .33},
{178850.0,-1.0, .35},
{-1.0,-1.0,0.0}
};




Bracket_t BracketTable2010[] = {
{0.0, 16750.0, .10},
{16750.0,68000.0, .15},
{68000.0,137300.0, .25},
{137300.0,209250.0, .28},
{209250.0,373650.0, .33},
{373650.0,-1.0, .35},
{-1.0,-1.0,0.0}
};


double TaxCalc(double agi, Bracket_t *brYear)
{
int i;
double totalTax, tax, income;




if (!brYear)
return -0.0;
i = 0;
tax = 0.0;
totalTax = 0.0;
income = agi;
printf("agi = %9.2lf\n", income);
while (brYear[i].min > -1.0) {
if ((brYear[i].max > -1.0) && (income > brYear[i].max)) 
{
tax = (brYear[i].max - brYear[i].min) * brYear[i].taxPct;
}
else
{
tax = (income - brYear[i].min) * brYear[i].taxPct;
totalTax += tax;
printf("end of tax; bracket=%4.2lf, tax = %9.2lf\n", brYear[i].taxPct, tax);
break;
}
totalTax += tax;
printf("%d) tax = %9.2lf (%4.2lf), taxable income = %9.2lf\n", i, tax, brYear[i].taxPct, income);
i++;
}
printf("%d) taxable income = %9.2lf => tax = %9.2lf\n", i, income, totalTax);
return totalTax;




}




int main(const int argc, const char *argv[])
{
double agi, tax;
Bracket_t *tbl;


if (argc > 1)
{
printf("You entered %s\n", argv[1]);
agi = strtod(argv[1], NULL);
tbl = BracketTable2010;
}
else {
                // demo only for tax year 2008
tbl = BracketTable2008;
agi = 1e5;
}
tax = TaxCalc(agi, tbl);


printf("Final tax amount = %9.2lf (%4.2lf%%)\n", tax, tax/agi * 100.0);
}

Example:
$ ./tax 100000
You entered 100000
agi = 100000.00
0) tax =   1675.00 (0.10), taxable income = 100000.00
1) tax =   7687.50 (0.15), taxable income = 100000.00
end of tax; bracket=0.25, tax =   8000.00
2) taxable income = 100000.00 => tax =  17362.50
Final tax amount =  17362.50 (17.36%)

The income we enter is the AGI (Adjusted Gross Income), which is our total gross income minus all the deductions.

Sunday, March 28, 2010

To add a new user into Samba server

Have you ever had problem accessing a remote Linux machine from your windows, but Windows (XP/etc.) keeps asking for password (in other word, our account is always denied)? If you have, most likely is that our Linux server doesn't have the credentials to allow such username.  This occurs if we don't use PDC.

When you check the log (/var/log/samba/log.*), you would find something like this:


[2010/03/28 23:26:35,  1] smbd/service.c:676(make_connection_snum)
  create_connection_server_info failed: NT_STATUS_ACCESS_DENIED


The following simple command will create a new user in Samba server (e.g, "newuser" should match with the user in the Linux machine managed by PAM module).


mnt$ sudo smbpasswd -a -U newuser
New SMB password:
Retype new SMB password:
Added user newuser.

Now, from Windows explorer, we can just type "\\linuxserver\newuser".  It will then ask for password.  Use the password we entered above.

Tuesday, February 9, 2010

2010 Technologies for PC

Year 2010 or early 2011 will be interesting for PC buyers who are thinking to buy a new computer.  First of all, The USB 3.0 (SuperSpeed USB) will be available on many PC motherboards late this year.  Another thing is a series of new microprocessors from Intel which intergrate GPU in their dice.