Unknown's avatar

An insight from 1800’s has arrived in your Inbox

In the middle of a meeting and surrounded by technology I my mind suddenly jumped out of the meeting and raced backward to a visit I had made years ago, as a boy to a folk museum. 

In my mind’s eye I saw the letter, on faded coffee stained paper, hand written in impeccable script, but with spelling mistakes and corrections called out in a red ink by another hand.

The letter hangs in the Bank building of a folk museum, it’s from an employee to a bank customer and the corrections were made by the branch manager the letter itself dates from the 1800s. The memory of it made me stop and think.

In the past, when a went to produce written communication it had to be done by hand, and it had a cost associated with – all that time to write and re-write the letter, asking the branch manager to check it over and proof read it. This all takes time. It means that written communication was used judiciously, there is an impedance, a cost involved in writing it so you only did it when you had to.

So in the 1800 did one bank employee write a letter to someone sitting beside them to ask them to assist with a task? or help them out? or follow up on a meeting? No, of course not. They simply talked.

But that’s not what we do, nope – we, and this covers nearly every one of us, indeed I’d say that everyone reading this post has at some point sent an email to the person sitting beside them in the office asking for help. Could we have simply spoken to each other, wouldn’t that have been quicker?

Unknown's avatar

What is “The Cloud”?

There is still a good deal of confusion, even among the IT literate about what “The Cloud” really is. It doesn’t help that some consumer orientated companies are using the term to help publicise their own services, for example, HTC has a cloud, Apple has an iCloud, DropBox lets you store your files in the cloud. The list is almost endless…

To the end user it appears as if all this stuff vanishes into the mythical ether called “the cloud”, but no one actually tells you what the cloud is.

During my time at Microsoft as a PM in Windows Azure I learnt a good bit about clouds, and in this blog post I’m going to try and clear up this perception a little by providing a quick high level overview of what a cloud is, why they are going to be more relevant in the future and roughly how they work.

The cloud in two sentences:

Clouds are a way of organising servers which makes them cheaper and more efficient to run. This way of organising computers makes launching new services cheaper, because of this “clouds” are increasingly becoming the backend muscle which powers a lot of the new consumer services which are being offered.

Peering into the Mist: What is this new organisation?

Traditionally as an online service provider we would try to work out how successful we think our new service is going to be, then we’d do some load and stress testing of our development system and based on this we’d work out how many servers we need. In this calculation we’d try to err on the side of caution, allowing for spikes in users / traffic. Then we’d have to go and buy or rent these machines, configure and set them up.  As a company this would mean that we’d have to fund the purchasing / renting of these machines up front, this could be a large amount of cash for a service which may or may not take off!

Cloud Approach

The Cloud approach is different. It allows us to rent just the machines we need now just for launch and no more. If the service takes off we can add more machines. In fact on some (nearly all) cloud services allow us to programmatically add new machines. An example of an application which makes use of this is SmugMug, an Amazon Cloud hosted service. They experience more users on Sunday night than at any other time. Their service automatically adds new servers when needed, and removes servers when no long required. This means that SmugMug provides its end users with a responsive web site which can cope with demand, and at the same time they can save as much money as possible by only using the computers they need, when they need it.

Making the Cloud Work

It sounds easy doesn’t it; “just add the computers you need when you need it”. To get that working automatically it more challenging than you might think at first. Each of the major cloud hosting companies provide a basic set of tools for developers to use which allows them to cope with these challenges.

Virtual Servers

To allow the cloud services to offer new servers at a moment’s notice each of the servers is offered as a virtual machine. If we want another server the cloud will give us another virtual machine. This machine could be on the same physical computer, or it might not – it could be on any physical computer inside the providers cloud. These virtual servers can be setup and torn down automatically via an API. Almost all cloud providers offer an API to do this, right now.

On occasion virtual servers may crash, or fail. Most clouds providers allow us to cope with this by watching for errors and automatically kicking off replacement servers.

Cloud providers generally charge on a “per CPU hour” rate. This means we only pay for the computing power we need. This makes it cheaper for us to run our service, we only have to scale up temporary when we have a spike in traffic. We no longer need to own all the machines needed to cope with peak traffic for our service.

Cloud providers make this cost effective by having lots of virtual servers running on their physical servers within large centres, and having many clients within the same data centre. Effectively the gamble that not every customer is going hit their peak demand at the same time (an unlikely event).

Load Balancing

So let’s say we have a spike in traffic and we start up a bunch of web servers, how do we direct new web traffic to each of the new machines? Well most cloud operators provide load balancing solutions. In Windows Azure these are VIP (Virtual IP Addresses), and in Amazon they are Elastic IPs. Different names, but conceptually they both offer the same thing, a single static public IP address on the internet, behind which we can have any number of web servers.

