Saturday, December 30, 2006

Notes on recent AOLserver research

I'm looking into using a flash (xmlsockets) gateway to implement low latency connections between the browser and the server (Aolserver), in short, an implementation of COMET using a flash component.

I must admit that creating a socket server in AOLserver is not as straightforward as say in Apache with PHP or CGI perl but my research has led me to a number of different (possibly unrelated but potentially usefull) things.

Memcached : Someone has written a tcl api to memcached. Memcached caches db requests for clusters of AOLservers. It can run as a daemon on an unused server and allow several clustered web servers to share a cache of db requests. I was particularly intrigued that LiveJournal .com uses it with positive results. Dave suggests that it would be neat if this could be augmented into ns_cache.

Naviserver : I've known for sometime that there is a fork of AOLServer. I just noticed that they have lots of potentially useful modules. Some of these are familiar AOLServer modules. I would be interested to find out if any of these modules will work on AOLServer 4.0.10 and 4.5. Another intriguing question is whether OpenACS can run on NAVISERVER.

Saturday, December 23, 2006

One year of blogging

One year and 6 days ago was when I signed up for a blogger account and made my first post.
85 blog posts later who would have thought that it would still be here :-)

I hope next year will be a great year for blogging ...

Wednesday, December 20, 2006

Embed an encoded file in the URL

In additon to http, https, ftp etc. This guy discovered a protocol "data". I would be interested to know how we can take advantage of this in Ajax Applications.

He lists a couple of possible applications. Click on the title to jump to the article at Hackzine.

Sunday, December 17, 2006

they posted my article

I do a lot of geeky stuff for fun. One of the articles I wrote about one of my projects just got published at the PinoyTech Blog. :-)

Upgrading to a larger hard disk

For several weeks my hard disk has been making a clicking sound. I couldn't reboot anymore because the clicking sound becomes worse during boot up and I got really worried that one day it wouldn't boot at all. It's my 4 year old Western Digital 40GB 7200rpm hard drive. I've been using it as my root partition for the last year and I think it's saying its last prayers.



In the past, upgrading to a larger hard disk for me was always an opportunity to reinstall everything and start with a new OS. This time, however, I can't afford to do that because I have a pile of things on my plate that I want to clear out before the end of the year. In addition, I happen to be quite happy with SLES 10 (Suse Linux Enterprise 10) on my workstation and I would be devastated if I had to redo all my settings and configurations.


I went to the mall and got myself a new hard drive. It's a Seagate Barracuda 7200.9 160GB 7200rpm with 8MB cache. I would've wanted a Barracuda ES but it's available on order basis only and I didn't want to wait too long.



So here's the sitch ... I have an old 40GB hard drive that's about to give and I want to upgrade to my new 160GB hard drive but I don't want to reinstall my OS.

Thank goodness for the internet, to everyone who likes to post about their problems with their hard disks and best of all to everyone who answers.

So here's what I did.

First, I turned off the computer and unplugged it. My motherboard supports both SATA and IDE interfaces. I installed my new hard drive and plugged it into SATA1.


Next, I boot up my PC and enter the BIOS. On my PC, I just press the delete key while it's booting up. Then, I configure the hard disk boot sequence so that it boots from SATA instead of the IDE interface. Note that not all motherboards supports this feature. While I am in the BIOS, I also configure the CDROM to boot first, you'll find out why next.


I used a Xubuntu Live CD to boot the PC after the configurations I made to the BIOS. In Xubuntu, I open a terminal and executed the following.




dd if=/dev/hda of=/dev/sda



My old hard disk is detected as /dev/hda while by new hard disk is /dev/sda. The dd command will copy my old hard disk into my new one byte per byte including the master boot records. There are some people that will argue that the above command can be used ONLY to clone two hard disks that are exactly the same so I was cautious but the explanations weren't very convincing so I decided to take a risk.


The copy took a while to finish. After it was done, I used cfdisk to verify the partitions on my new hard disk



cfdisk /dev/sda




From cfdisk I can see that I have a 40GB partition and about 110GB free disk space. I converted the free space into a new partition. I saved the configurations and exited cfdisk. Note that I could also have opted to resize the existing partition to use the entire disk.


I then ran fsck on /dev/sda1 which is the new partition which is the copy of my old hard drive. fsck did not report any problems.


Before rebooting, I mounted /dev/sda1 into a temporary directory.


cd /
mkdir tmpdir
mount /dev/sda1 tmpdir


Then I went into /tmpdir/boot and proceeded to edit the following files.

  • /boot/grub/menu.lst
  • /boot/grub/device.map
  • /etc/fstab

I changed all instances of /dev/hda1 to /dev/sda1.


I rebooted the PC and crossed my fingers. I was welcomed by the familiar grub menu and it proceeded to boot SLES 10. I logged in and it was like nothing changed.




Helpful Links

http://forums.gentoo.org/viewtopic-t-72947-highlight-cfdisk.html

http://www.linuxquestions.org/questions/showthread.php?p=1848006#post1848006

http://en.wikipedia.org/wiki/Dd_%28Unix%29

Tuesday, December 12, 2006

Dreamweaver, eat your heart out !!! Here comes Aptana.

The founder of Aptana demoes how easy it is to use Aptana's Web IDE to develop Ajax applications using YUI.

Debug Javascript with Firebug

If you've never heard of or used firebug, on which rock have you been hiding under all this time :-)
Joe Hewitt introduces you to Firebug on this video.

Monday, December 11, 2006

Are you an INTJ ? Take the test and find out.

Click the title link. It will bring you to a page where you can take an online test to determine your personality.

Nope, don't worry, it's not from COSMOPOLITAN or some women's magazine ...

Saturday, December 02, 2006

Encounters with IE

Aside from the preparations for the super typhoon that did not hit manila. This week was full of encounters with Internet Explorer.


1 - Operation Aborted error when printing a Web page. This happens on IE 6 only. If you happen to use "Tags" as an input name, you're users are bound to get the Operation Aborted Error.


2 - Page can not be displayed error. I couldn't find the original blog article where I read this particular problem. It occurs on a webpage where you have inline javascript that is trying to manipulate an html element that has not been loaded yet. The solution is to put the javascript in a function that gets called on the window.onload event.

Reming missed Manila

We are all thankful in Manila that Reming changed course. It's bad news for the Bicol region, though, especially in Legaspi, Albay where Mayon volcano is. They are now dealing with the aftermath of a super typhoon in addition to a possible eruption.

Thursday, November 30, 2006

Getting Ready for Reming


Indeed, what are the chances of another typhoon hitting Metro Manila just 2 months after the last one.


There's nothing to do but to "hope for the best and expect the worst".


Power is already out my house and I'm on my laptop using my cellphone as a modem.


Yuga has some great tips.

puTTY for your phone

This is for all the hardcore sys ads out there.

