<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

  <title>Het bijstere spoor</title>
  
  <updated>2013-05-10T10:00:42-07:00</updated>
  <id>http://evertpot.com/</id>
  <author>
    <name>Evert Pot</name>
    <email>evert@rooftopsolutions.nl</email>
  </author>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/bijsterespoor" /><feedburner:info uri="bijsterespoor" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>43.636417</geo:lat><geo:long>-79.424651</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.5/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry>
    <id>http://evertpot.com//escaping-in-vcards-and-icalendar</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/_wa9IKHQyz8/escaping-in-vcards-and-icalendar" />
    <title>Escaping in iCalendar and vCard</title>
    <updated>2013-05-10T15:57:12Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;The #1 bug report in my &lt;a href="https://github.com/fruux/sabre-vobject"&gt;vObject&lt;/a&gt; library (a library to parse and create
iCalendar and vCard objects in PHP) is that it does a bad job
escaping/un-escaping of values.&lt;/p&gt;

&lt;p&gt;In particular, it double-escapes certain values, changing things like &lt;code&gt;;&lt;/code&gt; into
&lt;code&gt;\\;&lt;/code&gt; and in other cases it&amp;#39;s a bit too liberal un-escaping.&lt;/p&gt;

&lt;p&gt;It&amp;#39;s gotten to a point where I got so frustrated about this bug, I&amp;#39;ve been
working all week on a new version of the parser.&lt;/p&gt;

&lt;p&gt;Determined to do things right this time, I wanted to make sure I complied with
all the relevant standards, in particular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.imc.org/pdi/pdiproddev.html"&gt;vCard 2.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vCard 3.0 (&lt;a href="http://tools.ietf.org/html/rfc2425"&gt;rfc2425&lt;/a&gt;, &lt;a href="http://tools.ietf.org/html/rfc2425"&gt;rfc2426&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;vCard 4.0 (&lt;a href="http://tools.ietf.org/html/rfc6350"&gt;rfc6350&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;iCalendar 2.0 (&lt;a href="http://tools.ietf.org/html/rfc5545"&gt;rfc5545&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I first wrote the vObject I naively thought that these formats were more
or less the same. On the surface it does indeed seem that way, everything does
seem to follow this basic structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;BEGIN:VCARD
VERSION:4.0
FN:Evert Pot
END:VCARD
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The nuances and slight difference between the specifications are enough to
drive a simple person to madness though.&lt;/p&gt;

&lt;p&gt;Just on the topic of ecaping values (the part after the &lt;code&gt;:&lt;/code&gt;) the
specifications have the following to say:&lt;/p&gt;

&lt;h2&gt;vCard 2.1&lt;/h2&gt;

&lt;p&gt;vCard 2.1, as well as the other specs have a concept of &amp;#39;compound&amp;#39; or
multi-value properties. An example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;BEGIN:VCARD
VERSION:2.1
N:Pot;Evert;Middle;Dr.;M.D.
END:VCARD
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see, the &lt;code&gt;N&lt;/code&gt; property has multiple values. Any of these values
may also contain a &lt;code&gt;;&lt;/code&gt;, which must be escaped as &lt;code&gt;\;&lt;/code&gt;. So we also cannot
blindly encode a string and automatically add backslashes to any &lt;code&gt;;&lt;/code&gt; we see.&lt;/p&gt;

&lt;p&gt;The semi-colons should only be escaped in the &lt;code&gt;ADR&lt;/code&gt;, &lt;code&gt;ORG&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt; fields,
but we can assume that backslashed semi-colons may also appear in other values.&lt;/p&gt;

&lt;p&gt;Any property may have a parameter, a parameter looks a bit like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;BEGIN:VCARD
VERSION:2.1
NOTE;ENCODING=QUOTED-PRINTABLE:Handsome guy, for sure..
END:VCARD
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A parameter in vCard starts with a &lt;code&gt;;&lt;/code&gt;, has a name and a value. Only the colon
may be escaped in parameters, using &lt;code&gt;\:&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you somehow wanted to encode a real backslash though, there&amp;#39;s no mention
of escaping it as a double-backslash.&lt;/p&gt;

&lt;p&gt;If you need newlines in any values, quoted-printable encoding &lt;em&gt;must&lt;/em&gt; be used.
Other specs all encode newlines as &lt;code&gt;\n&lt;/code&gt; or &lt;code&gt;\N&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;vCard 3.0&lt;/h2&gt;

&lt;p&gt;rfc2425 says that backslashes (\\), newlines (&lt;code&gt;\N&lt;/code&gt; or &lt;code&gt;\n&lt;/code&gt;) and comma&amp;#39;s (&lt;code&gt;\,&lt;/code&gt;)
must always be escaped, no exceptions.. Well except when the comma is used as
a delimiter for multiple values.&lt;/p&gt;

&lt;p&gt;rfc2426 add semi-colon (&lt;code&gt;\;&lt;/code&gt;) to this list, except when it&amp;#39;s used as a
delimiter. Semi-colon is used as a delimiter in the &lt;code&gt;N&lt;/code&gt;, &lt;code&gt;ADR&lt;/code&gt;, &lt;code&gt;GEO&lt;/code&gt; and
&lt;code&gt;ORG&lt;/code&gt; fields. &lt;code&gt;NICKNAME&lt;/code&gt; and &lt;code&gt;CATEGORIES&lt;/code&gt; use comma&amp;#39;s.&lt;/p&gt;

&lt;p&gt;vCard also says that individual parts of &lt;code&gt;ADR&lt;/code&gt;, and &lt;code&gt;N&lt;/code&gt; may also contain
multiple values themselves, which are themselves split by a comma.&lt;/p&gt;

&lt;p&gt;Quoted-printable is now deprecated, and should no longer be used.&lt;/p&gt;

