<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on TBNL</title>
    <link>https://www.tibobeijen.nl/post/</link>
    <description>Recent content in Posts on TBNL</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 15 May 2026 05:00:00 +0100</lastBuildDate>
    
	<atom:link href="https://www.tibobeijen.nl/post/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Individual Thought Patterns: &#34;Going caveman&#34; and &#34;you do you&#34;</title>
      <link>https://www.tibobeijen.nl/2026/05/15/individual-thought-patterns-caveman-technology-and-you-do-you/</link>
      <pubDate>Fri, 15 May 2026 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2026/05/15/individual-thought-patterns-caveman-technology-and-you-do-you/</guid>
      <description>During my weekly long runs I listen to podcasts. Mostly about tech or music, and a couple of months ago I listened to an episode that contained some quotes that kept resonating: &amp;ldquo;Going caveman&amp;rdquo; and &amp;ldquo;you do you&amp;rdquo;. Let&amp;rsquo;s unpack what they mean in the context of working in tech, the AI-ification of everything, and the state of the world today1.
A bit of background The podcast I&amp;rsquo;m referring to is &amp;lsquo;The Garza Podcast&#39;.</description>
    </item>
    
    <item>
      <title>Introducing the Zen of DevOps</title>
      <link>https://www.tibobeijen.nl/2026/02/23/introducing-the-zen-of-devops/</link>
      <pubDate>Mon, 23 Feb 2026 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2026/02/23/introducing-the-zen-of-devops/</guid>
      <description>Introduction Over the past ten years or so, my role has gradually shifted from software to platforms. More towards the &amp;lsquo;ops&amp;rsquo; side of things, but coming from a background that values APIs, automation, artifacts and guardrails in the form of automated tests.
And I found out that a lot of best practices from software engineering can be adapted and applied to modern ops practices as well.
DevOps in a nutshell really: Bridging the gap between Dev and Ops.</description>
    </item>
    
    <item>
      <title>Reflecting on certification and Golden Kubestronaut</title>
      <link>https://www.tibobeijen.nl/2025/12/17/reflecting-on-certification-golden-kubestronaut/</link>
      <pubDate>Wed, 17 Dec 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/12/17/reflecting-on-certification-golden-kubestronaut/</guid>
      <description>Recently I passed the last of the exams that grants the Golden Kubestronaut title. And it was quite the journey.
About fifteen years ago, I dabbled a bit in certification via PHP and Zend. Back then, PHP tried to be corporate Java, including the design patterns and certifications that come with it. And I went along! Let&amp;rsquo;s say it has been a phase, in which I built quite some monstrosities 1.</description>
    </item>
    
    <item>
      <title>What do the C4 architecture model and blastbeats have in common?</title>
      <link>https://www.tibobeijen.nl/2025/04/15/what-do-c4-architecture-model-and-blastbeats-have-in-common/</link>
      <pubDate>Tue, 15 Apr 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/04/15/what-do-c4-architecture-model-and-blastbeats-have-in-common/</guid>
      <description>Past Friday I had a focus day, hardly any meetings and time to do some scheduled deep work. Also, Fridays in general are &amp;lsquo;release day&amp;rsquo;, which always means anticipating on new album drops1. This Friday saw the luxury of two excellent new albums being released: Biographyte by Cytotoxin and Aspiral by Epica. Both albums where &amp;lsquo;a lot is happening&amp;rsquo;.
For a bit of context: I work as a consultant, architect, engineer and everything in between in tech.</description>
    </item>
    
    <item>
      <title>FastFlowConf recap</title>
      <link>https://www.tibobeijen.nl/2025/04/04/fastflowconf-recap/</link>
      <pubDate>Fri, 04 Apr 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/04/04/fastflowconf-recap/</guid>
      <description>Introduction Past week, I attended FastFlowConf, &amp;ldquo;a Team Topologies Conference&amp;rdquo;.
As the Team Topologies site describes itself:
 Team Topologies is the result of years of research into how successful leaders design team-of-teams organizations delivering business outcomes through technology
 Team Topologies, to me, feels like a logical evolution of Agile. Most practices described in the Agile principles, take a team as a starting point. When multiple teams are involved, organizing those to work together can become challenging.</description>
    </item>
    
    <item>
      <title>East, west, north, south: How to fix your local cluster routes</title>
      <link>https://www.tibobeijen.nl/2025/03/24/east-west-north-south-fix-local-cluster-routes/</link>
      <pubDate>Mon, 24 Mar 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/03/24/east-west-north-south-fix-local-cluster-routes/</guid>
      <description>Introduction Recently I needed to test a Keycloak upgrade. This required me to deploy both the new Keycloak version and a sample OIDC application on my local Kubernetes setup. And it pointed me to a thing I kept postponing:
 Improve my local development DNS, routing and TLS setup
 The challenge Until recently, I used urls like keycloak.127.0.0.1.nip.io:8443. This points to 127.0.0.1 port 8443 which forwards to a local k3d cluster.</description>
    </item>
    
    <item>
      <title>Study tips for becoming a Kubestronaut</title>
      <link>https://www.tibobeijen.nl/2025/02/12/study-tops-for-becoming-a-kubestronaut/</link>
      <pubDate>Wed, 12 Feb 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/02/12/study-tops-for-becoming-a-kubestronaut/</guid>
      <description>Introduction At KubeCon 2024 in Paris, CNCF introduced the Kubestronaut program. Quoting:
 The Kubestronaut program recognises community leaders who have consistently invested in their ongoing education and grown their skill level with Kubernetes.
  Individuals who have successfully passed every CNCF’s Kubernetes certifications – CKA, CKAD, CKS, KCNA, KCSA – will receive the title of “Kubestronaut”
 From October 2024 through Januari 2025 I completed the five exams. Overal, I think about 2/3 of my preparation time has been spent on CKS alone.</description>
    </item>
    
    <item>
      <title>Infra pull requests that make a DIFFerence</title>
      <link>https://www.tibobeijen.nl/2025/01/10/infra-pull-requests-that-make-a-difference/</link>
      <pubDate>Fri, 10 Jan 2025 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2025/01/10/infra-pull-requests-that-make-a-difference/</guid>
      <description>Introduction These days, applying Infrastructure as Code (IaC) changes is typically automated by using pipelines or GitOps. This Infrastructure Lifecycle shares some characteristics with the Software Development Lifecycle: It starts with defining a goal, which is then followed by authoring of code, checks and tests, and a code review step.
However, there are also some aspects that make the deployment of infrastructure as code quite different from regular software. These challenges bring risks, which tend to slow teams down.</description>
    </item>
    
    <item>
      <title>Working in News Tech: MH17, an impressive day to remember</title>
      <link>https://www.tibobeijen.nl/2024/07/10/news-tech-mh17-an-impressive-day-to-remember/</link>
      <pubDate>Wed, 10 Jul 2024 15:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2024/07/10/news-tech-mh17-an-impressive-day-to-remember/</guid>
      <description>When dealing with traffic of a news site like NU.nl, one quickly learns to expect the unexpected: You know there will be traffic surges, but you can not predict when they will be.
This is quite unlike, for example, ecommerce where the holiday season can be predicted. Or big event ticket sales, where the moment tickets will start to sell, is known beforehand. With breaking news, however, the moment is sudden, and the traffic surge typically is in the ballpark of &amp;lsquo;times 4, within 4 minutes&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>How a LEGO restroom sign beats every enterprise software out there</title>
      <link>https://www.tibobeijen.nl/2024/05/24/how-a-lego-restroom-sign-beats-every-enterprise-software-out-there/</link>
      <pubDate>Fri, 24 May 2024 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2024/05/24/how-a-lego-restroom-sign-beats-every-enterprise-software-out-there/</guid>
      <description>Introduction To me, ever since occasionally needing to use it, &amp;lsquo;enterprise software&amp;rsquo; is the definition of software that makes people feel unhappy. Except perhaps for the people that make money of it. It miraculously gets something done, despite its horrendous user experience, in the process sapping all energy of whoever is forced to use it1.
