Just got a passport? Never been to that part of the world before? Here are some simple but useful tips that we have used to save us stress on our recent trips abroad. 

Plan a strategy, not your trip.

What I mean by this is don’t try to plan every single moment of every day. Sure, this works for some people but in reality, things will change, and a rigid timeline will only serve to stress you out and negatively impact what wouldn’t be a big deal if you were playing on home turf.

One way we recently implemented this strategy pertained to possible restaurants  to visit in Amsterdam. While we did make a booking one night, the other cafes and establishments were set as bookmarks on Google Maps so if we found ourselves near one at the end of a day’s touring we already knew where to go.

Figuring out where to stay? Look for the attractions before you look for a bed.

We recently made the mistake of booking our accommodation before we booked our touristy activities. The result was that while we had a nice apartment for our stay, we were nowhere near the common sights to see for newcomers to London. Don’t be us. Instead, figure out what you want to do and where those places are and then book a room nearby. It may not be the cheapest but when you factor in the cost of transportation and your time to get all over the place in a cab or public transit it starts to make sense.

Arm your phone or know how to get online once you arrive.

The last thing you want to do is arrive and have to hunt down a SIM card or WIFI dongle. I highly recommend purchasing one before you leave (ex. I bought a three SIM card off Amazon before our trip to Europe) so that when you land you can boot right up. Alternatively look for a sim card machine before you leave the airport. I’ve done this in places such as Hong Kong, Singapore, Thailand, Manila, and a few others with no issue.

*NOTE* Make sure your phone is unlocked before you swap in another carriers SIM!

Get cash early.

A lot of places accept credit cards nowadays, a lot of places don’t. This is an easily avoidable headache. However, I don’t recommend using a currency change stand to do this. The best ranks are either a) via ordering foreign currency from your bank or 2) if you have a no ATM fee debit card, an ATM at your destination.

Don’t mess around with transportation to your hotel/AirBnB.

One of the last things you want to do when you land is worry about transportation from the airport. With that, I HIGHLY recommend pre-booking some kind of transportation either via a reputable third party or via your accommodation. This can be very optional in places where the locals are more trustworthy and your flight isn't very long, but trust me when I say that it’s beyond helpful to see your name on a sign when you get through customs in a wholly unfamiliar country with a matching wholly unfamiliar culture.

Day 1 – Walking/Bus Tour

Walking/Bus tours sound cheesy and to an extent they are. But believe me, no amount of prep work will prepare you for what you actually find at your destination. Use one of these tours to a) acclimate yourself to your new reality b) push yourself to be active and not give into jet lag with an afternoon nap and c) find places and neighbourhoods that you want revisit later. 

Make a list, check it twice.

This goes without saying – make a packing list. And guys – plan outfits. Without this list you may forget something simple like sunglasses or your portable battery. It’s cheap insurance against a headache once you arrive and unpack only to find that you forgot a key part of the ensemble due to the chaos that was the packing process.

Buy a luggage scale.

Seriously, make the $10 investment on Amazon. And TAKE IT WITH YOU! 

Prepare to waste some money.

Last but not least, prepare to spend money on stupid things that either get lost or that you end up not needing. As frugal travelers this hurts us the most (well, maybe me more than my wife) but we’ve come to accept that we may misplace a bus ticket or forget a charging cable. It happens, and in the grand scheme of the vacation it’s not even worth a second thought.


PiAware gets Lit!

In this brief post I will walk you through the steps I took and challenges I faced in connecting my Raspberry Pi 3 running PiAware (flight tracking software) to my Particle Spark Core IoT device via the MuleSoft Anypoint platform.


Light up a LED on the Core whenever a aircraft emitting an ADS-B signal passes overhead. Additionally, I wanted to learn about the Mulesoft tools, hence the over-complication. 

Devices involved:

  • Raspberry Pi 3 Model B running OSMC 
  • Particle Spark Core running a simple web-enabled LED enable/disable app

Software involved:

  • PiAware connected to a FlightAware Pro USB stick
  • MuleSoft Anypoint Platform running a 30 day trial of Enterprise ESB
  • Photon web IDE (for pushing code to the Spark Core)


Step 1 - Program the Spark Core

