This Month
January 2010
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Year Archive
Login
User name:
Password:
Remember me 
View Article  Video Clip of TextQuick 2 Message Stream

My lovely wife Emma bought me a new laptop for Christmas, and well as it turns out the web cam on it does an OK job of capturing a mobile phone screen. Not brilliant, but not bad. The tricky bits were:

  1. Trying not to get myself in frame
  2. Trying not keep the phone in frame steady

Anyway here is the fruit of this little trial. I don’t think the frame rate on the camera was high enough as some ghosting appears during the animation which isn’t present in reality.

 

Contact List

imageHere S60’s standard UI (Avkon) is being used to show the new TextQuick contact list.  As you can see this contact list has been extended. The application title has been made smaller so that more of the screen is turned over to the list of friends.The Venus graphics library is used to preform the transition from this screen to the next  Venus take over the rendering of the UI and animates the slide of the S60 Avkon list out to the left of the screen. This reveals the Message Stream screen.

 

Message Stream

image

The Message Stream Screen provides a view of all the messages associated with a contact. This is all rendered using Venus. Here you can see Venus rendering the message bubbles, animating the list (smooth scrolling), and drawing the text. You can also see that the theme in use on the phone is shown during this video. Venus is detecting the theme and making the correct changes to ensure that is is shown in the background.

I’m not sure if the camera caught it, but as you scroll through the messages TextQuick selects (highlights) a message. Once highlighted you can use TextQuick to forward the selected messages to others.

Each of the speech bubbles is rendered using a solid coloured outer line, and gradient fill from a dark version of the line colour at the top to a light, near white colour at the bottom. At the bottom of the speech bubble the message date and time are displayed. The blue speech bubbles show messages sent to your contact, and the orange / red colour shows message received from your contact.

Your thoughts?

Emma has already told me she doesn’t like the red colour. What do you think ? Blue and red, does it work? Should I change the colours?

I could also change the speech bubble shapes? Too much like the iPhone, should this change?

View Article  New Message View / Message Stream Views complete

There has been some great progress on TextQuick this week. The bugs with the alpha blending have been fixed at TextQuick appears to be running well within the emulator.

All the major areas of functionality appear to be working well. There are still some graphical / presentation areas to work on. This includes picking colours and graphics for Icons and pictures which will be used throughout TextQuick.

The next stage is giving a copy to my wife, Emma. She really is a great tester. Emma tested an initial version of TextQuick 2 before Christmas and the results of that really helped.

While Emma is testing the areas of functionality and providing feedback I shall be working on the new presentation. The integration of Venus has allowed me to produce a more dynamic application than the stock S60 3rd edition controls would have allowed me to do. However with this comes a lot of new choice. I’ve tried to follow the theme selected by the user as much as possible. So when showing the new Message Stream and New message screens TextQuick uses the default background images.

I do need help in picking the best colours, fonts, and icons for TextQuick. I would like to start posting up videos and screenshots of TextQuick running on a handset. This way you guys could see TextQuick running, Venus in action and I would love to get your feedback on colours, icons and images I have used.

 

How to take a video of a phone Screen

I’m not too sure what the best way of taking a video from a mobile phone screen is? I’ve tried using another mobile to create a 3gp file but the camera couldn’t focus and the image came out all blury. Does anyone know of a good way to record a video of a mobile phone screen?

 

Anyway lots done and lots more to do!

View Article  Integrating: Venus and TextQuick

As you guys all know I’m in the middle of completing the transition between the new message notification screen and the message stream. I would like the new message notification screen to fade out and the message stream screen to fade back in.

In integrating this functionality I have discovered a bug with the way I have implemented alpha blending for composite graphical elements in Venus. To help debug and resolve the error I have created a specific test harness application. The screenshots below are taken from this.

Venus can have one parent object, in the images below this is the rounded box, which can contain multiple child objects. When I change the Alpha value of the parent object it should take into account the alpha values of all the child objects too. Otherwise when I ask Venus to alpha blend the parent object it would appear to fade out, but all the child objects would stay the same. To deal with this I created a specific “AlphaManager” within Venus It is this AlphaManger which I am debugging at the moment.

The screenshots below illustrate the issue I’m working on at the moment:

    After an alpha blending animation, going from transparent to opaque ( the max alpha value) the Venus object still appears to be slightly faded. It shouldn't. It should be completely back to normal.

    Normal (before the animation):

    clip_image001

    After animation:

    clip_image002

    Eventually this leads to a bad alpha value:

    clip_image003

Fun and games! – I should get this issue cracked soon.

[update] Text taken from the first line of this page on Stephenie Meyer's web site. - I just needed some example text for the test harness and it seemed like a good fit. A bit more interesting than "lorem Ipsum"