So, when I recently saw this tweet by Jason Fried, this part resonated well with me:</description>
    </item>
    
    <item>
      <title>Terraform and Ansible were already Terrible in 2016</title>
      <link>https://www.tibobeijen.nl/2024/04/30/terrible-and-ansible-were-already-terrible-in-2016/</link>
      <pubDate>Tue, 30 Apr 2024 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2024/04/30/terrible-and-ansible-were-already-terrible-in-2016/</guid>
      <description>Introduction After IBM acquired Red Hat in 2019, it recently has acquired HashiCorp. So now Big Blue not only has Ansible in its portfolio, but also Terraform.
Tech articles and social media galore, and many people have found out that if you mix &amp;lsquo;Terraform&amp;rsquo; and &amp;lsquo;Ansible&amp;rsquo;, you end up with &amp;lsquo;Terrible&amp;rsquo;. Depending on your tech stack, it is a great combination: Terraform to provision cloud infrastructure, including servers. Ansible to configure those servers.</description>
    </item>
    
    <item>
      <title>12 Factor applications: 13 years later</title>
      <link>https://www.tibobeijen.nl/2024/04/24/12-factor-13-years-later/</link>
      <pubDate>Wed, 24 Apr 2024 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2024/04/24/12-factor-13-years-later/</guid>
      <description>Introduction In a presentation about CI/CD I gave recently, I briefly mentioned the 12 factor methodology. Somewhere along the lines of &amp;ldquo;You might find some good practices there&amp;rdquo;, and summarizing it as:
artifact configuration + --------------- deployment After the talk, a colleague of way back, came to me and said: &amp;ldquo;You were way too mild in suggesting it. It&amp;rsquo;s mandatory, people should follow those practices.&amp;quot;1
And yes, he was right. There are a lot of good practices to get from the 12 factor methodology.</description>
    </item>
    
    <item>
      <title>Why Kubernetes? Focus on the API, not the servers</title>
      <link>https://www.tibobeijen.nl/2024/01/19/why-kubernetes-api-not-servers/</link>
      <pubDate>Fri, 19 Jan 2024 08:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2024/01/19/why-kubernetes-api-not-servers/</guid>
      <description>A new year: Reflection time This article originally appeared on the Fullstaq blog
As we have moved from 2023 to 2024, it is a good moment to reflect. Undoubtedly, one of the biggest topics of the past year was the rise of AI. But somewhat closer to my day-to-day job, there were some events that stood out:
 The Amazon Prime move from serverless microservices to &amp;lsquo;monolith&amp;rsquo; blogpost. Which was followed by a lot of clickbait lukewarm takes and &amp;ldquo;my tech stack is better than yours&amp;rdquo; type of discussions.</description>
    </item>
    
    <item>
      <title>Shifting left using feature deployments</title>
      <link>https://www.tibobeijen.nl/2023/07/14/shifting-left-using-feature-deployments/</link>
      <pubDate>Fri, 14 Jul 2023 08:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2023/07/14/shifting-left-using-feature-deployments/</guid>
      <description>Introduction Feature deployments can help teams to validate work in progress, and test pull requests before merging. This article will address some things to consider when setting up feature deployments. Furthermore, an implementation in use at NU.nl based on AWS, Kubernetes, Helm and Akamai, will be described.
  Parallel tracks. Source: Bing Image Creator   In this article:
 Introduction The use case for feature deploys Feature deployments: An anti-pattern?</description>
    </item>
    
    <item>
      <title>PodDisruptionBudget confused: Labels matter.</title>
      <link>https://www.tibobeijen.nl/2023/04/03/pdb-labels-fixing/</link>
      <pubDate>Mon, 03 Apr 2023 09:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2023/04/03/pdb-labels-fixing/</guid>
      <description>Introduction Recently we were performing an EKS upgrade. We use managed node groups, and updates have become routine without any surprises.
And then, hardly a surprise: Surprise! 1
 PodEvictionFailure: Reached max retries while trying to evict pods from nodes in node group ng_a_on_demand
 It is worth noting that nothing breaks because of this. The node group update procedure is basically a blue/green deployment type of process:
 EKS adds new nodes It drains old nodes and moves pods to the new ones Finally, it terminates the old nodes  In this particular case, however, it waits for old nodes to drain, hits a snag, moves pods back to the old nodes, and exits with a &amp;lsquo;Computer says no&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>Kubernetes Community Days 2023 Amsterdam</title>
      <link>https://www.tibobeijen.nl/2023/03/02/kubernetes-community-days-2023-ams/</link>
      <pubDate>Thu, 02 Mar 2023 15:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2023/03/02/kubernetes-community-days-2023-ams/</guid>
      <description>Introduction The last time Kubernetes Community Day took place in the Netherlands was September 2019. Then the pandemic turned the world upside down, and suddenly we find ourselves in February 2023 for the next event.
In those three years, the event became bigger, doubling in all aspects: The number of days (2), number of tracks (2), and audience now totaling 450 attendees. So either people fancy in-person events more than ever, or Kubernetes adoption simply continued growing.</description>
    </item>
    
    <item>
      <title>Hackathon: Could we run NU.nl on LeafCloud sustainable hosting?</title>
      <link>https://www.tibobeijen.nl/2023/02/15/hackathon-hosting-nunl-on-leafcloud/</link>
      <pubDate>Wed, 15 Feb 2023 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2023/02/15/hackathon-hosting-nunl-on-leafcloud/</guid>
      <description>Introduction Once or twice a year, NU.nl organizes a hackathon, allowing its IT staff to dabble in new technology and pursue ideas, usually guided by several themes. 2023 kicked off with a hackathon having the themes &amp;lsquo;NU2030&amp;rsquo;, &amp;lsquo;NU.nl from scratch&amp;rsquo; and &amp;lsquo;A greener NU.nl&amp;rsquo;.
Mid-2022 I visited EdgeCase, a 1-day conference about running Kubernetes at the edge. One of the presentations was by LeafCloud, a hosting provider focusing on reducing the environmental impact of cloud computing by re-using the heat it generates.</description>
    </item>
    
    <item>
      <title>The mysterious case of the missing ECR image</title>
      <link>https://www.tibobeijen.nl/2022/12/23/the-mysterious-case-of-the-missing-ecr-image/</link>
      <pubDate>Fri, 23 Dec 2022 20:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2022/12/23/the-mysterious-case-of-the-missing-ecr-image/</guid>
      <description>ImagePullBackOff Recently we experienced a specific ECR production image being absent that really should not have been purged by our lifecycle hooks. It happened in two scenarios:
 EKS node replacement, new node can&amp;rsquo;t pull image. Rollback (we make mistakes). The rollback involved multiple images, all but this particular one were still present on ECR. As they should.  So far we&amp;rsquo;ve been lucky. The node replacement affected only one of multiple pods, leaving enough of them running.</description>
    </item>
    
    <item>
      <title>Edgecase 2022: Kubernetes at the edge</title>
      <link>https://www.tibobeijen.nl/2022/06/01/edgecase-2022/</link>
      <pubDate>Wed, 01 Jun 2022 08:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2022/06/01/edgecase-2022/</guid>
      <description>Edgecase 2022: Kubernetes at the edge Finally, after the pandemic abruptly changed every meetup and conference into a video conference, in-person events are possible again! The first conference I attended since early 2020 was Edgecase 2022, organized by Fullstaq and focusing on running Kubernetes at the edge.
