non-DRM stores

In reply to Rodney’s post:

I pointed to akuma as a non-DRM store last time. They save see music as mp3 you downloaded an you can restore it ONCE. To protect their mp3s they add a watermark.

But it may have some disadvantages (for you):
- It’s in german (though you can pay by paypal for example)
- They don’t have all and every music availible

The second issue is due to the fact that the big labels like Sony and BMG simply do not allow selling their music as mp3. Of course this does not mean that there is only bad music in the store, they really have a lot of good music but they don’t have the music some would call “mainstream”.

gettext ?!

While trying to add import and export of .po files in glom I try to understand how libgettext-po handles erros. In gettext-po.h:


/* Signal a problem of the given severity.
MESSAGE and/or FILENAME + LINENO indicate where the problem occurred.
If FILENAME is NULL, FILENAME and LINENO and COLUMN should be ignored.
If LINENO is (size_t)(-1), LINENO and COLUMN should be ignored.
If COLUMN is (size_t)(-1), it should be ignored.
MESSAGE_TEXT is the problem description (if MULTILINE_P is true,
multiple lines of text, each terminated with a newline, otherwise
usually a single line).
Must not return if SEVERITY is PO_SEVERITY_FATAL_ERROR. */
void (*xerror) (int severity,
po_message_t message,
const char *filename, size_t lineno, size_t column,
int multiline_p, const char *message_text);

This is a callback passed to po_write_file which is called on failure. Hmm, so this method is required not to return if “SEVERITY is PO_SEVERITY_FATAL_ERROR”. How could I do this? Of course I could call exit() but that not really good. An application should usually not die if an error occours. FATAL error occours for example, if the file is not writeable.

The only solution that came into my mind yet was to start another thread that would simply exit if something goes wrong but that is really ugly. Anyone here with better ideas? Maybe I just miss the point.

LibTpz and C++

I am able to write that in the moment because I am hacking on the glom po import/export feature and g++ is just that damn slow that I takes ages to build glom on my Pentium M 1.73 (which is usually not really slow and has great beryl effects now).

Anyway, I have some api suggestions for libtpz (for ThreePointZero). There also is a Project at gna for it now:


Interface TpzIter
{
next();
prev();

get();

equal();
}

Interface TpzList
{
prepend();
append();
remove();

foreach();
copy();

get_length();

Iter* begin(); // first item
Iter* end(); // after last item
}


I have some initial code here but it needs some polishment to be added to svn. I still would like to derive GInterfaces but I doubt that this is possible in C. The design is very close to what the C++ STL provides.

Some might say now, what the advantage over GList* is so here are two points:
- GList* is used for the whole list and for an individual item – that is confusing
- [Edit: Removed]*

So there is another more important point: You can hide your list implementation. In fact, you do not have to use a “list” at all, you could have a tree, an array or any other data structure that you can wrap on that interface. This way, you can also add optimations that are not possible with GList*.

Of course there is a perfomance impact but I think that is not that major that we should not try it. Maybe someone wants to create benchmarks later.

Another thing: Dear Lazyweb, how can I configure beryl to maximize a window like metacity when I double-click on the title bar?

*[EDIT]
This point was not very good but it is still here:
- Writing loops is more intuitive, instead of

/*GList* node = list;
while (node)
{
/* do something */
node = g_list_next(node);
}*/

[EDIT] Some pointed out (correctly) that it is better to write
GList* node;
for (node = list; node != NULL; node = node->next)
{
/* do something */
}

you can use
TpzIter* iter;
for (iter = tpz_list_begin(list); !tpz_iter_equal(iter, tpz_list_end(list)); tpz_iter_next(iter))
{
/* do something */
}

Cerumbin

Falls noch jemand das Glück/Pech hat katholisch zu sein, sollte er sich das Kabarett Cherubim unbedingt mal anschauen.

“API stable”

Of course it is very nice to keep a platform stable over a period of time. But if we want to do that, we should do it correctly. And for me API stability means, that all widgets behave the same they behaved in the stable release before, even if the behaviour was a bit wrong in the previous release.

So Gtk+ 2.10 introduces this bug because the behaviour of GtkAboutDialog changed. I guess the behaviour was not correct before but that really doesn’t matter.

I just imagine how many bugs an application written for Gnome 2.0 and Gtk+ 2.0 will have today if it had not been changed since.

So please do not argue that there is not need for 3.0 because we don’t need API changes…

BTW, thanks much to Don Scorgie for helping so much fixing this help bug.

It’s over!

It’s finally over now! I have written my last exam for the summer term yesterday! Damn, 5 exams in 4 weeks is really hard if three of them belong to those which are known to be the most difficult.

But it’s over, it’s over, it’s over!

libanjutamm arrives slowly

In the little time I was not motivated to continue learning for my math exam on Monday I mostly finished libanjutamm. It is a bit of a hack anywhere but it is possible to get a plugin loaded in anjuta though implementing interfaces does not work yet. There is even a reference documentation!

Take a look at the Sourceview SVN if you want.

Anjuta Bounties

There are now some bounties offered on the anjuta website. Feel free to take some them if you want to improve anjuta and earn some money. Thanks to donors to Anjuta Fund, notably Adam Dingle who would
be giving a significant amount of donation.

Of course everyone is also invited to fix others this. Check Bugzilla for open issues.