Blog  •  June 10, 2015  •  By ICS  •  Qt QML  •  Qt, Boost, C++, Logging
In this post, we'll look at Boost::Log, a facility of the Boost C++ libraries that makes it easy to add logging to applications. QMessageLogger 1 was introduced in Qt 5.0 as a means of providing a framework for logging application messages. While QMessageLogger is useful as a lightweight logging tool when in debug mode, it fails to provide the flexibility and features necessary to suit many application requirements. Boost::Log V2 2 was first released with Boost 1.54 and provides a flexible, robust framework that is capable of supporting a variety of application logging...
Blog  •  January 19, 2015  •  By ICS  •  UX  •  User Experience, UX, team building, team formation
Welcome back!  Today I’ve been pondering team formation and team building.  While I try to avoid buzzwords, team building is often about synergy – that moment when a team comes together and the overall team performance is even more impressive than individual contributions alone.  Teams in general, often go through four phases - forming, storming, norming, and performing. ₁ Each of these stages presents its own challenges for the team, whether it’s determining team or project objectives, how to build trust, learning to resolve conflict, choosing how to work together as a team or...
Blog  •  December 8, 2014  •  By ICS  •  UX  •  UX, User Experience, design-centric
Welcome back for a chat about user experience (UX) in the real world. Today, I want to talk about user experience and coffee. Now, I know not everyone drinks coffee, so for the sake of discussion, let’s assume that you want to drink some coffee. Initial Decision Once you’ve decided to drink coffee, the next question is what kind of coffee. Instant? French press?  Maybe take it black, with milk, with cream, sugar or no sugar, espresso or flavorings? The list goes on and on. Which factors will determine the type of coffee or caffeinated drink you will select? Possibly personal...
Blog  •  October 27, 2014  •  By ICS  •  UX  •  Mental models, User Experience, UX, design thinking, user interfaces, workflow, gesture
Welcome back to the coffee corner!   I hope that you’re doing well and enjoying your user experience (UX) rock star status on any project you may be working on, no matter your role. Today, we’re going to be chatting about Mental Models - what they are, why we should care about them and how we can leverage them to inform design thinking. What are Mental Models? Mental models are essentially just that - mental representations for how people view and make sense of the world.  When people interact with new information or a new consumer device for the first time, they make sense...
Blog  •  September 2, 2014  •  By ICS  •  UX  •  Usability, User Experience, UX, good design
I just made it to my daily 10:30am coffee break (the one where I refill my coffee mug, since I already drank my 8am coffee) and wanted to spend a moment to chat about usability/user experience (UX) and project management (PM). Now, I’ve never met you, so you might be on the usability side, the PM side, or juggling both roles.  Or you might just be someone interested in either the UX or PM worlds.  Nevertheless, I only have a few minutes while the office Keurig works its magic, so let’s assume that you’re a PM who’s ever so slightly skeptical about UX. What do you think are the...
Blog  •  August 18, 2014  •  By ICS  •  UX  •  Usability Testing, usability test, device design, User Experience, UX
+ Just between the two of us, I think the first 10 seconds of a usability test are the most important, not because you’re already running the test - far from it.  It’s what happens even before testing begins. Your participant who is already seated, might be perusing the consent form or pre-test questionnaire they found on the table.  More likely, though, the participant is looking around the room, trying to figure out what they just volunteered to do and hoping they “pass”.  Yes, I intentionally put “pass” in quotation marks, since the folks who perform usability testing...
Blog  •  June 9, 2014  •  By ICS  •  UX  •  User Experience, UX, designing for embedded, navigate, good design
Whether you are designing the user experience for mobile, embedded products or a website they all have elements that when applied consistently can make any product or website successful. One website that most of us are either familiar with or have used is eBay.  The online auction and buy-it-now site has been around since the mid 1990’s, and has millions of users (as of a year ago, there were approximately 84 million active, registered users (1).  This is a website that many people from various technical and non-technical backgrounds can and do use daily.  Some people use...
Blog  •  March 3, 2014  •  By ICS  •  UX  •  UX, UX Design, Workflow Analysis
Let’s talk about a hypothetical scenario.  As part of a product launch team and as part of product management, you’ve just been appointed the dreaded process documentation assignment. To make things even more interesting, you have to both document the current process and identify possibilities for improvement.  Or it is possible your team has that one task that seemingly takes twice as long as it should to accomplish.  Maybe you are a user experience designer trying to understand a client process or identify stakeholders to talk with prior to starting a project. ...
Blog  •  February 3, 2014  •  By ICS  •  UX  •  UX Design
Visual design has the potential to make or break a user experience. The reason most people believe graphic designers exist is to make an interface look pretty. While this is an important part of the process, most people don’t realize that visual cues are designed with the end user in mind. When you begin the artistic phase of your project, there are three important elements to consider: 1. Design for Your Target Audience It’s important to know who will be interacting with your interface. This knowledge will help immensely with dictating the type of creative style to go with. If your...
Blog  •  January 2, 2014  •  By ICS  •  Qt QML  •  Qt
One of the standard architectures of software systems is to have an application that talks to a server in some form. For example, a Qt application that talks to an Apache-based server with a REST interface. We see this with many of the applications we write for customers. The code in this blog will be Qt and C++ based. However, once the SSL certificate has been added to the system, it's perfectly fine to use the certificate from QML requests as well. There are several steps that need to happen to make this connection secure. One is to use an encrypted connection for which this article...
Blog  •  December 17, 2013  •  By ICS  •  UX  •  UX
A few months ago, we put on a webinar about usability testing. One of the questions at the end was about justifying spending on usability design and testing. More broadly, how to convince management that good design matters – and is worth investing in. This is an industry-wide question and one, which user experience professionals are often asked in an “elevator pitch” kind of situation. Not only do we need to be able to explain the advantages of good user experience design, but also we have to be able to do it quickly.  Given the time constraint, let’s explore how to discuss the value of...
Blog  •  November 4, 2013  •  By ICS  •  UX  •  Usability Testing, UX
Congratulations!  You've finished your usability test.  What's the next step?  How do you organize, analyze and present your findings and recommendations?  Keep reading to find out! Organize Before you can begin to sift through your data, you need to be organized.  Pre and post-test surveys should be collected and sorted according to participant number, then entered into some sort of tracking system like a spreadsheet.  If you took written notes during the test sessions, type them up.  In addition, if you were able to record the test sessions, watch...
Blog  •  October 30, 2013  •  By ICS  •  Qt QML  •  Qt, QML, C++, Cascades, BlackBerry
In this post we'll look briefly at the Model View support from QML in BlackBerry 10's Cascades Framework, including an example program. The Cascades framework lets you create UIs for the BlackBerry Application Platform with relative ease. This Qt based framework can be used to develop native applications for the BlackBerry 10 mobile platform. It supports development in C++ and/or QML. Recently, I have been using Cascades for development of some mobile applications and I wanted to show an example of the support it offers for data management using Model/...
Blog  •  October 7, 2013  •  By ICS  •  UX  •  UX
We've all seen them.  We use them on a daily basis, often multiple times a day and without much conscious thought.  They're everywhere.  Doors.  Interestingly, doors can show us why we should care about the user experience. Doors are straightforward, right?  They open, and we walk through them.  Nevertheless, sometimes something so simple on paper can actually be rather confusing in real life. How many of you have walked up to a new building for the first time and reached for the door handle -– and the door won't open as you expected?  The experience...
Blog  •  September 18, 2013  •  By ICS  •  Qt QML  •  Qt, QML
The topic of application architecture rarely comes up in the context of Qt, because as Qt developers we tend to be more interested in the classes and objects (trees) than the application as a whole (forest). However, the architecture of a Qt Quick application is the difference between pain and joy. A good architecture makes C++ and QML integration seem natural, while a poor and muddled architecture makes it an exercise in frustration. Multilayered Architecture A multilayered software architecture is one that organizes different responsibilities into layers. Each layer has a broad...
Blog  •  July 17, 2013  •  By ICS  •  Qt QML  •  Qt Designer, Qt
This blog post will describe how to write a custom Qt widget and how to integrate it into Qt Designer so that you can drag and drop it onto your designs. It will also provide an understanding of important differences between Qt 4 and Qt 5 when it comes to creating designable widgets. The example we will work through is an LED (Light Emitting Diode) object. It is designed to be a realistic representation of the real thing: The diameter of the LED is measured in millimeters (like real LEDs) and can be any color you want (unlike real LEDs). The on/off state can be changed...
Blog  •  July 2, 2013  •  By ICS  •  Qt QML  • 
Introduction As promised, here is a follow-up to An Introduction to Clang. I mentioned in that posting the cool thing about Clang is that it is library based and offers public APIs that allows one to access information about a C or C++ program with relative ease. In this post we will work through an example using Clang's API to write our own "baby IDE" that parses C and C++ code and performs syntax highlighting. Clang consists of a number of different libraries and of primary interest at this time, is libclang. Clang's evolution has been rapid so most of the...
Blog  •  May 17, 2013  •  By ICS  •  Qt QML, Raspberry Pi  •  Raspberry Pi, Embedded
This is a HOW TO guide for building Qt 5 for the Raspberry Pi, and building and deploying Qt 5 apps using Qt Creator. This guide will be using Raspbian “Wheezy”, a Debian based distro designed for the Raspberry Pi. This guide also assumes the use of Linux or UNIX on the workstation side. Note: Throughout this guide the symbol “$” denotes a command prompt on the host workstation, and “pi$” denotes a command prompt on the target Raspberry Pi. Getting started Downloads You will need the following downloads: The latest Raspbian “Wheezy” version of Debian Linux [2013-02-09]...
Blog  •  April 22, 2013  •  By ICS  •  Qt QML  •  Qdatastream, Qt
Introduction When I first started using Qt in 2005, one of the classes that I found the most interesting was QDataStream. It was similar to something I had written many years earlier for standard C++ that performed a similar function but with iostreams. I wanted to cover enough aspects of this topic to make it immediately useful to the reader. As a result this post is a bit on the long side. Some of this is already covered in the Qt documentation for QDataStream. I recommend reading that first. The source code is written to support Qt 4 or 5. QDataStream is a very useful class for...
Blog  •  April 8, 2013  •  By ICS  •  Qt QML  • 
In this blog post I will be writing about some of my experiences with clang. What is clang? It is a front end to the LLVM compiler and is designed to compile C, C++, Objective-C, and Objective-C++ to machine code. The LLVM Project "is a collection of modular and reusable compiler and toolchain technologies," meaning that you could use LLVM to create a compiler for just about any language you'd like, including your own invented language, were you so inclined. The LLVM core libraries include things such as code generation for a number of CPUs and optimization technology. As my purpose is...
Blog  •  March 25, 2013  •  By ICS  •  Qt QML  • 
Introduction A quick trivia quiz: Does Qt use multiple inheritance? If so, how many public Qt classes use it? Does any Qt class directly inherit from more than two classes? Does Qt let you multiply inherit (directly or indirectly) from QObject? If you can correctly answer these questions off the top of your head you're definitely a Qt and C++ guru and can stop reading now. If not, then by the end of this article you will be able to answer these questions and impress your colleagues with your knowledge. What is Multiple Inheritance? Multiple inheritance is a feature...
Blog  •  March 11, 2013  •  By ICS  •  Qt QML  • 
Qt 5.0.0 introduced the QStandardPaths class. This expands on functionality that was in Qt 4 in the QDesktopServices class. The QStandardPaths class provides methods for accessing standard paths on a system such as the location of the user's desktop directory or location of a program executable. The class provides only static methods, so it never needs to be instantiated as an object. I wrote a small Qt-based graphical application that illustrates many of the features of the class. A screen shot is shown below.   Given one of about fifteen...
Blog  •  January 22, 2013  •  By ICS  •  Qt QML  • 
One sometimes needs to store information in a temporary location. POSIX compliant platforms like Linux provide the tmpfile() library function to create a unique temporary file that is automatically deleted when it is closed or the program terminates. Qt provides an abstraction of this with the QTemporaryFile class. Qt 5.0.0 introduces a new QTemporaryDir class that can create a temporary directory. The directory name is guaranteed to be unique and gets created by the constructor and removed in the destructor. Typically you create a QTemporaryDir on...
Blog  •  May 4, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, Cordova, Raspberry Pi
We've recently been running the Cordova tests and making some fixes to get them to run better. We've documented on the Wiki how to run the Cordova tests. See the section "Running Cordova Tests" at this wiki page. We hope to have a demo video up soon showing the tests running on the simulator and Nokia phones. Incidently, the Qt Wiki recently moved from http://wiki.qt-project.org/ to http://qt-project.org/wiki/ The older Wiki will go away at some point. We made a couple more videos showing a preliminary version of Wikipedia Mobile running on Cordova Qt....
Blog  •  April 23, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, Raspberry Pi, Cordova
Work has been slowing down somewhat as Qt 5 has been firming up for release. The Qt 5 alpha came out on April 3rd and we tested our code with it. Work is moving ahead for a Qt 5 beta release and then the 5.0.0 final this summer. Qt 4.8.1 also came out and we tested Cordova Qt with it. A 4.8.2 is expected in the next few weeks, indicating that Qt 4 is still actively being developed and is expected to do so for some time until Qt 5 is stable. Realistically I would expect many people to continue to use Qt 4 at least until Qt 5.1 is out, as some of the Qt Quick 2 C++ APIs will not be...
Blog  •  March 26, 2012  •  By ICS  •  Qt QML  •  Qt, Mobile, Cordova
In the past week or so we commited some more code for Contacts and Notification. Camera support has been submitted as a pull request. We are doing some testing on Symbian with a Nokia E7 phone  as we haven't done much testing on Symbian up to now. I updated the README.md file to better reflect the current status. I also added some links to the Wiki on Getting Started. We posted a YouTube video of Wikipedia Mobile running on a Nokia N9 running Cordova Qt. This can be considered alpha quality. We ran into some issues with WebKit on Qt 4 on...
Blog  •  March 13, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, PhoneGap, Raspberry Pi, Cordova
Throughout this project one thing that has been constantly changing has been the source code repositories, both due to several project names changes and with the move to being run as an Apache project. This last week the old repository at http://github.com/cordova/cordova-qt was removed and replaced by the read-only repository at http://github.com/apache/incubator-cordova-qt. The upstream repository is at http://git-wip-us.apache.org/repos/asf?p=incubator-cordova-qt.git. Changes made to the Apache repository get mirrored to github. Developers who are not maintainers can...
Blog  •  March 2, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, QML, Raspberry Pi, Cordova
Since the last posting we properly set up deployment of Cordova Qt for MeeGo Harmattan (e.g. the Nokia N9 phone). We also got Qt 5 packages including WebKit built for MeeGo Harmattan and tested it on a Nokia N9. Incidently, a big PR1.2 software update rolled out this week for MeeGo Harmattan phones. Both the Qt 4 and Qt 5 versions now use a QML WebView as there is no support for widgets on some mobile platforms. However, Symbian S60 systems may still be using Qt 4.6 which doesn't support QML so it looks like we still need to maintain a widget-based version for these systems. More of...
Blog  •  February 17, 2012  •  By ICS  •  Qt QML  •  Qt, Cordova, PhoneGap
This week we switched to the new repository. Some pull requests from the old repository had to be resubmitted. Changes were committed for : Patches to get code to compile with Qt 5 (still backwards compatible with Qt 4) Adding Compass sensor suport Renaming references to Callback or PhoneGap to Cordova Changes to use QML WebView in the Qt 5 version Pull requests are in review for Accelerometer support and Alerts. We're also moving to using a QML WebView for the Qt 4 version as there are some limitations with the C++ QWebView widget (at least on MeeGo Harmattan) that this...
Blog  •  February 13, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, Cordova, Raspberry Pi, PhoneGap
This week we finished implementing some Cordova APIs (at least for the Qt 4 version). Compass and Accelerometer are done and some of Events was implemented. Notification is done as is most of File support and we are starting work on Contacts and Camera. Note that I am going to start consistently using the name Cordova rather than Callback orPhoneGap for this project. One of the team completed the demo code for the new Qt5 WebView that illustrates passing messages in both directions between the QML JavaScript and WebKit HTML/JavaScript environments. I also...
Blog  •  February 6, 2012  •  By ICS  •  Qt QML  •  Qt, PhoneGap
There was no blog posting last week because I was away for some vacation in a warm place. This week work continued implementing the APIs for Accelerometer and Notification and using the Qt Simulator for testing. We also started looking at the new APIs needed to use WebKit2 from Qt 5. With Qt 5 and Webkit2 the APIs for QtWebKit and Web View are changing significantly. This is because with WebKit2, WebKit and the application run in different processes. The old QWebView widget will only be supported on Qt for desktops and won't use the new WebKit2. Mobile phone platforms typically won'...
Blog  •  January 29, 2012  •  By ICS  •  Qt QML  •  Qt, PhoneGap, Cordova
I thought it would be a good time to step back and review where we are on the Cordova Qt project, as it may not be obvious just from glancing at the Wiki. Software The source code is maintained in the Apache git repository at git-wip-us.apache.org as well as a read-only mirror for checkouts and pull requests at github.com (which is standard practice for Cordova). Links to the repositories are on the project Wiki. Documentation The main portal for information on the project is the Wiki page. The Wiki has a section on "Getting Started" with links...
Blog  •  January 16, 2012  •  By ICS  •  Raspberry Pi  •  Raspberry Pi
The Raspberry Pi folks report that the first batch of production boards is finally in production. The first 10,000 units should start becoming available around the end of this month. ICS should be getting a number of boards from this first batch which we will distribute among our developers. The people that won boards in our booth at Qt Developer Days should also shortly be receiving vouchers to claim their boards. Ten of the beta boards went up for auction on eBay as a fundraiser for the non-profit Raspberry Pi foundation. The first board sold was bought by an anonymous buyer and...
Blog  •  January 16, 2012  •  By ICS  •  Qt QML, Raspberry Pi  •  Qt, PhoneGap, Raspberry Pi
This week we did some marketing to promote the project. I made a posting to the callback developer mailing list and we put a link to this blog from the ICS web site. Quim Gil of Nokia kindly made a posting to the Nokia Qt blog. I also recorded a podcast with Mark Hatch for the ICS This Week in Qt podcast. All of this effort stimulated some good discussion on the blogs and callback developer mailing list. Based on comments from some of the Qt 5 and WebKit developers, we will need to implement the Web View differently in Qt 5 since the QWebView widget will...
Blog  •  December 6, 2011  •  By ICS  •  Raspberry Pi  •  Raspberry Pi
As part of the initiative to put Qt 5 on Raspberry Pi, ICS gave away over 70 Raspberry Pi boards to interested developers at Qt Developer Days last week. If you were one of the lucky winners, be on the lookout over the next few days for an email from ICS so you'll know how to go about receiving it once they are available. More details and a video demo are available here: Qt 5 + Raspberry Pi
Blog  •  November 29, 2011  •  By ICS  •  Raspberry Pi  •  Raspberry Pi
Be sure to stop by the ICS stand at Qt Developer Days this week for a chance to win a Raspberry Pi. We'll be giving away 50 boards over the course of the conference!
Blog  •  November 23, 2011  •  By ICS  •  Raspberry Pi  •  Raspberry Pi, Embedded
Here's a video of my colleague, Roland Krause, demonstrating Qt 5 + Raspberry Pi at Qt Dev Days in Munich. Stop by our booth in San Francisco next week to see it first hand...and for your chance to win one of your very own!
Blog  •  November 7, 2011  •  By ICS  •  Raspberry Pi  •  Raspberry Pi
Good talking to you all at Qt Dev Days Munich. We captured some of our Raspberry Pi thoughts in a podcast posted here: This Week in Qt Episode 23 We'll be at Dev Days in San Francisco beginning Nov 29 - hope to see you there!
Blog  •  October 21, 2011  •  By ICS  •  Raspberry Pi  •  Raspberry Pi, Embedded
About three weeks ago, Nokia arranged for ICS to gain access to the Raspberry Pi board so that we could help with an exploratory open source effort to get Qt working on this platform. That is how I got my chance to hack some code for this amazing board. The idea was to get a bleeding edge version of Qt 5 to run and to experience first hand hardware accelerated QSceneGraph based QML. And indeed bleeding edge it is - but also blazing fast. Now, first things first: We have all by now heard of Raspberry Pi, the newest entry into the world of dessert named geek toys. Actually we are talking...