This is not directly what we are doing or intend on doing, since we use AWS. Nevertheless, underlying techniques might still be applicable. Furthermore, it never hurts to look at things from a different perspective and it&amp;rsquo;s great to interact with peers that are equally enthusiast about the technology they use.</description>
    </item>
    
    <item>
      <title>EKS and the quest for IP addresses: Secondary CIDR ranges and private NAT gateways</title>
      <link>https://www.tibobeijen.nl/2022/02/09/eks-ips-secondary-cidr-private-natgw/</link>
      <pubDate>Wed, 09 Feb 2022 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2022/02/09/eks-ips-secondary-cidr-private-natgw/</guid>
      <description>EKS and its hunger for IP addresses Kubernetes allows running highly diverse workloads with similar effort. From a user perspective there&amp;rsquo;s little difference between running 2 pods on a node, each consuming 2 vCPU, and running tens of pods each consuming 0.05 vCPU. Looking at the network however, there is a big difference: Each pod needs to have a unique IP address. In most Kubernetes implementations there is a CNI plugin that allocates each pod an IP address in an IP space that is internal to the cluster.</description>
    </item>
    
    <item>
      <title>Terraform: Good plan = good apply</title>
      <link>https://www.tibobeijen.nl/2022/01/14/terraform-good-plan-good-apply/</link>
      <pubDate>Fri, 14 Jan 2022 13:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2022/01/14/terraform-good-plan-good-apply/</guid>
      <description>Recently I worked on some infrastructure changes that resulted in terraform plan showing more, and more impactful, changes than expected. Diving deeper, it appeared that a lot of the planned changes could be avoided by some preparations, resulting in a terraform apply with no impact at all.
  I love it when a terraform plan comes together. Source: PeteFarrow, via redbubble.com   Ordered lists and state manipulation First of all, Terraform for quite some time supports for_each, which is a more robust way to create multiple resources.</description>
    </item>
    
    <item>
      <title>Shifting Akamai to the left using Terraform</title>
      <link>https://www.tibobeijen.nl/2021/12/03/shift-left-akamai-terraform/</link>
      <pubDate>Fri, 03 Dec 2021 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2021/12/03/shift-left-akamai-terraform/</guid>
      <description>Recently we migrated our CDNs from Cloudfront to Akamai. We use Terraform for infrastructure as code (IaC) and luckily it supports Akamai as well. Since we had Cloudfront distributions for pretty much every environment, it served as a good moment to reflect on what we&amp;rsquo;ve taken for granted in the past years, especially since Akamai has the concept of a &amp;lsquo;staging network&amp;rsquo; which doesn&amp;rsquo;t naturally seem to fit in a test-early, test-often approach (Spoiler alert: We don&amp;rsquo;t use the staging network).</description>
    </item>
    
    <item>
      <title>EFS Excess - Cleaning up terabytes of data</title>
      <link>https://www.tibobeijen.nl/2021/07/08/efs-excess/</link>
      <pubDate>Thu, 08 Jul 2021 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2021/07/08/efs-excess/</guid>
      <description>Recently we discovered that what used to be a minor line in our monthly billing graph, had become several strokes wider, amounting to a couple of hundred dollars on the monthly bill. This line represented EFS, wich we use, but by no means in large amounts.
So we thought&amp;hellip;
As it appeared we were using around 3 terabyte of data.
Investigating We use EFS as our go-to persistent storage solution for applications in EKS, its main benefit being that it spans all availability zones so scheduling of pods remains simple.</description>
    </item>
    
    <item>
      <title>Presentation at developer.overheid.nl meetup</title>
      <link>https://www.tibobeijen.nl/2020/09/30/developer-overheid-nl-presentation/</link>
      <pubDate>Wed, 30 Sep 2020 05:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2020/09/30/developer-overheid-nl-presentation/</guid>
      <description>Slides of the presentation I gave at a developer.overheid.nl meetup on the topic of moving from Kops to EKS.
This meetup took place (online) at Sept. 29, 2020.
  Slides can be seen full screen as well.</description>
    </item>
    
    <item>
      <title>Kubernetes Community Day Amsterdam 2019</title>
      <link>https://www.tibobeijen.nl/2019/09/16/kubernetes-community-day-amsterdam-2019/</link>
      <pubDate>Mon, 16 Sep 2019 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2019/09/16/kubernetes-community-day-amsterdam-2019/</guid>
      <description>Friday sept. 13th the small conference &amp;lsquo;Kubernetes Community Day 2019&amp;rsquo; took place in Pakhuis de Zwijger in Amsterdam. Small-scale events like this are a nice counter-balance to the massive scale of CNCF/KubeCon: No flying for miles. Just one track so no need to choose and no missing out on interesting talks.
From what I understood this was one of the goals: Being a smaller, more accessible (both geographically and financially), more environmentally conscious addition to the big conferences.</description>
    </item>
    
    <item>
      <title>Kubernetes Community meetup at NU.nl/Sanoma</title>
      <link>https://www.tibobeijen.nl/2019/09/05/kubernetes-community-meetup-sanoma/</link>
      <pubDate>Thu, 05 Sep 2019 23:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2019/09/05/kubernetes-community-meetup-sanoma/</guid>
      <description>Slides of the presentation I gave about Kubernetes practices and learnings at NU.nl.
This presentation was the first of two at the Dutch Kubernetes meetup at the Sanoma Netherlands offices, that took place on Sept. 5th 2019</description>
    </item>
    
    <item>
      <title>KubeCon &#43; CloudNativeCon 2019 Barcelona</title>
      <link>https://www.tibobeijen.nl/2019/06/13/kubecon-cloudnativecon-2019/</link>
      <pubDate>Thu, 13 Jun 2019 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2019/06/13/kubecon-cloudnativecon-2019/</guid>
      <description>The end of May 2019 saw 7700 people, myself included, visit Barcelona to attend &amp;lsquo;KubeCon + CloudNativeCon Europe 2019&amp;rsquo;. That&amp;rsquo;s a lot of people and a significant increase of previous editions (Copenhagen 2018: 4300, Berlin 2017: 1500, according to this Dutch source). Next year&amp;rsquo;s edition will be &amp;lsquo;around the corner&amp;rsquo; in Amsterdam and is projected to attract at least 10000 visitors. This is quite telling of the increased adoption of Kubernetes and all associated technologies over the past years.</description>
    </item>
    
    <item>
      <title>Maximize learnings from a Kubernetes cluster failure</title>
      <link>https://www.tibobeijen.nl/2019/02/01/learning-from-kubernetes-cluster-failure/</link>
      <pubDate>Fri, 01 Feb 2019 13:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2019/02/01/learning-from-kubernetes-cluster-failure/</guid>
      <description>Since a number of months we (NU.nl development team) operate a small number of Kubernetes clusters. We see the potential of Kubernetes and how it can increase our productivity and how it can improve our CI/CD practices. Currently we run part of our logging and building toolset on Kubernetes, plus some small (internal) customer facing workloads, with the plan to move more applications there once we have build up knowledge and confidence.</description>
    </item>
    
    <item>
      <title>DevOpsCon 2018 Munich</title>
      <link>https://www.tibobeijen.nl/2018/12/10/devopscon18-munich/</link>
      <pubDate>Mon, 10 Dec 2018 08:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2018/12/10/devopscon18-munich/</guid>
      <description>Tuesday 4th and wednesday 5th the DevOps Conference 2018 took place in Munich. Offering a program filled with talks addressing &amp;lsquo;DevOps&amp;rsquo; topics such as CI/CD, Kubernetes, Security, Company culture and change, Microservices, I was lucky enough to attend. Below you&amp;rsquo;ll find a slightly redacted version of the notes I took during the talks and off-track chats I had with several people.
