Episode 22

Thursday, August 4, 2011
  • Qt SDK 1.1.2
  • Nokia N9/N950
  • Qt 4.8 beta
  • Qt 5 with QML 2
  • Qt for Android
  • Chrome V8
  • Qt Creator 2.3 beta
  • Qt Developer Days

Mark Hatch and Justin Noel

Intro: Welcome to ICSNetwork's This Week in Qt, the ten minute podcast that keeps you informed of significant events that may impact your engineering projects. If you have not yet heard about ICS, please visit our website at www.ics.com. As an organization, we believe we have the best independent team of Qt engineers in the world. Whether you're starting a new project or need help removing that insurmountable roadblock that every project has, please contact us at sales@ics.com.

Mark: Good morning, this is Mark Hatch and this is 'This Week in Qt', and with me as always is Justin Noel, one of our lead engineers here at ICS, and he's going to walk us through what has happened in the recent month or two.

Justin: Yeah, it's been a little bit of a... it's been a lot of trouble getting these things together for This Week in Qt, between all the business we've been doing, travel and vacations, but we are back, and we are going to try and get this back on a regular schedule.

M: That sounds great. I know we keep seeing people hitting the website looking for the latest issue so we are now back in the saddle.

J: Yeah and there is actually a bunch of new releases, some news, we'll talk about developer days, what's happening with Qt 5... we're going to talk about all of these things.

M: Great, so were going to start with the Qt SDK?

J: Yes, Qt SDK 1.1.2 is out, and it sounds like a relatively minor release, except that this is the first Qt SDK that will allow you to use the Qt Quick components inside of the SDK, and then use those components for both Symbian applications, and for MeeGo Harmatton applications.

M: That's great. Now can you use the Qt components elsewhere too, if I have a set-top box that I am writing?

J: Right now, no. There is actually a separate fork, as it's sort of called, one for desktop, and there's going to be a generic one. There's also going to be the concept of the generic set of components. Right now, up front you have to say I am Symbian, or I am Harmatton. Harmatton is Nokia special brew of MeeGo for the N9 phone. It also runs on the N950, but that's not a consumer phone that you would generally be shipping applications for on say, the OVI store. So what's happening right now is up front you say "I am going to be a Symbian application" and you get a set of components. Or you say "I am a Harmatton application" and you get a slightly different set of components with roughly the same API. Coming in the future you will be able to say that I am making a "native application," and just give me the common elements from all of the platforms so that you can make a cross-platform application with Qt Quick components.

M: Now, that's really needed because we start off from scratch all the time on these different platforms when we have to go back and say "well I don't have the component here yet."

J: Yes, one thing here that's really nice now that we have these components is that it makes the QML Visual Designer a lot more useful. You now have things like buttons that you can actually drop down onto the canvas, and you can actually get some work done by dragging and dropping the elements around.

M: That's great. Now you mentioned the N9 and the N950, would you like to get people up to speed on those?

J: Yeah, so, the two phones were released and I think we talked about them briefly in our last podcast. The first one is the N9, which runs, as I mentioned, on MeeGo 1.2 with a special user interface on top of it. It is not the user interface used in say, the MeeGo tablet, it is something called Harmatton, and it is basically the next version of Maemo. Maemo 6, really, and it has it's own version of components and it is shipping to 22 different countries. Most of those are in Eastern Europe and Asia. The phone is not coming to the United States, Canada or the UK. The N950 is a developer only phone. It is meant for testing out the latest versions of MeeGo, and doing development work on the actual hardware itself. And that's a very limited release; in fact, you have to essentially apply to get one of those phones.

M: Yes, we've got a few because we have a bunch of Qt ambassadors running around ICS and they were given a direct invitation.

J: Yes, if you're a Qt ambassador you may have already received one of these devices.

M: Ok good. So now let's move back to Qt. I guess there is a 4.8 beta coming out?

J: Yes, 4.8 is in beta. It should hit release candidate in a few weeks, and it is mostly a bug fix release. It has some performance enhancements, and it's geared toward creating a much more modular release that is going to help Qt go into open governance, so that each module of Qt can have a separate maintainer and a separate release cycle and feature set, because some things like Qt WebKit needs to mature much quicker than things like Qt Core. One of the more interesting things about this release is that it is the first release that you can upgrade directly from inside the Qt SDK. The Qt SDK has this concept of packages and you can go into the help, start updater, and you can find out that you can install different versions of Qt, different platforms, different toolchains, and basically by just simply going to the experimental section, and checking off Qt 4.8 for desktop, it will automatically download it and you can use it inside the Qt SDK. Now of course, should you want to work in a more traditional manner, you can always download the tarball as usual, and build it yourself.

