>An Internal GCC Gem

>Dexen deVries just sent me a lovely little GCC error message: unable to find a register to spill in class. An actual internal GCC error causing the compiler to show its internal intermediate code. This looks like, quoting Dexen, “…ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp…“.

I’ve added this to my collection of GCC error messages. If anybody knows a proper solution to this, do post a comment. Any new error messages are also welcome!

>My favourite machine

>

This machine drives wooden poles into the ground, then the operator puts a concrete pole on top of the wooden pole and drive it too into the ground. This makes quite alot of noice. It goes something like BANG BANG BANG BANG… for about eight hours a day. The photo has been taken from my office window. Needless to say – I’m very fond of this machine.

PS. Another nice feature is that it produces a lot of dust so my car now has a yellow-ish colour tone.

>DM500T and Boxer

>This weekend my DM500-T has finally debuted as my own little media centre. It was given the highly important task of recording the F1 race and store the TS file on my little file server. The file server is a little Debian box built around a slow VIA Mini-ITX card with passive cooling. All that I need to do before it is allowed in the living room is to replace a fan in the chassis with a quite one and get some rubber suspensions for the harddrive.

Installing Debian worked like a charm – starting from the minimal network installation CD, downloading what I needed and configuring Samba to handle the file sharing. All I need to do is to install acpid to make it possible to turn the box off – it does not have a keyboard. Apparently using ssh, logging in and running shutdown was not a wife compatible solution :-)

The only thing that I’m looking for to make the Dreambox setup complete is a good slideshow software for the DM500. Any tips are welcome!

Finally, this was kind of funny.

>Melbourne 2007

>The F1 season has finally started with a nice race. Hamilton proved to be quick, Kovi was a bit of a disappointment, as was the breakdown of Kubica’s car. The results could had been even better than they where (for a BMW fan, that is). A fourth for Heidfeld, with a good part of the race in second place was really good. Hopefully we’ll see both cars there or even further ahead next time.

>Qt Designer Plug-ins

>When creating plug-ins for Qt Designer you always run into the task of implementing a plug-in class. This can be tedious as you pretty much add your class name to a template. Now, thanks to some php-magic, you just have to enter your class name and press a button to get the code. Try it yourself: the Qt Designer Plug-in Generator.

Note! This is beta (alpha) software – not very tested – use it at your own risk.

>Skoda Fabia

>Last week I had my car on service and was given a fairly new Skoda Fabia as a replacement car for the day. I live in Sweden, so I had the car fitted with spiked tires, just in case. As you might already be aware – these tires adds some extra noise, compared to ordinary friction tires or summer tires. Anyway – I just could not understand why the car was fitted with a stereo. Especially as I had to rev it over 4000 rpm to get a decent high-way speed.

But all is not bad – having to rev means having to shift alot and that makes the driving more challenging. To sum thing up, it is slow, noisy and requires quite alot of shifting – but also kind of fun in that regard. It felt good to get my own car back.

>Selecting

>I ran into something peculiar today when using the Model/View classes in Qt 4.2 – probably something related to TaskTracker issue 143383. To demonstrate, let’s start with a minimal model that can be reset from a public method:

class MyStringListModel : public QStringListModel
{
public:
MyStringListModel( const QStringList &items ) : QStringListModel( items, 0 ) {}

void resetModel() { reset(); }
};

I start by initializing the model and viewing it through a QListView:

  QListView listView;
QStringList items;
items << "Kalle" << "Olle" << "Albert" << "Sven" << "Anders" << "Markus";
MyStringListModel model( items );
listView.setModel( &model );

Then I set the current index and select it – this is equvalent to picking it with the mouse (that was how I ran into the issue):

  listView.selectionModel()->setCurrentIndex(
model.index( 3, 0, QModelIndex() ),
QItemSelectionModel::SelectCurrent );

This gives us the following state:

  listView.selectionModel()->hasSelection() == true
listView.selectionModel()->selectedIndexes().count() == 1
listView.selectionModel()->currentIndex().isValue == true

Now, I reset the model:

  model.resetModel();

The situation changes to:

  listView.selectionModel()->hasSelection() == true
listView.selectionModel()->selectedIndexes().count() == 0
listView.selectionModel()->currentIndex().isValue == false

The same thing happens when using select instead of setCurrentIndex. When using the following line…

  listView.selectionModel()->select(
model.index( 3, 0, QModelIndex() ),
QItemSelectionModel::SelectCurrent );

… you get the following:

  listView.selectionModel()->hasSelection() == true
listView.selectionModel()->selectedIndexes().count() == 1
listView.selectionModel()->currentIndex().isValue == false

And after resetting the model it looks like this:

  listView.selectionModel()->hasSelection() == true
listView.selectionModel()->selectedIndexes().count() == 0
listView.selectionModel()->currentIndex().isValue == false

The TaskTracker entry says that the bug is fixed, so this is likely to have been fixed in the Qt 4.3 snapshots. If you’re using an earlier release it looks as if the selectedIndexes().count() is a better way to determine if something is selected.