<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Philipp Küng]]></title>
  <link href="http://philippkueng.ch/atom.xml" rel="self"/>
  <link href="http://philippkueng.ch/"/>
  <updated>2012-04-26T20:34:11+02:00</updated>
  <id>http://philippkueng.ch/</id>
  <author>
    <name><![CDATA[Philipp Küng]]></name>
    <email><![CDATA[hi@philippkueng.ch]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[trainshare - first update]]></title>
    
      <link href="http://philippkueng.ch/trainshare-first-update-since-number-makeopendata.html"/>
    
    <updated>2012-04-26T10:38:00+02:00</updated>
    <id>http://philippkueng.ch/trainshare-first-update-since-number-makeopendata</id>
    <content type="html"><![CDATA[<p><img src="images/trainshareapp.png" alt="trainshare app mockups" /></p>

<p>It&#8217;s been quite a while since <a href="http://makeopendata.ch">#MakeOpenData</a> took place, the event where <a href="http://trainshare.ch">trainshare</a> transformed from being <a href="http://philippkueng.ch/trainsharingapp.html">purely an idea</a> to something more tangible.</p>

<p>Since @AdrianKuendig, @visualcontext, @koma5 and i weren&#8217;t able to deliver a running prototype until the end of the event, we continued working on <a href="https://github.com/akuendig/TrainShareApp">the App</a> as well as <a href="https://github.com/philippkueng/trainsharingapp">the API</a> whenever we had some spare time. While it&#8217;s neither done nor available in the AppStore yet, we just wanted to give you a sneak peak of what&#8217;s to come.</p>

<iframe src="http://player.vimeo.com/video/41043505?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff" width="654" height="368" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>


<p>As you can see, from the video above, there are still things need to be figured out or refined. While we might think of some ourselves, we always welcome your suggestions, so don&#8217;t hesitate.</p>

<p>Well that&#8217;s it for this time around, thanks to my trainshare team members, the awesome guys behind #MakeOpenData who made this event possible, journalists and bloggers who wrote articles like <a href="http://www.bluewin.ch/de/index.php/53,574679/Trainshare__So_findet_man_Freunde_im_Zug_/de/digital/">this</a>, <a href="http://leumund.ch/daten-fur-besseren-verkehr-0014403">this</a> and <a href="http://www.netzwoche.ch/de-CH/News/2012/04/03/Ergebnisse-der-Zuercher-Makeopendatach-Hackdays.aspx">this</a>. You rock!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Socket.io and Meteor Talks at @JSZurich]]></title>
    
      <link href="http://philippkueng.ch/socket-dot-io-and-meteor-talks-at-at-jszurich.html"/>
    
    <updated>2012-04-25T16:02:00+02:00</updated>
    <id>http://philippkueng.ch/socket-dot-io-and-meteor-talks-at-at-jszurich</id>
    <content type="html"><![CDATA[<p>For the april event of <a href="https://twitter.com/#!/jszurich">@JSZurich</a>, @streunerlein and i had the honor of talking about <a href="http://socket.io/">socket.io</a> and the new kid on the block, <a href="http://meteor.com/">meteor</a>. As you can see the slides and recordings are embedded below. Enjoy. As for the recordings, sorry it&#8217;s raw, MTS is not the friendliest format.</p>

<h2>Socket.io</h2>

<p><strong>Abstract</strong> - It&#8217;s a Javascript wrapper library written for Node.js which makes the usage of websockets a lot easier. It also takes care of supporting older browsers with multiple fallbacks. By using socket.io, creating &#8220;realtime&#8221; applications is a matter of minutes.</p>

<div style="width:654px" id="__ss_12675407"><iframe src="http://www.slideshare.net/slideshow/embed_code/12675407?rel=0" width="654" height="546" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>


<br><br><br>




<iframe width="654" height="362" src="https://www.youtube.com/embed/ry2fe9os6fc" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="http://www.youtube.com/embed/CW1Y1ct_IRU" frameborder="0" allowfullscreen></iframe>


<h2>Meteor</h2>

<p><strong>Abstract</strong> - Meteor is an opinionated toolset of common Node.js npm packets and some custom code. Among many things it enforces the use of Fibers, Socket.io and MongoDB both on the server aswell as on the client side.</p>

<script async class="speakerdeck-embed" data-id="4f9724d5947c450022024e02" data-ratio="1.3333333333333333" src="http://philippkueng.ch//speakerdeck.com/assets/embed.js"></script>


<br><br><br>




<iframe width="654" height="362" src="http://www.youtube.com/embed/0mplHShxPWA" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="http://www.youtube.com/embed/nqsLYKzAdMQ" frameborder="0" allowfullscreen></iframe>


<p>Some explanation regarding what i said during the talk for those who weren&#8217;t present. I&#8217;m well aware that i did not sell Meteor as the next big project that everyone has to pick up. The reason is simply that it&#8217;s really early in it&#8217;s development process. Additionally i think it&#8217;s highly dangerous to sell Meteor as something for beginners, since it&#8217;s magic bits hide a huge amount of logic a beginner normally doesn&#8217;t need to use in order to build a hello world application. By embracing Meteor the novice programmer isn&#8217;t learning about those hidden areas which probably lead to unexpected results here and there. After all distributed systems are hard.</p>

<p>An example for such a use-case is the todos application which comes bundled with meteor. It&#8217;s nicely done and quite easy to understand, but what happens if let&#8217;s say 2 users, with a high latency connection to the server, update the same entry at about the same time? Your changes will be reflected immediately on your machine, with the syncing following a few seconds later, a few seconds later from there you&#8217;ll might be surprised that your original changes have been overwritten by the second user. With a traditional stack you&#8217;d do some locking or at least insert versioned entries, however with MongoDB this is not supported by default. You&#8217;d be able to implement versioning youself by using timestamps and inserts for every update but why the additional overhead?</p>

<p>Just to state it again, the words above do reflect my personal experience when playing with Meteor 2 weeks after it&#8217;s initial appearance in April 2012, i&#8217;m happy to give it another try once it&#8217;s some more mature.</p>

<p>As for the @JSZurich event, thanks to @ikr for hosting us and @seldaek for organizing it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[TrainsharingApp]]></title>
    
      <link href="http://philippkueng.ch/trainsharingapp.html"/>
    
    <updated>2012-03-29T01:00:00+02:00</updated>
    <id>http://philippkueng.ch/trainsharingapp</id>
    <content type="html"><![CDATA[<p><img src="images/DSC_4670.jpg" alt="into image" /></p>

<p>Sharing a train, something the swiss twitter community did for years via the hashtag <a href="https://twitter.com/#!/search/%23trainsharing">#trainsharing</a> should now be brought to the masses with a dedicated app.</p>

<p>My goal is to realize the backend as well as various mobile clients with the help of other hackers during the <a href="http://make.opendata.ch">make.opendata.ch hackathon</a> to show off what can be done by leveraging publicly accessible data. And just for the fun of jumping on the buzzword bandwagon, it&#8217;ll be <a href="http://techcrunch.com/2012/03/24/die-solomo-die/">SoLoMo (social-local-mobile)</a> ;-).</p>

<!-- You're probably already as sick of apps as I am but nonetheless these ideas keep popping into my head so why the heck not just realize them? Especially since there's an opendata hackathon dedicated to public transportation taking place this friday and saturday called [MAKE opendata.ch](http://make.opendata.ch). -->


<h2>What led to the idea</h2>

<p>Day in and day out i&#8217;m commuting back and forth from where i live to Zürich. In order not to see those hours spent commuting as wasted time, you&#8217;ll have to spend it wisely which often times means doing some kind of work. As a programmer that&#8217;s cake ;-). However there are times you just want to talk to someone remotely familiar. You could obviously do some kind of creepy stalking and wait outside the train until the very last minute before departure to see if you see someone familiar. Chances are you&#8217;ll either find no one or they actually want/have to do work instead of chit-chat with you. So status quo sucks, right? Well could we improve it?</p>

<h2>The idea</h2>

<p>Obviously yes. Let&#8217;s create a mobile app that allows to checkin to a train and then find conversation-partner-matches via <a href="https://twitter.com">Twitter</a>, <a href="https://www.facebook.com/">Facebook</a> and maybe even <a href="https://foursquare.com/">Foursquare</a>.</p>

<h2>The User Interface</h2>

<p>When starting the app for the first time you&#8217;re using one of those buttons on the login screen to connect to your favourite network and start using the TrainsharingApp.</p>

<p><img src="images/trainsharing-login.png" alt="trainsharing-login" /></p>

<p>As a next window you&#8217;re seeing the home screen on which you can enter your commuting route. This will make a call to sbb.ch to get the timetable and save it locally for later reuse. If you&#8217;ve already used this route there&#8217;s a quick dial button to select your route and then select the departure time on the following view.</p>

<p><img src="images/trainsharing-home.png" alt="trainsharing-home" /></p>

<p>As soon as you&#8217;ve chosen a time, you&#8217;re automatically checked in to that train-route which will trigger a push notification to users on the same train or users which will share part of your route and with whom you are friends on one of the social networks offered at login.
After sending those notifications to friends or receiving one you&#8217;re able to initiate a Meetup by selecting their name, selecting optional information and tipping the &#8220;Meetup&#8221; button.</p>

<p><img src="images/trainsharing-social.png" alt="trainsharing-social" /></p>

<h2>The Technical Implementation</h2>

<p>As for the backend, there exists an already scraped static dataset of train lines with their according numbers, eg. S8 18898 and each route (Station to Station, see below). All in all about 230&#8217;000 routes which will reside inside a MySQL DB. In case you want to play around with the dataset, here&#8217;s a <a href="files/trainsharing_routes.sql">routes table dump</a>.</p>

<table>
<thead>
<tr>
<th></th>
<th align="left">id</th>
<th align="left">linename</th>
<th align="left">dep_station</th>
<th align="left">dep_time</th>
<th align="left">arr_station</th>
<th align="left">arr_time</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td align="left">1</td>
<td align="left">S2725920</td>
<td align="left">Waldshut</td>
<td align="left">06:24</td>
<td align="left">Koblenz</td>
<td align="left">06:29</td>
</tr>
<tr>
<td></td>
<td align="left">2</td>
<td align="left">S2725920</td>
<td align="left">Koblenz</td>
<td align="left">06:44</td>
<td align="left">Klingnau</td>
<td align="left">06:47</td>
</tr>
</tbody>
</table>


<p>For matching friends there&#8217;ll be some kind of NoSQL DB instance since MySQL isn&#8217;t that good at it without creating a lot of table and row overhead. Still needs to be figured out, suggestions are welcome.</p>

<p>Additionally there&#8217;ll be a join table (routes_users, see below) for matching the routes with users. Since the routes_users table can fill up quite fast and past data doesn&#8217;t need to be held warm, it&#8217;ll be pushed to S3 for later analysis and then cleared every 24 hours.</p>

<table>
<thead>
<tr>
<th></th>
<th align="left">id</th>
<th align="left">routes_id</th>
<th align="left">users_id</th>
<th align="left">start_time</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td align="left">1</td>
<td align="left">423</td>
<td align="left">234412345</td>
<td align="left">12:03</td>
</tr>
<tr>
<td></td>
<td align="left">2</td>
<td align="left">5122</td>
<td align="left">967512345</td>
<td align="left">14:34</td>
</tr>
</tbody>
</table>


<p>So much for the storage part, now over to the API. There will be three endpoints at least, <code>/login</code>, <code>/checkin</code> and <code>/read</code>.</p>

<p><strong>/login</strong> will be used to send the social network authentication tokens over to the server to allow us to do the bandwith heavy parts. The request should be one of type POST with the credentials in it&#8217;s body. Which will give a trainsharingID back as a response. This trainsharingID will then be stored on the client device and used for every single request as a querystring.</p>

<table>
<thead>
<tr>
<th></th>
<th align="left">Key</th>
<th align="left">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td align="left">network</td>
<td align="left">facebook, twitter or foursquare</td>
</tr>
<tr>
<td></td>
<td align="left">token</td>
<td align="left">network_token</td>
</tr>
<tr>
<td></td>
<td align="left">token_secret</td>
<td align="left">network_token_secret</td>
</tr>
</tbody>
</table>


<p><strong>/checkin</strong> is, as the name suggests, the endpoint for when a user wants to check in to a train ride. For clarification, a train ride consists of multiple routes (Station-to-Station) and may also involve switching trains. Requests to <code>/checkin</code> should also be of type POST with the trainsharingID in the URL as follows <code>/checkin?trainsharingID=your_trainsharing_id</code>. As for the POST body, it&#8217;s the information getting delivered when clicking on the details section for the specific connection timetable on sbb.ch.</p>

<p><img src="images/sbb_timetable_screenshot.png" alt="sbb timetable screenshot" /></p>

<table>
<thead>
<tr>
<th></th>
<th align="left">Key</th>
<th align="left">Value</th>
<th align="left">  </th>
<th align="left">Key</th>
<th align="left">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td align="left">dep_st-1</td>
<td align="left">Siebnen-Wangen</td>
<td align="left">  </td>
<td align="left">dep_st-2</td>
<td align="left">Pfäffikon SZ</td>
</tr>
<tr>
<td></td>
<td align="left">dep_t-1</td>
<td align="left">06:03</td>
<td align="left">  </td>
<td align="left">dep_t-2</td>
<td align="left">06:19</td>
</tr>
<tr>
<td></td>
<td align="left">arr_st-1</td>
<td align="left">Pfäffikon SZ</td>
<td align="left">  </td>
<td align="left">arr_st-2</td>
<td align="left">Zürich HB</td>
</tr>
<tr>
<td></td>
<td align="left">arr_t-1</td>
<td align="left">06:13</td>
<td align="left">  </td>
<td align="left">arr_t-2</td>
<td align="left">06:48</td>
</tr>
<tr>
<td></td>
<td align="left">train_id-1</td>
<td align="left">S2 18220</td>
<td align="left">  </td>
<td align="left">train_id-2</td>
<td align="left">IR 1754</td>
</tr>
</tbody>
</table>


<p><strong>/read</strong> will be the only endpoint accessible via a GET request, though it still needs the trainsharingID in the querystring. <code>/read</code> is for manually asking if new overlaps have been found since checking in. The goal however should be that this endpoint is only used for development and new overlaps are sent to the user via PUSH notifications in a production setup.</p>

<p>Enough with the server stuff, what happens on the <strong>mobile</strong>? -Well, upon first launch of the app the user signs in with one of those social networks which will create an OAuth token and an OAuth token secret which will be sent to the <code>/login</code> endpoint mentioned above. The trainsharingID in the response then gets stored persistently in the application storage.</p>

<p>Next up is the home screen where the user can enter departure and arrival destination to look for available trains. This will trigger a POST request to sbb.ch from the phone, parsing the response and showing the available options to the user. If a user selects a specific time another GET request will be fired to fetch the details information for that connection whose response get&#8217;s parsed and sent to the <code>/checkin</code> endpoint.</p>

<p>If matches already exists the response to the <code>/checkin</code> POST request will contain users from various networks who are matching the friends criteria. In case none exist yet the response will be empty. In both cases the user will be notified via PUSH if additional matches are made later on.</p>

<p>Both a proper UI and API endpoints for the meetup functionality still need to be figured out. Maybe it even makes more sense to use their native networks eg. Facebook or Twitter for messaging instead of building yet another Whatsapp clone.</p>

<p>Well, that&#8217;s all there is to say about the TrainsharingApp at the moment. Have i missed something? Or do you have a specific suggestion what needs to be changed, added or removed?</p>

<p>In case you are interested in creating a native mobile client besides the one for WindowsPhone, which is already being covered by <a href="http://www.facebook.com/adriankue">Adrian</a>, let me know either via twitter or the comments below so I can get in touch with you. The same goes for designers too.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Go programming language]]></title>
    
      <link href="http://philippkueng.ch/go.html"/>
    
    <updated>2012-03-18T21:03:00+01:00</updated>
    <id>http://philippkueng.ch/go</id>
    <content type="html"><![CDATA[<p><a href="http://golang.org/">Go</a> is new programming language and sort of a mixture of C, Python, Oberon and other languages. It&#8217;s trying to solve many problems where other languages are failing when deployed on enourmous scale, eg. like on Googles infrastructure.</p>

<p>Below are the recordings of last weeks joint event by the <a href="http://www.meetup.com/zh-geeks/events/47295912/">IT geeks Zurich</a> and <a href="http://zurich.gtugs.org/events/go-march-2012">GTUG Zurich</a>. At this event Luuk van Dijk a staff software engineer at Google who&#8217;s currently working on the Go compiler and <a href="http://twitter.com/proppy">Johan Euphrosine</a> a Developer Programs Engineer working on <a href="http://code.google.com/appengine/">App Engine</a> gave some insights on how Go can be leveraged and what it does internally to do so.</p>

<p>Also many thanks to the organizer <a href="http://twitter.com/al_maisan">Muharem Hrnjadovic</a> for making this second amazing IT geeks event possible.</p>

<p>And without further ado, enjoy the talks below and excuse the Pizza distribution dilemma we luckily had to deal with.</p>

<iframe width="654" height="362" src="https://www.youtube-nocookie.com/embed/wjLK-WMNVgM" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="https://www.youtube-nocookie.com/embed/sAh8x3_RFQE" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="https://www.youtube-nocookie.com/embed/jmQLawO30eA" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="https://www.youtube-nocookie.com/embed/G0ODQcL8Jhk" frameborder="0" allowfullscreen></iframe>




<iframe width="654" height="362" src="https://www.youtube-nocookie.com/embed/wRIkSWBRMD8" frameborder="0" allowfullscreen></iframe>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Podcast about data related topics?]]></title>
    
      <link href="http://philippkueng.ch/podcast-about-data-related-topics.html"/>
    
    <updated>2012-02-10T15:56:00+01:00</updated>
    <id>http://philippkueng.ch/podcast-about-data-related-topics</id>
    <content type="html"><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Open_data">OpenData</a>, <a href="Big_data">BigData</a>,  Infographics, <a href="http://datavisualization.ch/">Visualizations</a> and <a href="http://www.guardian.co.uk/news/datablog/2011/jul/28/data-journalism">Data journalism</a> are all buzz words and movements which started to get quite some traction lately.</p>

<p>While there are lively ecosystems of blogs around niche topics like visualizations, processing or data journalism there&#8217;s not enough interdisciplinary communication going on in my opinion.</p>

<p>Well, how about creating it by interviewing those experts, give them some airtime and maybe even connect previously unknown scientists, journalists, hackers, politicians and ideators to each other.</p>

<p>Since i&#8217;m still playing with the idea there&#8217;s nothing fixed just yet. Language might be english or german depending on who&#8217;s in front of the camera. Also if you&#8217;re interested in being a host or you&#8217;re having a name suggestion let me know.</p>

<p>Would you listen to or watch it?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Structured Procrastination]]></title>
    
      <link href="http://www.structuredprocrastination.com/">Structured Procrastination →</link>
    
    <updated>2012-02-02T18:29:00+01:00</updated>
    <id>http://philippkueng.ch/structured-procrastination</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/structured-procrastination.html">∞</a><br/><p>John Perry:</p>

<blockquote><p>One needs to be able to recognize and commit oneself to tasks with inflated importance and unreal deadlines, while making oneself feel that they are important and urgent.</p></blockquote>

<p>Being a heavy procrastinator myself I agree with <a href="http://www-csli.stanford.edu/~jperry//index.html">John Perry</a> but I&#8217;d like to extend one point. While some work can be encouraging even slightly more can have devastating effects. From my personal experience a task overflow can turn everything into white noise at which stage you&#8217;re not caring about any of it anymore.</p>

<p>Positive side effect, you&#8217;re able to work off those items quite relaxed. On the other side you might also over-commit to incoming work because estimating white noise is kind of difficult.</p>

<p>On another note, have a look at the awesome copy in the article footer. Brutally honest.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[OpenData.ch - Switzerland's OpenData Association]]></title>
    
      <link href="http://opendata.ch/2012/01/verein-opendata-ch-offiziell-gegrundet-manifest-und-agenda-2012/">OpenData.ch - Switzerland&#8217;s OpenData Association →</link>
    
    <updated>2012-01-20T11:13:00+01:00</updated>
    <id>http://philippkueng.ch/opendata-dot-ch-switzerlands-opendata-association</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/opendata-dot-ch-switzerlands-opendata-association.html">∞</a><br/><p>Yesterday, on january 19th, Swiss OpenData enthusiasts and activists have <a href="http://opendata.ch/2012/01/verein-opendata-ch-offiziell-gegrundet-manifest-und-agenda-2012/">founded the OpenData.ch Association in Bern</a>. It&#8217;s goal is to bring together citizens, journalists, designers and developers to realize ideas based on publicly available <a href="http://en.wikipedia.org/wiki/Opendata">OpenData</a> and OpenGovernmentData.</p>

<p>More about the goals and mindset of OpenData.ch can be found in the <a href="http://opendata.ch/wp-content/uploads/2011/06/OGD-Manifest-Schweiz-1.0.pdf">German-Only - Open Government Data for Switzerland Manifesto</a>.</p>

<p>If you&#8217;re up to create something with OD, whether your a developer or not, reserve march 30th and 31st when the next <a href="http://www.makeopendata.ch/">Make.opendata.ch-Hackathon</a> will be held. Need, some inspiration of what the first one was like? Checkout the <a href="http://datavisualization.ch/events/review-of-switzerlands-first-open-data-camp/">great summary by datavisualization.ch</a> or read <a href="http://philippkueng.ch/makeopendatach-2011.html">my hackathon review</a>.</p>

<p>Thrilled to start this new chapter with an amazingly diversified group of people.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Recovering From a Computer Science Education]]></title>
    
      <link href="http://prog21.dadgum.com/123.html">Recovering From a Computer Science Education →</link>
    
    <updated>2012-01-17T07:38:00+01:00</updated>
    <id>http://philippkueng.ch/recovering-from-a-computer-science-education</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/recovering-from-a-computer-science-education.html">∞</a><br/><p>James Hague:</p>

<blockquote><p><strong>Be widely read.</strong> There are endless books about architecture, books by naturalists, both classic and popular modern novels, and most of them have absolutely nothing to do with computers or programming or science fiction.</p></blockquote>

<p>Seems funny now, but had the most difficult time to let go of all those other things when started studying. No more philosophy or politics just algorithm runtimes and graph theory.</p>

<p>via the <a href="http://www.codeproject.com/">codeproject newsletter</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why do most programmers work so hard at pretending that they’re not doing math?]]></title>
    
      <link href="http://richardminerich.com/2012/01/why-do-most-programmers-work-so-hard-at-pretending-that-theyre-not-doing-math/">Why do most programmers work so hard at pretending that they’re not doing math? →</link>
    
    <updated>2012-01-16T13:32:00+01:00</updated>
    <id>http://philippkueng.ch/why-do-most-programmers-work-so-hard-at-pretending-that-theyre-not-doing-math</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/why-do-most-programmers-work-so-hard-at-pretending-that-theyre-not-doing-math.html">∞</a><br/><p>Richard Minerich:</p>