From a developers point of view this can cause a number of design constraints, a client web page may make several requests to our static public IP address, but due to load balancing each individual request could be serviced by different virtual severs. Additionally these virtual servers can be brought up and torn down at a moment’s notice. Each of the servers we running can vanish at any time. Got data stored just on that one server and the server vanishes – well bye bye data! Well that sucks! – So how do we store data?

Unified Large Scale Storage

Each of the clouds provides the idea of a single large storage repository which is accessible from each of the servers within the cloud. This means that you can store all your applications data in a single logical location and access it from any machine. This is great as it solves the problem of data storage on vanishing servers. It also helps us scale as it means that every new server we create can access the same data, when we need more space we can just use it – we don’t have to purchase new hard drives or create our own Storage Area Networks (SAN).

Generally each of the cloud provider offer a pretty competitive price per gig for data stored within their storage solution.

Cloud Storage Implementation

To the developer this storage is often provided by a set of cloud hosting company specific APIs, Amazon have a set, as do Rackspace, and Windows Azure. Each of these companies go to some length to make sure that your data is safe. Most will replicate any data you store a number of times in different locations, in an effort to ensure that a physical disk or data centre failure will not destroy your data.

Most of the data storage APIs available offer non-SQL basic access. Typically they offer large tables of name value pairs (think giant INI files). While not SQL, this type of storage is quick, covers most of the scenarios you may need and is an effective structure for data replication within the cloud infrastructure.

Queuing and Messaging

So we have a bunch of servers which can get setup at any time and then torn down whenever we don’t need them all storing data within the same logical location. But how do we communicate between them? – We could just use the Cloud Storage, but often this doesn’t cope with want we want to do, and with virtual machines being created and torn down rapidly it is conceivable that we would request a particular machine to process a job only to have that machine either fail or be programmatically removed. In which case we may loose the job! – To cope with this most Cloud providers offer a messaging queuing system, indeed both Azure and Amazon offer message queuing systems. This allows servers to pass messages between them in a secure way. This is often used to submit jobs from front end web servers to back end processing servers and back again. If a server falls the job should be recoverable from the messaging queue and can therefor be picked up by another virtual server, resulting in a small delay, but no data loss.

Designing Applications for Scaling in the Cloud

At this point it is worth considering some of the design implications mentioned above. Designing applications for deployment within a cloud requires a bit of upfront consideration. We need to design for:

·         A highly concurrent environment where machines get be set up and pulled down and any time:

o   Don’t store data on the Virtual machine, use cloud storage

·         Static IP addresses for groups of servers (VIP / Elastic IP) and load balancing

o   Don’t store state, create job’s which can be considered atomic, once complete the data can be considered consistent and persisted in the large store

·         Message Queues

o   Structure groups of servers together in groups behind Static IP addresses and load balancers

o   Place atomic jobs on the queue and submit to groups of IP’s via static IP addresses or use message Queues and many consumers from a Queue

·         Large, cheap centralised storage

o   Store all application data in the large centralised storage where it can be backed up and made secure by the cloud provider

Recapping

At the top of this blog post I said I was going to cover what a cloud is, why they are going to be more relevant in the future and an overview of how they work, and I have:

·         Shown the way clouds offer a new way of organising computers which makes them cheaper and more efficient to run.

·         Shown the economic benefit of clouds, and hence why they will become more relevant in the future.

·         Briefly illustrated the main tools cloud provide (Virtual Machines, Load balancing, Storage, Message Queues) when they are necessary and roughly how the cloud works.

I hope you find this blog post useful.

 

Unknown's avatar

From Sketches to User Experience – URL Import on Headlines

I was tired, knackered in fact, after many long nights scratching my head and feeling like I was getting nowhere It came to me….in the shower….No, not a big scary knife from an Alfred Hitchock movie, but an idea about how I could make importing feeds from URLs simple. Now I’d just like to know what you guys think of what I did in that shower…

6 Ideas and a bunch of sketches

imageAt the time of my last post I had determined the core requirements for the solution, the problem was coming up with an idea which would satisfy all of them. I remember my art teacher from school always forcing me to come with at least six good ideas for any given problem. So I sat down with my note book every evening and tried…

Sketching the user interaction points and flow down on a bit of paper is fantastic. It allowed me quickly explore how a user would navigate my app, selecting and entering the URLs in different ways. I produced pages and pages of quick sketches, and I was creating them whenever, and where ever I could; from late nights in my study, to train trips as long as I wasn’t driving I was trying to sketch out an idea.

