" I would love to change the world,
but they won't give me the source code "
-- Unknown Geek
Tuesday, June 05, 2007
Santa Rosa MacBook Pros : Is it time to switch religions ? ?
Oh how I wish they'd just put "Santa Rosa" in there somewhere. I had to navigate all the way to this page and read about the 800Mhz frontside bus before I could confirm that these are indeed Santa Rosa based laptops.
My old trustee IBM bit the dust a few months back and went to laptop heaven. The shop I went to tells me that unless there's some sentimental value in bringing it back to life, I'd be better off buying a new one.
I've been a windows and linux user for as long as I can remember, frankly, buying a laptop with a different OS, even if it's unix based, is scary, specially if it's worth $1999 and up :-)
However, I have to admit both bootcamp and parallels (coherence mode) are tipping the scales in favor of a new Mac. Another problem is that by the time they get to Philippine shores, there'll be new portables to drool over ... and then the cycle continues ...
Which in itself is a good thing because it means I don't need a laptop, at least not yet, otherwise, I would've snapped up one as fast as I got my desktop.
Web 2.0 for a cellphone ?
I'm just as curious as Yuga is as to how a Web 2.0 site will be able to promote mobile phones.
Will the site be viewable in one form or another in the cellphone ?
Will the site provide some sort of special service that users of this new mobile phone can use ?
Also, I would be very interested to find out if they used some sort of development or ajax framework.
I guess I'll find out when I see it.
Monday, June 04, 2007
Debugging javascript with debugger
It's called "debugger".
Just place that command anywhere in your javascript code. When your page loads, execution will stop on the line where you placed debugger. This works on ...
- Firefox with firebug installed
- Internet Explorer with the Script Debugger installed
var myvar="this is myvar";
// execution stops here and the debugger window appears
debugger;
alert(myvar);
Saturday, June 02, 2007
Speeding up loading time by using Google Gears' LocalServer module
I think the web application I am developing right now isn't ready to become an offline web app at least not yet. But when I read the following statement from the Google Gear developer site, I knew instantly that we can indeed use it to help speed up loading time and to acquire slightly better level of control over the user experience when using the web application.
- intercepts all HTTP/HTTPS requests to a resource (be it an image, style sheet or javascript file),
- checks if it is a captured resource and
- serve the resource file from the LocalServer if it is found to be a captured resource,
The manifests file has a JSON data structure with the list of resources to cache in the LocalServer and a version string. This version string is used to determine if the resources in the LocalServer should be updated.
{
"betaManifestVersion": 1,
"version": "6",
"entries": [
{ "url": "/resources/ajaxhelper/gears/gears_init.js"},
{ "url": "/resources/acs-subsite/core.js"},
{ "url": "/resources/ajaxhelper/yui-ext/yui-ext.js"},
{ "url": "/resources/ajaxhelper/ext/adapter/yui/ext-yui-adapter.js"},
{ "url": "/resources/ajaxhelper/ext/ext-all.js"},
{ "url": "/resources/ajaxhelper/ext/ext2-all.js"},
{ "url": "/resources/acs-templating/ajax-list.js"),
{ "url": "/resources/ajaxhelper/ext/resources/css/ext-all.css"},
{ "url": "/resources/ajaxhelper/ext/resources/css/ytheme-green.css"},
{ "url": "/resources/capital-projects/controlpanel/cp.css"},
{ "url": "/resources/jobs-db/controlpanel/cp.css"},
{ "url": "/resources/acs-templating/lists.css"},
{ "url": "/resources/style.css"},
{ "url": "/resources/acs-subsite/old-ui-master.css"}
]
}
The lines of javascript will be responsible for
- capturing the resource files into the LocalServer
- checking for updates
- updating the captured resource files
<script src="/resources/ajaxhelper/gears/gears_init.js"></script>
<script>
if (!window.google || !google.gears) {
// console.log("google gears not installed");
} else {
// console.log("installed");
// initialize some variables
var STORE_NAME="csm_store"
var MANIFEST_FILENAME="csm-gears_manifest.json"
// instantiate google gears
try {
var localServer = google.gears.factory.create("beta.localserver","1.0");
} catch(e) {
// user denied access to google gears
}
if (typeof(localServer) == "object") {
var store = localServer.createManagedStore(STORE_NAME);
store.manifestUrl = "/"+MANIFEST_FILENAME;
// check for changes and capture files
store.checkForUpdate();
// notification for debugging only
/*
var timerId = window.setInterval(function() {
// When the currentVersion property has a value, all of the resources
// listed in the manifest file for that version are captured. There is
// an open bug to surface this state change as an event.
if (store.currentVersion) {
window.clearInterval(timerId);
console.log("Using store version: " +store.currentVersion);
} else if (store.updateStatus == 3) {
console.log("Error: " + store.lastErrorMessage);
}
}, 500);
*/
}
}
</script>
The above script, which is partially lifted from this tutorial, is placed on the landing page of the web site or web application. It loads up the entries from the manifest file into the LocalServer.
This is done only after checking that Google Gears is installed and will not need to be done again until any of the files in the manifest entries change, at which time changing the version string in the manifest file, and rerunning the javascript above will force Google Gears to recapture the files into the local store.
The script also tries to be unobtrusive. It doesn't alert the user that it's trying to use Google Gears and fails gracefully if it isn't installed.
If Google Gears is installed, the user will need to give explicit permission to the page for it to be able to use Google Gears.
Thursday, May 31, 2007
An application I would like to see on Microsoft Surface
It just so happens that one of the TED talks posted over at the TED blog was of Blaise Aguera y Arcas, a software architect at Microsoft, who spoke about and demoed Photosynth.
Play the video to see why i think we could be seeing Photosynth in Microsoft Surface very soon. Heck it might already be in there ....
Google Gears, Enabling Offline Web Apps