Day 1 Staying Alive: Patterns for Failure Management from the Bottom of the Ocean #Business &amp;amp; Company Culture</description>
    </item>
    
    <item>
      <title>Generating https urls in Django using CloudFront</title>
      <link>https://www.tibobeijen.nl/2017/10/26/django-https-urls-cloudfront/</link>
      <pubDate>Thu, 26 Oct 2017 20:00:00 +0200</pubDate>
      
      <guid>https://www.tibobeijen.nl/2017/10/26/django-https-urls-cloudfront/</guid>
      <description>TL;DR: Configure CloudFront to set the Cloudfront-Forwarded-Proto in order to allow a Django application to know the client&amp;rsquo;s request protocol.
Recently, while developing an API that makes use of Django Rest Framework and is delivered using CloudFront, we noticed the absolute URLs it generated to be HTTP, whereas the CloudFront distribution is HTTPS only. Not really surprising when thinking it through, as in our case Cloudfront did TLS termination and traffic between upstream components was HTTP (Yes, we&amp;rsquo;ll look into that, HTTPS being preferred).</description>
    </item>
    
    <item>
      <title>Secure Route 53 healthchecks using HAProxy</title>
      <link>https://www.tibobeijen.nl/2017/06/01/haproxy-secure-route53-healthchecks/</link>
      <pubDate>Thu, 01 Jun 2017 16:00:00 +0200</pubDate>
      
      <guid>https://www.tibobeijen.nl/2017/06/01/haproxy-secure-route53-healthchecks/</guid>
      <description>TL;DR: It&amp;rsquo;s possible to configure HAProxy to have separate health check and service endpoints, allowing to set up different firewall rules for each. Scroll down for config samples.
Case outline When designing a highly available service on EC2, AWS Elastic Load balancers are quite often a key component. A common setup is to have an internet facing ELB forward requests to EC2 instances that are in a private subnet, not directly accessible from the internet.</description>
    </item>
    
    <item>
      <title>Taming PYTHONPATH in PyCharm and IntelliJ</title>
      <link>https://www.tibobeijen.nl/2017/04/03/taming-pythonpath-pycharm-intellij/</link>
      <pubDate>Mon, 03 Apr 2017 17:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2017/04/03/taming-pythonpath-pycharm-intellij/</guid>
      <description>TL;DR: PyCharm and IntelliJ have some odd defaults that can mask mistakes until they hit CI.
Introduction In a project we&amp;rsquo;re working on we recently witnessed quite some builds fail on unit tests that apprently passed on local development environments. As it turned out all of the failures where related to import errors and were caused by developers accidentally importing relative to the main django application instead of the project root.</description>
    </item>
    
    <item>
      <title>Using pyenv and pyenv-virtualenv on OSX</title>
      <link>https://www.tibobeijen.nl/2017/01/09/using-pyenv-and-pyenv-virtualenv-on-osx/</link>
      <pubDate>Thu, 26 Jan 2017 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2017/01/09/using-pyenv-and-pyenv-virtualenv-on-osx/</guid>
      <description>Until recently I relied on OS X native python for anything 2.7.x and Homebrew&amp;rsquo;s python3 for anything 3.x.x. As already implied by the lots of &amp;lsquo;x&amp;rsquo;-es: Far from ideal. But it worked. Until I accidentally ran a brew upgrade which put my python 3 version to a bleeding edge 3.6.0. Newer than what&amp;rsquo;s provisioned on our stack and besides that I ran into some errors when installing requirements in a new virtualenv that I suspected to be related to the python version bump.</description>
    </item>
    
    <item>
      <title>Moving from Wordpress to Hugo</title>
      <link>https://www.tibobeijen.nl/2017/01/09/moving-from-wordpress-to-hugo/</link>
      <pubDate>Mon, 09 Jan 2017 10:00:00 +0100</pubDate>
      
      <guid>https://www.tibobeijen.nl/2017/01/09/moving-from-wordpress-to-hugo/</guid>
      <description>Introduction For some years my blog has been inactive. Now this could imply that &amp;lsquo;not much was happening&amp;rsquo; on a professional level but that hasn&amp;rsquo;t been the case, on the contrary. Recently I&amp;rsquo;ve been thinking about adding new content and it became clear that my old Wordpress setup wasn&amp;rsquo;t the best fit anymore for my needs. Several people I know have been very positive about Hugo and the webserver Caddy so I decided to give that a try.</description>
    </item>
    
    <item>
      <title>DDD using Doctrine 2: A case study</title>
      <link>https://www.tibobeijen.nl/blog/2011/06/27/ddd-using-doctrine-2-a-case-study/</link>
      <pubDate>Mon, 27 Jun 2011 13:06:57 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2011/06/27/ddd-using-doctrine-2-a-case-study/</guid>
      <description>&lt;p&gt;Nowadays developing web applications usually requires a flexible process due to changing business logic, shifting priorities or new insights. Besides choosing the right methodology this also requires designing the application in such a way that this flexibility can be achieved.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://domaindrivendesign.org/&#34;&gt;Domain Driven Design&lt;/a&gt; fits this process as it isolates business logic in the Domain layer and separates it from infrastructure and presentation layers. Questions like where or how to store data or what to build (website, mobile app, API) can be addressed separately.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.doctrine-project.org/projects/orm/2.0/docs/en&#34;&gt;Doctrine 2&lt;/a&gt; provides PHP developers with a powerful tool to create a Domain layer that contains business logic that is easy to unit test and therefore easy to expand upon in iterations.&lt;/p&gt;
&lt;p&gt;In this article I will show how to implement a specific case using Doctrine 2. Full code accompanying this article can be &lt;a href=&#34;https://github.com/TBeijen/DDD-HRM/tree/v001&#34;&gt;found on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>DPC 2011 preview</title>
      <link>https://www.tibobeijen.nl/blog/2011/05/17/dpc-2011-preview/</link>
      <pubDate>Tue, 17 May 2011 19:46:05 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2011/05/17/dpc-2011-preview/</guid>
      <description>The yearly dutch PHP event is getting close so time to check out the schedule. Once again there are lots of interesting sessions to choose from so I probably will miss some of the good stuff. Mixing ‘simply interesting’ and ‘directly usable in day-to-day job’ results in the preliminary list:
Day 1  TDD and Getting Paid – Because indeed TDD is good and can be hard to keep doing thoroughly Pursuing practices of Domain-Driven Design in PHP – Fits both the ‘interesting’ and ‘directly usable’ categories.</description>
    </item>
    
    <item>
      <title>Usability: Autofocus and not breaking the backspace-button</title>
      <link>https://www.tibobeijen.nl/blog/2011/03/14/usability-autofocus-and-not-breaking-the-backspace-button/</link>
      <pubDate>Mon, 14 Mar 2011 11:32:39 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2011/03/14/usability-autofocus-and-not-breaking-the-backspace-button/</guid>
      <description>A while ago during a project we were asked to implement autofocus on the generic search field that every page in the application has. At a first glance a pretty straightforward task, from a technical perspective that is. Not from a user perspective, as indicated by a colleague mentioning his dislike of such autofocus fields “because they prevent backspace going to the previous page”. In this post I will outline some usability considerations and conclude with a jQuery plugin that will take away some of the possible hindrance of autofocusing a field.</description>
    </item>
    
    <item>
      <title>Fixing mysqldump on Zend Server CE on OS X</title>
      <link>https://www.tibobeijen.nl/blog/2011/03/01/fixing-mysqldump-on-zend-server-ce-on-os-x/</link>
      <pubDate>Tue, 01 Mar 2011 07:37:56 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2011/03/01/fixing-mysqldump-on-zend-server-ce-on-os-x/</guid>
      <description>A while ago I installed Zend Server Community Edition on OS X which was pretty straightforward. It was only recently that I found out that, as opposed to mysql which worked fine, mysqldump didn’t work correctly and terminated with the error:
``A while ago I installed Zend Server Community Edition on OS X which was pretty straightforward. It was only recently that I found out that, as opposed to mysql which worked fine, mysqldump didn’t work correctly and terminated with the error:</description>
    </item>
    
    <item>
      <title>Dutch PHP Conference (DPC) 2010</title>
      <link>https://www.tibobeijen.nl/blog/2010/06/15/dutch-php-conference-dpc-2010/</link>
      <pubDate>Tue, 15 Jun 2010 17:17:24 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2010/06/15/dutch-php-conference-dpc-2010/</guid>
      <description>Past weekend the Amsterdam RAI was the centre of the PHP universe as there the 2010 edition of the Dutch PHP Conference was held. Similar to past year it consisted of two presentation days, which I attended, preceded by a tutorial day.
Among the presentations I attended on the first day were:
Kevlin Henney’s keynote presentation, titled 97 Things every programmer should know. I suppose every attendant will have recognised some of the things he addressed, like “Do lots of deliberate practice” or “Hard work does not pay off”.</description>
    </item>
    
    <item>
      <title>Zend_Form: Building dynamic forms</title>
      <link>https://www.tibobeijen.nl/blog/2009/12/21/zend_form-building-dynamic-forms/</link>
      <pubDate>Mon, 21 Dec 2009 10:38:33 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/12/21/zend_form-building-dynamic-forms/</guid>
      <description>In my previous post about Zend_Form I showed how, using Zend_Form, a form’s structure can be separated from it’s presentation and how to use custom Decorators and Validators. The example used showed a form that is tightly coupled to a record in a database: One form edits one record. There are however numerous occasions where no ‘one to one’ connection exists and where the fields that need to be shown are not predetermined.</description>
    </item>
    
    <item>
      <title>Using Zend_Form without Zend Framework MVC</title>
      <link>https://www.tibobeijen.nl/blog/2009/12/07/using-zend_form-without-zend-framework-mvc/</link>
      <pubDate>Mon, 07 Dec 2009 10:13:13 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/12/07/using-zend_form-without-zend-framework-mvc/</guid>
      <description>Most components of Zend Framework can be used without using the entire framework and Zend_Form is no exception. It’s a versatile component that can be customized to great extent. The payoff is that seemingly easy tasks can seem quite complex to complete and involve concepts like Decorators and View Helpers. Complexity is increased by the fact that most tasks can be achieved in multiple ways.
Forms in general are elements where a lot of parts of an application ‘meet’: Frontend code (HTML/CSS), behavior (JS) and backend processing (validation, filtering and storage).</description>
    </item>
    
    <item>
      <title>Fronteers 2009</title>
      <link>https://www.tibobeijen.nl/blog/2009/11/07/fronteers-2009/</link>
      <pubDate>Sat, 07 Nov 2009 18:46:22 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/11/07/fronteers-2009/</guid>
      <description>&lt;p&gt;About five months after having enjoyed server-side talks at &lt;a href=&#34;http://www.tibobeijen.nl/blog/2009/06/13/dpc09-down-dpc10-to-go/&#34;&gt;DPC09&lt;/a&gt; it was now time for front-end matters: Fronteers 2009. There’s no exaggeration in the description on the fronteers site: A &lt;a href=&#34;http://fronteers.nl/congres/2009/speakers&#34;&gt;stellar line up&lt;/a&gt; of speakers who are at the front of what’s happening in web-development. Generally speaking I really liked most of the talks and some of them pointed me to some interesting new techniques and ideas.&lt;/p&gt;
&lt;p&gt;Slides of the presentation (if online) are listed at the &lt;a href=&#34;http://fronteers.nl/blog/2009/11/presentations-fronteers-2009&#34;&gt;Fronteers site&lt;/a&gt; and at the end of this post (same content, read along). I’ll briefly recap some of the (for me that is) most interesting parts.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Catching PHP Exceptions: Except the unexpected</title>
      <link>https://www.tibobeijen.nl/blog/2009/10/26/catching-php-exceptions-except-the-unexpected/</link>
      <pubDate>Mon, 26 Oct 2009 11:57:20 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/10/26/catching-php-exceptions-except-the-unexpected/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://us.php.net/manual/en/language.exceptions.php&#34;&gt;PHP Exceptions&lt;/a&gt; can greatly assist in implementing various error scenario’s into an application. Before PHP5 one had to resort to specific return values or drastic measures like &lt;a href=&#34;http://us.php.net/manual/en/function.trigger-error.php&#34;&gt;trigger_error()&lt;/a&gt;. Planning exceptions, I found out, is just as important as class design. At any point where a developer needs to handle the possibility of an exception being thrown he needs to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What Exceptions can I expect?&lt;/li&gt;
&lt;li&gt;What Exceptions do I plan to catch?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post I’ll show some important aspects to consider when planning exceptions.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Usability: What does this button do?</title>
      <link>https://www.tibobeijen.nl/blog/2009/10/09/usability-what-does-this-button-do/</link>
      <pubDate>Fri, 09 Oct 2009 14:01:48 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/10/09/usability-what-does-this-button-do/</guid>
      <description>&lt;p&gt;In software development projects, paying proper attention to usability aspects, can greatly help ‘getting the &lt;del datetime=&#34;2009-09-20T10:22:43+00:00&#34;&gt;message &lt;/del&gt;functionality across’. &lt;a href=&#34;http://en.wikipedia.org/wiki/Usability&#34;&gt;Usability&lt;/a&gt; is a field of expertise on its own and involves techniques like &lt;a href=&#34;http://www.usabilityfirst.com/glossary/term_645.txl&#34;&gt;wireframes&lt;/a&gt;, &lt;a href=&#34;http://www.usabilitynet.org/tools/prototyping.htm&#34;&gt;prototyping&lt;/a&gt; and &lt;a href=&#34;http://en.wikipedia.org/wiki/Card_sorting&#34;&gt;card sorting&lt;/a&gt;. Not every project is the same and (sadly) lack of time or budget can prevent specialized interaction designers to be involved in the project. This means that making the application ‘usable’ becomes the responsibility of graphic designers or developers (or it is neglected altogether). Not an easy combination of tasks…&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PHPBenelux meeting at Freshheads</title>
      <link>https://www.tibobeijen.nl/blog/2009/09/30/phpbenelux-meeting-at-freshheads/</link>
      <pubDate>Wed, 30 Sep 2009 18:48:53 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/09/30/phpbenelux-meeting-at-freshheads/</guid>
      <description>Yesterday (sept. 29th) I went to the Freshheads office in Tilburg to attend the monthly PHPBenelux meeting. As it appeared it was right around the corner of the 013 venue so it was an easy find.
Two talks were scheduled and Stefan Koopmanschap kicked off the meeting with a presentation titled “Integrating Symfony and Zend Framework” (slides). After a short introduction pointing out the benefits of using any framework at all, Stefan showed how both Symfony’s and Zend Framework’s autoloaders can be initialized in the application’s bootstrap code.</description>
    </item>
    
    <item>
      <title>Taming the Javascript event scope: Closures</title>
      <link>https://www.tibobeijen.nl/blog/2009/07/27/taming-the-javascript-event-scope-closures/</link>
      <pubDate>Mon, 27 Jul 2009 13:52:44 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/07/27/taming-the-javascript-event-scope-closures/</guid>
      <description>&lt;p&gt;When doing client-side developing there are times that jQuery’s get-this-do-that nature doesn’t provide all that is needed. For more complex applications I usually find myself creating javascript objects that ‘control’ a specific part of the page’s interaction. In the objects the application’s state is tracked, references to other objects (could be relevant DOM nodes) are stored and event handlers are set.&lt;/p&gt;
