Friday, April 24, 2009

Let's get Jaunty

I am currently upgrading one of my desktops to Jaunty. It is a system I use at work and for the longest time it was running 8.04 which I was happy with.

Then I read about GNOME Do in 8.10, and was tempted to upgrade so that I stop using katapult. However, my experience with 8.10 wasn't very satisfactory. There were a couple of X Windows crashes which I did not have time to look into.

Anyways, I decided to give 9.04 a shot.

On a related note, I came across this article on how Jaunty Jackalope (9.04) is "as slick as Windows 7 and Mac OS X". Not sure if that is the experience that I am looking for.

Tuesday, April 14, 2009

Free Ubuntu eBooks

This link has a list free (as in speech) Ubuntu eBooks.

I have never read or even flipped through a Linux distribution book, so I am not sure how useful these are. I suppose one of these days I have to stop relying on google search to give me answers and actually pick up/print a book.

Monday, April 13, 2009


One of the quickest ways to debug code is to be able to tell how you got to a certain point in your code. So it is useful to be able to dump a backtrace/stacktrace at any point in your code.

I think you can find really good resources elsewhere to understand what a program stack is (for example this or this), so I won´t get into it. As a side note, those two links are some of the best ones I have found to understanding program memory and the difference between program heap and stack.

In C/C++:

This article gives really good information.
In summary, glibc provides backtrace() and backtrace_symbols() to do this quickly.


Use the very useful Throwable class with your logging.

Throwable t = new Throwable();

When running your application, the shared libraries will be searched in wherever the LD_LIBRARY_PATH environment variable is pointing to.

However, sometimes when running applications that your receive with a specific library, you could use another way to indicate just that. is the Linux ELF program loader. It has a few options, but for our use, we need the --library-path option.

--list list all dependencies and how they are resolved
--verify verify that given object really is a dynamically linked
object we can handle
--library-path PATH use given PATH instead of content of the environment
--inhibit-rpath LIST ignore RUNPATH and RPATH information in object names

# /lib/ --library-path my/shared/libs my_app