vohi
Uncategorized
Posted by vohi
 in Uncategorized
 on Wednesday, September 30, 2009 @ 15:34

We are currently preparing the release of the Qt 4.6 Beta, and during the Beta phase of Qt 4.6 we would like to ask the community of Qt users for feedback
regarding the stability, performance and overall quality of our designs, APIs and implementations.

In addition to asking for feedback through the regular channels we would like to make sure that as many Qt users as possible have performed a few specific tasks during the Beta phase to help us understand the most important issues that we need to address before the launch of Qt 4.6 later this year. We would like to invite you to sign up to the Qt 4.6 Beta Program - it should only take a few minutes!

If you sign up to the Qt 4.6 Beta Program, then we will during the next month ask you to complete two surveys that ask for your impression of the quality of Qt 4.6. One survey will focus on “is Qt 4.6 as good as Qt 4.5?” - focusing on stability and performance impact that replacing Qt 4.5 with the Qt 4.6 libraries in existing projects has. In the other survey we want to find out how you like our new APIs - are they useful, documented well enough, what kind of problems did you run into… If you have played around with the new things in the Qt 4.6 technology preview already and have any ideas about small exercises, then let us know here!

So the idea is that those surveys will not take very long to complete, but you should of course be able to set some time aside to test the Qt 4.6 Beta release. This release is expected to become available within the first weeks of October, and will be announced here and on the usual mailinglists.

It is of course not necessary to sign up to the Beta program in order to get access to the Qt 4.6 Beta packages, and our regular feedback channel will continue to be open for everybody! However, through the Beta Program we hope to understand better how much Qt 4.6 has been tried and tested.

So, we hope you will enjoy experimenting with the Qt 4.6 pre-releases and are looking forward to your feedback!

Andrew Baldwin
Symbian
Performance
Posted by Andrew Baldwin
 in Symbian, Performance
 on Tuesday, September 29, 2009 @ 13:40

Have you ever been developing an app, and at some point wanted to know exactly which code was being run, and for how long, when you used it?

On the path to getting Qt inside your Nokia devices, we’ve recently been making use of a special Nokia tool for doing just that, and I thought I would give you a short behind-the-scenes tour of it so that you can see how serious we are about taking Qt everywhere.

If you’ve ever tried to speed up some of your own code before, you probably used some kind of profiling tool. Valgrind is a good example, and one that is heavily used in the development of Desktop Qt.

Desktops normally use x86 processors, but away from the desktop and running on batteries, ARM processors are most widely used. These systems tend to have quite a different architecture from desktop computers, as well as slower clocks and smaller caches. So some effort is needed to make software run fast on them because the performance bottlenecks can also be quite different.

One feature ARM-based chips often have which you don’t find on the desktop is ETM. Using this, the ARM can send trace information about every instruction it executes out through a dedicated debug port in real time, without slowing down execution of the software at all.

As ARMs usually run at hundreds of MHz, ETM creates a large amount of data in a very short time, so you have capture it using an external box with a few Gbytes of RAM. For cost reasons, you won’t ever find an ETM port on a device you buy in the shops, but during development of the devices, special versions are often made with just such a port.

Here’s a picture of a “special device” which is ETM-enabled, along with the Lauterbach PowerTrace II I use to capture the data:

ETM with "special device" running Qt

Even with Gigs of RAM, you can only trace for about 10 seconds or so. Although that doesn’t sound like much, it’s actually enough to take a look at almost all interesting use cases.

Ok, so now I’ve got all that data, how do I make some sense of it? This is where FineToothComb comes in.

FineToothComb, or FTC as we usually call it, is a Nokia tool which takes all that ETM data plus some extra information taken from the device at the same time using JTAG, and all the binary code and symbols installed on the device, and then spends some minutes correlating all that together to create a database a few Gigs in size for a each trace.

To see what happened I then use FTC’s “Trace Explorer”, which starts off showing me something like this:

OpenStreetMap example on Symbian

What you can see here is a “MIPS graph”. Time increases to the right, and the number of millions of instructions executed per second goes upwards. The colours represent different threads and processes that ran, with the names and instruction counts for those shown below the graph.