&lt;p&gt;One of the problems typically encountered when dealing with javascript event handlers is that they have their own take on the ‘this’ keyword. Closures to the rescue.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Controlled initialization of domain objects</title>
      <link>https://www.tibobeijen.nl/blog/2009/07/09/controlled-initialization-of-domain-objects/</link>
      <pubDate>Thu, 09 Jul 2009 07:09:44 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/07/09/controlled-initialization-of-domain-objects/</guid>
      <description>&lt;p&gt;In a recent project I’ve been working on, we have used the ‘&lt;a href=&#34;http://en.wikipedia.org/wiki/Domain_model&#34;&gt;Domain Model&lt;/a&gt;‘ to describe and design our application. Doing so we decouple persistency logic from the objects that are being passed around and modified throughout our application: The Domain objects. So what in MVC is often referred to as ‘model’ is actually a combination of a persistency layer, a service layer and a Domain layer. The persistency and service layer are also referred to as Data Access Objects: DAO. (As for the why and how of this architecture I recommend the article &lt;a href=&#34;http://www.angryobjects.com/2009/03/30/writing-robust-php-backends-with-zend-framework/&#34;&gt;Writing robust backends with Zend Framework&lt;/a&gt;. For a good description of the DAO concept &lt;a href=&#34;http://www.sitecrafting.com/blog/php-patterns-part-ii/&#34;&gt;look here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;One of the challenges we were facing was that on one hand we wanted to implement business rules in our Domain objects. In plainish english: On setting or changing properties of the object (like changing a status) we want to validate if that action is allowed. On the other hand we want to be able to initialize an object to whatever state corresponds with the data fetched from the persistency layer. Doing so we found that the business rules got in the way during initialization when fetching it from the persistency layer. So what we were looking for was a way to allow the service layer to construct a Domain object using methods that are hidden from the rest of the code. We found two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reflection (as of PHP 5.3)&lt;/li&gt;