M: Now, 4.8 has lighthouse in it, right?

J: Yes, 4.8 has Lighthouse enabled in it. Lighthouse, as we've talked about to great lengths before, is an abstraction that allows Qt to be ported much more easily from one platform to another, and this is going to be used to enable the Qt port to Android to become official. Bogdan Vatra has been waiting for 4.8 to be released so that he can put the 1.0 tag on his Necessitas package, which is what he's calling Qt for Android.

M: Now, have we heard anything more from Google as far as this technology is concerned, and whether they are going to be supportive or not, or are they still pretty quiet.

J: Well, if you go to the Android store, and you look up 'AnimatedTiles' (one word), you can actually download Bogdan's test application. And you will notice that before downloading the application, it will ask you to install this other package called Necessitas, which is the libraries that make up Qt. So what has happened is that Google, and the guys over at the Google store have allowed Bogdan to go ahead and basically upload a library as an app. So if you write Qt applications to Android, and post them to the store, it will first download Qt once and only once, and it will keep that updated in the background, and from there forward all the Qt applications for Android will use the same version of Qt.

M: Ok, well that's really cool then. You can write one application and run it on multiple devices, which is what Qt's all about, right?

J: Yeah, I can't vouch for how much support it's getting from Google, but they let them put it in the store and they made it work automatically, so that's a great sign.

M: That's a little bit more than what Apple would have done, in a similar situation, right!? So now we have some news that the long-awaited Qt 5 is starting, huh?

J: Yes, it is ramping up. One of the huge features is QML 2, which is going to be entirely scene graph based. It is going to have very low level hooks into OpenGL, in fact QML 2 is going to require having OpenGL 2 or OpenGL 2 ES or greater. And it actually is making animations and effects much faster, and it's actually much easier to write if you know things like OpenGL. Anything you've written in QML 1 is going to be roughly portable. Any of the QML code that you write should just work. If you have written items, visual items, I mean if you made your own ellipse item, or your own types of components in C++, and you inherited from QDeclarativeItem, you are now going to need to change the inheritance so that you will inherit from QSGPaintedItem. And you can roughly change the inheritance and change some of the names of the mouse handlers, but the code should be roughly portable.

M: So let me ask a question. I'm a little confused, I understand how Lighthouse enables Qt to be ported, and you use Lighthouse to, you know, get your hooks into the hardware. Now, QML 2 is going to require OpenGL. Does that mean that the Qt paint engine has to be turned on to OpenGL?

J: Yeah, so, Lighthouse right now, you could have it use any number of paint engines. So you could say on even Qt for Android, "Hey, why don't you make me an image surface," and it uses the raster engine to write onto that, basically, that piece of memory, which is what it does right now. Or, you could have it, and this is coming on Qt for Android, "give me an OpenGL surface and I'm going to paint to that and then blit it." Now the hard part is that every platform has a slightly different way of managing these OpenGL surfaces, and that's where Lighthouse comes in. So for each individual platform that supports OpenGL you need to have platform-specific code to allocate and manage those OpenGL surfaces, because that's not really a standard thing right now.

M: Ok, so that's what Lighthouse solves, and then that flows uphill to QML 2 and Qt 5, presumably.

J: Exactly, and for QML 2 you're no longer going to be allowed to use the raster engine for QML.

M: Ok, that's good. We've seen some issues in that in the past, in terms of performance and stuff so...

J: Yeah it's very easy to get, well, slow when you're using the main processor to do your drawing and your application logic, especially in something embedded.

M: So what's this Chrome V8?

J: So, the JavaScript interpreter is being changed in Qt 5.0 when using QML. Instead of using the runtime from WebKit, they are going to switch to using the JavaScript runtime from the Chrome browser from Google. This is called V8, and it is a lot faster, in fact up on labs.qt.nokia.com there is a number of benchmarks that Nokia has run against V8 versus WebKit, and Chrome wins hands-down.

M: Ok good, then that will be a nice speed-up. Are there any other things that people are talking about, or are these the main things at this point?

