Howdy! Welcome to my humble web presence. I'm Mark Hamstra, the CEA at my latest venture modmore, where I spend most of my time developing and providing support for awesome tools and extras for MODX Revolution.

This website is where I share my thoughts, cool projects and other oddities related to MODX, xPDO and ExtJS. Sometimes I post three blogs in a day, sometimes there's no update in a year. Read a random article.

One of the areas I'm focusing on for Commerce is building a webshop solution that is testable. With a suite of automated unit, functional, and mutational tests, you can make sure that code works as expected at all times. I've written about this before.

Opponents of testing often see it as something that takes a lot of time and effort (which is true), and that makes it expensive to do. An immediate return on investment is also rare, so automated tests are often pushed back or just skipped entirely. While I’ve been convinced about the merit of testing, I too fall into this trap and have yet to achieve the magical 100% test coverage on any sizeable project.

Unfortunately, especially when it comes to e-commerce, the cost of not properly testing every aspect of the code can be very real.

Take the billing engine for example. It has been working pretty well for the past three years. I’ve done plenty of manual testing on my local environment to make sure it works as expected when making changes. I just haven't made the time to add unit tests to it, partly because not all the code is as easy to test.

Last weekend I was working on getting the documents in order for the first quarter taxes and shipped it all off to my accountant. Pretty satisfied with the quarterly results, I went on my merry way to do other stuff that didn’t involve looking at numbers and invoices. Until I got an email back from my accountant today about a discrepancy he noticed.

It turns out that there was an issue fetching the current VAT rates for the EU member states from a remote service. Previously we were fetching that over HTTP, but the service started requiring HTTPS, which resulted in a failed connection and the error handling wasn’t sufficient to cause alarms to go off about a critical issue.

Because of this issue, 44 orders which should have incurred 19-21% VAT, ended up being charged a 0% rate. As I still have to pay the VAT that should have been charged, that means I have to pay over €400 in VAT out of own pocket.

Look, it's an info box about VAT!

If you aren’t sure what VAT is or how it works, here’s a high level summary of how it works, at least in the Netherlands.

A business charges you the appropriate VAT rate. The rate depends on the type of product and the country. The standard rates in the EU range between 17% (Luxembourg) and 27% (Hungary), but there are reduced rates for special types of goods and services. When selling to customers the price mentioned is typically inclusive VAT, in business-to-business prices are usually exclusive VAT; this may vary per country though.

At the end of the quarter, the business owner or accountant tallies up the amount of VAT they had to charge their clients, and deduct from that the amount of VAT their suppliers charged them. The resulting number is the VAT they have to pay to the tax office. This is why it’s called Value Added Tax; the tax is paid over the value you’ve added (difference between cost and sale price).

At modmore we don't have a lot of direct costs for selling our products, so we end up paying most of the charged VAT to the tax office.

Luckily this only affected a relatively small slice of our orders and overall revenue from the past quarter. It won't put us out of business or anything, it just lowers the profit margins for those orders by a considerable amount.

But what would have happened if we had ten times as many clients, and we were talking about a €4000 charge instead? What if it applied to all orders instead of less than 20%? What if my accountant didn’t notice the discrepancy and the problem would only have been discovered after six months? A year? What if a client were to rely on the same code for a webshop with hundreds of thousands of orders each month?

Suddenly spending extra time on automated unit, functional and mutation testing sounds like a great investment. Now if you’ll excuse me, I’ve got some more tests to write for Commerce...

Read 2 comments and share your own thoughts!

24 Days of December

I'm one of the six Core Integrators that have been tasked with merging pull requests on the official MODX repository. Lately I've been slacking a bit (no pun intended) as there's been so much happening at modmore, but this month I'm going to do my best to catch up.

Inspired by yearly initiatives like 24 Pull Requests, I'm doing my own variation on that this year. Rather than contributing a pull request every day until Christmas, I'm going to try to merge (at least!) one pull request every day, starting today. There were 66 open pull requests this morning, so there is plenty of good work by others that deserves to be included in upcoming releases of MODX. Theoretically, in 24 days we'll be down to 42, but maybe some of the other integrators like the idea and help bring it down further, hint hint!

In this blog post, I'll keep a list of which pull requests have been merged on what day. I've lasted updated this post on 2016-04-20 23:22:34 - if that's more than a day ago, be sure to hold me accountable via twitter.

December 1st, 2015 (Tuesday)

Got really excited to start!

Down to 62! 63 because JP sent another pull request!

December 2nd, 2015 (Wednesday)

