Silver at the Best of Swiss Web Awards 2013!

 

We were awarded silver in the “Technology” category at the Best of Swiss Web Awards 2013 on Thursday evening. In 12 months, we have renewed the website’s entire technology – front end and back end – without any interruptions, increased performance and improved search results. And thanks to the change in technology, we were able to launch a new web feature: the most comprehensive restaurant search in Switzerland.

Silver at the Best of Swiss Web Awards 2013 in the “Technology” category honoured the ambitious change in technology for our search platform, local.ch.  On 12.12.2012 at 12:12 p.m., our new search infrastructure was successfully launched after a 12 month renewal period. The new technology enables faster and better searches on local.ch, as well as quicker launches of new functions in the future. One of these innovations is the most comprehensive restaurant search in Switzerland. The restaurant guide www.local.ch/restaurant offers valuable information as well as the possibility to directly reserve a table at the selected restaurant.

fotografiert von Peter Neff

fotografiert von Peter Neff

The aim of the major technology project “local.ch redeployed” was to create conditions ready for the demands of data quality and quantity in the future, design modular web applications and simplify the process of ‘deployment’. This goal has been achieved. The entire logistics for specific searches on local.ch has been renewed and the vast experience accumulated over the years on users’ searches on local.ch played a significant part in the changes. One of the major challenges of the project lay in implementing the changes without interrupting services: no downtime was allowed during the renewal period. We overcame the challenge and achieved 99.99% availability of the website even during renewal.

We weren’t alone in our celebrations: ​​our affiliated company home.ch brought home bronze in the “Mobile” category!

 
 

System Engineering Quiz – my experiences hiring Engineers in Switzerland

 

Hiring good engineers is hard. Very hard. I like the way Joel Spolsky puts it:

The great software developers, indeed, the best people in every field, are quite simply never on the market.

Hence the art of hiring is to catch people in the very moment they become unhappy about their job. Before they actually start to search.

I became “Head of System Engineering” last October and one of my first tasks was to recruit a Senior System Engineer. And I knew it will be difficult. From the start it was clear that job ads on jobs platforms are just not enough.

That’s why we went for a triple strategy: Put job ads on the Swiss job platforms, and in parallel search with a headhunter and launch the System Engineering Quiz.

Kind vor der Tafel mit Labyrinth

The quiz

We at local.ch have a spirit we’re quite proud of. It’s an environment Engineers like: smart people, flat hierarchy, working in teams, on-the-edge technology, thinking out of the box, etc. This spirit cannot be conveyed in a job ad. That’s why we came up with the System Engineering Quiz. (Update 4 March 2013: We have another quiz! It is slightly heavier than the first;)

The quiz itself has 5 stages and on every stage you need to find the url of the next stage. Only at the end it becomes clear that local.ch is behind it and only then you see the link to the actual job description where you can apply.

To cut the story short: We only got about 3 applications through the quiz. The person who finally got the job was found through our headhunter. So, hiring wise the quiz was not a success. But it still was, in another sense. Let me explain. more »

 
 

Simply Awesome

 

simplificator

As we celebrate our first year with Ruby on Rails, we want to give a big thank-you to our technology partner, Simplificator. The team at Simplificator has been an integral part of our efforts in re-launching our website, developing our new restaurant guide, and breaking ground on exciting new projects (that we can’t wait to talk about soon).

Simplificator is a special company. In the Rails community, they have a reputation for getting things done in an agile way. But one of the things that amazed me the most was how well they integrated with our team: helping to improve our development process, championing best practices, and in general – simplifying everything we do.

Our team of engineers has grown a lot together, and we want to thank Simplificator for helping us get better at what we do. Here’s to all the pair programming sessions, refactoring support and big deployments we did together over the last year. We look forward to more of the same over the next year!

I’ll be giving a presentation about local.ch’s first year with Ruby on Rails will be given at Webmardi Lausanne on April 2, 2013. Our team is short-listed for a Best of Swiss Web award for 2013.

 

 
 

iOS Phone Book URL Scheme

 

For quite some time now we support a custom URL scheme on our iOS app. If you’ve ever added or updated a contact from our app, you might have seen those strange URLs that begin with “localch:”. Tapping on one of those URLs launches the app, (hopefully) bringing you back to the original entry in our database.

We’ve extended the scheme to support integration with third party apps. If you’ve developed an app and want to give your users access to local businesses, places and people, here’s how you can do that with minimal coding effort.

Basically, you can launch a query on our iOS app with a URL such as this one:

localch://tel/q?0433220634

Similarly, the URL for the same query on our mobile website would be:

http://m.local.ch/q/0433220634.html

or equivalently:

http://mobile.local.ch/q/?what=0433220634

Of course, you can detect if our app is installed and conditionally open the appropriate URL with code such as this:

NSString *q = @"0433220634";
UIApplication *app = [UIApplication sharedApplication];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:
	@"localch://tel/q?%@", q]];
if ([app canOpenURL:url]) {
  [app openURL:url];
} else {
  url = [NSURL URLWithString:[NSString stringWithFormat:
  	@"http://m.local.ch/q/%@.html", q]];
  [app openURL:url];
}

Since early November 2012, our mobile website will attempt to launch our iOS app (if it’s installed) when it finds the “app” parameter. So a generic URL like this one

http://mobile.local.ch/q/?what=0433220634&app=1

will give you the best of both worlds.

Alternately, you could direct your users to download our app from the App Store:

} else {
  url = [NSURL URLWithString:@"http://appsto.re/swissphonebook"];
  [app openURL:url];
}

Search Extensions

Simple One-Field Search

This effectively deprecates the current search scheme, which should be supported for backward compatibility. Entries saved to the address book should include the new scheme.

localch://tel/search?q=0433220634&nearsearch=off

The optional nearsearch parameter explicitly turns proximity search on or off. The default behaviour is to use the app’s last setting.

Two-Field Search (“Advanced Search”)

localch://tel/search?what=Vikram&where=Zurich&type=res

The optional type parameter can be one of bus (business entries), res (private entries) or all.

Near Search

localch://tel/search?q=Pizza&origin=47.367754,8.545245&oname=Limmatquai

The optional oname parameter provides a label to display in the UI, e.g. “Pizza around Limmatquai”.

Browse Access

Activates our app in the Browse Access view, around given coordinates.

localch://tel/browse?origin=47.367754,8.545245&oname=Limmatquai

x-callback-url Support (coming soon)

See http://x-callback-url.com/specifications/ for specifications of the interapp communication protocol.

Any of the above URL schemes will support the x-callback-url semantics. For example:

localch://x-callback-url/search?q=Pizza&origin=47.367754,8.545245&oname=Limmatquai&x-source=ZVV&x-success=zvvfahrplan://fahrplan2.fahrplan.zvv.ch/bin/show.exe?

If appropriate to the action, the URL passed in the x-success parameter would be called back, potentially passing data in mutually agreed return parameters.

The x-source parameter could be used to display a back button in the UI, e.g. “Back to ZVV”, if appropriate.

We’d Love to Hear from You

If you’d like to integrate our app and have questions, suggestions or feedback, please drop us an email!

Note: All parameter values should be URL-encoded. These examples don’t do so for the sake of legibility.
 
 

Mobile website: 6 years later

 

A bit of history

It was July 2006 when the very first version of local.ch mobile website was launched . Because download speed was important, the website was highly optimized to load fast and all unnecessary decorations were removed.

In the beginning of 2008, a second version emerged which kept the same goal of rendering fast on any mobile device plus small adjustments including integration with Google Maps. At that moment, the smartphone market was small but because the iPhone sold very well in Switzerland, we made sure we have an iPhone friendly UI.

Later on, our focus moved to the mobile native applications and the mobile website didn’t receive too much love with except of some server-side work, because after all, we, the engineers, love refactoring and migrations, isn’t it ? :) But our team is also data-driven; after learning that more than 90% of the traffic on the mobile website come from Android and iOS devices, we knew we need to work on the next, smartphone-friendly version.

The new version

How can I access it ? Simply point your iOS or Android device to m.local.ch and you are good to go ! If you want to test it from another device or even in a normal, big-fat browser, then use i.local.ch.

The owners of the old mobile phones can breathe normally now: their devices will be redirected to the old version that runs at mobile.tel.local.ch

Behind the scenes

The newest version is server-side code free which allowed us to develop and maintain a lightweight infrastructure to run the application. You guessed right, the language behind it’s the new(is really new ?) cool-kid-in-town, JavaScript, and we used Backbone.js as the mobile web framework. Big kudos goes to our friends from nelm.io who helped us in kicking-off the project and developed most parts of the prototype.

In this version we are “abusing” of HTML5 and CSS3 features in order to make sure you have a rich user experience when using our application. And we didn’t forget about loading speed, we use require.js to load and concatenate the JS files and we inline most of the images resources.

Feedback

Did I mention that we love feedback, especially the constructive one ? You can always contact the mobile team or just use the ‘Feedback’ button from the mobile website :)

Enjoy the new version !

Moritz published a post on our non-engineering blog with some more infos about this release.