The problem was no matter what concept I sketched I never felt like it was actually going to be good enough. Sure I could just add in a clunky option for importing a URL, but I wouldn’t be happy with it, and I was concerned that if I didn’t think through all the possible scenarios a user may encounter that I would end up with a bucket of bug reports.

I ended up working late, up until nearly 2 am working on ideas and still no luck. Waking at 6am the next morning wasn’t much fun, and to be honest I really didn’t want to leave bed – the thought of getting into the shower wasn’t appealing at all. But it did the trick.

Standing in the shower with my forehead against the cool tiles it came to me – I could eliminate a bucket of additional screens, transactions and events if I let Headlines automatically determine that the user had entered a URL rather than a simple search term….

User Experience

preview-large-thumbIt sounded so simple, but I needed to verify the idea before I could go any further with it. But how could I do that? – I went back and re-sketched the idea, working through what the user experience would really be. After consuming even more pages of scribbles I arrived at a final flow I thought was good enough, but the acid test is drawing it out on the computer in a pixel perfect format to the exact screen size, this would tell me if this idea would actually work.

So I spent even more evenings converting each of my scribbled notations for screens into fully realised images. Then documenting the transition from one screen to another. I now have this ready. You can check out the PDF file I’ve put together with all the screens I have been thinking about. I’d really appreciate it if you guys could take a look at it, and tell me what you think? – Just drop me a line at Headlines@Mind-Flip.com

Getting Implementation Ready

I can’t crack on with the code just yet, I’ve a good bit more work to do before I can. I’ll next be working on reworking the UI yet again, breaking each of the screens down into blocks of text, images, buttons, click areas, scroll boxes etc. and for each item I need to calculate the precise screen locations. Only then when I’ve got this complete will I start to sketch out the changes to the code required to support the new experience. There is much more fun to come.

Unknown's avatar

Changing the Next Release Focus: Adding support for Manual URL Entry

I've been really excited and chuffed with the feedback Headlines has received to date. It has been really great. People seem to really like it which is great. But I know Headlines isn't perfect and there are some missing features. In particular support for manual entered URLs.

It is funny, because entering URLs manually was one of the major issues I had with existing RSS readers, I can't remember all the RSS URLs I'm interested in and I thought searching would be a great way to resolve this. Of course even the best database of RSS Feeds will still missing someone's favourite RSS Feed.  In addition users who move to Headlines from an existing RSS reader will have a list of the RSS feeds that they use and would like to add to Headlines.

 

I've had feedback from a number of users and one of their top requests is to add manual URL entry to Headlines. I had originally scheduled this for release 1.3, but have decided, based on this feedback to bring this feature forward to the next release.

 

image

 

Designing the Experience

What is important to a user when entering a URL? We'll based on the second paragraph above the user is probably an advanced user who is familiar with RSS feeds, and understands and knows what a URL is. Even so, some users will stumble across this feature and Headlines should support them.

 

The Scenarios

I've created two scenarios to try to help me think about the requirements. These are:

  1. Chris starts Headlines he adds the  URL for his favourite feed and is happy and confident that he has he has entered the URL correctly, once added Chris is confident that Headlines is now populated with his favourite feed.

 

  1. As above however Chris specifies the URL of a website, not of an RSS Feed.

 

Writing down these scenarios is a great help. They often help raise many following questions.

 

Question: How is Chris confident that he has entered the URL correctly?

Background: URLs can be long and a single bad character in a URL will stop it from working, it is important that Headlines gives some feedback to Chris that the URL is valid.

Answer: The following things should occur to provide Chris with the feedback he needs:

  • The URL once entered should remain visible during the process of adding the feed
  • Headlines should provide Chris with information on the process of adding the URL including
    • The server could not be found
    • The feed was not found on the server
    • URL is not a feed (parsing error)
    • The URL was a web page
      • The web page did not contain a feed
      • The web page contains more than one rss feed

 

Question: How is Chris confident that Headlines is now populated with his favourite feed?

Answer:

  • The feed appears with the same title he has seen in his other RSS reader
  • The description of the feed matches his expectations
  • The feed appears with a set of stories he is expecting

 

The next step – defining the user story

Now that I've outlined the requirements from a user point of view the next stage is to work out how to implement them. To do this I'll need to create a user story or use case which illustrates how a user will walk through the process of adding a URL to Headlines. Anything I do create must fulfil as many of the requirements outlined above as possible.

Unknown's avatar

Going.. Going.. Gone – Global!

advertWow this week has been pretty hectic, frantic and short. But just a quick post to let you know that Headlines show now be available globally! I got confirmation from Nokia that my changes were published, so if you are in a non-English speaking country you should now have access to Headlines!

Great stuff! I’ve delighted.

 