&lt;li&gt;A design pattern where the Domain object initializes itself using the provided Service object.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>DPC09 down, DPC10 to go</title>
      <link>https://www.tibobeijen.nl/blog/2009/06/13/dpc09-down-dpc10-to-go/</link>
      <pubDate>Sat, 13 Jun 2009 21:29:57 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/06/13/dpc09-down-dpc10-to-go/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;http://www.phpconference.nl/&#34;&gt;biggest PHP event in Holland&lt;/a&gt; is over. Two great days have passed and it feels like it were just two hours. I didn’t attend the tutorial day so at friday after a brief intro by Cal Evans (with great &lt;a href=&#34;http://www.flickr.com/photos/patrickvdvelden/3619317740/&#34;&gt;cartoony&lt;/a&gt; &lt;a href=&#34;http://www.flickr.com/photos/mwesten/3619637934/&#34;&gt;visuals&lt;/a&gt;) the event kicked off with the opening keynote by Andrei Zmievski. A talk about what makes PHP the language it is and about where PHP is heading with 5.3 and 6. It had humor, appealing imagery and a nice metaphor comparing PHP to a ball of nails: ‘whatever you throw it at it sticks to’. For me what showed the maturity of PHP, was the fact PHP6 is undergoing (or will so) compatibility tests with respect to packages like Drupal, WordPress and Zend Framework.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Explicit PHP6?</title>
      <link>https://www.tibobeijen.nl/blog/2009/06/11/explicit-php6/</link>
      <pubDate>Thu, 11 Jun 2009 07:47:06 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/06/11/explicit-php6/</guid>
      <description>&lt;p&gt;Some days ago I read Fabien Potencier’s post &lt;a href=&#34;http://fabien.potencier.org/article/18/what-for-php6&#34;&gt;‘What for PHP 6’&lt;/a&gt; pointing me to some features that might be implemented in PHP6. Two of those would have been nice in a project I’m currently working on where I’ve been experimenting with ‘domain objects’ having ‘scalar’ or ‘value’ objects as properties (more on that later). The first is scalar type hinting and hinted return values. The other is a __cast() method that replaces (or complements __toString()). Now that sounds quite java-ish and one of PHP merits is it’s flexibility but having the &lt;em&gt;option&lt;/em&gt; to be more strict in my opinion is a good thing: If I feed my application with garbage I don’t blame it for being equally blunt.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Zend_Test, Zend_Layout and the need to reset</title>
      <link>https://www.tibobeijen.nl/blog/2009/06/01/zend_test-zend_layout-and-the-need-to-reset/</link>
      <pubDate>Mon, 01 Jun 2009 11:55:30 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/06/01/zend_test-zend_layout-and-the-need-to-reset/</guid>
      <description>&lt;p&gt;In a recent Zend Framework project I’ve used Zend_Test to test the functioning of the website ‘as a whole’. So besides testing the separate (authorization) components, the website was tested in the same way a visitor would use it. This is especially useful for testing login scenarios, so I added the test below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function testLogoutShouldDenyAccess()
{
    $this-&amp;gt;login();

         // verify that profile page now doesn&#39;t contain login form
    $this-&amp;gt;dispatch(&#39;/profile&#39;);
    $this-&amp;gt;assertQueryCount(&#39;form#login&#39;, 0);

        // dispatch logout page
    $this-&amp;gt;dispatch(&#39;/login/logout&#39;);

        // verify that profile now holds login form
    $this-&amp;gt;dispatch(&#39;/profile&#39;);
    $this-&amp;gt;assertQueryCount(&#39;form#login&#39;, 1);
    $this-&amp;gt;assertNotController(&#39;profile&#39;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This failed on the last assertQueryCount() which left me puzzled. Performing above steps manually seemed to work fine so I was overlooking something either in my app-code or the test-code.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Installing PHPUnit on XAMPP Lite (Windows)</title>
      <link>https://www.tibobeijen.nl/blog/2009/05/17/installing-phpunit-on-xampp-lite-windows/</link>
      <pubDate>Sun, 17 May 2009 13:39:00 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/05/17/installing-phpunit-on-xampp-lite-windows/</guid>
      <description>&lt;p&gt;At my work PHPUnit is ‘just there’ but it’s not on my home machine where I’m running an out of the box &lt;a href=&#34;http://www.apachefriends.org/en/xampp-windows.html#646&#34;&gt;XAMPP Lite&lt;/a&gt; setup. So I visited the &lt;a href=&#34;http://www.phpunit.de/manual/current/en/installation.html&#34;&gt;PHPUnit installation manual&lt;/a&gt; and all looked easy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But what I got was a message saying my pear installer was out of date, 1.7.1 was needed. Running ‘pear -V’ showed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;E:\Xampplite\php&amp;gt;pear -V
PEAR Version: 1.4.5
PHP Version: 5.2.5
Zend Engine Version: 2.2.0
Running on: Windows NT T1720 6.0 build 6000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Allright, upgrading PEAR it is. That was not as straightforward as hoped.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fixing Netbeans after Ubuntu 9 upgrade</title>
      <link>https://www.tibobeijen.nl/blog/2009/05/01/fixing-netbeans-after-ubuntu-9-upgrade/</link>
      <pubDate>Fri, 01 May 2009 09:20:14 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/05/01/fixing-netbeans-after-ubuntu-9-upgrade/</guid>
      <description>This morning I upgraded my Ubuntu machine using the auto-update. As I just recently started using Ubuntu I’m very pleased at how some features work compared to Vista. (Vista users will probably be familiar with the auto-update restart that has a terrific feel for timing by always presenting you the choice for postponing the restart when you have several documents opened and are away for a coffee break.) After my self initiated restart everything worked like a charm, OpenOffice is updated to version 3 (nice for the docx workflow) but… Netbeans didn’t start.</description>
    </item>
    
    <item>
      <title>Annoying banners: A plea for quality</title>
      <link>https://www.tibobeijen.nl/blog/2009/04/27/annoying-banners-a-plea-for-quality/</link>
      <pubDate>Mon, 27 Apr 2009 20:51:10 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/04/27/annoying-banners-a-plea-for-quality/</guid>
      <description>Banners play an essential role in many site’s business models so they are an inevitable price paid for all the free content that is available on the internet. To get a user’s attention a lot of practices are employed like animation, placement or sound (horrible). Today I stumbled on a T-mobile advert on the site nu.nl that indeed attracts a lot of attention but does so in a questionable way: It makes using the visited site almost impossible.</description>
    </item>
    
    <item>
      <title>Dutch PHP Conference 2009</title>
      <link>https://www.tibobeijen.nl/blog/2009/04/24/dutch-php-conference-2009/</link>
      <pubDate>Fri, 24 Apr 2009 07:30:36 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/04/24/dutch-php-conference-2009/</guid>
      <description>Today I ordered my ticket for Dutch PHP Conference. Last year’s edition was great and this year it’s twice as long. This year I’ll skip the tutorial day though. For me the money is better spent on reading material. Anyone interested in going can save some money by registering before April 30th. My ‘usability and PHP’ paper didn’t make it but on the less PHP focused topics there is accessibility. And a lot of other interesting topics.</description>
    </item>
    
    <item>
      <title>Linux-Fu @ phpGG</title>
      <link>https://www.tibobeijen.nl/blog/2009/04/17/linux-fu-phpgg/</link>
      <pubDate>Fri, 17 Apr 2009 07:32:52 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/04/17/linux-fu-phpgg/</guid>
      <description>Last night there was a phpGG (dutch php user group) meeting in Utrecht with a presentation by Lorna Jane titled ‘Linux-Fu’. Attended by about 10 people, console basics � tricks were addressed. I’m not unfamiliar with Linux so the basics weren’t that new. For development I mainly use IDE’s so I just use the console to edit the occasional config file, create some symlinks, that kind of stuff. For those tasks I find myself sticking to set of commands I’ve learned and just occasionally taking the time to do an in-depth google search for better ways to get the job done.</description>
    </item>
    
    <item>
      <title>Jumping in and out of jQuery land</title>
      <link>https://www.tibobeijen.nl/blog/2009/04/02/jumping-in-and-out-of-jquery-land/</link>
      <pubDate>Thu, 02 Apr 2009 21:34:59 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/04/02/jumping-in-and-out-of-jquery-land/</guid>
      <description>Recently I started using jQuery in some projects. In past projects I have mainly been using Prototype and the fact that jQuery also has a $() function made me feel at home right away. That same fact put me a bit off-guard as both functions are in fact quite different:
 Prototype extends the selected HTML node with added functionality and returns it. Argument should be a HTML node or element id.</description>
    </item>
    
    <item>
      <title>Internet Explorer 8</title>
      <link>https://www.tibobeijen.nl/blog/2009/03/20/internet-explorer-8/</link>
      <pubDate>Fri, 20 Mar 2009 08:32:07 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/03/20/internet-explorer-8/</guid>
      <description>Yesterday Internet Explorer 8 is released. I consider that a good things as it will move more people farther away from the severe case of release abuse called IE6. Improvements include integrated developer tools for css analysis and script profiling and debugging.
And there is ‘Compatibility View’. Developers can specify, by adding a specific meta tag, that IE7 rendering should be used. There seem to be some tricky aspects related to Compatibility View:</description>
    </item>
    
    <item>
      <title>Fronteers: Meeting march 10th</title>
      <link>https://www.tibobeijen.nl/blog/2009/03/15/fronteers-meeting-march-10th/</link>
      <pubDate>Sun, 15 Mar 2009 10:04:20 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/03/15/fronteers-meeting-march-10th/</guid>
      <description>At the PHPgg Frontend Special I first heard of Fronteers, an association of dutch front-end developers. Past tuesday they had a meeting at Media College in Amsterdam. As meetings are open for non(yet)-members it was a nice opportunity to get to know more about Fronteers. Two topics were scheduled: jQuery and SUAVE.
jQuery Until now I have mainly used the Prototype framework for Javascript projects. As the prototype library, escpecially when bundled with scriptaculous, is quite ‘big’ I was interested in hearing some more about the ‘lean and mean’ jQuery.</description>
    </item>
    
    <item>
      <title>Web Browser Zoom: Design consequences</title>
      <link>https://www.tibobeijen.nl/blog/2009/03/07/web-browser-zoom-design-consequences/</link>
      <pubDate>Sat, 07 Mar 2009 18:57:19 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/03/07/web-browser-zoom-design-consequences/</guid>
      <description>&lt;p&gt;Over the years the display size of the average computer screen has increased. As a consequence nowadays more and more websites are designed with a 1024 width screen in mind. For example: &lt;a href=&#34;http://www.bbc.co.uk/&#34;&gt;BBC&lt;/a&gt;, &lt;a href=&#34;http://www.adobe.com/&#34;&gt;Adobe&lt;/a&gt; and &lt;a href=&#34;http://www.times.com/&#34;&gt;The New York Times&lt;/a&gt;. With at least 78% of the users using a 1024 or higher resolution screen the time seems right to move away from the 800px designs. But what about accessibility? And usability? And is full page zooming really better than text scaling?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Thousands of modules can&amp;#8217;t be wrong, right?</title>
      <link>https://www.tibobeijen.nl/blog/2009/02/20/thousands-of-modules-cant-be-wrong-right/</link>
      <pubDate>Fri, 20 Feb 2009 17:48:58 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/02/20/thousands-of-modules-cant-be-wrong-right/</guid>
      <description>&lt;p&gt;Yesterday I attended a presentation showcasing &lt;a href=&#34;http://drupal.org/&#34;&gt;Drupal&lt;/a&gt;. Like Joomla! and WordPress an easy install routine presents the user with a lot of functionality right out of the box. By adding modules as needed one can achieve whatever he wants. So it seems… After the showcase part, the session continued into a case study. The case at hand was a project were all sorts of specific functionality (think: facebook, digg, etc. web 2.0 you know) was required. And it didn’t go as smooth and quick as expected. How come?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>SQL injection &amp; the Kaspersky hack</title>
      <link>https://www.tibobeijen.nl/blog/2009/02/11/sql_injection-and-the-kaspersky-hack/</link>
      <pubDate>Wed, 11 Feb 2009 18:38:50 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/02/11/sql_injection-and-the-kaspersky-hack/</guid>
      <description>&lt;p&gt;Last week I read an article on webwereld titled ‘&lt;a href=&#34;http://webwereld.nl/article/comments/id/54694&#34;&gt;2008 was year of the SQL injection attack&lt;/a&gt;‘. It was based on an &lt;a href=&#34;http://www.networkworld.com/news/2009/020209-sql-injection-attack.html&#34;&gt;article with the same title on networkworld.com&lt;/a&gt;. Apparently SQL injection has taken over the lead from XSS. Not surprisingly the first user-comment stated that almost 100% of the exploits were certainly in PHP applications written by would-be programmers. With things so obvious it’s of course unneccessary to provide factual data backing up such a statement. So, nothing to win in that discussion. Three days ago news came that &lt;a href=&#34;http://www.theregister.co.uk/2009/02/08/kaspersky_compromise_report/&#34;&gt;a customer database of Kaspersky was hacked&lt;/a&gt;. By using SQL injection. On &lt;a href=&#34;http://usa.kaspersky.com/about-us/news-press-releases.php?smnr_id=900000208&#34;&gt;a PHP website&lt;/a&gt;. Could commenter X be right?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Engineering World 2009</title>
      <link>https://www.tibobeijen.nl/blog/2009/02/11/engineering-world-2009/</link>
      <pubDate>Tue, 10 Feb 2009 23:01:36 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/02/11/engineering-world-2009/</guid>
      <description>Past saturday (february 7th) I visited Engineering World, a conference organised by Sogeti, as both attendant and speaker. With my colleague Richard de Vries I delivered a presentation on the topic usability. I attended some interesing presentations of which two were about methodologies: One about SCRUM and the closing keynote by Ian Spence of Ivar Jacobsen International about Agile. The latter with all of the myths about Agile (Doesn’t matter where the team is going, as long as it’s going somewhere) being tackled in true Mythbuster fashion.</description>
    </item>
    
    <item>
      <title>Lift-off. Finally!</title>
      <link>https://www.tibobeijen.nl/blog/2009/02/10/lift-off-finally/</link>
      <pubDate>Tue, 10 Feb 2009 08:51:29 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/02/10/lift-off-finally/</guid>
      <description>Although my blog was ready for quite some time I had some trouble getting my domain to point at it. The main problem was getting control over the DNS settings as tibobeijen.nl was originally registered with a shared hosting company. At that time a viable solution as registering a .nl domain used to be limited to companies. Although the whole procedure was a bit sluggish it’s finally complete. Kuddo’s to my friends at Yuna for providing quality hosting.</description>
    </item>
    
    <item>
      <title>PHPgg Frontend Special</title>
      <link>https://www.tibobeijen.nl/blog/2009/02/08/phpgg-frontend-special/</link>
      <pubDate>Sun, 08 Feb 2009 12:18:42 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/02/08/phpgg-frontend-special/</guid>
      <description>&lt;p&gt;Last saturday (2009 jan 24th) I attended the &lt;a href=&#34;http://phpgg.nl/frontendspecial2008&#34;&gt;phpGG Frontend Special&lt;/a&gt;. phpGG stands for ‘PHP Gebruikersgroep’ which translates to ‘PHP user group’. The meeting was held in a nice little theater in The Hague and was attended by what looked like about 50 people. The four main presentations scheduled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft – User Experience on the web&lt;/li&gt;
&lt;li&gt;Adobe – Flex/AIR&lt;/li&gt;
&lt;li&gt;Javascript – 8 Reasons every PHP developer should love it&lt;/li&gt;
&lt;li&gt;The frontend is your friend&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>FireScope &amp;#8211; Firebug extended</title>
      <link>https://www.tibobeijen.nl/blog/2009/01/28/firescope-firebug-extended/</link>
      <pubDate>Wed, 28 Jan 2009 08:28:42 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2009/01/28/firescope-firebug-extended/</guid>
      <description>Today I stumbled across an interesting new Firefox extension: FireScope. It’s developed by Sitepoint, a site I visit regularly. I was aware of their reference material on html, css and javascript and now they use that content to feed this extension. FireScope is an extension to Firebug, assumably known and installed by anyone interested in FireScope. On the official firefox add-ons page it has the status ‘experimental’ and hence requires logging in.</description>
    </item>
    
    <item>
      <title>MSDN InTrack: Microsoft Webstack and PHP Pt. 2</title>
      <link>https://www.tibobeijen.nl/blog/2008/12/15/msdn-intrack-microsoft-webstack-and-php-pt-2/</link>
      <pubDate>Mon, 15 Dec 2008 11:38:25 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/12/15/msdn-intrack-microsoft-webstack-and-php-pt-2/</guid>
      <description>&lt;p&gt;Following my first post on the MSDN inTrack day I’ll now cover the second half of the day. The two topics featured were the presentation side of things and the Microsoft Live platform.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MSDN InTrack: Microsoft Webstack and PHP</title>
      <link>https://www.tibobeijen.nl/blog/2008/12/10/msdn-intrack-microsoft-webstack-and-php/</link>
      <pubDate>Wed, 10 Dec 2008 18:02:41 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/12/10/msdn-intrack-microsoft-webstack-and-php/</guid>
      <description>&lt;p&gt;Last week I attended a one-day Microsoft event about what the Microsoft platform has to offer for PHP developers. Four topics were covered: MS Server 2008 � IIS 7, SQL Server, Presentation and the Live platform. As was explicitly mentioned, the event wasn’t about ‘learning PHP’ but about ‘what’s in store’. It seems like Microsoft &lt;a href=&#34;http://www.microsoft.com/uk/servers/winclientshearts/&#34;&gt;takes PHP’s growth seriously&lt;/a&gt; . In this first post I’ll cover IIS and SQL Server 2008.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Careful with that pixel, devigner</title>
      <link>https://www.tibobeijen.nl/blog/2008/12/03/careful-with-that-pixel-devigner/</link>
      <pubDate>Wed, 03 Dec 2008 17:04:53 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/12/03/careful-with-that-pixel-devigner/</guid>
      <description>A couple of days ago I attended a presentation titled ‘WPF in LOB applications’. Without the abbreviations that would be ‘Windows Presentation Foundation in Line Of Business applications’. It was just an overview but some interesting points were mentioned.
First of all, it was explained that Microsoft Silverlight is a web-based subset of WPF. Now that places things in perspective for the web-minded. Then there was some coverage on XAML, a markup language used to develop interfaces, thereby separating business from logic.</description>
    </item>
    
    <item>
      <title>Zend_Config strategies</title>
      <link>https://www.tibobeijen.nl/blog/2008/11/30/zend_config-strategies/</link>
      <pubDate>Sun, 30 Nov 2008 18:24:30 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/11/30/zend_config-strategies/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Enterprise iPhone Applications: First steps</title>
      <link>https://www.tibobeijen.nl/blog/2008/11/17/enterprise-iphone-applications-first-steps/</link>
      <pubDate>Mon, 17 Nov 2008 11:50:38 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/11/17/enterprise-iphone-applications-first-steps/</guid>
      <description>&lt;p&gt;The iPhone is a very popular gadget and this popularity is not limited to long-time and die-hard Mac fan’s. Enterprises also seem triggered by the iPhone’s slick appeal, if only because an increasing number of employees has the flashy device lying near them on the conference table. (Or the lunch table for that matter).&lt;/p&gt;
&lt;p&gt;So what are a company’s options if it want to have it’s own shiny icon at the iPhone home screen? Does the ease of use extend beyond the user-interface? In this guide, doomed to be aged in mere months, I’ll outline the options one has for developing enterprise software for the iPhone.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Bye bye old site, welcome new site</title>
      <link>https://www.tibobeijen.nl/blog/2008/11/06/bye-bye-old-site-welcome-new-site/</link>
      <pubDate>Thu, 06 Nov 2008 16:36:35 +0000</pubDate>
      
      <guid>https://www.tibobeijen.nl/blog/2008/11/06/bye-bye-old-site-welcome-new-site/</guid>
      <description>As it looks like the blogging phenomenon is there to stay I finally considered it safe to take my first steps into the blogosphere. Until recently this domain showed the website I developed in 2003 and haven’t updated since. It’s a technology-push javascript showcase. Something I liked back then (the days when dHTML was fancy) but would never build again now. For starters: It’s not accessible and thereby not search engine friendly.</description>
    </item>
    
  </channel>
</rss>