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?

6/5/08

The Flip vs Casio Exilim Z80 vs Michael Arrington's Canon

Michael Arrington compared the Flip Mino with his Canon SD750 and concluded that the Flip just doesn't make sense. I reached the same conclusion sometime ago when I shopped for a digital camera that shoot good video, and found Casio Exilim.

Here's the comparison of the Flip vs Exilim Z80. Here Z80 didn't exactly win "across the board" (e.g. battery life), but it's pretty close.


I highlighted the winning points of Z80: higher video resolution, optical zoom, larger storage /longer recording time, and lower price.
Z80 is shorter but a little fatter. Overall it's about 8% bigger. But if size really doesn't matter for you, consider Exilim S10, it's only 0.59" thin and smaller than Mino overall.


I actually don't care much about image quality of Z80. I have a Rebel Xti. I bought Z80 specifically for it's video capability.

There's a red button for one-button video recording. One criticism of using digital camera for video capture is that you have to set to to movie mode. But with this red video button, the argument goes away. You just turn it on, push the red button, and you are recording, it's that easy. Takes 5 seconds? No, more like 1.5 second!

One nagging point of Z80 is that it output video in "mov" format (h.264 encoded). Yes, Quicktime format. I actually don't like it but it would have been great plus if it's judged by Michael Arrington. He said "everyone is moving to Quicktime at this point." Not me, I'd rather install "quicktime alternative" then to install Quicktime/itune.

6/2/08

pymmseg, python mmseg

pymmseg is a python implementation of mmseg. It's my quick-n-dirty Chinese word segmentation program.

I needed a Chinese utf8 word segmentation program for some simple stuff. After googling found mmseg. But it's big5 based and written in C. I created a python version based just on 'simple algorithm' (just do maximum matching without other 3 steps) and converted lexicons to UTF8.

Download

It sorta works, for my purpose anyway, as you can see from screen shot.


You can see a lot of words don't exists in dictionary/lexicons like '赈灾','板房','两米'. That's because the lexicons are directly converted to simplified Chinese from a traditional one, and it's missing a lot of words. I am sure using a dictionary trained from simplified source will greatly improve pymmseg's accuracy. But using a better dictionary will not solve ambiguity, such as '兴奋 得很 晚 都 睡不着' (should be '兴奋 得 很晚 都 睡不着'). For that we will have to use 'complex algorithm'.

I will create a better dictionary using simplified chinese corpus, and also create the a version employing 'complex algorithm' when I have time.