- Subscribe to Skype, set automatic withdrawal from your credit card
- Activate Skype To-Go service and select a local number from its list (US)
- Goto www.att.com/wireless and activate "A-List" feature/service (which is free). Please remember that this service is only available if you have family plan and/or $60/month or more in monthly bill.
- Add the Skype To-Go number in A-List
- Now you're ready to make an international calls for a very cheap from your cellphone. Just call the Skype To-Go number and follow voice instruction to dial in an international numbers. You will only pay Skype calls (which is damned cheap, for example to call to Jakarta it's only 4c/minute). That's it!
Thursday, July 15, 2010
Trick to get (almost) free International call on AT&T cellphones
Thursday, June 10, 2010
CLIE UDEV RULES to support pilot device in Linux
Content of my udev rules to have /dev/pilot whenever my Sony CLIE NX70 PDE is syncing:
my-desktop:/dev/.udev/rules.d$ cat 10-local.rules
SUBSYSTEMS=="usb", ATTRS{product}=="Palm Handheld", KERNEL=="ttyUSB*", SYMLINK+="pilot"
BUS=="usb", SYSFS{product}=="Palm Handheld*", KERNEL=="ttyUSB[13579]", SYMLINK+="pilot"
On my Ubuntu 10.04 Karmic, actually there's a rule definition already written, but it is missing SYMLINK. Below is my modified rule file.
vi /lib/udev/rules.d/40-libpisock9.rules reveals:
# $Id: 60-libpisock.rules,v 1.4 2007/02/16 18:26:41 desrod Exp $
#
# udev rules file for pilot-link's libpisock library, enabled for libusb
#
SUBSYSTEMS!="usb", ACTION!="add", GOTO="libpisock_rules_end"
# Sony handheld devices
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0038", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0066", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0095", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="009a", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00da", GROUP="dialout", MODE="0664",SYMLINK+="pilot"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00e9", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0144", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0169", GROUP="dialout", MODE="0664"
my-desktop:/dev/.udev/rules.d$ cat 10-local.rules
SUBSYSTEMS=="usb", ATTRS{product}=="Palm Handheld", KERNEL=="ttyUSB*", SYMLINK+="pilot"
BUS=="usb", SYSFS{product}=="Palm Handheld*", KERNEL=="ttyUSB[13579]", SYMLINK+="pilot"
On my Ubuntu 10.04 Karmic, actually there's a rule definition already written, but it is missing SYMLINK. Below is my modified rule file.
vi /lib/udev/rules.d/40-libpisock9.rules reveals:
# $Id: 60-libpisock.rules,v 1.4 2007/02/16 18:26:41 desrod Exp $
#
# udev rules file for pilot-link's libpisock library, enabled for libusb
#
SUBSYSTEMS!="usb", ACTION!="add", GOTO="libpisock_rules_end"
# Sony handheld devices
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0038", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0066", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0095", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="009a", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00da", GROUP="dialout", MODE="0664",SYMLINK+="pilot"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00e9", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0144", GROUP="dialout", MODE="0664"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0169", GROUP="dialout", MODE="0664"
....
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}
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);
}
#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.
Tuesday, March 30, 2010
EE Times, March 2010
EE Times Magazine, March 2010: Robotics Special Edition:
http://www.nxtbook.com/nxtbooks/cmp/eetimes_robotics_20100329/index.php#/1/OnePage
http://www.nxtbook.com/nxtbooks/cmp/eetimes_robotics_20100329/index.php#/1/OnePage
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
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.
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.
Subscribe to:
Posts (Atom)