Because of memory latency and caches, you almost never see a CPU running one instruction for every clock cycle. Memory copies especially cause the CPU to spend most of the time waiting, which show up as “low” MIPS values on these graphs.

This first graph gives you the big picture of what happened during your use case. To see more detail you can zoom in on a region of interest. Here’s 165ms:

165ms from OpenStreetMap example on Symbian

And again down to just 1.3ms:

1.3ms from OpenStreetMap on Symbian

Eventually you get down to the level of seeing individual context switches between threads - the operating system in action.

To see what a thread was doing, you simply choose it from the graph and the tool shows you a call stack for that time, along with the time taken (in nanoseconds) and number of instructions run for each call. From that last graph I opened the “lightmaps” stack:

Call stack from OpenStreetMap on Symbian

The white lines are blocks of instructions being run from within one function. Red lines are calls from there to other functions, with the total time for that call in nanoseconds show in the second column.
Any call can be opened up to see what it called, in this case I opened the operator>>> call to see that it ended up in a file read which went to the Symbian file server. The tool can even cross over from user space into kernel calls to see what happened there as a result of a user call. Green lines show calls that have been opened up. As you move the mouse over calls, the graph at the bottom highlights the time range for that call so you can see where you are in the trace.

You can also see into any system servers or kernel threads that ran, as well as interrupts. Another feature is statistics of which functions used time and instructions for any block of time. Here are the top 10 functions from the big blue section in the 2nd graph - obviously a PNG decode:

Statistics from OpenStreetMap on Symbian

And it can even capture and show what was on the display of the device to help understand the trace later:

Screenshot from OpenStreetMap on Symbian, captured with ETM

Overall it’s really useful for quickly homing in on any code that needs performance optimisation, and because it’s not just a statistical sampling of what happened, it can be used for studying many kinds of use cases, for instance answering a question of why a system is waiting when it should be busy. Most importantly it does all this with the device running at full speed without requiring any special “debug” software build, so you don’t need to guess about how anything is in the “real” case, because this is it.

Using FineToothComb on Qt has already helped us quite a bit with performance of the Qt port to Symbian. Early on in the port, it highlighted some bottleneck functions which were converted from smaller but slower THUMB instructions to faster ARM instructions. It caught when we were not compiling using the ARM’s vector floating point instructions. It also helped with the optimisation of raster rendering functions using ARMv6 and data preloading. In another case it caught the fact that we were using a slow blit operation for the final screen update, when a different parameter would cause a much faster blit to be used.

Even though FTC isn’t a tool that is available outside Nokia, the improvements it can and has found already are, and more of them should be coming your way soon.

I’m going to be at the Qt Developer Days 2009 in Munich, so if you are there too and would like a quick demo of FineToothComb, just track me down and ask!

Simon
Qt
WebKit
Posted by Simon
 in Qt, WebKit
 on Tuesday, September 29, 2009 @ 08:09

I’ll make this short and sweet and to the point :). Many things happened in the past few weeks in the land of the QtWebKit port:

  • Kenneth and Antonio landed the first version of QWebGraphicsItem, a simple class that mimics the QWebView API and makes it easy to embed WebKit into the GraphicsView. The API and class name are still subject to change, but we’d love to hear feedback and suggestions, especially from people who have implemented the same thing :)
  • Jocelyn submitted QWebInspector, a simple container that gives you control over embedding the web inspector into your application. The API is deliberately minimal to avoid exposing internals.
  • Tor Arne used his scripting skillz to migrate QtWebKit bugs from our internal company bug tracker into the public WebKit bugzilla. An important milestone towards a more transparent development process on our side.
  • Yongjun, Janne and Norbert keep on submitting Symbian porting fixes. RVCT builds and runs out of the trunk and WINSCW is very close.
  • We have updated the copy of WebKit in Qt 4.6 a few times and will continue to do so in the coming weeks towards the 4.6 release. Espen and Janne are also working on getting those WebKit and QtScript Symbian builds into the nightly Qt/S60 snapshots. UPDATE:The latest Qt/S60 nightly includes QtWebKit and QtScript now.