&lt;p&gt;Parameters have also changed. The new rule is that parameters &lt;em&gt;must not&lt;/em&gt;
contain &lt;code&gt;;&lt;/code&gt;, &lt;code&gt;:&lt;/code&gt; or &lt;code&gt;&amp;quot;&lt;/code&gt;, unless they are surrounded by double-quotes, in which
case only &lt;code&gt;&amp;quot;&lt;/code&gt; may not appear. Escaping of the colon character (&lt;code&gt;\:&lt;/code&gt;) has
disappeared.&lt;/p&gt;

&lt;h2&gt;vCard 4.0&lt;/h2&gt;

&lt;p&gt;vCard 4 changes the interpretation of 3.0 a bit, and now states that
semi-colons &lt;em&gt;may&lt;/em&gt; be escaped, depending on the property.&lt;/p&gt;

&lt;p&gt;The implication is that we need to maintain lists of properties, if they
support multiple- or compound-values and which delimiter they use
(&lt;code&gt;,&lt;/code&gt; or &lt;code&gt;;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Semi-colons are now used by &lt;code&gt;N&lt;/code&gt;, &lt;code&gt;ADR&lt;/code&gt;, &lt;code&gt;ORG&lt;/code&gt; and &lt;code&gt;CLIENTPIDMAP&lt;/code&gt;. Comma&amp;#39;s are
used by &lt;code&gt;NICKNAME&lt;/code&gt;, &lt;code&gt;RELATED&lt;/code&gt;, &lt;code&gt;CATEGORIES&lt;/code&gt; and &lt;code&gt;PID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Even though the spec does say that comma&amp;#39;s must always be escaped, it does
appear to violate this rule in it&amp;#39;s own examples, specifically the example
for &lt;code&gt;GEO&lt;/code&gt; (which is no longer a compound float value, but a url).&lt;/p&gt;

&lt;h2&gt;iCalendar 2.0&lt;/h2&gt;

&lt;p&gt;iCalendar 2.0 largely follows the same rules as vCard 4.0, but commas and
semi-colons &lt;em&gt;must&lt;/em&gt; be esacped, unless they are used as a delimiter.&lt;/p&gt;

&lt;p&gt;Semi-colons are used as a delimiter in &lt;code&gt;REQUEST-STATUS&lt;/code&gt;, &lt;code&gt;RRULE&lt;/code&gt;, &lt;code&gt;GEO&lt;/code&gt; and
&lt;code&gt;EXRULE&lt;/code&gt;, every other property uses commas.&lt;/p&gt;

&lt;h2&gt;rfc6868&lt;/h2&gt;

&lt;p&gt;One major flaw in all the above specs was that it was not possible to encode
just any value as a parameter. Newlines are not allowed, and in no case can
you encode a double-quote.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://tools.ietf.org/html/rfc6868"&gt;rfc6868&lt;/a&gt; updates both iCalendar 2.0 and vCard 4.0 to use caret (&lt;code&gt;^&lt;/code&gt;) as
an escape character. To write a double quote, use &lt;code&gt;^&amp;#39;&lt;/code&gt;, to encode a newline
use &lt;code&gt;^n&lt;/code&gt; and to encode a caret, use &lt;code&gt;^^&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;The hard part&lt;/h2&gt;

&lt;p&gt;A simple generic parser is with this information simply out of the window,
not only will my parser have to be aware which document it&amp;#39;s parsing, it will
also have to make individual decisions based on which property it&amp;#39;s parsing.&lt;/p&gt;

&lt;p&gt;Researching and listing these rules helped, and I hope it&amp;#39;s also helpful for
a future implementor. &lt;/p&gt;

&lt;p&gt;It&amp;#39;s important to be strict in generating these formats, but 
considering the complexity of these rules, it&amp;#39;s extremely likely other
software has bugs when generating these (and they do! a lot!) any parser needs
to be able to handle these mistakes and attempt to make logical decisions
based on what likely the intention was.&lt;/p&gt;

&lt;h2&gt;Found mistakes?&lt;/h2&gt;

&lt;p&gt;You can fork this post or easily &lt;a href="https://github.com/evert/evert.github.com/blob/master/_posts/2013/2013-05-10-escaping-in-vcards-and-icalendar.md"&gt;make edits of this post on Github&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/_wa9IKHQyz8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//escaping-in-vcards-and-icalendar</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//sabredav-acquired-by-fruux</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/ChJN3cIgoJo/sabredav-acquired-by-fruux" />
    <title>SabreDAV acquired by fruux</title>
    <updated>2013-05-02T15:58:42Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;div style="float: right; with: 210px; text-align: center"&gt;

    &lt;img src="http://evertpot.com/resources/files/logos/fruux_logo.png" style="padding-bottom: 20px" /&gt;&lt;br/&gt;
    &lt;img src="http://evertpot.com/resources/files/logos/sabredav_200x60.png" /&gt;

&lt;/div&gt;

&lt;p&gt;Last week we have finished the talks to transfer ownership of the &lt;a href="http://code.google.com/p/sabredav"&gt;SabreDAV&lt;/a&gt;
project to &lt;a href="https://fruux.com/"&gt;fruux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been working at fruux as a lead-dev for some time now, and SabreDAV is
really at the core of everything we do, so this was a logical and inevitable
choice.&lt;/p&gt;

&lt;p&gt;To me it&amp;#39;s an important step. SabreDAV has been one of the very little things
that have remained consistent in my life. This validates my work from the last
6 years a bit. In another way it feels a bit like I&amp;#39;m letting go something
that&amp;#39;s very important and personal.&lt;/p&gt;

&lt;p&gt;However, I&amp;#39;ll still be running the project so in reality the change for me
personally is not that big :).&lt;/p&gt;

&lt;h2&gt;What&amp;#39;s SabreDAV?&lt;/h2&gt;

&lt;p&gt;SabreDAV is an open-source project that I&amp;#39;ve started all the way 2007. It
allows you to write &lt;a href="http://en.wikipedia.org/wiki/WebDAV"&gt;WebDAV&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/CalDAV"&gt;CalDAV&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/CardDAV"&gt;CardDAV&lt;/a&gt; servers in PHP.
These three technologies allow you to do file, calendar and addressbook
syncing.&lt;/p&gt;

