Helvetica - Now available via iTunes Store

Helvetica - the documentary film by Gary Huswit is now available for download in iTunes.
I got myself a limited edition of the movie on DVD last year and saw the movie a couple of times already. Even though it is not exceptionally exciting, it has a few interesting passages. Towards the end of the movie however it’s slightly too long stretched. If you enjoy beautiful fonts though, this is a movie for you. Even just looking at the images makes your heart jump higher … because let’s be honest: Helvetica is the most beautiful typeface ever designed.
What I find striking about the movie being on iTunes are two things:
1.) Distribution has become dirt cheap. Whereas before, you had to produce DVDs including all sorts of material such as DVD packaging, cover design, DVD design and merchandising, nowadays you simply upload it to what is to become the universal gate for software. This is good for the producers, the consumers and above all: Apple. This however is a worry to media distribution companies such as Universal, Sony, Warner and the such.
2.) The second thing that strikes me about this is what I’ve just done can be done easily: recommending or linking to it. This for sure will drive sales as a sale is basically less than 5 clicks or 5 seconds away from here. I find it wrong that I can generate value for all those guys mentioned above (the consumers, the producers and Apple) without seeing a single penny.
Something has to be invented here. I’m working on it. Stay tuned!
A Simple Tutorial How to Get Started with Google Apps Engine on OS X
Google Apps Engine is undoubtably standing for a revolutionary approach of creating web based applications. Amazon S3 was pioneering a similar system before, but in my opinion, GAE is even more advanced and powerful because of the built in Python runtime environment. Update: Amazon EC2 can be considered as strong competitor as you can run anything on these instances.
This is a really quick tutorial on how to get startet with GAE on Mac OS X.
1.) Download the Google Apps Engine Development server from http://code.google.com/appengine/downloads.html.
2.) Create a folder where you want to put your scripts on your computer
3.) Create the scaffold you will need for your program. For example:
- a folder “static/” for all your static files such as images, CSS etc.
- a file called “app.yaml” defining the URLs and associated Python scripts
- a file called “main.py” which contains all the logic associated to the application (controller)
- a file called “main.html” being the HTML template into which the site gets rendered (view)
The file contents could look something like this:
app.yaml:
application: helloworld
version: 1
api_version: 1
runtime: python
handlers:
- url: /static
static_dir: static
- url: /favicon.ico
static_files: static/favicon.ico
upload: static/favicon.ico
- url: .*
script: main.py
main.py
#!usr/bin/env python
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
class MyHandler(webapp.RequestHandler):
def get(self):
values = { "name" : "world" }
self.response.out.write(template.render('main.html', values))
def main():
app = webapp.WSGIApplication([
(r'/', MyHandler)],
debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == '__main__':
main()
main.html
<html>
<title>Hello {{name}}</title>
<body>Hello {{name}}</body>
</html>
Now if you like to add interactivity, add the following code:
add to class MyHandler() in main.py:
def post(self):
values = { "name" : self.request.get('name') }
self.response.out.write(template.render('main.html', values))
and to main.html within the body tag:
<form action="/" method="post" accept-charset="utf-8"> <label for="name">Name</label><input type="text" name="name" value="" id="name"> <p><input type="submit" value="Say hello"></p> </form>
4.) Save all the files, drag the folder to the GAE interface and hit the “play” button. That’s it! Click on the browser icon to test your app on your localhost.