Generally speaking we’re in bugfixing mode. We had to slip in the above few features, but we consider them the exception to the rule. Until 4.6 we’d like to hold off any other changes that affect the API, unless they are actually API bugs or the result of review of new 4.6 API.

Morten
Documentation
Posted by Morten
 in Documentation
 on Monday, September 28, 2009 @ 11:45

Writing good documentation is not all about the quality of what we write, but also about how we present the information. A large base of knowledge is of no use to you if there is not a good way of accessing the information you are looking for. The documentation must be accessible and easy to use, as well as accurate and informative.

Design philosophy
Lately, we have been looking for better ways to present the Qt documentation on the web. Our current documentation consists of static pages linked together in the good old fashion way of Web 1.0. Yes it works, but the potential of Web 2.0 is worth investigating and could increase the usability of the site. Ever since Qt version 2.3 (at least), the Qt documentation have had a uniform look and structure. During the time since those days, Qt has evolved, gained a lot of new features, and now covers a lot of more ground than its predecessors. This evolution has also effected the documentation, making the base of information larger and more complex. Despite the growing amount of information the documentation has kept its simple but effective design because it works for our users. That is something we need to preserve when adding new features to it.

If you have peaked at the documentation in the Qt 4.6 snapshot, you have probably noticed the search box added in the top corner of the index page. This is a custom Google search engine, scanning our documentation for results matching your query. Now, there is nothing revolutionary about this feature, but this is one way we can improve the documentation usability. Adding such a feature has no remarkable impact on the rest of the documentation. However, adding new features to the site should not be done without research. If we are going to do changes we need an idea or a philosophy on what we want to accomplish.

We want the documentation to be as user friendly as possible. That means that it should be easy to find detailed information on a subject if you are an expert and knows what you are looking for. The same should apply if you are a beginner looking for good tutorials and overviews. We also want to provide a structure that requires a minimum of searches and mouse clicks. Today, a search for detailed information on a subject can require browsing as much as seven or eight levels down using links from the index page. This makes navigation hard and tiresome, if it is not combined with queries to a search engine. Dynamic menus and a flat structure could help us on our way accomplish this. By creating a good cognitive design, we want to make your journey from question to answer as short as possible so you can focus on creating good applications.

So with these goals in mind we are trying to find a structure and a set of new features that will improve the future Qt documentation. Finding such a structure requires recognizing how the different elements in the documentation relate to one another. Questions like how they should be categorized regarding technologies, types of features or platforms, comes to mind and needs to be sorted out. Also we need to sort out which categories are more relevant and needs to appear at the front line to keep the structure flat. To keep a flat structure, the real trick will be to find out how to present as much information as possible on the least amount of space, and without making it chaotic.

Design reserach
That said, there are probably as many opinions about how the documentation should be organized as there are Qt users, and it is exactly these opinions that we are interested in. That is also why we will talk to our users about this issue during Devdays in Munich this year. We want to do some research on how developers use the Qt documentation, and how they would like the documentation to evolve.

As part of our research, we have created a set of different sample pages, showing a range of concepts from the super-social-inspired pages, to minimalistic and clean overviews. Our goal is to visualize different concepts and get feedback on what our users think of them. This user test will mainly take place face to face with developers during Devdays in Munich. The results of this user test will be brought back to the team in Oslo and used as input for the design process.

With a few weeks left until Devdays, we would like to show you a few of the features included in these sketches and say a few words about them. This will enable you as a user to give us your opinion even if you are not going to Devdays, and it is giving us a chance to adapt our approach to the problem. However, I must underline that these samples only show the wide specter of choices we have when looking for new features. Our purpose with this preview is to get feedback from our blog readers regarding what they like and don’t like about the features. In the list below you can have a look at our ideas, and add your comments.

Different concepts
Suggestion 1.
This is the current design, displaying menus of links in different categories. The number of links has been set to a minimum, but still covering the essential parts of the documentation.
Suggestion 1

Suggestion 2.
This sample uses icons and colors with the link lists, adding cognitive effects to the design. It also makes the page more pleasant to look at. It contains a search box for queries in addition to a line of top-level links at the page top.
Suggestion 2

