Loud ramblings of a Software Artisan

Tuesday 27 November 2007


Dear Nokia,

I was trying to download the new firmware image for the N800, but you website is so nicely done that:

  • it download very slowly until it times out
  • I can't use wget to be able to resume the download because you force me to go through an "authentication" and a click-through license that has no legal value.

Any solution?

Update 2007/12/12: still no solution. Filed a bug.

Monday 26 November 2007

libopenraw 0.0.3

I forgot to mention, but Sunday I pushed libopenraw 0.0.3. It still does not do all I want it to do, let alone handling all the file formats I want, but nonetheless, I needed to push it, 10 month after the previous release.

It fixes several crasher, and implement the extraction of the RAW data, including the decompression for most format it already support. Notable exception is NEF that is not decompressed, and tiled DNG that needs to handled (I currently decompress the first tile only).

Get it

I'll try to get 0.0.4 out with meta data extraction. I need at least the orientation tag to fix raw-thumbnailer.

Tuesday 20 November 2007

OOo UI layout

I just added Jan to Planet OOo. Jan recently joined our team at Novell and is working on the UI layout system that was started by Ricardo as part of the summer of code. Read back the history of is blog if you are really interested.

But what is this UI layout system about? It is about making VCL layout widgets as boxed containers instead of pixel sized container. This will allow dialogs to looks nicer on the different platforms (like with Gtk+), and be resizable dynamically (people doing localization will understand).

Welcom Jan.

Monday 19 November 2007

Reading Books, TNG

I guess, I'll stick to paper, still for quite a while. Or using the Gutenberg project with FBReader. Whether the Kindle runs Linux or not does not matter.

Wednesday 14 November 2007

Screen color calibration

Ross, now one needs to integrate that to Gnome, totally. That and your XICC and we can have the display calibration handled in standard way.

For those who wonder about the Spyder2 color calibration hardware support, please read this. Sad. Very sad.

Monday 12 November 2007

Open, the new buzzword

Dalibor comment on the Android SDK licensing. And Paul open questions about the announcement of Open Handset Alliance.

Happy to see that I'm not the only one thinking about that. I believe more in GMAE, and OpenMoko intents, as well as Nokia's, are much clearer.

Sunday 11 November 2007

Lest We Forget

Canada's War Memorial Monument in Ottawa, July 20th 2005.

Today November 11th, is Remembrance Day, in the honor of all the war veterans that suffered to help bring back the peace in Europe about 90 years ago, and later in other various conflict.

Ottawa, ON, Canada - July 20th 2005

Passing Glib::RefPtr<> to boost::bind

I ran into a limitation of Glibmm while using std::for_each() with boost::bind() and Glib::RefPtr<>.

boost::bind() works well with any of the Boost.SmartPointer, or with raw pointers, but not with Glib::RefPtr<> as it lack the get_pointer() function.

I tried to do this:

Glib::RefPtr<Foo> foo;
std::vector<Bar> v;
/* ...initialize foo and v */
std::for_each(v.begin(), v.end(), 
	boost::bind( &Foo::do_something_with_bar, foo, _1 );

But it failed to compile as I was missing the function below.

namespace Glib {
/** Dereference Glib::RefPtr<> for use in boost::bind */
template< class T_CppObject >
T_CppObject *get_pointer(const Glib::RefPtr< T_CppObject >& p)
	return p.operator->();

Some explanations: the function is templated to work with any instance of Glib::RefPtr<>. It is in the the Glib namespace, and will be looked up naturally by the Koenig lookup which in principle allow looking the function up in the same namespace that the argument is in. It uses this ugly operator->() member call because there is no other way to get the raw pointer from the Glib::RefPtr<>, but this is an implementation detail.

Filed bug 495762. Adding it to Glibmm will not break the ABI as it is not a method, and it is a template function, hence instantiated locally. Maybe it could be maybe inline.

The above code is either under the same license governing Glibmm which is LGPLv2+.

Wednesday 7 November 2007

Exempi 1.99.5

Just released Exempi 1.99.5. This will be that last release before 2.0, unless I'm missing something.

Here is the list of changes for 1.99.5:

  • ABI breakage: soversion is now 3
  • Change: API xmp_files_close(), xmp_files_put_xmp(), xmp_files_free(), xmp_free(), xmp_iterator_free(), xmp_iterator_skip() now return bool.
  • Change: API xmp_get_property_and_bits() renamed xmp_get_property().
  • Change: API xmp_set_property2() renamed xmp_set_property().
  • Bug: all API should check about input and return an error if passed NULL.
  • Bug: more exception handling and refactor set_error() use.
  • Bug: add AC_CONFIG_MACRO_DIR to configure.
  • Bug: Lower requirement for libboost to 1.33.0.
  • New: Doxygen API doc generation.

Get the source - GPG signature If you run openSUSE 10.3, get it from my repository

Thursday 1 November 2007

Desktop on server?

"GNOME is attractive to some seasoned Linux users because it one of the few complete desktop environments that is more lightweight than KDE, which makes GNOME more appropriate for use on servers." -- Nicholas Petreley, November 1st 2007

Mr Petreley, you are the reason why I did not renew my subscription to Linux Journal and stopped reading the only dead-tree magazine I considered worthwhile. Not that its content was less good, just that your rants as Editor in Chief were always missing the point.

That was last year.

The question today would be: What would a desktop environement, whether it is KDE, Gnome or any other, have to do on a server? Beside wasting resources. I think it is time for you to stop writing about Linux and start using it.

OK, now I put away the rotten tomatoes.