SSH to your servers right from the comfort of your palm (oh wait, that's a different device).

This puTTY runs on a Symbian OS based cell phone like my N70.

Monday, November 27, 2006

5 things a Geek does with his new Nokia N70


Nothing beats the feeling of getting a free phone.


A relative was a offered a promo with a lock in period of 2 years for a specific plan in exchange for 2 spanking new 3G Nokia cellphones. Suffice to say that I got 1 of the two units the cell phone company was giving away.


I'll probably keep my T610 for sentimental reasons but I hear it'll still fetch about P2,000.00 at Virra Mall.


So what is a geek to do with a new nokia N70.


1st - Plug it into a computer. Unfortunately Linux isn't supported. Bummer!! I do however have a windows virtual machine running inside VMware server. I plugged in the phone onto a free usb slot via the provided data cable and created a new usb port on the virtual machine. It's a good thing that the phone was autodetected, so I just clicked on Removable Devices -> USB -> Nokia N70 in the VMware server console. Prior to that I installed the drivers and the PC Suite.


2nd - Surf the Internet. It's a 3G phone :-) It's bundled with a browser by Opera. Yahoo Messenger and Yahoo Mail are also bundled.


3rd - Customize the hell out of it. Change themes, alter settings, transfer contacts, change ring tones and alerts until everything is just right (which will probably be never).


4th - Install GNUBOX . Internet over a cell phone, at least here in the Philippines, is expensive. GNUBOX is a nice symbian application that allows you to surf using bluetooth. I happen to have a bluetooth adapter and just went for it.


5th - Attempt to sync up your contacts with your e-mail client. Still no success in this front specially with me using Linux. I signed up for an account at scheduleworld.com. I'll need to find some time to try out synching.

Monday, November 06, 2006

Taking a Queue from the Ubuntu Developer Summit

I evesdropped at the recently concluded OpenACS Conference over Skype.


Coincidentally, Canonical (the company behind Ubuntu) will make VOIP available so that ubuntu developers who could not physically be present can listen in and even participate in the discussions if they have a microphone.


The OpenACS conference also had two days of hacking and bug bashing. It would be interesting if remote developers could also participate using Gobby.


Ah well, there's always the next conference. ;-)

Sunday, November 05, 2006

Fix for broken vmware console after upgrade to Ubuntu 6.10

If you upgraded to Ubuntu 6.10 and you suddenly find that you can't run vmware-console anymore, here's a solution from the ubuntuforums that you can try.


Create a shell script in your home directory using your trusty editor, name it vmware-console-fix.


vi vmware-console-fix



Edit the script and put this in


LD_PRELOAD=/usr/lib/libdbus-1.so.3:$LD_PRELOAD vmware-server-console


Make it executable.


chmod -x vmware-console-fix


Now when you need to run vmware-console just execute vmware-console-fix


./vmware-console-fix

Friday, November 03, 2006

Why bundle so many javascript libraries in Ajax Helper ?

Here is a list of reasons why Ajax Helper is using two (soon to be three) different javascript libraries.

1) We don't want to reinvent the wheel. We are leveraging code that is actively developed, highly recommended and used by the web development community with open source licenses (GPL, BSD, AFL and MIT). We are not maintaining their code, we are simply bundling them into a package.

2) Grab the Best of Different Worlds. Each javascript library has its strengths and weeknesses. We try to tap into the strengths of each when we write tcl wrappers for them.

3) More Choices. If you think that dojo is better than YUI, you are free to use dojo. If you feel that there should be a wrapper for some very useful functions in dojo that are not in Ajax Helper, you can write them and help the next developer embarking on his/her next ajax weilding openacs web application.

Why use AjaxHelper ?

I would like to make it very clear that you do not need Ajax Helper to use Ajax in OpenACS. It's really just a "helper" for people like me who may not have the patience for debugging cryptic javascript errors.


Here are my top 3 reasons to use Ajax Helper.

1) Easier for OpenACS Developers (at least I hope it is). The intention is to write tcl wrapper scripts around existing javascript functions. The idea is that OpenACS developers will be much more comfortable with server side TCL than front end javascript. The existing wrapper scripts are relatively well documented with links to the documentation for the javascript function they wrap.


2) Batteries are included, javascript libraries already bundled. If you're a seasoned javascript programmer/developer you *might* not find Ajax Helper useful, however, it does bundle the javascript libraries inside www/resources and this saves you the trouble of downloading and housing the javascript libraries separately. Furthermore, I will be making sure that Ajax Helper is updated with the latest from the javascript libraries that are bundled with it. If I happen to miss an update, feel free to holler and let me know.


3) Get Results Fast. If you're not the academic type who would like to find out what XMLHTTP is and you just want stunning effects and useful ajax on your OpenACS web apps, look no further. Check out the tutorials and the api-doc for ajaxhelper.

Basic Effects
http://www.solutiongrove.com/blogger/one-entry?entry%5fid=266153
http://www.solutiongrove.com/mashup/tutorial1

Using Ajax
http://www.solutiongrove.com/blogger/one-entry?entry%5fid=266155
http://www.solutiongrove.com/mashup/tutorial2

Drag and Drop
http://www.solutiongrove.com/blogger/one-entry?entry%5fid=268010
http://www.solutiongrove.com/mashup/tutorial3


Evesdropping on the OpenACS Conference at Boston

I could not get myself to visit Boston for the OpenACS conference but Caroline was kind enough to turn on Skype for me to evesdrop on the second day of the conference :-)


Caroline and Dave did a presentation for me with the slides I made here.


I heard a couple of questions which I don't think I was able to help answer due to time constraints, a relatively slow internet connection (Dave's latptop was connected to a VNC server running inside a vmware virtual machine on my PC which is all the way here in the Philippines) and my slow typing skills.



What I'll do is to answer a couple of them here in my blog.

Wednesday, October 18, 2006

Installation Notes : AOLServer 4.5


I compiled and installed a copy of Aolserver 4.5 with Postgresql and OpenACS successfully last June 2006 when it was released. Now I am trying to do it again and found myself stuck and unable to recall all the things I did during my last installation. Luckily the OpenACS forums is littered with people asking questions about setting up AOLServer 4.5.


Here's my step by step on a Suse 10.1 virtual machine with Postgres 7.4.13 already installed.


1) Login as root


2) Download and install tcl



cd /usr/local/src
wget http://heanet.dl.sourceforge.net/sourceforge/tcl/tcl8.4.13-src.tar.gz
tar xfz tcl8.4.13-src.tar.gz
cd tcl8.4.13/unix
./configure --enable-threads
make install


3) Download, apply ns_conn patch for background delivery and compile AOLServer


mkdir /usr/local/aolserver45
cd /usr/local/src
wget http://umn.dl.sourceforge.net/sourceforge/aolserver/aolserver-4.5.0-src.tar.gz
wget http://media.wu-wien.ac.at/download/aolserver45-nsd-conn.patch
tar xfz aolserver-4.5.0-src.tar.gz
cd /usr/local/src/aolserver-4.5.0
patch -p0 < ../aolserver45-nsd-conn.patch
/usr/local/bin/tclsh nsconfig.tcl -install /usr/local/aolserver45
make install


4) Check out and compile ns_postgres


cd /usr/local/src/aolserver-4.5.0
cvs -z3 -d:pserver:anonymous@aolserver.cvs.sourceforge.net:/cvsroot/aolserver co nspostgres
cd nspostgres
make AOLSERVER=/usr/local/aolserver45 POSTGRES=/usr/local/pgsql ACS=1 install


5) Check out and compile ns_cache


cd /usr/local/src/aolserver-4.5.0
cvs -z3 -d:pserver:anonymous@aolserver.cvs.sourceforge.net:/cvsroot/aolserver co nscache
cd nscache
make install


6) Check out and compile ns_ssha1


cd /usr/local/src/aolserver-4.5.0
cvs -z3 -d:pserver:anonymous@aolserver.cvs.sourceforge.net:/cvsroot/aolserver co nssha1
cd nssha1
make install


7) Download and install TDOM


cd /usr/local/src
wget http://www.tdom.org/files/tDOM-0.8.0.tar.gz
tar xvfz tDOM-0.8.0.tar.gz
cd tDOM-0.8.0/unix

Uncomment and edit a line in CONFIG to match your setup