This was supposed to be a simple task, however, due to the fact that the Core hadn't been used in over a year quickly I found that I wasn't even able to push the simplest of apps to it. After a few hours of trial and error I was finally able to connect it to my computer, flash it with the following commands, and establish a solid link to the Photon cloud.

photon flash --usb cc3000
photon setup

I then pushed a barely modified version of the Web Enabled LED sample program to it that, instead of on/off, received true/false as parameters to the enable & disable function. The input of true (planeOverhead) would light the diode and false would turn it off. 

Step 2 - Configure and Hack the Pi

Installing PiAware is a whole different topic and one that is covered very well by FlightAware. Therefore, I will skip to the part where I figured out two ways to pull the data that the Dump1090-FA module received from the receiver and antenna. 

1. TCP via port 30003 - this is a *decoded* stream to which Dump1090-FA writes when aircraft data is received. It includes information like latitude, longitude, identity, speed and altitude. 

Example data:

captured aircraft data 

2. JSON file published via Lighttpd so accessible remotely (http://<host>:8080/data/aircraft.json). This file is updated with the current aircraft nearby and is exposed via the bootstrapped HTTP server. It looks like this:

{ "now" : 1506331591.7,
  "messages" : 40461,
  "aircraft" : [

3. Useless in this scenario but cool nonetheless, a web page with detailed information:


In the integration I would attempt to consume both data endpoints with varying levels of success. 

Step 3 - Create an Integration Flow in Mule

Easier said than done... at least it is when you're starting from scratch. Anyway, I love integrations, when I was implementing software the part where I got to assist with the nuts and bolts of making two very different systems speak was my favorite part, hence why I wanted to give Mule a spin and see how it makes things easier. 

I briefly skimmed a few tutorials and then jumped right in.

And sank.

Take 1

My first flow (above) failed because of my poor attempt at trying to read from the socket with the TCP connector. Sure, in theory this should work but this connector seemed to be 1) new to the product/lightly documented and 2) geared towards a server role and therefore wanted to accept connections and NOT create them. Couple that with the fact I didn't want to deal with decoding the stream, I moved on after I found the JSON file I mentioned earlier. 


Try #2 was marginally better since I switched over to the HTTP component and started my attempt at reading that JSON file. I still had a few major problems though:

  1. The HTTP component wanted to accept connections, not create them. 
  2. My payload kept coming back erroneous/unable to be manipulated or tested.

So I pressed on and ultimately came up with this:


The flow does a few fun things:

  1. CRITICAL MISSING LINK - It polls the JSON file every 10 seconds for content. 
  2. CRITICAL MISSING LINK - The content that is found is converted to a String. 
  3. The new String is logged. 
  4. The variable component sets planeOverhead = true if a string "flight" is found in the content of the data. This was a test that I found eliminated a lot of bad/incomplete transmissions.
  5. The planeOverhead variable is logged.
  6. The planeOverhead variable is injected and access_token for my Photon account set as the new payload for the call to the Photon Cloud. 
  7. The Photon Cloud is called and the Spark Core is lit if a plane is overhead!

In the End...

The result is nothing fancy, but very much sufficient proof of concept that it all works. 

It lives!

It lives!


A couple other takeaways:

  • I tried running Mule ESB on my Pi, however, the load was too great (even with Java stack memory set to 256). Guess I need another one. 
  • Getting the payload just right for Photon was a pain. 

And if you're curious, here's an example of the console logging:

DEBUG 2017-09-25 19:58:06,849 [[kjbn].http.requester.FA.worker(1)] org.mule.module.http.internal.HttpMessageLogger: REQUESTER
HTTP/1.1 200 OK
Content-Type: application/json
Accept-Ranges: bytes
ETag: "3414929403"
Last-Modified: Mon, 25 Sep 2017 09:58:04 GMT
Content-Length: 69
Date: Mon, 25 Sep 2017 09:58:04 GMT
Server: lighttpd/1.4.35

{ "now" : 1506333484.4,
  "messages" : 41883,
  "aircraft" : [

DEBUG 2017-09-25 19:58:07,083 [[kjbn].http.requester.HTTPS_Request_Configuration(1) SelectorRunner] org.mule.module.http.internal.HttpMessageLogger: REQUESTER
POST /v1/devices/x/led HTTP/1.1
Connection: close
User-Agent: AHC/1.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 63

DEBUG 2017-09-25 19:58:08,013 [[kjbn].http.requester.HTTPS_Request_Configuration.worker(2)] org.mule.module.http.internal.HttpMessageLogger: REQUESTER
HTTP/1.1 200 OK
Date: Mon, 25 Sep 2017 09:58:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 81
Connection: close
Server: nginx
X-Request-Id: ec45fbce-9337-4300-bd22-e4bf8eb67eef
Access-Control-Allow-Origin: *


My Malaysian Hail Mary

A short time ago Malaysian Airlines announced that they would be devaluing their award chart yet again on June 10th, all but effectively rendering the program useless for anything but certain economy flights where the stars align just right. 

When I read the email and accompanying PDF that detailed the changed my heart sunk. Only a month before the announcement was made I had found a sweet spot on their award chart that seemingly no one else had taken advantage of. Specifically, it was a 87,000 Enrich point award that allowed you to fly anywhere in the world in business class for 87,000 points max with the only caveat being that the flight(s) had to be on a single carrier. The icing on the cake? Not only is Malaysian a member of OneWorld, they also partner with Etihad and Emirates which meant that you had options on those airlines, as well as Qatar, Cathay, Qantas and JAL to name a few.

However, with the new award chart this 87,000 point ticket jumps to 165,000 points. OUCH! 

To those of you in the US, Enrich is probably a program that you would never consider - and with good reason. First of all, AA is a OneWorld member and Etihad partner and the same award has and still costs around 85k. Secondly, unless you have a Citi ThankYou point earning card you don't have access to the program (though if you do have TY points it is a good option). 

For those of you in Australia - this was the golden ticket. You can access Enrich points via American Express Membership Rewards (4:3 with Gateway, 1:1 with Ascent), Citi (2:1) and Westpac (2:1). That said, if you took advantage of the Amex Explorer 100,000 point deal it's likely that you very nearly have those 116,000 points that you need to book this award. 

Back to my story - I had the points but I didn't have the destination. That was, until days ago when our friends announced their wedding in Manchester had a date: late April next year. This about as perfect of an opportunity to take advantage of this award as I could imagine. It's far enough in advance that we can find award inventory AND we were just over a week away from the June 10th Enrich conversion date. The gears started turning...

I searched to check Cathay Pacific, Qatar and Emirates, and to check Etihad availability to the UK and ultimately found the following options:

  • ADL-DOH-MAN - Qatar Business (A350's)
  • SYD-HKG-MAN - Cathay Business (777 & A350)
  • SYD-AUH-LHR - Etihad Business (A380's)

Calling Malaysian is an experience - the agents are truly kind people, they just don't know much about the program. And while that's not always a bad thing, it doesn't make for short calls. I noted that usually wait times were often < 5 minutes but I had to endure long holds while the agents figured out how to accomplish what I was asking for. 

One of the perks of the Enrich program is their ability to hold awards. I shortlisted the Qatar and Etihad flights (the Cathay wasn't bookable by the agents after all - I'm sure I could have gotten it if I tried enough times but it wasn't my top choice anyway) and called a few time to get them both held under my name.

When that was done I tried to transfer the points on and I found that I was unable to enter my Enrich number online - it kept saying it was in a bad format. I called AMEX and in 10 minutes I had connected mine and my wife's accounts no problem.

The American Express transfer took about 16 hours and it was back to the phone I went. I had thought about what I really wanted to do while the points were transferring and I ended up liking the idea of going Etihad out of Sydney to London where we could spend a few days before the wedding. The thought of a positioning flight SYD-ADL and then MAN-LHR is just not appealing when we will already be traveling for 25 hours or so.

I found an incredibly helpful agent, Debbie, who over the course of about an hour was able to get the Etihad flights booked. The damage? 87,000 Enrich points and $130 AUD. Not bad for a flight that's currently valued at over $5,000. 

For comparison, those flights would have cost the follow amounts in these other programs:

  • 162,829 Etihad Guest Points + $130
  • 239,300 Virgin Australia Velocity Points or 139,000 + $651.52

The conclusion? Booking these tickets is doable, but it takes patience. And more importantly, you have a few days left before this option disappears forever.