phim xxx

indian girls

PPAM 2007

I have just returned from my first scientific conference. It was PPAM 2007 held in Gdansk, Poland. The most important thing is that I went there not only as a “viewer”, but as an active participant, presenting my first paper — End to End QoS Measurements of TCP Connections. The article will be published in upcoming LNCS (Lecture Notes in Computer Science) by Springer. The article will also be published on my website after the print is complete. Here is the abstract:

 

This paper presents selected issues on quality measurements of TCP connections, seen from the end user’s perspective and not from the service provider’s point of view. The main focus is put on selection of parameters, which values are worth gathering, and can be gathered without disturbing end user applications. To verify the presented ideas, a measuring tool — QMP (QoS Measurement Plug In) was developed. QMP is placed inside the kernel of Linux 2.6 operating system as an extension to the packet filter. The paper shortly describes the tool and some experiments performed with it.

WordPress

Just switched to WordPress. Nanoblogger is nice, but its development has been terminated.

Most content has already been moved to the new engine, but permanent links to old blog entries need to be redirected to new ones. Hopefully it will all make me catch up with the blog – much has happened during last few months.

Sorry for the fuzz with RSS that will probably take place…

Container plugin

Just checked Qt 4.3rc1 for a containter extensions support. Still doesn’t work, even for their own containerextension example. Tough luck…

Overwhelmed

I’m soooo overwhelmed with work today… I’m working all day since morning and I feel like as far from my goal as I was few hours earlier…

What do you feel? Do you feel having enough time for your hobbies and other free time activities?

John Higgins – World Snooker Champion 2007

John Higgins has just won the World Snooker Championship for the second time. Hurray!

John Higgins

UIC problems with custom container widgets

 

Recently I’ve been spending much time developing “wwWidgets” – my set of custom widgets for Qt4. Among others, the set contains widgets that are multipage container widgets that have to be treated in a special way – by providing an extension to Designer that tells it how to add or remove new pages to the widget.

Unfortunately Designer seems to be having much trouble with that currently. I could even call it the biggest misdesign in Qt4 (at least the biggest I’m aware of). Container widgets need to be handled on two levels – first Designer has to save some information about the custom widget in the UI file and the UIC has to process the file and generate C++ code that does the widget layout. The problem is that Designer doesn’t provide enough information for UIC to generate code that adds pages to multipage container widgets. The “misdesign” is that currently UIC checks the class name of the container widget and if it is a subclass of QTabWidget, it calls addTab(child, label), if it is a subclass of QStackedWidget, it calls addWidget, but for all other widgets it ignores the multipage nature of the widget and just makes a parent-child relationship between the container and its pages. As one might expect it leads to unpredicted and unwanted behaviour.

I contacted Trolltech about it and they said they were working on it and it should already be solved in Qt4.3 beta. Unfortunately class and method names are still hardcoded into UIC. For the time being I suspended dealing with the problem as I don’t want to reinvent the wheel trying to come up with a fix if Trolls are already working on it (it means I’m giving them a chance to improve the design).

However this doesn’t mean I’m not thinking about possible solutions or temporary workarounds and I came up with three possible fixes.

Method 1

The first (and probably the best) idea is to somehow store the signatures of methods needed by the widget to manipulate its pages in the xml description of the custom widget added to each UI file using the widget. Then UIC could use that information to generate code that would call a proper method to add pages to widgets. The only question is, how to retrieve such data. According to me there are two possibilities. First involves the custom widget interface that accompaniates each widget plugin. There is a reserved method codeTemplate which was probably intended to do exactly the thing needed here – provide a template code to be used by UIC. The second possiblity is to use Q_CLASSINFO() macro to embed such information directly in the widget itself in a simmilar manner.

Method 2

The second method is somewhat simpler – let’s just assume the method to add new page has to follow some well known naming scheme or that the container widget has to implement some interface which serves the purpose of letting UIC use well known (hardcoded) method names to manipulate widget pages.

Method 3

The last method is merely a workaround that can be applied with existing Qt versions without the need to patch any Qt code. Qt objects receive a special event (QChildEvent) that informs that a child was added or removed from the object. It could be used to intercept the pages inserted with the faulty behaviour of UIC so that the widget itself could incorporate the child as its page. Of course it means it wouldn’t be possible to add child widgets to the widget “the traditional way” as all widget children would be treated as pages.

Comments on Qt Centre programming contest

Today I posted a note to QtCentre regarding upcoming closing of the contest registration period and I’d like to write a few words of comment and thoughts regarding the contest.