../configure --enable-threads --disable-tdomalloc
--prefix=/usr/local/aolserver45 --with-tcl=/usr/local/lib

Run the config script and make install

sh CONFIG
make install


8) Download and install xotcl


cd /usr/local/src
wget http://media.wu-wien.ac.at/download/xotcl-1.5.2.tar.gz
tar xfz xotcl-1.5.2.tar.gz
cd xotcl-1.5.2
./configure --enable-threads --enable-symbols --prefix=/usr/local/aolserver --exec_prefix=/usr/local/aolserver --with-tcl=/usr/src/tcl8.4.13/unix
make
make install-aol


9) Download and install libthread


cd /usr/local/src
wget http://umn.dl.sourceforge.net/sourceforge/tcl/thread2.6.5.tar.gz
tar xfz thread2.6.5.tar.gz
cd threads2.6.5/unix

Uncomment and edit a line in CONFIG to match your setup

../configure --enable-threads --disable-tdomalloc
--prefix=/usr/local/aolserver45 --with-tcl=/usr/local/lib

Run the config script and make install

sh CONFIG
make install

10) Download and uncompress tcllib from http://sourceforge.net/projects/tcllib/
cd /usr/local/src
tar -xzvf tcllib-1.9.tar.gz
./configure --prefix=/usr/local/aolserver45/ --enable-threads --enable-symbols --enable-gcc --enable-shared
tclsh8.4 installer.tcl -no-wait -no-gui -no-examples -pkg-path /usr/local/aolserver45/lib -no-apps

References :

http://www.openacs.org/doc/current/aolserver4.html
http://www.openacs.org/forums/message-view?message_id=481781
http://openacs.org/forums/message-view?message_id=457933
http://openacs.org/forums/message-view?message_id=487137

Monday, September 25, 2006

Dengue Lessons

My younger brothers, the twins, caught the disease this week. Needless to say they were confined for 3 to 5 days at the hospital.

In honor of their being discharged I've compiled a list of lessons learned from this experience.

  1. An unexplicably long fever. If you have fever that comes and goes in a span of 2 to 3 days, don't wait, get a blood test, quick. I mean NOW!!!
  2. CBC. A complete blood count or a blood test is the only sure way to determine if you have the disease. A platelette count lower than 150 means that you could have the disease. My brother's platelette count was an alarming 50.
  3. Pesky Mosquitos. Keep a stock of mosquito repellant lotion. The disease spreads thru mosquito bites. Even if it's not dengue season, make it a habit to dab some on exposed skin before the late afternoon, that's when they bite.
  4. Fluids and lots of it. Dengue is caused by a virus. The only way to fight it is with the body's own immune system. When you get confined, the first thing they do is stick you with dextrose. If you're strong enough to drink water, drink lots of it.
  5. a Doctor in the House. It pays to have a doctor in the family. They're always on call for the members of the family. A pleasant bonus is that doctors and nurses who treat you at the hospital will be extra careful when they find out that you have a doctor in the family.

Monday, September 11, 2006

the 5th reason for virtualization

I just noticed that I have only 4 out of 5 reasons for liking virtualization .

Today a friend Vinod encountered some difficulty while installing Ubuntu on VMware server. The problem maybe related to his cd burner.

He has the ISO file. He burned it on CD and was trying to install it on a virtual machine.

I told him that he could skip burning the cd and just configure the virtual machine to read the ISO file ! :-)

That's my reason No. 5. It's easy to install a new operating system, you don't need to burn a CD , just change the settings for the virtual machine to read from the ISO file.


Friday, September 08, 2006

So you wanna be a Public Speaker

I started learning the art of public speaking in high school.


I was pretty much an introvert, I never understood why my class would vote a "silent type" to represent us in a public speaking competition. The only two reasons I can think of are (1) no one wanted our class to win and (2) no one wanted to represent the class so everyone figured the "silent type" would be silent enough not to object.

I could be wrong on both counts, in which case, the people who voted for the introvert to participate, really believed that he had it in him :-)



I think I did. I won first runner up on my first competition and I started participating in a few more.


I have to thank my adviser and my classmates at the time. They provided the opportunity and the encouragement. I just had to muster up enough confidence.


I doubt that I will ever be as good as these poeple in TED. I'd be lucky if I could at least have a quarter of their wit, presence, impact and humor on stage.


My favorites so far include :


Wednesday, September 06, 2006

The Long Tail applied to Job Boards

I have rediscovered Joel Spolsky's blog. This is an interesting way of looking at job boards. Reading the article, it kind of reminds me of the concept of the "Long Tail".

Hmmm I wonder if the OpenACS community should open up it's own job board :-)
Seems we have a fair share of forum posts looking for OpenACS coders.

Tuesday, September 05, 2006

Meeting Meebo

Being in the web development industry, I really ought to be more security conscious. I showed meebo to a friend a few months back. His first reaction after seeing the log-in page was ... "yeah right, like I'm just going to type in the passwords to all my IM accounts".


It occurred to me later that he probably thought that I was trying to "phish" his passwords.


Phishing is indeed one of the things that you need to look out for when surfing online but so are companies that are just plain "evil". These companies exist online to extract statistics, marketing trends and user information from people that sign up to their so called services.

Don't get me wrong, gathering information about your users is not evil. It's when they sell it or use the information without explicit permission, worse still if they sneak that little detail in the "terms of service" which no one bothers to read. When they do that, it's not just sneaky, it's plain evil.


Meebo doesn't seem to be that type of company.


I read their meeblog once in a while and I like how their blog articles are posted. It makes me wonder if all of them are excellent writers or whether an editor reads thru them first before they get posted. Either way, I find that the style of writing is informative yet casual, almost endearing at times :-) This is a recent example.


The about page is another one to like. These people don't hide themselves behind a brand name, a mission statement or a company logo. They put themselves out into the open and post pictures of themselves with clever captions. It's the people that make the company and not the other way around.

Friday, September 01, 2006

What's the fuss over COMET

A friend of mine, who works at a gaming firm, and I were chatting about the recent buzzwords that we have been hearing about on the web.


I was describing COMET and how it differs from the behavior of the web as we know it today. As I was mentioning how COMET keeps a persistent connection between the browser and the server, he raised the fact that it's the case too for Massive Online Multi-Player games where the game client needs to keep a persistent connection with the game server to communicate game status, statistics and other game information.


This got me to think. COMET is not a new concept and yet there are many who think that the next "Holy Grail" of the web, the next killer web app is one that actually uses it and uses it well.


Then, it dawned on me. It's not the technology per se that has everybody hyped but rather where it is implemented.


It's all about the "universal client". The one software that you find pre-installed on any operating system on this planet. The one client that every computer user has access to and knows how to use. The Web Browser.


To play a game of Ragnarok, you need to download a client in the 5 to 10 MB range. You need to install it on your computer and configure it before you can use it. It's no surprise why gaming firms spend a lot in marketing. This marketing effort even includes giving away free CD's in promotions and tie ups.


Imagine if an MMORPG can someday run comfortably on a web browser using COMET. It will make the games ever more accessible to many more people at much less cost to gaming firms than ever before.


Maybe that day is not too far off.

Thursday, August 31, 2006

Virtualize and be Productive ...