64 pull requests total today, it's going to be hard to get the number down if we keep getting this much new contributions.

  • #12795: Fix uberbar on desktop - fixed an issue introduced yesterday in #12776 where the uberbar wouldn't show up in 2.5. Fix by JP.
  • #12773: Improve tree usability - thanks to this improvement by Lukas you now have a much larger click target to expand a container in 2.5. Clicking the arrow, icon or empty space will expand or collapse a container, while clicking the name will open it for editing.
  • #12747: Add resource information to OnResourceAutoPublish event - Chris proposed adding some extra information to the OnResourceAutoPublish event, providing info on what resources were affected, which will be in 2.5.

Down to 61 open pull requests!

December 3rd, 2015 (Thursday)

Took a little detour to pull requests targeting 2.4.3 today.

Down to 58. Also sent two pull requests fixing issues introduced in the mobile-friendly improvements in #12776: #12798 (ensuring compatibility with custom manager themes and #12799 (fixing scrolling on large displays - whoops), so back up to 60 open pull requests total now.

December 4th, 2015 (Friday)

December 5th, 2015 (Saturday)

Also sent a really important pull request (merged by Mike within the hour), and a second pull request related to the travis tests as well.

December 6th, 2015 (Sunday)

Oops... missed a day :(

December 7th, 2015 (Monday)

To make it up with you for missing a day, here's a couple more merges into 2.x for the 2.5 release:

After a week of this project, there's now 58 open pull requests. I'm very pleased to see the constant flow of contributions that are being sent to MODX from a range of contributors. At the start of December there were 66 open pull requests, and despite merging 16 of those myself (and several more by other integrators) we've only gone down 8 pull requests in a week. That's equally sad (I was hoping for a larger decline after 1-2hrs of work every day!), but also amazing that we can count on so many contributions from people that genuinely make MODX better.

I've been trying to merge more than one per day as we have so many great contributions pending, and it's really quite a bit of work to stay on top of things. Not every pull request is always ready to get merged, which means that before you get to one that is ready to go you've already spent some time going through the list, reviewing code, figuring out if it's a bug fix or improvement (which can be a very fuzzy line!) to know what branch to merge to, checking for signed CLAs and proper processes, before even getting to the git magic, testing and determining if it's merge-ready. If you'd like to help out make it easier on the volunteering integrations, you can help out with code reviews, making sure people use the right template in pull request (or at the very least provide all relevant information so we don't have to ask) and of course testing out pull requests (especially larger ones) and commenting your findings. That will help integrators spend more time on actually integrating, which will help MODX become better more quickly.

At the moment, it looks like both 2.4.3 and 5.3.0-rc1 could be coming before the end of the year, but there's a lot of pending improvements that would be great to get in. With a bit of help, I'm sure we can get a lot of those merged in to make some really great releases.

December 8th, 2015 (Tuesday)

December 9th, 2015 (Wednesday)

December 10th, 2015 (Thursday)

Down to 53 open pull requests, making progress!

More to come tomorrow!

Read 0 comments and share your own thoughts!


It's been a while since I published anything on my personal website. Work at modmore and for my freelance clients simply take a lot of time, and blogging has never been something I did on a regular schedule. 

That doesn't mean I don't have ideas on what to write - quite on the contrary. There's probably two dozen unfinished posts I've been meaning to complete and finish, but I never had the time.. or rather, the feeling it was urgent enough to make time. Do people even visit my blog anyway?

Now we've built something really cool with modmore that is going to change that - and already has.


The all-new shiny website is a project from modmore that aims to be a daily-ish news source for all things MODX. It complements official sources, like the MODX blog, with editorials, reviews, tutorials and links to other interesting articles around the web. And with a weekly reading list, anyone can stay up to date with minimal effort too. 

But best of all though, it's a project for the community. Anyone can submit an article and I hope that people who didn't feel like they have a platform to publish their thoughts and knowledge, will find their way to now. Together, we can build and maintain an awesome news platform that keeps people updated and excited about the many initiatives and great tools around MODX. 

Christian Seel did the design and front-end, while I worked on making it work and writing a bunch of content so we have a buffer to get through the first few weeks while we continue producing content. There are some great articles lined up, including a preview of the new Premium Extras from, answers to age old questions about the MODX brand, a couple of tutorials going into more detail on how we built and lots more.

So go ahead, check out the articles we published so far and links on (also on Twitter and Facebook). 

As for this site? It's still a place for me to publish some of my thoughts, so maybe we'll see some more posts here now that I've been getting into the habit of writing more. Maybe not. Time will tell!

Read 0 comments and share your own thoughts!