<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>{weblog_name}</title>
    <link>{weblog_url}</link>
    <description>GoodBytes blog: focused on happiness, motivation and web design.</description>
    <dc:language>{weblog_language}</dc:language>
    <dc:creator>joris@goodbytes.be</dc:creator>
    <dc:rights>Copyright 2013</dc:rights>
    <dc:date>2013-05-23T07:17:33+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Find your dream job or internship with the Creativeskills App for iOS</title>
      <link>http://www.goodbytes.be/blog/article/find-your-dream-job-or-internship-with-the-creativeskills-app-for-ios</link>
      <guid>http://www.goodbytes.be/blog/article/find-your-dream-job-or-internship-with-the-creativeskills-app-for-ios</guid>
      <description><![CDATA[<p>Finding a job isn&#8217;t the easiest thing in the world, especially if you are looking for your dream job in the creative space. But guess what: <em><a href="https://itunes.apple.com/us/app/creativeskills-jobs-vacatures/id650040755?mt=8">there&#8217;s an app for that</a></em>!</p>

<p><a href="http://www.creativeskills.be" title="Jobs &amp; Vacatures">Creativeskills.be</a> is one of the leading job vacancy sites in Belgium when it comes to job openings in the creative industry. It&#8217;s now easier than ever to find new job opportunities or internships by using the iPhone/iPad application that we developed in collaboration with our friends over at Creativeskills.</p>

<p>Here&#8217;s a short video overview of what you&#8217;ll find in the app.</p>

<div class="videoWrapper">
<iframe width="560" height="315" src="http://www.youtube.com/embed/tenymqq8dEQ?rel=0&amp;vq=hd720" frameborder="0" allowfullscreen></iframe>
</div>

<h2>Fulltime, freelance or intership, take your pick</h2>
<p>The app splits jobs into three sections. Simply select the type of job your are looking for and browse through job opportunities while you&#8217;re waiting for a delicious cappucino or when you&#8217;re driving to work. By bike of course. </p>

<p>Never use your phone when driving, am I clear enough on that? Ok, maybe check for job opportunities while you&#8217;re standing in front of a red light. No, don&#8217;t do that either. Let&#8217;s move on here.</p>

<p><img src="http://www.goodbytes.be/uploads/creativeskills_app1.jpg" alt="Creative Skills App for iPhone and iPad" height="752" width="752"  /></p>

<h2>Special thanks</h2>
<p>Special thanks go out to <a href="http://dribbble.com/OtherPlanet">Luboss Volkov</a> who was kind enough to let me use his great icon set, which you can find at <a href="http://www.othericons.com">othericons.com</a>. Luboss is a great designer. Check out <a href="http://dribbble.com/OtherPlanet">his Dribbble portfolio</a> for some of his fantastic work.</p>

<h2>Is it free? Please let it be free!</h2>
<p>The app will set you back the cost of a beer or coffee. Ok, so let&#8217;s figure out a way to get the app for free together. Tonight, when you&#8217;re out drinking with your buddies and you&#8217;re ready to order a last one, sit back and think about all the job opportunities that will pass you by if you don&#8217;t install the app right away. </p>

<p>Save that last beer, save a headache in the morning and grab the app instead so that you can go home with a smile on your face while you send in your application straight from your phone. No wait, don&#8217;t do that. Wait until the next day, that&#8217;s probably a better idea.</p>

<p><img src="http://www.goodbytes.be/uploads/creativeskills_app2.jpg" alt="Creativeskills app for iPhone and iPad" height="752" width="752"  /></p>

<p>If you&#8217;re not really ready to invest real hard cash into the app (it&#8217;s 1,79&euro;) check out <a href="http://creativeskills.be/jobs/">http://creativeskills.be/jobs/</a> for job opportunities and I sincerely hope you&#8217;ll find your dream job there. In the end, that&#8217;s all that matters to me.</p>

<p>Good luck friends!</p>]]></description>

      <dc:subject>Mobile,</dc:subject>
      <dc:date>2013-05-23T07:17:33+00:00</dc:date>
    </item>

    <item>
      <title>Goodbye SolidShops.com, it&#8217;s been a fantastic ride</title>
      <link>http://www.goodbytes.be/blog/article/goodbye-solidshops.com-its-been-a-fantastic-ride</link>
      <guid>http://www.goodbytes.be/blog/article/goodbye-solidshops.com-its-been-a-fantastic-ride</guid>
      <description><![CDATA[<p>It started a few years ago, when me and my friend Dries had an idea for a hosted e-commerce solution. At the time I was often looking for a solution to build out online stores for my clients, without having to go through the horror of customising Magento and the like.</p>

<p>At the time, the only thing that came close to what we had in mind was Shopify, but even their software was overly complex for most of my clients and it didn&#8217;t feel like the way we wanted to build stores. </p>

<p>We decided to roll our own solution with only the features that were really needed and nothing else. We created <a href="http://www.solidshops.com">SolidShops</a>, a hosted e-commerce platform for people like us, wanting 100% design freedom and a simple UI for our clients to manage their store.</p>

<h2>The Good</h2>
<p>Dries focused on building a solid foundation and API as a backend coder, while I took care of anything related to the front-end and communication. Running a startup gives you the chance to learn and talk about so many interesting things from responsive design over conversion optimisation to deployment strategies for your servers. That experience has been priceless.</p>

<p>Thanks to running and building a large scale web application from scratch, I&#8217;ve learned an endless amount about setting up servers, deployment strategies, version control, sales meetings, pitching to juries and clients, doing support for clients, working in a remote team, marketing, money, ... the list is endless. </p>

<p><img src="http://www.goodbytes.be/uploads/coding.jpg" alt="Coding on the weekends" height="501" width="752"  /></p>

<p>It&#8217;s the kind of experience you can only get from starting your own thing and while it&#8217;s tough, it&#8217;s one of the best things that can happen to you as a web developer. </p>

<h2>The Bad</h2>
<p>Not only were we having tons of fun building out the app, we also had a lot on our minds like paperwork, doing sales, managing support and many other things related to running and starting a business. This isn&#8217;t bad per se, but I learned that the one thing I liked doing most was building stuff, something most web developers will definitely recognise. The paperwork and management of a business need to be taken care of as well and in a startup, it will be you that needs to manage all that, especially when you&#8217;re just starting out.</p>

<p>SolidShops wasn&#8217;t the only thing I was doing at the time. </p>

<p>GoodBytes is my own little business I&#8217;ve got going here and I love it, always have and always will. Even though it&#8217;s a small one person business, there&#8217;s always client meetings,invoicing, development, workshops and other cool stuff that needs to be done.</p>

<p>When I&#8217;m not working for GoodBytes, I&#8217;m a web design and development teacher in college educating my students in a professional bachelor program called <a href="http://www.goodbytes.be/blog/article/de-beste-webdesign-opleiding">Interactive Multimedia Design</a>. The combination of building web and mobile applications and teaching everything I&#8217;ve learned to my students, is definitely what I enjoy doing most in my professional life. </p>

<p>For most people - including me - the combination of those three jobs is a lot to handle in only 24 hours a day.</p>

<h2>The Ugly</h2>
<p>Even though the rewards are high, running a business is also something that has an impact on who you are as a person and how you behave. Some people can get carried away and have their startup become what they call in this article a &#8220;<a href="http://www.inc.com/magazine/201305/meg-cadoux-hirshberg/the-you-in-entrepreneur.html">marriage destroyer</a>&#8221;. </p>

<p>I&#8217;m not married, so that counts me out, but my girlfriend definitely saw me stressed out more than once because of things happening with the business. That includes weekends because you know, a server never sleeps.</p>

<p>I&#8217;ve noticed that things get ugly when you try to do too many things in a day. There will be a time when you feel that you need to make a choice in life and in business. For me, it became clear that I needed to focus more on what I liked most. That meant choosing between running a startup, running my own freelance business and teaching. </p>

<p>Teaching upcoming web developers has been my passion from the first day I started giving lectures in college. That&#8217;s my number one priority to get right. Web development changes so fast and students need to be taught by people who actively work in the sector. For me, combining GoodBytes, building a startup and teaching about everything I learned the hard way myself is the perfect job. It&#8217;s my dream job and I hope I can continue doing what I do for a long time to come.</p>

<p>Running SolidShops <em>as a business</em> wasn&#8217;t my passion after all. A startup requires closing a lot of deals and doing sales. I did it for the business. But it was not my passion.</p>

<p>It&#8217;s building things and perfecting them that makes me want to get up early every day so that I can teach my students how to become better web developers. Life&#8217;s too short to not follow your passion. In fact, life is so short that it doesn&#8217;t make sense to do anything but what you like doing most, as much as possible. [No, playing Wii all day doesn&#8217;t count, unless you can do that for a living, that&#8217;s a whole other story].</p>

<p>For that reason, I say goodbye to SolidShops and I have sold my part in the business.</p>

<h2>I owe you some tomatoes</h2>
<p>The moment I decided to sell my part in SolidShops and leave the business, I felt relieved. It also felt a bit like leaving your baby behind [if I had one, which I don&#8217;t, but you get the picture]. After all, I had been working my ass off for a couple of years in a row to build up the business. </p>

<p>Right now, I am much more relaxed and I&#8217;ve started a number of side projects that I&#8217;m really passionate about. One of those projects is building my own vegetable garden and grow house, together with a friend. Being away from my computer more often makes me even more excited and inspired to get back to work afterwards. </p>

<p><a href="http://cognition.happycog.com/article/take-a-break/">We all need breaks</a> and our vegetable garden [we call it &#8220;<a href="http://www.youtube.com/watch?v=j3trvagcYiQ">Petit Problème</a>] is a place where I see friends and neighbouring gardeners from whom we receive growing advice. It&#8217;s like Twitter but in real life! It may not sound glamorous, but it&#8217;s definitely very rewarding. In a way, it&#8217;s like running a startup, especially the &#8220;building&#8221; part of it, just what I like most.</p>

<p>Some of you have already asked me if I will ever start another web app or SaaS project. Chances are I will. I don&#8217;t have a single regret of how things turned out and I&#8217;d do it all over again. Now is the time to unwind and focus on other things. That focus might shift from time to time and when there&#8217;s something I can&#8217;t resist building, I&#8217;ll open up my code editor and hack away the nights.</p>

<p>Dries is now running things at SolidShops and he&#8217;s set up a signup code for anyone willing to try out the application. If you&#8217;d like to give SolidShops a try for your next online store, feel free to use signup code &#8220;petitprobleme&#8221; and get an additional month for free.</p>

<p><img src="http://www.goodbytes.be/uploads/petitprobleme.jpg" alt="Petit Problème" height="280" width="752"  /></p>

<p>I&#8217;d like to thank all of you who have supported me while working on SolidShops. Without your support, there would not have been a web app and there probably wouldn&#8217;t have been a Petit Problème. </p>

<p>Thanks guys! See you at the vegetable garden and keep an eye out for my next iPhone app that will come out somewhere later this month.</p>

<p>I owe you some tomatoes.</p>

<p>Joris</p>]]></description>

      <dc:subject>Goodbytes,</dc:subject>
      <dc:date>2013-05-07T07:53:06+00:00</dc:date>
    </item>

    <item>
      <title>Een cursus of opleiding HTML, CSS, PHP, GIT vergemakkelijken via kwalitatieve eBooks</title>
      <link>http://www.goodbytes.be/blog/article/een-cursus-of-opleiding-html-css-php-git-via-kwalitatieve-ebooks</link>
      <guid>http://www.goodbytes.be/blog/article/een-cursus-of-opleiding-html-css-php-git-via-kwalitatieve-ebooks</guid>
      <description><![CDATA[<p>Voor wie graag wil starten met web design en web development, blijkt het vaak moeilijk om relevante en goed gestructureerde bronnen te vinden die helpen om snel gestart te raken. Er zijn ontelbare bronnen te vinden over hoe je met HTML, CSS, PHP of eender welke andere technologie aan de slag kan gaan. Toch merk ik dat beginnende studenten vaak zelf vragen naar een duidelijke structuur en opbouw.</p>

<p>Wie reeds jaren ervaring heeft in het bouwen van websites en applicaties kan veel makkelijker inschatten of een bepaalde online bron betrouwbaar is of niet. Ook hebben ervaren ontwikkelaars geen of minder nood aan structuur dan starters (<a href="http://en.wikipedia.org/wiki/RTFM">RTFM</a>). Voor wie vanaf nul begint is het vaak veel minder eenvoudig om door de bomen het bos te zien.</p>

<p>Gelukkig zijn er de laatste jaren enkele prima initiatieven uit de grond gestampt zoals <a href="http://www.codecademy.com/">Codecademy</a> en <a href="http://teamtreehouse.com">Teamtreehouse</a> die ik zeker aan beginnende ontwikkelaars zou aanraden. Deze diensten helpen om inzicht te krijgen in bepaalde technieken en technologieën. Bijkomende ondersteuning via een gestructureerd en duidelijk opbouwend eBook kan houvast bieden voor wie op eigen tempo wil bijleren. </p>

<p>Om dié houvast te bieden voor studenten en starters, probeer ik een nieuw <a title="Web Design Opleiding" href="http://www.webdesignopleiding.be">experimentje</a> uit. </p>

<h2>Opleiding / cursus PHP via een gestructureerd eBook</h2>
<p>Op <a href="http://www.webdesignopleiding.be">http://www.webdesignopleiding.be</a> wil ik eBooks plaatsen die zullen helpen om sneller en beter te starten met HTML5, CSS, Javascript, jQuery, SASS, GIT, ... enzovoort. Tijdens het schrijven van de eBooks hou ik in het achterhoofd hoe iemand zonder voorkennis kan starten en snel vorderingen kan maken.&nbsp; </p>

<p>Het eerste eBook zal gaan over het bouwen van webapplicaties met PHP. Indien er voldoende interesse blijkt te zijn, volgen andere onderwerpen. </p>

<p><img src="http://www.goodbytes.be/uploads/ebooks.JPG" alt="PHP Cursus eBook" height="562" width="752"  /></p>

<h2>Voor wie zijn de eBooks geschikt?</h2>
<p>Ben je een beginnend web designer of developer op zoek naar een goedkope kickstart? Of volg je een opleiding, maar kan je wel een duidelijke en aangename cursus gebruiken? In dat geval zijn de eBooks iets voor jou. Schrijf je in op <a href="http://www.webdesignopleiding.be">http://www.webdesignopleiding.be</a> en je krijgt een mailtje zodra het eerste eBook beschikbaar is.</p>

<p>Ik ben natuurlijk benieuwd of er voldoende interesse is naar deze topics en eBooks. Het schrijven ervan vergt vanzelfsprekend veel tijd en werk. Je interesse uiten kan door je in te schrijven op de <a href="http://www.webdesignopleiding.be">mailinglist</a> (spam-free!) of door een commentaartje achter te laten in de comments.</p>

<p>Hoe meer zielen, hoe meer eBooks!</p>]]></description>

      <dc:subject>Dutch,</dc:subject>
      <dc:date>2013-03-15T16:16:55+00:00</dc:date>
    </item>

    <item>
      <title>Connecting Centos 6 Linux to a wifi network with a WEP key</title>
      <link>http://www.goodbytes.be/blog/article/connecting-centos-6.3-linux-to-a-wifi-network-with-wep-key</link>
      <guid>http://www.goodbytes.be/blog/article/connecting-centos-6.3-linux-to-a-wifi-network-with-wep-key</guid>
      <description><![CDATA[<p>If you&#8217;re like me, you may have an old desktop computer sitting around your home office somewhere serving as a Linux machine. I use my old desktop as a <a href="http://www.centos.org/">Centos server</a> acting as an exact copy of my production machine. That way I&#8217;m able to easily try out updates to web apps I&#8217;m creating before deploying them to an online production server.</p>

<p>I don&#8217;t have a UTP-connection where I work at the moment so I had to find a way to connect the Linux server to my Wifi network. There&#8217;s a lot of information floating around the internet, but sometimes when it comes to Linux, it&#8217;s hard to find that right piece of information for a specific use case.</p>

<p>I spent about an afternoon researching and figuring out how to set up my wifi connection reliably on my Linux box. I hope this article saves you those hours.</p>

<p>A lot of credit goes to Paul, who wrote <a href="http://minimallinux.blogspot.be/2012/06/centos-6-wireless.html">this fine tutorial</a> that helped me a lot in understanding how CentOS connects to wireless networks. I used the information from his article to get started but found that it missed some key information for connecting to a wireless network with hidden SSID. On top of that, the article didn&#8217;t provide a reliable way to enter a WEP key and to remember the key on reboot.</p>

<p>This article may be well suited for people in the same situation as me, wanting to connect to a Wifi network with a hidden SSID and a WEP key. I tested the following configuration on CentOS 6.3 but it will probably work on other versions as well.</p>

<h2>Detect your wireless card</h2>
<p>Issue the following command to get started:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">ifconfig&nbsp;</span><span style="color: #007700">-</span><span style="color: #0000BB">a&nbsp;</span>
</span>
</code></div>

<p>This will show all your network cards, even the ones that are down. If you don&#8217;t see &#8220;wlan0&#8221; then there is no wireless card detected. You&#8217;ll need to look for drivers first in order to continue.</p>

<p>If your device is detected, you should see a network interface named &#8220;wlan0&#8221;. My cheap Medion system didn&#8217;t need additional drivers.</p>

<p><img src="http://www.goodbytes.be/uploads/ifconfig.png" alt="Show Wifi cards with ifconfig" height="403" width="752"  /></p>

<h2>Build a network card configuration file</h2>
<p>Once you have identified your wireless interface card, you need to create a file called <code>ifcfg-wlan0</code> in <code>/etc/sysconfig/network</code>. The part in the filename that says &#8220;wlan0&#8221; needs to correspond with the name of your wireless interface card, usually this will be &#8220;wlan0&#8221;.</p>

<p>If your router has DHCP set up and you want it to give your server an available IP address, you can use the following configuration:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">TYPE</span><span style="color: #007700">=</span><span style="color: #0000BB">Wireless<br />DEVICE</span><span style="color: #007700">=</span><span style="color: #0000BB">wlan0<br />BOOTPROTO</span><span style="color: #007700">=</span><span style="color: #0000BB">dhcp<br />BROADCAST</span><span style="color: #007700">=</span><span style="color: #0000BB">192.168.0.255<br />HWADDR</span><span style="color: #007700">=</span><span style="color: #0000BB">00</span><span style="color: #007700">:</span><span style="color: #0000BB">12</span><span style="color: #007700">:</span><span style="color: #0000BB">BF</span><span style="color: #007700">:</span><span style="color: #0000BB">64</span><span style="color: #007700">:</span><span style="color: #0000BB">A0</span><span style="color: #007700">:</span><span style="color: #0000BB">E4<br />NETMASK</span><span style="color: #007700">=</span><span style="color: #0000BB">255.255.255.0<br />ONBOOT</span><span style="color: #007700">=</span><span style="color: #0000BB">yes<br />ONHOTPLUG</span><span style="color: #007700">=</span><span style="color: #0000BB">yes<br />PEERDNS</span><span style="color: #007700">=</span><span style="color: #0000BB">no<br />USERCTL</span><span style="color: #007700">=</span><span style="color: #0000BB">yes<br />IPV6INIT</span><span style="color: #007700">=</span><span style="color: #0000BB">no<br />ESSID</span><span style="color: #007700">=</span><span style="color: #0000BB">yourssid<br />CHANNEL</span><span style="color: #007700">=</span><span style="color: #0000BB">11<br />MODE</span><span style="color: #007700">=</span><span style="color: #0000BB">Managed<br />rate</span><span style="color: #007700">=</span><span style="color: #0000BB">150Mb</span><span style="color: #007700">/</span><span style="color: #0000BB">s&nbsp;</span>
</span>
</code></div>

<p>A few notes:</p>

<ul>
<li>HWADDR=00:12:BF:64:A0:E4 # This can be found by issuing the <code>ifconfig -a</code> command</li>
<li>ONBOOT=yes # this will start your connection after booting</li>
<li>ESSID=yourssid # this is the SSID name of your wifi network</li>
<li>CHANNEL=11 # the channel can be found in your router configuration</li>
</ul>

<p>I personally like the convenience of having a fixed IP, so that I can always connect to my server by using the same IP or by setting a hostname for it. If you want to use a static IP like me, you can adjust the configuration mentioned above with the following settings:</p>

<ul>
<li>BOOTPROTO=static</li>
<li>DHCPCLASS=</li>
<li>IPADDR=192.168.1.9 # pick an IP in a valid range</li>
<li>GATEWAY=192.168.1.1 # this is your router IP address</li>
</ul>

<p>Of course, keep in mind that your router may have other IP ranges set than the defaults I used above. Additional information about all available parameters you can use in the Centos network scripts can be found <a href="http://www.centos.org/docs/2/rhl-rg-en-7.2/ch-networkscripts.html">here</a>.</p>

<h2>Setting a WEP key</h2>
<p>Setting a WEP key is the part that took me the most time to figure out. You need to create a file called <code>keys-wlan0</code> in <code>/etc/sysconfig/network</code>.</p>

<p>Inside that file, put your WEP key like this:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">KEY</span><span style="color: #007700">=</span><span style="color: #0000BB">YOURWEPKEYHERE&nbsp;</span>
</span>
</code></div>

<p>That file will be read when your WLAN0 network interface comes online. Now reboot your system or restart your network service by executing the <code>service network restart</code> command. This should give you an IP adress. Check to see if that worked by checking the output of the <code>ifconfig</code> command.</p>

<h2>Additional testing with wireless-tools</h2>
<p>To make troubleshooting easier, you can install the &#8220;wireless-tools&#8221; package. This makes it a bit easier to see whether you network interface actually works or not. </p>

<p>You might face the problem of not having an active internet connection yet. Of course, you won&#8217;t be able to install packages through yum without an internet connection.</p>

<p>One way to work around this is to connect your server directly to your router with a UTP cable. Alternatively, what I did was connect the CentOS server over UTP with my Mac. You can then enable internet connection sharing on your mac (or Windows) system to be able to install those two packages.</p>

<h2>Installing the wireless-tools</h2>
<p>If you didn&#8217;t do so already, install the necessary tools we talked about above by issuing the install command. Do this as root or use the sudo command.</p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">yum&nbsp;install&nbsp;wireless</span><span style="color: #007700">-</span><span style="color: #0000BB">tools&nbsp;</span>
</span>
</code></div>

<p>You can now use the following command to see whether your Wifi card detects any networks around you:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">iwlist&nbsp;wlan0&nbsp;scan&nbsp;</span>
</span>
</code></div>

<p>That command will display all networks your Wifi card can see.</p>

<p><img src="http://www.goodbytes.be/uploads/iwlist.png" alt="Show wireless networks CentOS" height="195" width="752"  /></p>

<p>If you can&#8217;t see your Wifi network because its SSID is hidden, you can try to add it manually by executing the following command:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">iwconfig&nbsp;wlan0&nbsp;essid&nbsp;yourssid&nbsp;key&nbsp;</span><span style="color: #DD0000">"YOURWEPKEY"&nbsp;</span>
</span>
</code></div>

<p>Replace &#8220;yourssid&#8221; and &#8220;YOURWEBKEY&#8221; with your own SSID and WEP key. Make sure you put the WEP key between quotes, so that the command knows it&#8217;s a string.</p>

<h2>Final thoughts</h2>
<p>If all goes well, your CentOS server will now connect to your wireless network. The only problem I was still facing, was that my wireless connection appeared to be dropped after some time of inactivity. </p>

<p>The only &#8220;workaround&#8221; for this problem I found so far is to issue a PING command to e.g. google.com. That seems to keep the Wifi adaptor alive but it&#8217;s not really a clean solution.</p>

<p>You can put the ping command in the file called <code>/etc/rc.local</code> which will be called after booting. Add the following command at the end of that file:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">ping&nbsp;www</span><span style="color: #007700">.</span><span style="color: #0000BB">google</span><span style="color: #007700">.</span><span style="color: #0000BB">com&nbsp;</span><span style="color: #007700">&gt;&gt;&nbsp;/</span><span style="color: #0000BB">dev</span><span style="color: #007700">/</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span>
</span>
</code></div>

<p>This will ping google and send the output to /dev/null which means it will be discarded. The ampersand just tells the command to run it in background.</p><strike>If anyone has a better idea to resolve that issue, please share it in the comments.</strike>

<p>UPDATE: after updating to Centos 6.4, I started getting messages like:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">phy0&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">rt2500usb_set_device_state</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Error&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">Device&nbsp;failed&nbsp;to&nbsp;enter&nbsp;state&nbsp;3&nbsp;</span><span style="color: #007700">(-</span><span style="color: #0000BB">16</span><span style="color: #007700">).<br /></span><span style="color: #0000BB">phy0&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">rt2x00lib_autowakeup</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Error&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">device&nbsp;failed&nbsp;to&nbsp;wakeup</span><span style="color: #007700">.&nbsp;</span>
</span>
</code></div>

<p>This can be solved by entering the following command, which basically turns of power management for your wifi card. </p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">iwconfig&nbsp;wlan0&nbsp;power&nbsp;off&nbsp;</span>
</span>
</code></div>

<p>Add that command to your <code>/etc/rc.local</code> file and you should be all set.</p>

<p>I hope this saves you all some time. Good luck getting your Centos machine up and running on that Wifi connection!</p>]]></description>

      <dc:subject>How&#45;to,</dc:subject>
      <dc:date>2013-03-01T12:48:00+00:00</dc:date>
    </item>

    <item>
      <title>Building a multiplayer projector game controlled with iPhone/iPad via node.js, socket.io and canvas</title>
      <link>http://www.goodbytes.be/blog/article/building-a-multiplayer-game-iphone-controlled-with-nodejs-socket-canvas</link>
      <guid>http://www.goodbytes.be/blog/article/building-a-multiplayer-game-iphone-controlled-with-nodejs-socket-canvas</guid>
      <description><![CDATA[<p>I wanted to experiment with <a href="http://nodejs.org/">node.js</a>, <a href="https://developer.mozilla.org/en-US/docs/HTML/Canvas">canvas</a> and a whole bunch of other cool stuff for some time now but never really got to it.</p>

<p>For the past four years or so, since I moved to Mechelen, we&#8217;ve had weekly meetups at my office or at a friend&#8217;s place every thursday night. We hang out, talk about the latest tech or watch a movie. To make these evenings a bit more interesting I decided to hook up a projector and build a game that we could play from the couch with two players at the same time.</p>

<p>For the controllers I&#8217;ve decided that it would be cool to use our phones.</p>

<div class="videoWrapper"'>
<iframe src="http://www.youtube.com/embed/0Bg2wvN1oYM?rel=0" frameborder="0" allowfullscreen></iframe>
</div>

<p><br />
Here&#8217;s a short recap of what I did. </p>

<h2>HTML5 canvas for the simple game</h2>
<p>The HTML5 canvas element is really not that hard to get started with as it might seem at first. Look at it as a simple blank canvas where you can draw stuff on by using Javascript. </p>

<p>The code sample below is a little snippet that draws the ball in the game. To animate things on the canvas, a setInterval() function is called every X milliseconds to completely redraw the canvas. That way, we can use variables to dynamically set the X and Y position of where to draw the ball. If we move that position around every time setInterval() is called, the ball will appear to be moving on the canvas. </p>

<p>Pretty simple, yet pretty sweet.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">canvas&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'yourCanvas'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ctx&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">getContext</span><span style="color: #007700">(</span><span style="color: #DD0000">'2d'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">beginPath</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">arc</span><span style="color: #007700">(</span><span style="color: #0000BB">75</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">75</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Math</span><span style="color: #007700">.</span><span style="color: #0000BB">PI</span><span style="color: #007700">*</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br /></span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">closePath</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">fill</span><span style="color: #007700">();&nbsp;</span>
</span>
</code></div>

<p>If you want to animate/move the ball created with the code above, all you need to do is wrap the drawing code in a setInterval() function and change the X and Y coordinates (75 and 75 respectively in the example above) into variables. The complete code could look somewhat like this:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">&lt;</span><span style="color: #0000BB">style</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">canvas&#123;width</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">800px</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">height</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">400px</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">background</span><span style="color: #007700">-</span><span style="color: #0000BB">color</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">red</span><span style="color: #007700">;</span><span style="color: #0000BB">&#125;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">style</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">canvas&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"yourCanvas"</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">canvas</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">script</span><span style="color: #007700">&gt;<br /><br />var&nbsp;</span><span style="color: #0000BB">canvas&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'yourCanvas'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ctx&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">getContext</span><span style="color: #007700">(</span><span style="color: #DD0000">'2d'</span><span style="color: #007700">);<br /><br />var&nbsp;</span><span style="color: #0000BB">X&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />var&nbsp;</span><span style="color: #0000BB">Y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /><br />function&nbsp;</span><span style="color: #0000BB">moveBall</span><span style="color: #007700">()<br /></span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">clearRect</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">400</span><span style="color: #007700">,</span><span style="color: #0000BB">200</span><span style="color: #007700">);&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">beginPath</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">arc</span><span style="color: #007700">(</span><span style="color: #0000BB">X</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Y</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Math</span><span style="color: #007700">.</span><span style="color: #0000BB">PI</span><span style="color: #007700">*</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">closePath</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">ctx</span><span style="color: #007700">.</span><span style="color: #0000BB">fill</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">X</span><span style="color: #007700">++;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">Y</span><span style="color: #007700">++;<br /></span><span style="color: #0000BB">&#125;<br /><br />setInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">"moveBall()"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&lt;/script&gt;&nbsp;</span>
</span>
</code></div>

<p><br />
Here is <a href="http://billmill.org/static/canvastutorial/">a good tutorial</a> to get you started with the canvas element.</p>

<p><img src="http://www.goodbytes.be/uploads/gameplay.jpg" alt="Gameplay" height="369" width="752"  /></p>

<h2>Use QR codes to get the party started</h2>
<p>It&#8217;s pretty cool to just project your game on a wall or even a building and have somebody scan the projected QR code to join in. This was actually the easy part. I just took <a href="https://www.google.be/search?q=qr+code+generator">a random QR code generator</a> and used it to point the device to player1.php or player2.php, depending on which code was scanned.</p>

<p>Once a users arrived on their page, we let node.js know that a player has connected, so that we can set up the game accordingly.</p>

<p><img src="http://www.goodbytes.be/uploads/qrgame.jpg" alt="QR Code" height="309" width="752"  /></p>

<h2>Access the iPhone gyroscope and accelerometer with Javascript</h2>
<p>When a user visits player1.php or player2.php, we have an idea of who has entered the game and we can start detecting movement of their iPhone (or any other phone that supports the device motion event). </p>

<p>Using the built-in gyroscope or accelerometer is pretty easy in safari mobile. Keep in mind that support is limited.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">window</span><span style="color: #007700">.</span><span style="color: #0000BB">ondevicemotion&nbsp;</span><span style="color: #007700">=&nbsp;function(</span><span style="color: #0000BB">event</span><span style="color: #007700">)&nbsp;<br /></span><span style="color: #0000BB">&#123;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accelerationX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">event</span><span style="color: #007700">.</span><span style="color: #0000BB">accelerationIncludingGravity</span><span style="color: #007700">.</span><span style="color: #0000BB">x</span><span style="color: #007700">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">accelerationY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">event</span><span style="color: #007700">.</span><span style="color: #0000BB">accelerationIncludingGravity</span><span style="color: #007700">.</span><span style="color: #0000BB">y</span><span style="color: #007700">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">accelerationZ&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">event</span><span style="color: #007700">.</span><span style="color: #0000BB">accelerationIncludingGravity</span><span style="color: #007700">.</span><span style="color: #0000BB">z</span><span style="color: #007700">;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p><a href="http://www.albertosarullo.com/blog/javascript-accelerometer-demo-source">Source and demo</a> by Alberto!</p>

<h2>Use node.js + socket.io to communicate player movement</h2>
<p>The more difficult part is synchronising movement from the players with the game itself. We could send an AJAX call to the server to save the current direction a user is holding its Phone in. That way, the game.php page (which shows the game on the projector) can poll the whole time to see wether or not the direction of the player has changed. </p>

<p>Sounds like a bad plan? It is. It&#8217;s like a baby asking its mother for candy every second or two. She has no candy, because she didn&#8217;t go to the store yet, so why would you bother her every two seconds with the same question.</p>

<p>It&#8217;s  better to have your mom bring you some candy once she&#8217;s been to the store, right? That&#8217;s exactly what node.js does.</p>

<p><img src="http://www.goodbytes.be/uploads/nodejs.jpg" alt="Node.js" height="245" width="752"  /></p>

<p>Together with <a href="http://socket.io/">socket.io</a>, node.js is capable of sending events around when they occur and only then. I use socket.io with node.js to do the following:</p><ol>
<li>Inform the game that player 1 or 2 has connected</li>
<li>Inform the game when a user changes direction on their phone</li>
</ol>

<h2>Let node.js listen for an event</h2>

<p>On the client we will trigger an event called &#8220;player1 start&#8221;:</p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">socket</span><span style="color: #007700">.</span><span style="color: #0000BB">emit</span><span style="color: #007700">(</span><span style="color: #DD0000">'player1&nbsp;start'</span><span style="color: #007700">,&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;&nbsp;name</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'Joris'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ready</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">true&nbsp;&#125;</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>On the server we will listen for that same event and let the game know somebody has connected:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">socket</span><span style="color: #007700">.</span><span style="color: #0000BB">on</span><span style="color: #007700">(</span><span style="color: #DD0000">'player1&nbsp;start'&nbsp;</span><span style="color: #007700">,&nbsp;function&nbsp;(</span><span style="color: #0000BB">data</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;socket</span><span style="color: #007700">.</span><span style="color: #0000BB">join</span><span style="color: #007700">(</span><span style="color: #DD0000">"player1"</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">socket</span><span style="color: #007700">.</span><span style="color: #0000BB">broadcast</span><span style="color: #007700">.</span><span style="color: #0000BB">to</span><span style="color: #007700">(</span><span style="color: #DD0000">"game"</span><span style="color: #007700">).</span><span style="color: #0000BB">emit</span><span style="color: #007700">(</span><span style="color: #DD0000">'player1Connected'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">&#125;</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>As you can see, once we visit the page called player1.php, the client will send a notification to the node server and send its name and status as well.</p>

<p>The server listens for this event and puts the user in a separate &#8220;room&#8221; called &#8220;player1&#8221;. That way, we can send messages to only player1 if we would want to. The server then lets the game know that somebody has connected. Once we have both players, the game can begin.</p>

<p>All events are written in plain Javascript or jQuery. The only thing I&#8217;ve used node.js and socket.io for is triggering events at the right time.</p>

<p>Starting the game for example is done by triggering a plain old Javascript function where you can hook up any functionality you want, like animating the ball on the canvas and displaying the score.</p>

<h2>What I&#8217;d like to do</h2>
<p>I think that many companies could benefit from some sort of interactive game being projected on a building, in a movie theatre or anywhere else they&#8217;d like it to show up. If you are a company that&#8217;s interested in having a prototype developed, get in touch.</p>

<p>Worst case scenario is that we&#8217;ll be playing with some prototypes on Thursday nights at the GoodBytes office <img src="http://www.goodbytes.be/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" />. Watch out for spontaneous projections on a building near you in Mechelen, guerrilla-style <img src="http://www.goodbytes.be/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" />. </p>

<h2>Thanks and Credits</h2>
<p>The following resources have been a great help for getting this little game up and running.</p>

<p><a href="http://appicontemplate.com/">Michael Flarup</a> for the icons template<br />
<a href="http://fortawesome.github.com/Font-Awesome/">Font Awesome</a> for the web font icons<br />
<a href="http://www.albertosarullo.com/blog/javascript-accelerometer-demo-source">Alberto</a> for the accelerator code snippet<br />
<a href="http://www.webdigi.co.uk/blog/2012/using-an-ios-device-to-control-a-game-on-your-browser/">Webdigi.com</a> for the great tutorial on how to build space invaders with node.js</p>

<p>A special thanks to the Interactive Multimedia Students that stress-tested the game during their lunch break <img src="http://www.goodbytes.be/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" />.</p>

<p><img src="http://www.goodbytes.be/uploads/playingwebsockets.jpg" alt="Game test during lunch" height="752" width="752"  /></p>

<p>When I find the time I&#8217;ll try to write up a more complete tutorial about this, but for the time being, this should be enough to get an idea of what node.js, socket.io and canvas can do for you.</p>

<p>I hope you&#8217;ll find the article helpful and please share your feedback or suggestions below.</p>]]></description>

      <dc:subject>Inspiration,</dc:subject>
      <dc:date>2013-02-14T12:13:04+00:00</dc:date>
    </item>

    <item>
      <title>Wonen in Mechelen centrum: vandalisme, diefstal en machteloosheid</title>
      <link>http://www.goodbytes.be/blog/article/wonen-in-mechelen-centrum-vandalisme-diefstal-en-machteloosheid</link>
      <guid>http://www.goodbytes.be/blog/article/wonen-in-mechelen-centrum-vandalisme-diefstal-en-machteloosheid</guid>
      <description><![CDATA[<p>Na ongeveer vier jaar te hebben gewoond in de Mechelse binnenstad heb ik het na vandaag gehad. Ik woon en werk in het centrum van Mechelen, meer bepaald op enkele meters van de Grote Markt. In dezelfde straat een eindje verderop is het politiebureau gelegen.</p>

<p>Niemand kan ontkennen dat Mechelen de afgelopen tien jaar een grondige poetsbeurt heeft gekregen. Het is een veel gezelligere stad in vergelijking met toen ik hier een tiental jaren geleden school liep. Voor wie in de binnenstad woont en meer ziet en ervaart dan de gemiddelde Bruul-shopper op zaterdagmiddag is het laagje vernis over de stad al snel veel minder glanzend, althans voor mij.</p>

<h2>Vandalisme, diefstal en moedeloosheid</h2>

<p>Wat ik beu ben is niet de mooie stad en al zeker niet de schitterende vrienden die ik niet had gekend als ik hier niet was komen wonen. Wel heb ik het gehad met het vandalisme, diefstal en een gevoel van machteloosheid en moedeloosheid dat eens om de zoveel maanden opsteekt.</p>

<p>Mechelen is een toffe stad met leuke mensen, ik zeg het nog eens. Wat in het Mechelse centrum echter niet mogelijk blijkt is je wagen te parkeren en met een gerust hart &#8216;s morgens opstaan.</p>

<p>Net zoals u hou ik niet van mensen die graag het slachtoffer uithangen of die zich steeds benadeeld voelen tegenover anderen. Ik heb er geen tijd voor. U ook niet. Om uw sympathie of medelijden te krijgen is het me niet te doen. Er zijn mensen die veel ergere dingen meemaken dan dit, maar het negeren haalt ook niets uit.</p>

<p>Wat ik wél hoop is dat deze blog post mensen bereikt die Mechelen besturen zodat ze wakker geschud worden en weten wat er zich afspeelt in het mooie centrum van de stad. U spele de blog post gerust door aan hen.</p>

<h2>De eerste keer</h2>
<p>In de enkele jaren dat ik in Mechelen woon en de zeldzame parkeerplekken benut in de buurt ben ik drie keer getakeld. Op zich geen probleem, ware het niet dat dit telkens ongegrond was. We kijken allemaal naar de rechtbank op <em>Vier</em> en iedereen beweert natuurlijk onschuldig te zijn, maar wanneer men verbodsborden rond je geparkeerde wagen plaatst en je niet op de lijst met reeds geparkeerde wagens plaatst, dan heb je blijkbaar weinig in de pap te brokken, ook als je zeker bent van je stuk.</p>

<p>Omdat ik net zoals u liever geen 200 Euro op tafel leg gewoon voor de lol, heb ik bij die eerste takelbeurt dan ook op het college van burgemeester en schepenen mijn versie van de feiten voorgelegd. Er stonden géén verbodsborden op het moment dat ik mijn wagen parkeerde. Burgemeester Bart Somers kan dan voor velen een lokale held zijn, ik voelde me eerder betutteld door het college inclusief de heer Somers en diende het bedrag van ongeveer 200 Euro te betalen voor de takelbeurt richting Rode Kruisplein.</p>

<p>Geen van de agenten zou mijn nummerplaat genoteerd hebben op het moment dat de borden geplaatst werden. Niet dat men foto&#8217;s had genomen van mijn wagen, maar goed, dat bleek ook niet nodig te zijn. Beëdigd agent enzo.</p>

<h2>Twee op een rij</h2>
<p>Iedereen kan zich vergissen en wie weet was ik effectief zo blind dat ik geen verbodsborden rond mijn wagen kon opmerken die dag. Nu goed, een ezel zal zich zeker geen twee keer aan dezelfde steen stoten en ook ik was vanaf die dag natuurlijk driedubbel waakzaam voor al wat lijkt op een gebodsbord. Enkele maanden later was het opnieuw zover, mijn wagen was nergens te bespeuren toen ik richting een klant wou vertrekken.</p>

<p>Bleek dat er last-minute een fietsenstalling ingericht moest worden op het Sint-Janskerkhof voor een of andere activiteit. Die boete diende niet betaald te worden omdat de wagens slechts op het laatste ogenblik en zonder aankondiging waren weggesleept. Fair enough. De krassen die het slepen op mijn bumper heeft achtergelaten neem ik er wel bij. </p>

<p>Getakeld worden is niet uw grootste zorg op het Sint-Janskerkhof, verre van. Er staan een groot aantal camera&#8217;s in Mechelen naar verluid, maar dat er op het Sint-Janskerkhof (of autokerkhof zoals ik het ondertussen noem) geen camera te bespeuren valt, daarvan is de bijna permanente collectie glasscherven op de grond wellicht het gevolg.</p>

<p><img src="http://www.goodbytes.be/uploads/inbrekerskerkhof.jpg" alt="Sint-Janskerkhof" height="562" width="752"  /></p>

<h2>Drie keer winnaar</h2>
<p>Nog enkele maanden later was het opnieuw zover. Ondertussen kende ik de weg naar het politiebureau blindelings en kende ik de vrouw achter het loket bijna bij voornaam. Opnieuw hetzelfde verhaal: mijn wagen zou geparkeerd zijn tussen verbodsborden. </p>

<p>Als een agent zegt dat je wagen er niet stond en je nummerplaat werd niet genoteerd op één of ander stukje papier, dan heb je geen recht van spreken, hoe zeker je ook bent van je stuk. Het woord van een agent is namelijk meer waard dan dat van een eerlijke burger, dat spreekt voor zich. De boete was dus zonder twijfel terecht en diende betaald te worden, zo kreeg ik te horen.</p>

<p>Gelukkig had ik de gewoonte om voor alle zekerheid naar het politiekantoor te bellen en de agent te spreken die mij op de bon had geslingerd voor de derde keer. Helaas (of gelukkig) was deze heer niet aanwezig en kreeg ik een stagiaire bij de Mechelse politie aan de lijn.</p>

<p>Ik hoor u al zuchten, maar tegen alle verwachtingen in bleek dit een godsgeschenk. Ik legde mijn verhaal voor aan haar en verzekerde haar dat ik nog steeds weet hoe een verbodsbord eruit ziet en dat ik best wel zeker was dat ik me daar niet tussen had geparkeerd. </p>

<p>Uiteindelijk vond de stagiaire eerder toevallig een stukje papier met daarop mijn nummerplaat. Dat moést wel de lijst zijn met wagens die op het moment dat de verbodsborden werden geplaatst reeds geparkeerd stonden. Nadat ik dit bezwaar had ingediend, inclusief coördinaten, naam en voornaam van deze vriendelijke stagiaire diende deze takelbeurt niet betaald te worden. Voelt u de gelijkenis met mijn eerste enkele ritje richting Rode Kruisplein?</p>

<p>Nu goed, een takelbeurt meer of minder is niet het einde van de wereld, maar wanneer u als burger moet bewijzen dat u niet op de bewuste plek stond toen de borden werden geplaatst, dan voel ik me machteloos en uitgebuit. </p>

<p>Mij lijkt het logisch dat een agent die de boete uitschrijft moet bewijzen dat hij gelijk heeft, inclusief foto&#8217;s. Een nummerplaat vergeten noteren of het papiertje kwijtspelen is snel gebeurd. Zonder onze vriendelijke stagiaire had ik me opnieuw kunnen laten bedienen van sarcastische commentaren op het college van burgemeester en schepenen en daar had ik nu net geen zin in. </p>

<p>Nu goed, takelen kost geld, maar permanent schade toebrengen aan uw wagen doet het meestal niet. Wat dat wél doet is wat volgde.</p>

<h2>Diefstal en glasscherven in uw broek</h2>
<p>We spoelen voort naar december 2012. Ondertussen is mijn vorige wagen bekrast geweest op het Sint-Janskerkhof, maar we klagen niet, er zijn namelijk nog een twintigtal medeslachtoffers die begrijpen wat ik voel nadat iemand voor de kick of uit verveling je motorkap heeft beklad met een scherp voorwerp. Van de daders heeft de politie geen spoor.</p>

<p>Om 8u30 &#8216;s morgens bij de koffie krijg ik telefoon van de lokale politie dat er in mijn wagen werd ingebroken. Ik rij met een broek vol glassplinters richting politiekantoor en ga aangifte doen. </p>

<p><img src="http://www.goodbytes.be/uploads/sint-janstraat.jpg" alt="Autoinbraak Sint-Jansstraat Mechelen" height="562" width="752"  /></p>

<p>Als goede klant die ik daar ondertussen ben, sla ik een praatje met één van de zovele inbraakslachtoffers van die nacht. Er blijken meer dan tien wagens hetzelfde lot te zijn ondergaan: ingeslagen ruit, handschoenenkastje doorzocht maar niets gestolen. 250 Euro leggen bij Car Glass en klaar. No big deal. Van de daders heeft de politie tot op heden geen spoor.</p>

<p><img src="http://www.goodbytes.be/uploads/inbraak.jpg" alt="Inbraak Sint-Jansstraat Mechelen" height="562" width="752"  /></p>

<h2>De grote finale</h2>
<p>Vandaag, amper een maand na mijn laatste aangifte van inbraak in mijn wagen zit ik opnieuw op het politiebureau. Mijn wagen stond naar goede gewoonte op ongeveer 100 meter van het politiekantoor geparkeerd, dit keer in de Van Hoeystraat, een straat naast de Sint-Jan straat waar ik niet meer parkeerde sinds bovenvermelde inbraak. De oplettende lezer merkt ondertussen op dat er niet veel straten meer overblijven waar nog geparkeerd kan worden. </p>

<p>Net zoals mijn vorige wagen het had mogen verduren een jaar of twee eerder, had mijn nieuwe wagen dit keer de eer om door vandalen vakkundig te worden bekrast. In het politiekantoor kreeg ik een flashback: opnieuw een heleboel mensen met hetzelfde verhaal. Hun wagen was ook bekrast. Ook zij waren het beu.</p>

<p><img src="http://www.goodbytes.be/uploads/vandalisme-mechelen.jpg" alt="Vandalisme Van Hoeystraat Mechelen" height="562" width="752"  /></p>

<p>Na twee jaar te hebben vertoefd in Schaarbeek leek Mechelen een aangenaam en rustig stadje en dat is het aan de oppervlakte ook. Voor een stad die vele malen kleiner is dan Antwerpen is er echter een heleboel kleine criminaliteit die ongestraft blijft en ongestraft lijkt te blijven in de toekomst. </p>

<p>Misschien is het een kwestie van pech versus geluk. In andere steden speelt zich hetzelfde tafereel af, sure. Misschien is het centrum een &#8220;slechte&#8221; buurt. Wat het ook is, ik zal het in ieder geval niet missen wanneer ik verhuis. Mijn vrienden, die zal ik des te meer missen.</p>

<h2>VerGASSEN?</h2>

<p>Ik begrijp Bart Somers. Takelbeurten kordaat afhandelen en <a href="http://www.nieuwsblad.be/article/detail.aspx?articleid=DMF20121028_00350613">GAS-boetes</a> uitschrijven brengt ongetwijfeld meer geld in het laatje en is vele malen eenvoudiger dan het tegengaan en het bestraffen van <em>kleine</em> criminaliteit. Het maakt de stad er echter niet aangenamer op voor haar inwoners.</p>

<p>Men zegge het voort.</p>]]></description>

      <dc:subject>Dutch,</dc:subject>
      <dc:date>2013-01-31T16:16:00+00:00</dc:date>
    </item>

    <item>
      <title>Loo Me! App let&#8217;s your find a public toilet in Antwerp</title>
      <link>http://www.goodbytes.be/blog/article/loo-me-app-lets-your-find-a-public-toilet-in-antwerp</link>
      <guid>http://www.goodbytes.be/blog/article/loo-me-app-lets-your-find-a-public-toilet-in-antwerp</guid>
      <description><![CDATA[<p>Yesterday I started a small experiment in preparation for a class I&#8217;m teaching about building simple web apps. Because I like to keep things stylish - you know me - I&#8217;ve created <em><a href="http://loome.goodbytes.be">Loo Me!</a></em>, a simple web app that will help you find a public toilet in Antwerp the day after visiting your not so favourite Indian restaurant or on any other day for that matter.</p>

<h2>Used resources</h2>
<p>If you&#8217;re experimenting with something similar, here are a few of the resources I used to get the app up and running quickly. I hope they come in handy for some of you.</p>

<ol>
<li><a href="http://subtlepatterns.com">Subtlepatterns</a> for the background</li>
<li><a href="http://www.bohemiancoding.com/sketch/">Sketch</a> for mocking up the SVG logo</li>
<li><a href="http://opendata.antwerpen.be">Antwerp&#8217;s Open Data</a> for the data of course</li>
<li><a href="http://www.jquery.com">jQuery</a> for the interaction</li>
<li><a href="http://placeit.breezi.com/">http://placeit.breezi.com</a> for the picture below</li>
</ol>

<p><img src="http://www.goodbytes.be/uploads/lomee.jpg" alt="Loo Me! Antwerp" height="564" width="752"  /></p>

<p>Since some of my friends thought it would be useful, I&#8217;ve put Loo Me! online at <a href="http://loome.goodbytes.be">http://loome.goodbytes.be</a> for anyone that would like to try it out or take a look at the underlying code. </p>

<p>Because it&#8217;s nothing more than a basic web app, it will run in any (modern) browser that supports geolocation and has an active internet connection to work with.</p>

<p>Let me know if you used the app, or euhm, don&#8217;t <img src="http://www.goodbytes.be/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" /></p>]]></description>

      <dc:subject>Goodbytes,</dc:subject>
      <dc:date>2013-01-15T12:33:38+00:00</dc:date>
    </item>

    <item>
      <title>Usability fail: car radio volume control</title>
      <link>http://www.goodbytes.be/blog/article/usability-fail-car-radio-volume-control</link>
      <guid>http://www.goodbytes.be/blog/article/usability-fail-car-radio-volume-control</guid>
      <description><![CDATA[<p>For some reason, it&#8217;s easier to write about what bothers you or what you would call a fail, than it is to write about wins! I&#8217;ve decided to look out for what delights me in the real world, but until then <img src="http://www.goodbytes.be/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" />, here&#8217;s what I found frustrating the other day.</p>

<p>My girlfriend was driving the car and I wanted to put the radio volume up. After 30 years of crancking up the volume, my mind got tricked into thinking I just needed to look for a round centrally located knob. That&#8217;s the volume-crancking-button on any other device right? </p>

<p>Not on this radio it wasn&#8217;t. Instead, you will be changing the GPS destination or even radio station, depending on what preset the device is set at that point.</p>

<p><img src="http://www.goodbytes.be/uploads/usability.jpg" alt="Usability Fail" height="562" width="752"  /></p>

<p>The volume control appeared to be a push button on the left side of the radio, no biggy if it wasn&#8217;t for that nice shiny attention-grabbing round knob in the central of the radio console. <br />
If you have other real life examples of how the usability of things could be improved let me know or blog about them, I&#8217;d love to see them.</p>

<p>My next post will hopefully feature a usability or customer service <em>win</em>, unlike <a href="http://www.goodbytes.be/blog/article/why-i-switched-from-mobistar-to-mobile-vikings">that last fail</a>.</p>]]></description>

      <dc:subject>Inspiration,</dc:subject>
      <dc:date>2013-01-09T09:34:46+00:00</dc:date>
    </item>

    <item>
      <title>What is Repetitive Strain Injury (RSI) and how can you prevent it?</title>
      <link>http://www.goodbytes.be/blog/article/what-is-repetitive-strain-injury-rsi-and-how-can-you-prevent-it</link>
      <guid>http://www.goodbytes.be/blog/article/what-is-repetitive-strain-injury-rsi-and-how-can-you-prevent-it</guid>
      <description><![CDATA[<p>If you earn a living by working behind a computer most of the day, it&#8217;s definitely important to keep in mind that you are prone to suffering from RSI. <a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury">Wikipedia</a> describes this modern side effect of working with computers as follows:</p>

<blockquote><p>Repetitive strain injuries (RSIs) are injuries of the musculoskeletal and nervous systems that may be caused by repetitive tasks, forceful exertions, vibrations, mechanical compression (pressing against hard surfaces), or sustained or awkward positions</p>
</blockquote>

<p>My definition would be something along the lines of:</p>

<blockquote><p>A tingling sensation and sometimes even painful feeling in the wrists, fingers or elbows as a result of too much clicking, typing and sitting behind a computer.</p>
</blockquote>

<p>CSS hero <a href="http://www.twitter.com/chriscoyier">Chris Coyier</a> mentions &#8220;the claw&#8221; as one of the main causes of RSI. You know, that claw your hand makes when putting your hand on a mouse. </p>

<p>Friends or colleagues I talk to don&#8217;t always understand what I mean when I say that I had suffered from RSI before. Even a doctor didn&#8217;t really knew what I was talking about. I couldn&#8217;t really be the only person on earth suffering from RSI symptoms could I?</p>

<p>I was happy to hear that Chris and Dave talked about RSI on their awesome podcast, called <a href="http://shoptalkshow.com/">ShopTalk</a>. In the podcast they were looking for software tools to help them fight off RSI. </p>

<p>I decided to write up a short blog post about what tools I&#8217;m using these days to avoid RSI symptoms. The following things helped me, so I hope they will work for you too. </p>

<h2>Get a good mouse</h2>
<p>Since most pain will likely be caused by forcing your wrist in an unnatural position necessary to use a mouse, it&#8217;s only logical to do something about that first. I use a vertical mouse by <a href="http://www.evoluent.com/">Evoluent</a> which will allow you to use a mouse without forcing your wrist all day long.</p>

<p><img src="http://www.goodbytes.be/uploads/verticalmouse.jpg" alt="Evoluent Verticalmouse" height="335" width="752"  /></p>

<p>It takes some time to get used to and your friends will definitely (and rightly so) make fun of you for a few days, but your wrists will be happy you bought one.</p>

<h2>Get a good keyboard</h2>
<p>Anti-RSI or ergonomic keyboards come in all forms and shapes, but for me, the most important thing was to get a flat keyboard. You know, a keyboard that doesn&#8217;t force your wrists to be folded into strange angles just to be able to type on the damn thing. </p>

<p>The standard Apple keyboard is just fine for me, but others tend to swear by more exotic solutions. Try out a few solutions and stick with what feels natural to you and doesn&#8217;t make your wrists ache after a day of coding.</p>

<h2>Software: AntiRSI and Workrave</h2>
<p>This is definitely a winner: use a tool that will force you to take breaks. Seriously, get up for a coffee. If you&#8217;re like me and you tend to get sucked up into whatever it is you&#8217;re creating or building, you need a tool like this. </p>

<p>I&#8217;ve used <a href="http://www.workrave.org/">Workrave</a> for quite some time but switched to <a href="http://tech.inhelsinki.nl/antirsi/">AntiRSI</a> on my Mac. Both do a great job at forcing you to take breaks.</p>

<p>Nobody can be focused for eight hours a day. Nope, not even you. So take those breaks.</p>

<p><img src="http://www.goodbytes.be/uploads/workbreak.jpg" alt="AntiRSI at work" height="335" width="752"  /></p>

<h2>Finally, make sure to get some exercise</h2>
<p>I work from home a lot of the time and I&#8217;m lucky to have a pretty flexible work schedule. I&#8217;m able to go for a run when I feel like it. Not only does that give me a break, it clears my mind and helps me get back to work more focused than before. </p>

<p>I personally get a lot of inspiration when I&#8217;m out running, probably because you have nothing else to do but think while you&#8217;re trying to make it back home <img src="http://www.goodbytes.be/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" />. I got the idea of writing up this blog post after listening to the ShopTalk podcast during my run and here we are, writing it up.</p>

<p><img src="http://www.goodbytes.be/uploads/shoptalk.jpg" alt="Run and listen to Shop Talk" height="557" width="752"  /></p>

<h2>Goodbye RSI</h2>
<p>To sum it up, let&#8217;s say goodbye to RSI by keeping the following in mind.</p>

<ul>
 <li>1 - Use good hardware</li>
 <li>2 - Use AntiRSI or Workrave to remind you of taking short breaks</li>
 <li>3 - Exercise. Do it.</li>
</ul>

<p><br />
I hope these simple tips help you the same way they helped me. If you have any other tips, tools, tricks or miracles that can help to avoid RSI, please do share them in the comments.</p>]]></description>

      <dc:subject></dc:subject>
      <dc:date>2013-01-05T14:40:23+00:00</dc:date>
    </item>

    <item>
      <title>A backup strategy that helps you sleep at night</title>
      <link>http://www.goodbytes.be/blog/article/my-backup-strategy</link>
      <guid>http://www.goodbytes.be/blog/article/my-backup-strategy</guid>
      <description><![CDATA[<p>You need a backup strategy and you need one now. Not tomorrow. Now.</p>

<h2>My Backup Strategy</h2>

<p>Many of us have had their hard drives failing, operating systems crashing or even people stealing their computers and hard drives. <a href="http://en.wikipedia.org/wiki/Murphy's_law">Murphy</a> wasn&#8217;t lying when he said &#8220;Anything than can go wrong, will go wrong&#8221;. Unfortunately for me, Mister Murphy proved to be right more than once already.</p>

<p><strong>The importance of a good backup strategy can&#8217;t be stressed enough</strong>. Because every month or so, somebody asks me how they should back up their data, I&#8217;ve written down what I personally do to try to avoid data loss. Of course, my backup strategy isn&#8217;t the only one and it probably isn&#8217;t the best one either, but it&#8217;s a method that has worked for me in the past, so you might find it useful as well.</p>

<p>Let&#8217;s get to it.</p>

<h2>I have my files in Dropbox, I&#8217;m good right?</h2>
<p>Dropbox isn&#8217;t made for backing up full hard drives, it&#8217;s made for easily sharing files between computers. Of course, if your critical data only takes up a few gigabytes of data, you&#8217;ll be fine syncing with Dropbox. In my case however, I have around 200 GB of photos from several travels that I don&#8217;t want to lose. </p>

<p>A backup on 20 DVD&#8217;s isn&#8217;t going to last so we need something better.</p>

<p>Also, if you have a lot of data, Dropbox will cost you some serious cash. To give you an example, the 500 GB plan now costs around 499$, that&#8217;s a bit too much for backups. Or is it?</p>

<h2>#1: Create local backups</h2>
<p>I work primarily on a macbook or iMac, so some of the tips I&#8217;m giving here will be Mac related, but I&#8217;m sure there are alternatives that do exactly the same thing on Windows.</p>

<p>The first thing you&#8217;ll want to do is back up your data locally, in case a hard drives dies or your operating system decides it doesn&#8217;t want to be on this planet anymore. Last year, my macbook had a problem with its GPU and the local Apple reseller decided to swap out the hard drive with a new one, just to make sure that drive wasn&#8217;t causing the issue. As a result, all my data was gone, but luckily I had created a local backup with <a href="http://www.maclife.com/article/gallery/10_tips_using_time_machine">Time Machine</a>.</p>

<p>Time Machine comes built in with Mac OS and only needs an external hard drive to back up your data continuously. I&#8217;ve bought a reasonably priced external hard drive that isn&#8217;t too fast, but it&#8217;s big enough to hold a complete copy of all my data. My advice would be to buy a hard drive that&#8217;s at least double the size of the data you want to back up. Spend more cash on disk size, save on disk speed. It&#8217;s only going to be used for backups after all.</p>

<p>If you want to spend some extra cash, you could also buy a <a href="http://www.apple.com/timecapsule/">time capsule</a> from Apple, which is nothing more than a wireless hard drive you can use to back up your data.</p>

<p>What&#8217;s awesome about Time Machine is that you can just set it and forget it. Time Machine will take regular backups, multiple times a day. When your Mac crashes (mine did yesterday), you can simply reformat your hard drive and restore your complete system and data from your time machine. </p>

<p>Awesome. That will save us some sleep, but it&#8217;s not bulletproof yet.</p>

<h2>#2: Create online, off-site backups</h2>
<p>Now that we have local backups in place, one more thing to worry about is that your backup hard disk will fail when you need it most. Another thing that could happen is theft. A friend of mine had his laptop and hard drives stolen from his house the other month. If that happens, say goodbye to all those years worth of photos, including your daily backups.</p>

<p>To make sure you don&#8217;t have to worry all night about your local backups and thieves grabbing your hard drives, you can create online, off-site backups that aren&#8217;t stored in your house but somewhere in the cloud.</p>

<p><img src="http://www.goodbytes.be/uploads/backups.jpg" alt="Backup Strategy" height="497" width="752"  /></p>

<p>Personally I&#8217;m happy with <a href="http://www.crashplan.com/">Crashplan</a>. They offer different pricing plans for personal or business use and depending on how many computers you want to back up, you&#8217;ll pay around 3 dollars per month for one computer or around 6 dollars per month for up to 10 computers for personal use.</p>

<p>The only downside is that your initial backup will take several weeks to complete, unless you send them over a copy of your hard drive. If you do that, they&#8217;ll make sure that they copy over your data and you&#8217;ll only have to sync newer files. Of course, they will charge a fee for doing so and I&#8217;m not really tempted to send over a hard disk to the United States since I&#8217;m in Belgium.</p>

<p>I personally just got rid of the bandwidth limits the Belgian internet provider &#8220;Telenet&#8221; has in place and I&#8217;ve switched to their fair-use unlimited data plan called Fibernet. That way, I can create a backup of around 200 GB worth of data and send it to an online backup service. Once that initial backup has been seeded, Crashplan will only send newer or changed files to its servers.</p>

<p>Although I couldn&#8217;t be happier with how Crashplan operates, I must say it did something weird the other day when I restored my Mac after a system crash. Crashplan decided to re-upload all of my data, probably because it couldn&#8217;t decide if I had uploaded the same data or not after the restore. Other than that it has been a painless process so far.</p>

<p>If you like options, here are a number of <a href="http://mac.appstorm.net/roundups/utilities-roundups/7-alternatives-for-your-off-site-backup/">alternatives to Crashplan</a>.</p>

<h2>Every hard drive will eventually crash. Yes. Even yours</h2>
<p>Hard drives are fragile pieces of technology. Check out this slow motion video of a how a hard drive operates and realize that yours will crash one day, maybe even tomorrow.</p>

<p>When that happens, we&#8217;ll be sipping cocktails together by the pool. After all, you&#8217;ve decided to put a backup strategy in place didn&#8217;t you?</p>

<div class="videoWrapper">
<iframe src="http://www.youtube.com/embed/3owqvmMf6No?rel=0" frameborder="0" allowfullscreen></iframe>
</div>

<p><strong>The only person who doesn&#8217;t need backups is Chuck Norris, because you know, he forces the universe to go back in time.</strong></p>

<p>So tell me, what&#8217;s <em>your</em> backups strategy?</p>]]></description>

      <dc:subject>How&#45;to,</dc:subject>
      <dc:date>2012-12-14T15:50:52+00:00</dc:date>
    </item>

    
    </channel>
</rss>