Suggestion 3.
This sample is stripped of all eye-candy and cognitive image use. This makes the listed links more visible as long as they are categorized logically and the number of links is limited. The page contains a line of top-level links and search box at the top of the page.
Suggestion 3

Suggestion 4.
This sample shows a very minimalistic page containing only a few links and large images. This limits the navigation from the index page, but makes it easier to locate the relevant category to browse through. This page also contains a line of top-level links and search box at the top of the page.
Suggestion 4

Suggestion 5.
This sample has a more “social” concept. In addition to a menu with a hierarchical structure to the left, it has three menus showing content based on what the user previously has browsed in the docs, as well as menus based on ranks and top searches. As before the page contains a line of top-level links and search box at the top of the page.
Suggestion 5

Suggestion 6.
This sample is based on a “social” concept. These elements include menus containing top searches, history, blog entries etc. This can be an effective way of notifying the user about new features and popular subjects.
Suggestion 6

Search features
Suggestion 1 - Search features
This sample is based on the current design, but also provides a search box using AJAX requests to create a list of suggestions when typing.
Suggestion 1 - Search features

Suggestion 2 - Search features
This sample demonstrates how Google search results can be integrated onto the documentation page. The user avoids leaving the doc pages and can navigate the docs without having to go back from the Google result page. Please note the keywords on the right hand side making it easier to further narrow down the search.
Suggestion 2 - Search features

Navigation features
Suggestion - Navigation features
This sample is based on the concept in “Suggestion 5″, displaying a long page, containing menus and the search box. In addition the header of the page is floating, so the links and search box will always be visible. Also note that the bread crumb-links display a drop down menu to other relevant documents on the same level. Finally, the descriptions of functions etc., is hidden in a collapsible paragraph to make the content less chaotic.
Suggestion - Navigation features

Feedback
We want to create a good and usable design for the documentation. That is why we want your feedback, and there are two ways to contribute. You can add your comments to this blog entry. However, if you are going to Devdays in Munich, please stop by us and participate in the user-testing. It won’t take long, I promise. :)

You may also add your own ideas in your comment. It just might happen that you thought of something we didn’t, which could be the next genius idea for online documentation.

espenr
Qt
WebKit
S60
Symbian
Posted by espenr
 in Qt, WebKit, S60, Symbian
 on Thursday, September 24, 2009 @ 10:00

I promised you daily builds of Qt for Symbian/S60 a few weeks ago, and here they are. Every night at around 02:30 new binaries will be available.



Download the latest binaries from here!

There are two types of files available. You want the latest qt-embedded-s60-opensourceYYYYMMDD-4.6.0-tp1.exe file. The other qt-embedded-s60-opensource-src-4.6.0-tp1.zip is the source package used to create the latest .exe and can mostly be ignored. The .exe contains a Windows Installer as shown below, and here is instructions on how to use it.


Qt installer

There are three Qt .sis files included in the .exe. Most of you (unless you work at Nokia and have an RnD phone) wants to install the qt_for_s60_selfsigned.sis together with the fluidlauncher.sis or whatever application you’re creating yourself.

Works for S60 3.1, 3.2 and 5.0. If you’re using some funky internal RnD SDK, it might work (Hint: use the the “Choose additional folder(s)” option if you’re SDK is not in devices.xml).

The code we’re building from is whatever is HEAD of http://qt.gitorious.org/qt/qt/commits/4.6. In other words if we break the build, no binaries for that day - oh well. At the moment QtScript and QtWekbit are still not there - but soon my friends, soooon.

Update: As of 2009.09.29 the snapshots contains QtScript and QtWekbit as well. Yay we’re so great!.
Update2: Well, we’re not that great it seems. The .dlls gets copied to your epoc32, but they’re not inlucded in the Qt_libs sis files. Fixed now, should be correct in tomorrows snapshots.
Update3: Yepp - was fixed today :D.

Final disclaimer: This is not product quality software. It might make your phone depressed and make kittens cry. Use at your own risk.