&lt;p&gt;A few years ago steam really picked up, and it changed from the hobby project
that it was back then, to something I could actually make a living off by
doing consulting.&lt;/p&gt;

&lt;p&gt;In 2012 I&amp;#39;ve took it one step further, and teamed up with fruux to build a
commercial product around SabreDAV.&lt;/p&gt;

&lt;h2&gt;What will change?&lt;/h2&gt;

&lt;p&gt;Small stuff really. The GitHub urls have changed. The new project pages are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/fruux/sabre-dav"&gt;https://github.com/fruux/sabre-dav&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fruux/sabre-vobject"&gt;https://github.com/fruux/sabre-vobject&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fruux/sabre-xml"&gt;https://github.com/fruux/sabre-xml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A bigger change is that fruux will now be the official go-to place for
commercial support. I feel this will strengthen the SabreDAV project,
especially for the potential users that are into that sort of thing.&lt;/p&gt;

&lt;p&gt;It also means that getting a new website is in the cards :). The current one
has passed it&amp;#39;s expiry date.&lt;/p&gt;

&lt;h2&gt;Does this mean SabreDAV will go closed-source?&lt;/h2&gt;

&lt;p&gt;No. I would never let this happen. SabreDAV will remain as open source as it
has always been, and we also don&amp;#39;t intend on making it crippleware.&lt;/p&gt;

&lt;p&gt;The BSD license in place today is very liberal, and I feel that it&amp;#39;s exactly
this that has allowed many projects and businesses to adopt it. Taking that
away would not only damage the project, it would also feel ethically wrong.&lt;/p&gt;

&lt;p&gt;However, SabreDAV is primarily a library, suitable for integration into other
systems. We&amp;#39;re definitely looking into the possibility of offering a more
complete package, such as a standalone server with solid management
interfaces.&lt;/p&gt;

&lt;h2&gt;Thanks!&lt;/h2&gt;

&lt;p&gt;Thanks everyone for your continued support, pull requests and relying on
SabreDAV for your projects :). It&amp;#39;s the best reward, really.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re interested, also check out the announcement on the &lt;a href="http://blog.fruux.com/2013/05/02/fruux-acquires-sabredav/"&gt;fruux blog&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/ChJN3cIgoJo" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//sabredav-acquired-by-fruux</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//a-new-blog</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/0lf46QKp-Gw/a-new-blog" />
    <title>A new blog!</title>
    <updated>2013-04-29T20:53:11Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I just launched a new version of my blog, and you&amp;#39;re looking at it :). I&amp;#39;ve
went through a number of platforms, most recently &lt;a href="http://habarsproject.org/en/"&gt;habari&lt;/a&gt;, which I still
have a lot of love for.&lt;/p&gt;

&lt;p&gt;But my installation was going rapidly out of date, was becoming very slow due
to using Sqlite as a backend, and most of all, I wanted to use &lt;a href="https://github.com/evert/evert.github.com/tree/master/_posts"&gt;GitHub&lt;/a&gt; to
store my posts so everyone can make edits.&lt;/p&gt;

&lt;p&gt;So I settled on using &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, hosted on &lt;a href="http://pages.github.com/"&gt;GitHub pages&lt;/a&gt;. Biggest
drawback: it&amp;#39;s all 100% static, so I had to use &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; to enable comments.
Don&amp;#39;t really like the idea of someone else owning my precious, precious data,
but alas… I&amp;#39;m in the &amp;#39;cloud services business&amp;#39; myself, and you gotta practice
what you preach.&lt;/p&gt;

&lt;p&gt;The first responses have been an overwhelming &amp;quot;weren&amp;#39;t you able to find a
better template anywhere?&amp;quot;. I&amp;#39;m obviously not much a visual artist myself, so
I had no problem with the concept. But it&amp;#39;s hard to find solid minimalistic
designs, and I really wanted a strong focus on actual content, and a great
mobile experience, so I&amp;#39;ve had some trouble finding things that matched those
objectives.&lt;/p&gt;

&lt;p&gt;Regardless, I&amp;#39;m quite happy with the look of embedded code, I mean… I think
this looks pretty sweet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nx"&gt;__DIR__&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;Sabre\XML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;XML\Reader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$reader&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atom.xml&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$reader&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you recognize the color scheme, indeed.. It&amp;#39;s the old vim &amp;#39;desert&amp;#39;
scheme ported to css.&lt;/p&gt;

&lt;p&gt;I also ditched the old domainname (rooftopsolutions.nl). I started
&amp;#39;Rooftop Solutions&amp;#39; when I was a 17-year old kid, over 10 years ago. This has
been my moniker ever since, but recently I officially &amp;#39;shut down&amp;#39; this
business when I moved from Münster, Germany to London.&lt;/p&gt;

&lt;p&gt;Figured I might as well start fresh and use my real name.&lt;/p&gt;

&lt;p&gt;While we&amp;#39;re on the topic of London. If you&amp;#39;re reading this and happen to also
live in London. If you&amp;#39;re up for some armchair philosophy or programming
discussions over a pint, I&amp;#39;m still pretty new here and in the market for
friends, so drop me a line!&lt;/p&gt;

&lt;p&gt;To conclude: I hope a new system will encourage me to do a better job at
blogging. I&amp;#39;ve been pretty shit last year, and this is my first post of 2013.&lt;/p&gt;

&lt;p&gt;I&amp;#39;m actually not sure how relevant blogs still are in 2013. There&amp;#39;s definitely
been a steep decline, but I enjoy the medium as a consumer and I reckon 10
years down the road older blog posts may still hold some relevancy, unlike
compressed twitter discussions with little context.&lt;/p&gt;