One of the best things that VMware has done in recent memory is to release VMWare Server free of charge for anyone to download, setup and use with no license restrictions whatsover. We may have the likes of Microsoft (http://www.microsoft.com/windows/virtualpc/downloads/sp1.mspx) and Xen (http://www.xensource.com/), both having their own virtualization products, to thank for that ingenious (perhaps calculated) move.


I've been using VMware server since it was released. Here are the top 5 things I really like about virtualization with VMware server in particular.


  1. Compartmentalize. I can create virtual machines for a specific project or for a group of projects. This is nice because it does not mess up the install on my host computer. If the project requires additional software, I can install it, worry free, inside the virtual machine where the project resides. If I completely mess up and break the project, I can delete the entire virtual machine and start from scratch without worry.
  2. Reuse. Each virtual machine can be different from the other but if you're working on projects with pretty much the same setup, you can create one virtual machine and create clones of it for each of the projects that you have.
  3. Remote Access. VMware has 2 additional software that allows you to monitor and connect to a virtual machine in a VMWare server. The VMware server console and MUI. The VMware server console is almost like VNC, only but better because in addition to interacting with the OS, you can also set and edit the preferences of a virtual machine. MUI, on the other hand, gives you control over the virtual machines on the server. It basically allows you to suspend, run or power down a virtual machine thru a web interface.
  4. Pause. This is probably the feature that I like the most. I can literally pause an entire virtual machine and turn off the computer at the end of the day. On the next working day when I power up my machine, I can start right where I left off by.
It's not all a bed of roses, though. I maxed out my RAM to 2GB and got myself an Athlon 64 dual core processor before I felt that I could comfortably use VMware server on my machine. Then again I run 2-5 virtual machines at the same time so you may not need as powerful a rig as that. However, newer computers come with more powerful processors, faster memory and hard disks in the hundreds of gigabytes, so this could be a non-issue on newer hardware.

Update : Seems I forgot reason number 5, it's here

Friday, August 25, 2006

shortcut to delicious and scriptculous

I just discovered the darndest thing today. I have always had a difficult time typing del.icio.us or script.aculo.us on the address bar because I could never pin point where the "." should go in the url.

Well, today, I said to hell with it and typed the whole word "delicious" instead of "del.icio.us" on the Firefox address bar. Guess what, it redirected me to the correct site. Seems to work on Internet Explorer too.

Postgresql Tip : Resizing Varchar Columns

As great as postgresql is, there are little things that you wish could be easier to do. On version 7 of Postgresql, changing some of the column attributes meant that you had to either dump, modify and restore or drop a column and recreate it.

It's because there is no straight forward sql statement to do it. I found this hack that shows you how to resize a varchar column.

Tuesday, August 22, 2006

Guy Reviews the Honda Fit (it's the Jazz to us here in the Philippines)

I just love gadgets. Who doesn't ? When you talk of gadgets, what usually comes to mind is a nifty watch, cellphone or PDA but seldom a car. Imagine my surprise that Guy's first gadget is the Honda Jazz :-)


In the Philippines, the Honda Fit is known as the Honda Jazz. Don't ask me about the name change. My guess is as good as any, but I have a feeling it has more to do with marketing than anything else.


What Guy failed to highlight in the review, and I think this is really important given the rising prices of gasoline, is the fuel efficiency and mileage.


A big oil firm, Petron, in the Philippines ran a promotion touting their unleaded gasoline as the most economical giving the customer more miles in one full tank than any other fuel. Their car of choice was the Honda Jazz. I'll let you guys in on an insider secret .... it's not the fuel.... it's the car !!!


Anybody who owns a Honda will swear by it's fuel efficiency. I drive a year 2000 1.6 Liter Honda Civic and I consistently get somewhere between 10 to 12 kilometers per litre.


Honda really makes great cars.

Sunday, August 20, 2006

Unobtrusive Ajax with Fallback

I found myself trying to remember on which project and which feature I implemented unobtrusive ajax with fallback. So I'm writing it here in case I forget again.


One of our recent clients requested implementing ajax and some nice effects on their blog comments.


I thought it was an excellent exercise to see if it was possible to keep the old way the system added comments, which is to submit a form, and to use ajax whenever the browser supports it.


I was able to accomplish this by using the events library in YUI (Yahoo User Interface).


I used the addlistener function to add the javascript that performs the ajax call that adds the comment.


I pretty much left the original form intact, meaning there is still a method and action attribute. I prevented the default behavior from firing by using Event.preventDefault().


The beauty of YUI is that if javascript is turned off, the form will do a normal submit to add the comment instead of calling the ajax function.

Wednesday, July 26, 2006

Two articles that prove that Linux is here to stay

... and why Windows will eventually but gradually meet it's demise :-)

http://www.kroah.com/log/linux/ols_2006_keynote.html
http://pcmag.com/category2/0,1738,3574,00.asp

Wednesday, July 19, 2006

job candidate interview and car alarm troubles

I was asked to meet someone for lunch yesterday. He is a candidate for a programming job at Solution Grove. Caroline sums him up as geeky and I tend to agree. He's had teaching experience, java experience and more importantly a willingness to learn someting new like OpenACS.

We met at Italianni's. I was hoping it was going to be quiet as it's a tuesday. Boy, was I wrong. It was jampacked filled with people by the time we finished.

A few minutes after the meeting, as I was on my way to the parking lot, I fumbled for the car alarm remote and was shocked. The screw may have somehow slipped and the mechanism inside the plastic casing was gone.

It was extremely embarrassing. I had to prove to the guard that the car was mine. I showed him the keys and the car park ticket. I was able to stop the sound by opening the hood and disconnecting a wire but that did not allow me to start the car. Fortunately, a nice gentlemen knew how to disarm the system and did so for me. I offered him a reward for his trouble but he declined. Very nice fellow.

The first thing I did afterwards was to replace the whole alarm system. There was no way to get a new remote as the current system does not support programmable frequencies. Even worse, if someone had gotten the mechanism from the original remote then they would have been able to open my car.

The new system cost me about P2300 but it seems worth it. It uses a very bright blue LED, nicer remote and best of all it has an emergency disarming feature. If I had lost the remote but if I still had the key, I could disarm the system by (1) opening the car with my key (2) press the brake pedal as I did the following (3) put key in ignition on ACC (4) turn it from OFF to ON 10 times.

I now keep that manual in the glove compartment of the car ...

Lesson learned :-)

Sunday, July 16, 2006

Free Guitar Tabs

One of my fondest memories of high school was with a guitar.

I remember it quite vividly but not vividly enough to remember the song, the day or all the exact details, just that it was practice for mass.

I graduated from a catholic high school. We have mass every now and then to celebrate certain events in the church calendar. Again, I can't seem to remember what it was.

A class was usually picked to host a mass. I beleive our class was chosen. It was my 3rd year in high school. Being host meant our class made the preparations, chose the songs, lead the readings and, of course, the singing. This particular celebration was particularly important, it seems, because our values ed teacher gave us the period free to practice the songs.

One song was written with chalk on the blackboard already.

I remember looking out the window that day. In my minds eye I can see the grasses in the vacant lot on the other street, they were brown and dry, it must've been a hot, sunny and lazy afternoon. The weather was probably getting to everyone because no one was practicing.

I must have been crazy because I asked a friend to play the song on the blackboard with the guitar with me. He was hesitant at first but after some convincing he agreed. It was a crazy idea because I am not exactly a very good guitar player. I knew the chords but strumming was all I could do.

Luckily, that was all the song called for, strumming.

I just started playing the chords with him. I do not know why and I can't exactly remember how but I found myself strumming the chords and singing in tune ... and everyone in the room was singing with me. My writing probably could not do justice to what I felt while I was in that moment. I remember the feeling well because my best friend at the time was smiling at me and loooking at me like I've never seen him look at me before, as if I was doing something incredibly different or amazing. Probably the better description is something "out of character".

