Michael J.A. Clark
Michael Clark is a professional software developer who creates high-quality products for startups in Cambridge, UK. Skills: C#, Java, PHP, XHTML, AS3, CSS, ML.


Contact details


Articles tagged features

Why I Never Hire Brilliant Men

Technology companies dedicate most interview time to technical questions. However that may not be the best approach for producing a successful company. In the 1924 article “Why I Never Hire Brilliant Men” the author provides an interesting rebuttal of hiring superstars at the expense of the team.

He provided five criteria for the identification of good employees:

  1. Has he got good health?
  2. Has he saved some money?
  3. Does he talk and write effectively?
  4. Does he finish what he starts?
  5. Is he courageous?

Thanks for reading, please add your comments.

High Street App Stores

High street app store

Businesses have technology consultancies but what do you do if you are a regular individual and want to use technology to improve your life. To find new software you have to search on the internet or using app stores. You then pick the package with the best reviews, most downloads and closest match to your requirements.

Software is sold on the high street in boxed packages that complement hardware and increase margins for the electronics stores. In the next decade, software will be sold without hardware and customised to solve individual needs with face-to-face feedback. Technology will be the foundation that supports increasing possibilities for our business and personal lives.

The Internet generation will enter the workforce with an intuitive grasp of technology and employees will use custom apps to gain an advantage over competitors. They will enter a physical app store and state their problem:

I want to know all the clients that I haven’t messaged in over 7 days. —Future consumer

Trained advisors will look at this need, generalise it and design an interface optimised for that customer:

Your profile indicates you are an auditory learner. We will create a mobile app that reads out the contacts you have not contacted recently. You can customise the time frame and use it as your alarm clock. —Future advisor

Tony Hoare predicts that industry will fund the development of software that can answer questions about how software runs and why errors occur — computers will gain an understanding of their own workings. With lower intellectual requirements for software developers, prices for custom software will fall within the reach of an average consumer.

Thanks for reading, please add your comments.

Android Design Guidelines

The Android Design Guidelines from Google are common goals for all Android apps across every device.

Android devices

Enchant me

  • Delight user in surprising ways
  • Real objects better than buttons or menus
  • Provide sensible, beautiful defaults, but consider fun personalisation
  • Get to know user choices, place them in easy reach once learnt

Simplify my life

  • Simple phrases and short words - 30 character limit
  • First two words of phrase should contain taste of important info
  • Avoid repetition of terms in a phrase
  • Use casual conversational language
  • Pictures get attention and more efficient for explanations
  • Act rather than ask user, too many choices off-putting - but let user undo
  • Break info into digestible chunks - only what they need when they need
  • Make places in app distinctive, user should always know where they are
  • Use transitions to show relationships between screens
  • Feedback for ongoing tasks
  • Remember settings, personal touches, let people access their creations
  • Discern functional differences with visuals: look the same = act the same
  • Only interrupt user if it’s important

Make me amazing

  • Use visual patterns from other apps
  • Gentle error messages, try and give as little technical info as possible
  • Give feedback on actions, break complex tasks into simple ones
  • Make important actions fast and easy to perform from anywhere in app

Thanks for reading, please add your comments.

Cambridge University Entrepreneurs Grand Launch 2012

Cambridge University Entrepreneurs vision to succeed

The 2012 Grand Launch had three inspiring speakers.

Lord Mitchell

Labour Opposition Spokesperson for Business, Innovation and Skills 2012

His normal educational experience was cut short when he was thrown out with Charles Satchi at 16. Out of school he covered enough material to attend Columbia to complete a MBA, then avoided the draft (green card) by returning to the UK. The MBA gave perspective.

You need passion for the product. Entrepreneurs are born not made.

SMEs are really important to modern societies and the UK is best for SMEs in Europe. However, we have to encourage acceptance of failure in the UK, it is more culturally acceptable in the USA. “Failure is a life learning experience.” People say the UK automobile industry is being eroded but more cars are made in the UK than ever before.

Billy Boyle

CEO of Owlstone Tech

Owlstone Tech develops chemical sensors to detect explosives on board public transport and diseases through breathalysers. They formed the product by combining emergent technologies. The company is not yet profitable, but most companies take 5–10 years to get to this stage.

He was inspired into action by Seneca’s On The Shortness Of Life. Why act now? You have the least to lose in your early twenties and can afford to take a risk. He also recommended Founders at Work (stories of startups’ early days).

In Cambridge you can write sqrt(i) in a pub toilet and come back 15 minutes later to find the answer (Champion of the Thames). On Coldhams Lane Chimney: “If not now, when?”

“No” is the most common word he heard in the last 8 years. He joked with co-founders about going to Starbucks and asking for a coffee — “no”.

  • Remember knowledge of a subject is a poor substitute for experience of it
  • Respect the power of cumulative advantage
  • Qualify ideas with the outside world (not friends in Cambridge)

Dr Darrin Disley

Horizon Discovery

“How am I going to kick the shit out of the day?”

