Standing at a Crossroads: Which way to the Mobile Internet?
Nowadays, everybody has understood the power of the Internet. Most people also under stand the convenience and the power of mobile. So needless to say that it is clear that the internet on a mobile device is even more powerful.
However currently there are a few things which have to be sorted out until the Mobile Internet will unleash its full potential.
- Battery life of the devices has to be better
- The speed of the download has to improve
- The screens have to become bigger
- The input devices need to be more effective
- Manufacturers and software suppliers need to agree on and stick to standards
In the meantime, there are three different approaches which are being taken in order to get the internet on the mobile devices.:
1.) UK Mobile Operator Vodafone has launched the much discussed Internet on your Mobile campaign in 2007. The idea was that any HTML based website will be re-rendered for mobile devices via a Vodafone Proxy Server. Google took a similar approach: Any site which you search in the Google Mobile search will be re-rendered via a Google Proxy. The advantage of this system is all existing internet content will be available on mobile device immediately. In theory. We’re not discussing how it looks and how well it works. There is no control over design, functionality and anything related to the aesthetics of the page.
2.) Nokia, Apple and some other device manufacturers have taken the approach of getting browsers as we know them on mobile devices. The idea is that you can then use the mobile device to access any internet site as if it was on a computer. This also works only in a very limited way. The screen size for example is a major issue as well as the input devices (no mouse, no QWERTY keyboard). Also are most internet sites completely unaware of context such as location, the handset’s capabilities or connection speed.
3.) The third approach is the approach mobile specific agencies and technology providers are taking. In the long term, this solution is the only sustainable way of marrying up mobile devices and Internet. Mobile internet pages should be created and designed specifically for the devices which are being used to access them. This starts with the detection of the device, the rendering and access to the device’s features such as telephone calling, messaging via click, location, billing, small screen optimized user interface or even making use of Bluetooth or the built in camera. There is no question that the Web as we know it an the Mobile Internet will converge. One day, the stationery computer in the office will just be one of many devices with which you can access a (web-)site. If you want to deliver top quality Mobile Internet at the moment, you need a device database of around 1800 devices and you have to render the page according to those devices. The stationery computer could just be the 1801st device. But until that time comes, we have to keep making mobile sites better and better. Until the borders between them and the web as we know it are completely blurred out. The iPhone with its Web Apps has certainly led in this direction and continued with native Apps even though the latter will never be working cross device in the same way a (web-mobile-converged) Internet page would.
And They Weren’t Even Real Cameras!
What media does to us. And everyone around us.
Recycled Magic Wallets at Brick Lane Market
Today, I was helping my sister to sell her Recycled Magic Wallets at Brick Lane Market (Back Yard Market).
On one of the stalls, an Italian fellow was selling cheap chinese imported sun glasses for £5 a pair. He was the “odd man out” in the market as everyone else was selling hand made stuff. Yet it seems that his stall seemed to be one of the most popular ones. It was the perfect prove that the price was what makes people buy stuff. Everyone liked the idea of my sister’s Recycled Magic Wallets, yet hardly anyone appreciated the work which was needed to produce them. Let alone pay for it. It’s sad but a hard fact. Cheap stuff from China still sells better quantities than good hand made local craftsmanship. And better quantities gives more profit. And more profit gives more incentive.
You can see more pictures of Recycled Magic Wallets on Flickr.
NOTE: My sister still sold a couple of wallets. Not everyone was just looking at the price. There are people who appreciate ideas, innovation and hard work.
London Crime Maps Beta Released
The Metropolitan Police in London has released a Google Maps Mashup under http://maps.met.police.uk displaying the distribution of London crime rates.
The maps show the amount of incidents (in some occasions even vandalism and graffitis) per 1000 inhabitants and in certain locations, the map can be zoomed all the way down to street level. The maps will be updated on monthly basis.
The idea is to roll this service out for all England and Wales by the end of the year.
The question is now, what impact do such maps have on the local house prices. Does my rent drop if I put a graffiti up on the other side of the street? Who knows…
AJAX Sucks
I don’t exactly know but the AJAX Technology has become hugely popular amongst the so called Web 2.0 sites.
I think there is a big misconception going on here! Just because it’s possible and it works, it doesn’t necessarily make sense. In fact, in most of the cases, AJAX doesn’t make sense at all.

I believe that AJAX has become an absolute necessity on sites such as YouTube where you want to browse through the some of the site functionalities without interrupting the video playing. Let’s say you’re watching or listening to the Canon, you might want to browse through the comments at the same time without interrupting the video. This is where AJAX is the only possibility to do this effectively.
For anything else, AJAX is just an useless frill with no real benefit. In fact AJAX causes more problems than it solves:
- Search engines would not find contents
- Deep-Linking is not possible
- Some browsers still cause problems
- Most mobile devices don’t support AJAX
- The back button don’t work properly
- Accessibility is limited
- Analysis of user behavior is more difficult
- In-transparency in terms of SSL protocol usage
It may have some good sides such as:
- Enabling complex user interactivity (including drag & drop etc.)
- Reducing server load by modularizing the queries
- More client-side logic
However most of the time these features are not even used and the disadvantages outnumber the benefits by far. Or would you not agree?
Online Crossword Puzzle Solver
Have you had this before? There is this great prize to win on this ridiculously difficult crossword puzzle, but in order to get your holiday on the Maldives, you still need another couple of words to fill out?
For all you crossword puzzle freaks out there, I have just deployed a quick crossword puzzle solver application. Check it out it’s absolutely free and not even sponsored by advertising!
The Cuil Trick
Some search engine caught everyone’s attention today. Cuil was supposed to be the next Google according to - well, first of all, … Google. But also the New York Times, the BBC, SlashDot, CNET and much more…
I’ve been working on a “new approach to web search” for a while either, and what Cuil did, I must say, is very clever.
If you search for anything which for sure will not yield in any results, for example jakldfjasdfhjklasdfaajdkfla, you will be facing a error message saying “No results because of high load…”.

I highly doubt that this has to do anything with the load. They are just not prepared to admit that there is simply no result for this query at all.
This rises the question: What is better? Admitting that there is too much load or admitting that there is no result at all? I’d go for the latter. Unless you’re cheating. Meaning, while showing the error message, going sneakingly grabbing results from other search engines and aggregate them. Or why else would you write “Please try your search again.”? You would only do that if you know that the next attempt would return some useful results. Usually, this is the case. Not however with jakldfjasdfhjklasdfaajdkfla.
Of course, the first thing I tried today was the vanity search. At first I got the too much traffic error. At present, I get 1,628 results.
emcons.net gets me currently 398 irrelevant hits. Let’s see how many there will be tomorrow…
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!