&lt;p&gt;Anyway, if you&amp;#39;re reading this, thanks for sticking with me. If you have any
criticisms or suggestions, I&amp;#39;d love to hear it!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/0lf46QKp-Gw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//a-new-blog</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//switching-to-php-54-on-os-x</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/AwpRsdelgiw/switching-to-php-54-on-os-x" />
    <title>Switching to PHP 5.4 on OS X</title>
    <updated>2012-12-16T16:53:22Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I like using OS X's built-in packages where possible, but unfortunately Apple is way behind with their PHP package, having it locked on 5.3.15. In the past I've seen people use tools like &lt;a href="http://www.mamp.info/en/index.html"&gt;Mamp&lt;/a&gt;, or &lt;a href="http://www.apachefriends.org/en/xampp.html"&gt;Xampp&lt;/a&gt; to provide this for them, but frankly I'm not a big fan of these tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mxcl.github.com/homebrew/"&gt;Homebrew&lt;/a&gt; provides a solution. Homebrew is OS X missing package manager, and it's an absolute great tool to work with. Getting started with it is a bit harder, as there's a few bigger dependencies you need, such as an up-to-date XCode installation. Once you've installed homebrew, it's a matter of running the following commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php
brew install php54 --with-mysql 
brew install php54-memcached
brew install php54-xdebug
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After that, open /etc/apache2/httpd.conf, and look for this line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="apache"&gt;&lt;span class="nb"&gt;LoadModule&lt;/span&gt; php5_module libexec/apache2/libphp5.so
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comment that out (with #) and add the following line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="apache"&gt;&lt;span class="nb"&gt;LoadModule&lt;/span&gt; php5_module &lt;span class="sx"&gt;/usr/local/Cellar/php54/5.4.12/libexec/apache2/libphp5.so&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After that, restart apache and things should just work. For more detailed instructions, take a look at the &lt;a href="https://github.com/josegonzalez/homebrew-php"&gt;documentation for homebrew-php&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Edit:&lt;/b&gt; On one Mac I had to first run "brew unlink libiconv" for PHP compilation to complete.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/AwpRsdelgiw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//switching-to-php-54-on-os-x</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//sabredav-18-released-with-namespaces</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/FGrsWhnU8a8/sabredav-18-released-with-namespaces" />
    <title>SabreDAV 1.8 released (with namespaces!)</title>
    <updated>2012-11-09T12:50:59Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p style="float: right"&gt;&lt;img alt="sabredav_200x60.png" src="http://evertpot.com/resources/files/logos/sabredav_200x60.png" width="197" height="60" /&gt;&lt;/p&gt;

&lt;p&gt;Only a month after 1.7 I just released &lt;a href="http://code.google.com/p/sabredav"&gt;SabreDAV 1.8&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Not that much changes since 1.7, except that I migrated all old prefix-style code to PHP 5.3 namespaces.&lt;/p&gt;

&lt;p&gt;This means that when you used to refer to a class as "Sabre_DAV_Server", this is now "Sabre\DAV\Server".&lt;/p&gt;

&lt;p&gt;So for the most part it's a simple mapping, but there were a few exceptions. While "Sabre_CardDAV_Backend_Abstract" is a valid PHP class name, "Sabre\CardDAV\Backend\Abstract" is not, because the last bit (abstract) is a keyword.&lt;/p&gt;

&lt;p&gt;I migrated all 343 classes and interfaces by hand(!). There are some tools out there that do the conversion automatically, but I didn't just want to apply a blanket patch, I wanted to make sure I 'use' the right classes and namespaces in a way that it made sense. Nothing beats the human touch.&lt;/p&gt;

&lt;h3&gt;Some links&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/evert/SabreDAV/blob/master/ChangeLog"&gt;Full changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/sabredav/wiki/Migrating1_7to1_8"&gt;Upgrade instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://packagist.org/packages/sabre/dav"&gt;Composer package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/sabredav/downloads/list"&gt;Zip download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/FGrsWhnU8a8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//sabredav-18-released-with-namespaces</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//markdown-output-for-phpdocumentor2</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/8vVoUN_9FIA/markdown-output-for-phpdocumentor2" />
    <title>Markdown output for PHPDocumentor2</title>
    <updated>2012-11-09T12:50:21Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I'm moving some &lt;a href="https://github.com/evert/SabreDAV"&gt;codebases&lt;/a&gt; to PHP namespaces, and as a result I could no longer use my crappy API documentation script.&lt;/p&gt;

&lt;p&gt;So, I needed a replacement, and with the help of &lt;a href="http://www.phpdoc.org/"&gt;PHPDocumentor&lt;/a&gt;, I was able to create a simple package that outputs github-compatible markdown documentation, based on &lt;a href="http://twig.sensiolabs.org/"&gt;twig&lt;/a&gt; templates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/evert/SabreDAV/wiki/Sabre-DAV-FS-Directory"&gt;Here's an example&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's not perfect yet, but hopefully useful for others in the same boat. You can find the project and setup instructions here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/evert/phpdoc-md"&gt;https://github.com/evert/phpdoc-md&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/8vVoUN_9FIA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//markdown-output-for-phpdocumentor2</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//sabredav-17-released</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/chVL1EL8C2Y/sabredav-17-released" />
    <title>SabreDAV 1.7 released</title>
    <updated>2012-10-06T12:47:38Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p style="float: right"&gt;&lt;img alt="sabredav_200x60.png" src="http://evertpot.com/resources/files/logos/sabredav_200x60.png" width="197" height="60" /&gt;&lt;/p&gt;

&lt;p&gt;I just released &lt;a href="http://code.google.com/p/sabredav"&gt;SabreDAV 1.7&lt;/a&gt;, after about 7 months of work. A lot of work has gone into optimizing operations, and a bunch of new features have been added. I also stopped supporting the PEAR packages, and fully migrated to &lt;a href="http://getcomposer.org/"&gt;composer&lt;/a&gt;. If you download the zip, the required composer files are actually shipped along.&lt;/p&gt;

&lt;p&gt;SabreDAV's uptake and contributions has also been very encouraging. This is especially nice since it solves such a niche problem :).&lt;/p&gt;

&lt;p&gt;Most relevant new stuff:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A bunch of REPORT queries got a lot faster. Especially some CalDAV-related requests can be exponentially faster. Some larger operations sped up from several minutes, to several seconds.&lt;/li&gt;
  &lt;li&gt;The VObject library has spun off into a separate project: &lt;a href="https://github.com/evert/sabre-vobject"&gt;sabre-vobject&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Experimental support for caldav-sharing and caldav-notifications.&lt;/li&gt;
  &lt;li&gt;Added a VCFExportPlugin, similar to the ICSExportPlugin.&lt;/li&gt;
  &lt;li&gt;Added a bunch of free-busy reports that now make it possible for iCal to use them.&lt;/li&gt;
  &lt;li&gt;Added support for a PATCH format for binary updates&lt;/li&gt;
  &lt;li&gt;Switched to using the Composer autoloader.&lt;/li&gt;
  &lt;li&gt;Stronger validation of both iCalendar and vCard files.&lt;/li&gt;
  &lt;li&gt;Support for Brief and Prefer: return-minimal headers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Some links&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/evert/SabreDAV/blob/master/ChangeLog"&gt;Full changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/sabredav/wiki/Migrating1_6to1_7"&gt;Upgrade instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://packagist.org/packages/sabre/dav"&gt;Composer package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/sabredav/downloads/list"&gt;Zip download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A big thank you to everybody involved!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/chVL1EL8C2Y" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//sabredav-17-released</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//sabre-vobject</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/3M0b0sYLnPk/sabre-vobject" />
    <title>New open source project: Sabre VObject</title>
    <updated>2012-08-08T08:13:35Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;Over the last little while I've been working at &lt;a href="https://fruux.com/"&gt;fruux&lt;/a&gt; on a new open source project: an &lt;a href="https://tools.ietf.org/html/rfc5545"&gt;iCalendar&lt;/a&gt;/&lt;a href="https://tools.ietf.org/html/rfc6350"&gt;vCard&lt;/a&gt; parser for PHP.&lt;/p&gt;

&lt;p&gt;Actually, the project has existed since 2010 as it's really a spin-off from &lt;a href="http://code.google.com/p/sabredav/"&gt;SabreDAV&lt;/a&gt;. I felt like the library could appeal to a wider audience, and benefit from a separate release schedule.&lt;/p&gt;

&lt;p&gt;The tool heavily makes use of PHP's magic object and array accessors, to provide an API quite similar to what &lt;a href="php.net/manual/en/book.simplexml.php"&gt;simplexml&lt;/a&gt; is for XML. In addition it contains features for parsing dates, expanding recurrence rules and automatically creating FREEBUSY reports.&lt;/p&gt;

&lt;p&gt;To start using it, simply check out the &lt;a href="https://github.com/evert/sabre-vobject"&gt;github project page&lt;/a&gt;. The readme contains a lot of documentation.&lt;/p&gt;

&lt;p&gt;Some things I want to add in the future:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Conversion tools for vcalendar 1.0, vcard 2.1, 3.0, 4.0, etc.&lt;/li&gt;
  &lt;li&gt;A relaxed parsing mode, that's a bit more forgiven to broken formats.&lt;/li&gt;
  &lt;li&gt;Convenience API's for formatting and parsing property values.&lt;/li&gt;
  &lt;li&gt;Validation for all property values and components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently no zip is provided. You should simply add it to your composer dependencies, as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="json"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;quot;require&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;quot;sabre/vobject&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;2.0.*&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I hope it's useful, and would love to hear your feedback!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/3M0b0sYLnPk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//sabre-vobject</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//oauth-20-and-the-road-to-hell</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/1-PyLvsJwbg/oauth-20-and-the-road-to-hell" />
    <title>OAuth 2.0 and the Road to Hell</title>
    <updated>2012-07-26T15:50:22Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I just came across a a very interesting blog post by Eran Hammer about &lt;a href="http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/"&gt;OAuth 2.0, its progress and its past&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're considering OAuth, it's worth a read. It also kind of reflects how I initially felt when I looked at the sea of OAuth 2-related documentation. My experience from tracking OpenID and DAV related standards is very similar. It is very, very hard for committees to create simple standards. I reckon the only way it can work, is with a trusted &lt;a href="https://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life"&gt;BDFL&lt;/a&gt;-type at the helm.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/1-PyLvsJwbg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//oauth-20-and-the-road-to-hell</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//ie10-and-dnt-header-update</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/AwXoYSEyR0Q/ie10-and-dnt-header-update" />
    <title>IE10 and DNT-header update</title>
    <updated>2012-06-07T16:30:11Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;A quick update, since my last post Microsoft has reverted it's decision to enable the DNT header by default. I sort of expected this, and I'm glad they did.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://arstechnica.com/information-technology/2012/06/ie-10s-do-not-track-default-dies-quick-death/"&gt;Ars Technica&lt;/a&gt; has the details.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/AwXoYSEyR0Q" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//ie10-and-dnt-header-update</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//ie10-will-enable-the-dnt-header-by-default-and-why-i-think-this-is-a-bad-thing</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/uXyV9JgRjcE/ie10-will-enable-the-dnt-header-by-default-and-why-i-think-this-is-a-bad-thing" />
    <title>IE10 will enable the DNT header by default, and why I think this is a bad thing.</title>
    <updated>2012-06-02T13:49:47Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;Microsoft recently &lt;a href="https://blogs.technet.com/b/microsoft_on_the_issues/archive/2012/05/31/advancing-consumer-trust-and-privacy-internet-explorer-in-windows-8.aspx?Redirected=true"&gt;announced&lt;/a&gt; that they will automatically enable the 'Do Not Track' header in Internet Explorer 10.&lt;/p&gt;

&lt;p&gt;The DNT header allows a user to opt-out of being tracked by websites. This was introduced by Firefox, and now also has support from Opera and Safari (but not Chrome).&lt;/p&gt;

&lt;p&gt;This header is a great feature. Before, the ad providers had to ask the user on their website to opt-out, and this actually was usually implemented using a Cookie.&lt;/p&gt;

&lt;p&gt;Although not every ad publisher supports the DNT header yet, it's gaining traction. However, publishers are not forced to comply with this. They do have to provide an opt-out mechanism to comply with many countries' laws, but there's nowhere stated this has to be done using the DNT header.&lt;/p&gt;

&lt;p&gt;Currently, browsers have the DNT setting disabled by default. If IE10 enables it, this means that IE10 users will have to explicitly opt-in to allow publishers to track them. This is very different from how Firefox and other browsers deal with this, as they've chosen for the explicit opt-out.&lt;/p&gt;

&lt;p&gt;I strongly suspect that publishers will feel that their tracking ability will now be severely diminished by supporting the header. Since they are not forced to support the DNT header, there will be much less of an incentive to start supporting it. They can just provide their own inferior cookie mechanism. I can even see some publishers that already support the DNT header reverse this decision.&lt;/p&gt;

&lt;p&gt;So while I commend Microsoft for putting the consumer first; If we want the DNT header to work, publishers must either want to support it, or must be forced to by law. Until the latter is the case, I hope Microsoft reverses this decision to ensure that the DNT header stays useful.&lt;/p&gt;

&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blog.mozilla.org/privacy/2012/05/31/do-not-track-its-the-users-voice-that-matters/"&gt;Mozilla privacy blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://blogs.technet.com/b/microsoft_on_the_issues/archive/2012/05/31/advancing-consumer-trust-and-privacy-internet-explorer-in-windows-8.aspx?Redirected=true"&gt;Microsoft Technet article&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://tools.ietf.org/html/draft-mayer-do-not-track-00"&gt;IETF proposal for the DNT header&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/uXyV9JgRjcE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//ie10-will-enable-the-dnt-header-by-default-and-why-i-think-this-is-a-bad-thing</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//new-http-status-codes</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/4dlEs_OZSO0/new-http-status-codes" />
    <title>New HTTP status codes</title>
    <updated>2012-05-04T20:44:14Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="http://tools.ietf.org/html/rfc6585"&gt;RFC 6585&lt;/a&gt; has been published quite recently. This document describes 4 new HTTP status codes.&lt;/p&gt;

&lt;p&gt;So in case you were wondering, yes.. HTTP is still evolving :), and these new statuses may be quite useful for developing your REST, or otherwise HTTP-based service. This post describes why they are important, and when you should use them.&lt;/p&gt;