Hope you all have a great Easter!

Unknown's avatar

Localisation, Globalisation and Risk (not the game.. Risk.. )

Following the Ovi Daily review of Headlines by Steve Litchfield I’ve received a number of requests from people around the world for a copy of Headlines – this is fantastic, and I am chuffed to bits at this level of interest. If I could I’d make Headlines available world wide. However I haven’t yet, but there is a good reason for that, and it’s something I’m trying to fix.

Limited Release
When I first released Headlines on the Ovi store I wanted to make the application available worldwide. However I came across another blog post by a fellow Symbian developer and Ovi publisher CuteHacks. In their blog post they reported that there were some hidden rules which Ovi uses to assess applications. These rules had prevented them from releasing a copy of their application worldwide – specifically because they didn’t have localised versions of their application for every territory.

Localisation is fantastic
Producing a localised version of any application can be an expensive business, large companies like Microsoft employee hundreds of people to do just that. They translate text, make sure dates are formatted in the local way and test the application to make sure that it functions correctly. This really produces the best localised user experience.

I wanted to make sure I got Headlines out on Ovi, but given that I don’t have a second language I was limited in what translations I could produce. Also as a single person development company I don’t have the resources available to large organisations.

When making my initial release of Headlines to Ovi I deliberately wanted to avoid the same problem that CutHacks encountered. Therefore I only released Headlines in countries in which English was a recognised language. I took the list of countries in which Ovi publishes and then checked via Wikipedia that each of the territories I wanted to release into had official support for English. The result was my application was published first time – Brilliant. The down side is that it is not available to everyone – Not so brilliant.

Expanding the Release
I want to change this. I’d like to make Headlines available worldwide. How do I do this? Well I contacted Nokia directly, I have some contacts there who have provided me with fantastic support in the production of Headlines. I asked them if these hidden rules existed and could I release an international English application worldwide?

The answer…. well they are still looking into it. Nokia is a large organisation and they are trying to find the right person to help. In the mean time my Nokia contacts suggest that as Headlines is available on the Ovi Store that I just change the territory list in which it is available. The guys at the Ovi store can only reject the additional territories (hopefully).

So last night I did just that. Hopefully we’ll find out soon if this works!

Calling translators
In the mean time, if you are fortunate enough to have a second language, unlike myself, and would like to help translate and test translated copies of Headlines – drop me a line! I would love to work with you – you can reach me here: headlines@mind-flip.com. You can help mould the next release of Headlines.

Unknown's avatar

Headlines Review

I was really chuffed today to spot an exhaustive review of Headlines on the Ovi Daily Blog today. The review is by Steve Litchfield from All About Symbian. If you get the chance you should really check it out. Steve did an awesome job of reviewing the application. It is positive and fair review and Steve highlights some items I am working on to improve, and yes before you ask  I am working on updates to Headline and I’m following my Roadmap for future releases.

Resisting Temptation Badly
I always find it hard to keep myself focused on a single idea and application, and as you saw with my previous blog post I re-released TextQuick on the Ovi store. I am also looking at, and doing some light investigation into concepts and ideas for new phone applications. I hope to share some more of these new plans with you guys very soon. The problem I have at the moment is selecting the best idea. I have many ideas – without the inbetweenie bits. So I am working to add some more thought to my ideas and hopefully this will help me select a great next idea…. watch this space.

Unknown's avatar

Re-Releasing TextQuick on Ovi

tq967x277

With the demise of Symbian the Symbian Horizon Program has also stopped. Symbian Horizon has previously published TextQuick on the Ovi store. With the end of Symbian Horizon TextQuick was removed from the Ovi store. So I’ve been working hard to get TextQuick back up on the Ovi Store.

I have revamped the TextQuick Website, updated the user manual, produced new screenshots, banner adverts etc, and did a code review tidying a few things up. TextQuick 1.6 has not been submitted to the Ovi store. I’m looking forward to it being published soon. Hopefully I’ll be able to tell you all about that in the coming weeks!

Unknown's avatar

Good News Everyone!–I haven’t been watching Futurama…

Instead I’ve been working hard and I can now tell you that Headlines 1.01.0* (aka Version 1.1) is now available on the Ovi store!

You can find it here: http://store.ovi.com/content/104566

Headlines 1.01.0
As I mentioned in my last blog post Headlines is now available to everyone on the Ovi store. If you’ve previously purchased Headlines you should be able to update the update free of charge, if you have any problem simply drop me an email to headlines@mind-flip.com and I’ll be delighted to help you out.

Let me know what you think of this update – if you’ve any suggestions for improvements or features I would love to hear them! In the mean time I’ll be hard at work on the roadmap!

Back to the laboratory everyone!