Saturday, December 30, 2006

Recompiling my Linux

Somehow, my Xserver just hung everytime I browse some sites, especially the ones with script. That was one of the reasons I almost rebuilt all my Linux components from scratch. From kernel, XWindow, QT, KDE, DBUS, Apache and many others.

Compiling those libraries and applications are not always staright forward. Many of them are dependent each other (causing circular/loop dependencies). Others are out-of-date or too old hence would not compile with the latest GCC/kernel. I had to hand-fix them manually. You know it was not easy at all to fix these broken codes, but luckily I enjoyed it and learned a lot by doing it. Google is still my best tool to search missing components or how-tos.

Now, my machine had been running (almost) the latest libraries available at the time I wrote this blog. I also always enabled optimization with -mtune=pentium3 -msse. Also, if possible and available, I turned on POSIX threads as well. The kernel recognized my dual-processor chips as well, so I ran folding@home application and it showed (by 'top' tool) that the application uses one of the processor to do its very extensive biological chemistry computation.

I am still having problem making PHP run from Apache. Somehow it could not recognize/interpret PHP commands and just showed error. I will try again later if I have time. Oh, by the way, I could make the perl cgi work. It was just a configuration issue (fault from my side!).

I think I will take easy and relax now to concentrate more on my work, study and research (and perhaps pursuing my professional certifications). See you again in year 2007! (hopefully I still work on the same job).

Saturday, November 18, 2006

Blue-Ray and HD-ROM War?

The drum has been beaten. Blue-ray capable game console from Sony called PlayStation 3 has been released to US market Nov 16. The high performance game console is equipped with Blue-Ray developed by Sony alliance. Will the same story of Betamax v.s VHS format be repeated? I don't think so.

First, the physical dimension of both discs are about the same. Secondly, it is digital era, whilst in Betamax-VHS war, there was only analog. In digital, signals are easire to manipulate, so there is not much difference in the encoding. Besides, some companies even have developed with Blue-Ray and HD-ROM capable drives.

The market will decide which one will win. But, unlike in Betamax-VHS case, the loser will not really lose and vice versa.

Sunday, November 12, 2006

My New Linux Server

After awhile using my really-old PC (AMD K6-III) for running my personal web server, I finally replaced it with much better PC. I got this PC from trash bin/dumpster at my office (yep, it may sound crazy to some of you for a company to trash a still-good PC).

The PC is a Dell-branded "Dell Workstation 540T", a dual processor Pentium3 (Coppermine) workstation with 1 GB of RAM and a 32 GB SCSI HD. I scrapped and dismantled other PCs just to get other 2 SCSI HDs (about 15 GB each). I also moved ATPI HD (15 GB) and CD-RW (50x) from my old AMD-PC. So the total storage is 3 SCSI HDs (with total space about 80 GB space), 1 old DVD-ROM (it came with the Dell PC) and 1 CD-RW.