View Article  New Year – New Features

I hope everyone had a fantastic Christmas break. I have been planning on providing a list of the new features I am working on for TextQuick 2, so here they all are:

TextQuick 2 Feature List

A rewritten Ranking Engine

The Ranking Engine is the heart of TextQuick it ranks all messages detected in both your Inbox and Sent box, matching them up to contacts from your address book. The rewrite added support for real time message handling; when a message arrives and TextQuick is running the message is ranked straight away, and list of contacts is automatically re-ranked.

At the same time I added support for recording the message history – simply put,when the message is ranked, the Ranking Engine now also saves a pointer to the message. This was a simple, but important change as it now allows a Message Stream view.

 

A rewritten File Handler

The old file handling routines were designed to only save a small amount of data. Now that the Ranking Engine is saving pointers to messages the amount of information being saved has increased. The old file handler would take too long to load and save all the this information, so I updated and replaced the file handler with a new implementation. This allows for more dynamic content and automatically reclaims space, reducing the disk space that the old system would have consumed.

 

New message arrival

With the Ranking Engine changes it is now possible for TextQuick to display new message pop-ups. One of the most frustrating things I find is when a message arrives the does  not tell you who it is from or what it is about. The new message popup in TextQuick provides all of this.

 

New graphics library and effects

The Venus graphics library is now integrated into TextQuick. This is used to power the new screens in TextQuick, these are the Message Stream and the New Message notification screens.

 

Message Stream

The message stream shows you all the messages you have sent or received to a specific person. Venus provides the rendering for this screen, and provides smooth scrolling and automatic resizing when the screen orientation changes.

 

TextQuick 2 has seen an overhaul of almost every area of the application. I’m completing the new message arrival screen and adding a feature which allows you to jump from a preview of the recently received message to the message stream. Once this is complete I am hoping to be able to offer a beta version to a select few.

View Article  SEE09 - What a fantastic trip
I didn't want to report anything on my blog until it became official, however for the last couple of months I have been working with the Symbian foundation and the Symbian Horizon private beta program. Symbian picked TextQuick as one of their launch applications! The Symbian Horizon team have been brilliant in their support.

Twitter: #see09 textquick icon was shown during keynote! Brilllant - rock on symbian horizon http://m.mind-flip.com for a free demo


As Lee Williams the Executive Director of the Symbian foundation launched the Symbian Horizon website, right behind him on the big screen was a screen shot of the Horizon web site, and right there for everyone to see was the TextQuick logo. Unfortunately I just wasn't fast enough with my camera to capture moment – however I would encourage you to head over to the Symbian Horizon site.

For the first day of the SEE 09 event Symbian Horizon provided me with a pod completely dedicated to TextQuick, this was a fantastic chance for me to demo TextQuick to everyone within earshot. Apologies to all those folks trying to eat their lunch near by – I think I preach to all of them about TextQuick
View Article  Mind-Flip at the Symbian Show 2009. TextQuick via Symbian Horizon

It has been a manic couple of weeks. I am please to say that TextQuick 1.5 has been accepted by the Symbian Horizon program, and will shortly be available to download through a number of new sites. I've been working hard to ensure that TextQuick is ready for the Symbian Horizon program. I'll be posting more news on this as soon as I have it!

Today sees the start of the SEE 2009 at Earls Court in London, I am attending – if your around and would like to meet up drop a tweet – you can find me on twitter at mcwoods.

See you all later!
View Article  Developer Diary 5: A long time
Ok, no excuses. I should have updated you on my progress earlier...

I have been working on Venus, and progress has actually been really good. I have an initial version of the graphics library created, and have integrated it into TextQuick. This has allowed me to implement some really cool features. - But more about that later.

First, let me tell you about Venus. Based on my last post Venus is based on a set of graphical elements arranged in layers, or by Z order. I place these on top of each other, and draw them in the correct order to create an image in the screen. This basically creates a simple scene graph representing the image on the screen. Each element or node in the scene graph has a set of common properties. These include everything from the basic, X,Y,Z right down to alpha values, background colours and so on.

Although this allows me to create objects and display them on the screen, it does not allow me to animate them. Let's assume that I want to move an image across the screen horizontally. To do this I need to change the images X position. Using my scene graph, all I need to do is change the X value of the object and image will have appeared to have moved.



The beauty of this approach is its simplicity. The scene render takes care of redrawing the screen, and the object simply appears to have jumped from its original location to the new location.

While this does make things move, it does not provide a sense of animation, or fluid movement. To do this I need to modify the X value from its original position to the new position slowly over a period of time. If I play back these changes it gives a sense of animation, as the image appears to update over time.

