Reverse Engineering McDonalds Loyalty App's QR Code

Background Our current project involves loyalty and one of the apps we look at a lot is the McDonalds loyalty app. In the McDonalds loyalty app, there is a QR Code which typically consists of the letter M followed by 6-digits. A customer can scan this QR Code at a McDonalds kiosk to earn points for thier order. As the customer accumulates points, they can redeem offers in exchange for those points.

Understanding WSDLs

I’ve integrated with a number of systems through SOAP Services. SOAP Services are described using WSDL files (Web Service Description Language). I felt it was worth taking the time to understand the structure of these files. I drew this diagram to summarise the structure: A WSDL is an XML file that defines one or more Services. Each service can have one or more endpoints, where each endpoint is a remote procedure call.

Why is this codebase such a mess?

When I first started working professionally as a Software Engineer (an Android developer, to be specific), I worked on a codebase that would read configurations from an XML file. I would say that 90% of the crashes in the app were because of the optimistic way the XML file was parsed. I asked my team lead, “Who wrote this? I’m always fixing this,” to which he replied, “He was a talented guy.

The Tower upon the Lake

I write stories out of the bad dreams that I have. This is a story based on a dream that I had around 2008. Riding down the hill, it appeared as though the forest was ablaze as the dwindling sunlight fell on the autumn leaves. At some distance, he could see the lake, placid and shimmering. He made his way towards the lake, going off the beaten trail. Twigs and dried leaves crackled under his bicycle as he made his way down the muddy soil.

Worst.API.Ever

Back when I was developing Android applications, the worst REST API I ever had to consume had a response that looked something like this: [ [true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false], [false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true], [true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true], [true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false], [], [false,false,false,false,false,false,false,false,false,false,false,false,false,false], [true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true], ] Allow me to explain: This API was used to retrieve available time slots in the upcoming week. Each nested array represents a day in the upcoming week. So for example: If today is Friday, then the array at index 0 represents Saturday.

Distributed Microkernel Architecture

We were contracted to build an appointment booking system that enabled hauliers (truckers) to pick up containers assigned to them from a sea port. The tricky bit was that the contracting company operated a number of ports, and for legacy reasons, different ports had different strategies to assign a container to be picked up by a particular haulier. For example: in one port, you’d assign a haulier by entering their username.

The Ice Cream War

This is the story of the Ice Cream War that took place between my little brother and I when we were kids. I was born into a family of four brothers with myself in the middle, two elder ones and a younger one. The four of us grew up in Kuwait, a small country in the Middle East. Now as far as I’m concerned, Kuwait has one of the best Ice cream companies in the world: the Kuwait Danish Dairy or KDD for short.