12/24/08

on GFW of China

GFW=great fire wall.
On my vacation to China this last summer I tried to access this blog from different locations in China: Xi'an, Beijing, Dalian, Shanghai. Never once did I succeed.

I can read Wikipedia, but I heard from other people it's hit & miss. I had no problem with porn sites though.
I always thought this censoring by Chinese government is really stupid. Today I read a excellent column on NY Times by World-is-flat author Tom Friedman, towards the end of the article, it struck a chord with me:
America still has the right stuff to thrive. We still have the most creative, diverse, innovative culture and open society — in a world where the ability to imagine and generate new ideas with speed and to implement them through global collaboration is the most important competitive advantage. China may have great airports, but last week it went back to censoring The New York Times and other Western news sites. Censorship restricts your people’s imaginations. That’s really, really dumb. And that’s why for all our missteps, the 21st century is still up for grabs.

For the benefit of the China and Chinese people's future, Mr. Hu, Tear down this great fire-wall. (tear down this wall). 胡哥, 这墙拆了得了.

12/21/08

Emacs utf8 and Chinese on Windows

Download EmacsW32 latest binary (emacs 23 + emacsw32). Then add following to your .emacs
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

All your problems of viewing/editing Chinese on Windows Emacs will go away.

12/19/08

Adding Emacs to right click context menu