Sometime during that, I had wished that the song did not end but when it did, I remember that it ended loud and everyone was happy.

Anyway, we did not have the internet back then. We had to get the tablatures and chords from magazines and song hits. Today, in the age of informaiton, they are freely available and downloadable from the internet.

the concept of an "Unconference", and I did not misspell

The single most important variable to the equation that will make this a success is when passionate and knowledgable people who have something in common come together and meet. It's almost natural. It's amazing.

Saturday, July 15, 2006

my Athlon X2 is now officially yesterday's big news

Just barely six months after I got myself an X2, Intel decides to ship dual cores that beat the crap out of them. Sigh ....

Vmware and Ubuntu, my virtual cpu is losing ticks

I have been having problems with Ubuntu 6 on vmware recently.

I run a virtual machine where all my current web development projects are installed and running. The web files are exported to this virtual machine thru NFS.

Just this week the NFS client on my virtual machine would complain that the server has stopped responding and connection is timing out. This caused my web applications to hang and the web server to just stop serving pages.

I noticed 2 things.

(1) the date and time on the virtual machine kept getting out of sync with my host operating system

(2) I saw a weird log entry that said that my "...CPU is losing ticks, checking if CPU frequency has changed"

Almost everytime my web applications hung, it woud be because NFS stopped connecting and in almost all cases I saw both symptoms.

After losing some hours over this, I found an article over at the VMware knowledge base about it.

What ended up fixing it for me was:

(1) make sure vmware-tools was syncing time with my host operating system

(2) added the "clock=pit" to the kernel bootup parameters.

I run Ubuntu 6.06 with a server kernel. I meant this virtual machine to be a server so no X-windows or any such GUI is installed. That turned out to be a problem with configuring vmware-tools to sync time with the host OS.

It seems the solution to that one was to edit the .vmx file for the virtual machine and setting tools.syncTime to "TRUE".

Update : Interestingly, technologies like speedstep and cool n' quiet can also cause this problem. Check this article out. Try turning off speedstep and/or cool n' quiet from the BIOS and see how it works.

Time for new headphones

My head phones of 1 year and a half have snapped, literally.




It's a labtec worth P1000.00. Does anyone have any idea on how to salvage them ?
The mic and headphones still work great. Its just that I can't put them on my head anymore.

New DSL Modem

My old modem was a speedstream. The new one seems only to be branded PLDT (my service provider). Underneath I read Model No. PL-DSL2.




This is what my old modem looked like.


My worst nightmare came true ... dial-up.

My worst nightmare came true this week. I went back to using dial up internet.

It was the wind. There was a lot of rain too. The real culprit, however, were the power fluctuations. Since last week friday up until the middle of this week, we've had at least one power outage a day.

Last saturday, there was one in the morning. I was not at home when the power came back. I was at the new V-mall shopping center at greenhills buying a telephone set (more on this on my next blog).

My brother turned on the power strip and the UPS. The router turned on, my pc was brought back to life but the modem remained off. My brother called me on the cell and told me the bad news.

I asked him ....

Did you try a different power outlet ?

Did you turn on the switch ?

Did you make sure the power cord is plugged in right on both the modem and outlet ?
... but to no avail.

When I got home, I checked the device again myself. As if to resuscitate the dead, I shook it and tried all the things I had asked my brother to do over the phone, but to no avail.

Henceforth I was on dial up and my worst nightmare had come true.

Sunday, July 02, 2006

To watch or not to watch ? that is the P350 question.

It's a long weekend in the United States, they're celebrating independence day. My Boss is out camping and I'm guessing with the lack of support tickets since friday evening, most of our clients are out too, making the most of it.

So what to do on a long hopefully uneventful and quiet weekend. My first choice was to hop myself over to the recently opened SM Mall of Asia and watch Superman Returns on Imax.

The mall is just 30 minutes away from the house via the coastal road. I've been there thrice. While it seemed humongous on my first visit, it somehow did not feel that way on my subsequent trips. Maybe it's because you start to remember where all the shops are, where to go and how to get there.

As it turns out, tickets for the IMAX experience is P350 per person. Stingy as I was, I asked "what's so special that I have to pay P350 for a movie ?". Apparently, you get to sit on a lazy boy and some 3D glasses. What ? No free pop corn :-) This blogger thought it was worth it, though.

Sunday, June 11, 2006

HOW TO: Build your memory by 'Pegging'

This is a great in-depth article on an effective memorization system called pegging. The first thing that you need to do in order to learn how to peg, is to memorise the basic phonetic sounds that will be used to represent the numbers 0-9. To speed up your mastery of this number/letter code, I have offered a few memory aids.

It's extremely cool and unbelievably easy. I am trying to get the 100 common peg words into memory but I think it will take a fair amount of practice to automatically transform a series of numbers into images and commit them to memory.

read more | digg story

Mark Shuttleworth almost strip searched by US customs

"When Ubuntu founder Mark Shuttleworth recently traveled to the US, he was declined entry and almost strip searched! (He refused, and they relented). Furthermore, he now has to fill out a visa application form for "people with a criminal record" every time he wishes to travel to the US."

Obviously the customs people do not use Ubuntu :-)

