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.