First of all I am surprised by the total lack of entries in the “Mobile Application”. Given the fact that you can win a magnificent device (belive me, I played with it last year) worth probably about $1000 (Trolltech sells it for $700 but it’s less than the Greenphone market value) that can actually run your application (assuming you don’t already have such a device) I expected a flood of entries in this category (I’d take part in the competition myself if I could).

Second of all right after the contest has been announced there has been a little wave of comments suggesting some kind of con or enourmously strict rules of the contest (for example look here). I will only say that such aqusations are unfair. You can read my detailed opinion directly on Dot.

Third of all I’m surprised only three entries have been submitted to the “Development Tool” category. Knowing that at least three IDE projects exist for Qt4 (and not all entries in the category are IDE applications) and there are surely more initiatives related to development (wizards, documentation tools, parsers, frontends, etc.) it is weird that none of them entered the competition.

Fourth of all while organizing the competition we managed to extend our contacts in Qt world. At last I don’t feel like walking blindly in Qt world, so this is an obvious benefit of the whole initiative for me. Hopefully one day Qt community may benefit from that.

There are still almost two weeks remaining for people to register their apps so hopefully all my worries will prove wrong, but for now all makes me wonder why the situation looks like this. I don’t think it’s because of poor prizes as, you must admit, these are great and honestly I don’t know if sponsors will be willing to donate such great prizes next year (if we decide to organize it) if they’re not satisfied with the interest in the event this year.

The bottom line is – if you have written a Qt4 application that doesn’t violate rules of engagement (it’s open source and portable), enter the competition. You don’t lose anything and you can gain quite much.

DomElementContainer

I often write code that iterates over an XML document and performs actions on elements with some specifig tag. Usually I do it using code like the following:

for(QDomElement elem = parent.firstChildElement("tag");
                !elem.isNull();
                elem = elem.nextSiblingElement("tag")){
    doSomething(elem);
}

This is fine, but I thought it’d be nicer to do it using the foreach() loop offered by Qt. Out of the box Qt doesn’t allow to use foreach with xml documents, so I decided to do something about it :)

After 15 minutes the class was ready:

#include 
#include 
#include 

class DomElementContainer {
public:
  class const_iterator {
    friend class DomElementContainer;
  public:
      const_iterator(){}
      const_iterator &operator++(){
        m_e = m_e.nextSiblingElement(m_t);
        return *this;
      }
      const QDomElement & operator*(){
        return m_e;
      }
      bool operator==(const const_iterator &other) const {
        return (m_e==other.m_e && m_t==other.m_t);
      }
      bool operator!=(const const_iterator &other) const {
        return (m_e!=other.m_e || m_t!=other.m_t);
      }
  private:
      const_iterator(const QDomElement &e, const QString &t){
        m_e = e;
        m_t = t;
      }
      QDomElement m_e;
      QString m_t;
  };

  DomElementContainer(const QDomElement &e, const QString &tag=QString::null){
    m_tag = tag;
    m_elem = e;
  }
  DomElementContainer(const QDomDocument &d, const QString &tag=QString::null){
    m_tag = tag;
    m_elem = d.documentElement();
  }
  const_iterator begin() const{
    return const_iterator(m_elem.firstChildElement(m_tag), m_tag);
  }
  const_iterator end() const {
    return const_iterator(QDomElement(), m_tag);
  }
private:
  QDomElement m_elem;
  QString m_tag;
};

Now it’s possible to do the following:

#include "domelementcontainer.h"

const char *xml = "content 1content 2 "
                  "wrongcontent"
                  "content 3";

int main(){
    QDomDocument doc;
    doc.setContent(QString(xml));
    DomElementContainer c(doc, "tag");
    foreach(QDomElement e, c)
      qDebug("%s", qPrintable(e.text()));
    return 0;
}

Download available here.

First points for Kubica

Quite a boring race (no cars flying centimetres over one’s head, etc.), but at least Kubica finished Bahrajn GrandPrix at 6th place and earned his first points this season. Ferrari, McLaren and BMW again proved to have no other serious opponents this year.

Some Bahrajn GP “related” photos follow :)

1234567

Courtesy of F1-Live.com.

Cut the cable…

My new laptop card wireless card finally arrived today. It’s a MiniPCI Intel PRO Wireless 2915ABG. Nothing fancy, but at least it has native Linux drivers so I knew there is a big chance I won’t be having much problems getting it to run. I managed to connect to my access point after some minutes of battling the software (you know, Mandriva and stuff…). It turns out my laptop has a pretty good antenna, the signal is much stronger than with the cardbus cards I tried earlier.

Finally I can return Jacek’s D-Link I borrowed some time ago :)

xnxx indian