If all the nodes within the scene graph have the same basic set of properties, and if these properties can be updated in the same way then it would be possible to easily change, not just one property, but many properties all at the same time. For instance, by changing the X and Y values of the image we can make the image move in a diagonal direction.



Complex animations can now be built up, with one node being manipulated in many ways at the same time. Indeed if there was a way to manipulate multiple properties on multiple objects all at the same time then this would create very complex animations.

Concentrating on Animation
Once I created the scene graphic render, I concentrated on creating an animation player. Of course no one would want all the objects on the screen at the same time, instead we would need some way to chain together actions or events. Basically to construction a timeline of actions to play back events on the screen. Some of these timeline events we would want to occur at the same time, like changing the X and Y values of the image to create diagonal movement. There are other things however, that we would want to happen sequentially. So for instance the image could move to the top right of the screen and then slide back down the screen.


To support this I created an active object based animator. The animator plays a set of timeline commands, and the commands can be chained together. You can chain the commands together sequentially, so each plays out after the other. Alternatively you can chain the events together simultaneously making them all happen at the same time. Allowing different combinations of these time line commands allows for some really complex behaviour.

I created a test harness to test Venus. This allowed me to try out some of the base functionality, simple rendering and animation. Of course, after all of the talk of Amiga's and Bitblt operations, I simply had to use an iconic image from the Amiga as the basis of the test harness. The following image is taken directly from the test harness.



This gave me the basic functionality I was after, but of course... there was still more to do.

Multiple Images
In any given scene there may be multiple copies of the same image, for instance a collection of stars on a background. To do this with the initial version of Venus would have required the me to load multiple copies of the image, created a scene node for each star.  Loading multiple copies of the same image would waste memory, which is something of a limited commodity on a mobile phone. A better approach would be to have each of the nodes refer to a single image, and then have the rendering engine use the same image in many places to create the star field.

To enable this I created a referenced counted image handler within Venus, I called this the ImageBox. Just as a children's toy box contains toys, the imagebox should contain all the images Venus needs to render.

Vector Graphics
Now even with bitmap graphics being displayed there is still the need for some form of Vector graphics. This is really handy on mobile phones when the screen resizes. To support this I created a special vector graphic node within my scene graph. This could contain any number of polygons. The vector graphic node would then render these polygons within it's layer. This provided Venus with vector graphic support.

One of the really powerful things about vector graphics is that they can be resized, and rotated.   Both the scaling and the rotation can be exposed as properties of the Vector graphic node. Once I did this I was able to use my animator to animate the contents of the vector graphic node. For instance rotating polygons to produce a spinning wait symbol.

Event Notification
Now that I've got a scene renderer, an animation control, the imagebox, and vector graphic support (phew), I still don't have enough to create the user experience I want. User Interfaces are based on responding to input from users, signals from other parts of the application or other events that are triggered throughout the system. I need the nodes within the scene graph to listen for and respond to events. So the next major development effort was adding support for events, both user generated and system generated. I ensured that each node was capable of receiving and generating events. Events can be signalled between objects, with a source and a destination. They can also be broadcast to a collection of nodes. This now allows the whole user interface to respond to user input!

Basic UI building blocks
Ok, so now Venus has event notification, a scene renderer, and animation control, the imagebox and vector graphics support... I am still not ready to produce a UI. Typically in a user interface I will need to display textual information to users. To allow me to do this I added a new node, specifically for rendering text. In creating this node I added event handling support, allowing the text node to respond to special events containing text. This way I can generate a special event which will trigger the text node to update and display new text!

This then gave me the basic building blocks of a new user interface.

TextQuick
So back to TextQuick, I integrated my completed Venus graphics library into TextQuick and the first major, rocking, area of functionality I focus on was... (dramatic pause).... the splash screen!

OK, OK, I know the splash screen is hardly a major area of user interface functionality, so let me explain. The splash screen is a fantastic integration experiment, as it would allow me to go to town using the functionality that Venus provides. One of the first versions of the splash screen I implemented is shown below. This also helps to show the majority of Venus' features off. The image below shows the splash screen along with some notes regarding the features that are visible.



This is not the final version of the Splash Screen, as that is still under development. However I do think it shows off some of the basics of what Venus can achieve. In my next blog post I want to cover some of the new features I've added to TextQuick.

