Tuesday, June 05, 2007

Santa Rosa MacBook Pros : Is it time to switch religions ? ?

Within minutes of reading the Engadget and Gizmodo feeds from google reader about the apple store being down in anticipation of an update, I went to Apple.com and sure enough, I see two giant images of the new MacBook Pros on the frontpage.

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 signed up for alpha testing a new (I guess, locally developed) web 2.0 site (ala friendster).

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

Aside from console.log, there is another javascript command that is available that has been immensely helpful in diagnosing javascript code

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

When I visited the Google Gear's developer site and read about the LocalServer module, the first thing that popped into my head was that it could be useful for speeding up our web applications.

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.

***
The LocalServer always serves a cached resource when the conditions are met, regardless of the network connection. The URLs contained in a store are eligible for local serving without requiring the application to open the store.
***

This basically means that the Google Gear Local Server, using the ManagedResourceStore
  • 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,
and it does this whether the user's computer can access the server or not.

It can be akin to a local proxy server that caches resource files. The difference is that the store resides on the user's PC and not on a separate machine and our web application has control over the cached resources thru a couple of lines of javascript and a manifests file.

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"}
]
}

contents of a sample manifests file

The lines of javascript will be responsible for
  • capturing the resource files into the LocalServer
  • checking for updates
  • updating the captured resource files
Notice that javascript is not needed to tell the browser to use the LocalServer each time a page is loaded, this is done automatically for you by Google Gears without using any additional javasript aside from the first one that instantiates the store and captures the resuource 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.

gears-security

Although this is an interesting idea, I have yet to do benchmarks to determine how much of a speed improvement can be derived from this. As far as my preliminary testing goes I seem to get perceivably faster response times if the bigger javascript and css files are cached in the LocalServer.

Thursday, May 31, 2007

An application I would like to see on Microsoft Surface

Microsoft this week launched Surface which I can only describe as a tool that provides a more human way to interact with computers.

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

I logged in to my google reader account today and found an interesting link called "Offline" on the upper right hand corner of the page.


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

Jeff Vogel writes on IBM Developerworks and shares his "Six ways to write more comprehensible code".

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

One interesting factoid I learned from my high school english teacher is that your personal interpretation, understanding and enjoyment of a book changes with age.

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"

While waiting for feedback from the client, I thought I would share a couple of educational tidbits that I and my colleagues learned in the process of speeding up our ajax web app.
  • 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

Ubuntu has been touted as one of the easiest linux distributions to use. Yuga points out that it failed Serdar Yegulalp's "Granny test" in an article over at Information Week pitting it against Windows Vista.

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'

This basically means that there is less peso for every dollar you exchange.

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

When someone says "eat all you can", the image that you conjure in your mind is of a table or tables lined with all sorts of food from appetizers to desserts and queues of people lining up with empty plates waiting to be filled.

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 .....
Where ?

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.



05272007169
outside the redkimono


05272007168
redkimono menu


05272007175
Tofu Steak


05272007178
kamameshi rice

Thursday, May 24, 2007

Getting your ajax web app to run faster and better.

After designing a nice user interface with ajax and everything, the complaints start coming in that it's slow. Though I wish the client can be more specific but at the moment that's all I have to work with.

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

Kata as defined by wikipedia "is a Japanese word describing detailed choreographed patterns of movements practiced either solo or in pairs".

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

I think it was the creator of firebug who once mentioned that the Zimbra messaging and collaboration suite has over 500 javascript files. For an application to have so much javascript and still function so smoothly, the application developers must have done something right.

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

Like the title says. While it's perfectly alright to have extra commas (,) in a list of objects in Firefox, IE will throw you cryptic messages like "undefined" or something about a "unique identifier".

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

If you've been developing javascript for a while like me, you're probably the type that have alert messages everywhere in your code. Until firebug, came along that was the only way to determine the value of a variable.

With firebug installed on your Firefox browser, you can now replace the javascript alerts with console.log.


var myvar = "This is my variable"
console.log(myvar);


The above code will output the value of myvar in the firebug console when the page is loaded.

Paging with ExtJs Grid Widget (Updated for ExtJS 2.2)

Updated for ExtJS 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
  1. Create the paging toolbar.
  2. 
    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
    })
    
    
  3. Put the toolbar into the bottom bar of the grid component
  4. var grid = new Ext.grid.GridPanel({
    id:'mygrid',
    title:'My Grid',
    columns:[define your columns here]
    store:store,
      bbar:paging_toolbar
    })
    
  5. 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
  6. store.load({params:{start:0,limit:pagesize}});
    
There is very comprehensive FAQ on the ExtJS wiki about the grids component. I encourage anyone who is having trouble with the ExtJS grid component to consult the FAQ.

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

When using YUI's asyncrequest command (YAHOO.util.Connect.asyncRequest), you need to pass a callback with "success" and "failure" functions. Success is where you put code that executes if the request is successfull and failure is where you put code in case the request failed.


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

Just a quick announcement. As part of my "getting serious" about blogging initiative. I have now disabled site feeds from blooger in favor of Feed Burner.

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

YUI has a lot of useful shortcut and helper functions. One that has been helpful to me recently is YAHOO.util.Dom.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

Everyone who's anyone in the web development world has probably heard of dojo but I think many have yet to find out about ExtJS (the javascript toolkit formerly known as YUI-ext).

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

Infinitors (the term we call ourselves, those who once worked for InfiniteInfo) would laughingly remember the "hospital building" where we had our offices. It's called the "hospital building" because it can easily be mistaken for one as it's painted all white. While we can joke about the building, we will always scoff at the elevator system they had in place.

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

