Willem Meints

AI Fanatic, Technical Evangelist, Microsoft MVP

Techdays 2012 session slides are online

Techdays 2012 is sadly over, I had a blast with <a href="http://blogs.infosupport.com/author/marcelv/" target="_blank">Marcel de Vries</a> and <a href="http://roycornelissen.wordpress.com/" target="_blank">Roy Cornelissen </a>talking about how you can build multiplatform apps using Mono* and WP7 tools. A lot of people showed up at our session, so much even that they had to close the room and ask people to watch the session on the monitors outside the room.

You can find the session slides here by the way: <a title="http://dl.dropbox.com/u/16850010/Developing%20iPhone%2C%20Android%20and%20Windows%20Phone%207%20applications%20with%20C%23.pdf" href="http://dl.dropbox.com/u/16850010/Developing%20iPhone%2C%20Android%20and%20Windows%20Phone%207%20applications%20with%20C%23.pdf">Slides download</a>

Read more

Introduction of the Journeys app

Some of you may already have noticed. I am working on a small app of my own. The Journeys app is a small utility to keep track of my hiking habits. You can see how long you've been walking and where you've been. There's even a chart showing the distance you've traveled.<!--more-->

For health reasons I have to walk at least an hour every day. It can get quite boring so I had to find something to get more out of it. Having to walk was the best excuse I had to build an app and at the same time, the app will provide me with some interesting data about each of the routes I walk every day. It basically shows me progress <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://fizzylogic.azurewebsites.net/wp-content/uploads/2011/12/wlEmoticon-smile.png" alt="Glimlach" /> towards the goal of walking 5KM a day.

Read more

Designing or engineering software

<p>The software business has been my home for more than 5 years now and I've seen quite a few applications take shape during that period. Some applications were better than others, but overall you can see that every single person, that is building software, is taking pride in his craft. Some people go even beyond their personal love for crafting software and start telling others how you should be building software. A very noble cause if you ask me.</p><!--more--><p>These people put processes and procedures in place to make sure that the quality at the end of a development cycle is up to standards that have been agreed upon before hand. It makes things much more predictable, so that when things go well in one instance there's a high chance they will go well a second time. The things I'm talking about here are all placed under the flag "Software Engineering". I probably shouldn't have told you all of this, because you're most likely one of the programmers, that follows a software engineering method every day. If you don't, I think it's time that you start following one. As I said, it makes things much more predictable.</p> <p>There is also another side of software. The creative process. The people that design software are very creative in doing so. The things you see in every day life, from live messenger up to firefox all comes from the minds of very creative people. The process that goes into thinking up these applications cannot be called engineering and here's why. Creativity exists in a form of chaos. People make weird jumps in their mind to come up with the most brilliant solutions to problems they think need to be solved. These jumps can look very chaotic to the observer and there's no fixed process in which these ideas take shape. You cannot tell someone who is designing, in what order he should get his ideas. It will stiffle his creativity and you end up with a kind of a bleh product.</p> <h2>Design versus engineering</h2> <p>When you look at the engineering aspect of software, it's all about making sure it works correctly and that it is maintainable. You will see order, straight lines, rectangles, kind of boring people, etc. However when you look at design you see curves, colors and people with wild designs on their T-shirts. Design en and engineering are two totally different worlds. </p> <p>The one thing that triggered me in writing all of this down is that I had a very short and dissatisfying discussion with one of the guys I work with on a software factory. He's responsible for writing down the engineering processes and making sure people follow them. </p> <p>I showed him a design I made for a mobile app. He asked me what program I used to make those designs and I told him, I use a design tool, because I can't work with tools like Balsamiq or Visio to create the designs. They are too restrictive for me. It stops me from doing the right thing. He replied, you're doing it wrong. This is not repeatable. You want the screens to be the same. </p> <p>That my friends, is an answer that makes me not just a little sad, it hurts me. He basically told me to stop my creative process and start following some engineering process and start producing straight lines in my mind. I simply cannot do that, so he effectively stopped a very important though process that will make us both succesful.</p> <p>He did however make me think about the process of designing and engineering software. His approach was that of pure engineering. My approach was that of pure design and creativity. Both are needed for creating a great piece of software, but none of them is perfect on its own.</p> <h2>Design and engineering</h2> <p>The short discussion with this software engineering guy made me see something important. Just engineering software isn't good enough these days. It will only give you windows 98 interfaces or worse. You need someone that can make your software look cool and do stuff that the user wants. And that goes beyond basic use cases and analysis models. It includes user interaction, giving the user the idea that you truly understand him and what he wants to achieve. In essence you need a designer guy to come up with something creative and cool looking.</p> <p>At the same time you need someone that can turn the ideas into working software. The designer guy isn't going to be able to do that, because of his curvy lined brain. You need someone that sees/feels/breathes straight lines and squares. He's able to follow a process and execute procedures to build a working piece of software based on the ideas and designs of the designer.</p> <h2>Making it perfect</h2> <p>The whole process of creating software becomes even better when you do the following. Stop throwing those designs over the wall and the software back over that same wall. Instead, walk around the virtual wall and start working together on the software. Designers and developers should have a desk in the same room and they should be talking. There's nothing wrong with a little bend in your straight lined brain and a little less curves in your mind if you're a designer. And since nothing is perfect the first time, it's important that you work together to tweak the software so that it is perfect at the end.</p>

Read more

Developers and creativity

"Those designer guys are creative, we're not" That's one of the things I hear a lot at work. It's a sentence that gets developers of the hook so they can continue write middleware and algorithms and mathematic stuff.

I know a graphical design for an application can be hard to produce. I've experienced it myself quite a few times now trying to get more experience designing frontends. But that doesn't mean you're not creative.<!--more--> <h2>We are creative by nature</h2> Every human being is creative by nature. Problems we solve are solved by looking at them in a creative way. You ask your self, what other method might work to solve this issue? Or what if I flip that part around and try it that way?

Read more

Data-access quicky - A micro mapper

Someone (Yes you @lgrave) started taunting me on twitter. He said that he could do data access in only 50 lines using reflection. This gave me an idea. How small can you go with a mapper?<!--more-->

Here's one, done in only 32 lines of code including some silly comments from me.

public class Mapper<T>
private static Dictionary<Type, Delegate> _typeMappings =
new Dictionary<Type, Delegate>();
public Mapper()
public IEnumerable<T> Load(IDataReader reader)
yield return (T)_typeMappings[typeof (T)].DynamicInvoke(reader);
private void InitializeTypeMapping()
var recordParameter = Expression.Parameter(typeof(IDataRecord), "record");
// Trust me, you don't want to know ;-)
var lambdaExpression = Expression.Lambda(Expression.MemberInit(Expression.New(typeof(T)),
typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(
property => Expression.Bind((MemberInfo) property, Expression.Convert(
Expression.Call(recordParameter, "GetValue", null,
Expression.Call(recordParameter, "GetOrdinal", null,
property.PropertyType)))), recordParameter);
_typeMappings[typeof (T)] = lambdaExpression.Compile();

Read more

Don't invent it your self: 5 great CSS frameworks to rock your website

When you have build a website before you know the drill of building HTML and creating CSS files to style the stuff you created using HTML. For some it's a pain, for others a form of pure art. I think however that it can also be part of a not-invented-here syndrome that developers have grown.<!--more-->

If you're a hybrid developer or a regular developer building a website you're probably looking at this huge mountain of work called styling the website. It however can be made when you have a ready made grid in which you can position the elements that are on the page.

Read more