Michael Gaigg: Über UI/UX Design


Touch Event Support for jQuery UI

Posted by Michael Gaigg



Problem: jQuery UI doesn't support touch gestures

We are customizing a map application with swipe functionality which is based on some legacy code mash-up with dojo and jquery/jquery ui. Everything was nice and dandy until we tried swiping on the iPad for the first time. Bad awakening. jQuery UI user interface library does not support the use of touch events in their widgets and interactions. This means that our mouse event simply don't work on touch devices. One might think the jQuery toolkit would take care of it... but no!


Solution A: For every mouse/keyboard event, provide the equivalent touch event: touchstart, touchmove, touchend,...

Solution B: Use a hack called jQuery UI Touch Punch that adds simulated events (that mimic touch events) to your app and respond to the mouse events you already have in your app. It's really simple:

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.21/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.js"></script>

Add the jquery and jquery ui libraries (if you don't have them already or if you use older versions) plus the reference to your local copy of the touch-punch file (download the Development version!!)

Solution C: Go to github and get the really nice swipe story map template which works "out of the box" (but didn't satisfy our complex requirements)


Recommended usage of Dojo Topic (Publish/Subscribe)

Posted by Michael Gaigg

Communication between multiple object instances can be implemented using the global messaging mechanism of dojo/topic. It's like a centralized hub for publishing and subscribing to topics that are not bound to a particular object.

While the dojo reference guide documents a good usage example, I believe and strongly encourage you to implement pub/sub with the following signature:

// widget:
require(["dojo/topic"], function(topic){
	topic.publish("/filter/changed", this, { title: "My Blog", author: "Michael Gaigg" });
// controller:
require(["dojo/topic"], function(topic){
	topic.subscribe("/filter/changed", function (sender, args) {
		console.log("Title: " + args.title + " by " + args.author);

While the topic.publish allows you to define any combination of parameters I found passing two parameters - sender and args - the most consistent and useful:

  • The first parameter is the sending object, i.e. the widget instance (this) that originates the publish
  • The second parameter is an object literal of arguments

One could use the sender to implement conditions within the subscriber. But the biggest advantage by far is that the signature is always the same and the amount and order of the arguments can be neglected. The code becomes more readable and easier to maintain.

One more note: Any widget can publish topics but only the controller should subscribe to these topics and then redirect actions back to the appropriate widgets, that is without introducing widget-specific logic at the controller level.


T-Shirt: Trust me I’m a Designer

Posted by Michael Gaigg

Here is a must-have for all design geeks out there: Trust me I'm a Designer Tee Shirt!

And believe me, it's not only a vision test, it's a test in your faith as being a designer :)

Btw. I'm a designer and I approve this message.

Trust me I'm a Designer Tee Shirt

Trust me I'm a Designer Tee Shirt


Follow-up FAQ from my Talk

Posted by Michael Gaigg

I've received many questions after my talk about Web Mapping Application Interface Design – Best Practices and Tools at the Esri DevSummit in Palm Springs.

Following I try to answer them a little more in depth:

I'm a one-man-show, what can I do?

It's very common that one doesn't have the means to build up a UI/UX team that covers all skill sets needed for a comprehensive coverage of all design methods. In that case I recommend focusing on your strengths (what a surprise!) and trying to grow into the area you see the highest chances for adaption and integration.
Generally wireframing is a good choice because it's easy to learn, cheap to implement and gain high interest, it's also a fundamental step in any design.
Rapid prototyping is really important too. Get to know JavaScript frameworks like jQuery and dojo, familiarize yourself with CSS and CSS preprocessors.

When is Community Maps going to go live?

Community Maps is currently in private beta, planned to be released this month (April 2013). We are working on improving the registration pages next, then potentially expanding to other programs (Community TIGER, Community Hydro, ...)

Why should I use Balsamiq for wireframing

There are plenty of wireframing tools out there - you can even use PowerPoint (download my free PowerPoint stencils) - Balsamiq just happens to be very cost-effective (US 79.- per license), easy to handle and with a boat load of controls that can even be extended (download free map controls).
I love Balsamiq for other reasons as well, see some tips and tricks that make my designer life easier.

Why not use MS SketchFlow?

Besides some pros and cons I think the biggest no-no for using SketchFlow is the tight integration with MS Blend and therefore MS Visual Studio. A designer doesn't (and if he does, he shouldn't) think in development details and best practices, code re-usability or testing. Read more of my thoughts on that subject on MS Sketchflow meets Sketchables.

Why are 3 wireframe iterations enough?

Usually I recommend 2 rounds of wireframes (more rounds are ok during proposals). If you still cannot move on after 3 rounds of wireframes this is typically a good indicator that your project has some sort of underlying problem that you should detect and address right now.
Typical problem areas include:

  • No real user need
  • Too many cooks in the kitchen
  • Poorly defined requirements
  • Undecided project manager
  • Problematic client
  • Missing domain knowledge
  • Bad designer
Filed under: Conclusions 1 Comment

Web Mapping Application Interface Design – Best Practices and Tools

Posted by Michael Gaigg

These are my slides from the tech session held at the Esri DevSummit 2013 in Palm Springs, CA.

The session teaches participants best practices for reviewing, conceptualizing, designing and building user-centered mapping applications in a competitive business environment. Methods, techniques and tools for improving the user experience and designing useful and appealing front-end interfaces will be discussed.


Innovative Interfaces: Future of Farming

Posted by Michael Gaigg

John Deere has done a very nice job with a video called "Farm Forward – Future of Farming". The subject is directly related to design work I'm doing right now and it's fascinating to see that - futuristic features aside - most of the capabilities like combining weather data with GIS and field scouting exist already. Love it!



Posted by Michael Gaigg

When moving domains there will be a need to replace old url's and other strings to reflect the new names.

In my case the images of my blog articles were still pointing to the old domain which didn't physically exist anymore. Result: broken images and links.

Quick Solution

A quick SQL replace does the trick:

UPDATE blog_posts SET post_content = REPLACE(post_content, 'old-server.com', 'new-server.com') WHERE post_content LIKE '%old-server.com%'

This SQL statement is perfect for updating wordpress blogs that moved to a different domain/host.

Easy and efficient :)


Redesigning our internal Team Site

Posted by Michael Gaigg

Paper sketch draft

Paper sketch draft

I could have titled this post "The importance of sketching" or "Paper and pencil are still hip". The truth is, I didn't even realize about the fact that I do a lot of sketching on paper, as a matter of fact I just recovered my beautiful drawing from going into the shredder. I think the beauty of sketching on paper is that the ink just flows. Sometimes you don't even know where it will lead you when you start. It keeps you minimalistic, not too much detail can be crafted on a tiny piece of paper (at least I can't).

Graphical Design

Graphical Design

Once I had the draft in hands, it was just a matter of whipping the right amount of bootstrap with some custom HTML and funky JavaScript, voila, our internal team site came to life... So you could say that prototyping can be done in HTML without the need for wireframes, I still doubt that. Without at least the genius idea on paper I wouldn't be able to code as efficiently as I did.

The coding part was only the cherry on the pie, a quick logo, a menu, a hero unit, some blocks and fancy graphics, tadaaaaa. I used PHP to create a 'controller' with content being included on the fly. Yes, good old content, still working on that piece, but no worries, I got it under control ;)

How do you design? Do you sketch/wireframe? Or straight to code?


Esri Cup 2013 – We are the Champions…

Posted by Michael Gaigg

Winners of the Esri Cup 2013: Red Bull Redlands

Winners of the Esri Cup 2013: Red Bull Redlands

Finally a team was able to break the spell, GiS (Geeks in Soccer) were beaten for the first time in Esri Cup history and I am glad to say that it was us that eliminated them in a strong semi-final game (7:5) just to pave the way into the final.

The trophy found its way to where it belongs: my office ;)

The trophy found its way to where it belongs: my office ;)

Once again the tournament was great fun and an amazing "work" event. For the first time we played indoors which is a whole different game that favors the technical, futsal-style players.


IIS doesn’t recognize .json file

Posted by Michael Gaigg

If you ever wondered why you get a nasty 404 page not found or your app is struggling retrieving a file of type .json, here is why and how to solve it.


IIS doesn't recognize file of type .json; That's because by default IIS won't serve files that aren't of a known MIME type.


Set MIME type

Set MIME type

Add a MIME type to IIS (either per site or at server level) to allow it to serve that type of file.

  • Open IIS Manager and select server properties
  • Click the "MIME Types" icon
  • Click "New"
  • Enter Extension = "JSON" and MIME type = "application/json"

You are all set!

Tagged as: , , , 3 Comments
Page 2 of 2312345...1020...Last »