&lt;h3&gt;428 Precondition Required&lt;/h3&gt;

&lt;p&gt;A precondition is something a client can send along with a HTTP request. This condition needs to be met in order for the request to complete.&lt;/p&gt;

&lt;p&gt;A good example is the If-None-Match header, which is often used along with GET requests. If the If-None-Match is specified, the client can request to &lt;em&gt;only&lt;/em&gt; receive the response if the ETag changed.&lt;/p&gt;

&lt;p&gt;Another example of a precondition, is the similar 'If-Match' header. An If-Match header is usually sent along with PUT requests to indicate to only update the resource if it &lt;em&gt;hasn't changed&lt;/em&gt;. This is useful if multiple clients are using a HTTP-based service, and they want to make sure they are not overwriting each others contents.&lt;/p&gt;

&lt;p&gt;Using the &lt;a href="http://tools.ietf.org/html/rfc6585#section-3"&gt;428 Precondition Required&lt;/a&gt; status, the server can now indicate that the client *must* send along one of those headers to perform the request. This is effectively a way for the server to force clients to prevent this 'lost update' problem.&lt;/p&gt;

&lt;h3&gt;429 Too Many Requests&lt;/h3&gt;

&lt;p&gt;This status code is useful in cases where you want to limit the amount of requests a client may want to do on your API (also known as rate limiting).&lt;/p&gt;

