2015, the summary
This post is part of a chain of yearly summaries of noteworthy self-education and side-project work. I'm publishing these overviews to provide pointers to interesting resources, to show I'm serious about continuous self-improvement, and to inspire others to have fun with new technologies.
Previous year: 2014 <---> Next year: 2016
2015
A pretty busy year with steady stream of side-projects, on top of the daily activities of running a startup, continuing improvements in software to transform user images and generate 3D models.
Meteor
Frontend development keeps changing quickly, and the new kid on the block is called Meteor, a pretty cool full-stack framework. I worked through the Discover Meteor book to get a flavour of what's possible, and to see example projects well suited for the reactive nature of Meteor. Meteor consists of a Node.js backend, MongoDB database, and JavaScript frontend with custom templating system (later replaced by React). But here's the cool part: all data is synced automatically between the backend and all clients - which run a small MongoDB js client - using websockets, and the full UI is updated automatically, reacting and re-rendering as data changes come in. This means that you won't really have to think about writing code to update the page, nor about calling the backend to get or post data. Adding a comment to an article is as simple as saving the comment locally in the browser client (Comments.save({text: yourText})
). Meteor will sync the new data to the backend and all clients, and the comment will appear magically in all browsers, without refreshing. Part of what makes this possible is the custom templating language, that is declarative in nature and fully defines the UI based on data, without UI callbacks or other ad-hoc logic that can break consistency. (Note: if you're reading this now, you might think this is trivial; but it wasn't back then, when React and Angular weren't popular yet.)
One obvious application is building a chat room, which in essence is a single collection to which clients add the contents of a simple text box, and that's all there is to make it work. I created the chat room, and a more advanced collaborative editing demo mimicking Google Wave and its successor Google Docs, in this github repository, all in a few lines of code.
Home automation - Meteor app
Using Meteor, I created an app for our home automation system. A helpful Python Meteor plugin bridged the gap. The app features a dashboard with lamps, with status updates (fading colour and intensity changes) as the lamps changed being reflected immediately. Changes can be caused either by using the app, or by using one of the physical controllers available around the apartment. Some extra event handling in Python was necessary to keep the app in sync with the Python backend, which acts as a client of the Meteor app. As there's support for Android app exports, the UI works smoothly both as local Android app, and in web browsers connecting to our local server. The final system feels pretty responsive, and required zero coding efforts for syncing data and updating the UI.
7 Languages in 7 Weeks
I worked through this excellence survey-book of 7 different programming languages. What makes this book interesting, is the fact it tries to give just enough Hello World to move on to advanced language features. This allows to get both breadth (many languages) and depth (non-trivial assignments) in a short amount of time.. in theory. I actually worked through this book together with a friend, occasionally spending a full day of coding, spread over a whopping 4 years. I wrote a more extensive summary here.
Getting started with Processing
I discovered processing as a great playground for simple creative coding projects. It's the software equivalent of Arduino (the open-source hardware platform), with a similar IDE and language. Although based on Java, you only write the content of one large Main method, and there are many global functions defined for graphics (both 2D and 3D), for connecting with hardware, and for building network connections. There are also Python bindings, and there's a Javascript version (P5.js), so you can publish easily to the web. The Getting started with Processing book is a great intro to get a feeling of what's possible. After the book, I spent a few days building little 'sketches', trying various features applied to projects.
With webcam support built-in, I wrote a webcam half-tone viewer, drawing dots the way newspapers print images, and an interactive webcam viewer that draws coloured dots based on the mouse pointer's webcam pixel and chosen resolution, giving artistic paintings based on the original image. With the Kinect library, I wrote a physical game for holding up a virtual ball using your arms. Then I moved on to writing a face for my home automation backend, inspired by the eye-like interface for Hal in the movie A Space Odyssey, formed by a cloud of moving particles that change speed and colour based on the system's mood. Processing also came in handy writing a couple of interfaces for physical computing projects, as described next.
Physical Computing
The idea of physical computing is to go beyond traditional human-computer interfaces (screen, keyboard, mouse) and develop more natural interactions with computerised objects. Let things interact with humans, allow humans to use things in a more naturally fashion, and let things talk with each other. I worked through this book, filled with digital art projects from the pre-Arduino area, all the while building prototypes with newly arrived sensors and microcontrollers.
In one such project, I took a 10cm^3 wooden cube equipped with GPS and 9DOF gyroscope, and wrote a live pose estimation with Processing's OpenGL bindings. The box could then be used as physical remote, for example to set light intensity and colour by manipulating the box in your hands. I also played with ZigBee localisation (unfortunately not very reliable), a Kinect and a LeapMotion (hand gestures), and learned about interesting communication protocols and communication strategies. Physical computing is certainly a valuable mindset to have while designing future hardware projects.
Learning Creative Learning (course)
Not everything is best learned in the classical setting of textbook, lecture, and pre-defined homework assignments. Not everyone has the same learning style. This interesting course by MIT Media Lab, given by the people behind Scratch and Lego MindStorms programming, explores creative ways of learning. They argue that learning styles like building stuff (constructionism), tinkering, prototyping and iterating, having more loosely-defined assignments, copy and improve, game-based learning, and different interaction models between teachers and learners, and peer learning, can have a huge influence on how well people learn. We start education in kindergarten, but should continue to learn in a similar way during adulthood, at least in some subjects that fit these patterns well. As a vivid tinkerer, I couldn't agree more.
YC Startup Course
YCombinator is (still) the undisputed top of startup accelerator land, so if they give a course on how to do this startup thing right, you better listen. Despite flying to San Francisco for YC interviews twice and being turned down twice, I was eager to watch the 20 lectures given by YC staff and famous startup founders. The course is not an "MBA in Entrepreneurship", a concept they appoint as a waste of time and money, but instead simply contains hours of practical advice for first-time founders. Topics include the founding (founders, idea, team, product, shares), culture ('don't fuck this up'), hiring ('hire animals'), growth and scaling, fundraising, managing ('just compensate for the fact that you're a bad manager'), marketing, and much more. Very watchable and even more enjoyable once you've got some startup experience ('oh yes this is so true').
The Things Network kickoff
Sometimes you feel like history is being made. That was certainly the feeling when a fellow co-founder in our building busted into my office with an idea. His startup recently went down, but there was no time for mourning. Recent technological breakthroughs made it possible to send data with very little power over very long distances (5km) to cheap gateways, enabling small businesses and individuals to create large-scale networks with very little investment. The idea was to crowdsource such a network, and to have it be open for anyone to use. A foundation, The Things Network, would support writing open-source software to run the distributed IoT network of nodes, free from any central authority.
I had the privilege to have a side-role in the start phase and first year of the project. I built the initial test node to show as a proof-of-concept, and implemented the initial community portal that helped the community kick-off. During off-hours for my own startup, I also helped brainstorm strategies to grow the community of very excited believers, together with members of the now assembled startup-like team at the Amsterdam office.
A longer description of TTN is available here.
DIY / woodworking
Two little woodworking projects kept my makeroom dirty this year.
Tube Spice Rack
I made a cute spice rack from test tubes. The test tubes make for a colourful collection of spices attached to the wall. Read more and find the photos here.
Tangram Magnets
Our new logo for Zazzy is made out of a particular set of shapes called a tangram. And so I made a wooden tangram set, painted it black and attached magnets to the back. We snapped them on a whiteboard in the hallway, inviting people to design a new Zazzy logo every day. Needless to say, not all design were safe to use as a public logo, but we certainly had a lot of fun discovering new arrangements!
Readings
The Design of Everyday Things - Don Normal
Not all objects are created equal. This humorous book contains many examples of both bad and good product design, including stories on walking into doors, the evilness of British water taps, and unusable teapots (featured on the cover). The author discusses the psychology behind everyday things, and underlying principles behind why some objects delight, while others frustrate. This book - although a bit repetitive - went well with the Physical Computing projects, which tapped into designing more natural interactions with digital things. It forever changes the way you'll look at the 'interfaces' of the world around you.
Financial industries
To dive a bit into (macro) economics, including the reasons behind the 2008 financial crisis, I read three books written by three angry authors. Swimming with Sharks describes Joris Luyendijk's journalistic exercise of conducting anonymous interviews with bankers in the City of London. It exposes the underlying force behind the a-moral financial world: its employees. On a small scale, most decisions don't seem unethical in isolation, and are just local decisions based on personal and business circumstances. On a large scale, the decisions have devastating effects.
The second book, De schaduwelite (The shadow establishment), written by economics professor Ewald Engelen, describes the larger players and their behaviour in the financial sector: consumer banks, investment banks, insurance institutes, central banks, supervising authorities, stock exchanges, lobbyists, and politicians. All these different players interact in a way that makes sense from their perspective, but the industry as a whole contains a lot of undesired side-effects. Ewald's main thesis is the need for reversal of mergers between consumer and investment banks, less complex (and opaque) financial products, and much stronger and publicly-owned supervisor organisations, who are currently vastly overshadowed by the powerful banks.
The third book, The Establishment by Owen Jones, a leftish journalist in the UK, describes the people in power and their, often apparent selfish, behaviours. A disturbing view into English politics, the book describes (mild) corruption, Ivory-tower isolation from large parts of the population, and a broken system of media controlled by a small group of owners spreading a distorted view of reality. The tale serves as a reminder of the large amount of players involved in public decision making that influence not only the financial industry, but the lives of many ordinary people trying to make sense of the unequal world around them.