Hardening Perl's Hash Function
In 2003 the Perl development community was made aware of an algorithmic complexity attack on the Perl's hash table implementation[1]. This attack was similar to reports over the last few years of...
View ArticleNative Extensions for Perl without Smoke and Mirrors
The standard mechanism by which one can hook native extensions into Perl, dubbed XS for "eXternal Subroutine", is often criticized for its arcane syntax and for obscuring how the interaction with the...
View ArticleCustom Browser Extensions for Front End Developers
Booking.com is displayed in dozens languages all over the world. We also support over fifty currencies. You can browse prices on our site in either the accommodation's preferred currency or a currency...
View ArticleA Faster Perl Runtime in Tiny Steps
Booking.com uses the Perl programming language heavily across its entire technical infrastructure. At the size of our infrastructure, even small performance improvements can translate into hefty...
View ArticleMySQL 5.6 GTIDs: Evaluation and Online Migration
At Booking.com, we use MySQL to operate our web site where tens of million of pages are viewed and over 625,000 room nights are reserved every day. This is a lot to ask for our database infrastructure....
View ArticleAutomating CSS sprites for large organisations
CSS sprites have come a long way in the ten years since Dave Shea first wrote about them for A List Apart, way back in 2004. Amazon was an early proponent of CSS sprites. A CSS sprite is the technique...
View ArticleMore Optimizations in Perl 5.20-to-be
In a recent post on his blog Matthew Horsfall explained a few of the optimizations to Perl that he contributed recently. On this site, we reported on the fantastic work that Dave Mitchell is doing. The...
View ArticleMySQL Slave Scaling (and more)
At Booking.com, we have very wide replication topologies. It is not uncommon to have more than fifty (and sometimes more than a hundred) slaves replicating from the same master. When reaching this...
View ArticleReusing Bitmap objects on Android
Memory management in Android can be a bit complicated if the application has heavy media demands. The Booking.com Android application had an issue explicitly dealing with memory management that...
View ArticleGoldilocks and the Three Experiments
Once upon a time, during a usability test in a low and Nether-land, a seemingly meaningless pinch of the fingers by a middle-aged Dutch man named Geert sparked a series of three experiments by a girl...
View ArticleWould you like fries with that?
img { max-width: 90%;} The Hamburger Icon.The Hamburger Icon – it’s everywhere. All around you. In web apps, mobile sites, desktop sites, and computer software. The ubiquitous three-line icon is now...
View ArticleBetter Crash-safe replication for MySQL
At Booking.com, we use MySQL replication extensively for read scaling. However, because we have so many slaves (we have thousands), sooner or later, one of them will fail. In MySQL 5.5 and earlier,...
View ArticleB.Smashing – A Front End evening with Booking.com and Smashing Magazine
On Friday 10th October, Booking.com hosted the first-ever combined Booking.com and Smashing Magazine event, B.Smashing, at our head office in Amsterdam.For years we have been attending Smashing...
View ArticleDistributed Top-N Similarity Join with Hive and Perl Part I
At Booking.com we have a lot of data to manage. Most of the time MySQL does the job, but for very large datasets and heavy analytics we use Hadoop and Hive. Most of the time Hive serves our analytical...
View ArticleA/B Testing - Concept != Execution
ol li p {font-size: 100%!important;} “We tested that, and it failed.”This typical excuse is rampant in the world of A/B testing, but it can overlook the fact that a concept in and of itself is...
View ArticleIO::Socket::Timeout: socket timeout made easy
Without network operations, running a website for booking accommodation online would be nearly impossible. Network operations can be anything from simple actions like talking to a browser with a user...
View ArticleBetter Parallel Replication for MySQL
Parallel replication is a much-expected feature of MySQL. It’s available in MariaDB 10.0 and in MySQL 5.7. Yet, both lose efficiency when replicating through intermediate masters. In this post, we’ll...
View ArticleEvaluating MySQL Parallel Replication Part 2: Slave Group Commit
(The previous post, Better Parallel Replication for MySQL, is Part 1 of the series.) Parallel replication is a much expected feature of MySQL. It is already available in MariaDB 10.0 and in MySQL 5.7....
View ArticleSereal - a binary data serialization format
We introduce Sereal, a new, binary data serialization format that provides high-performance, schema-less serialization for Perl and other languages.As with many things in computing, serialization of...
View ArticleAbout opening doors and asking questions: An interview with Janne Jul Jensen
With more than 80 designer brains at Booking.com we “think” we know quite a lot. However, being a data-loving company, we have figured out that 986 UXers know even more – 986 is the number of members...
View Article