You can now deploy your software via the “deploy” button, however you need to sign up your application beforehand online. You can also add a domain to your Google Apps Engine program easily by clicking on the button “add domain” within the application dashboard. If you want to test your app online, your application ID has to be unique.
What impresses me about the concept is that you don’t have to worry about your server, bandwidth, scalability, fixes, updates etc. It’s all there and you only pay for what you actually use on bandwidth and CPU time. Isn’t that great?
Download the ZIP file.
Update: Database Inserts and Selects
You may now want to add all the names to a database log. Therefore you have to do the following:
1.) Create a database model to the main.py file by adding:
from google.appengine.ext import db
and add the model class
class Log(db.Model): name= db.StringProperty(required=True) when = db.DateTimeProperty(auto_now_add=True)
2.) Now add the logic that adds the data to the database when executed to the post def of the post def within the handler:
log = Log(name=self.request.get('name'))
log.put()
3.) Now we need a “admin” URL, to see the log. Let’s call it /log. So we have to add that URL to the main.py file where the WSGI gets triggered:
(r'/log', ShowLog)
4.) Now we need to create the ShowLog handler. We also add that to main.py:
class ShowLog(webapp.RequestHandler): def get(self):
5.) and define what’s going to happen in the get request:
logs = db.GqlQuery('SELECT * FROM Log order by when desc')
values = { 'logs' : logs }
self.response.out.write(template.render('log.html', values))
6.) Obviously we need a log.html file to render the result. We create this file and add in django style:
<html>
<title>Log</title>
<body>
<h1>Log</h1>
<p>People have said "hello" with the following names:</p>
<ul>
{% for item in logs %}
<li>{{item.name}}</li>
{% endfor %}
</ul>
</body>
</html>
All in all, the main.py now looks like this:
#!usr/bin/env python
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext import db
class Log(db.Model):
name = db.StringProperty(required=True)
when = db.DateTimeProperty(auto_now_add=True)
class MyHandler(webapp.RequestHandler):
def get(self):
values = { "name" : "world" }
self.response.out.write(template.render('main.html', values))
def post(self):
values = { "name" : self.request.get('name') }
self.response.out.write(template.render('main.html', values))
log = Log(name=self.request.get('name'))
log.put()
class ShowLog(webapp.RequestHandler):
def get(self):
logs = db.GqlQuery('SELECT * FROM Log order by when desc')
values = { 'logs' : logs }
self.response.out.write(template.render('log.html', values))
def main():
app = webapp.WSGIApplication([
(r'/', MyHandler),
(r'/log', ShowLog)],
debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == '__main__':
main()
Download the ZIP file.
That’s all! Your new log interface can be requested via the /log URL. The next step will be how to change data within the database. Stay tuned!
Spread Net Neutrality Awareness
I’ve written about Net Neutrality earlier on a more academic angle. The below video also gives you the more popular view on what the issue is all about:
Spread the word! Net Neutrality is where all our innovation bases on.
Meet the families on Dollar Street

“All people of the world live on Dollar Street, the poorest to the left and the richest to the right. Everybody else live inbetween. Dollar Street contains complete photo-panoramas from households at different income levels. Current version includes 13 household and 3 school documentations from Mozambique, South Africa and Uganda. Scroll the street to left and right to move up and down the street. Click on the houses to get inside and explore different household functions.”
The Dollar Street application can be found on Gapminder.org
Source: Gapminder.org
Advertising/Marketing/Branding inspired by Computer Games
This one is old, but still funny and articularly timely with the release of GTA 4:
I love the idea as well as the execution with all the attention to details. Well done!
Agency: Wieden + Kennedy, Portland, 2006
Synopse Beta Launched!
I have uploaded my Synopse Firefox Extension to the mozilla sandbox and am waiting for any possible feedback or rating.
Please feel free to download Synopse and let me know what you think. You will be able to browse all tagged sites and tags from www.synopse.net
For more information about my Synopse project, check out my master dissertation, which I’ve written at the University of Sussex/Ravensbourne College of Design and Communication last year.
In a nutshell, Synopse consists of two parts:
- A Firefox extension which allows you to tag websites anonymously
- A search engine, which allows you to browse and search for websites as well as tags
It’s simple, straight forward and puts a lot of importance on the “no frills” concept.
Online Marketing 2.0?
I get more and more the feeling, that sophisticated interactive online marketing websites has become increasingly common. Check out a couple of interesting marketing campaigns which probably costed more to produce than a 30 second advertising spot:
Ikea:
Bill Moggridge on Interaction Design
This is a nice speech of Bill Moggridge on the topic of Interaction Design. Quite a few very nice insights.
I still have to check the other videos, but they seem promising as well.
Midnight Commander in Mac OS X Terminal
I often use the GNU Midnight Commander to manage my files on the server. It’s just so much more efficient than the shell. Here are a couple of things you have to be aware if you’re using MC on the Mac OS X Terminal:
- Enable the Mac keyboard function-keys for your convenience
- make the background color of the terminal black. It just looks neater!
- and the most important one: since there is no “insert” button on my MacBook keyboard, be aware of the alternative key combo “CTRL-T” (T for Tag). Very useful.
Have Fun!
Google Error?
Shouldn’t this say “25 knots = 46.3 kilometers per hour” ?