&lt;p&gt;In the past different status codes have been used, such as '509 Bandwidth Limit Exceeded'. &lt;a href="https://dev.twitter.com/docs/error-codes-responses"&gt;Twitter uses 420&lt;/a&gt; for some stuff (which is an unused status code). Thus it was important enough to give it it's own code.&lt;/p&gt;

&lt;p&gt;So if you limit the number of requests clients may do on your server, &lt;a href="http://tools.ietf.org/html/rfc6585#section-4"&gt;429 Too Many Requests&lt;/a&gt; is the way to go. Include a 'Retry-After' response header to indicate to a client when they are allowed to make requests again.&lt;/p&gt;

&lt;h3&gt;431 Request Header Fields Too Large&lt;/h3&gt;

&lt;p&gt;I was surprised to see that this was a common enough usecase to warrant it's own status code, but here it is!&lt;/p&gt;
&lt;p&gt;In a case where a client is sending a HTTP request header that's too big, the server can respond with &lt;a href="http://tools.ietf.org/html/rfc6585#section-5"&gt;431 Request Header Fields Too Large&lt;/a&gt; to indicate exactly that.&lt;/p&gt;

&lt;p&gt;I have no idea why they skipped over 430 though. I tried to search around, but couldn't quite find the reasoning. My best guess is that a lot of people may have mistyped '403 Forbidden' as '430 Forbidden', and they wanted to avoid complications. If you know, let me know!&lt;/p&gt;

&lt;h3&gt;511 Network Authentication Required&lt;/h3&gt;

&lt;p&gt;This status code is very interesting to me. You will not have to deal with this if you're writing a server, but it can be important if you're writing a (desktop) HTTP client.&lt;/p&gt;

&lt;p&gt;If you move around with your laptop or smartphone a lot, you may have noticed that a lot of public wifi services now require you to accept their license agreement, or just log in before the web works.&lt;/p&gt;

&lt;p&gt;This is generally done by intercepting the HTTP traffic and presenting a redirect and login when the user tries to access the web. Quite nasty, but that's the way it is.&lt;/p&gt;