J: Oh, on the mailing list a lot of people are going back and forth with little things, such as talking about the internals of QVariant. Right now there are things you can do that Qt types can do in QVariant that user types can't. Should they extend things in QVariant so that third party types can do all the same functionality? There is a lot of debate about what should be done about the old Model/View classes. They are not being deprecated but people are making arguments for changing the API's so they are easier to use, so you can make tables easier, and you have to go out of your way to make a tree. Right now in the Qt Model/View everything is considered roughly a tree, and it really muddies the waters when you want to make a simple list.

M: Yes, it makes it a lot harder, doesn't it?

J: So there is the one giant feature. Of course, it's a complete modularization even further than 4.8 because they are going to take the Qt widgets and move them into a separate library, so when you run your application on an embedded platform, you will only bring in the symbols that you actually need when you are dynamically linking. You don't need to load all the widgets just to use QML. You can actually load things in very small hunks.

M: You know, I'm really excited about seeing the announcement and the progress towards Qt 5.0. I mean, after the February 11th announcement about Nokia focusing on WinPhone going forward, I think a lot of people were concerned about well, "what's Nokia's intention." When you make a leap and you say "we're now doing Qt 5," and you see some very interesting things coming down, that's a pretty strong vote of confidence, if you will, in Qt and the future of where it's going.

J: Yes, they are moving forward. I don't know exactly what plans Nokia has internally for using Qt themselves, but they are putting a lot of time, effort, and money into making QML a lot faster and better.

M: So, what else is going on?

J: Well, the last thing is that Qt Creator 2.3 beta came out, which has a number of interesting features including QML profiling, so you can actually run your QML code through a profiler and find out why your application is slower than you think it should be, and probably make some good enhancements there. But my favorite ones are in the QML Visual Designer, which right now is very primitive, but they keep adding features to it in every release. So in this particular release, QML Designer, which is the drag-and-drop GUI tool, you can now have, basically, fake data models that hold sample data, so you don't actually need to run the application as a whole to see how your playlist might look. You can just go into the Visual Designer and say "hey, for this list, when I run it in my developer mode, I want it to just show the static lists of albums," and you can just enter in the data. And that is, basically, stored in a separate QML file, and it swaps in and out the actual data model. It also allows you to edit delegates in line, which is another hard thing when editing lists, because you want to actually edit the contents of the list. Each one of the sort of, bricks of data, like an album, you want to see it's name, it's artist, it's year... now QML designer will actually load those as well, and when you make changes to the way that the list items look, it does the right thing rather than leaving them off as something that changes at runtime.

M: Ok, that sounds great. So it's starting to mature along really nicely, isn't it?

J: Yeah, and once again it's another good sign that Nokia's putting a lot of time and effort into making that Visual Designer a lot more useful.

M: So I guess the final topic is Developer Days. It's coming up again.

J: Yup, they are happening, I think, a little bit latter this year?

M: Yes, that's my sense, especially the California one.

J: Yes. First up, as always, Munich happens before San Francisco. So Developer Days Munich is being held October 24th to 26th at I believe the same Dulce hotel as last year. On the Qt Developer network website, there has been a lot of chatter about what the topics might be. Some people are looking to figure out how to speak at Developer Days. Ambassadors, I know, have the ability to submit their papers to talk about some things in Qt that they want to speak at Dev Days about. And the Dev Days in San Francisco is November 29th to December 1st, which is definitely a lot later than the usual dev days, and I believe that is also at the same hotel as last year.

M: Yeah, I remember last year it was just around Halloween because I remember there was some convention wondering around out in California, right? So it is a month later for the San Francisco one.

J: Yeah, and speaking from experience, Dev Days is always an interesting time, usually just following a product release. I assume there is going to be a Qt 4.8 final and maybe a Qt 5.0 technology preview. You get to talk to the experts, people who write the actual Qt code and what gets shipped. And you also get to talk to people who use Qt every day. It is a good experience for both weathered veterans and Qt newbies.

M: And you'll also be able to talk to Justin and Me!

J: Yeah, we'll have a booth, and we are working on our demos right now.

M: That sounds great. Well thank you very much Justin! It's good to get caught up after a little bit of a hiatus, and we'll be doing this a little bit more frequently now that the summer is ended.

J: Sounds great.

M: Thanks!