Alan Alpert
KDE
Declarative UI
Posted by Alan Alpert
 in KDE, Declarative UI
 on Thursday, September 24, 2009 @ 06:24

Something we’ve been trying out recently with Qt Declarative UI is a Plasma integration. A characteristic of plasmoids is that they tend to have their own unique UI design. Integration of Declarative UI with Plasma has the potential to make it much easier to design such plasmoids. There is also the potential to help make plasmoid development easier by providing a declarative language that is designed specifically for fluid user interfaces, and is more accessible to designers without C++ knowledge. And it also has the potential to facilitate the construction of highly animated plasmoids, like the weather example which animates the clouds and rain/snow all separately. As a prototype we are hoping that its use will provide constructive feedback which enables Declarative UI to truly fulfill these potentials.

There is one very tricky aspect to Declarative UI’s Plasma integration. That is that there are large sections of Plasma code which are already written, containing widgets and QGraphicsItems, which might like to add some declarative parts but are certainly not going to re-write themselves. Declarative UI is based on existing Qt technologies, GraphicsView in particular, and can be integrated into existing applications. We just have very little experience with doing that right now and are still investigating how well this works, so feedback on this issue is warmly welcomed. We do intend to get things so that, as much as possible, existing Qt code can easily add Declarative UI bits to its UI when and if they want. You certainly won’t have to rewrite your application to use Declarative UI if you’re happy with your Graphics View solution. In fact, the prototype Plasma integration makes the existing Plasma QGraphicsWidgets directly usable in QML without altering their code at all (we’re still checking how well this works though).

We’re hoping that, at some point in the future, people will have Declarative UI as another one of their options for how to build their plasmoids. An especially compelling one if it’s to be heavily animated or they don’t like coding.

Below is a screen shot showing some of what we have so far. On the left is the weather example, and those are Plasma::PushButtons being used in the middle. On the right is a data source example, printing all the information it can get from the time data source. On the right, below the QML plasmoid, is the file watcher plasmoid showing the full QML source for the data source example just above it.
Declarative UI on Plasma

QtMobility
QtMobility
Posted by QtMobility
 in QtMobility
 on Monday, September 21, 2009 @ 04:16

As part of the Qt Mobility project, we are introducing the Messaging library. This library enables access to messaging services.

Currently Email, SMS and MMS types of messages are supported by the library. We plan to support other types of messages in the future. Services provided by the message library include searching and sorting messages, sending messages, retrieving message data, and launching the preferred messaging client on the system to either display an existing message, compose a new message, or respond to an existing message.

Like other libraries in the Mobility project, this is a cross platform library that enables access to native services. An implementation for QMF, which was recently introduced here on Qt labs, is mostly complete. A Windows implementation based on MAPI and the Outlook Object Model is about half complete, and unoptimized. Subsequently implementations for Symbian, Windows Mobile, Maemo, and other platforms will be completed.

The code is available on Gitorious, and includes documentation and examples. Qt 4.5 is required to compile the project.

One of the examples included is called ‘Keep in touch’. This application demonstrates the searching services provided by the library by finding a list of addresses, and hence people, that messages have not been sent to recently.

Keep in touch example

Predictably the messaging library API contains classes that represent message, message part (MIME/TNEF entities), message address, folder and account objects, additionally identifiers for these objects also exist where appropriate. The API also contains a QMessageServiceAction class, instances of this class, known as ’service actions’, can be used to send, retrieve, display and compose messages, with progress information being reported when available.

A QMessageStore singleton class, known as ‘the store’ is used to access messaging data on the computer. The store and service actions enable retrieval of message, folder and account objects using identifier objects. Identifiers can be retrieved by using the store or service actions to filter and sort messages, folders and accounts stored on the computer. Additionally the store provides Qt signals for detecting the arrival, modification and deletion of messages on the computer.

Messaging API class diagram

Please feel welcome to send your feedback to qtmobility at trolltech.com.

The Qt Messaging Team, Don, Matt, & Aleks
QtMessaging
 in QtMessaging
 on Monday, September 21, 2009 @ 03:24