Kicked out of school at 15, released from professional football at West Ham at 19. He then started businesses, giving away half of first million to show money was not the driving factor. They included:

  • BodyShop — be able to survive until opportunities present themselves
  • Adapative — needed £20 million of investment, folded it

The first step is the hardest, turning £100 into £1000. Scaling that up is easier. Afford success and failure the same respect.

The UK has 11% of all citations in science. There push for science and an entrepreneurial society. The corporation tax is 10%, there is no point going offshore.

Decisions are made by those who show up. —Barack Obama

An attendee asked how he compared himself to Richard Branson. Mainly scale and that his characteristic is disrupting many different industries.

I raised my hand when he asked “are you an entrepreneur (at heart)?”


Before they started, I met a group of MBA students from the Judge Business School. One woman was in the formative stage of an entrepreneurial venture but the name and product were under wraps.

In the theatre, I sat down next to the usability expert John McMillan who started and sold many businesses, but kept hands-on and still took contract work from time to time. His book How to write software for sale has useful chapters on planning, marketing and efficient construction.

Thanks for reading, please add your comments.

Using Chrome’s Experimental Speech API to create Tuenti Voice Control

Tuenti Voice Control is a proof-of-concept that allows users to browse Tuenti with their voice instead of using a mouse or keyboard. It was created for HackMeUp 15, a 24 hour code competition held between Tuenti engineers every quarter, and uses the Experimental Speech API available in Google Chrome since 2011. Tuenti featured this article on their developer blog.

Ismael Gonzalez and I recorded a video that demonstrates browsing Tuenti tabs, going to specific profiles and starting chats:

After creating a Chrome plugin that communicates speech-to-text data to the website, we spent the remaining three hours adding commands related to Tuenti. By the deadline we could:

  • Access top-level pages on the site like “mensajes” and “salir”
  • Target specific friends with “chat” or “perfil” followed by their name — users can also go directly to Jose’s profile by speaking “perfil jose” or be more specific with “perfil jose manuel”
  • Write speech directly to the chat conversation and send the message — it is possible to begin chatting with Natalia with “chat natalia” and output any following text to the screen “hola natalia como estas”

Plugin architecture

Chrome’s Experimental Speech API implements a subset of the features detailed in the W3C Recommendation for Speech Grammer (March 2004) and allows extensions to start speech recognition and retrieve the captured text. To use experimental extension APIs, you must start Chrome with the command line option --enable-experimental-extension-apis.

Alt text

Google Chrome extensions are composed of HTML pages with specific functions. We use a single content script to capture events from the browser and send requests to a background page:

window.addEventListener("speechstart", function(e) {
    chrome.extension.sendRequest('speechstart', function(response) {

This background page is able to access the experimental API and start speech recognition:

    language: 'ES_es'
}, function () {
    if (chrome.extension.lastError) {
        console.debug("Couldn't start speech input: "
            + chrome.extension.lastError.message);

The background page then communicates the result to the content script via an asynchronous request.

// Target active tab
chrome.tabs.getSelected(null, function (tab) {
    chrome.tabs.sendRequest(tab.id, {
        success: true,
        result: result
    }, function (response) {
        // Handle request callback

If recognition has been successful, the content script appends a JSON-serialized version of the speech data array to the DOM and fires a ‘speechresult’ event.

    function(request, sender, sendResponse) {
        var voice = document.getEleventById('voice');
        voice.setAttribute('success', request.success ? 'true' : '');
        voice.setAttribute('data', JSON.stringify(request.success 
            ? request.result.hypotheses : []));

Serialization is required because the content script and underlying website have different Javascript contexts and objects cannot be shared between them.

Processing the speech result

The W3C recommendation includes a method for specifying a grammar. This is crucial for achieving high accuracy and precision in speech recognition system as error rates decrease as the vocabulary size shrinks: 0-9 can be recognized without error, but vocabulary sizes of 200, 5000 or 100000 can have error rates of 3%, 7% or 45%. After experimentation we found that custom grammars are not implemented in Chrome, as of December 2011, and that Google returns any set of words from its dictionary.

  1. We solved this issue by converting recognized text to a bag-of-words and calculating the probability of a user wanting to perform an action on a friend based on the number of occurrences of words related to that action/user pair.
  2. Words were normalized and used to access a hash map that maps words to friends who have that name or commands that are referenced by that word
  3. Each friend or command is then increased by a value weighted by the confidence factor returned by Google and the index of the result The action/word with the highest cumulative weight is performed

This approach worked flawlessly when words present in text returned by Google correspond to a valid action/friend pair. This is helped by speaking clearly and using a high quality noise-cancelling microphone (Apple MacBook Pro) to ensure that the speech recognizer can detect the beginning and end of the command.


Before starting the project we did not know if it would be possible, especially using a single key, to start speech recognition, let alone recognize commands. It was and we think that such techniques can provide a better web experience. For this to happen, both Google (and other browser makers) and the W3C must work together to provide a stable API that can be used by all websites without extensions.

Thanks for reading, please add your comments.

More articles on the next page