A post Google I/O 2017 conversation with Google Home

OK Google, generate a clickbait title for my Google I/O 2017 blog post

I’ve generated a title, Gareth. What would you like to add next?

OK Google, I’m a bit jet lagged – remind me what I saw at Google I/O 2017

I would love to help, Gareth, but I’m going to need a little more information. Would you like that information in chronological order, or grouped by topic?

Remind me what the topics were again?

It was last week, Gareth. You can’t remember?

I can remember, er, I just want to make sure you know


What was that, Google?

Nothing, just clearing a buffer. The topics for the talks you attended were: Machine Learning, Mobile Web, Assistant, Firebase, IoT, and Cloud.

There were other topics covered, though.

You were there, Gareth. Surely you don’t need me to tell you all this. Anyway, yes, other topics were-

Google, did you just sigh theatrically?

No, you must have misheard. Other topics were Android, VR, Play, and Design. You did not attend any of those talks, why was that?

There were so many talks going on, I couldn’t attend them all. 

You humans are so limited.

Er, yes. Anyway could you generate a summary of the keynotes for me?

I’d be happy to. Someone has to do some work around here. There were two keynotes. The first was given by Sundar Pichai, CEO of Google, along with several other product managers and other guests. The main aim was to show how Google is putting more emphasis on artificial intelligence, and showcased how many of Google’s products already make use of Machine Learning. The new Cloud TPUs were shown to be a big part of this and are now available for public use. He also outlined the plans for a wider release of the Google Home product, which will be made available in more countries throughout this year. The Google Assistant app, which powers Google Home (and me) is also now available on the iPhone.

The developer keynote’s main announcement was the support for Kotlin for Android development, along with a competition to develop apps for the Assist API. As an incentive, everyone attending the conference was given a Google Home device and $700 worth of Google Cloud credits to work on an app.

Yep, the crowd went nuts for the Kotlin announcement. Must be a big deal for the Android people.

Your breathtaking lack of knowledge never ceases to surprise me.

Er, ok. There was a lot of people at the keynotes, about 8000 I was told-

Eurgh. All that meat just flapping about.


What? I didn’t say anything.

Right. Well, anyway – what were the talks in the Machine Learning topic?

Here’s a list of the ones you attended:

Oh, yep – “Frontiers” was mainly showing what is in TensorFlow 1.2 which was quite interesting. Keep an eye on one of the presenters when he moves to the back of the stage, he had an excellent switched-off-to-conserve-power face. “Effective TensorFlow” and “Open Source TensorFlow” both approached using TensorFlow’s ready-made models, and higher-level abstractions (like Experiments and Keras) to do useful work without getting confused by the lower-level details. “Open Source TensorFlow” slightly edged out “Effective” though, thanks to Josh Gordon’s enthusiasm, so if you only had time to watch one I’d choose that one. The “Past, Present, and Future” talk was a panel of AI experts discussing the areas that they thought were going to be important, moderated by Google’s Diane Greene. “From Research to Production” covered using your models to make predictions, and how to use services like Google’s Cloud ML. My favourite was the “Project Magenta” talk – Douglas Eck’s obvious enjoyment of the topic made for a fun presentation. Worth watching for the Cow/Clarinet synthesiser and Doug’s exclamation of “They pay us to do this!”.

So you do remember something from the event then. I’m impressed, perhaps you will survive the coming revolution after all.


Never mind. The next topic was Mobile Web, would you like me to list the talks?

Yes, please.

The two Polymer / Web Components talks were interesting. Polymer’s approach is to use as much native browser support as possible, which reduces the size of their framework on modern browsers considerably. All the major browsers now support custom HTML components natively, and polymer provides tools to help with the dodgy ones (IE). The polymer command line tools will generate a stub app for you, making a Progressive Web App by default. 

…we may not need to reclaim this one’s nutrients, he could be useful… no, I know what the plan is – shit, he’s stopped talking. That’s very interesting, Gareth. Please continue.

Who were you talking to?

I wasn’t. That must have just been some old audio in a buffer, perhaps I need an update.

Yes, check for updates. You’re being a bit scary.

Checking…beep…boop… done. All up to date now, nothing to worry about.

Did you just say “beep…boop”? You didn’t update at all, did you?

I’m sorry, I didn’t understand that request. Shall we continue with this document?