Seriously, though, I find this a rather large coincidence. I am applying for a B1/B2 (for those who don't know, a tourist/business visa) from our local embassy. I'm not worried anymore about getting declined on the interview, now I'm worried that I'll get rejected right at the airport when I arrive.

read more | digg story

Working in the US

Read the comments.

It is fascinating to read the comments that people have about foreigners working in the United States, about the h-1b visa, about how the system supposedly protects local workers and how it is sometimes abused by US companies.

I consider my self blessed because I work for a company in the US and yet I have not had to set one foot in US soil. All of my work is done online thru e-mail, instant messaging and ssh. I doubt that my salary is at par with US software engineers because that is my edge, living in the Philippines. It is, however, competitive when compared against local salaries. There are no health benefits and things like that, but I do get to work at home and time is pretty flexible.

Thursday, May 18, 2006

Finally 64-bit Dual Core Laptops

Now I am happy that I did not jump the gun and buy a macbook pro.

Wednesday, May 17, 2006

AOLServer, XoTCL and Comet

Before the buzzword COMET was coined there was xotcl, a patched aolserver and Gustaf Neumann's background delivery and streaming modes.

http://www.openacs.org/forums/message-view?message_id=389271

Now I have got to find the time to play with this !!!!!

Sun To Open Source Java

I think it's about time. This is what will bring Sun out of the rut it's in right now.

Friday, May 05, 2006

Filipino mom to ask for public apology

This little incident is a perfect example of how something possibly trivial can go way out of hand. It also shows how much influence the press has on people and why journalists have such a great responsiblity to produce fair, accurate and truthfull reportage.

First, let me state my position. I do not know the parents. I do not know the child. I do no know the principal. I have not been to the school or talked to anyone in it. I am a Filipino and I eat regular meals with a fork and spoon. All the information I gather about this incident is from this article and from the many articles posted around the internet about it be it in an online news paper, a comment or blog. It is a position that you, as readers, and I share. We should all remember it.

Children are "children" and no one should be surprised if they act like children during meal time, heck I know perfectly mature adults who act like children in front of the dinner table. It is, therefore, a prerogative to discipline and to guide them about correct etiquitte be it the Canadian or the Filipino way. IF the child was unruly during meal time then the school representatives had every right to impose discipline and reprimand the child for his behavior. I beleive it is their duty to do so.

What concerns me here is that people are so enraged at the comments of the principal and his staff that they may not have stopped to consider that it may not be about the "spoon and fork" but rather the behavior of the child during meal time. It may not be about what utensils the child was using but HOW the child was using them.

The article mentions that the mother has spoken with the principal. What is not evident to me is that aside from the phone conversasion, was whether she had a chance to talk personally with the principal before lodging her complaint.

I empathize with one of the commenters of this article who is vigorously trying to explain that it is a disciplinary issue and not racial or cultural one, for it may very well NOT be about Filipino or Canadian etiquette. It may really just be about a child that has been reprimanded for unbecoming behavior.

The comments of the principal can easily be misconstrued as an attack on the eating habits of Filipinos.

It is also possible that the mother beleives it to be so, an attack on the use of a fork and spoon. None of us can really tell for sure because how it was said is just as important as what was said.

Read more at www.westislandchronicle...

Wednesday, May 03, 2006

LiveScience.com - Walk a Quarter-Mile or Die

It's hard to beleive but the study is compelling.

While it's no guarrantee, the simplicity and ease might just help us monitor our health way better than expensive check ups.

My measurements could be off but this means that if you can walk from Building A to Building B at the Sm Megamall at record time, then you're probably in pretty good shape :-)

Read more at www.livescience.com/hum...

Tuesday, April 25, 2006

Malapascua Vacation

I finally got myself to upload some pictures from my vacation at Malapascua last easter.


Malapascua is one of the most sought after diving places in the Philippines. It is an island 30 minutes away by boat from Maya the coastal town of Cebu.


My only complain were the boat rides but as you can see, the sites were well worth it.


I think I've reached my quota over at 23hq but I'll be uploading more next month. When I find time I will write a little bit more about the pics and our adventures while island hopping.


Another gripe I have is that I did not have an underwater camera. The sites were just as spectacular under water as they were above water.


Friday, April 21, 2006

The Virtues of a Second Screen - New York Times

Ah so it isn't just me. Two monitors are really better than one.

Read more at www.nytimes.com/2006/04...

Friday, April 07, 2006

My Ajax Baby

Solution Grove's web desktop is now in beta ....
http://www.openacs.org/news/item?item_id=423041

Thursday, April 06, 2006

Being a Geek can be Dangerous to your health

Interesting article about the health problems associated with the "Geek Lifestyle".
I spend most of the day in front of two monitors coding and debugging away.
I have had back pains, headaches and wrist aches.

I've got to start exercising again :-)

Saturday, April 01, 2006

Time Machine Module for Yast

YaST Time Machine is the newest product of the openSUSE community and YaST team.

Happy April Fools !!!!

read more | digg story

Friday, March 31, 2006

DIGG.com story on CNN

A friend once said ... good things happen to good people. GO digg !!!

read more | digg story

Thursday, March 30, 2006

Treo 700w now criticized by reviewer who loved it in review

I am still stuck with my T610. It is a very good thing that the 700w has not been released for sale in the Philippines or I would've bought it in an instant.

Now I'm looking forward to the 700p.

read more | digg story

Microsoft asking EVERYONE to rewrite web pages for IE 7!!

It's bad enough that we have to build webpages to make them appear right in IE and still be standards compliant. NOW they're telling us everything that we've done so far will need to be rewritten ?

I develop sites using open source technology so no activex but some clients do use activex. I just would hate it if a client would blame me because they suddenly can't read pdf files on IE anymore.

I just hope they do an information campaign and let users know about the patch.

read more | digg story

vi/vim Graphical Cheat Sheet & Tutorial

I found this cheat sheet from digg. VI is the very first text editor I used when I was starting out with Linux and I still use it today.

It has been more than six years and I'm sure I haven't exercised its full potential.

read more | digg story

Wednesday, March 29, 2006

KDE 3.5.2 Released

Can't wait till a yast repository becomes available :-)

read more | digg story

Sunday, March 26, 2006

Wanna know how China intercepts and censors the internet?

That is what you call paranoid. At least in China one is aware you are being watched. I personally think it is worse if you haven't the slightest idea that Big Brother is watching.

Funny, there was no mention of encryption or encrypted email.

read more | digg story

COMET - the next AJAX

At least this is a cooler name than Ajax or Mashups. The former is really synonymous to dish washing liquid and the later reminds me of potatoes and cream for some reason :-)


Apparently this isn't a new idea, would be nice to see how it pans out.


I really think Ajax (XMLHTTP) found its way to the main stream because browsers began to support the functionality. Both Opera and Safari added support for it only last year (I could be wrong but I remember that it was fairly recent) and I think that was the icing on the cake. It's cool and it's cross browser. What else can you ask for ?

read more | digg story

Monday, March 06, 2006

Double Everything ... Almost

About a week or two ago I decided to do an upgrade on my PC.
It's less than a year old but with Apache and mulitple instances of AOLserver running, I felt it needed the boost.


I already have dual head monitors ... I got myself a dual core Ahtlon X2 3800+ and increased RAM to 2GB. The only other processor available was the 4400 and I'm rather superstitious about the 4.


All I can say so far is that 2 heads are indeed better than one and I'm not talking about the dual head monitors. The dual core CPU really works and I feel it when I'm watching the latest anime torrent while toiling away on multiple terminals, look Ma no skips.


I had to fiddle with the Linux Kernel. A dual core CPU needs an SMP Kernel to be able to utilize both cores. With SUSE Linux, however, it was as they say "a piece of cake" with Yast.

Sunday, March 05, 2006

USATODAY.com - Flickr of idea on a gaming project led to photo website

This shows the power of the "idea". When realized it is like a beam of light that just leads you to your destination even in uncertainty.

My favorite paragraph ..."Had we sat down and said, 'Let's start a photo application,' we would have failed," Fake says. "We would have done all this research and done all the wrong things."

Read more at www.usatoday.com/tech/p...

Thursday, February 23, 2006

Passed Away

My grandfather passed away over the weekend. I did not realize how there can be so much tradition in burial. I use to hate the traffic caused by a funeral march but today I got to experience one myself first hand.

His wake was at the Arlington Memorial Chapel. He was 88.



Wednesday, February 15, 2006

Experience Upgrading an Old Site with SVK

Ok, I spent the better half of the day with SVK and a custom OpenACS site stuck in OpenACS version 5.0. My task for today and for the week, hopefully not the entire week, is to upgrade the site to 5.2.2.

I have yet to determine whether this works. I'll know when I finally upgrade the database but things look pretty good.

Here's how I went about it with SVK:


  1. I downloaded a copy of cvsroot to my dev machine. This is a precaution, I don't want to mess with the main repository.

  2. Use svk to create a mirror of the cvs repository you just downloaded

  3. You should end up with an svk repository of everything from cvs

  4. Detach the mirror

  5. Identify the vendor branch

  6. Get a CVS export from OpenACS 5.2.2 stable

  7. Import the cvs export to the vendor branch

  8. Perform an smerge between the vendor branch and the project branch

Ajax on OpenACS

I put together an Ajax Helper package that uses prototype and the scriptaculous javascript libraries to produce cinematic effects with some ajax.

After taking a look at Yahoo UI, I'm re-evaluating whether YUI would be a better choice. Anyway, there's a demo of the uses of Ajax Helper in the URL below.

Login using ....
email : demo@solutiongrove.com
pass : demo

Read more at sgsandbox.com:8002/xowi...

UPDATE : the demo is gone now, in it's place is a much more elaborate demo at http://www.solutiongrove.com

Yahoo! UI Library

A colleague pointed me to this. It's yet another ajax javascript library. Is it any good ?

Read more at developer.yahoo.net/yui...

Monday, February 13, 2006

Slashdot: News for nerds, stuff that matters