The Qt Messaging Framework, QMF, consists of a C++ library and daemon server process that can be used to build email clients, and more generally software that interacts with email and mail servers. QMF is designed to be extensible to allow other types of internet and telephony messages to be handled. Currently QMF is ported to Linux and Microsoft Windows, other platforms will be ported to in the future. Check out the QMF source on Gitorious

There are currently no plans for QMF to become part of the Qt library, but it may subsequently be offered as a Qt solution. QMF does not provide the ability to create a cross platform application that uses the native messaging system on the underlying platform, such as the Symbian Messaging Framework on S60 or Microsoft MAPI on Windows Mobile. For more information on this topic please see the upcoming Qt Mobility Messaging labs blog entry.

QMF is a fully functional solution and comes with a demonstration mail client, called qtmail.

qtmail

The QMF library is used by both the QMF message server process and also by QMF client processes. The message server is a long lived process, responsible for performing synchronization with external mail servers, which are normally located on the internet. Clients use the QMF library to interact with the messaging server, internally IPC is used by the library implementation to communicate between the server and clients.

Messaging data is stored locally in a database (currently SQLite). Clients and the message server access the database using the QMF library, specifically through an interface consisting of a singleton class called QMailStore. QMailStore provides shared access to the database by using semaphores, and notifies clients of changes to the database using standard Qt signals.

The message server loads plugins, known as protocol plugins, at startup to communicate with external mail servers. Protocol plugins currently exist for IMAP, POP, and SMTP. New plugins may be implemented to allow communication using other protocols. Like the message server and clients, plugins use QMailStore to access the local messaging database. Additionally plugins use standard Qt network classes such as QSslSocket to communicate with external mail servers over TCP/IP connections.

QMF Architecture

QMF provides a number of features which are important for mobile computers.

The message server working with well implemented clients should operate within a fixed upper bound of memory. This is made possible by providing interfaces to partially retrieve message data, including both message attachments and message bodies, lists of messages in a folder, and lists of folders in an account. Large messages are efficiently handled with respect to memory by using the mmap function.

Push email functionality is provided as demonstrated by the IMAP Protocol Plugin which allows monitoring multiple mailboxes using IDLE. Additionally a complete implementation of the Lemonade standard is provided including forward without download, and quick resynchronization. Furthermore email metadata can be retrieved independently of messages, this metadata is analyzed to determine which parts of messages to download, and if necessary used to refresh the status of messages as they become visible. All of these techniques help to conserve bandwidth.

Round trips to external mail servers can be very expensive taking several seconds to complete. QMF eliminates unnecessary round trips by fetching data for multiple messages with a single IMAP instruction. QMF is also capable of pipelining commands to reduce round trips but this functionality has yet to be fully utilized.

Additionally QMF provides automatic detection of conversation threads by using messages headers, including the subject header. Conversations spanning multiple folders such as the inbox and sent folder are detected. A full featured searching and sorting interface is present, including multiple levels of sorting, as is a complete Boolean algebra filtering interface, that even allows filtering on custom fields. The disconnected access paradigm is supported by QMF. For a more complete description of QMF functionality see the documentation included in the source repository.

In summary QMF is an advanced mobile messaging framework.

Morten Johan Sørvig
Qt
Labs
Internet
 in Qt, Labs, Internet
 on Friday, September 18, 2009 @ 09:18

I’ve been playing with javascript lately, and here’s the result: QWebClient, a thin client for Qt applications. This is a pure Javascript implementation which runs in any modern browser (no plugins required). QWebClient works by starting an http server in the application process, which the browser then connects to. The project currently has research quality - get the source at qt.gitorious.org

webclient-irc.png

Live Demo on hold! Try again later :)

View Source
(The demo itself is running on an Amazon EC2 instance. If you don’t see a live demo here, try reloading the page. If it still doesn’t work something has gone horribly wrong on the server or my credit card has maxed out.)

Prior Art

At this point I’d like to acknowledge the Wt project, which is a forerunner when it comes to C++-driven web applications. The difference between the two projects can be summarized by this table:

Wt QWebClient
Focus Web Toolkit Thin client for Qt apps
Quality Stable code base Greater Hack

