Monthly Archives: January 2009

Ubuntu 8.04 and Perl OpenGL extension

Recently, I was trying to install the perl OpenGL module for a fun hack I'm trying to write at home.

There was no way of getting it installed. The compilation didn't succeed. The error message from the compiler was something along the line of:


... /usr/lib/xorg/extensions/glx.so: Undefined symbol GetTimeInMillis ...

Searching on the web held the following result (just 1):

Perl and OpenGL: http://ubuntuforums.org/showthread.php?t=948812

Reading the thread, from last October, it was clear that the author found no solution to this problem. A look at the OpenGL extension, and in particular, to its build script revealed that you can compile and link the OpenGL extension with different GL libraries.

Turns out that Ubuntu works with the FREEGLUT library. Thus, doing:

$ wget http://cpan.perl.org/modules/by-module/OpenGL/OpenGL-0.57.tar.gz
$ tar xzvf OpenGL-0.57.tar.gz
$ cd OpenGL-0.57
$ perl Makefile.PL interface=FREEGLUT
$ make
$ make test
(a small demo application should run...)
$ sudo make install

should build and install the OpenGL extension.
More about my fun project later… It's going to be presented at the Nordic Perl Workshop next April…

Why Opera doesn’t work with some web sites? Part 1

Today I received a mail from a friend. Some weeks ago, he tried Opera and then contacted me, reporting some problems with the Vodafone web site. I couldn't reproduce them because a personal account was needed.

Today he got back to me, reporting another site, Adecco's. This time, no login was required, so I could dedicate some time to investigate a bit more on what was happening.

The page is the following, from the Adecco italian web site:

http://candidate.adecco.adeccoweb.com/ecit/_General/DataPages/newCandidate/candidatesearchoffers.asp?MenuSelectedLevel1=115&Selected=1

It's just a simple form, with some SELECT controls and submit button ("Cerca…").
The problem is that using Opera the submit button does not work.

So, I fired up the javascript errors window, and I saw:

JavaScript - http://candidate.adecco.adeccoweb.com/ecit/_General/DataPages/newCandidate/candidatesearchoffers.asp?MenuSelectedLevel1=115&Selected=1
Event thread: click
Error:
name: TypeError
message: Statement on line 46: Cannot convert undefined or null to Object
Backtrace:
  Line 46 of inline#2 script in http://candidate.adecco.adeccoweb.com/ecit/_General/DataPages/newCandidate/candidatesearchoffers.asp?MenuSelectedLevel1=115&Selected=1: In function multiple_TypeBusinessLines
    	for(x=0;x<obj.length;x++){
  Line 81 of inline#2 script in http://candidate.adecco.adeccoweb.com/ecit/_General/DataPages/newCandidate/candidatesearchoffers.asp?MenuSelectedLevel1=115&Selected=1: In function cmdSearch_onclick
    		vTypeBusinessLineId= multiple_TypeBusinessLines().join(gCARACTER_SINGLE_SEPARATOR);
  Line 1 of function script 
    cmdSearch_onclick();
  ...
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

Ooook. Time to learn Dragonfly a bit more… I fired up Dragonfly, and I dug my way through the innards of this site javascript files. It turned out the "interesting" bits are here (javascript ahead):

http://candidate.adecco.adeccoweb.com/ecit/_includes/jscommonbrowser.js

If you open up this file in your text editor, you will see a getObject() function:

//-----------------------------------------------------------------------------
// getObject
//-----------------------------------------------------------------------------
//	Convierte una cadena con el nombre de un Objeto en la referencia
//	de un objeto. 
//-----------------------------------------------------------------------------
function getObject(obj) {
	var theObj;
	if (typeof obj == "string") {
		if (oBrowser.ns6 || oBrowser.ie5) {//si es Netscape6 o Explorer 5
			theObj = document.getElementById(obj);
		} else {
			if (oBrowser.ie4) {//si es Explorer 4
				theObj = document.all[obj];
			}
		}
	} else {
		theObj = obj;
	}
	return theObj;
}// getObject

So, what's wrong with this function? Who wrote this probably wrote it some years ago, because it's still testing for MSIE 4.0 or 5.0, or Netscape 6. Well, no wonder it doesn't work for Opera. Maybe it doesn't work for Safari either, nor for Chrome.

Anyway, time to fix this. How? As Hallvord said on dev.opera.com, it's probably a good idea, and this script shows it, to avoid testing for browsers. Let's test the functionality instead. We need getElementById().

What about this revised version:

function getObject(obj) {
  var theObj;
  if (typeof obj == "string") {
    if (document.getElementById)
      theObj = document.getElementById(obj);
    else if (document.all)
      theObj = document.all[obj];
  } else
    theObj = obj;
  return theObj;
}

I reported the problem through the Adecco web site contact form.
Let's hope that someone will consider it…

Main browsers memory usage

Here's the results of a small "experiment" I made today. I wanted to directly compare memory usage of as many different browsers as possible. I understand it's not a really scientific experiment, but I think it shows some interesting results nevertheless.

You can try it too, and report your results if you want.

So I setup this test on my machine, Windows Vista 32 bit, 3 Gb of RAM, a fresh new account and:

  • Microsoft Internet Explorer 7.0.6000.16764
  • Mozilla Firefox 3.0.4
  • Apple Safari 3.2 (WebKit 525.26.13)
  • Google Chrome 1.0.154.43 (WebKit 525.19)
  • Opera 9.63 (Build 10476)
  • Opera 10.00 Alpha (Build 1139)

For every browser, I fired up the same 3 tabs:

I kept every browser opened, but I had to switch between Opera 9.63 and Opera 10 because Chrome doesn't distinguish between the different Opera processes. I guess because both are named opera.exe in the Windows process list. However…

I used the about:memory tab of Chrome to find out the memory usage statistics. However, I could have used the Windows task manager in the same way, or FAR's process list plugin.

Here's the results:

So here we can see that Firefox and then Opera use the least amount of memory, with a few Mbytes of difference. In Firefox 3 Mozilla worked a lot to keep memory usage low and this (basic) results confirm it. Again, not to defend Opera on this, but Opera has Ad Blocker, Speed Dials, Bookmarks+ Sync, a full Email client and what-not already builtin. It would be nice to do another test with Firefox plus the most popular and used extensions…

And now we can compare the situation when we remove Opera 9.63 and add Opera 10,
which is still in alpha stage:

Another impressive result is that Opera 10 uses less memory than every other browser, and at the same time adds support for WebFonts, passes Acid3 with 100/100, has a new Spell Checker… Do you need more? :)