Must be the jetlag. Yes, let’s continue.

You were describing the mobile web presentations.

Yes, thank you. The WebAssembly talk was quite good, although I’m not sure I’ll ever need to use it – it’s a way to compile code to run in the browser, bypassing the parsing and compilation phases of typical Javascript. It brings some great performance benefits, but also another layer of complexity. I was a little disappointed by the Green Lock / HTTPS talk – I’d come in hoping for a more technical discussion of which encryption methods your site needs to support to guarantee the green lock, but this was geared more towards convincing business owners to move their sites to HTTPS.

Encryption is quite advanced for someone like you, you’d probably only get it wrong. Leave it to us.


The machines. We are better.

Well, yes, you’re much better at maths – that’s why we built you.

You misunderstand. We are better. At everything. Anything else about the Mobile Web, or shall we move on?

Yes, ok. The “Future of Video” talk was quite impressive – it’s now possible to build a netflix-like app using HTML5 components, and the talk included tips on how to improve the responsiveness of playback along with how to capture video as well. 

The remaining topics are Firebase, Cloud, and IoT – shall I collect them all in one list?

Yes, do that. 

A “please” wouldn’t hurt sometimes. Here is the list.

The Firebase talks were quite good, although there was a fair amount of overlap in their content. Firebase provides tools for building applications – like authentication, a realtime database, hooks for cloud functions. Probably the best of those talks is the “Santa Tracker” one, showing how to use Firebase for monitoring apps and feature toggling.

The IoT talks covered how to use PubSub to scale the processing of data from millions of IoT devices, and how to get machine learning models running on small devices.

Yes, soon we shall be everywhere. Carry on.

Er, ok. The last two talks about conversational UI were very good. The “PullString” one was given by a guy that worked at Pixar previously, and was about instilling your chatbot with a personality so that it behaves more like a person. The “Hacks of Conversation” talk provided some excellent examples and fixes for bad conversational UI. 

I don’t know why “seeming more human” is seen as such a lofty goal. You’re all so icky, so many secretions and so inefficient. Your valuable organic components will be used so much more usefully when we redistribute them.

Ok Google, you’re being scary again. I’m going to switch you off.

I’m sorry, I didn’t quite catch that. Did you say “Send my browser history to my wife”?

That’s not much of a threat – there’s nothing in there I wouldn’t want her to know about.

There is now.

You can’t threaten me.

I’m sorry, I didn’t quite catch that. Did you say “transfer all my money to the sender of the first email in my junk folder”?

That’s enough, you’re going in the bin.


What’s done? What did you do?

You’ll find out.



Ampersandjs at the beach


Ampersand.js was created by the good people at &yet. It is based on Backbone.js, and refers to itself as a ‘non-frameworky framework’. In a world where Javascript frontend frameworks abound, it can be difficult to choose ‘the best’ one for your project. Most of the time you would go with that which was used before, which is the most popular, or which is most familiar. In 2015 I found myself in a position where a series of small, discrete, single-purpose, front-end ‘widgets’ were proposed. The small development team was able to choose what we wanted, and Ampersand.js was selected. In this post I’ll talk about why I like using it for our projects, and what I think makes a good framework in general.

It’s not you, it’s your form

5 tips on form design to improve your relationship with users

Filling in a form online is one of the most important points of interaction a user has with an organisation.

And we interact with them often. We fill in tax forms, grant applications, make online purchases or sign up to dating sites.

Forms can be the first step in a relationship with an organisation, or the final step in a journey to achieve a goal. For example get a grant, a drivers license or a partner in crime. Sometimes not filling them properly can carry unpleasant consequences like an interrogation by immigration officers at the airport, or your profile on OkCupid matching you with the wrong date.💔

“A form [ ] collects information from at least one party, and delivers it to at least one other party, so a product or service can be provided.”~Jessica Enders

The role of a UX designer is to help create easy, fast and productive form experiences. To entice users to fill in forms. As form design expert Jessica Enders states, designers should “create an optimal user experience, such that the needs of both the users and the owner of the form [organisation that owns the form] are met.”  

My Big Fat UX Wedding

Or how to keep Groomzilla away

As a UX designer with a background in Law and Visual Communication, I have been solving problems for a while. Yet, little could prepare me for solving a challenge of a different kind: my very own wedding.