User Code

Adding thin client functionality to your application requires two lines of code for a simple one-user thin client. Supporting more than one user requires instantiating several copies if the user interface, which can be more complex depending on the application architecture. On the browser side the client code is equally simple, and if you request index.html from the server you will recieve the code.

Qt Side (Server) Browser Side (Client)
QWidget *rootWidget = ...
QWebClient webclient;
webClient.setRootWidget(&rootWidget);
<html><head>
<script type=”text/javascript” src=”:qwebclient.js” mce_src=”:qwebclient.js”></script>
</head>

<body>
<div class=”qwebclient”></div>
</body>

</html>

(Notice “src=:qwebclient.js”, the Qt resource system syntax has fond its way to the web!)

Scope

I’m targeting the use case where you have a server process running somewhere on a trusted network and want to expose a simple gui controlling it. This means:

  • Simple, Form-like applications only, no animations or high-perforance graphics.
  • Trusted networks only, there is little security. The implementation so far has been done with (eventual) security in mind though, so it’s not hopeless.
  • Limited scalability, support a few users only (check out http://79.125.3.129:1818/statistics to see how the live demo fares)
  • It’s a thin client, all program activity happens on the server (opening file and network connections, etc).

How Does It Work?

1. QWeblient starts a server at a user-configurable port

2. The Web Browser connects to the server and requests index.html. index.html loads qwebclient.js, which contains the thin client source code.

3.The Browser executes onLoad() which asyncronously requests /content from the server. The server replies with a json-encoded div element structure representing the widget hierachy. Common ui elemnts such as line edits are instantiated as native elements on the client side. All other widgets are transferred as images.

4.Keyboard and mouse events are POSTed to the server, which repsonds with content updates

5. When there are no client events, the browser will request /idle with one of its connections. The server will not reply to this request but keep the tcp connection open. (This the long-polling technique.)

6. Server events are sent to the client using the open long-polling connection.

Obligatory Conclusion

This has been a fun project! Crossing over from the C++ world to the web world is interesting, you get to speak http using QTcpSocket on the server side and then debug result in FireBug on the client side.

Thomas Zander
KOffice
Posted by Thomas Zander
 in KOffice
 on Thursday, September 17, 2009 @ 13:04

KOffice2 is still a fresh set of office tools. We released the 2.0, called platform release, just 3 months ago and work continues to make the suite more stable and to add the minimum set of features people should be able to expect.

All KOffice community members are continuing to do an awesome job with many bugs being closed and lots of love going into all the applications. This means that the 2.1 release will already be much closer to being ready for the big crowds.
We got a little help now too. Nokia has packaged KOffice for Maemo 5 environment with a new UI for Maemo 5!, This means that KOffice can run in the new Maemo device(N900) . Just to clarify, this is not a commercial product of Maemo but is a contribution by Nokia to Open Source. The developed application will be made available for download in a typical release-early release-often. Bugs will likely exist in this version.

This is exciting news as KOffice will be available to a huge audience and Nokia has been helping to fix bugs and make MS-Office document support more robust.

Nokia has created a document viewer for the Maemo 5 platform (Fremantle) based on KOffice and uses the KWord and KPresenter applications to load and display word processor and presentation documents. The application uses a custom user interface specifically designed to fit in with the Maemo 5 style.
KOfficeOnMaemo-1
Part of the projects goals is to help KOffice mature its loading and rendering of MSOffice documents.

It is important to point out that all contributions to KOffice have been made directly inside the KOffice subversion repository. The KOffice document viewer for Maemo 5 will be shown for the first time at Maemo Summit in Amsterdam between October the 9th and 11th. This release is a bit unfortunately timed as the official KOffice2.1 release will likely be one or two weeks later making the Fremantle office use the release candidate at first.

I think its very exciting to have the hard work of all the KOffice community members be rewarded by having the document reader be based on our hard work. I’m very thankful to be working on the project and I’m looking forward to continued cooperation between Nokia and the KOffice community.



© 2008 Nokia Corporation and/or its subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation in Finland and/or other countries worldwide.
All other trademarks are property of their respective owners.