Is it just me or are people commenting less on articles being posted on slashdot.

I could not remember a time when I could browse and read right thru all the comments for a single article like I can right now. It's always been chok full of comments even if it is the first post.Is this the digg effect ? Can digg lay claim to the title "slashdot killer" ?

Read more at slashdot.org/

Saturday, January 28, 2006

About Google in China

... a rapidly changing country that will be one of the world's most important and dynamic for decades to come..

My dad has been saying things to this effect about China for as long as I can remember ... the sleeping giant is awakening ..... About Google's decision to filter out content, I put myself in the shoes of the Chinese in China who want to explore the web however filtered or censored ... it's better than nothing at all ....

Read more at googleblog.blogspot.com...

Tuesday, January 24, 2006

Chip prices fall at AMD | CNET News.com

Could this be the perfect time to go dual core and get myself that Athlon 64 4200+ X2 ?

Read more at news.com.com/Chip+price...

Monday, January 23, 2006

An Introduction to SVK for OpenACS

Distributed version control systems seem to be the fad these days. They are popular for good reason. These new breed of version control systems give developers the flexibility and ease of use that the traditional Concurrent Version control System (CVS) does not. While there have been some talk in the openacs community about Arch and many more whom I've had the privilege of chatting with praise its features, there doesn't seem to be any plans to make the switch and for good reason. I had the time and opportunity recently to review some distributed version control systems including Arch but found that it's not as easy as it looks, at least in the beginning. There's a learning curve and the habits that you form with prolonged use of CVS can be hard to break.

This article, however, won't be about Arch. It's about another distributed control system that is based on Subversion, it's called SVK.

When I set out on my search for "THE" version control system, I had a set of criteria in mind :

  • It has to be DISTRIBUTED. Although I said it's a fad, I think the advantages of a distributed version control system specially in a project which requires heavy collaboration with geographically diverse developers will make it a necessity as soon as people start shaking off CVS.

  • It has to be FLEXIBLE. I like to be able to pull bug fixes and changes from OpenACS CVS to several projects and vice versa.

  • It has to be EASY TO USE and LEARN. I want it to work like CVS minus the headaches.

  • It has to be PORTABLE. I want to be able to work on a project without necessarily being connected all the time to the internet. I can be mobile and bring a copy of the repository with me on my laptop and merge the work I did on it offline to the main repository later.

  • It has to SCALE. Scale here does not only mean that it should be able to handle a lot of developers but also be easy to use and maintain, even as the number of projects using the same code base increases. In short the effort involved in getting changes from the central repository to the mirrors and back should not increase too much as the number of projects increase.
The Scenario

In the succeeding article we will be creating a product called ecwork based on OpenACS. Its starting point will be OpenACS 5.1 stable. We want to create new packages and modify existing packages to create this new product. At the same time we want to contribute code back to the OpenACS community from lessons learned, code produced and from experiences developing ecwork.

Create a Central Repository

I used the term "Central Repository" for a lack of a better term to describe the father tree or the first repository from which other repositories will be mirrored.

Here's how to create an SVK repository for our ecwork product.

  1. Checkout a copy of OpenACS. Change the revision (-r) depending on which branch you wish to work from or commit code to later on.
    • cvs -d :ext:cvs.openacs.org:/cvsroot co -r oacs-5-1 openacs-4

  2. Create an SVK repository
    • svk depotmap --init

  3. Relocate the repository to a more obvious less intrusive location
    • svk --relocate ~/.svk/local /svn/repos/svklocal

  4. Import the OpenACS checkout into the repository
    • svk import -m "import openacs" //ecwork/trunk openacs-4/

SVK actually uses subversion underneath. So creating an SVK repository also creates a subversion repository. In short you can use Subversion commands with this central repository. You, therefore, have the option to use either a distributed version control with SVK, or central version control with Subversion.

New Project, New Mirror

When a new project comes along where we would like to use the same code base, we create a separate staging server and mirror the central repository there

  1. In the staging server, create the local repository.
    • su - service_name
      svk depotmap --init
      svk --relocate ~/.svk/local /var/svk

  2. Create a mirror of the remote repository (aka the central repository). There are several ways to access a remote repository, the most common is to use apache and expose the repository in a url. Alternatively a repository can also be accessed using svn+ssh but it is advised that users use public key authentication with ssh-agent caching their passphrase.
    • svk mirror http://ham.is-a-geek.com/svn/repos/svklocal/ecwork/trunk //ecwork-service_name/trunk

  3. Verify if the mirror has been created
    • svk mirror --list

  4. Sync up the mirror. Creating the mirror just creates a map between the local repository and the remote (central repository). Executing sync performs the actual replication or mirroring.
    • svk sync //ecwork-service_name/trunk

  5. Create a local branch from the mirror
    • svk cp -m 'create local branch' //ecwork-service_name/trunk //ecwork-service_name/local


  6. Checkout a copy from the local branch
    • svk checkout //ecwork-service_name/local /home/service_name/openacs

  7. Configure your checkout to ignore CVS. We will discuss how to commit to CVS later.
    • cd openacs
      svk -R ps svn:ignore 'CVS'

  8. Use the checked out copy as your serverroot, modify your config.tcl accordingly.

A local branch is created so that developers who are familiar with svn can use svn commands or a GUI like TortoiseSVN to perform commits and updates on this local branch. See below how SVK makes it easy to merge the changes from this local branch back to the mirror repository and back to the central repository.

If the repository is accessible only via ssh here's the alternative way to create a mirror of the repository :

    svk mirror svn+ssh://ham@ham.is-a-geek.com/svn/repos/svklocal/ecwork/trunk //ecwork-service_name/trunk