&lt;p&gt;Using these 'intercepting' clients can have some nasty side effects. There are two great examples mentioned in the RFC to illustrate this.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you hit a website before logging in, the network device intercepts the first request. These devices also tend to have a 'favicon.ico' stored. After logging in, you'll notice that the favicon is now cached for the website you tried to visit, and it may follow you around for quite some time.&lt;/li&gt;
  &lt;li&gt;If a client uses HTTP requests to find documents, the 'network' may respond with a login page, instead of the json or other document you expected. Your client may (in error) assume it's a 'normal' response and use that instead. This can put clients in a broken or irrecoverable state. I've noticed this in real life a few times working on a CalDAV system as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; So to fix this &lt;a href="http://tools.ietf.org/html/rfc6585#section-6"&gt;511 Network Authentication Required&lt;/a&gt; is introduced.&lt;/p&gt;

&lt;p&gt;So if you write an application that runs on an desktop or phone and use HTTP, you should ideally check for this HTTP response code. In a way, it simply means that a network is not yet available and you should pretty much ignore anything coming back until it is. You could even provide the user with the returned login page, like iOS and OS X 10.7 do.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/4dlEs_OZSO0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//new-http-status-codes</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//new-full-time-gig-at-fruux</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/RdYp5Qoyw1A/new-full-time-gig-at-fruux" />
    <title>New full-time gig at fruux</title>
    <updated>2012-03-21T13:44:50Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p style="float: left; padding: 0 10px 10px 0"&gt;
&lt;a href="https://fruux.com"&gt;&lt;img alt="fruux_logo.png" src="http://evertpot.com/resources/files/logos/fruux_logo.png" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;I've been at this for a bit, but now it's official: I'm now based in Münster, and working at &lt;a href="https://fruux.com/"&gt;fruux&lt;/a&gt; as a co-founder / tech-lead.&lt;/p&gt;

&lt;p&gt;The feeling of having this amount of control over a product is great. We've also recently got funded from &lt;a href="http://www.high-tech-gruenderfonds.de/"&gt;High-Tech Gründerfonds&lt;/a&gt; and &lt;a href="http://www.netstart-venture.de/"&gt;netSTART Venture&lt;/a&gt; and moved into a new office so things are indeed pretty serious. We have some flexibility to focus on making a great product, in what we feel is 'the right way' (whatever that may mean). It will be an exciting time :)&lt;/p&gt;

&lt;p&gt;So if you were looking at &lt;a href="http://code.google.com/p/sabredav"&gt;SabreDAV&lt;/a&gt;, and needed something way easier to use, &lt;a href="https://fruux.com/"&gt;fruux&lt;/a&gt; may be a good option. Regardless, for SabreDAV the future is bright too, as there will be plenty of cross-pollination.&lt;/p&gt;

&lt;p&gt;Also, if you're looking for a job, or know someone who's looking: &lt;a href="mailto:evert@fruux.com"&gt;drop me a line&lt;/a&gt;! We're in the market for good PHP and front-end developers.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/RdYp5Qoyw1A" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//new-full-time-gig-at-fruux</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//content-security-policy-update</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/sFQIAd0e2tQ/content-security-policy-update" />
    <title>Content Security Policy update</title>
    <updated>2012-02-06T22:57:04Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;A quick update about CSP. Browsers are well on their way to all adopt the &lt;a href="https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html"&gt;specification.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An early draft was already adopted by Firefox 4, and I just found out that it's also working in Chrome, Safari and IE 10.&lt;/p&gt;

&lt;p&gt;IE10 and FF are using the following header:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;X-Content-Security-Policy: default-src &amp;#39;self&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While Safari and Chrome use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;X-Webkit-CSP: default-src &amp;#39;self&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When the specification is finalized, the X- will be dropped, and it will simply be 'Content-Security-Policy'.&lt;/p&gt;

&lt;h3&gt;A call for support&lt;/h3&gt;

&lt;p&gt;Hi Developers! Start implementing this feature! It's important for the future and security of the web. The web's biggest vulnerability, from what I understand, is still &lt;a href="https://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt;, but if people start to properly implement CSP, XSS can effectively be a thing from the past.&lt;/p&gt;

&lt;p&gt;So even if you don't want to risk using CSP on a production environment, at least consider adding the headers in your development environment. It will force you to write better code, by not embedding javascript directly into the HTML source. By considering this right now, you will also make it much easier if you do decide to adopt CSP at some point in the future.&lt;/p&gt;

&lt;p&gt;I'm implementing CSP full-on in a new project, and one of the things I've noticed already is that some of the javascript we embed from 3rd parties use eval() and inline html events (onclick &amp; friends). For the sake of security we will most likely decide to only use 3rd party code if they are indeed CSP-compatible.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/sFQIAd0e2tQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//content-security-policy-update</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//silex-routing-issues</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/AjvGf2eSbKU/silex-routing-issues" />
    <title>Silex routing issues</title>
    <updated>2012-01-25T14:03:52Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I've had a bit of an interest for micro frameworks, and for a new project I'm working on I decided on &lt;a href="http://silex.sensiolabs.org/"&gt;Silex&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've started hitting some nasty walls though, the routing system seems inconsistent and intuitive. To better explain, some examples.&lt;/p&gt;

&lt;p&gt;I have a default route that acts as a fallback. This default route simply includes a static template (if it exists). This route looks something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/{name}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
   &lt;span class="c1"&gt;// If the page exists, render it, otherwise throw 404&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Simple enough. We also want to match the root of the application (the index, basically). This can be easily done with a default value:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/{name}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
   &lt;span class="c1"&gt;// If the page exists, render it, otherwise throw 404&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first problem arose here. The existing site used urls all ending with a slash (/contact/ for example). But these routes won't match that. These routes will match /contact, but not /contact/. This can be fixed though. If your routes end with a slash, silex will be able to match both:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/{name}/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
   &lt;span class="c1"&gt;// If the page exists, render it, otherwise throw 404&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The preceding example will match /contact/. If the user went to /contact instead, it will redirect the user back to /contact/. I would have preferred the opposite in this case, but fair enough. This route will however no longer match the root of the website, so we need to refactor this a bit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$staticHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// If the page exists, render it, otherwise throw 404&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/{name}/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$staticHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$staticHandler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$staticHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that the last example could have been structured a bit nicer, but you get the point.&lt;/p&gt;

