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.

6/1/08

Create a fedora9 image from within fedora8

I needed to create a fedora9 xen domainU. However from dom0, "yum groupinstall" didn't work, because dom0 is a fedora4. So I created a fedora9 domU from with a fedora8 domU.
Here's how:

Create a 2G sparse file and make filesystem
$dd if=/dev/zero of=f9 bs=1M count=0 seek=2048
$mkfs.ext3 f9


Mount the file.
$mount -o loop f9 /mnt


Go to "/etc/yum.repos.d/", create a directory called backup, and move all files under "/etc/yum.repos.d/" to 'backup'. Then copy back the file fedora.repo.
$cd /etc/yum.repos.d/
$mkdir backup
$mv * backup/ #remember to move them back later
$cp backup/fedora.repo .


Modify fedora.repo file, change all '8' to '9', change all '$basearch' to actual arch name like 'i386' or 'x86_64'. Then do:
$yum clean all
$yum makecache
$yum --installroot=/mnt -y groupinstall Base


Now the fedora9 is installed and bootable. However to make it actually useable, there's more.

Make these devices:
MAKEDEV -d /mnt/dev -x console
MAKEDEV -d /mnt/dev -x null
MAKEDEV -d /mnt/dev -x zero


Create these files:
/mnt/etc/sysconfig/network and
/mnt/etc/sysconfig/network-scripts/ifcfg-eth0
/mnt/etc/resolv.conf


Then we need to set a root password
$chroot /mnt

Do a 'pwconv' and 'passwd' then 'exit' back

That's it. The file is now bootable. Gzip it and copied the file to dom0 and boot it up.

5/29/08

This blog is almost xhtml valid

After some html tweaking, this blog is now almost valid xhtml. HTML validator shows 2nd page have only 1 warning. It had more than 100 warnings before my tweaking.

Homepage have 4 warnings, 2 of them are from video 'embed'. The others are from iframe and pagination. Iframe 'navbar' itself have 4 warning. These are google's faults which I can do nothing about.
So I give up.
Not that I think it's important, but it'd be nice if google generates valid xhtml code.