Skip to content

Posts from the ‘general’ Category

15
Jun

Personal Development

It has been more then a year since I wrote about a new challenge. It’s been almost a year since I started working for Egeniq as a Junior Software Engineer and looking back it has been one of the best decisions in my life.

I write this sitting inside the WWDC convention center, something I couldn’t have dreamed of a year ago. The things I have experienced in the past year have been amazing and the personal development has been so steep it’s hard to imagine where I was a year ago.

As a PHP developer I joined Egeniq to start developing mobile applications. Starting here I knew I was going to learn iOS, and learning a new language is always exciting but also the progress I made in PHP has been astonishing. I learned writing proper API’s, working agile and working for big, big customers. The first major project I worked on was the RTLNieuws365 news application. I was involved in the original brainstorm sessions, all the way to making overtime to get the product finished on time (albeit only 1 day we had to do this). It was the first time I had actually seen a proper interaction design, a proper functional design and a proper technical design. We were responsible for most of the main parts, we set up the API, the application and the server infrastructure. I personally was involved in creating a huge part of the API and the application itself. Working alongside my colleagues, who I revered before joining Egeniq, and still do. The things that I now feel are ‘standard’ in application development, were a totally new concept a year ago. I cannot imagine going back.

As a software engineer at Egeniq we have multiple privileges, alongside the development devices we recieve (we work at home), I get to go to conferences. Where I saw Ivo for the first time on the first ever conference I been to, the conferences I visited last year is quite a list for me.

Starting with PFCongres, a 1-day PHP conference, onto the Apple TechTalks in London (Which me and Peter were fortunate to get into). After that we had Droidcon 2011 in Amsterdam and to finish it off I helped organize MDevCon 2012, which, according to its attendees was one of the best mobile conferences in the Netherlands to date.

Offcourse, last but definitely not least I am writing this from Moscone Center in San Francisco at the WWDC. I can only hope that the coming year brings as much as the last one did. But that definitely isn’t going to be the easiest thing in the world.

I also met great a lot people, off course my colleagues Felix, Allen and Lineke. Whom have helped me progress the way I have. Peter and Ivo, who have been amazing in supporting me during my first year at Egeniq and of whom I have the privilege to learn from everyday. Some of the biggest names in iOS development (Mike Lee, Matt Gemmell, Jeff LaMarche) and a lot of other people in the community. To all the people I met this year, thank you. Thank you for your knowledge, your puns and even just the time we chit-chatted. You all inspired me.

Going for another year, here are a few of my personal goals:

  • Become a speaker
  • Attend at least 3 conferences in different areas of expertise
  • Pickup android development
  • Increase my knowledge for both PHP and iOS
  • Write more (technical) blog posts

I hope, that one year from now I look back at this list, I can tick em all off. And maybe added some more accomplishments.

A year ago I quoted the late Steve Jobs when switching jobs.

If today were the last day of my life. Would I want to do what I am about to do today?

Yes.

30
May

New Adventure – New Challenge

For the past year and a half I have been working for HPU, their an amazing company with some amazing people. But in the past few months something started itching inside me, I was not getting the challenge I wanted to get, I was not gaining the knowledge I wanted to gain. I felt like I was repeating the same trick and coming home, it was not often that I actually felt satisfied with what I was doing.

So that for me was a sign that I should move on. Inspired by Steve jobs Stanford Commencement Speech

If today were the last day of my life. Would I want to do what I am about to do today?

I decided I should be looking for a new adventure, a new challenge that would inspire me to become a better developer then I am today, everyday. In this process I wasn’t ‘actively’ looking, I wasn’t going online every day searching for a new opportunity. I knew that with patience, I would find my dream job. This happened on May 4th, there was an small blog post which read: “Wanted: Talented Software Engineer” and the very first heading was exactly this: “We’re Looking For A Jedi Apprentice”.

I replied with my heart beat raised, had the first interview over skype (I know right, how awesome is that!), was invited to have a conversation in Utrecht and now finally

Coming July first I will be working for Egeniq!!!

I am so excited that even now a few weeks later my heart still raises when I think of the awesome stuff that I will be doing in a month from now. I know that I will be learning so much, that I will be experiencing so much and above all, I will be enjoying myself so much more working with the people and the projects over at egeniq.

Egeniq is a company that specialises in mobile development. It’s a young company founded October 2010, but they already have made some impressive applications. Also the founders have years of experience in developing applications.

So I’ll just end with a, probably inappropriate line that’s been going trough my head the last few days:

“fuck yeah”

11
Jan

Small & Quick Update

Just wanted everyone to know I’ll be going to PHPBenelux Conference this year, and I am especially interested in the Talk from Rob Allen (one of my all-time heroes).

I hope to have a full report of the event when I’m back.

Also, I was just working on a HTML Ajax crawlable by google page I thought I’d share for now.

check it out here: http://thijsdamen.nl/crawlable/

