IO::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 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 ArticleHow We Spent Two Days Making Perl Faster
img { max-width: 90%;} pre { white-space: nowrap; word-wrap: initial; width: 50em; } This is a story about a significant new optimization to the Perl interpreter. It is a story about battling code...
View ArticleHow we designed Booking.com for Business
figure{margin: 1em 0 2em;border:0;padding:0;} figure img{max-width:100%;margin-bottom:0;} .entry-content li {margin-bottom: 1em;} It’s no secret that Booking.com has a strong data-driven culture. We...
View ArticleEvaluating MySQL Parallel Replication Part 3, Annex: Under the Hood
This is the annex to Evaluating MySQL Parallel Replication Part 3: Benchmarks in Production.There is no introduction or conclusion to this post, only landing sections: reading this post without its...
View ArticleEvaluating MySQL Parallel Replication Part 3: Benchmarks in Production
Parallel replication is a much-expected feature of MySQL. It is available in MariaDB 10.0 and in MySQL 5.7. In this 3rd post of the series, we present benchmark results from Booking.com production...
View ArticleAbstracting Binlog Servers and MySQL Master Promotion without Reconfiguring...
pre { min-width:590px; white-space:pre; display:block; hyphens:none; word-break:normal; } In a MySQL replication deployment, the master is a single point of failure. To recover after the failure of...
View ArticleChanging our attitude towards failure
blockquote em { font-size:small; display:block; line-height:1.75em; padding-top.5em; font-weight:bold; } Are you afraid to have your designs critiqued? If so you’re not alone, but it’s worth...
View ArticleUsing Riak as Events Storage - Part 1
pre span{ color:black!important; } pre { color:black!important; } .codehilite .err{ border:1px solid black; } Booking.com constantly monitors, inspects, and analyzes our systems in order to make...
View ArticleUsing Riak as Events Storage - Part 2
pre span{ color:black!important; } pre { color:black!important; } .codehilite .err{ border:none; } In this post, we'll see how to push data to Riak, how to read it later on, and how to perform data...
View ArticleKeeping Control of the Front-end
At Booking.com, hundreds of developers and designers contribute daily to our codebase, which leads to potential complications with code discoverability, maintenance, and reuse. In this post, we're...
View ArticleUsing multivariant tests to determine performance impact
When we introduce new features on our website, sometimes it’s not simply the behaviour of our users that changes. The behaviour of our own systems can change, too.For example: A new feature might...
View ArticleUsing Riak as Events Storage - Part 3
pre span{ color:black!important; } pre { color:black!important; } .codehilite .err{ border:none; } In this post, we'll see how to apply transformations to the events data stored in Riak without the...
View ArticleThe one where Booking.com sent travellers to Mars
.caption { color: #999; font-size: 12px; } .img-caption { margin: 0 0 20px 0; } sup a { font-size: 10px; } iframe { margin: 0 auto !important; } Have you ever dreamt of embarking on a voyage through...
View ArticleProgressive Web Apps with Service Workers
sup a:link { font-size: 80%; margin: 0 2px; text-decoration: none; }In this post we will discuss Progressive Web Apps and Service Workers. How can they help modern-day mobile web users, and how are we...
View ArticlePerl IntelliJ Plugin - Herd your code
Development and navigation in a large codebase can prove quite the challenge. A common tool when tackling such a large codebase is an Integrated Development Environment (IDE). Unfortunately, the main...
View ArticleA Few Fun Tools We Built At Booking.com
Everyone who starts working at Booking.com gets the technology talk. “We don’t want to hold you back,” they say. “We don’t want to restrict your creativity. You’re free to use whatever software you...
View ArticleTaming the events: How we regained petabyte-scale Hive query power
#disqus_thread { border-top: none; } .footnote-ref { font-size: 80%; } .footnote p { padding: 0; margin: 0; } article .footnote p:first-of-type, article .footnote p:first-of-type a { font-size: 100%;...
View Articlek-Nearest Neighbours: From slow to fast thanks to maths
.entry-content li { margin-left: inherit; } Abstract: Building the best travel experience for our customers in Booking.com often involves solving very challenging problems. One that appears very...
View ArticleEvaluating MySQL Parallel Replication Part 4, Annex: Under the Hood
This is the annex to Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production.There is no introduction or conclusion to this post, only landing sections: reading this post without...
View ArticleEvaluating MySQL Parallel Replication Part 4: More Benchmarks in Production
Parallel replication is a highly-expected feature of MySQL available in MariaDB 10.0 and in MySQL 5.7. We already presented benchmark results with MariaDB 10.0 in the previous post of the series; in...
View Article5 ways to listen to your customers
ol { margin-left: 30px; } blockquote { font-style: italic; border-left: 3px solid #eee; padding-left: 20px; margin-left: 0; } .caption { font-size: 80%; color: #999; margin-top: -20px; }...
View ArticleA matter of design principle(s)
.caption { color: #999; font-size: 12px; } .img-caption { margin: 0 0 20px 0; } article h4{ margin-bottom:-1.5em; } Some lessons learned from jumping into the deep end.One of the core principles...
View ArticleHardening 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 thefantastic 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 so...
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 ArticleAutonomous Peer Learning at Booking.com and How You Can Do it in Your...
.caption { font-size: 80%; color: #999; margin-top: -20px; } ol li p:first-of-type { font-size:100%; } .entry-content li { margin-left: auto; } Continuous learning on the job is hard. We all see...
View ArticleNamed Entity Classification
.entry-content li { margin-left: inherit; }abstract: The customers of Booking.com communicate with us through different mediums. They perform queries on our search engine, provide us with reviews...
View ArticleOn Diversity
It has become more and more common to vocally declare oneself in favor of diversity, notably in tech. I do not think, however, that what diversity actually brings is well understood across the...
View ArticleUsing Riak as Events Storage - Part 4
article pre { background-color: #f5f5f5; } body { background-color: #fff; } pre span{ color:black!important; } pre { color:black!important; } .codehilite .err{ border:none; }We saw in the previous...
View ArticleDesign Critique — The Booking way
It’s Thursday afternoon. For two hours, a group of designers from different teams get together in one of the meeting rooms in Booking.com’s Amsterdam office to furrow their brows and drink phenomenal...
View ArticleTroubleshooting: A journey into the unknown
article pre { white-space: pre; overflow-x: scroll; font-size: 90%; }Troubleshooting is a journey. It’s a long, unpredictable trek, one where you know the start and the end points but have zero...
View ArticleAn unconventional way of learning a new programming language
.caption { color: #999; font-size: 12px; } .img-caption { margin: 0 0 20px 0; } sup a { font-size: 10px; } iframe { margin: 0 auto !important; } There are more than 500 programming languages, and it’s...
View ArticlePyData Amsterdam 2017 at Booking.com: Deep Learning, Statistical Models and NLP
In April, Booking.com hosted PyData Amsterdam 2017. The Booking.com headquarters was filled with 330 Python developers and data scientists from all over Europe, who gathered for a weekend full of talks...
View ArticleAutomated image tagging at Booking.com
body { background-color: #fff; } .entry-content li { margin-left: inherit; }Abstract: Understanding the content of an image is a reasonably easy task - at least for us humans. For computers however,...
View ArticleAvoiding phase transitions in server configuration
It’s a well-known trope that if your code doesn’t run, it probably doesn’t work. This is particularly true of error handling, error recovery and failover code, and has lead to the development of...
View Article