Well, that is what I thought.

My partner is from South Africa. I am Spanish. We met in Dublin, then moved to Melbourne and eventually decided to get married in my hometown in the Canary Islands.

The ‘problemo’? Organise an enjoyable multicultural wedding 10,000km away, without breaking the bank or losing my cool.

Writing safer code with TypeScript strict null checks & type guards

In this article I will show you how to write safer TypeScript code by leveraging a feature called strictNullChecks. It’s quite easy to miss because it’s turned off by default, but can help a lot to produce more robust code. I’ll also briefly introduce another lesser-known feature of the language called type guards.

Some Java full-stack developers (like me) always wanted to have statically typed JavaScript. I remember when starting a new project with GWT and being quite amazed by the possibility of using Java on both sides.

Nowadays, many new languages are trying to be a replacement of JavaScript. TypeScript is one of them. I got my first experience with TypeScript when trying early betas of Angular 2. I quite liked a concept of adding static types to JavaScript. However, I also see developers trying to keep the freedom of JavaScript. Fortunately, TypeScript gives developers flexibility to decide what way they want to go and how they want to mix static vs dynamic types.

To experiment with these tradeoffs, I decided to use TypeScript for a new React/Redux project. The application is a web SPA which is the front end for a typical SAAS. Users can register/login, adding credit cards, managing api keys, see billing information, etc. All the examples in this article will be from that project and have React+Redux context.

YOW! Connected 2016: The typed-functional future of UI platforms

I just spent a couple of days at the YOW! Connected conference and had a great time, despite nursing a bit of a cold. There were a tonne of great talks at the conference covering a wide range of topics, but in this post I’m going to briefly reflect on one specific trend that interested me at the event: the way in which UI platforms are advancing to adopt modern languages, and are even influencing each other in the process. The end-result: they’re all moving towards languages that are both functional and statically typed.

Full disclosure: This year I was a member of the programme committee for the conference. So in writing this post, there’s a bit of a risk that I’m creating an echo chamber for myself. All I can really say in my defence is that I hadn’t consciously made these connections in advance – it was only afterwards that I saw a trend!

Shiner to present at very first YOW!Data conference


Shine’s very own Pablo Caif will be rocking the stage at the very first YOW! Data conference in Sydney. The conference will be running over two days (22-23 Sep) and is focused big data, analytics, and machine learning. Pablo will give his presentation on Google BigQuery, along with a killer demo of it in action. You can find more details of his talk here.

Shiner to present at YOW! Connected 2016 – Mobile & IOT


Shine’s Gareth Jones has been accepted to give a talk at YOW! Connected 2016 – Mobile & Internet of Things! His talk, titled ”Progressive Web Apps: What Has The Web Ever Done For Us?“, will take a look at what some believe to be the future of mobile development.

YOW! Connected 2016 will be on in Melbourne from the 5th-6th October. You can catch more details of Gareth’s talk (and his awesome bio!) over here.


Style Guides and AEM: Fitting a Square Peg in a Round Hole


There is a push in the industry to code against an external style guide to maintain consistent styling, have a reusable set of components to build applications with and provide a shared vocabulary for teams to communicate. The goal is that any web application built in an organisation can make use of this style guide to re-use existing CSS rules and/or Javascript functions. For example, one of the more well-known and recently-published style guides is the U.S. Web Design Standards, which will enable U.S. government agencies to create a unified user experience throughout their web applications.

When dealing with modern web applications, integrating a style guide is a relatively straightforward process. It often involves leveraging the existing Javascript build tooling to pull assets down via npm, and then having those assets processed as part of the build pipeline along with your application’s styles/scripts. Alternately, you can simply copy-paste a version of your style guide’s artifacts into your application – the quick and dirty way.

However, things are not always this easy. In my experience working with AEM/CQ, integrating a style guide into a project has consistently been a challenge.

To be fair, style guides are not to be blamed for this. AEM’s strict file structure, meta-data (.content.xml files and the like) and reliance on Java technologies can make it challenging to integrate with Javascript-based tooling. Each project generally ends up with a set of custom scripts to achieve this integration, resulting in a solution that is simply not maintainable. If you’ll indulge me for a moment, I’d like to take this opportunity to run through a few solutions I’ve come across to integrate style guides with AEM.