20
Dec

How To: Create your own Content Distribution Network

There are many Content Distribution Networks (CDN) aka Content Delivery Networks out there so why create your own? I for one argue that most CDNs out there don’t host enough code.

Here’s a list that google supports:

Chrome Frame
Dojo
Ext Core
jQuery
jQuery UI
MooTools
Prototype
script.aculo.us
SWFObject
Yahoo! User Interface Library (YUI)
WebFont Loader

This may seem as a long list, but what if you use jQuery plugins like jQuery validate or Fancybox often?

Why not create your own CDN system to host the code you use the most (You can even choose to use googleapis for all the libraries that are available and use your own CDN for the ones that are not). Personally, I prefer that option.
Another benefit of hosting your own CDN is that if you create web applications using a in-house made CMS you can also host its icon-sets and other frequently accessed static images.

The reason’s to use a CDN are simple and straight-forward:

Using a CDN will save you bandwich
Using a CDN will greatly increase your scripts load speed

So how do you create your own CDN?

#1 Setup the domain

If it is possible create a new domain name and disable the use of cookies. Why? RavelRumba explain it in this post. If you can not afford, or do not want to pay for a new domain you can consider creating a subdomain and then making sure cookies are only saved on the www.* domain.

#2 Figure out a filetree structure

Your filetree is very important when setting up your CDN. Yes, you can simply put every file you need in the root directory of the webserver but this is clumbersome and after some time will become confusing.
Google uses the following syntax:

http://ajax.googleapis.com/ajax/libs/library/version/filename
or
http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js

You can also use this syntax or use a more simplified version. Which I personally prefer since the code you should host on your CDN often does not come with that many versions.

http://yourwebsite.com/library/filename

http://yourwebsite.com/library/plugins/pluginname/filename

http://yourwebsite.com/plugins/pluginname/filename

http://yourwebsite.com/images/imagename

I then use the library folder to host specific libraries (and their specific plugins), the plugins folder to host plugins (such as modernizr) and the image folder to host my frequently used images.

#3 Making it perform

As said before, you should disable cookies on the domain of your choice.

Because you are using a CDN you can use a custom .htaccess file to optimise the content distrubution. Set far-future (the content is static anyway) expire headers and deflate any content delivered.

.htaccess example (mostly stripped from the –awesome- html5boilerplate created by the, maybe even more awesome Paul Irish

#Set proper content-types for your files
# Proper svg serving.
AddType     image/svg+xml              svg svgz
AddEncoding gzip                       svgz           

# webfonts
AddType application/vnd.ms-fontobject  eot
AddType font/truetype                  ttf
AddType font/opentype                  otf
AddType font/woff                      woff          

# assorted types
AddType image/vnd.microsoft.icon       ico
AddType image/webp                     webp
AddType text/cache-manifest            manifest
AddType text/x-component               htc
AddType application/x-chrome-extension crx

# gzip compression.
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
  AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
  AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
  <FilesMatch "\.(ttf|otf|eot|svg)$" >
    SetOutputFilter DEFLATE
  </FilesMatch>
</IfModule>

<IfModule mod_expires.c>
  Header set Cache-Control "public"
  ExpiresActive on

# Perhaps better to whitelist expires rules? Perhaps.
  ExpiresDefault                          "access plus 1 month"

# cache.manifest needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
  ExpiresByType text/cache-manifest       "access plus 0 seconds"

# favicon (cannot be renamed)
  ExpiresByType image/vnd.microsoft.icon  "access plus 1 week" 

# media: images, video, audio
  ExpiresByType image/gif                 "access plus 1 month"
  ExpiresByType image/png                 "access plus 1 month"
  ExpiresByType image/jpg                 "access plus 1 month"
  ExpiresByType image/jpeg                "access plus 1 month"
  ExpiresByType video/ogg                 "access plus 1 month"
  ExpiresByType audio/ogg                 "access plus 1 month"
  ExpiresByType video/mp4                 "access plus 1 month"
  ExpiresByType video/webm                "access plus 1 month"

# webfonts
  ExpiresByType font/truetype             "access plus 1 month"
  ExpiresByType font/opentype             "access plus 1 month"
  ExpiresByType font/woff                 "access plus 1 month"
  ExpiresByType image/svg+xml             "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

# css and javascript
  ExpiresByType text/css                  "access plus 1 week"
  ExpiresByType application/javascript    "access plus 1 week"
  ExpiresByType text/javascript           "access plus 1 week"
</IfModule>

# Since we're sending far-future expires, we don't need ETags for
# static content.
FileETag None

# use utf-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8

# force utf-8 for a number of file formats
AddCharset utf-8 .html .css .js .xml .json .rss

#4 All done

It’s that simple to create a very basic CDN. Obviously there are other more advanced topics we could discuss about how to optimize the distribution of content, but this is in essence a CDN that does what it promises.