&lt;p&gt;The first real problem arose when trying to use 'ControllerProviders, or ControllerCollections'. These objects can be responsible for a sub-tree. An example of how we want to use this is have a single class be responsible for a /blog/ section of the site. This would be done with something like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/blog/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MySite\Controller\Blog&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/AjvGf2eSbKU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//silex-routing-issues</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//rfc-search-provider</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/GHnLk5vI-FU/rfc-search-provider" />
    <title>RFC search provider</title>
    <updated>2012-01-21T18:10:08Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;In my work I have to look a lot at the IETF rfc documents, and I always have to jump through a bunch of hoops to find the document I want. Google often links me to the text version, and often I'm looking at obsoleted versions of documents when a new rfc has been published.&lt;/p&gt;

&lt;p&gt;Well, so I created a simple &lt;a href="https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox"&gt;OpenSearch provider&lt;/a&gt; to solve this. It does exactly what I need, and I only tested in Firefox. If it's useful to anyone else, you can add the provider from &lt;a href="http://rfcsearch.phpfogapp.com/"&gt;rfcsearch.phpfogapp.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It works with a simple hardcoded list of known keywords, and it will fall back to "Google's I'm feeling lucky" if it doesn't know the keyword. Feel free to &lt;a href="https://github.com/evert/rfcsearch"&gt;fork it&lt;/a&gt; or laugh at my source code.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/GHnLk5vI-FU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//rfc-search-provider</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//my-php-advent-article</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/KD_itu7sVQY/my-php-advent-article" />
    <title>My PHP Advent article</title>
    <updated>2011-12-06T21:31:56Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;
My &lt;a href="http://phpadvent.org/2011/dates-and-times-by-evert-pot"&gt;PHP Advent&lt;/a&gt; article just got published. It's a list of best practices around dealing with dates and times in PHP. Have a read and tell me what you think. Also, be sure to follow &lt;a href="https://twitter.com/#!/phpadvent"&gt;@phpadvent&lt;/a&gt; or &lt;a href="http://feeds.feedburner.com/phpadvent"&gt;subscribe&lt;/a&gt;.
&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/KD_itu7sVQY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//my-php-advent-article</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//phpincludes</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/RVE_cDnNYjY/phpincludes" />
    <title>PHP Includes file generator</title>
    <updated>2011-11-29T15:55:58Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;While profiling &lt;a href="http://code.google.com/p/sabredav/"&gt;SabreDAV&lt;/a&gt;, I noticed a few times more than half of the request time was spent in the autoloader.&lt;/p&gt;

&lt;p&gt;So instead of autoloading, now I prefer to unconditionally include every file for each package (there are 5 packages). For a while I manually maintained these files manually, but a while back I automated this process.&lt;/p&gt;

&lt;p&gt;This is how you run it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;phpincludes . includes.php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will generate a file such as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="c1"&gt;// Begin includes&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nx"&gt;__DIR__&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/Interface1.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nx"&gt;__DIR__&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/Class1.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nx"&gt;__DIR__&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/Class2.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nx"&gt;__DIR__&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/Class3.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// End includes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can edit everything before "// Begin includes" and after "// End includes". Subsequent edits will only replace the lines in between those comments.&lt;/p&gt;

&lt;p&gt;The script will automatically expand classes and interface dependencies and load them in the correct order. It also has support for a PHP 5.2-compatible syntax (dirname(__FILE__) instead of __DIR__).&lt;/p&gt;

&lt;p&gt;If you like it, head over to &lt;a href="https://github.com/evert/PHPIncludes"&gt;github&lt;/a&gt;, or install it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;pear channel-discover pear.sabredav.org
pear install sabredav/PHPIncludes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/RVE_cDnNYjY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//phpincludes</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//moved-sabredav-to-github</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/aClJ4vLgpgc/moved-sabredav-to-github" />
    <title>Moved SabreDAV to Github</title>
    <updated>2011-10-10T15:13:50Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;I've finally taken the plunge and moved the &lt;a href="http://code.google.com/p/sabredav/"&gt;SabreDAV&lt;/a&gt; source from Google code to &lt;a href="https://github.com/evert/SabreDAV"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The main reason is that I'm hoping that people are more likely to fork and contribute. This was possible as well on googlecode, but I think people had a bit more trouble getting used to the feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; is still the best source control system, but I feel switching to Git was worth it, solely for GitHub.&lt;/p&gt;

&lt;p&gt;You can find the source at &lt;a href="https://github.com/evert/SabreDAV"&gt;https://github.com/evert/SabreDAV&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/aClJ4vLgpgc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//moved-sabredav-to-github</feedburner:origLink></entry>
  
  <entry>
    <id>http://evertpot.com//timezone-database-closed-down</id>
    <link type="text/html" rel="alternate" href="http://feedproxy.google.com/~r/bijsterespoor/~3/UPJIWgTI8Zo/timezone-database-closed-down" />
    <title>Timezone database closed down</title>
    <updated>2011-10-07T11:53:39Z</updated>
    <author>
      <name>Evert Pot</name>
      <email>evert@rooftopsolutions.nl</email>
    </author>
    <content type="html">&lt;p&gt;Interesting news today. The Olson database, which is used in countless operating systems and other software (including PHP) has been shut down due to a Copyright claim.&lt;/p&gt;

&lt;p&gt;Details, which I won't repeat here can be found on &lt;a href="http://blog.joda.org/2011/10/today-time-zone-database-was-closed.html?m=1"&gt;Stephen Colbourne's blog.&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bijsterespoor/~4/UPJIWgTI8Zo" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://evertpot.com//timezone-database-closed-down</feedburner:origLink></entry>
  

</feed>