Clicking it launches a window that prompts me to install Google Gears that will apparently enable google reader to work offline.
Upon visiting the developer guide for Google Gears, it seems there are some components it has that may be beneficial towards speeding up an ajax web app, like, for instance, the workerpool.
I am going to install it and give it a go. Most people are on broadband anyway so I don't quite see why an Offline app would be any use, unless of course you're constantly on the go, leeching free wi-fi internet access anywhere you can get it.
Premature optimization is the root of all evil
What has been most relevant to me recently is Tip # 5.
Game development isn't exactly the same as web application development.
So my question is, if the client wanted the web app "done yesterday", is it not possible to do optimization while coding ? If yes, is it a good idea ?
Wednesday, May 30, 2007
Rereading the Art of War
She advised us to revisit the books that we've read after ten or so years and attempt to remember our thoughts and feelings as we were reading the book many years before.
Obviously, the text doesn't change (or at least it shouldn't). What does change is ... well, a lot of things. Intelligence, maturity, state of mind, priorities, perspective and many other things that evolve as you grow older, hopefully wiser and more experienced.
Oh yes, I still have the "Art of War" in my bookshelf and I do revisit its pages once in a while. However, the interpretation and format over at sonshi (click the title above) seems to be much better, at least for me.
The spaces between the phrases is like the pause between refrains. It lets you ponder and relish before you read the next set of words, that will equally be full of meaning.
The direct link (?) to the forums related to each phrase is a thoughtful addition and opens up the text to further discussion and interpretation. It's one thing to read it on your own and another to read it with someone and learn about his views of the text.
I have to credit Guy Kawasaki's recent blog post for the link.
Tuesday, May 29, 2007
Lessons learned from "Getting your ajax app to run faster and better"
- It's not just about loading time anymore. Web development a few years ago was all about minimizing the loading time of web pages. This means minimizing the file size of graphics and utilizing CSS for styling. It still is, but today where javascript is as ubiquitous as people during rush hour, web developers also have to consider execution time of javascript. An audit of the javascript code and identifying which part exactly is taking the longest time is the key here.
- A faster PC makes a difference. One observation is how the same web app running on the same browser can perform differently on PC's of varying speed. Again a few years ago, I would've shrugged at the need to have absolutely the latest and greatest for just suring the net. Apparently, web apps like the one we are developing really put the browser to the test, so it demands more CPU power and memory. The more your machine has the better it seems is the experience. Obviously, you have very little control over what your users use to surf to your web app, unless of course it's an internal web application like ours.
- The browser cache is your friend. Pre-loading some of the CSS and javascript files on lighter and less busy pages like the login screen helps. By the time the user logs in, majority of the javascript and css files would have already been cached on the browser so loading time is much improved. We use YUI where the actual javascript files are stored on Yahoo's fast servers. The Yahoo webpages also use YUI so if the user happens to be a regular Yahoo page visitor, then you're in luck as the YUI javascript files may already be cached.
- Two domains are better than one. There seems to be an internal limit on the number of connections that a browser can make to a single domain. Loading your css and other static files from another domain seems to allow us to work around that limit.
- Compression is relative. One of the things I thought of implementing was gzip compression to miniimize load time. Most mainstream browsers since 1999 already have the capability to decompress gzipped content as they are received. This means that I can gzip a 50KB javascript file into a 10KB gzip file and serve that to IE or Firefox and they would know what to do with it. If you happen to be using Apache, you won't need to manually gzip your files as you can use mod_gzip to have Apache do it automatically with a few changes in configuration. On AOLServer 4.0.10 there is the Ns_Compress module but you have to compile aolserver with a zlib parameter that points to the zlib library files on your server for it to work. However, you have to keep in mind that the browser has to deflate/decompress the file for it to be useful, so the speed you get during load time could be once again taken away if you have a slow PC and decompression takes longer.
- Measure, measure, measure. Unlike me :-) , Dave knows the value of good measurements, so he took the time to profile the speed of the webapp before and after each of our attempts and changes. Otherwise, how would we have guessed that compression doesn't necessarily speed up the webapp.
- Optimize javascript. I think the most important thing I learned here is that even if you are using a fast and object oriented javascript library, how you code with it affects performance a great deal. The tips I found on this page helped me optimize my implementation of the javascript code. I didn't see a major jump in speed but I noticed some improvements in perceived execution time.
Ubuntu is not all that people say it is
I hate to say it but I also fell for the "easiest linux" hype. I've been a linux user for 6 years and it's never been as "easy" as Windows.
When I plugin my digital camera to a Windows machine I'm almost certain that it'll just work and that it will show me my photos in an automatically created drive in windows explorer.
In much the same way, I am almost certain that when I plugin the same device to my SuSE Linux machine, I'm bound to check the logs or manually type in a mount command. Apparently it's the same for Ubuntu too.
I recently installed Ubuntu 7 on my brother's PC (who has been using windows since he started using a computer) and he has nothing but complaints. They're nothing a little tweaking can't fix but still cumbersome to not have been preset or configured out of the box.
In conclusion, I agree that Ubuntu has some ways to go. It's probably the easiest linux distribution but it still not as easy as Windows in some cases.
Sunday, May 27, 2007
Peso now 'uncomfortably strong'
Oil price hikes are looming and the transportation sector is requesting an increase in the minimum fare.
So tell me again why a strong peso is good ?
Many might view this as positive for the Philippine economy. This is good news for the government and companies that have dollar denominated debt, but it's certainly taking a while for the regular Juan dela Cruz to feel the positive effects of a stronger local currency.
Eat all you can - Ala Carte
A growing trend that I've observed here in Metro Manila, at least, is to offer "eat all you can" a la carte.
What is it and how is it different from traditional "eat all you can" ?
Instead of lining up to get food, you stay seated and order the food from a set menu. The waiter takes your order and promptly serves it after a few minutes. You can order as many of each food item as you like.
Is it better than traditional "eat all you can" ?
In my opinion, yes !!! It's better because ....
- You don't need to stand up every now and then to get food from the buffet table.
- You don't feel the pressure to get the best part of the roast duck or worry that you'll run out of shrimp tempura.
- The waiter does all the work.
- Insert other thoughts why it's better here .....
I have had the pleasure of dining in two such restaurants and they happen to be both Japanese. The first is at Zensho (click the link to read a review) over at Tomas Morato, Quezon City and the other one at the redkimono at the Fort Strip, Taguig.
Too bad I misplaced the pics from Zensho I really like the dining experience as it was also teppanyaki, the cook put on a good show and the food was good too :-)
The redkimono's specialty is kamameshi rice. It's a rice dish with toppings served in a wooden platform. I would recommend the Ebi (shrimp) kamameshi. The shrimp according to my brother was firm. The crunchy california maki is unique and the sukiyaki was fragrant.
Thursday, May 24, 2007
Getting your ajax web app to run faster and better.
What I don't know is whether it's slow on certain parts of the application or whether he means the loading time takes forever.
I'm now determined to scour the web for everything and anything to get this web application to run like a desktop app. Impossible, you say ? Maybe not, if our user is on broadband and he has a considerably mainstream PC as a lot of computing power is done client side now thanks to javascript.
So what have i found so far that seem useful :
http://www.peachpit.com/articles/article.asp?p=31567&seqNum=5&rl=1
http://ajaxpatterns.org/On-Demand_Javascript
http://www.zimbra.com/blog/archives/2006/07/oscon_ajax_slid.html
http://www.crockford.com/javascript/jsmin.html
If anybody has anymore, just go ahead and let me know.
Wednesday, May 23, 2007
Javascript Kata
Javscript certainly isn't a form of martial arts, however, it's such a liberal programming language that it is easy to get lost or fall prey to bad habits.
While not a martial art, it takes discipline to code.
Patterns or Kata for javascript that are accepted and proven ways to write the language are certainly invaluable, at least to me :-)
Tuesday, May 22, 2007
Zimbra
Now that I'm into web 2.0 application development. I think I could learn a thing or two from these guys.
Monday, May 21, 2007
Avoid extra commas (,) or IE will drive you crazy
The code below will throw the mysterious error messages. See the extra comma at the end of the list of objects.
var myobjlist = [
{name:'status_id', type: 'int'},
{name:'bay_id', type: 'int'},
{name:'project_id', type: 'int'},
];
Sunday, May 20, 2007
Replace javascript alert with Firebug's console.log
With firebug installed on your Firefox browser, you can now replace the javascript alerts with console.log.
The above code will output the value of myvar in the firebug console when the page is loaded.
var myvar = "This is my variable"
console.log(myvar);
Paging with ExtJs Grid Widget (Updated for ExtJS 2.2)
Paging has changed a bit for ExtJS 2.0 from ExtJS 1.0 . In order to get grid paging to work with the grid component on ExtJS 2.2
- Create the paging toolbar.
- Put the toolbar into the bottom bar of the grid component
- Call the data store's load function with start and limit parameters. Initially, start should be 0 while limit is the pagesize you pass to the paging toolbar
var store = this is the same store used by the grid component
var pagesize = 25;
var paging_toolbar = new Ext.PagingToolbar({
pageSize: pagesize,
displayInfo: true,
emptyMsg: 'No data found',
store: store
})
var grid = new Ext.grid.GridPanel({
id:'mygrid',
title:'My Grid',
columns:[define your columns here]
store:store,
bbar:paging_toolbar
})
store.load({params:{start:0,limit:pagesize}});
The item in the FAQ that tackles paging can be found here.
Deprecated : ExtJS 1.0.1 is no longer available but I'm keeping the old content available below just case anybody still uses it for some reason. If you still are, though, I strongly suggest that you should upgrade to ExtJS 2.
There's lots of things to love about ExtJs. The grid widget is one of them. With ExtJs 1.0.1, paging has never been easier. Click the title for a quick tutorial about paging with the grid. If you're new to ExtJS there is a beginner's guide here.
Once you've defined your grid. The snippet below is one of the things you need to add in order to make the paging toolbar appear on your grid.
// create paging
var gridFoot = datagrid.getView().getFooterPanel(true);
var paging = new Ext.PagingToolbar(gridFoot, dataModel, {
pageSize: 20,
displayInfo: true,
displaymsg: 'Displaying {0} - {1} of {2}',
emptyMsg: "No records found"
});
paging.bind(dataModel);
Friday, May 18, 2007
Passing additional arguments to YUI asyncrequest
var callback =
{
success: function(o) {/*success handler code*/},
failure: function(o) {/*failure handler code*/},
argument: [argument1, argument2, argument3]
}
YAHOO.util.Connect.asyncRequest('GET', "http://mywebsite.com", callback, null);
When making an ajax request, sometimes you want to be able to manipulate or access variables that are outside the scope of the success or fail function. Here's where the "argument" parameter of the callback comes in.
I discovered that I can literally pass anything I want as an argument. For example, after a successful request, I may want to read additional javascript variables to do further processing. I can even pass a javascript object.
In the snippet below, the argument is appended into "o" the object that is passed into the success and fail functions. To access your argument from either the success or failure functions, you need to use o.argument.argument_name.
var myvar = "this is a variable";
var callback =
{ success: function(o) {
/*success handler code*/
alert(o.argument.extvar);
},failure: function(o) {
/*failure handler code*/
alert(o.argument.extvar);
},argument: { extvar: myvar}
}
YAHOO.util.Connect.asyncRequest('GET', "http://mywebsite.com", callback, null);
Thursday, May 17, 2007
Bye to Blogger Site Feeds, Hello FeedBurner
Please unsubscribe from your current feed subscription and click the link on the side bar to subscribe anew.
Thanks for reading !
Wednesday, May 16, 2007
YUI's getElementsByClassname
It returns a javascript array of html elements that have the same classname. This is particularly useful if you want to change the look of a group of html elements like say in a menu bar or in a navigation sidebar.
The snippet below uses getElementsByClassName to get all html elements with a class "sidebarbtn". It also allows you to further qualify what type of html element. In the example below, we are looking for "div" elements with the class "sidebarbtn".
var els = YAHOO.util.Dom.getElementsByClassName('sidebarbtn', 'div');
for (var i =0; i <= els.length; i++) {
YAHOO.util.Dom.removeClass(els[i], "selectedbtn");
}
YAHOO.util.Dom.addClass(selected,"selectedbtn");
Tuesday, May 15, 2007
ExtJS
In fairness to dojo, I think ExtJS is bordering along the lines of bloatedness but like dojo you get to mix n match and use only the libraries from the toolkit you need.
So what do I like about ExtJS so far;
- Choice. It started out as a project that extends YUI but it has now expanded to include jQuery and prototype.
- Widgets. The draggable treepanel and grid widgets are killer.
- Clean Object Oriented Code. Code can be easily extended or even overwritten if necessary. The uncompresed code is clean.
- Documentation. While incomplete the documentation and examples provided are clear.
- Themeing. I love being able to change the theme for all widgets .
Monday, May 14, 2007
Joel on Elevator Technology
What Joel describes as "New Elevator Technology" has been around in the Philippines, in fact, as early as the year 2000 when I joined InfiniteInfo in their then new offices at the Page I building (aka "the hospital") over at Alabang.
It must be great and efficient for a high rise like 7 over at the World Trade Center but it's a nightmare on a building that is less than 20 storeys.
Here are our common complaints and quirks which may or may not be related to the technology itself :
- The elevator is always broken.
- There are only 2 elevators.
- It takes forever for one to be available during rush hour.
- If you forget to key in your floor and you step in the elevator, you have to step out on the next stop to press your floor number at which time you may already have passed your floor.
- Pressing *(insert floor number here)* is suppose to prioritize your floor. It doesn't work :-)
Sunday, May 13, 2007
Mother's Day Buffet
I don't think we were planning to go buffet, somehow our legs (or was it our stomachs) dragged us to the doors of Saisaki and before we knew it we were diving into "eat all you can" sushi.
Arnel and Jeff, there's always next time :-)
I hope Deds can upload the photos somewhere :-)
Sunday is Mother's day and the family was planning to have a nice quiet "a la carte" meal at the Serendra. We set our sites on Conti's. We were there early, it was only 11 am but the place was filled and we were number 15 on a waiting list.
That's how we found ourselves at the door step of the Brazilian BBQ. Yes it's buffet again but it's "eat all you can" BBQ this time. All kinds of BBQ from leg of lamb, chicken and pork to believe it or not BBQ'd banana and pineapple.
Our first time in a brazilian barbecue and it was a novel experience.
- There was a typical buffet table with pasta, rice, appetizers and desserts.
- Barbecue is served in metal skewers right off the grill and sliced at your table.
- You use a yoyo to tell the servers if your table would like to be served barbecue. The green side tells them to keep it coming while the red side tells them you don't want any more.
driving automatic
Honda owners I've talked to would rave about how long their next full tank was and how the fuel meter stays at F for the longest time.
It's the type of car that you love to drive .... when there's no one else on the road.
It's a "stick" shift. It has manual transmission and a clutch. While it's a joy to drive in the wide open roads of Fort Bonifacio, you'll balk at how your feet are killing you when you're stuck at rush hour in Edsa.
I recently had a chance to drive an automatic. My first automatic at that. It's not going to win any races but it's definitely fuel efficient, seats eight people and comes in electronic blue.
It turned heads the first few times. It's probably because people are shocked to see 8 people coming out of such a compact vehicle. No, I'm sure it wasn't the paint job :-)
I still love my Honda but if I ever was going to be stuck in traffic for 2 or more hours or maneuver a tight parking space then I would thank my lucky stars that I'm driving an automatic.
Friday, May 04, 2007
my wish
Your dreams stay big, and your worries stay small,
You never need to carry more than you can hold ...
Monday, April 30, 2007
As the Software World Turns, Part 1: Engineers In, Programmers Out
Saturday, April 28, 2007
Old man Ham
It was amusing then but kinda uncanny now that I'm 30.
My metabolism is slower, I'm getting fat (no doubt from all the 'eat-all-you-can' buffets), I have white hair and I think I am starting to see a bald spot.
I had lunch today with Patrick. He asked me about future plans like whether I'm interested to put up a business or if I plan to migrate to anywhere someday. Thinking about it now I probably sounded like an irresponsible happy go lucky shmuck with answers like 'I don't know', 'I haven't thought about it' and 'I'm just taking my time .. enjoying life/work'.
There was a time, a long, long time ago when the family lived in a very cramped apartment. My Dad was overseas and money, the lack of it, was a problem. I remember a time when my younger brother and I once stared at chocolate cupcakes that we knew we liked but couldn't muster the courage to ask money for. It was a stressful time for my parents and we the children felt it.
I just feel blessed today that I don't have to ask money for a chocolate cup cake anymore :-)
Yes, I know, I will need to answer those life questions ... eventually ....
Thursday, April 05, 2007
Parakey is looking for Employee #3
I liked it even better because it did not contain the typical "job wanted ad" jargon about graduating from a four year course with a bachelor's degree in "whatever" :-)
I don't quite qualify, though, because I don't think half the word on that ad is "bullshit" (read the part about Skepticism) though I would agree that they'd get a lot of responses if they started it off with that word in bold :-)
Accessing the Database using Javascript
Well, IBM released a javascript API that lets developers use javascript to update the database of their web applications directly. It still needs a server side gateway to process the requests, nevertheless, it's an interesting concept.
What are the Pros and Cons ? Will the time come where all logic will be in the front end using javascript and we'll have no need for such server side languages like PHP, ASP or even TCL on Aolserver ?
Sunday, April 01, 2007
Wind Power for cell sites
Wednesday, March 14, 2007
Beware Paypal Phishing
Here are the tell tale signs that told me instantly that this was a phishing attempt :
* The e-mail address was sent to ham at solutiongrove.com instead of the e-mail address I used to sign up for Paypal
* The FROM field is from update@service.com. Shouldn't it at least be from an e-mail address in the paypal domain ?
* When I mouseover the login link, I noticed that it goes to http://residents.oakbrookwalk.com/loggin.php.
A good thing is that if I had failed to see the signs above, Firefox would have warned me instantly that it's a phishing site.
Sunday, March 04, 2007
VMWare Server 1.0.2 is out
Saturday, March 03, 2007
Intel vPro, Big Brother ?
Well, apparently, it's not all hype. As the video will demonstrate, it does offer some very interesting built in tools for serious enterprise system administrators and possibly Big Brother ;-)
As a side note, I actually feel disturbed that someone from the cable company can remotely connect to my cable box and potentially find out what I am watching ;-)
one way to save on electricity bills ... upgrade your linux distribution
I've gotten responses from the typical "are you sure (your thermometer's not broken) ?" to the more extreme "that's insane !!". I shouldn't be surprised. Dirk who lives in Germany, for instance, says that it's 12 degrees celsius and he calls the weather warm.
One thing is for sure, my household electricity bill is going to go up because primarily of air conditioning. It's not uncommon for temperatures here to go up to a toasty 33 to 34 degrees celsius during the day or at least that's what my room thermometer tells me.
Oddly, to many, one solution I thought of is to upgrade my linux operating system.
Don't get me wrong, Suse Linux Enterprise Server (SLES) has served me incredibly well for over a year now. It is stable and has kept my system running almost 24x7 with very minimal problems. I take comfort in knowing that when I wake up everything I left open last night or in the early morning will still be open and the system will still be up and running like I never left my desk.
I knew that if I wanted to save a little on my electricity bill, I needed to turn off my PC when I'm asleep and be able to start it up fast when I need it, like it was never turned off.
Unfortunately, I couldn't get the hibernate or suspend feature to work and "Cool n' Quiet", the AMD technology that throttles cpu frequencies to lower levels when it's idle thereby consuming less power, messes up the clocks on my virtual machines. So it's turned off.
I spent half a day today upgrading to openSuse 10.2. It's probably the fastest and most efficient upgrade I have ever done. It's all thanks to VMware server. I'll save that story for another blog posting. What's important to note right now with openSuse 10.2 is that hibernate works, at least it does flawlessly on my system.
Now, all I need to do at the end of my working day is to hibernate my PC and configure the BIOS to power up my machine at a pre-configured time which is hopefully before I wake up and start work the next day.
I'm going to do it for the first time tonight.
I'll probably find out if it made a dent on my electricity bill after a month. I'm hoping it does.
short lived ranking ....
Well, they seem to have fixed the bug because I'm back to 1,000,000 plus.
However, it seems there's another bug they haven't fixed. It says my blog is linked to 3 other blogs although the list shows 5, interesting .....
Tuesday, February 27, 2007
Getting serious about blogging
I have to credit that article I wrote about Skype over at the PinoyTechBlog and that blog post I wrote about how virtualization can boost your productivity.
I have also signed up for a free mybloglog account. It tells me a thing or two about what people visiting my site view or click in the past 5 days. If it starts to get real interesting, I might consider getting a premium account.
Quote of the Day
http://linuxcommand.org/learning_the_shell.php
Friday, February 23, 2007
YUI is 1 year old, Yahoo offers to host it for free
On a related note, I found this http://blog.davglass.com/2006/06/yui-code-samples/. The guy wrote some excellent reusable components, widgets and stuff from YUI.
Sunday, February 18, 2007
Thursday, February 15, 2007
Coping with Stress, Working at home is not as stress free as everyone thinks ...
This one in particular provides some tips on how to cope with stress for the home web worker.
Monday, February 12, 2007
Hoopa !
Cyma is one of the few mediterranean restaurants in the Metro Manila area that I know off and I had the pleasure of having lunch last sunday in their branch inside the Edsa Shang-ri La with the family. Our only experience with mediterranean food is with Cafe Mediterranean's Gyros so we were feeling rather adventurous not to mention hungry. It was almost 2pm when we got to the place and all the tables were filled. Since it was already quite late, we didn't have to wait too long to be seated.
The center of attraction is when they serve flaming dishes. The waiter seving the dish would light it up and everyone shouts Hoopa ! We enjoyed being the center of attention twice, once with their Flaming Cheese (appetizer) and finally with their Flaming Mangoes (dessert)
Here are a couple of scrumptious pics I took of the food we ordered. I had to shoot fast before the food was all gone, so please excuse the amateur photos but I hope they're enough to get you salivating.
Saturday, February 10, 2007
Broken nForce Chipset Cooler, Saving my PC from Overheating
I was eying the Thermaltake Sonic Tower but decided to go with the Scythe Ininity after Roel mentioned he was getting one for his new rig and reading some excellent reviews about it. I like tower coolers in general because they give you the option to cool the CPU passively just by removing or not installing a fan.
Anyway, today, I didn't notice that the chipset fan on the motherboard totally stopped spinning until my PC started becoming slightly unstable. I had no choice but to replace the parts now.
Well, I just completed the replacements. Pics below. I definitely noticed it's quieter and temps seem stable at around 46C.
Update : After some time to settle in, it seems my idle temps is about an average of 40C. No time yet to test temps on full load.
Friday, February 09, 2007
Check if your cpu supports virtualization
grep -E '^flags.*(vmx|svm)' /proc/cpuinfo
Wednesday, February 07, 2007
Get a screenshot of an X server running in the background
To capture a screenshot of a running X server instance in the background,
On a linux terminal type ...
DISPLAY=:X import -window root xvfb.png
where X is the display number where the X server is running at and xvfb.png is the output, the file with the screenshot.
Sunday, February 04, 2007
Use my Javascript ... It's Light Weight
I think the tagline or tagword for the new and upcoming javascript frameworks is "lightweight".
Just see how "lightweight" is touted as a positive characteristic of these javascript products/frameworks.
MooTools : http://moofx.mad4milk.net/
JQuery : http://jquery.com/
Plotr : http://www.solutoire.com/plotr
It's almost like saying Prototype, Scriptaculous, YUI and Dojo are bloated ;-)
Saturday, February 03, 2007
Pickled Green Mangoes
It's really just a coincidence that the brand name is the last 6 letters of my first name.
Friday, February 02, 2007
Swamped but Coping
How do you cope ?
Patrick a few weeks ago introduced me to emergent task timing . The idea, it seems, is to force yourself to be aware of the time you spend on tasks by checking in every 15 minutes. There is flash application with a time sheet you can mark. It sounds an alarm every 15 minutes to remind you to mark the sheet and to adjust your tasks accordingly.
Does it work ? I'll find out soon.
Thursday, February 01, 2007
Bitterness
" ... Look at Joseph at the end of his life. He had been abused by his family, had his reputation ruined by being falsely accused of adultery, he was forgotten by friends, and at times it must have felt as if God had forgotten him. But at the end of his life, when faced with those who were responsible for the years of slavery and pain, he forgives his brothers. He said to them: 'You meant it for evil, but God meant it for good.' Despite all that has happened to him, he acknowledges the sovereignty of God, and God's amazing creative ability to bring good out of evil... "
Wednesday, January 31, 2007
Are you a Firebug power user ?
Click the title to the ajaxian blog entry with Joe Hewitt demonstrating the firebug for power-users.
Tuesday, January 30, 2007
Javascript rocks ... seriously
Sunday, January 28, 2007
She sings a love song to a Mac Pro
Click the title to see a Filipina singing modified lyrics of James Blunt's "You're Beautiful" to a Mac Pro. Hilarious !
Sunday, January 21, 2007
Enjoying my Seafood inspite of my allergies
While growing up, I discovered that certain things will allow me to enjoy seafood without very adverse effects.
1 - Devein the shrimp. Deveining removes the vein or the dark line that runs along the back of the shrimp. I noticed my allergies are less intense when eating deveined shrimp.
2 - Avoid the head of the shrimp. It seems whatever is causing my allergies, as far as shrimp goes, is heavily concentrated in the head so I stay away from it and eat the body only.
3 - Cider Vinegar and Pepper. I dip shrimp and crab meat in cider vinegar with pepper before I put it my mouth. I feel that it tastes really good and more importantly it seems to counter act the itchiness I usually get in my mouth after eating it.
4 - Lemon. I discovered this while dining at a UCC coffee shop. The water they served smelled like rubbing alcohol, at least it did to me. I inquired and it was in fact lemon and NOT rubbing alcohol. It seems dipping shrimp and crab in lemon has the same effect as cider vinegar and pepper. Alternatively, I found that I could chase away the itchiness in my mouth if I drink water with some lemon juice.
WARNING : The above are based on my personal experiences only. I classify my condition as mild. People with very serious reactions to seafood like shrimp or crab should consult a physician. As mild as the term "allergy" sounds, there have been known incidents of people dying due to allergic reactions. You have been warned !
Wednesday, January 10, 2007
there's an iPhone after all
Just a few hours ago Steve Jobs announced to an ecstatic crowd the availability of a mobile phone developed by Apple. I'm not sure I share the same sentiment. It's cool but will it fly this June 2007 ?
Monday, January 08, 2007
Are you on the list ?
- It'll be on the internet (e.g. youtube, peekvid, dailymotion).
- If it's a TV series, I can watch all the episodes in succession without worrying about schedules.
One thing I did notice about my TV and movie habits is how many of the stuff I watch are about super heroes. Not heroism in the patriotic everyday sense but rather seemingly ordinary people with extraordinary abilities.
Hero is no exception.
What's different about it is that, it's good, really good. It's the kind of series that makes you ask the obvious questions but it keeps you engaged with the wonder of discovering the answers. Like the recent big screen encarnations of Spiderman and Superman, the writers attempt to add the 'human' component. The characters are not portrayed as 'super heroes' but human beings with special abilities. Yes, there's a difference. The former connotes a level that you or I can never achieve while the latter identifies us mere mortals with the characters.
If you're in the US, you'll be able to see the episodes from http://www.nbc.com/Heroes/episodes/. Outside the US, I would suggest http://www.peekvid.com.
Friday, January 05, 2007
Google Answer to Filling Jobs Is an Algorithm
They've been known to do the most innovative things to attract prospective employees. Remember the math problem on the billboard ?.
Looks like they're going to go a step further and innovate the selection process with an alogrithm.
Click on the title to read the NY Times article.
Tuesday, January 02, 2007
Gmail's CSRF Security Flaw, is OpenACS vulnerable to a CSRF attack ?
Don't be misled, just because it's in the Ajaxian, doesn't mean that this is purely a problem with web applications that use Ajax. In fact, if I understand CSRF correctly, an out of the box OpenACS application that uses ad_form is possibly vulnerable. Well, except for the login form :-) Curious ? read on ....
What is CSRF ?
CSRF is an acronym for "cross site request forgery". Also known as "session riding", it describes a malicious exploit where a script takes advantage of an authenticated session to get information, like in Gmail's case, your contact list, but in other cases can be your personal or, worse, your financial information from the site that your browser is currently authenticated with.
How does it Work ?
The players involved are (A) you, the user, (B) the site with the malicious script and (C) the website where you are currently logged in or authenticated with. Examples of (C) are Gmail, your online banking website or an OpenACS web application.
The scenario would go something like this.
The user (A) logs in to (C) and stays logged in by checking "Remember me on this computer". On another window or tab, (A) goes to a website (B) with the malicious script. The script in (B) gets executed either from clicking a link or loading a page. The script from (B) will attempt to access (C) using the authenticated session and attempt to retrieve information like your contact list or other information.
Javascript can't do that ! Can it ?
Javascript is not suppose to be able to have access to cookies from other domains. Cookies are used to determine if a user is logged in to a site. They contain session information and other user specific information, hence, the browser imposes this cross domain limitation on javascript. In short, you can't use javascript to fake or manipulate cookies of other domains.
So this exploit will only work if the user (A) is logged in to (C) at the moment the script in (B) is executed.
Where did Gmail go wrong ?
In the case of Gmail, they were exposing a URL that returned JSON structured data that contained the contact list information. Hence you can actually put this url in script tags with the src pointing to this url. Like so
<script type="text/javascript" src="http://docs.google.com/data/contacts?out=js&show=ALL&psort=Affinity&callback=google&max=99999"></script<
While the browser prevents javascript from one domain to control a window in another domain, it will however allow you to specify a javascript source file from another domain.
I'm sure Gmail checks that the user is logged in before actually serving the javascript source file but after this check it has no way of knowing for sure that it was the user who requested it or a script from (B) a malicious website.
Is my OpenACS Web Application vulnerable ?
Unless your OpenACS application is running a web service or providing some sort of API, chances are its not.
he turned down an offer from Google
He blogs about how his 2 day interview with Google went and how (and more importantly, why) he turned down their offer.
Saturday, December 30, 2006
Notes on recent AOLserver research
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
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
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
Upgrading to a larger hard disk
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 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.
Debug Javascript with Firebug
Joe Hewitt introduces you to Firebug on this video.
Monday, December 11, 2006
Are you an INTJ ? Take the test and find out.
Nope, don't worry, it's not from COSMOPOLITAN or some women's magazine ...
Saturday, December 02, 2006
Encounters with IE
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
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
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
Create a shell script in your home directory using your trusty editor, name it 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 ?
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 ?
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
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