Patrick treated us to buffet lunch last Saturday.
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

I drive a 7 year old Honda Civic. I love it because it was one of the very few cars in its time that was not only fuel efficient but also powerful and fast.

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

.... that this life becomes all that you want it to,
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

And I thought "software engineer" was just better sounding than "programmer".

Saturday, April 28, 2007

Old man Ham

In my college days, one of my classmates was a full 6 years older than the rest of the class. We use to jokingly address him as 'old man'.

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 like how this "wanted" ad is worded. It's straight to the point. It tells you what the company is about, who's behind it, why you should consider joining, the qualifications you need and how to get in touch with them.

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

The common routine with ajax based web applications is for javascript to make the ajax request to the server and on the server we write a page with a function in our favorite server side language be it PHP or ASP that performs the request and returns a response.

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

I was at Malapascua last year and the generator the article was referring to at the cell site was quite audible. Too bad I'm not going back this year :-) I would have loved to get a shot of those wind turbines.

Wednesday, March 14, 2007

Beware Paypal Phishing


phishing
Originally uploaded by osirishinzen.
I received an e-mail today supposedly from PayPal, telling me that my account has been changed to a limited access account.

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

I can't say blinking in VGA mode is a good reason to upgrade unless your system suffers from any of the resolved issues in the link above.

Saturday, March 03, 2007

Intel vPro, Big Brother ?

I thought that Intel's vPro technology was just some marketing hype on some already existing technology.

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

Summer is upon us and from what I hear, it's going to be a hot one here in the Philippines. Everyone whom I chat with online who is either in the US east coast or somewhere in Europe are shocked when they hear that my room thermometer reads 30 degrees celsius.

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 ....

Hmmm. Someone from Technorati must've read my last post and wondered ... how does a loser of a blog like this get from a rank of 1,000,000 to 800,000. There must be a bug somewhere.

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've been quite busy in the past few weeks that I haven't checked how my blog is doing. I got quite a surprise to see that I am now ranked 899,581 from number 1,000,000 or so a year ago when I started.
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

" ... I have long felt that most computers today do not use electricity. They instead seem to be powered by the "pumping" motion of the mouse! ..."

http://linuxcommand.org/learning_the_shell.php

Friday, February 23, 2007

YUI is 1 year old, Yahoo offers to host it for free

This is great news. Basically this means that you don't need to include the entire YUI library in your web app. Developers can just load the stuff from Yahoo's servers, sweet!!!

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

恭喜發財

Happy Chinese New Year !!!!

Thursday, February 15, 2007

Coping with Stress, Working at home is not as stress free as everyone thinks ...

I just love reading this blog. As a home web worker my self, I find a lot of articles enlightening. I've lost count of how many times I would say "yeah" or "that's exactly how I feel" while reading their articles.

This one in particular provides some tips on how to cope with stress for the home web worker.

Monday, February 12, 2007

Hoopa !

Hoopa !!! is what the gentleman below shouted as he lit ablaze our dessert of Flaming Mangoes.



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've known for quite a while that the nforce chipset fan (sometimes mistaken for the northbridge) on the motherboard of my PC has been defective. In anticipation I was able to buy a replacement cooler, a Thermalright HR05-SLI. Since, installing this cooler will cause me to completely remove the motherboard from the case, a time consuming endeavor which I do not wish to do often, I decided to kill two birds with one stone and upgrade the noisy stock cpu cooler as well.

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

On a linux terminal type ....
grep -E '^flags.*(vmx|svm)' /proc/cpuinfo


Wednesday, February 07, 2007

Get a screenshot of an X server running in the background

Ok, before I completely forget about this again.
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

When selling a product, the marketing folks would come up with an easy to remember tag line that describes something about the product that's easy to recall.

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

No, it's not a title for a movie ala Fried Green Tomatoes. It just happens to be one of my all time favorite food stuff. We buy them from a chinese deli over at china town. They make great snacks. I like them specially when chilled a little.

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

I'm neck deep in tasks. Or am I really ? Do you ever get that feeling that you're running and running but not really going anywhere ?

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

A friend shared this with me today.
" ... 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 ?

If you think you know everything that is to know about developing Javascript with firebug, think again !
Click the title to the ajaxian blog entry with Joe Hewitt demonstrating the firebug for power-users.

Tuesday, January 30, 2007

Javascript rocks ... seriously

The Ajaxian has a blog post about a javascript api that allows developers to integrate sound into their webpages. Meebo's been doing this a while. It's nice to see that we'd be able to do it too now, thanks to this api.

Sunday, January 28, 2007

She sings a love song to a Mac Pro

I think I'm starting to crave for one of them Macs.
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

I count myself as one of the many that are allergic to seafood, specifically shrimp and crab. In my younger years, I found that I must stay away from food with those ingredients unless I want to end up with itchy red blotches all over my face and body.

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

I can't count myself an Apple "fanboy" just yet but since the news broke out that "pigs can fly" I've been pretty keen about the goings on in the world of Macintosh.

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 ?

I don't get to watch a lot of television. Heck, it's been so long since I've been to a movie theatre I can't even remember what it's like inside. It's a good thing because by the time I figure out that it's something I like to watch ...

- 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

I didn't realize that Google has so many employees already, 10,000 and counting.
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 ?

For those interested to read about Gmail's CSRF security flaw, click the title to go directly to the article over at Ajaxian.

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

This post is about a year old, it is nevertheless an interesting read.
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'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