To add Emacs (or any program) to right click context menu for any type of files, open regedit, add a key under HKCR/*/shell, name it whatever you want, I name it "run emacs".

Then under it, create a new key called "command", change it data to your path to emacs, plus a "%1" at the end.


If you want to add Emacs to just a specific type of file, for example, ".org" file for Orgmode, it's a little more work.
Create a new key ".org" under HKCR, give it data value "Orgmode.File". Then create a new key "Orgmode.File" under HKCR. Under it, create key "Shell", under which create key "Emacs", under which create key "command", change its data to emacs path plus "%1".


If you want to add Emacs to directory context menu, create the same keys under HKCR/Folder.

Of course, all these apply to any programs, not just emacs.

11/26/08

how to make fedora 10 image from old version

Fedora 10 just came out. If you have an old redhat OS (fedora or CentOS) and you want a new fedora 10 image, to be used as a Xen domainU or a customized Amazon EC2 AMI or whatever, here's how to do it:

Step 1: Create a 2Gig sparse file or lvm and mount it to /mnt.
examples:
for sparse file:
# dd if=/dev/zero of=f10.img bs=1024k count=1 seek=2000
# mkfs.ext3 f10.img
# mount -o loop f10.img /mnt
for lvm:
# lvcreate -L2G -n f10 vg0 (assume you have a volume group called vg0)
# mkfs.xfs /dev/vg0/f10
# mount /dev/vg0/f10 /mnt

Step 2: edit /etc/yum.repo.d/fedora.repo
go to /etc/yum.repo.d, create a new directory, then move everything to the new directory. (you will move them back up to /etc/yum.repo.d after creating fedora 10). Create a new file call fedora.repo with content:
-----------------
[fedora]
name=Fedora 10 - i386
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/10/Everything/i386/os/
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-10&arch=i386
enabled=1
gpgcheck=0

-----------------

Step 3: do a "yum groupinstall"
#yum clean all
#yum makecache
# yum --installroot=/mnt -y groupinstall Base
Go have a cup of tea, or read some blogs, or downmod some reddits.
After the installation is complete, to make it actually useable, you need to create these devices:
# MAKEDEV -d /mnt/dev -x console
# MAKEDEV -d /mnt/dev -x null
# MAKEDEV -d /mnt/dev -x zero
And create a root passwd:
# chroot /mnt
# pvconv
# passwd
# exit
Create some files:
# vi /mnt/etc/fstab
# vi /mnt/etc/sysconfig/network
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
# vi /mnt/etc/resolv.conf
The contents of these files depends on your settings, use the files on your current OS as references.

That's it, you're done. Unmount the image. Now you should be able to boot it. After you boot it(e.g. as a Xen domU), do some configurations. These are what I did:
# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start #use network instead of NetworkManager
# chkconfig atd off
# chkconfig bluetooth off
# chkconfig cups off
# chkconfig haldaemon off
# chkconfig ip6tables off
# chkconfig mdmonitor off
# chkconfig netfs off
# chkconfig netfs off
# chkconfig nfslock off
# chkconfig pcscd off
# chkconfig portreserve off
# chkconfig rpcbind off
# chkconfig rpcidmapd off
# chkconfig rpcgssd off #all these services are useless for me
# yum install xfsprogs #my filesystem is xfs
# vi /etc/rc.d/rc.sysinit #comment out a bunch of lines to get rid of false err/warning device-mapper messages during boot-up

Don't forget to delete (in your current OS) fedora.repo in /etc/yum.repo.d and move everthing back in there.

11/7/08

Super Easy Python powered Christmas light controller for $40

There're lots of ways to control Christmas lights. The easiest (but expensive) is just getting a lightorama. I'm not spending $400 on a controller. So I decided to build my own.

Computer Christmas has many articles showing you how to do this. There's a how-to for a 320 channel controller. All I need is 8 channel on/off (no dimming), so a simple parallel port relay box is perfect for me. This how-to tells you how to building one. But actually you don't need to build a relay box yourself, there are parallel port relay kits sold online for cheap. You just buy the kit and connect to electric box.

So Here's how to build a Python powered Xmas light controllers for $40(more or less).

1, get a parallel port relay kit for about $32, for example: here or here. You can get it assembled or in module form for a few more bucks. I didn't want to spend much time assembling so I got a module.

2, get electric box and outlets from Homedepot or Loews for total $8. Again I'm lazy so I just got a power strip from Walmart for $4, but it only has 7 outlets, I couldn't find one with 8.

3, Wire the kit to your electric box.

4, Connect to computer and fire up Python (see my previous post).
Video of testing session.
Here's source code for the GUI program (in wxpython), most of code were generated by wxglade, I just created the event handlers for the mouse clicks. The speed control (slider) is not implemented yet.

10/18/08

python parallel port on Windows

Tried different ways of controlling parallel port with Python on Windows. The easiest way is with Inpout32.dll.

Just download the dll, put it in system32 folder. Then from python:
from ctypes import windll
p = windll.inpout32
p.Inp32(0x378) #default 255(all high) on my pc
p.Out32(0x378, 0) #put all low on port 2-9


The address 0x378 might be different on your machine, open System->Hardware->Device Manager->Ports->ECP Printer Port->Properties->Resources, use the first number as your address.

7/18/08

Create QRcode with google chart API

Google recently add QRCode to its Chart API. This make QRCode generation a breeze. All you need to do is sending a GET request to google.
QR Code is the most popular 2d barcode. I put a page up that make it easy to generate QR Code with Google Chart API:

http://wensheng.com/gqrcode.html

To create a URL, you need to put 'http://' at the beginning. Otherwise code reader will see it as just text. Likewise to create a telephone number, you need to put 'tel:' at the beginning, otherwise it's just code and you can't dial it from your phone.

There're a lot of code readers. I have Kaywa Reader on my cellphone, it works really well.

6/30/08

Can't believe my brain is only 20

So I took this japanese flash test for brain age, it show my brain age (脳年齢) was 20. I don't know if it helped that I was drinking a beer at the time of testing.



Add: Hmm, Chimps do much better.


Grid/Cloud/Utility computing is expensive!

Utility computing is hot now. Two major players are Amazon EC2 and Google AppEngine. There are many minor players too. It's also evident that some ISP's are jumping onto the bandwagon.
I did some quick research on several vendors and sumarizd by findings here:

click to enlarge

For me, Google AppEngine makes most sense. You pay nothing for up-to 5 million page-views per month. The only problem, albeit a major one, is that it's only python. It's not a problem for me though since I know python.

Other providers are way too expensive. Look at engineyard.com, $400 per month get you a meager 760Mb ram, only 250GB transfer. Someone must be out of his mind to purchase it.

For those who don't go with AppEngine, I would say it's best to just get a VPS. You can do whatever you want with VPS just like a dedicated server. And it's cheap, you can easily find a 512M ram VPS with plenty of diskspace and bandwidth for less than $50, that's all you pay. (Just make sure your VPS is Xen based, not Virtuozzo/OpenVZ based, as they allow ram bursting, which means you will NOT get your ram when you really need it, as other users on the same host machine as you stole it.)

6/26/08

So Google thinks I am a robot

Two minutes into my testing of my AppEngine website pytan.com, I got this page. I have no idea what triggered it, probably from ajax calls to appengine when I move my todo items.



When I tried to access this blog, I got it again.



However rest of google: search, reader etc. worked fine. So apparently blogger and AppEngine share some of the infrastructure.

So a robot think I, a human, is a robot. Tech Singularity is here already?