In the beginning of SUSE Linux installation (version 10.1), it ran in single-processor mode only. That was because the original SUSE from CD did not support SMP. After initial installation, I downloaded and compiled the latest stable Linux kernel ( and enabled SMP as well as many other optimizations. I rebooted it, recognized my second processor (the "top" tool showed "cpu0" and "cpu1", also the "pinguin" logo showed double telling me it was running dual processor).

The latest SUSE is really cool. A lot of improvements and fixes have been made and the GUI much stable. I also downloaded the NVIDIA driver and installed it (yes, the VGA card is NVIDIA Quadro5). Everything was running smoothly, except my apache server was somehow not able to read the folder (it showed "access denied"). After spending a few days to trace the root cause, I found out that the directory access was not granted to the folder. I then modified httpd.conf to allow apache to access the /srv/www/ folder.

I also recompiled many libraries (especially anything related to multimedia) with full optimizations. I rebuild XINE with DVDCSS enabled. Also installed MPG321, LAME, TWOLAME, etc.

After everything was done, I then configured GNUMP3D and ran it. It ran perfectly at port 8888, so now I can see all my MP3 file on the server. GNUMP3D is really cool, it displayed the files in a nice format (configurable) and when I click a file, my web browser spawn and play it automatically.

OK, enough for now. Will post it later.

Wednesday, November 8, 2006

Software Engineer's songs

My brother forwarded these songs to me. I've read them before somewhere, but still smiled when read it.

By : Beatles

All those backups seemed a waste of pay
Now my database has gone away
Oh I believe in yesterday... ..

There's not half the files there used to be
And there's a milestone hanging over me
The system crashed so suddenly
I pushed something wrong What it was I could not say Now all my data's gone and I long for yesterday-ay- ay-ay

The need for back-ups seemed so far away
I knew my data was all here to stay Now I believe in yesterday

by : John Lennon

Imagine there's no Windows
It's easy if you try
No fatal errors or new bugs
To kill your hard drives
Imagine Mr. Bill Gates
Leaving us in peace!

Imagine never ending hard disks
It isn't hard to do
Nothing to del or wipe off
And no floppy too
Imagine Mr. Bill Gates
Sharing all his money

You may say I'm a hacker
But I'm not the only one
I hope someday you'll join us
And your games will fit in RAM

Imagine 1-Giga RAM
I wonder if you can
No need for left-shifts or setups
And no booting again and again

Imagine all the systems
Working all life-time!

You may say I'm a hacker
But I'm not the only one

Maybe someday I'll be a cracker
And then I'll make Windows run.....

By : Beatles

When I find my code in tons of trouble
Friends and colleagues come to me
Speaking words of wisdom: Write in C

As the deadline fast approaches
And bugs are all that I can see
Somewhere, someone whispers: Write in C

Write in C, Write in C
Write in C, oh, Write in C

LOGO's dead and buried
Write in C

I used to write a lot of FORTRAN
For science it worked flawlessly
Try using it for graphics!
Write in C

If you've just spent nearly 30 hours
Debugging some assembly
Soon you will be glad to Write in C
Write in C, Write in C

Write in C, yeah, Write in C
BASIC's not the answer
Write in C

Write in C, Write in C
Write in C, oh, Write in C
Pascal won't quite cut it
Write in C

Saturday, October 28, 2006

The Future of Router

Nowadays, internet routers are much smarter than they were years ago. More and more features are added to this boxes in such that packets can be delivered faster and managing them easier. What do you think a router will be in next decade?

Currently, with Resilient Packet Ring, traffic can be rerouted to other paths in milliseconds response, close to SONET ADM. Processor used in the router box is also much better than we saw a few days ago. Probably they are already a dual-core RISC processor or something like that.

Friday, October 27, 2006

It is Ready to rock

The interface connectors on my embedded kit is now ready. I've wired them (darned, I had to hand-solder more than 30 tiny wires on a tiny board without zooming lense or microscope). I had tested the connectors, they were working OK.

First I tested the ADC connection with 10k potensiometer module. All ADCs (eight of them) could measure the analog inputs. The next one, I tested the output port, all the 8 LEDs worked. I've had a chance to test the last port (supposedly for GPIO), because it requires disabling interrupts on some of the lines and I still need to read the documentation.

I still have problem making the Real Time Clock (RTC) on board to work. I did not check the out signal coming of RTC data out, but I already verified the power connection were wired OK. There are 3 possibilites: my test program does not work, the I2C line is broken or the RTC chip is bad.

Will post again once everything works OK.

Wednesday, October 18, 2006

Digital Drug

A friend sent me about this about "Digital" drug:

As part of our dedication to being an open, transparent organization, here are the frequencies utilized in the production of the Digital Drug CD:

0.5 - 1.5 Hz - Endorphin release
0.9 Hz - Euphoric feeling
2.5 Hz - Production of endogenous opiates (pain killers, reduce anxiety)
4.0 Hz - Enkephalin release for reduced stress
10 Hz - Enhanced serotonin release. Mood elevation, arousal, stimulant
14 Hz - Awakeness, alert. Concentration on tasks
20.215 Hz - Brings about safe LSD-25 effects
30 Hz - Used for safe marijuana effects
33 Hz - Hypersensitivity, C. consciousness
38 Hz - Endorphin release
46.98 Hz - Visualization effects, when used with 62.64 & 70.47 Hz
Carriers: 90 - 110 Hz - Pleasure-producing beta-endorphin rise
111 Hz - Constant beta endorphin release

Sunday, October 15, 2006

CDMA (2)

Here is an improvement of the previous code. To simulate bit stream, I add a function to generate random number generator for each node.

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

#define N_NODES 4

typedef struct {
} ChipSeq;

void PrintChipSeq(ChipSeq *X);

int Add(ChipSeq *X, ChipSeq* Y, ChipSeq *R)
int i;
for (i=0; ichip[i] = X->chip[i] + Y->chip[i];
return 0;

int DotProduct(ChipSeq *X, ChipSeq *Y, ChipSeq *Res)
ChipSeq temp;
int i;

if (!X || !Y)
return -1;

for(i=0; ichip[i] = X->chip[i] * Y->chip[i];
return 0;

void InitChip(ChipSeq *A, int initVal)
int i;

for(i=0; ichip[i] = initVal;

int CheckOrthogonality(ChipSeq *X, ChipSeq *Y)
int i;
int sum = 0;

for (i=0; ichip[i] * Y->chip[i];

return IS_ORTHOGONAL; // it is orthogonal

int RecoverBit(ChipSeq *S, ChipSeq *SenderSeq)
int i;
int sum=0;

for(i=0; ichip[i] * SenderSeq->chip[i];

return (sum/NUMBER_OF_SEQUENCES <= 0 ? 0 : 1); } int Negative(ChipSeq *A, ChipSeq *Comp) { int i; for(i=0; ichip[i] = -(A->chip[i]);

void PrintChipSeq(ChipSeq *X)
int i;

printf("[ ");
for (i=0; ichip[i]);

void CopySeq(ChipSeq* src, ChipSeq* dest)
if (src && dest)
memcpy(dest, src, sizeof(ChipSeq));

void ConvertToBipolar(ChipSeq *A, ChipSeq *Bip)
int i;

for(i=0; ichip[i] == 1)
Bip->chip[i] = 1;
if (A->chip[i] == 0)
Bip->chip[i] = -1;

void Send(int n, int bit[], ChipSeq node[], ChipSeq *S)
ChipSeq bp[N_NODES], temp;
int i,j;

if (n>N_NODES) return;
for(i=0; i if (bit[i]==1)
CopySeq(&node[i], &bp[i]);
Negative(&node[i], &bp[i]);
memset(S, 0, sizeof(ChipSeq));
for(i=0; i Add(S, &bp[i], S);

int GenerateRandom(void)
return random() % 2;

int main(int argc, char *argv[])
int i,j;
ChipSeq node[4] = { {{0, 0, 0, 1, 1, 0, 1, 1}},
{{0, 0, 1, 0, 1, 1, 1, 0}},
{{0, 1, 0, 1, 1, 1, 0, 0}},
{{0, 1, 0, 0, 0, 0, 1, 0}}
ChipSeq temp, b[N_NODES], s;
int bit[N_NODES];
time_t t;

for(i=0; i printf("Node[%u] = ", i);
ConvertToBipolar(&node[i], &b[i]);
printf("Bipolar(node[%u]) = ", i);

for (i=0; i for(j=i+1; j if (CheckOrthogonality(&b[i], &b[j])==IS_ORTHOGONAL)
printf("Node[%u] & node[%u] is orthogonal\n", i, j);
else {
printf("Node[%u] & node[%u] is NOT orthogonal\n", i, j);

for (i=0; i<100; i++) {
bit[0] = GenerateRandom();
bit[1] = GenerateRandom();
bit[2] = GenerateRandom();
bit[3] = GenerateRandom();
printf("Send: A=%u B=%u C=%u D=%u\n", bit[0], bit[1], bit[2], bit[3]);
Send(N_NODES, bit, b, &s);
printf("S = !A + !B + !C + !D = ");

printf("Recover bit from A: S*A\n");
printf("Bit sent from A was: %d\n", RecoverBit(&s, &b[0]));

printf("Recover bit from B: S*B\n");
printf("Bit sent from B was: %d\n", RecoverBit(&s, &b[1]));

printf("Recover bit from C: S*C\n");
printf("Bit sent from C was: %d\n", RecoverBit(&s, &b[2]));

printf("Recover bit from D: S*D\n");
printf("Bit sent from D was: %d\n", RecoverBit(&s, &b[3]));


I developed this simulation just for fun and only in a few minutes:



typedef struct {
} ChipSeq;

int Add(ChipSeq *X, ChipSeq* Y, ChipSeq *R)
int i;

for (i=0; i
chip[i] = X->chip[i] + Y->chip[i];

return 0;

int DotProduct(ChipSeq *X, ChipSeq *Y, ChipSeq *Res)
ChipSeq temp;
int i;

if (!X || !Y)
return -1;

for(i=0; i
chip[i] = X->chip[i] * Y->chip[i];
return 0;

void InitChip(ChipSeq *A, int initVal)
int i;

for(i=0; i
chip[i] = initVal;

int CheckOrthogonality(ChipSeq *X, ChipSeq *Y)
int i;
int sum = 0;

for (i=0; i
chip[i] * Y->chip[i];

return IS_ORTHOGONAL; // it is orthogonal

int RecoverBit(ChipSeq *S, ChipSeq *SenderSeq)
int i;
int sum=0;

for(i=0; i
chip[i] * SenderSeq->chip[i];


int Negative(ChipSeq *A, ChipSeq *Comp)
int i;
for(i=0; i
chip[i] = -(A->chip[i]);

void PrintChipSeq(ChipSeq *X)
int i;

printf("[ ");
for (i=0; i

void CopySeq(ChipSeq* src, ChipSeq* dest)
memcpy(&dest, &src, sizeof(ChipSeq));

void ConvertToBipolar(ChipSeq *A, ChipSeq *Bip)
int i;

for(i=0; i
chip[i] == 1)
Bip->chip[i] = 1;
if (A->chip[i] == 0)
Bip->chip[i] = -1;

int main(int argc, char *argv[])
ChipSeq A = { {0, 0, 0, 1, 1, 0, 1, 1}};
ChipSeq B = { {0, 0, 1, 0, 1, 1, 1, 0}};
ChipSeq C = { {0, 1, 0, 1, 1, 1, 0, 0}};
ChipSeq D = { {0, 1, 0, 0, 0, 0, 1, 0}};
ChipSeq temp, ba, bb, bc, bd, ca, cb, cc, cd, sum;

printf("A = ");
ConvertToBipolar(&A, &ba);
printf("Bipolar(A) = ");

printf("B = ");
ConvertToBipolar(&B, &bb);

printf("C = ");
ConvertToBipolar(&C, &bc);

printf("D = ");
ConvertToBipolar(&C, &bd);

// A + B + C sends 0 bits
Negative(&ba, &ca);
printf("!A = "); PrintChipSeq(&ca); printf("\n");
Negative(&bb, &cb);
printf("!B = "); PrintChipSeq(&cb); printf("\n");
Negative(&bc, &cc);
printf("!C = "); PrintChipSeq(&cc); printf("\n");

// now add
Add(&ca, &cb, &temp);

Add(&temp, &cc, ∑);
printf("S = !A + !B + !C = ");

printf("Recover bit from A: S*A\n");
printf("Bit sent from A was: %d\n", RecoverBit(∑, &A));

printf("Recover bit from B: S*B\n");
printf("Bit sent from B was: %d\n", RecoverBit(∑, &B));

printf("Recover bit from C: S*C\n");
printf("Bit sent from C was: %d\n", RecoverBit(∑, &C));


Sunday, October 1, 2006

25 Ultimate PC Tools

System Cleaner: CCleaner at
Disk Space Analyzer: WinDirStat at
File Shredder at
Firewall: ZoneAlarm at
Anti-Spyware: A-Squared at
Anti Virus: AVG Free Edition at
Rootkit Scanner: Blacklight at
Anti-Malware: HijackThis at
System Profiler: Blearc Advisor at
Fan Controller: SpeedFan at
File Monitor: Unlocker at
USB Boot Management at
File Management: ExplorerXP at
File Encryption: TrueCrypt at
Notebook Power Management at
Windows Installer Manager: nLite at
System Recovery: BartPE at
Spam Filter: SpamPal
LCD Maintenance: UDPixel at
Clipboard Recorder:

Saturday, September 30, 2006

Who says Google is Everything?

I always use Google to search all topics that I get interested. But it is so dissapointing that Google cannot list my personal webpage which I run at home. I did register my page manually using Google webmaster tool. I then used Yahoo to search, and you know what? it could find it!

Thursday, September 28, 2006

Life is getting easier with these Protocols

In hardware, people used to use parallel bus to communicate to other peripherals or devices on the same board. This is costly and more difficult to debug. Now we have these I2C and 1-WIRE protocols. The I2C stands for Inter-IC protocol which requires only 2 lines to connect to other devices (and it is shared line). These two lines (SDA and SCLK) carry data and clock in serial form, similar to SPI. Unlike SPI which in many cases need SC (select chip) pin, the SDA line can be shared with more than one device, because it is half-duplex. The rate spans from 100 kHz to 400 kHz.

1-WIRE is another protocol invented by Dallas Semiconductor. It is slower than I2C, but requires only one line (besides ground) to communicate. The line even can carry power too.

Another protocol is the popular USB. The newer is USB 2.0. It is standardized by IEEE with name IEEE 1284 This bus can also carry power and the speed is much higher than the two above. The speed can go upto 480 MBps (raw bits). The speed of USB 1.0 is 12 Mbps. From programming perspective, it is more diffcult to program than the other two. The protocol is mostly used in the PC world (including Apple Mac OS and Linux).

Firewire is also a good protocol, but seems is now not as popular as USB. Actually, Firewire (known also as I.LINK or IEEE 1394) was the first protocol that passed 100 Mbps rate.

Going down to internal microprocessor, there is HyperTransport from AMD and FrontSide Bus (FSB) from Intel. These protocols mostly used to communicate among modules in the same chip.

There are many other protocols, but seem they are not as popular as the above.

Why Windows Sucks

I am no more fan of Windows (any windows) because of many reasons. The first reason is it is resource-hungry operating system. My office laptop (it is IBM Thinkpad T42p with 2 GB RAM, 80 GB HD) is not as fast as at the first time I got it from IT department. After I installed many softwares, it became slower. I did try to shutdown some uncessary services, but not much help. Blame the growing registry! Many applications still leave artifacts in the registry, although you have uninstalled. Unlike Windows, Linux is still based on old fashioned plaintext of configuration files (but works perfectly!).

Another reason is that there is many copies of DLL files in my computer (either at home or at work). There are some common DLL files located in different folder. There is no concept of creating symbolic link in Windows. If you move the duplicate DLL from one folder to another file, the application from the folder where the DLL missing may not be working. In Linux (or Unix in general), you could just create a symbolic link, then the application will just treat the symbolic file as it is a real file.

Another reason is, it is not designed for automation. It is not common for people to write a script to do automation. Although Win2000 and up have this what so called "command shell, manytimes the Windows command shell is useless).

But, I still cannot get rid of my Windows (sigh). Many applications on my computer are windows-only. From tax reporting tool, games, to development software are still under Windows. Besides, Linux is still immature in its GUI (it is far to be a desktop GUI). I admit, from GUI perspective, Windows is much faster than Linux. This is because Windows is developed with GUI in mind from ground up, while Linux is actually a text based OS with GUI running just as another application in user level environment.

Wednesday, September 27, 2006

Embedded System Kit

My new embedded development kit arrived 2 weeks ago. It is based on ColdFire V2 5213 microcontroller made by Freescale. The development kit is made by Netburner ( The reason I chose this uC was because it is 32-bit microcontroller and it was cheap ($99+tax+s/h) from NetBurner.

The package came with IDE software, debugger, loader, DB9 RS232 cable and adapter. The card is quite small compare to Rabbit RCM3000 I have been using. Amazingly, the core itself is made into 40 DIP so fits into regular 40 DIP. When we are ready for mass produce, just use the same module and insert it into the socket.

I was thinking to get the higher end (MOD52??) which has ethernet connection, but the price was too high for my pocket so I decided just go ahead with MOD5213. I was thinking that I may put an ethernet module (from somewhere) later once I get familiar with the system.

The software is based on GNU GCC, so it is free and opensource. The module even comes with RTOS. Loading the software is easy. Just run the software "serialload", select the proper COM port and baudrate, select the S19-format file to load, click OK and ..that's it. The software works on Win95 as well as Win2000 or WinXP. Because my other newer laptops don't have RS232 port, I use my old Toshiba laptop (it is really old, it's only Pentium 100 MHz with 16 MB RAM and 1.5 GB hard disk). The software works perfectly, well, except it it so slow. It took many seconds just to compile a few lines of code.

There are many examples that come in the CD, but only a few for MOD5123. The rest are for higher end MOD5xxx modules (the ones that have ethernet port). Many of these I-cannot-run softwares use TCP/IP for communication (e.g., making an embedded-system web server, SMTP client, TFTP etc.)

The uC itself is really cool. Features such as 12-bit 8 channel ADC, General Purpose I/O (GPIO), I2C connection, CAN connection, UART/QSPI, DMA, one 32-bit timer and three 16-bit timers are included in the chip.

A few days ago I ordered some components from They have some very good deal stuff, such as 100 resistors with various resistance for $2.95, 50 linear ICs for $4.95, 50 various transistors for $4.95, and 16x4 LCD for $12.9 and so on. I ordered many of these and perhaps in the next few weeks will come so I can start doing my projects. I've not decided what project I should do first, but very likely to connect the LCD display, connect some sensors to the ADC inputs and do some measurements.

I will post again once there is some progress.

Wednesday, September 13, 2006

74XX Logic IC

Different kind of 74 logic device Families:

TTL (74xx) True TTL
74L Low power
74S Schottky
74H High speed
74LS Low power - Schottky
74AS Advanced - Schottky
74ALS Advanced - Low power - Schottky
74F(AST) Fast - (Advanced - Schottky)
74C CMOS...................check Vcc levels
74HC (U) High speed - CMOS (Unbuffered output)
74HCT High speed - CMOS - TTL inputs
74AHC Advanced - High speed - CMOS
74AHCT Advanced - High speed - CMOS - TTL inputs
74FCT (-A) Fast - CMOS - TTL inputs (speed variations)
74FCT (-T, -AT) Fast - CMOS - TTL inputs (speed variations)
74AC Advanced - CMOS
74ACT Advanced - CMOS - TTL inputs
74FACT AC, ACT (Q) series
74ACQ Advanced - CMOS - Quiet outputs
74ACTQ Advanced - CMOS - TTL inputs - Quiet outputs

Bus Driver Families

74ABT Advanced - BiCMOS - Technology
74ABTE ABT - Enhanced Transceiver Logic
74ABTH Advanced - BiCMOS - Technology - bus Hold
74BCT BiCMOS - TTL inputs
74BTL Backplane - Transceiver - Logic
74GTL Gunning - Transceiver - Logic

Low Voltage Families

74ALB Advanced - Low Voltage - BiCMOS
74LV (U) Low - Voltage (Unbuffered output)
74LVC (R) (U) LV - CMOS (damping Resistor)(Unbuffered output)
74LVCH Low - Voltage - CMOS - bus Hold
74ALVC Advanced - Low - Voltage - CMOS
74LVT (R) (U) LV - TTL (damping Resistor(Unbuffered output)
74LVTZ Low - Voltage - TTL - High Impedance power-up
74ALVC (R) ALV - CMOS (bus Hold) (damping Resistor)
74ALVCH Advanced - Low - Voltage - CMOS - bus Hold
74LCX LV - CMOS (operates with 3v & 5v supplies)
74VCX LV - CMOS (operates with 1.8v & 3.6v supplies

4000 True CMOS (non-TTL levels)

ECL Device Families:

MEC I 8nS*
MEC III (16XX) 1nS* .......* = Rise & Fall Times
101xx 100 series 10K ECL, 3.5nS*
102xx 200 series 10K ECL, 2.5nS*
108xx 800 series 10K ECL, voltage compensated, 3.5nS*
10Hxxx 10K - High speed, voltage compensated, 1.8nS*
10Exxx 10K - ECLinPS, voltage compensated, 800pS*
100xxx 100K, temperature compensated
100Hxxx 100K - High speed, temperature compensated
100Exxx 100K - ECLinPS, temp, voltage comp., 800pS*

Friday, July 21, 2006

Some Info regarding PS, PCL etc.

PostScript is a programming language optimized for printing graphics and text.

Here is some links about printing, especially in Linux:

Host-based Printer

I had just got my new printer, HP LJ1020, 2 days ago and tested from my PC. My old printer (HP color DeskJet 930c had been dead for about 2 months now and I desperately needed to get a printer). My 5-year old 930c printer was actually good for casual uses, eventhough the printouts were not good enough against water (caused smearing). The reason I bought the new one was, after my wife's friend brought her two toddlers came over our house and messing around (nobody noticed that they also played around my printer, turned it on/off several times and only-God-knows-what-they-did stuff)

The only major con of this printer is that it uses PC (with Windows only) to render printing, and sends the raw data to the printer using HP proprietary protocol via USB cable.

After installing the driver, I noticed there were 2 virtual USB ports created. These two ports were proprietary ports and unconfigurable. Print server could not use the port. That's the reason why this printer is not for people who want to network their printer thru print server. Anyway, the print quality of this LP 1020 is really good and comparable to higher-end and more expensive ones.

I think the only way to make it networkable is making the USB-connected PC to share its port. But then, this PC has to be up and running Windows all the time to make the printer available.

For the same reason, printing process is very fast, because half part of the printing process is done on the PC (which in general nowadays is much faster than even RISC processors usually deployed on various laser printers). From a few tests, I could see the printer started to print a second after I press print.

This printer is in the family of "host-based printer". I found a definition of "Host-based printer" on the net: "A printer that relies on the computer's CPU to do the rasterization of the pages. Non-host-based printers accept a command language from the computer, such as PostScript and PCL, and perform the rasterization internally. GDI printers are an example of host-based printers, which rely on the CPU's processing power to do the work." I believe this printer uses Windows' GDI (Graphical Device Interface) commands to rasterize printing. Does anybody have come up with a brilliant idea on how to hack it and make it work on Linux machines? And, here is more definitive information about it:

Host-based printing is a cost-efficient printing technology that enables printers to utilize the processing power and memory resources of the PC (or the Host). In comparison, PDL-based (printer description language) printers use the processor and memory resources of the printer. Host-based printing allows HP to minimize the cost of the printer by significantly reducing the capabilities of the formatter of the printer and relying on the customer's computer processing power.
Host-based printing works by converting Windows GDI commands (graphics commands) generated by the application to the dot pattern to be created on the page. This dot pattern is then compressed and sent from the host PC to the printer, which stores the image of the page before printing. The data MUST be rasterized (converted into dots) when sent to the printer. This function is usually performed by the application itself. There are, however, some high-end graphics applications such as Quark™, Adobe PageMaker™, Adobe Indesign™, or Macromedia Freehand™ that do NOT rasterize data before sending to the printer.

Output from these applications to a host-based printer is typically very poor. When you print to a PS printer, PS commands are sent from your computer in the form of text commands. This text contains exact information about what is on the page. The text is received, understood and translated by a PS interpreter in your printer. Because of the simplicity of text commands and the consistency of PS interpreters, any PS printer will print the text information in the same way. Sending the same PS information to 560 different printers would yield the same results. PS is an invaluable graphics language because of its consistency and portability. Workarounds such as saving EPS files to different file formats such as JPEG’s or TIFF’s aren’t acceptable to users of high-end graphics applications who rely on PostScript specifically for the reasons above. In comparison, PDL-based printers require a more extensive formatter with higher RAM and ROM requirements, as well as a more powerful processor on board the printer.

Benefits of Host-Based Printing: A host-based printer utilizes the host computer’s processing power to convert the software application’s page information into a raster format to be printed by the printer. Since newer computers process at much faster speeds than most printer processors, complex jobs can often print faster when utilizing a host-based printer driver. Most host-based printers utilize USB ports which typically print much faster than parallel ports. Host-based printing requires a software print engine in the host operating system, and unlike a PDL (Printer Description Language) printer, cannot accept ASCII text direct from a computer. This means that the Host based printer will only work in the Windows and Macintosh environments that are specifically supported with the print engine written for that environment. Users of unsupported Windows and Macintosh environments, as well as users of Linux, Unix, OS/2 should consider a PDL printer like the HP Color LaserJet 2550 or CLJ3700.

Limitations of Host-Based Printing: Host-based printers are excellent small workgroup printers suitable for Windows and limited Mac printing to include internet and typical office printing but NOT EPS file printing. The drawback is that it is not possible to network such printers. A printer needs a steady flow of data, which is easily accomplished when it is connected directly to a PC, but cannot be guaranteed when the printer is connected via a LAN. Also, these technologies require intensive handshaking between the driver and the printer. However, the communication will time-out often enough over the LAN to make the solution impractical.

No wonder if you have a very fast PC (mine is not considered very fast anymore, eventhough it uses AMD 64-bit 2.4 GHz Athlon w/ 1 GB RAM and USB v2.0), it prints very fast. I haven't tried with USB1.0, but by just looking at the ratio of the rate between USB1.0 and USB2.0, we can tell roughly how it will behave. Sad to know there is no practical way to network the printer, except maybe by spending a couple of hundred $$ to buy a dedicated PC (with Windows) to be its "print server" (well, it is not going to be a real print server, it may only be "a shared port" PC.

Wednesday, June 7, 2006

Keeping your files secret

There are many ways to store our files safely and securely. One way is to just encrypt each file with a strong encryption method (e.g 256-bit AES). Another way is to create a virtual drive that encrypt the whole files in it. There are some softwares for the second method. One of them is PGP Desktop (non-free), and another one is TrueCrypt (GPL, downloadable from

Sunday, May 14, 2006

Some Superfast Inline functions

The following functions are snippets to calculate trigonometry functions Sine and Cosine using GCC 3.1 or newer. fSinCos calculates sine and cosine simultaneously using FP assembly fsincos.

double fSin(double angle)
double _res;
asm ("fld %[angle]\nfsin"
: [output] "=&t" (_res)
: [angle] "0" (angle));
return _res;

void fSinCos(double angle, double *rsin, double *rcos)
double _arg = angle;
double _rsin, _rcos;
asm ("fsinx %[angle],%[output]"
: [output] "=&t" (result)
: [angle] "f" (angle));
// asm volatile("fld %[angle]" : "=t" (_rsin): [angle] "0" (angle));
asm volatile ("fsincos" : "=%&t" (_rcos), "=%&u" (_rsin) : "0" (angle));
*rsin = _rsin;
*rcos = _rcos;

But somehow, the fSinCos function stalls for some numbers. Dunno what it happened. Will post it later once I find the solution.

Friday, May 12, 2006

Heaven for hobbiest

Recently, my order of some chips had arrived. One package was from Analog-Device Ltd., another one was from Maxim Electronics Ltd. These microchips (various chips, but majority are ADC/DAC) were sent by them for free (yes, it is totally free, including the shipping and handling) as samples.

I was so delighted and cannot wait more to try some projects using these chips. Oh, by the way, I also ordered some components from (this one is not free, of course, but yet they sell components with affordable prices). My first project is to build a parallel-port Oscilloscope.

Monday, April 17, 2006

Thursday, March 16, 2006

Information Flood!

Nowadays, everything (well, almost) is interconnected. From my smartphone, my PC (both at work and home), Alarm clock, media player, my bills, my banks, mortgages, my credit cards are connected to the Internet or sort of network.

For example, my alarm clock is able to sync its time to Time Server that is broadcasting time information from its location in Borders, Colorado. My Cingular 8125 smartphone is able to communicate to the Internet via bluetooth, Wi-Fi, EDGE/GPRS, or USB cable via my laptop PC. Most of my bills, whether it is for electricity and gas, landline phone and DSL, or water & sewage are accessible and payable through the Internet. My mortgages are also at least viewable through browser. My credit cards are all accessible and payable through webpage. My bank accounts as well, even they can transfer money to my other accounts or for paying bills.

Furthermore, I also activate alerts from Yahoo! (email alerts, etc.), CNN (hot news) and TWC for weather. Every morning and afternoon, I get text messages on my cellphone about those things I have set. I also subscribe to some e-magazines (they are all free of charge, though).

I can check my car history thru the Internet. I can check my credit history on the Net as well. When I need a direction, I either go the or to get street direction. I even install Microsoft Street software on my smartphone. If I need information about a traffic condition, I just go to or call 511 from my cellphone.

At work, almost everything is done via Intranet. From seeing my paycheck, requesting leave/time-off or sellng my stock options/shares from my company. All of them accessible via the Net.

Not being enough with this, on my personal email accounts, I also subscribe to many mailing list which flood my accounts everyday. Not to count my work email that I also subscribe to some discussion lists.

Off the hook of the Net, I subscribe to some paper magazines. Then also borrow books from local library, paper printouts from work etc. bla..bla.....aaaaah!

Help, I am overwhelmed with such super information everyday!

Monday, March 13, 2006

Just testing from my Cingular 8125.


Mobile Email from a Cingular Wireless Customer

How Islamic inventors changed the world

From coffee to cheques and the three-course meal, the Muslim world has given us many innovations that we take for granted in daily life. As a new exhibition opens, Paul Vallely nominates 20 of the most influential- and identifies the men of genius behind them
Published: 11 March 2006

  1. The story goes that an Arab named Khalid was tending his goats in the Kaffa region of southern Ethiopia, when he noticed his animals became livelier after eating a certain berry. He boiled the berries to make the first coffee. Certainly the first record of the drink is of beans exported from Ethiopia to Yemen where Sufis drank it to stay awake all night to pray on special occasions. By the late 15th century it had arrived in Mecca and Turkey from where it made its way to Venice in 1645. It was brought to England in 1650 by a Turk named Pasqua Rosee who opened the first coffee house in Lombard Street in the City of London. The Arabic qahwa became the Turkish kahve then the Italian caffé and then English coffee.
  2. The ancient Greeks thought our eyes emitted rays, like a laser, which enabled us to see. The first person to realise that light enters the eye, rather than leaving it, was the 10th-century Muslim mathematician, astronomer and physicist Ibn al-Haitham. He invented the first pin-hole camera after noticing the way light came through a hole in window shutters. The smaller the hole, the better the picture, he worked out, and set up the first Camera Obscura (from the Arab word qamara for a dark or private room). He is also credited with being the first man to shift physics from a philosophical activity to an experimental one.
  3. A form of chess was played in ancient India but the game was developed into the form we know it today in Persia. From there it spread westward to Europe - where it was introduced by the Moors in Spain in the 10th century - and eastward as far as Japan. The word rook comes from the Persian rukh, which means chariot.
  4. A thousand years before the Wright brothers a Muslim poet, astronomer, musician and engineer named Abbas ibn Firnas made several attempts to construct a flying machine. In 852 he jumped from the minaret of the Grand Mosque in Cordoba using a loose cloak stiffened with wooden struts. He hoped to glide like a bird. He didn't. But the cloak slowed his fall, creating what is thought to be the first parachute, and leaving him with only minor injuries. In 875, aged 70, having perfected a machine of silk and eagles' feathers he tried again, jumping from a mountain. He flew to a significant height and stayed aloft for ten minutes but crashed on landing - concluding, correctly, that it was because he had not given his device a tail so it would stall on landing. Baghdad international airport and a crater on the Moon are named after him.
  5. Washing and bathing are religious requirements for Muslims, which is perhaps why they perfected the recipe for soap which we still use today. The ancient Egyptians had soap of a kind, as did the Romans who used it more as a pomade. But it was the Arabs who combined vegetable oils with sodium hydroxide and aromatics such as thyme oil. One of the Crusaders' most striking characteristics, to Arab nostrils, was that they did not wash. Shampoo was introduced to England by a Muslim who opened Mahomed's Indian Vapour Baths on Brighton seafront in 1759 and was appointed Shampooing Surgeon to Kings George IV and William IV.
  6. Distillation, the means of separating liquids through differences in their boiling points, was invented around the year 800 by Islam's foremost scientist, Jabir ibn Hayyan, who transformed alchemy into chemistry, inventing many of the basic processes and apparatus still in use today - liquefaction, crystallisation, distillation, purification, oxidisation, evaporation and filtration. As well as discovering sulphuric and nitric acid, he invented the alembic still, giving the world intense rosewater and other perfumes and alcoholic spirits (although drinking them is haram, or forbidden, in Islam). Ibn Hayyan emphasised systematic experimentation and was the founder of modern chemistry.
  7. The crank-shaft is a device which translates rotary into linear motion and is central to much of the machinery in the modern world, not least the internal combustion engine. One of the most important mechanical inventions in the history of humankind, it was created by an ingenious Muslim engineer called al-Jazari to raise water for irrigation. His 1206 Book of Knowledge of Ingenious Mechanical Devices shows he also invented or refined the use of valves and pistons, devised some of the first mechanical clocks driven by water and weights, and was the father of robotics. Among his 50 other inventions was the combination lock.
  8. Quilting is a method of sewing or tying two layers of cloth with a layer of insulating material in between. It is not clear whether it was invented in the Muslim world or whether it was imported there from India or China. But it certainly came to the West via the Crusaders. They saw it used by Saracen warriors, who wore straw-filled quilted canvas shirts instead of armour. As well as a form of protection, it proved an effective guard against the chafing of the Crusaders' metal armour and was an effective form of insulation - so much so that it became a cottage industry back home in colder climates such as Britain and Holland.
  9. The pointed arch so characteristic of Europe's Gothic cathedrals was an invention borrowed from Islamic architecture. It was much stronger than the rounded arch used by the Romans and Normans, thus allowing the building of bigger, higher, more complex and grander buildings. Other borrowings from Muslim genius included ribbed vaulting, rose windows and dome-building techniques. Europe's castles were also adapted to copy the Islamic world's - with arrow slits, battlements, a barbican and parapets. Square towers and keeps gave way to more easily defended round ones. Henry V's castle architect was a Muslim.
  10. Many modern surgical instruments are of exactly the same design as those devised in the 10th century by a Muslim surgeon called al-Zahrawi. His scalpels, bone saws, forceps, fine scissors for eye surgery and many of the 200 instruments he devised are recognisable to a modern surgeon. It was he who discovered that catgut used for internal stitches dissolves away naturally (a discovery he made when his monkey ate his lute strings) and that it can be also used to make medicine capsules. In the 13th century, another Muslim medic named Ibn Nafis described the circulation of the blood, 300 years before William Harvey discovered it. Muslims doctors also invented anaesthetics of opium and alcohol mixes and developed hollow needles to suck cataracts from eyes in a technique still used today.
  11. The windmill was invented in 634 for a Persian caliph and was used to grind corn and draw up water for irrigation. In the vast deserts of Arabia, when the seasonal streams ran dry, the only source of power was the wind which blew steadily from one direction for months. Mills had six or 12 sails covered in fabric or palm leaves. It was 500 years before the first windmill was seen in Europe.
  12. The technique of inoculation was not invented by Jenner and Pasteur but was devised in the Muslim world and brought to Europe from Turkey by the wife of the English ambassador to Istanbul in 1724. Children in Turkey were vaccinated with cowpox to fight the deadly smallpox at least 50 years before the West discovered it.
  13. The fountain pen was invented for the Sultan of Egypt in 953 after he demanded a pen which would not stain his hands or clothes. It held ink in a reservoir and, as with modern pens, fed ink to the nib by a combination of gravity and capillary action.
  14. The system of numbering in use all round the world is probably Indian in origin but the style of the numerals is Arabic and first appears in print in the work of the Muslim mathematicians al-Khwarizmi and al-Kindi around 825. Algebra was named after al-Khwarizmi's book, Al-Jabr wa-al-Muqabilah, much of whose contents are still in use. The work of Muslim maths scholars was imported into Europe 300 years later by the Italian mathematician Fibonacci. Algorithms and much of the theory of trigonometry came from the Muslim world. And Al-Kindi's discovery of frequency analysis rendered all the codes of the ancient world soluble and created the basis of modern cryptology.
  15. Ali ibn Nafi, known by his nickname of Ziryab (Blackbird) came from Iraq to Cordoba in the 9th century and brought with him the concept of the three-course meal - soup, followed by fish or meat, then fruit and nuts. He also introduced crystal glasses (which had been invented after experiments with rock crystal by Abbas ibn Firnas - see No 4).
  16. Carpets were regarded as part of Paradise by medieval Muslims, thanks to their advanced weaving techniques, new tinctures from Islamic chemistry and highly developed sense of pattern and arabesque which were the basis of Islam's non-representational art. In contrast, Europe's floors were distinctly earthly, not to say earthy, until Arabian and Persian carpets were introduced. In England, as Erasmus recorded, floors were "covered in rushes, occasionally renewed, but so imperfectly that the bottom layer is left undisturbed, sometimes for 20 years, harbouring expectoration, vomiting, the leakage of dogs and men, ale droppings, scraps of fish, and other abominations not fit to be mentioned". Carpets, unsurprisingly, caught on quickly.
  17. The modern cheque comes from the Arabic saqq, a written vow to pay for goods when they were delivered, to avoid money having to be transported across dangerous terrain. In the 9th century, a Muslim businessman could cash a cheque in China drawn on his bank in Baghdad.
  18. By the 9th century, many Muslim scholars took it for granted that the Earth was a sphere. The proof, said astronomer Ibn Hazm, "is that the Sun is always vertical to a particular spot on Earth". It was 500 years before that realisation dawned on Galileo. The calculations of Muslim astronomers were so accurate that in the 9th century they reckoned the Earth's circumference to be 40,253.4km - less than 200km out. The scholar al-Idrisi took a globe depicting the world to the court of King Roger of Sicily in 1139.
  19. Though the Chinese invented saltpetre gunpowder, and used it in their fireworks, it was the Arabs who worked out that it could be purified using potassium nitrate for military use. Muslim incendiary devices terrified the Crusaders. By the 15th century they had invented both a rocket, which they called a "self-moving and combusting egg", and a torpedo - a self-propelled pear-shaped bomb with a spear at the front which impaled itself in enemy ships and then blew up.
  20. Medieval Europe had kitchen and herb gardens, but it was the Arabs who developed the idea of the garden as a place of beauty and meditation. The first royal pleasure gardens in Europe were opened in 11th-century Muslim Spain. Flowers which originated in Muslim gardens include the carnation and the tulip.

Ref: "1001 Inventions: Discover the Muslim Heritage in Our World" is a new exhibition which began a nationwide tour this week. It is currently at the Science Museum in Manchester. For more information, go to

Sunday, March 5, 2006

Cingular 8125

As I posted before about upgrading my phone, here I want to review about my new smartphone, Cingular 8125.

For Cingular 8125, I found out that it is based on OEM from HTC. Some specifications I can tell about this phone is below:

  • Windows Mobile 5.0 Smartphone Edition
  • 128MB SDRAM / 64MB ROM
  • TI OMAP 195 MHz Processor (don't know why it is 195, not 200 MHz)
  • Integrated, sliding QWERTY keyboard
  • 2.8" QVGA 320x240 64K Color LCD Touch Screen
  • Integrated Bluetooth Class II
  • Integrated Infrared
  • Integrated 802.11b/g support (by default it is b, needs a hack to make it work for G)
  • Integrated Mini-SD slot for greater storage and expansion
  • 1.3 MPixels camera
  • Comes standard with Mobile Word, PowerPoint and Excel
  • Comes with Microsoft Media Player (it is able to play MP3, WMA, etc.)
  • The handwriting recognition is quite good

Included Accessories
  • Lithium ion battery
  • Compact wall charger
  • Stereo earbud headset
  • USB data cable
  • Leather pouch
I also download another media player (pocketmusic from It is able to play unlocked AAC (format used by iPod/iTunes) as well others (MP3, OGG, etc.)

The thing I don't like from the phone is that the processor is too slow, especially if you are running some other applications in the background. I have to kill other applications frequently to make it more responsive. Besides, I cannot put Skype on this one, as Skype requires minimum cpu clock to be 300 MHz. But for the rest, the phone is really cool!

Browsing the internet is really good, because it is MSIE (compatible to most sites on the internet). Synchronization with my PC is (almost) seamless. I hook up the USB cable, and voila, the background ActiveSync on my PC recognizes it and start synchronizing with it. It sync with Exchange server at work as well. So, all schedules, emails, notes and tasks are sync. We can also configure the period of sync, e.g, immediately, every 15 minutes and so on. We can also configure the email sync as well (e.g, today's emails etc.)

If we search on Google, there will be a lot of information about this cool phone. I have been lucky to get this phone relatively cheap (I paid only $225+tax, no S/H and activation fee was waived. The list price is actually $449 if bough without service plan).

Now, I am curious how to develop a program for this little-but-good gadget. I have downloaded MS Visual C++ for Embedded System (trial version?) as well as its SDK from MSDN. I am really eager to develop a small software for this one. Perhaps even make some money... :-)

Unlock Nokia Phones from Cingular

Recently I upgraded my 2 phones. My original service provider was AT&T Wireless, but as it has been acquired by Cingular, and also because my 2-year contract was over, I choosed to upgrade my phones. I upgraded my phones thru my employer so I got a really good deal (my company has agreement with Cingular, so Cingular gives special discount to corporate users) from Cingular. I selected 550 min rollover shareable minutes with FamilyTalk for the two lines. For the phones, I selected Cingular 8125 SmartPhone (Windows Mobile 5.0 -based) and Nokia 6102 (camera is built-in).

After activation, my old phones were not working anymore, even if I swapped the old SIM card with the new one. But, thanks to, I was able to unlock both phones and now they are working fine with new Cingular SIM cards (and, hopefully, with any SIM cards around the world). I am still having diffifculty to unlock my Cingular 8125, though. Eventhough I found a website that gives unlock service (, but it is ridiculously expensive ($38), and I don't trust the site yet. Anybody can point me to a free unlock tool as

Wednesday, February 22, 2006

Backup/Restore on Linux

This is the commands to backup the whole disk and to restore it back.

dd if=/dev/hda1 bs=1k conv=sync,noerror gzip -c ssh -c blowfish user@hostname "dd of=filename.gz bs=1k"

dd if=filename.gz ssh -c blowfish root@deadhost "gunzip -c dd of=/dev/hda1 bs=1k"

The backup command is done from machine where the backup file is located, not from the target machine we want to restore to.

For more detail, see the following:

Wednesday, January 18, 2006

Intel-based Mac

Now that Apple computers have started using Intel chips, is it time for business to replace their Windows PCs with MACs? May be not, at least for short term.

One of the reasons Steve jobs has decided to go with Intel is the more limited supply of PowerPC than Intel's Pentium processors, as well as temperature issue on PowerPC. Currently, x86 processor families have very good performance, comparable to high performance RISC processors, although these x86 CPUs are still considered CISC.

For Apple users, the migration news is all good: The new computers using Intel's Core Duo dual-core chips offer two to five times the performance of previous Apple computers and Apple is selling their PCs for the same price as its older, slower computers (based on G4/G5).

I have compared performance between the PowerPC-based MAC and Pentium-4 based PC in term of performance and quality of graphic, Apple is still the winner. The performance is somehow is higher on Apple, I think this is something to do with the Unix-based O/S (Mac X) instead of patch-and-stitch Windows. The Mac X was designed from ground-up with ease-to-use and performance in mind, while Windows XP is more or less inherits the nightmare of Windows 95 and NT. Not to mention that Mac X is also more secure.

Another beauty of Mac is its consistency. All the shortcuts are consistent and work the same throughout all applications, while on Windows this is not the case. Linux, in this case, is the worst. Commands on vi, for instance, mostly are different than emacs, etc. Another beauty of Mac is truely PnP feature. With Windows, we still have to spend some time to click here-there to make a device work. Forget that in Apple World!

Now, more and more commodity products are being used by Mac. From standard USB, graphic card, hard drive and now the CPU itself. I expect price on Mac will go down a bit because of this (unless Mr. Jobs wants to be mega billionaere).

I think, soon people will develop some kind of emulator to run Windows-based applications (sort of WINE in Linux), and guess what? more customers change their religion to MAC.

Sunday, January 15, 2006

Connecting WRT54G router to another Router Wirelessly

As I posted before, I was unable to make my Linksys WRT54G router to connect to another wifi router (NETGEAR WG11) wirelessly, eventhough I downloaded a firmware that was supposed to support WDS. Yesterday, I tried again after reading an article at AnandTech: HOWTO: Use Linksys WRT54G as a Wireless Ethernet Bridge.

I downloaded all of the firmwares on, but only one firmware I tried, as the documentation told me to try the generic version first. After resetting my router, I saw the web menus of the router changed totally. There are more options/features available, but I was just concentrating on how to make my Linksys router could communicate and act as a bridge to my NETGEAR router as the Internet Gateway router.

I disabled all security settings, make ESSID and channels on both routers the same and then add MAC address of Linksys router in the NETGEAR's Allowed Address List. After that, I selected AP on Linksys. I checked the status, but still Linksys showed the signal is 0 dBm. After disabled security, surprisingly, after I check network status on the Linksys, it showed there was some signal. Cool, I said. But, still it did not get any IP address from NETGEAR.

I then bravely select "client-bridged", and it worked now! But I still don't know how to connect to my Linksys router, because it is now acting as a bridge and there is no IP assigned it. It is acting as a transparent bridge (connecting to NETGEAR wirelessly), and my other PC connected to the Linksys got assigned IP address from the NETGEAR.

Anyway, I am now happy because I can now used it to bridge other PCs which do not have wireless cards and the location inhibit them to connect to the Internet router by wire. I still don't know whether this wireless bridge really works as a bridge (able to connect more than one wired PCs to other PCs connected to another router) or just acts as a 'extender'. Will post again later after I've found out.

Monday, January 9, 2006

Game Emulator

A number of open-source developers has established a project called "Multiple Emulator Super System" (MESS) to develop an emulator to make Linux PC able to play old games. Sounds cool, heh?

The Official MESS Home Page

Here are some screenshots of the page. Look at those games, man...they are really old (some of them are like pre-historic games :-)