<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-34057157</atom:id><lastBuildDate>Sat, 10 Apr 2010 11:00:22 +0000</lastBuildDate><title>Life of a Developer</title><description></description><link>http://www.thelins.se/johan/blog.html</link><managingEditor>noreply@blogger.com (Johan Thelin)</managingEditor><generator>Blogger</generator><openSearch:totalResults>239</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-332238299203529518</guid><pubDate>Fri, 09 Apr 2010 10:47:00 +0000</pubDate><atom:updated>2010-04-09T12:49:26.150+02:00</atom:updated><title>Package names</title><description>Dear lazy web,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm working on a presentation on getting started with Qt. For it, I need package names for Qt for different distros. E.g. (k)ubuntu: qt-sdk, debian: qtcreator. What package installs QtCreator + Qt and needed tools for your distro? Please comment!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-332238299203529518?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2010/04/package-names.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>14</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-6574022486775171024</guid><pubDate>Mon, 01 Mar 2010 15:21:00 +0000</pubDate><atom:updated>2010-03-01T16:26:52.859+01:00</atom:updated><title>Overload</title><description>It has been quite some time since I last blogged. Lots of things are going on, so the time to sit down and reflect has been... let's say limited.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last week, I sadly missed &lt;a href="http://foss-sthlm.haxx.se/"&gt;foss-sthlm&lt;/a&gt;, due to snow. Apparently Swedish trains are built for the summer, so I hope that there will be another get-together later this spring.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've also been working hard on my &lt;a href="http://www.stf.se/kurser/kurs/Linux-Embedded-System-Development-Fundamentals/"&gt;embedded Linux course&lt;/a&gt;. The course date is kind of tight on the Easter, but hopefully STF can find a nice crowd to work with.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, I've been spending time trying to learn &lt;a href="http://qt.nokia.com/doc/qml-snapshot/qmlelements.html"&gt;QtQuick&lt;/a&gt; (QML, Declarative UI). I'm really enjoying &lt;a href="http://jryannel.wordpress.com/"&gt;Jürgen's blog&lt;/a&gt; on this, as the approach feels new to me.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-6574022486775171024?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2010/03/overload.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-2688846061293117771</guid><pubDate>Mon, 18 Jan 2010 08:19:00 +0000</pubDate><atom:updated>2010-01-18T12:19:02.268+01:00</atom:updated><title>Qt as GTK, again</title><description>&lt;div&gt;Another set of night hours spent hacking on making the GTK API wrap Qt. I focused on adding functionality and not on cleaning up, so no code this time either. I just want to show the progress.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wrapping Qt in GTK might seem like an impossible task, but the fact is that both toolkits, in turn, wrap the same APIs themselves. So, how does the progress look this far?&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/gqt-helloworld-759103.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 216px; height: 136px;" src="http://www.thelins.se/johan/uploaded_images/gqt-helloworld-759102.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Upgraded Hello World (&lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x345.html"&gt;link&lt;/a&gt;)&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The first example, upgraded hello world, works like a charm and does what is expected. There is only one change that has to be made to the example, and the need for it will go away when I've started cleaning the code. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Changes made to the example:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Replaced the gtk/gtk.h headerfile with my substitute.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/gqt-tablepacking-783875.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 216px; height: 136px;" src="http://www.thelins.se/johan/uploaded_images/gqt-tablepacking-783874.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Table Packing Example (&lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x442.html"&gt;link&lt;/a&gt;)&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;The next example, table packing, simply demonstrates the grid layout abilities of GTK. There seems to be a couple of pixels between the rows for some reason (I will investigate at a later point), but apart from that, everything works. The changes made are the same as for the first example.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Changes made to the example:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Replaced the gtk/gtk.h header with my substitute.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/gqt-manualmenu-759107.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 216px; height: 136px;" src="http://www.thelins.se/johan/uploaded_images/gqt-manualmenu-759105.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Manual Menu Example (&lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x1579.html"&gt;link&lt;/a&gt;)&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;Robin Burchell (w00t) has attempted something similar in the gqt project (&lt;a href="http://gitorious.org/gqt"&gt;gitorious link&lt;/a&gt;). We will discuss how we can join forces ASAP (I've been sort of unavailable this weekend). The gqt project has clean code - look great. It employs a different approach than I when it comes to mapping signals/slots/events and for handling the construction of menus.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Robin mentioned that one of the major hurdles when mapping the APIs is that GTK uses a widget based structure for menus, while Qt uses QActions for menu items. To have a swing at this, I decided to attack the manual menu example next. It took some changes to the main approach of the wrapping effort, but now I think I have it sorted out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Changes made to the example:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Replaces the gtk/gtk.h header file with my substitute.&lt;/li&gt;&lt;li&gt;The popup is always shown at (100, 100) as the GdkEvent structure cannot be cast to a GdkEventButton structure.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/gqt-manualmenu-menu-783872.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 216px; height: 136px;" src="http://www.thelins.se/johan/uploaded_images/gqt-manualmenu-menu-783871.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Manual Menu Example&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Another benefit of doing the manual menu example was that I had to have a better look at the events mechanism. As it seems, the "event" signal hooks into all events (like a Qt event filter). This means that there has to be a general event filter, as well as specific event filters (for when connecting to a specific event such as "delete_event"). This kind of breaks my idea of splitting out the code for creating a specific GdkEvent for each type of event in a separate class, so I need to think a bit about that (shouldn't really be a major issue - I just don't want code duplication).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Back to the menu widget versus action approach. As it seems, the QAction and QWidget classes' common base is the QObject class. Thus all pointers to GtkWidget, GtkWindow, etc. needs to be pointers to QObject. That way, the menu object can be made to match quite nicely. The downside is that the code already contained quite a lot of casts. Now it has even more. For instance, a trivial function such as gtk_container_set_border_width needs casting:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;void gtk_container_set_border_width(QObject *o_w, int spacing)&lt;br /&gt;{&lt;br /&gt;QT_WIDGET_ASSERT(w)&lt;br /&gt;w-&gt;setContentsMargins(spacing,spacing,spacing,spacing);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;The QT_WIDGET_ASSERT macro creates a QWidget pointer named w, by casting o_w using qobject_cast and then asserts that the pointer isn't null. I'm not sure of the performance penalty of this, but I guess there is one. However, to compensate, all of GTK's GTK_WINDOW, GTK_BOX, etc. are instead defined as simple pass-through macros. This means that performance wise it is a race between GTK_CHECK_CAST and qobject_cast.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did consider putting the qobject_cast calls in the GTK_xxx macros, but that would not work. For instance, gtk_menu_shell_append can place a QAction in either a QMenu, or in a QMenuBar. As the function is given a QObject pointer, it can now determine (by casting) if the container is a QMenu or QMenuBar and act accordingly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, where to next? I belive in fixing the known bugs before continuing. Especially when working on a project such as this, which I suspect will backfire anytime soon (it has been too easy this far). This means that the next step is to do something about the GdkEvent structures to get the popup of the manual menu example to work properly (now it appears at a static location). After that? Cleaning and merging with gqt...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-2688846061293117771?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2010/01/another-set-of-night-hours-spent.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>22</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-5649359739131679398</guid><pubDate>Fri, 15 Jan 2010 15:47:00 +0000</pubDate><atom:updated>2010-01-15T17:33:21.540+01:00</atom:updated><title>GTK+ made Qt</title><description>&lt;span style="font-weight:bold;"&gt;Disclaimer!&lt;/span&gt; &lt;i&gt;First of all - this is not an attack on any toolkit, nor critique. Rather, it is a hacker sitting down and trying out an idea.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;It has been a couple of years since I first tried out this idea (some seven, I believe). This time, licensing permits it and I believe that the timing is right. So, without further ado, let me introduce GTK+ made Qt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Qt and GTK+, and all other toolkits out there, provide more or less the same functionality (take that with a grain of salt, but the core is true). So, my idea was to wrap Qt in a GTK+ API layer. Just to see if it could be done. Attacking the problem at this level might be considered stupid - but I like to get results fairly quickly, and this way I can work with GTK+ code directly, instead of writing a ton of underlaying code just to get something to compile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are tons and tons of corner cases and not so corner-ish cases that can make this break. The implementation is miles and miles from perfect and the code I've been testing it on is rather trivial. What I've done is that I've taken one of the examples of the &lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/book1.html"&gt;GTK+ 2.0 Tutorial&lt;/a&gt; and made it do what it is supposed to do (sort of). Examples of what I've ignored in the process:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Event handling functions get NULL instead of a GdkEvent pointer.&lt;/li&gt;&lt;li&gt;Packing flags (e.g. homogenus and spacing when calling gtk_hbox_new) ignored - I simply use QVBoxLayout, QHBoxLayout and QGridLayout where they fit best.&lt;/li&gt;&lt;li&gt;Only a minimalist part of the API has been implemented (the process is build, add missing symbols, repeat)&lt;/li&gt;&lt;li&gt;Most GtkXxx classes are defined to a QWidget. Objects are casted up and down all over the place to work around this.&lt;/li&gt;&lt;/ul&gt;However, the problem isn't really matching the APIs to each other and getting every pixel right. At least, that is not the current problem. Instead, matching Qt's C++ style OO to GTK+'s is the problem. What are the differences? I hear you ask.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To create a trivial dialog in Qt, you inherit the QDialog class and then create the children in the constructor of your new class. In GTK+, you generally create a function for creating the dialog in question. In that function, all widgets (including the dialog) are created and put in a proper hierarchy. The resulting hierarchy of widgets is (95%) identical, and all the custom code to make it tick is there - it is just placed differently in the source.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another difference that has a large impact is the fact that Qt event handles are virtual methods of QObjects and slots are QObject methods. In GTK+, they are plain C functions that are passed as function pointer to &lt;tt&gt;g_signal_connect&lt;/tt&gt; calls.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, the starting point is &lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x345.html"&gt;this example&lt;/a&gt;. I've placed that code in &lt;tt&gt;helloworld.cpp&lt;/tt&gt; (we need it to build as a C++ source file, I'm sure that GCC can be convinced of that by other means, e.g. by using &lt;tt&gt;g++&lt;/tt&gt; directly, but just changing the extension does it for me).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only change made to the source code itself is that the include of &lt;tt&gt;gtk/gtk.h&lt;/tt&gt; has been replaced by the inclusion of &lt;tt&gt;gtk-made-qt.h&lt;/tt&gt; (no, the name is not critique, it is just my strange humor). The header file is the container of the rest of this experiment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/gtk-made-qt-1-735809.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 288px;" src="http://www.thelins.se/johan/uploaded_images/gtk-made-qt-1-735804.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;The GTK+ Hello World example running in QtCreator on Windows Vista&lt;/div&gt;&lt;/i&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;div&gt;First of all, I've made some rather rude typedefs and defines with regard to GLib (this just shows how much that needs to be redone to do this properly):&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;#define G_OBJECT(obj) ((QObject*)(obj))&lt;br /&gt;#define G_CALLBACK(func) ((void*)(func))&lt;br /&gt;&lt;br /&gt;typedef void* gpointer;&lt;br /&gt;typedef bool gboolean;&lt;br /&gt;typedef char gchar;&lt;br /&gt;&lt;br /&gt;#define g_print qDebug&lt;br /&gt;&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;There is more of this of course, and some of it is spread out across multiple header files. Next follows the same horrific crime, but this time made to some of the GTK+ widgets:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;#define GtkWidget QWidget&lt;br /&gt;&lt;br /&gt;void gtk_widget_show(QWidget *w) { w-&gt;show(); }&lt;br /&gt;&lt;br /&gt;#define GTK_WINDOW_TOPLEVEL (0)&lt;br /&gt;QWidget *gtk_window_new(int) { return new QWidget(); }&lt;br /&gt;void gtk_window_set_title(GtkWindow *w, const char *t) { w-&gt;setWindowTitle(QString(t)); }&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;#define GTK_BOX(obj) (obj-&gt;layout())&lt;br /&gt;void gtk_box_pack_start(QLayout *l, QWidget *w, bool expand, bool fill, int padding) { l-&gt;addWidget(w); }&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;As you can see, straight forward, brute force, get the job done hacks. All this shows how close the different APIs match. This is trivial code (albeit unsafe) and adds almost no extra conversions or checks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The really interesting part is the implementation of the &lt;tt&gt;g_signal_connect&lt;/tt&gt; function. Here, bridges for both events and signals/slots are dynamically setup. So, here it is in all its glory:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;void g_signal_connect(QObject *src, const char *cstrEventName, void *f, void *data)&lt;br /&gt;{&lt;br /&gt;QString eventName = QString(cstrEventName);&lt;br /&gt;&lt;br /&gt;if (eventName.endsWith("_event"))&lt;br /&gt;{ // This is an event, f is an eventFuncPtr&lt;br /&gt;  QObject *o = QGtkEventFilter::createFilter(eventName, eventFuncPtr(f), data);&lt;br /&gt;  if(o)&lt;br /&gt;      src-&gt;installEventFilter(o);&lt;br /&gt;  else&lt;br /&gt;      qWarning("Failed to match GTK event '%s' to a Qt event filter.", cstrEventName);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{ // This is a callback, f is an callbackFuncPtr&lt;br /&gt;  QObject *o = new QGtkCallbackBridge(src, callbackFuncPtr(f), data);&lt;br /&gt;&lt;br /&gt;  const char *signalName = 0;&lt;br /&gt;  if(eventName == "clicked")&lt;br /&gt;      signalName = SIGNAL(clicked());&lt;br /&gt;&lt;br /&gt;  if (signalName)&lt;br /&gt;      QObject::connect(src, signalName, o, SLOT(trigger()));&lt;br /&gt;  else&lt;br /&gt;      qWarning("Failed to match GTK signal '%s' to a Qt signal.", cstrEventName);&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;To my surprise, that is all that it takes. The &lt;tt&gt;QGtkCallbackBridge&lt;/tt&gt; is a trivial &lt;tt&gt;QObject&lt;/tt&gt; that calls the given function pointer with the &lt;tt&gt;QObject::sender()&lt;/tt&gt; and the given data pointer when signalled. The &lt;tt&gt;QGtkEventFilter&lt;/tt&gt; is not much more complicated. It simply filters out the event in question and triggers the given function pointer in much the same way. I've created a factory for the event filters, as I want them to re-create something looking like the original &lt;tt&gt;GdkEvent&lt;/tt&gt; structure. There is actually one event filter class for each type of event, just so that this code can be added.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, I've not packaged the code yet. My goal is to try at least &lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x442.html"&gt;one more&lt;/a&gt; example first (perhaps &lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/x745.html"&gt;two&lt;/a&gt;, given time). In the mean time, let's see if this can be made useful (a large enough portion of the GTK+ API needs to be implemented for that) - and if the idea is interesting at all (from a political standpoint, etc). As it stands now, this might help porting GTK+ applications to Qt only platforms, or it could be used as a &lt;a href="http://doc.trolltech.com/3.3/motif-walkthrough.html"&gt;migration kit&lt;/a&gt; (not that I encourage people to migrate from GTK+ to Qt - it is a choice that every developer has to make - use whatever feels comfortable to you).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-5649359739131679398?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2010/01/gtk-made-qt.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>23</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-4802784730015805811</guid><pubDate>Tue, 15 Dec 2009 09:27:00 +0000</pubDate><atom:updated>2009-12-15T10:44:39.727+01:00</atom:updated><title></title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/office-view-702932.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 121px; height: 400px;" src="http://www.thelins.se/johan/uploaded_images/office-view-702813.jpg" border="0" alt="" /&gt;&lt;/a&gt;The wether forcast mentioned snow on Wednesday. We had some yesterday and today it is really snowing away. Looks like I'll have to buy a sledge for Lisa! Will be great fun.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Right now I'm sitting, writing about Qt's new animation classes released in 4.6. Looking at the snow, writing about this, makes me wonder if it wouldn't be a good idea to implement animations that delete themselves and their items when the item leaves a given bounding rectangle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why? Then you can define a bounding rectangle, e.g. the screen, and create snow flakes with randomized animations and just let them drop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I remember doing something like that back in the STOS/AMOS days. You created a sprite, defined an animation pattern and then forgot about it (as I recall). This was great for the 2D shooters of the time with aliens attacking in predefined patterns. Not 100% sure how the surviving aliens (yes, you have to take bad players into account, including me) where handled. The ones you hit could be taken care of in a collision detection handing function called from the inner loop... well, nostalgia might make me look at this in a forgiving light.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, the snow is falling. There will be more tomorrow. It will probably be cold all the way to Christmas. Looks like we're in for a white Christmas.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-4802784730015805811?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/12/wether-forcast-mentioned-snow-on.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-1477279307052607948</guid><pubDate>Fri, 04 Dec 2009 07:23:00 +0000</pubDate><atom:updated>2009-12-04T08:24:07.764+01:00</atom:updated><title>TV Star</title><description>&lt;a href="http://labs.trolltech.com/blogs/author/aportale/"&gt;Alessandro&lt;/a&gt; is &lt;i&gt;the&lt;/i&gt; TV star of Qt. Great stuff &lt;a href="http://labs.trolltech.com/blogs/2009/12/03/tutorial-videos-qt-development-for-symbian/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-1477279307052607948?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/12/tv-star.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-8019950286465992594</guid><pubDate>Wed, 02 Dec 2009 11:52:00 +0000</pubDate><atom:updated>2009-12-02T12:58:35.720+01:00</atom:updated><title>One month of flying</title><description>It has been a month since I started working in my own business. My former employer has been very kind and let me explore this while on a leave of absense, i.e. I have somewhere to return to.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This Monday I sent my first large invoice to my biggest customer. Now, time to wait for the next pay. What have I learned this far?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Bookkeeping - there are a lot of receipts to handle, especially when starting. Insurances, web servers, car insurance, etc.&lt;/li&gt;&lt;li&gt;Working from home - it works fairly well for me. I've come up with a scheme to keep myself motivated and actually working. However, a simple business lunch now takes three hours instead of one.&lt;/li&gt;&lt;li&gt;Money takes time - I've been given offers, signing deals, working more than ever, and my next pay check is still not due until mid January. Worth thinking about.&lt;/li&gt;&lt;li&gt;Time is not money - at least not yet. By being self employed I'm so much more flexible so that I get more quality time with my family, while making the money that I need (and some extra, but I guess that is for future expenses).&lt;/li&gt;&lt;/ul&gt;So, one month done, many more to come. This far, I'm looking forward to work every day.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-8019950286465992594?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/12/one-month-of-flying.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>5</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-8558391711054221267</guid><pubDate>Sun, 15 Nov 2009 14:27:00 +0000</pubDate><atom:updated>2009-11-16T09:27:19.758+01:00</atom:updated><title>FSCONS 2009</title><description>So, it is kind of stupid to write about these things afterwards, but the time before a conference is always filled with preparations and far too much time spent in OO.o Impress.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last Saturday I attended &lt;a href="http://fscons.org/"&gt;FSCONS'09&lt;/a&gt;. This turned out to be another great event (I've been there two years now). I met lots of interesting people and got faces to a couple of names who's blogs I've been following for a while now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My plan for this year was to do two workshops - one on Qt for Embedded Linux (which I try to focus on), and one on the Qt SDK, trying to get people started. Both these sessions turned into something else - probably due to the unclearness of what a workshop is intended to be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;i&gt;Embedding Qt workshop&lt;/i&gt; (&lt;a href="http://www.slideshare.net/fscons2009/embedding-qt"&gt;slides&lt;/a&gt;) had a great turn-up. The idea was to go through the configuration process of Qt/X11, Qt/embedded targetted at QVFb and then have a look at the configuration and deployment of Qt for an actual embedded target. Given a 90 minutes slot, I knew that compilation time was going to be an issue. When it turned out that only one attendee wanted to give it a try, this session turned into an ordinary talk (the one brave guy gave up after the Qt/X11 build - thank you still!). However, the talk was great, lots of interesting questions and great feedback. I really enjoyed the interaction with the audience and at the end Knut Yrvin (an actual norwegian troll) showed up, adding even more facts to the discussion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;i&gt;Qt SDK workshop&lt;/i&gt; (too few slides to share) also had a great turn-up. My plan was to get people to install the SDK and then show them the basics. I think that something like 5-10 people actually ran the installer, so that was a great success. The demo, however, could have needed some more planning from my side. I showed signals/slots, some widgets and the concept of layouts. For that, I used 40 minutes of my 30 minutes slot, so there where loads of unaswered questions at the end (thanks for everybody coming up to me afterwards having a chat).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To summarize - my aim with workshops did not really work in this setting, however, the quality of the audience and the resulting discussions turned this into a great event for me. I hope that you liked it as well!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-8558391711054221267?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/11/fscons-2009.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-2175847358883091750</guid><pubDate>Sun, 01 Nov 2009 13:29:00 +0000</pubDate><atom:updated>2009-11-01T14:37:15.772+01:00</atom:updated><title>Warning - broken links ahead</title><description>So, the day finally came when I switched from a fairly broken and badly styled &lt;a href="http://www.mediawiki.org/wiki/MediaWiki"&gt;MediaWiki&lt;/a&gt;-based web page to a &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt;-based one instead. This not only means better management abilites, a working search engine, a proper editor, etc. It also means that links are broken. I don't write are likely to be - there are broken links out there as I have not migrated all contents. If you run into one - feel free to tell me and I'll try to sort it out.&lt;br /&gt;&lt;br /&gt;The result from this move will hopefully be a more professional presence on the web for my part. Unfortunately I do not have the time I want to polish the site - now I have to prepare my workshops (&lt;a href="http://www.fscons.org/node/54"&gt;1&lt;/a&gt;, &lt;a href="http://www.fscons.org/node/53"&gt;2&lt;/a&gt;) for &lt;a href="http://www.fscons.org"&gt;FSCONS&lt;/a&gt;. These events always seems to be so far away into the distant future when I sign up for them - and now it is only two weeks left...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-2175847358883091750?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/11/warning-broken-links-ahead.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-7106099413793103848</guid><pubDate>Sun, 11 Oct 2009 07:26:00 +0000</pubDate><atom:updated>2009-10-11T09:30:09.374+02:00</atom:updated><title>Off to DevDays</title><description>I'm packing and trying not to forget anything, because my brain will be in auto-pilot-mode tomorrow at 4:50 when the taxi comes around to start my journey to DevDays'09 in Munich. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm really looking forward to this, and this year, I'll even get to speak a few words in the &lt;i&gt;Qt in Education&lt;/i&gt; track on Monday. But the biggest upside is to meet all the people in real life. I'm especially looking forward to meeting the QtCentre crew - and all the trolls of course.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-7106099413793103848?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/10/off-to-devdays.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-1568231946907874737</guid><pubDate>Mon, 05 Oct 2009 14:15:00 +0000</pubDate><atom:updated>2009-10-05T16:20:32.424+02:00</atom:updated><title>KDE 4</title><description>I've finally made the switch on one of my working, production mode, computers. The switch from KDE 3.x to 4.2.2 (I think - whatever Kubuntu comes with). I must admit having been sceptical to all the hype about plasma here, plasma there. Social desktop? I want my old workstation look and feel - I thought.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thelins.se/johan/uploaded_images/favpart-771033.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 284px; height: 400px;" src="http://www.thelins.se/johan/uploaded_images/favpart-771030.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I absolutely love KDE 4. There is so much new, but everything that is different feels intuit. My very favorite feature is, this far, the device notifying plasmoid. Not having to show the desktop to mount, open or unmount my USB-stick is just - smart and intuit.&lt;br /&gt;&lt;br /&gt;Now all I have to do is to find out how to change the clock to a 24h mode... (just noticed, taking the screenshot, after using the desktop for a week...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-1568231946907874737?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/10/kde-4.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>11</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-1605271224438561281</guid><pubDate>Fri, 02 Oct 2009 10:49:00 +0000</pubDate><atom:updated>2009-10-02T12:51:11.714+02:00</atom:updated><title>Speaking - live!</title><description>To all of you in the Stockholm region, I will speak about Qt at &lt;a href="http://www.embeddedconference.se/"&gt;ECS'09&lt;/a&gt;, the &lt;a href="http://www.modt.se/ECSProgramTracks/GUI.html"&gt;GUI session&lt;/a&gt;. Go there, it will be fun. I've even got source code in my slides :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-1605271224438561281?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/10/speaking-live.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-5544141218227774219</guid><pubDate>Mon, 31 Aug 2009 13:48:00 +0000</pubDate><atom:updated>2009-08-31T15:55:47.029+02:00</atom:updated><title>QtCreator Plug-ins</title><description>I just saw that Prashanth Udupa has published a guide to &lt;a href="http://prashanthudupa.livejournal.com/44069.html"&gt;writing QtCreator plug-ins&lt;/a&gt; - nice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-5544141218227774219?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/08/qtcreator-plug-ins.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-5651763559629519877</guid><pubDate>Thu, 13 Aug 2009 06:52:00 +0000</pubDate><atom:updated>2009-08-13T11:28:12.395+02:00</atom:updated><title>NeHe on OpenGL</title><description>I just saw that Wesley has started to port the NeHe OpenGL tutorial to Qt &lt;a href="http://wesley.vidiqatch.org/03-08-2009/nehe-opengl-lessons-in-qt-chapter-1-and-2/"&gt;post 1&lt;/a&gt;, &lt;a href="http://wesley.vidiqatch.org/04-08-2009/nehe-opengl-lessons-in-qt-chapter-3/"&gt;post 2&lt;/a&gt; and &lt;a href="http://wesley.vidiqatch.org/08-08-2009/nehe-opengl-lessons-in-qt-chapter-4/"&gt;post 3&lt;/a&gt;. Great work! I did that back in the Qt 3 days - so perhaps this can be of interest: &lt;a href="http://www.digitalfanatics.org/projects/qt_tutorial/chapter14.html"&gt;NeHe chapters 1-12&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As for the &lt;a href="http://www.digitalfanatics.org/projects/qt_tutorial/index.html"&gt;Independent Qt Tutorial&lt;/a&gt;. It was a while since I updated, and it only applies to Qt 3. Way back we started to move &lt;a href="http://www.digitalfanatics.org/index.php?title=Main_Page"&gt;digitalfanatics.org&lt;/a&gt; to a wiki format (yes, it is damn ugly), but the tutorial hasn't been moved yet - thus the lack of incorporated updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-5651763559629519877?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/08/nehe-on-opengl.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-2578032856545635445</guid><pubDate>Wed, 05 Aug 2009 20:27:00 +0000</pubDate><atom:updated>2009-08-05T22:31:09.600+02:00</atom:updated><title>Samsung HD735LJ</title><description>Dear lazy web, does anyone know what SMART the attribute with ID 150 for the Samsung HD735LJ indicates? My tool says:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;raw value = 150&lt;/div&gt;&lt;div&gt;status = FAIL&lt;/div&gt;&lt;div&gt;value = 1&lt;/div&gt;&lt;div&gt;worst = 1&lt;/div&gt;&lt;div&gt;threshold = 99&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In addition, my atapi info source in my windows logs says that the drive controller is failing...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-2578032856545635445?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/08/samsung-hd735lj.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-4289352920371727477</guid><pubDate>Wed, 29 Jul 2009 12:47:00 +0000</pubDate><atom:updated>2009-07-29T14:58:38.531+02:00</atom:updated><title>Bad news...</title><description>I've followed Formula 1 for more than ten years. I guess that the combination of engineering, danger, speed and serious noise got me hooked. Anyway, today BMW announced that they will leave the sport at the end of this season, and for me as a BMW fan, that is bad news.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, for a little analysis from my part. FIA claims that BMW pulling out is another proof that their cost cutting measures are needed. I believe that there are more reasons:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- FIA and F1 is governed by an odd bunch. Mosley and Eccelstone really seem to like playing politics. And they have contriversial political standpoints, nothing one wants to be associated with.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Constant rule changes and interpretations. For instance, why where huge changes made to the aero rules before the 2009 season, but then the double diffuser design was accepted. This led to higher speeds, not lower.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- No final rules for next season, meaning that they cannot get started on next years car now (as this year's car really is a disaster).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Cost and results, of course, paying millions of euros to score mediocre results doesn't really improve the situation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, finally, two wishes for the future. First, lets find a way to keep Sauber F1 in the game. Second, I hope to see BMW on the race track in other high profile series (no, not S/B/WTCC - more like LeMans, F1 or perhaps DTM).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-4289352920371727477?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/07/bad-news.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-4605346053052740903</guid><pubDate>Wed, 08 Jul 2009 07:24:00 +0000</pubDate><atom:updated>2009-07-08T09:25:04.190+02:00</atom:updated><title>Cloud or Qt?</title><description>I just read about the &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Google Chrome OS&lt;/a&gt; - sounds nice. I wonder if it will be a simple view onto the cloud, or if it is time for a new Qt port :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-4605346053052740903?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/07/cloud-or-qt.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>10</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-5326373801322523654</guid><pubDate>Sun, 14 Jun 2009 17:15:00 +0000</pubDate><atom:updated>2009-06-14T19:18:21.708+02:00</atom:updated><title>More Embedded</title><description>For all of you out there who wonder why Qt for Embedded Linux is nice - here is a &lt;a href="http://thelins.se/learnqt/2009/06/testing-your-embedded-linux-setup-qvfb/"&gt;tutorial on QVFb&lt;/a&gt;. I'd say, apart from the API and the general quality, that tool really makes the difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-5326373801322523654?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/06/more-embedded.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-4779384894499787395</guid><pubDate>Thu, 11 Jun 2009 12:23:00 +0000</pubDate><atom:updated>2009-06-12T08:54:55.980+02:00</atom:updated><title>Embedded Tutorial</title><description>The &lt;a href="http://thelins.se/learnqt/"&gt;LearnQt&lt;/a&gt; site has been up for a couple of months now. There is a lot of writing in the pipeline, I just have to do some polishing (the famous 80/20 rule seems to apply). I've been meaning to extend the site to reflect my interests. Right now, it contains the &lt;a href="http://thelins.se/learnqt/tutorial/"&gt;generic Qt tutorial&lt;/a&gt;, but I've added a category called &lt;a href="http://thelins.se/learnqt/category/embedded-linux/"&gt;Embedded Linux&lt;/a&gt; with articles on using Qt in embedded Linux (you guessed it from the category name, didn't you :-P).&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: line-through;"&gt;Also, there seems to be something odd with my WordPress template for the site. When looking at one individual article, instead of the main page or a Category listing, list bullets and block quotes break down. If there is any css wizard out there willing to help, I'd be more than happy. Do mail me at e8johan, gmail.&lt;/span&gt; &lt;span style="font-style:italic;"&gt;The issue has been solved - &lt;a href="http://thelins.se/learnqt/2009/06/fixed-single-post-view-issues/"&gt;thanks&lt;/a&gt;!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-4779384894499787395?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/06/embedded-tutorial.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-2571963558248715486</guid><pubDate>Wed, 03 Jun 2009 06:04:00 +0000</pubDate><atom:updated>2009-06-03T09:08:17.436+02:00</atom:updated><title>Remember</title><description>As China &lt;a href="http://arstechnica.com/web/news/2009/06/twitter-flickr-ms-services-added-to-chinas-great-firewall.ars"&gt;blocks&lt;/a&gt;, let's &lt;a href="http://news.bbc.co.uk/onthisday/hi/dates/stories/june/4/newsid_2496000/2496277.stm"&gt;remember&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Democracy is not chaos, it is wealth. Wealth to the soul as well as to the body and society. Churchill put it nicely into words: "&lt;span style="font-style: italic;"&gt;Democracy is the worst form of government, except for all those other forms that have been tried from time to time.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;For all of us enjoying the luxury of being able to speak, organize, move and express ourselves freely, I have a small poem by Martin Niemöller &lt;span style="text-decoration: line-through;"&gt;(cannot find the name of the author, comment if you know it)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In Germany they came first for the Communists,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    and I didn't speak up because I wasn't a Communist.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Then they came for the Jews, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    and I didn't speak up because I wasn't a Jew.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Then they came for the trade unionists, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    and I didn't speak up because I wasn't a trade unionist.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Then they came for the Catholics, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    and I didn't speak up because I was a Protestant.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Then they came for me, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    and by that time no one was left to speak up.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-2571963558248715486?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/06/remember.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>13</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-1309709319190765645</guid><pubDate>Mon, 01 Jun 2009 08:21:00 +0000</pubDate><atom:updated>2009-06-03T15:54:37.514+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Qt</category><title>Work - a Qt platform</title><description>I'm feeling like a lucky guy - getting to work with Qt on a day-to-day basis. A couple of days back, BitSim, my employer &lt;a href="http://www.bitsim.com/news/qt-develop-deploy-embedded-software.htm"&gt;announced a Qt-based embedded hardware platform&lt;/a&gt;. Highlights are PXA270, a Spartan FPGA and a radio module. Right now I'm waiting for our demo pair to arrive, so that I can create some sort of demo utilizing the two units and the radio.&lt;br /&gt;&lt;br /&gt;Well, now I'm off to work again. Shell scripting this time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-1309709319190765645?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/06/work-qt-platform.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-1645623992868364374</guid><pubDate>Tue, 26 May 2009 08:06:00 +0000</pubDate><atom:updated>2009-05-26T10:08:44.112+02:00</atom:updated><title>QtMobility</title><description>Qt Software just &lt;a href="http://labs.trolltech.com/blogs/2009/05/26/the-mobility-project/"&gt;announced&lt;/a&gt; the &lt;a href="http://labs.trolltech.com/page/Projects/QtMobility"&gt;QtMobility&lt;/a&gt; project. This is great news. Especially the "&lt;span style="font-style: italic;"&gt;...ONE application which can be deployed across MANY platforms (Nokia and &lt;span style="font-weight: bold;"&gt;non-Nokia&lt;/span&gt; platforms)&lt;/span&gt;." This is yet another confirmation that Nokia did not acquire Trolltech to turn Qt into an S60 API - cross platform (or, as QtS says &lt;span style="font-style: italic;"&gt;deploy everywhere&lt;/span&gt;!) is still important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-1645623992868364374?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/05/qtmobility.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-676355070971636287</guid><pubDate>Tue, 19 May 2009 06:22:00 +0000</pubDate><atom:updated>2009-05-20T09:11:01.376+02:00</atom:updated><title>Wolfram|Alpha</title><description>I just ran into the &lt;a href="http://www.wolframalpha.com/"&gt;Wolfram|Alpha&lt;/a&gt; site (found it via &lt;a href="http://nyteknik.se/"&gt;NyTeknik&lt;/a&gt;). The site is amazing. Try, for instance, to search for a substance: &lt;a href="http://www.wolframalpha.com/input/?i=caffeine"&gt;caffeine&lt;/a&gt;. The result not only includes a nice picture of the molecule, but also quite a few facts about the substance.&lt;br /&gt;&lt;br /&gt;Looking a molecules is fun, but the man behind W|A was also responsible for Mathematica. So, go ahead, enter a formula: &lt;a href="http://www.wolframalpha.com/input/?i=sin%28x%29%C2%B2"&gt;sin(x)^2&lt;/a&gt;. The result includes period, a plot, derivate, integral, but also the steps taken to reach the results. I can imagine one or two maths students using this.&lt;br /&gt;&lt;br /&gt;Well, sorry for bugging you with this - but I was absolutely stunned when I ran into the site. It has earned itself one of my bookmarks!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update!&lt;/span&gt; This makes it less attractive: &lt;a href="http://www.groklaw.net/article.php?story=20090518204959409"&gt;Groklaw - Terms of Use: A Real Difference Between Wolfram|Alpha and Google&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-676355070971636287?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/05/wolframalpha.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>11</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-3253827061594512960</guid><pubDate>Fri, 08 May 2009 06:44:00 +0000</pubDate><atom:updated>2009-05-08T08:47:33.210+02:00</atom:updated><title>Tutorial: Layouts</title><description>I've just updated the &lt;a href="http://thelins.se/learnqt/"&gt;Learn Qt&lt;/a&gt; &lt;a href="http://thelins.se/learnqt/tutorial/"&gt;tutorial&lt;/a&gt; with an entry on &lt;a href="http://thelins.se/learnqt/2009/05/qt-layouts-the-basics/"&gt;Layout Basics&lt;/a&gt;. I think that this is the last chapter before I can start putting together a "real" example application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-3253827061594512960?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/05/tutorial-layouts.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34057157.post-8196013959166400190</guid><pubDate>Mon, 27 Apr 2009 18:35:00 +0000</pubDate><atom:updated>2009-04-27T20:40:17.015+02:00</atom:updated><title>New Chapter, and Guest Contribution</title><description>A couple of days ago I added a new chapter about the &lt;a href="http://thelins.se/learnqt/2009/04/the-qt-build-system/"&gt;Qt build system&lt;/a&gt; to &lt;a href="http://thelins.se/learnqt/tutorial/"&gt;Learn Qt Tutorial&lt;/a&gt;. I'm also happy to announce that &lt;a href="http://uptosomething.in/"&gt;Ankur Gupta&lt;/a&gt; has contributed the first &lt;a href="http://thelins.se/learnqt/category/guest-entries/"&gt;guest entry&lt;/a&gt; - a guide to &lt;a href="http://thelins.se/learnqt/2009/04/avenues-from-where-newbies-can-learn-qt/"&gt;where to find information about Qt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'd also like to take this opportunity and thank Qt Software for the new top banner. It looks great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34057157-8196013959166400190?l=www.thelins.se%2Fjohan%2Fblog.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.thelins.se/johan/2009/04/new-chapter-and-guest-contribution.html</link><author>noreply@blogger.com (Johan Thelin)</author><thr:total>0</thr:total></item></channel></rss>