<blockquote><p>We work in an environment where hearsay and taste drive change instead of studies and models.</p></blockquote>

<p>While VCs and influencers encourage us to jump on the emotional UX and viral social-network train to make our ideas succeed, we tend to not consult our logs first. After all, tapping in the dark is not science, but that&#8217;s sort of another topic.</p>

<p>Richard Minerich writes about the shift in programming languages away from proven ones to scripting languages. I tend to agree that dynamic languages should mainly be used as glue. Building a house out of porous cardboard could work if you&#8217;re an experienced professional, but it&#8217;ll probably fail for most of us. That said most of my code to date is dynamically typed because it&#8217;s just way to comfortable.</p>

<p>However there&#8217;s no test that&#8217;ll cover every single error case on the other side there always will be static and correct formulas.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Freemium - please leave]]></title>
    
      <link href="http://philippkueng.ch/freemium-please-leave.html"/>
    
    <updated>2012-01-15T16:46:00+01:00</updated>
    <id>http://philippkueng.ch/freemium-please-leave</id>
    <content type="html"><![CDATA[<p>Last december Maciej Ceglowski, founder of pinboard has written a <a href="http://blog.pinboard.in/2011/12/don_t_be_a_free_user/">post</a> about the fact that all great services which don&#8217;t charge are very likely going to disappear in the long run.</p>

<p>Maciej Ceglowski:</p>

<blockquote><p>I love free software and could not have built my site without it. But free web services are not like free software.</p></blockquote>

<p>The reason I&#8217;m writing this is that while premium services are making money they&#8217;re not necessarily attracting enough users to actually accomplish something while at the same time, free, VC-backed startups are doing exactly that. The middle way is to design a so called freemium service where premium users have to pay for free ones, but they&#8217;re obviously not going to tell them that.</p>

<p>Now after having <a href="http://philippkueng.ch/migrate-from-blogengine-dot-net-to-jekyll.html">migrated this blog over to a static version</a> I needed a replacement to enable visitors to send me e-mail while at the same time not opening the doors for spammers. PHP scripts can easily fulfill that job but I want something else.</p>

<p>While having used the <strong>free</strong> version of <a href="http://wufoo.com/">Wufoo</a> in the past I thought it&#8217;s a no brainer to go back and leverage it again. Obviously paying for it this time. Then it hit me while checking the <a href="http://wufoo.com/signup/">pricing page</a>. The cheapest subscription is 15 dollars per month, while free plans are displaying ads to your visitor. What are they thinking! Paying 15 dollars, which is more than I pay for hosting, while only receiving about two messages during that time period.</p>

<p>That said, please startups and SaaS companies, remove the free model and make premium reasonably priced.</p>

<p>As for Wufoo, i&#8217;d guess replacing the free plan with one where you&#8217;d pay 2 dollars a month would make them more profit than showing ads on those confirmation pages.</p>

<p>When talking about showing ads to free users checkout the <a href="https://twitter.com/romeroabelleira/status/157804033229340673">tweet</a> by @romeroabelleira and give it some thought (translated):</p>

<blockquote><p>Dear Advertisers on Spotify, I don&#8217;t even pay for Spotify, I&#8217;m therefore worth nothing to you too. Sorry, Juan</p></blockquote>

<p>And don&#8217;t waste your time looking for the contact form, I&#8217;d just put the e-mail address into the footer for now.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nikon D4 - A step into the right direction]]></title>
    
      <link href="http://philippkueng.ch/nikon-d4-a-step-into-the-right-direction.html"/>
    
    <updated>2012-01-14T15:41:00+01:00</updated>
    <id>http://philippkueng.ch/nikon-d4-a-step-into-the-right-direction</id>
    <content type="html"><![CDATA[<p>Ten days back Nikon announced their new flagship model, the <a href="http://en.wikipedia.org/wiki/Nikon_D4">Nikon D4</a>. It&#8217;s clearly got a higher Megapixel value - as needed for marketing purposes. On the side it has gotten some long awaited features such as proper HD video recording with all the bells and whistles you&#8217;d expect. For more details listen to James Banfield below.</p>

<iframe src="http://player.vimeo.com/video/34720376?title=0&amp;byline=0&amp;portrait=0&amp;color=59a5d1" width="654" height="368" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>


<p><a href="http://vimeo.com/34720376">Dslrnewsshooter video: Nikon D4 - video feature run through</a> from <a href="http://vimeo.com/danchung">Dan Chung</a> on <a href="http://vimeo.com">Vimeo</a>.</p>


<p>The most innovative feature in my perspective however is the Ethernet connection and what comes with it, a camera management console completely built in HTML and JS so one&#8217;s finally able to leave all the proprietary, heavily bloated, vendor specific crap software behind and focus on realizing ideas.</p>

<iframe id="viddler-be28aab5" src="http://philippkueng.ch//www.viddler.com/embed/be28aab5/?f=1&offset=0&autoplay=0&disablebranding=0" width="654" height="419" frameborder="0"></iframe>


<p>Checkout the video <a href="http://vimeo.com/34666308">WHY</a> by <a href="http://www.coreyrich.com/">Corey Rich</a> below if you want to see what&#8217;s possible with a D4 presumed you know what you&#8217;re doing.</p>

<iframe src="http://player.vimeo.com/video/34666308" width="654" height="368" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>


<p><a href="http://vimeo.com/34666308">WHY - Nikon D4 Release Video</a> from <a href="http://vimeo.com/coreyrich">Corey Rich</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My Worst Mistakes in Programming]]></title>
    
      <link href="http://pilif.github.com/2012/01/my-worst-mistakes/">My Worst Mistakes in Programming →</link>
    
    <updated>2012-01-13T17:03:00+01:00</updated>
    <id>http://philippkueng.ch/my-worst-mistakes-in-programming</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/my-worst-mistakes-in-programming.html">∞</a><br/><p>A great read if you&#8217;re working on the next big thing yourself, because you&#8217;ll might need a team to work on it later.</p>

<blockquote><p>Once you are no longer alone working on your project, the code you have written sets an example. - Philip Hofstetter</p></blockquote>

<p>Also, I think it&#8217;s totally fine to hack together an initial version, hackathon style, you can improve later on however the structure, needs to be reasonably stable.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Stop it and get real]]></title>
    
      <link href="http://the99percent.com/videos/7110/Tony-Schwartz-The-Myths-of-the-Overworked-Creative">Stop it and get real →</link>
    
    <updated>2012-01-12T23:47:00+01:00</updated>
    <id>http://philippkueng.ch/stop-it-and-get-real</id>
    <content type="html"><![CDATA[<a href="http://philippkueng.ch/stop-it-and-get-real.html">∞</a><br/><iframe src="http://player.vimeo.com/video/33018637?title=0&amp;byline=0&amp;portrait=0&amp;color=e91c6b" width="654" height="491" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>


<p>Right now I&#8217;ve already broken most of my New Years resolutions, I admit it. Why? - Well, I thought of me as a machine, meaning that I could easily deliver one hundred percent without an issue. In fact, that&#8217;s extremely unlikely to happen and I obviously knew that but I still made that promise with myself, you need to aim high right?. However, the impact it has by breaking resolutions or not reaching your goals makes you feel terrible or worse even makes you feel sorry for yourself. That&#8217;s why I recommend you watch this excellent talk by Tony Schwartz and start correcting your self expectations by stop wanting to prove yourself to others or yourself. It&#8217;s good to have goals but a weekly to do list has nothing to do with dreams just doable tasks.</p>

<p>via <a href="http://www.swiss-miss.com/2011/12/tony-schwartz-the-myths-of-the-overworked-creative.html">swiss-miss</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A Link-Blog with Octopress]]></title>
    
      <link href="http://philippkueng.ch/a-link-blog-with-octopress.html"/>
    
    <updated>2012-01-11T21:20:00+01:00</updated>
    <id>http://philippkueng.ch/a-link-blog-with-octopress</id>
    <content type="html"><![CDATA[<p>During the last week well known bloggers have started turning off comments in a move to not having to care about sorting out SPAM and having more time for the actual writing. <a href="http://mattgemmell.com/">Matt Gemmell</a> has written an <a href="http://mattgemmell.com/2012/01/07/comments-commentary/">excellent summary</a> about this, for those of you interested.</p>

<p>While I&#8217;m not sure yet if I&#8217;ll ever do the same, I started wondering on how to realize something like a Link-Blog with Octopress. Turns out it&#8217;s pretty easy.</p>

<p>First modify the <code>article.html</code> inside source/_includes and exchange the lower <code>&lt;h1&gt;</code> part which is responsible for the page view title with an if-else clause.</p>

<figure class='code'><figcaption><span>article.html </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;h1</span> <span class="na">class=</span><span class="s">&quot;entry-title&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>  {% if page.ref_url %}
</span><span class='line'>    <span class="nt">&lt;a</span> <span class="na">class=</span><span class="s">&quot;reference&quot;</span> <span class="na">href=</span><span class="s">&quot;{{ page.ref_url }}&quot;</span><span class="nt">&gt;</span>{{ page.title }}<span class="nt">&lt;/a&gt;</span>
</span><span class='line'>  {% else %}
</span><span class='line'>    {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}
</span><span class='line'>  {% endif %}
</span><span class='line'><span class="nt">&lt;/h1&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Then continue with adding an if-else clause to the <code>atom.xml</code> file too. Extend the <code>&lt;link&gt;</code> element inside the parent <code>&lt;entry&gt;</code> with the code below. Done.</p>

<figure class='code'><figcaption><span>atom.xml </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'>{% if post.ref_url %}
</span><span class='line'>  <span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;{{ post.ref_url }}&quot;</span><span class="nt">/&gt;</span>
</span><span class='line'>{% else %}
</span><span class='line'>  <span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;{{ site.url }}{{ post.url }}&quot;</span><span class="nt">/&gt;</span>
</span><span class='line'>{% endif %}
</span></code></pre></td></tr></table></div></figure>


<p>If you want to create a Link-Blog post now, add <code>ref_url</code> to the markdown file header and Octopress takes care of the rest.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>---
</span><span class='line'>layout: post
</span><span class='line'>title: "This Awesome Article"
</span><span class='line'>date: 2012-01-13 21:20
</span><span class='line'>comments: true
</span><span class='line'>ref_url: http://somesite.com/thisawesomearticle.html
</span><span class='line'>---
</span><span class='line'>This one is really great, check it out.</span></code></pre></td></tr></table></div></figure>


<h2>Alternatives</h2>

<p>If <a href="https://github.com/mojombo/jekyll/">Jekyll</a> is too nerdy for you, then please checkout <a href="http://tumblr.com">tumblr</a> whose philosophy has been based on link-blogging for ages.</p>

<p>On the otherside if <a href="http://octopress.org/">Octopress</a> and therefore Ruby is still to cool for you to use then give the newly released <a href="https://github.com/marcoarment/secondcrack">Second Crack</a> by <a href="http://www.marco.org">Marco Arment</a> a try. It&#8217;s also baking your markdown files to flat html ones, but it&#8217;s written in PHP.</p>

<p>(Sidenote: PHP and I were never really friends)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Migrate from BlogEngine.NET to Jekyll]]></title>
    
      <link href="http://philippkueng.ch/migrate-from-blogengine-dot-net-to-jekyll.html"/>
    
    <updated>2012-01-10T17:35:00+01:00</updated>
    <id>http://philippkueng.ch/migrate-from-blogengine-dot-net-to-jekyll</id>
    <content type="html"><![CDATA[<p>This is the second part of steps you have to take in order to migrate smoothly over to <a href="https://github.com/mojombo/jekyll/">Jekyll</a>, <a href="http://octopress.org">Octopress</a> in my case, coming from <a href="http://dotnetblogengine.net/">BlogEngine</a> land. I&#8217;d recommend you first have a look at <a href="http://philippkueng.ch/migrate-the-blogenginenet-commenting-system-over-to-disqus.html">moving your comments to disqus</a>, before following this post.</p>

<h2>Getting the &#8220;old data&#8221;</h2>

<p>Log into your BlogEngine site and head over to <strong>Settings</strong> where you click on the <strong>Export</strong> button for BlogML. Now FTP or SSH into your server and get a complete dump of the App_Data/files folder onto your local machine.</p>

<h2>Setup Octopress</h2>

<p>Octopress? - Isn&#8217;t this tutorial for Jekyll? - you might ask. Well Octopress is built on top of Jekyll and brings some plugins and clever defaults to make your life easier. Start off by following the official <a href="http://octopress.org/docs/setup/">Octopress Setup tutorial</a>. If your working on an OS X machine you might want to consider installing <a href="http://pow.cx">POW</a> since it&#8217;s making it much easier to work with Jekyll locally. Once POW is installed open your Terminal and go to ~/.pow and create a symlink to the octopress-repo root.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>ln -s /Users/yourUsername/Documents/octopress myapp
</span></code></pre></td></tr></table></div></figure>


<p>Now open <a href="http://myapp.dev">http://myapp.dev</a> in your browser to check if it&#8217;s working so far.</p>

<h2>Import the &#8220;old data&#8221;</h2>

<p>Create a folder <code>_import</code> inside the octopress/source directory and put the <a href="https://github.com/philippkueng/philippkueng.github.com/blob/source/source/_import/blogml.rb">blogml.rb</a> conversion file in there.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span><span class="nb">cd </span>octopress/source
</span><span class='line'><span class="nv">$ </span>mkdir _import
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>_import
</span><span class='line'><span class="nv">$ </span>wget https://github.com/philippkueng/philippkueng.github.com/blob/source/source/_import/blogml.rb --no-check-certificate
</span></code></pre></td></tr></table></div></figure>


<p>This import script was actually created by @derekmorrison to assist him by <a href="http://doingthedishes.com/2011/04/14/moving-to-jekyll.html">Moving to Jekyll</a>. Since URLs have to be rewritten because of the .aspx extensions which are part of BlogEngine I slightly modified the script to additionally create an .htaccess file and to play nice with non-ASCII encoded post-titles.</p>

<p>Next, move the BlogML.xml file inside the source directory and also create two seperate folders called <code>files</code> and <code>images</code> inside source. Then copy the contents of the previously dumped App_Data/files folder to their respective folders (images or files) by keeping the path structure intact. Means, that App_Data/files/2010/2/file.zip will go to octopress/source/files/2010/2/file.zip.</p>

<p>Now to the fun part, open your Terminal and navigate inside your octopress/source directory. Then execute:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>ruby -r <span class="s1">&#39;./_import/blogml.rb&#39;</span> -e <span class="s1">&#39;Jekyll::BlogML.process(&quot;BlogML.xml&quot;)&#39;</span>
</span></code></pre></td></tr></table></div></figure>


<p>This should have imported all your existing posts so that you can now generate your Jekyll blog from it by exiting the source directory and issuing the rake command.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span><span class="nb">cd</span> ..
</span><span class='line'><span class="nv">$ </span>bundle <span class="nb">exec </span>rake generate
</span></code></pre></td></tr></table></div></figure>


<h2>Deploying</h2>

<p>There&#8217;s already documentation available on how to <a href="http://octopress.org/docs/deploying/">deploy Octopress to various hosting platforms</a>. Since you&#8217;re migrating from BlogEngine I highly recommend running your own VM or getting a shared hosting account with .htaccess support in order to not let your visitors down with feeding them broken links. Actually since Heroku is offering their polyglot Cedar-stack you should be able to run .htaccess on there too. YMMV</p>

<p>If your hosting provider is only offering FTP, then deploy manually by uploading the contents of the <code>public</code> folder and adding the <code>.htaccess</code> file from inside the source folder.</p>

<h2>Fixes</h2>

<p>We&#8217;re not quite done yet. Log into your <a href="http://www.google.com/webmasters/">Google</a> and <a href="http://www.bing.com/toolbox/webmaster/">Bing Webmaster</a> account and replace the sitemap.axd entry with sitemap.xml. The same goes for your <a href="http://feedburner.com/">Feedburner</a> account, log in and replace feeds.axd with atom.xml.</p>

<p>Finally fix the <a href="http://disqus.com/">disqus</a> comments. Log into their dashboard and select the account you want to migrate. Then click on the <strong>Tools</strong> tab and afterwards the <strong>Migrate Threads</strong> navigation entry. Hit the <strong>Start Crawling</strong> button for the Redirect Crawler Migration and your done.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Taking care of relationships is not outsourceable]]></title>
    
      <link href="http://philippkueng.ch/taking-care-of-relationships-is-not-outsourceable.html"/>
    
    <updated>2011-11-11T00:00:00+01:00</updated>
    <id>http://philippkueng.ch/taking-care-of-relationships-is-not-outsourceable</id>
    <content type="html"><![CDATA[<p>A few days ago a fellow blogger nearby, <a href="http://webwirksam.ch/geburtsanzeigen-tool-fur-weniger-stress--1341/">Sam Steiner, was giving away a startup idea</a>. The goal would be to develop a web platform where upcoming parents can write and design birth announcement letters which will then be sent out through the company as soon as the parents complete the information for example with a picture upload via their mobile. The sending for the inner circle will then be made by sending physical cards whereas the rest will receive a nicely formatted email or facebook wall entry.</p>

<p>After reading his idea I immediately responded via a comment that he should make it happen, after all aren&#8217;t those the successful startups that fullfill an itch that a founder has himself?</p>

<p>Throughout the rest of the day my brain was occupied by coming up with ways to turn this idea into reality, thinking about partners in the printing business who would send out the printed goods and maybe also pre-fill them. What might their pricing requirements look like? - after all their struggling themselves in the world of the internet. 
After the physical side was mentally figured out the question was how to build the website? - which technology stack to use? - hacking it together over a weekend? - with whom?</p>

<p>Later that day I told my father, a non computer savvy person, about that great idea I saw on the internet today. He was looking at me as if i was out of my mind. He totally disagreed and instead suggested that women, in the week prior to giving birth when being bored and at home, could potentially pre-write the letters so that the husband could then just print out the pictures stick them into the cards and then send them to friends and family.</p>

<p>After having the discussion with my father i think he&#8217;s totally right in terms of not outsourcing the bonding part with people you care about. It&#8217;s not about time you&#8217;d gain by using such a service it&#8217;s about openly investing yourself into the relationships to others by sending a handwritten card rather than wrapping your personal writing in an emotionenless off the shelf card with corporate branding on the back.</p>

<p>On a sidenote to all developers, I know it&#8217;s all too easy to get stuck in the optimization trap without knowing it. We tackle the market analysis with the identical mindset as writing revision one of the service. The approach might work in an emotionless business area but is certainly not suited at all for private relationships. As a hint, talking to people with different backgrounds helps enormously.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MAKE.OpenData.ch 2011]]></title>
    
      <link href="http://philippkueng.ch/makeopendatach-2011.html"/>
    
    <updated>2011-10-23T00:00:00+02:00</updated>
    <id>http://philippkueng.ch/makeopendatach-2011</id>
    <content type="html"><![CDATA[<p><a href="http://www.flickr.com/photos/agentcmos/6203132361/" title="MakeOpenData Camp 2011 @ EPFL by Philipp Küng, on Flickr"><img src="http://farm7.static.flickr.com/6153/6203132361_a01dca40de_b.jpg" alt="MakeOpenData Camp 2011 @ EPFL"></a></p>

<p>In an effort to make the world a better place, hackers all around Switzerland joined this years make.opendata.ch hackathon in Zürich and Lausanne. The goal was to use publicly available data, so-called <strong>OpenData</strong> and visualize it in a meaningful way so everyone is able to make sense of it.</p>

<p>Despite of having a french language deficit - it was a dark chapter in grammar school - i travelled all the way to EPF Lausanne which was absolutely worth it.</p>

<p>After the kickoff <a href="http://twitter.com/#!/florin_iorganda">Florin</a>, <a href="http://twitter.com/#!/FredericJacobs">Frederic</a> and I immediately started working on a project to improve the routes suggestion of traditional mapping applications such as Google Maps and OpenStreetMap by providing a way to add obstacles to a map and then calculate a new obstacle-free route to help people on tight schedules arrive on time. While we knew that large companies are working on that we were still looking for a hack to finish something usable until the deadline the day after.</p>

<p><strong>The theoretical solution</strong> - The frontend would be a static website where the user can enter departure and destination location. This then would make an API call to the backend where the hacks are doing its&#8217; part.
The backend would consist of a webkit process running, controlled by PhantomJS. If a request gets issued PhantomJS loads Google Maps Directions with the start and end location, let the server-side webkit process render the page and then add all the obstacles via Lat/Long with a predefined icon which is easily distinguishable from the map itself. Next, PhantomJS creates a PNG-screenshot of the obstacles and route containing website. It starts the next process which parses the PNG pixel-by-pixel and looks if there is a blue line and an obstacle crossing. If so, make a circle of 300m radius around the obstacle and randomly add a Lat/Long coordinate, being part of the circle border, as a waypoint to the routes call of Google Maps. Then repeat the process above to check if the new route interferes with obstacles. If finally and obstacle-free route is found, return the details to the frontend.</p>

<p>During dinner, about three hours in, we came to the conclusion that it is just too much of a hack to spend valuable hacking time on, so we had to find something more suitable for the next day. Which we did in SwissMap.</p>

<p><a href="http://www.flickr.com/photos/agentcmos/6203706302/" title="MakeOpenData Camp 2011 @ EPFL by Philipp Küng, on Flickr"><img src="http://farm7.static.flickr.com/6153/6203706302_dbd6f92b8e_b.jpg" alt="MakeOpenData Camp 2011 @ EPFL"></a></p>

<p>Full of vim and vigor we then started on Saturday morning, Florin by collecting the interesting data from all over the <a href="http://www.bfs.admin.ch/">bfs website</a>, Frederic by merging and crunching the data into a format which is then processable via Javascript and I took care of the view and the comparing alogrithm. We aimed at building a web application where citizens and data-journalists can compare two different, unrelated datasets and visualize the outcome on a swiss heatmap. Luckily our very intense and focused hacking on day two was enough so that we were able to meet the presentation deadline in the afternoon. Epic Win.</p>

<p><img src="http://philippkueng.ch/images/2011/10/swissmap_screenshot.jpg" alt="SwissMap Screenshot" /></p>

<p>[ <a href="http://swissmap.bitfondue.com/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:swissmap">wiki</a>, <a href="http://github.com/philippkueng/swissmap">source</a> ]</p>

<p>I hereby thank the sponsors, hackers and especially the team behind the <a href="http://makeopendata.ch/">MAKE.OpenData project</a> Andreas, Hannes, Oleg, Antoine, François, Frederic and Jeremy very much for making the event possible and inspiring us.</p>

<p><strong>Amazing MAKE.OpenData projects others have built</strong></p>

<ul>
<li>green-street [ <a href="http://opendata.utou.ch/lausanne/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:green_street">wiki</a>, <a href="http://github.com/loleg/green-street">source</a> ]</li>
<li>gesagt-im-parlament.ch [ <a href="http://gesagt-im-parlament.ch/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:parlament">wiki</a>, <a href="http://github.com/gwrtheyrn/gesagt-im-parlament.ch">source</a> ]</li>
<li>politnetz visualization [ <a href="http://www.riaforweb.com/BTCPOLIT/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:politnetz">wiki</a> ]</li>
<li>Swiss Army Contaminated Sites [ <a href="http://lab.interactivethings.com/swiss-army-contaminated-sites/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:swiss_army_contaminated_sites">wiki</a> ]</li>
<li>Where Did My Taxes Go [ <a href="http://wheredidmytaxesgo.nelm.io/">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:wheredidmytaxesgo">wiki</a>, <a href="http://github.com/Seldaek/wheredidmytaxesgo">source</a> ]</li>
<li>openletten [ <a href="http://www.tamberg.org/makeopendata/2011/jquery.html">live</a>, <a href="http://makeopendata.ch/doku.php?id=project:openletten">wiki</a>, <a href="http://bitbucket.org/tamberg/makeopendata/overview">source</a> ]</li>
</ul>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Photoblog - SFO 2 YVR]]></title>
    
      <link href="http://philippkueng.ch/photoblog-sfo-2-yvr.html"/>
    
    <updated>2011-09-19T00:00:00+02:00</updated>
    <id>http://philippkueng.ch/photoblog-sfo-2-yvr</id>
    <content type="html"><![CDATA[<a href="http://sfo2yvr.github.com"><img src="http://philippkueng.ch/images/2011/9/sfo2yvr-images.jpg" alt="" /></a>

<p>Travelling is supposed to be relaxing right? However there are many things you need to take care of for example writing postcards, sending SMSes to loved ones and keep notes of all the sites, actually this time RL ones, visited.</p>

<p>While I did exactely that for my last vacation in Canada, we were handling it differently this time.</p>

<p>During the <a href="http://sfo2yvr.github.com/2011/08/28/Flug-nach-San-Francisco.html">flight from Frankfurt to San Francisco</a> we came up with the photoblog called <a href="http://sfo2yvr.github.com">sfo2yvr</a>, which includes the airport code of SF and Vancouver in its&#8217; name, creative we know. It is based on Jekyll rather than Tumblr, which we actually wanted to use in the first place. However, we needed a platform to publish articles offline and did not want to rely on third party apps like MarsEdit, with <a href="http://git-scm.com">git</a> and <a href="http://pages.github.com">github pages</a> that is cake.</p>

<p>The idea was to update it once a day, however because US National Parks mostly do not yet offer Wifi, nor electricity or running water (rivers do not count), we sometimes only committed to the local repository and pushed to github when we were in a peopled area later.</p>

<p>This technique for blogging worked pretty well for us so far, however I am really curious what others, maybe you, have done in terms of solving the offline problem or finding the suitable picture for the day.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Agile Livin' - shipped]]></title>
    
      <link href="http://philippkueng.ch/agile-livin-shipped.html"/>
    
    <updated>2011-08-18T00:00:00+02:00</updated>
    <id>http://philippkueng.ch/agile-livin-shipped</id>
    <content type="html"><![CDATA[<p><img src="http://philippkueng.ch/images/2011/8/agilelivin_theme_picture.jpg" alt="agilelivin theme picture" /></p>

<p>Changing habits is difficult. On December 31 you think that in 201x you will stop smoking, start eating healthier food or in my case plain and simple gain weight. (yes, I want to be a sumo wrestler) The only problem is that you are currently within your comfort zone and you are not taking immediate action. You are procastinating. I guess a lot of people, me included, never get out of it and already fail before having started. A tip, which might sound weird, but has worked for me so far, stop thinking about it and put yourself in a position where <a href="http://twitter.com/#!/Weegee/status/66756938066706432">&ldquo;The only way out is through.&rdquo; &mdash; Winston Churchill</a>.</p>

<p>Then secondly as with every habit you want to adapt, it needs to be included in your daily routine. That means if you can keep a daily routine up for about three weeks you are most certainly going to succeed with making it a habit.</p>

<p>About four weeks ago my friend <a href="http://zurcherart.com">Steve</a>, with whom I co-founded <a href="http://bitfondue.com">bitfondue</a>, sent out a <a href="http://twitter.com/#!/zurcherart/status/94798265387720704">tweet</a> which started a discussion between the two of us on how to simplify life by leveraging agile practices with the outcome that we agreed on producing a podcast about that. Still having the two points above in the back of our heads we skipped being procrastinating wusses and started being agile right away. We successfully recorded the first iteration, set up a <a href="http://github.com/agilelivin/agilelivin.github.com">blog</a> using <a href="http://github.com/mojombo/jekyll/">Jekyll</a> (we are nerds what do you expect? Wordpress.) and registered the <a href="http://agileliv.in">domain</a> within the first week after initiating the adventure.</p>

<p>Enough history, now to the meat, if you want to have 30 minutes of LOL I highly recommend listening to <a href="http://agileliv.in/2011/07/29/cluttering-the-internet.html">Iteration 1</a> otherwise give <a href="http://agileliv.in/2011/08/06/the-agile-manifesto.html">Iteration 2</a>  or <a href="http://agileliv.in/2011/08/14/the-priority-of-priorities.html">3</a> (the one below) a try. For more information, future iterations or comments head on over to <a href="http://agileliv.in">agilelivin</a>.</p>

<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F21189386&amp;show_comments=false&amp;auto_play=false&amp;color=0A71B2"></param> <param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F21189386&amp;show_comments=false&amp;auto_play=false&amp;color=0A71B2" type="application/x-shockwave-flash" width="100%"></embed> </object>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Procrastination is so yesterday]]></title>
    
      <link href="http://philippkueng.ch/procrastination-is-so-yesterday.html"/>
    
    <updated>2011-07-25T00:00:00+02:00</updated>
    <id>http://philippkueng.ch/procrastination-is-so-yesterday</id>
    <content type="html"><![CDATA[<p>After writing the last post about the <a href="http://philippkueng.ch/post/Blame-the-Lizard-Brain-But-do-it!.aspx">Lizard Brain</a> I gave myself another episode of <a href="http://5by5.tv/b2w">Back to Work</a> it was <a href="http://5by5.tv/b2w/4">episode number 4</a>, and in there, at the end, Marlin Mann talks about the way he is handling Task Lists which mysteriously worked extremely well for me too.</p>

<p>It works as folling, prior to adding a task to your list go mentally through it and notice every single subtask you need to achieve in order to check that item of your list. That way I accomplished 4 tasks which consumed about 2h of my time without really noticing it and that said those tasks were sitting on my list for 3 weeks already.</p>

<p>Next there is the second and last rule, do not dare to put tasks on your list you know upfront you are not going to do anyway. For me such a thing is sorting my photo library, I used to have an entry for sorting pictures taken while being in Canada (2008) on the list until very recently. By the way decluttering it regularly helps a lot too, believe me.</p>
]]></content>
  </entry>
  
</feed>