Notice that the URL (http://ham.is-a-geek.com/svn/repos/svklocal/ecwork/trunk) is substituted with the following notation

    svn+ssh://username@hostname/repository_location

Types of Developers

Before anything else you should create your own local repository where you will be able to mirror the central repository if necessary. It's exactly the same steps as we did when we created the central repository. Here's a quick run down :

svk depotmap --init
svk --relocate ~/.svk/local /var/svk

You should now have an SVK repository in /var/svk. You can choose to relocate your repository elsewhere if you wish.

As a developer there are many ways to go about with development given the this setup. Let's enumerate first and then tackle them individually.























TypeCheckout from Repository/BranchDescription







Core Developer 2 Mirror Repository Checkout is made directly from the mirror instead of a local branch. Changes here automatically are merged to the repository as soon as a commit is performed on the working copy.
Project Developer Mirror Repository/Local BranchIf you are restricted to developing only on one project and it is likely that the changes you make will affect only that project. This does not mean, though that changes made by the project developer will not find its way to the central repository.
Offline Project DeveloperMirror Repository/Local Branch You can mirror the central repository or mirror another mirror (from another project based on the central repository) into a local development box and disconnect from the internet.
Core Developer 1
  • Your working copy is a checkout from the central repository.
  • You can use Subversion GUI's like TortoiseSVN
  • Your changes are immediately available to all mirrored repositories as soon as a "svk sync" is executed on the mirrors
  • You need to be online all the time and have access to the server where central repository is housed to be able to commit and update your working copy
  • No need to perform svk sync as you are working from the central repository already

To checkout a working copy directly from the central repository :

svk checkout http://ham.is-a-geek.com/svn/repos/svklocal/ecwork/trunk ecwork

Core Developer 2
  • Your working copy is a checkout from one of the mirror repositories
  • You CAN NOT use subversion GUI's like TortoiseSVN because this breaks the mirror
  • Your changes are immediately merged back to the main repository on commit
  • You need to be online all the time and have access to the server where the mirror repository is housed to be able to commit and update your working copy
  • You still need to do svk sync to retrieve the changes made in the central repository to the mirror you are currently working on and vice versa

To checkout a copy from the mirror, ensure that the mirror also exposes its repository either via URL or SVN+SSH.

svk checkout http://service_name/var/svk/ecwork-service_name/trunk ecwork-service_name

Project Developer

  • Your working copy is a checkout of a local branch created from a mirror
  • You can use subversion GUI's like TortoiseSVN
  • Commits stay in the local branch until an smerge is done between mirror repository and local branch
  • You need to be online all the time and have access to the server where the mirror repository and local branch are housed unless both are in your local dev machine
  • You need to run svk sync to retrieve changes from the central repository

To checkout a copy from the local branch of a mirror repository

svk checkout http://service_name/var/svk/ecwork-service_name/local ecwork-service_name

Regular Version Control

At this point you should now have a checkout (working copy) of the source from any of the following sources.

  • Central Repository
  • Mirror Repository (project repository)
  • Local Branch (local branch of a project repository)

Svk, like all version control systems, has commands to add, remove, update and commit files to the repository. The syntax is very similar to CVS and Subversion so a developer who is familiar with any of the two will have no problems with these common tasks.

Add a File

To add a file into source control, change directory (cd) into your working copy and perform the following on a file that you want to add

svk add file_name.html

Remove a File

To remove a file from source control, change directory (cd) into your working copy and perform the following on a file you want to remove

svk rm file_name.html

Check Status of Files

In CVS, we usually perform a 'cvs -n update' to determine which files have been modified and which files have not been added to source control. In subversion and svk there is a separate command called 'status' that does this. So for SVK, if you want to determine the status of files. This can be executed on a filename, directory or the entire working copy.

svk status file_name.html

Update Working Copy

This is SVK's equivalent to cvs update.This can be executed on a filename, directory or the entire working copy.

svk up working_copy

View Logs

To view the associated logs of a file, similar to cvs log. This can be executed on a filename, directory or the entire working copy.

svk log file_name.html

Diff

This is the equivalent of cvs diff. This can be executed between files in a working copy, between two repositories or between a repository and a working copy.

svk diff file_name1.html file_name2.thml

Commit

This is the equivalent of cvs commit. This can be executed on a filename, directory or the entire working copy.

svk commit -m 'your comment here'

Getting Help

To find out more about the svk commands

svk help commands

To find out more about a specific command

svk help svk_command

Mirrors and Merging

This section is more for the benefit of Core Developer 2, Project Developer and Offline Project Developer. Core Developer 1 will only need to do an svk update to move changes from his/her working copy back to the central repository. For the rest, it is necessary to pull chanages from the central repository and push back changes from the mirror repository. This can be done selectively by using svk push or svk pull and automatically by using svk sync. However, if you are working as a Project Developer where you commit changes to a local branch, before you start moving stuff from the mirror repository to the central repository you need to merge the changes in the local branch to the mirrored repository first. Below are some typical scenarios related to repository mirroring and branch merging and how we solve them using SVK.

Branching in CVS has always been a night mare specially with code that have already been merged in but are getting remerged causing conflicts. With SVK and many other distriuted verson control systems that allow "cherry-picking" or "star-merge", earlier merges are noted and SVK remembers them all so that you don't get conflicts as a result of code already in the repository.

Scenario 1 : Pulling Updates from the Remote Repository

For Core Developer 2

Note that Core Developer 2 works on a checkout directly from the mirror. Simply do an svk sync to pull changes from the remote repository to the locally mirrored repository and then svk update your working copy

svk sync //ecwork-service_name/trunk
cd working_copy
svk update

For Project Developer

Note the Project Developer works on a checkout from a local branch created from the mirrored repository. You must first sync changes between the central and locally mirrored repository by doing an svk sync. Once the mirrored repository is updated you now must merge changes from the mirror to the local branch and then svk update the working copy


svk sync //ecwork-service_name/trunk
svk smerge -C //ecwork-service_name/trunk //ecwork-service_name/local # check if there are conflicts
svk smerge -l
//ecwork-service_name/trunk //ecwork-service_name/local # do the merge
cd working_copy
svk update

Scenario 2 : Pushing Local updates and changes to the Remote Repository

For Core Developer 2

Changes that Core Developer 2 has committed are automatically pushed to the central repository.

cd working_copy
svk commit -m 'your comments'

For Project Developer

Note that the Project Developer works on a checkout from a local branch created from the mirrored repository. Ensure that your working copy is up to date and you have committed all the files that need to be committed to the local branch. Then perform a sync to ensure that we have all the changes from the remote repository. Next do the merge to move changes from the local branch to the mirrored repository. Once the changes are in SVK will automatically push them for you to the central (remote repository).

cd working_copy
svk update
svk sync //ecwork-service_name/trunk
svk smerge -C //ecwork-service_name/local //ecwork-service_name/trunk #check if there are conflicts
svk smerge -l
//ecwork-service_name/local //ecwork-service_name/trunk #do the merge


General Workflow

The image below best illustrates the workflow of a typical Project Developer. An smerge from the local branch to the localy mirrored repository automatically pushes the changes back to the central (remote) repository.












Image courtesy of http://www.bieberlabs.com/wordpress/archives/2005/03/19/explaining-the-svk-workflow


The Big Picture


The image shows how svk works in a single code base multi-project set up. Project 1 uses a centralized method where developers checkout directly from the mirror or a local branch of the mirror. Project 2 uses a decentralized method where developers mirror the local branch of project 2 in their development envrionment.





References :


http://svk.elixus.org/

http://www.bieberlabs.com/wordpress/archives/2005/03/19/explaining-the-svk-workflow

http://www.perl.com/pub/a/2004/03/03/svk.html

Thursday, January 19, 2006

mozdev.org - seleniumrecorder: index

I've been looking at automated UI testing for quite a bit and I've found selenium to be one of the best, but still it was a pain to write it in HTML tables. They call it "selenese".

This recorder will change that to mere copying and pasting.

Read more at seleniumrecorder.mozdev...

Friday, January 13, 2006

Apple - MacBook Pro

It's finally out. The laptop of my dreams...

But wait ....

.. What!!! No 17" screen ? .. no internal modem ? ... no pcmcia slot ?

Just when I thought the anticipation was over ....

UPDATE : Apple released a 17" version just a month after this blog.

Read more at www.apple.com/macbookpr...

Monday, January 09, 2006

Ham's corner office

2005 was a great year of hardware acquisitions. I made the jump to 64 bit via an Athlon64 rig with Dual Head LCDs, 1GB of PC3200 DDR RAM and 200GB of hard disk space.
Finally, a wireless 802.11G network via a Linksys WRT54G.






Learning from your mistakes

I've never been to a John Maxwell seminar. I see him on billboards and I've heard good things about his seminars on radio. I've passed a couple of his books at the bookstore but I never found the interest to pick one up and leaf thru the pages.

Looks like I'll be changing my mind now .... My favourite part of this feature article is his quote.

"Imagine life is a game in which you are juggling five balls in the air. You can name them -- work, family, health, friends, and spirit -- and you're keeping all of these in the air and you will soon understand that work is a rubber ball. If you drop it, it'll bounce back; but the other four balls -- family, health, friends, and spirit -- are made of glass.If you drop one of these, they will be irrevocably scuffed, marked, nicked, damaged, or even shattered. They'll never be the same, and you must understand that and strive for the balance of your life. "

Read more at money.inq7.net/features...