View Article  Developer Diary 4: A good blt'er of inspiration
I've never owned an Atari ST, nor was I lucky enough to own an Amiga. - Instead I had an Amstrad 5086 it was an Intel 8086 8Mhz beast! I did however have some friends who owned Amigas and Atari STs and of course we would argue until the cows came home about who had the best machine. - Just in case your wondering, my PC never won. However in hindsight... I think I've done all right... Why am I talking about old computers ? - Simple, graphics drawing. I need to draw graphics quickly on the screen to produce some of the effects I need.   more »
View Article  TextQuick 1.5 Signed again
I am now pleased to say TextQuick 1.5 is back again, and available to download.   more »
View Article  Developer Diary – Entry 3 : Making Progress, composing some requirements
Thank you all for the comments and support around Venus! It's extremely motivating to get such feedback - I really appreciate the offers of help, support, and encouragement! In this post I want to explain some of the work I've done in specifying my requirements for Venus. Keep the comments coming, let me know what you think about the direction I'm taking with Venus.   more »
View Article  Developer Diary - Entry 2 : Introducing Venus
How can one person try to compete against the slickness of Apple iPhone / Palm Pre using the stock S60 SDK ? - I'd like to introduce you to "Venus".   more »
View Article  Developer Diary - Entry 1: 2009. TextQuick update & Sounding like Batman
Happy New Year !! A vast update to TextQuick is coming & how to sound like batman, but feel like Hans Solo after being defrosted from his carbon bath.   more »
View Article  Hooklogger : Tracking down memory leaks
Hooklogger is a great tool for Symbian. I've used it a number of times to track down memory leaks.   more »
View Article  Pulling my hair out: Emulator Tweaks
Pulling my hair out while trying to simulate low disk space conditions within the S60 emulator. Arrr.. Just what you need on a Friday.   more »
View Article  Starting an application at phone boot time
As a developer this is a question which comes up time and time again. It's actually not difficult to do, but the files you need to change and how you change them can be quite tricky to remember. I did some research on this during my spare time, so I've decided to dig out my notes and place them up here for future reference.   more »
View Article  Problems with Handango : A Note to TextQuick 1.4 Owners
Help for anyone trying to obtain an unlock code (reg code) to upgrade from TextQuick 1.4 to TextQuick 1.5.   more »
View Article  TextQuick 1.5 Released : Open Letter To Existing Users
I'm pleased to announce the release of TextQuick 1.5. As an previous purchaser of TextQuick you are entitled to a free copy....   more »
View Article  TextQuick 1.5 Released
I'm so thrilled to be able to tell you all that I've completed TextQuick 1.5 ! It's now available to download...   more »
View Article  TextQuick 1.5 : Opening Up To The Rest Of The World
I want to tell you about how I'm opening up TextQuick to more people than ever before. I've put some exciting technology under the skin of the forth coming release of TextQuick. This enables me to deliver a better version of TextQuick, and it provides a fantastic platform for moving forward. There are some awesome plans under way to make TextQuick even better in the future.   more »
View Article  Rediscovering the missing EPOCROOT
Symbian / Nokia removed the EPOCROOT environment variable. This tool let's you get it back, by obtaining the path to the currently selected environment.   more »
1 Attachments
View Article  You can't fix it if you don't know it's broken
Since TextQuick 1.4 was released a handful of users contacted me with issues they discovered. Their input has been fantastic. As the saying goes “You can't fix something if you don't know it's broken”, and it's absolutely true.   more »
View Article  TextQuick 1.5 RC 1
Happy New Year! I hope everyone had a fantastic holiday season. I'm pleased to announce that TextQuick 1.5 Release Candidate 1 is ready.   more »
View Article  Protothreads : Removing the State from State machine
Protothreads and how they can be used with Active Objects. - I discovered a really excellent paper on Protothreads. This paper describes how Protothreads can simplify code by removing the need to maintain the state information. They provide a stack-less light weight thread-like structure. It allows a developer to create code which looks and acts as if it's thread, although with a much reduced overhead not to mention producing code which more closely matches the developers original intention.   more »
2 Attachments
View Article  I'm Back!
With news of TextQuick 1.5   more »
View Article  A quick break
Just a quick note to let you know that I'm taking a quick break, I'm away on holidays for the next two weeks. So development of TextQuick will be a on hold until I return. See you all real soon!   more »
View Article  Calling space in an emergency
Why does the letter " " cause so many problems, and in an emergency I can't call my friend. The bugs and their fixes coming soon in the first update to TextQuick 1.4   more »
View Article  TextQuick beta 3 is dead... Long Live TextQuick 1.4
The end of the beta period and the creation of the first release version of TextQuick, means I know get the chance to lift my head from the code and talk about some of the new features I've added.   more »
View Article  Hello, this is TextQuick Beta 3 calling
Chiseling at the code face to add a new feature to TextQuick.   more »
View Article  Bugs & Features
With the last of the major bugs out of the way it's time to look to the future, and adding some more features. What would you like to see included in TextQuick ?   more »
View Article  Back to the code-face
Just when I thought it was time to relax, I'm back at the code-face again.   more »
View Article  TextQuick
Make your phone easier to use.   more »