The rich get richer: Loonie swaps and altcoin airdrops

Castle_CanadaSo I was walking along one day when I was suddenly accosted by a Canadian Mountie in full uniform: red jacket, jaunty hat, the works.  He saluted me smartly and asked: “How about some Canadian dollars, eh?

“No thanks,” I replied and tried to walk away, but he followed.  “Please listen!  I want to give you Canadian dollars!”

“Sorry, I’m quite happy with my American dollars.”

“No, sir, I’ll give them to you for free.  No strings attached.”

I stopped. “For free?”

“That’s right!  All you need to do is prove to me that you have American dollars, and for every dollar you have, I’ll give you a Canadian one.”

“But why?”

“I want you to invest in Canada.  The US has reached its natural limits of growth, but in Canada, we have big blocks of land just waiting to be exploited by investors like you.”

DSC_4268“But aren’t those big blocks mostly useless frozen tundra?”

The Mountie looked irritated.  “Maybe today, but it’s about the potential, an investment in the future.  Look, it’s free money, do you want it or not?”

This smelled like a scam, but I was still intrigued.  “Well, let’s say I do.  How exactly do I prove that I have U.S. dollars?  Do you want me to lend them to you or something?”

“No need!  Let’s go to your bank and ask the teller to show me a bank statement.  I don’t need to know your name, address or anything, just that you have a bank account with money.”

“Huh,” I opened, and eyed the Mountie.  He did look terribly earnest, standing there at attention.  “Fine, let’s do it.”

So we went to the bank, I showed my ID to the teller and told her to give me a paper on bank letterhead showing my bank account and its balance.  The teller did so, and when the Mountie saw I had $10,000 in bank, he opened up his suitcase, took out a stack of $10,000 in Canadian dollars and handed them to me with a flourish.  “Enjoy your loonies!  Gotta run, bye!”  And he took running off after another customer who was just leaving the bank.  “Excuse me, sir, can I give you some Canadian money?  Sir?  SIR!”

“Well, that was weird”, I thought, then turned around to the teller and asked her to convert my shiny new loonies into U.S. dollars.  And now I had $17,900 in my U.S. account.  Ka-ching!

70s-hippie-poncho-3But right after I left the bank I was accosted again, this time by a disheveled hippie in a poncho.  “Hola, dude.  Can I give you some awesome Peruvian soles?”  “What’s a sol?”  “It’s the currency of the sun, man!  They represent solar energy and the pathway to a more inclusive economy!”  “And what do I need to do to get them?”  “Easy: just like us on Facebook, and show me your bank statement!

I was about to give the thumbs up, when out of nowhere a Vietnamese lady in a slinky white ao dai appeared and stepped in front of the hippie, almost impaling his Birkenstock-clad foot with a 5-inch stiletto heel.  “Ignore this man,” she commanded.  “I will give you dong.”

“Pardon?”  “Vietnamese dong.  Excellent currency, great growth prospects, backed by full might of Communist Party of Vietnam.  Just show me your bank statement, and I will give you this magic box that you can install in your home.  Every month, when the full moon rises, the box will print many millions of dong just for you.

“But why do you both want to give me money?  What do you get out of this, and why don’t you just give money away to everybody?”

Sign_BoxDoesTheToilet_LargeThe hippie shuffled uncomfortably.  “Well, these soles, they are real money, but they are hard to use outside Peru.  We want to make soles a strong world currency, like the U.S. dollar.”

A lightbulb went off.  “So if you give away your soles and dong to people who are already rich…”

“…they will become interested in our money, and buy more of it, and we will all be rich!”, said the Vietnamese lady.

“Well, speaking as a rich person, that sounds like an excellent business plan.  Let’s do it.”

Soon enough, I had 3,200 soles and 27 million dong.  I walked back into the bank, converted them to $2,100 U.S. dollars, and looked at my new balance of $20,000.  All in a day’s rent.

~ ~ ~

Sign_CashPit_LargeThis little parable is, of course, patently ridiculous.  Nevertheless, ridiculous or not, it’s also exactly what’s happening in the weird world of alternative cryptocurrencies (altcoins).

In the specific case of Bitcoin Cash, where a single existing chain was forked, there’s an entirely sensible reason for getting “free” coins, although as many observers noted, there is no rational reason for the sum of the old and the new to exceed the value of the old. (US and Canada is an imperfect analogy; imagine instead that California were to split away from the US and launch its own fiat currency.  Would the combined two be stronger than the original?)

So what’s the irrational reason?  Speculation.  And this also explains to the phenomenon of the “airdrop”, where an altcoin simply decides to give away free money to entice users.  The first airdrop, Auroracoin, altruistically handed out equal amounts to all residents of celand, but later drops just hand out their coins to people who already have lots.  Stellar Lumens, without a hint of irony, justifies their reverse welfare as “connecting people to low-cost financial services to fight poverty”, while Byteball takes a more fatalistic “this is what we gotta do to survive” approach and Bitcore doesn’t even pretend to be anything other than a Ponzi scheme (“three percent interest Every. Single. Week”).

Anybody want to take a bet on how long the party lasts?


Monaco: Doing the math on an ICO where the house always wins

genting_hotelMonaco has a nifty premise: it’s a debit card that lets you avoid currency conversion fees by the magic of cryptocurrencies. Just swipe your card to pay in local currency, so the pitch says, and it will send some Ethereum (ETH) or Bitcoin from your account to the merchant at “perfect interbank exchange rates without markups or fees”, saving you 6-8% on every $1000 you spend.

That’s a pretty bold claim in itself, and I’ll get back to it later, but the even more interesting thing is that this company’s Initial Coin Offering (ICO) has been backed to the tune of 54,800 ETH, or around US$20 million at time of writing.  That’s a lot of coin for a debit card, and I became curious: what kind of margins these brave investors can hope to get back?

Revenue and profit

skyway_valleyInvestors in Monaco become holders of Monaco Card Tokens (MCO).  Monaco promises these investors exactly one source of revenue: a flat 1% licensing fee on all debit card transactions paid with cryptocurrencies, which is converted into ETH immediately and added to a pool called the Asset Contract.   This also means that any transactions made using Monaco but funded by fiat, which in Monaco’s own opinion will account for 60% of transactions in the first year, will net investors precisely nothing.

The Monaco whitepaper (PDF, page 24 onward) has “Conservative” and “Optimistic” scenarios that purport to sketch out the vast profits to be made.  Once you puzzle your way through what the numbers mean, three things jump out quite quickly.

First, they assume that Monaco will pick up 165,597 or 281,515 regular users in the first year. That’s a mighty ambitious uptake number given that some estimates for the total number of cryptocurrency users hover around the 1 million mark, meaning 1 in 4 of them would need to start using Monaco within a year (and not competitors like Token or TenX). By the second year, the optimistic model has nearly all of those million on board and churning through $2 billion, and by five years (2022), we’re at 5 million and $16.6 billion. The conservative model, on the other hand, calls for a mere 3 million users and $9.8B by 2022.

Second, there’s a blandly named factor called “Growth in Underlying Assets” which purports to project how ETH will appreciate against the US dollar, and has nothing whatsoever to do with Monaco itself.  The conservative model assumes a mere 40% year, compounded forever, while the optimistic model assumes 100%/year.  This translates to a source of 3200% growth within five years, irrespective of Monaco’s popularity!

Third and most strikingly, while the whitepaper presents lovely big numbers for the value of the pool as a whole, there’s nothing about profit per MCO, the value of each MCO, or the expected return on investment (ROI).

So I did my own math: I computed the ROIs for the whitepaper’s numbers, and I added two models of my own.  In my “optimistic” model, I assume that each of the ~2,000 investors manages to convince 5 other people to get a Monaco and use it with cryptocurrency to the tune of US$2,500 a year, and that ETH stays at its current valuation.  In the “pessimistic” model, I assume that the only people using it are the investors themselves, they only spend $1,000/year, and that ETH prices fall back to $150, a level they last plumbed in the dim antiquity of four weeks ago. Here are the numbers for the first year for all four models (raw data):

Source Gyrovague Monaco
Model Conservative Optimistic Conservative Optimistic
Profit per MCO (USD) $0.0008 $0.0100 $0.0873 $0.1484
Return on investment 0.04% 0.47% 4.07% 6.93%

That’s not looking too great unless you’re hitting the Kool-Aid pretty hard.  But since investors have bought their MCOs at around 140 MCO per ETH, which works out to around $2.14 per MCO at current exchange rates, you might naively assume that after the ICO is over, they can at least sell them back for more or less the same price.  Right?

Not so: all of that sweet, sweet ETH now belongs to a future Swiss company called Monaco GmbH, not the investors.  The MCO Creation Terms section 2.4 helpfully spells out what their investors do get if they sell (“burn”) their MCO:

the right to claim … a pro-rata share of net license revenue (License Revenues) … if – and only if – the Monaco Card Project successfully generates such License Revenues.

In other words, the original price is completely irrelevant.  When measured in USD terms, one MCO is worth only the revenues computed above divided by the number of MCOs, plus, since they’re in ETH, the natural appreciation (or lack thereof) of those revenues.  With an estimated 10 million MCOs sold, here are what the models predict two years in:

Source Gyrovague Monaco
Model Conservative Optimistic Conservative Optimistic
Value of MCO (USD) $0.0008 $0.03 $0.90 $2.20
Profit/loss per MCO -$2.14 -$2.11 -$1.24 $0.05

In other words, if the card goes completely gangbusters and ETH continues to skyrocket, an MCO will be worth slightly more than what it originally cost, whereas if the card is moderately successful, it’s worth about 3 cents.

But I mentioned ETH skyrocketing.   What if our investor had just held onto the original ETH instead of turning it into MCOs?

Source Gyrovague Monaco
Model Conservative Optimistic Conservative Optimistic
Value of original ETH $0.54 $2.14 $4.20 $8.57
Profit/loss per MCO,
compared to holding ETH
-$0.53 -$2.11 -$3.30 -$6.37

Oops.  Perversely enough, it looks like the better ETH itself is as an investment, the worse off you are putting any of it into MCO!

Using the card

skyway_mistSo that’s the deal for investors. How about ordinary users who just want to use the card to realize those great 6-8% savings?

That’s a very good question, since there aren’t any users yet. In fact, Monaco has yet to announce when the cards will be available or what costs like annual fees will be associated with them. Their website also has lots of pretty pictures of their mobile app, but this app, too, remains firmly unreleased.

The other big mystery is the promise of “perfect interbank exchange rates without markups or fees”, since cryptocurrency exchanges do charge fees, which are often quite meaty at that (for example, 4% at Coinbase).  It is unclear how Monaco intends to make these costs go away, and the whitepaper (4.6) handwaves this away as “proprietary”, but one obvious option would be to take a leaf from the credit card playbook and quietly tack it onto the exchange rate itself, which would of course defeat Monaco’s primary purpose.  The currencies themselves also charge for transactions, which particularly for Bitcoin have recently been prohibitively high with fees of several dollars a pop, and as far as I can see Monaco never discloses who pays these.

If you signed up for a regular credit or debit card, details such as these would be found in the terms and conditions of that card. However, despite promising free “Monaco BLACK” cards to the first 500 investors, Monaco has yet to publish such a document.


Monaco looks like a great deal if you are Monaco.  Otherwise, steer clear.


The last subway line in Japan

Diorama at the Railway Museum, Saitama, JapanOn December 6, 2015, the Sendai Subway’s Tōzai (East-West) Line opened.   The second line of a provincial Japanese city, this event passed entirely under the radar of the Western media and even Japanese coverage faithfully followed the dulcet tones of the press release (時短 jitan, faster! 楽乗 rakunori, fun to ride!), a few pausing to note that the completion of the line had been delayed by the 2011 Tōhoku Earthquake.  Almost all stories approvingly added that the line uses linear motor technology, the meaning of which is so unclear to the average Japanese that it’s regularly confused with magnetic levitation, but which imparts the sheen of futuristic technology so necessary for a large Japanese infrastructure project.  A future this or any other transport technology lacks in Japan, for the Tōzai line is almost certainly the last subway line Japan will ever build.

This seems a bold claim to make, but the Future Railway DB and Wikipedia agree: in the entire archipelago of 126 million, there are neither any new subways under construction nor any even being seriously planned.  Not just subways, mind you; but new railway lines of any kind, with the notable exception of three that we’ll get to later.

Ueno Zoo Monorail, Tokyo, JapanSo does Japan need more lines? Arguably not, and it’s certainly had a good run.  In the 88 years that elapsed from the opening of Tokyo’s Ginza Line in December 1927 to today, 9 Japanese cities drilled, dug and blasted 750 kilometers of mostly-underground subways, with another 6 opting for more exotic options like monorails.  In central Tokyo alone, in the ten years since my first visit in 1997, great big slabs of the Namboku, Ō-Edo and Fukutoshin opened up, not to mention the all-new suburban Rinkai, Nippori-Toneri, Minato Mirai and Yokohama Green lines.

And then the Leviathan of Japanese public works, grown fat from decades of suckling on the teat of the taxpayer, finally ran out of the inertia that had sustained it all the way from the bursting of the Bubble in 1991 to the 2008 financial crisis.   It ground to a shuddering halt and lay still, and even the twin shocks of Abenomics and Tokyo winning the 2020 Olympics, applied to the heap like defibrillator paddles, threw up only airy bubbles of froth with next to no hope of realization.

The reason why Japan is no longer building lines is twinfold:

  1. Japan’s population peaked in 2010 and is set to decline at -0.7%/year, a figure that masks the gaping trench between the more or less stable cities (although even Tokyo will tip into decline in 2020) and the rapidly collapsing countryside, where some districts have already lost over 90% of their peak population.
  2. Japan’s public debt continues to soar into the stratosphere, with this year’s burden projected to hit 246% of GDP.

It’s a simple, crushing equation: ever more debt to pay back, ever less people to pay it.  In Shrinking-Population EconomicsProfessor Matsutani Akihiko of Japan’s National Graduate Institute for Policy Studies computes that by 2023, Japan’s bill for infrastructure maintenance will exceed its total budget for capital investment.

JR MLX-01 maglev model, Expo 2005, Aichi, JapanMatsutani’s suggested cure is shutting down excess capacity to free up scarce labor, paring back investment, increasing wages and freezing taxes.  Under Abe, Japan has done precisely the opposite, jacking up taxes and encouraging companies to spend, spend, spend on the three prestige rail projects still under way:

  1. In 2016, the first stage of the Hokkaidō Shinkansen bullet train to Hokkaido, Japan’s most rapidly depopulating island, opens at a cost of ¥1.5 trillion (US$12 billion).
  2. By 2022, the Hokuriku Shinkansen will creep down Honshu’s already rattlingly empty Japan Sea coast from Kanazawa to Tsuruga (pop. 68,000) at a cost of ¥700 billion (US$6b), plus another ¥1.4 trillion if they complete the loop back to Kyoto.
  3. Last but certainly not least, the crowning lunacy of them all, the Linear Chūō Shinkansen (there’s that word again!), which is basically 500 kilometres of tunnel duplicating the existing Tokaidō Shinkansen route between Tokyo and Osaka, only lined with superconducting magnets allowing speeds up to 505 km/h and built at a staggering-even-for-Japan cost of ¥9 trillion (US$72 billion).  The line is to be completed by 2045 and hopes to generate a total of ¥5 trillion in profit in the next 50 years, meaning that if all goes according to plan, by 2095 they will have paid back half the construction cost.  Now that is planning for the future.

Toy train, Railway Museum, Saitama, JapanBack in reality, Japan is simultaneously embarking on the equally mammoth task of dismantling its railways; not just the once-extensive rural network, which as elsewhere has been comprehensively obsoleted by cars, but urban transport akin to those recently-built subways.   Over half of Japan’s railways operate at a loss, including virtually all of those serving less than 2000 passengers/km/day, an increasingly unachievable number when ridership has falling faster than the population since 1995.

The first casualty was the Peachliner in 2006, a once-fancy automated line built to service an exurb of a Nagoyan suburb that carried only 6% of the people originally projected (Shinkansen planners, take heed) with operating costs that equalled rebuilding it from scratch every three years.  Next in line may be the Linimo, Japan’s sole operating (slow-speed) maglev line, which stops running when there’s a gust of wind and whose finances, losing ¥1.9 billion/year or nearly $1000 per daily passenger, are on equally shaky ground.

One rural railway managed to resurrect its sagging fortunes for a while by naming a cat as its stationmaster, but the rest won’t be so lucky.  It’s time, long past time, to let the zombies die and invest Japan’s dwindling money and manpower elsewhere.



Crashes only on Wednesdays

Ants, Gardens by the Bay, SingaporeSit back and grab a drink: it’s time for the story of one of my favorite bugs.

‘Twas my very first IT job, a software developer summer internship at a manufacturer of very serious medical equipment, primarily anesthesia delivery systems and hospital patient monitors. The latter are the boxes you see bleeping next to bed-ridden patients, drawing graphs of pulse, blood pressure, respiration etc and summoning nurses when they flatline.  The office was full of 2-meter cylinders of laughing gas, luxuriously bearded gurus expert in embedded systems, and entire rooms devoted to the documentation needed for the FDA certification of various devices.  Hushed voices still spoke of a bug that had slipped through testing ten years ago in one piece of anesthesia kit and caused the machine to reset in the middle of surgery, and needless to say a teenage greenhorn like myself was kept well clear of all production systems.

Instead I was given a plum prototyping project to test out the hot buzzwords of 1997: build a C++ server that listens to the serial port of a patient monitor and dumps a selection of interesting events to a SQL Server database, then send the data via CORBA to a Java applet, so doctors, relatives etc could see how the patient was doing via the Internet, with both the ability to see realtime data and browse previous records.  Spiffy!  Especially since I had zero practical experience in any of these languages or systems!

After a few weeks of butcherous hackery, much of it spent on inhaling the migraine-inducing Visibroker ORB manual and squishing utterly mundane type conversion bugs, I had my “Simpson” system more or less running, with “Homer” recording and serving the data and “Bart” displaying it.  Along the way I had learned out that CORBA was hopelessly overcomplicated, that AWT was painful (GridBagLayouts, brr), that applets were slow as molasses, and that Java otherwise seemed like a pretty decent language.  But there was a niggling bug: every now and then, the C++ server would crash hard, and I set about figuring why.

Crystal Cave, Cloud Forest Dome, Gardens by the Bay, SingaporeSince patient monitor whose output I was listening to was in another cubicle, I had done most of my development and testing using the handy “Demo” mode where it happily played back simulated cardiac arrests and such in a loop, and as far as I could tell my server never crashed while using this. It did sometimes crash when I or somebody else twiddled with the controls manually, especially during live demos, but for the life of me I couldn’t work out a way to make it crash repeatably, no matter what I did.  I logged all events to disk to try to find out what had happened just before a crash, but slow and careful manual replication of the exact preceding event sequence (“set filter to X, twist control knob exactly three notches to the right, press button…”), complete with running back and forth because I couldn’t see my PC’s logs when using the patient monitor, failed to elicit a crash.  Whatever “the evil event”, as I took to calling it, was, it seemed to cause crashes while eluding all logging.  Was there some sort of serial I/O or hardware issue corrupting the events?  Were cosmic rays flipping bits in my PC?!

After several weeks of frustration, where entire days devoted to experimentation had produced no results, I ended up basically adding printf statements to every single line between receiving the event from the serial port and writing it in the database…  and in the process, as I revisited every line of that code, a sinking realization dawned on me.

When setting up the database schema, in a misguided attempt at saving space, I had made the amateur mistake of using the event timestamp as the primary key — so if two events happened to come in at the same millisecond, the DB would throw a unique key constraint violation.  I noticed this early on, but determined that this only seemed to happen in unusual and uninteresting circumstances like when futzing about in the monitor’s internal configuration settings, so I added a catch block that logged a warning and continued on its merry way.

Sky Trees, Gardens by the Bay, SingaporeBut.  This was old-school code, and the log string was written C-style into a fixed-length 80-character buffer. While the length of the unique key violation message itself was invariable, the log timestamp happened to be formatted so that it used the long-form English weekday name (%E), so the output looked like “Monday, July 17, 1997, 10:38:47.123”.  Turns out English weekday names have an interesting property:

Name Length
Sunday 6
Monday 6
Friday 6
Tuesday 7
Thursday 8
Saturday 8
Wednesday 9

Caught on yet?  On Wednesdays, and only on Wednesdays, if somebody manually twiddled certain bits in the monitor settings in a certain way, two events would occur during the same millisecond and cause the DB to throw an exception, and the error message that logged this would be exactly 81 bytes long including the null terminator, overflowing the 80-char buffer and causing the program to crash!

Cloud Forest Dome, Gardens by the Bay, SingaporeEver since, I’ve made sure to use a dedicated and preferably auto-incremented integer ID as the primary key of every database table I need, and to log everything in ISO format, YYYY-MM-DD, no weekdays needed.  And over the years, I’ve learned that no matter how seemingly random and unpredictable the behavior of the bug, there’s always a logical explanation for it that you can find if you dig deep enough; that “unrelated” errors rarely are; and that it’s almost certainly your own damn fault.

Update: This story is now available in Russian! Когда программа падает только по средам

The Opal or Not Report: The hidden $98 (or $54) million fare hike

Krinklewood Carriages, Pokolbin, NSWAbout half a year ago, I launched the Opal or Not website that compares the fares of Sydney’s new Opal transit smartcard and the paper tickets it replaces.  As I’d hoped, this quickly went viral, bringing attention to Opal’s hidden costs and ending up in the Sydney Morning Herald.

Now getting my mug in the SMH is all well and good, but my end goal was to “make Transport for NSW to come up with a saner fare scheme”. Instead, TfNSW sent me a rather bizarre good cop/bad cop letter telling me to they’d love to cooperate, but implying they will sue me if I don’t stop using the Opal logo.  When I offered to play ball, changing the logo as a token of good faith, they sent me a 26-page report about all the things with my site that they were unhappy with; quite handy, as you’ll see later, but not exactly the kind of action I was hoping for.

Meanwhile, as they prattled on about how they’re committed to transparency yadda yadda, another arm of the same bureaucracy has been steadfastly stonewalling my request for a copy of that 7% report.  At time of writing, after half a year of increasingly absurd effort, they have yet to confirm in writing that the “7%” report they keep talking about even exists.  And maybe it doesn’t, because in other places they claim the figure is 4%!

Well, fine.  If TfNSW is not going to release their report, based on their vague projections, I’m going to write my own report, based on the cold hard data of the over 130,000 fare comparisons made on the site.  And here it is.

The short version

Who will pay more with Opal? Cost of Opal to Sydney commuters?
Transport for NSW report 4%? 7%? [citation needed] They’re not telling
Opal or Not report, model A: optimal tickets
61% [1] $98 million/year [1]
Opal or Not report, model B: estimated tickets
26% [1] $54 million/year [1]

Here’s how you can help fix this.

The long version

Wagon, Felton, CA, USA

Now there’s two basic requirements for Opal or Not’s data for it to be of any use: it has to be representative, and it has to be correct.

So the first question is, are the 130,000+ fare comparisons made on Opal or Not a representative sample of the Sydney commuter, instead of (say) an escapist chimpanzee recalculating his fare from Taronga Zoo to Bondi over and over again?  In terms of sheer sample size, it should certainly qualify: 812,000 people use Sydney’s public transport on an average weekday, so even if we discount every other comparison, we’re reaching a good tenth or so.  For comparison, the Bureau of Transport Statistics Household Travel Survey 2011/12 (HTS) is based on the survey responses of about 3,000 households.

A more useful comparison of the quality, though, is to compare Opal or Not’s mode distribution against the HTS.  This isn’t entirely straightforward, since Opal or Not compares door-to-door ‘journeys’ (eg. bus & train) while HTS counts single ‘trips’, but by making the not unreasonable assumption that a bus & train journey equals one bus trip plus one train trip, we get a 70/26/4% split for train/bus/ferry, while HTS has 59/37/4%.   This is unsurprising, since Opal for buses remains very much a work in progress, but it does skew the results a bit since the average train commuter loses more from Opal (an extra $65 a year, to be precise) than the average bus commuter.  Long story short, if we adjust the mode split to match the HTS, this shaves $5.7m off the paper advantage.

“But wait”, I hear you say, “even if the sample population is representative, what if the calculation itself riddled with errors”?  To make sure all potential problems are covered, I’m going to go through TfNSW’s llst of 18 “issues” with the site and analyze their impact on the results one by one.  You might want to a brew a stiff coffee before you read on.

1. Incorrect fares shown for some train journeys

Opal or Not computes train distance bands based on actual distance, not wacky-world fare distance, which can throw off estimates by a few km.  This means that users whose trip lengths are right on a fare boundary (10 km, 25 km, etc) may be quoted fares for the wrong fare band.

However, Opal and MyTrain bands are defined identically by distance.  This means that, even if a user is quoted the wrong zone, they are quoted the correct fares for those zones, and the comparison is thus fair.  No adjustment needed.

2. Train journeys that cannot be calculated

There are some cases where the underlying Google Directions API only offers buses, because they’re much faster, so Opal or Not cannot estimate the train distance.  But if the site can’t calculate the route, it can’t get the comparison wrong either.  No adjustment needed.

3. Incorrect morning peak times for Intercity trains

Opal or Not assumes that morning peak is always 7am to 9am, when it’s actually 6am to 8am when traveling from Intercity stations.  However, the website does not ask for exact times, it only asks for time bands, so the relatively few users affected can self-adjust.

But yes, those who do enter 6:30 Intercity trip as “before 7 AM” will get quoted an off-peak Opal fare when they should be paying a peak fare.   Since there are more of these people than there are 8:30 Intercity travellers who get quoted peak for off-peak, the net effect of the error is in Opal’s favor: the true cost of Opal is higher.

4. Weekend off-peak fares not included

Opal or Not does not implement train off-peak fares all day on Saturday (or Sunday) for either Opal or paper tickets, instead applying the weekday off-peak rules. This has two effects:

  1. Peak period travel on Saturday is incorrectly calculated at weekday peak fares.  This inflates the cost of both Opal and paper equally, producing no net effect.
  2. Off-peak travel is calculated with weekday off-peak periods.  This gives an unfair advantage to Opal, since this grants ~26% of travelers the discount, vs. ~16% for paper travel.  (The actual figure is, of course, 100%.)

All told, the net effect is again in Opal’s favor.

5. Description of MyBus and MyFerry tickets as zonal

This is a wording quibble: MyBus and MyFerry tickets are based on distance travelled, and strictly speaking should not be called “zones”, since that usually implies geographical areas.  (By comparison, MyMulti is a true zonal ticket.)  Fair enough, but obviously no impact on fares.

6. Change in method of calculating bus fares

The website currently assumes that that MyBus sectors map one-for-one to Opal’s distance-based fares, which is not the case. However, without access to the exact sector data, which TfNSW does not make public, it’s not possible to compute what difference this makes in practice.  Opal claims some fares will be cheaper, but the SMH has some cases of people whose fares nearly double, and as we know, while TfNSW probably has their own estimates for this, they refuse to release them.  I’ll give them the benefit of the doubt and call it a draw: no impact.

7. Incorrect MyMulti ticket recommended for some journeys

Opal or Not’s determination of what MyMulti ticket to use combines bus and train distance bands, meaning issues 1 and 6 (train and bus distances) apply and users may be quoted the incorrect MyMulti zone.  Again, since there is no systemic bias in either direction, this alone does not bias results.

MyMulti zone shiftingThere is, however, one important source of error in the MyMulti calculations: they assume that train fares bands map directly to MyMulti zones.  This is correct for trips originating or terminating from the CBD, but will incorrectly compare to a MyMulti 1 for someone traveling from (say) Blacktown to Parramatta, actually MyMulti 2.  The diagram to the left attempts to demonstrate this, with the top ‘ovals’ representing how Opal or Not calculates trip costs and the underlying colored bands showing how the actual MyMulti zones apply.  The bits marked “+1/2” show undercharging, whereas “-1/2” shows overcharging: for example, somebody traveling from Hurstville to Parramatta would have been computed as MyMulti 3, when actually a MyMulti 2 would suffice.

We can attempt to correct for the error by applying the known distribution of train travel distances to major destinations in and out of the CBD (both courtesy the Compendium of Sydney Rail Travel Statistics, 8th Edition, RTS), times the number of train travellers using MyMultis and finally the cost incurred (or saved) from using the wrong MyMulti zone.  The math is fairly hairy and makes a few rather generous assumptions (eg. that each station’s patronage follows the general distance distribution and that the Inner Sydney statistical area is close enough to the rail CBD fare zone), but because the under- and overcharging tend to balance out, the net effect is fairly minor: $300k off paper tickets.

For completeness, I’ll note that the same issue theoretically applies to ferries.  However, since ferries are a relatively minor form of transport and the overwhelming majority of ferry travel is to/from the CBD, the approximation used by the website is more than good enough for our purposes: Ferry 1 = MyMulti 2, Ferry 2 = MyMulti 3.

8. No provision for customers with complex travel patterns

Opal or Not is not a general-purpose fare calculator, but a single-purpose tool geared solely at making it easy to check how Opal will affect the cost of your commute.  Per the HTS (Table 4.3.3), we know that commuting to work and school/uni account for the vast majority of public transport usage, so this means the results also represent the vast majority of Sydney’s public transport users.  And once again, if the site doesn’t support a given travel pattern, then it’s not giving inaccurate results, it just doesn’t support it.  No adjustment needed.

9. No consideration of the customer’s current ticket

Locomotive #7 "Sonora", Felton, CA, USATfNSW, and quite a few of my readers, think it “unfair” to compare Opal to monthly or quarterly tickets, for two distinct reasons: 1) people do not use them very much, and 2) they are not a good fit for some people.  Let’s analyze these in detail.

First, do people actually use them?  TfNSW loves to trot out the statistic that only 4% of ticket sales are periodicals, but this is highly misleading: if person A buys a yearly ticket once a year, and person B buys two singles every working day, only 0.2% sales will be for yearly tickets, even though 50% out of A and B use them. The best statistics for actual usage that I’m aware of are in RTS Table 20, which extrapolates from ticket sales and covers trains only: according to this, periodical tickets (weekly or longer) account for 50% of usage, with 8% using monthlies or longer.

At the end of the day, though, this is kind of irrelevant: Opal or Not is all about showing people the best possible fare, and I can only assume that its users are rational economic actors who choose the cheapest fare.  In the same way, I’ll give Opal the benefit of the doubt and assume that its users are religious about tapping on and tapping off, so they never get accidentally charged the maximum fare — a lip-smacking $8.10 if you forget to tap off the train!

The second objection is that people are rational and choose not to opt for periodicals because, when accounting for vacation etc, they cost more.  However, since a train quarterly covers 13 weeks of travel but costs the price of 10 weeklies, virtually everybody who uses the train would actually be better off buying them, even if they take two weeks off that quarter.  For buses and ferries, TravelTens are unequivocally more flexible and cheaper than Opal if you have even slightly irregular commute patterns.

What’s more, comparisons for monthly and quarterly tickets were introduced only after launch, meaning the initial 5,000 or so users did not benefit from them, and a rounding error meant that the next 10,000 or so had quarterlies incorrectly computed as 12 weeks instead of the correct 12.85, again a bias in Opal’s favor.

All in all, I’m going to call it a draw and say no adjustment needed.  If you have better stats, or thoughts on how to quantify this, I’m all ears.

Update: By popular demand, I’ve taken a stab at adjusting the pricing comparisons to be in line with ticket usage from RTS Table 20.  This is rather rough and ready, because Opal or Not does not collect the user’s actual ticket types or record non-optimal paper fares, but long story short, this shaves $44m off the paper advantage and converts 280k people into the Opal camp, meaning only 26.46% pay more with Opal.  This, mind you, is still about 4x more than what TfNSW is claiming, and it goes to underline what we’ve seen from previously: those who win from Opal win a bit, while those who lose generally lose a lot.

The previous calculation is now Model A, and this version is now Model B.

10. Opal trip advantage not always applied

More specifically, the site does not cater to the case where there is less than 60 minutes between the trip out and the trip back. Again, since Opal or Not is a commute comparison tool and most people work/study more than 60 minutes a day, this scenario is irrelevant.  No adjustment needed.

11. No provision for journeys with multiple transfers

Setting aside ferries, there are three possible realistic multiple transfer combinations: train/train/bus, bus/bus/train, bus/train/bus.  The first and most common is already catered for, since Opal or Not can compute the fares between any two train stations, including transfers.  For the second, Opal would be cheaper if you were currently foolish enough to purchase separate tickets, but as we know MyMulti is nearly always the better option even for a single bus/train transfer, much less two; not covering this thus tilts the balance in Opal’s favor.

So that leaves the third option, bus/train/bus.  Getting good data on this is hard, but Bus Users in Sydney, 2002 p5 (not a typo, that’s the latest available) tells us only around 7% of bus journeys involve two buses, and Rail Travel Statistics 2012 section 3.2 tells us 17.7% of train users transfer to bus, from which we can determine a conservative upper bound of 1.2% travellers affected.  Not that this helps Opal’s case any, as MyMulti will almost certainly wipe the floor with Opal for these poor people, but I’ll graciously not dock Opal’s score for this.  In Opal’s favor.

12. Many NSW TrainLink Intercity stations not included

That’s because they were not covered by Opal at the time the service was launched, although support has since been added both to Opal and Opal or Not.  Once again, if you can’t compare it you can’t get it wrong, so no impact on accuracy.

14. $2.50 Sunday cap not included

Neither Opal’s all-day-for-$2.50 offer nor the more limited Family Fun Day ticket it replaces is covered by Opal or Not.  While this is clearly a win in Opal’s column, for the vast majority of Sydney’s commuters it’s a nice bonus, not an actual commute cost-saver.

The second complication is that since the Travel Reward is accounted for, this applies to only people who travel on Sundays without accruing 8 weekday journeys.  Since Opal or Not does not ask about days of week, and I’m not aware of any TfNSW data for this, quantifying the size of this group is difficult.

All in all, no adjustment made, but underlying bias is in paper tickets’ favor.

13. Domestic Airport and International Airport stations not included
15. Opal Child/Youth fares not included
16. Opal Senior/Pensioner fares not included

Opal or Not is a weekly commute calculator, all these are explicitly out of scope and do not affect the accuracy of results.  No adjustment needed.

17. Daily tickets not included

The Opal $15 daily cap is included in the site; however, the $23 MyMulti day ticket is not.  This skews the results in Opal’s favor.

18. Fares for services and classes of Opal cards that have not yet been announced

I had to read this one twice: TfNSW apparently considers it a flaw that Opal or Not does not cover Opal fares that have not yet been announced?  I’ll be happy to address this once somebody lends me a time machine.  No adjustment needed.

We’re done!  Almost, anyway, since magnanimous soul that I am, I’m going to include a large source of error that TfNSW did not notice:

Bonus. Off-peak fares on trains

Off-peak fares are frequently cited as a major win for Opal, and while Opal or Not now supports them, this option was not available initially, affecting the first 26,925 comparisons.  Looking at the additional statistics kept for off-peak fares, we can see three general trends:

  1. The 15% of train travellers who travel outside both peak periods are unequivocal winners, Opal saving them around $200/year.
  2. The 20% who have one peak and one off-peak trip come out a wash, gaining or losing less than $100/year.
  3. The 65% who hit both peak periods pay on average $270/year more.

So while the majority still lose, the gains of the small group of winners are so large that they translate to a 30% decrease in the overall cost.  Adjusting the data accordingly (see spreadsheet), this docks some $14 million off paper’s advantage.  Better start waking up before 7 AM!


Roaring Camp Railroad, Felton, CA, USAOf the 20 potential issues identified by TfNSW and yours truly:

  • 4 bias the results in paper tickets’ favor, and are accounted for by adjusting down by $20m,
  • 3 bias the results in Opal’s favor, which means Opal’s actually even costlier than this report indicates, and
  • 13 have no measurable impact.

In other words, this report bends over backwards to give Opal the benefit of the doubt, and it still comes up a cropper to the tune of $54 to 98 million dollars.


Call to action

So what should Transport for NSW do to fix Opal?  I have two simple suggestions:

  1. Allow bus, train and ferry transfers.  A wide array of wise men all agree: if Melbourne, Perth, Brisbane and Adelaide can all do it, there’s no sane reason why Sydney can’t. Penalizing modal transfers makes Opal a huge leap backwards for Sydney transport.
  2. Lower the base fare and drop the Travel Reward.  The “Travel Reward” is supposed to encourage using public transport, but it ends up discouraging it for many people, and only encourages gaming the system instead.

If you agree, let the Minister for Transport know.  Gladys, the buck stops with you here: it’s not too late to fix this, and turning Opal from a PR disaster into a win for your Sydney voters will only take a stroke of your pen.

And if you’re a commuter who wants to hedge your bets, lock in your savings before Opalcalypse on September 1st, 2014, and buy a quarterly or yearly ticket today.


How SMS set back the mobile internet by ten years

Mari Matsunaga, the yin to Steve Jobs' yangStop me if you’ve heard this one before: an obsessively perfectionist corporate maverick defies conventional wisdom and launches a radical new mobile “i”-phone that offers built-in email integration, an app store with simple payments and, finally, a decent way to surf the web, all tied together with revolutionary ease of use.  Sales go gangbusters, the company mints billions, mobile Internet usage skyrockets and competitors are left scrambling to catch up.

I am, of course, taking about Japanese operator NTT DoCoMo’s launch of i-mode in 1999, spearheaded by Mari Matsunaga (pictured), who clawed her way up in the intensely male world of Japanese business and whose insistence of putting user experience first almost scuttled the project several times.  i-mode phones were equipped with an “i” button that opened up a browser in one click, allowing users to surf in a curated portal of i-mode sites, some for subscribers only, most free but with in-site purchases charged directly to the user’s mobile bill, or to access the wider internet by entering URLs manually.  Downloadable “i-appli” Java apps were launched shortly thereafter.  Each phone also came with the “i-mail” email service that was completely interoperable with the general Internet (and other Japanese phones), delta some fairly drastic limitations on message size since we’re talking 320×200 screens and download speeds measured in kilobits.  And since this was all running on packet-switched data, the billing scheme couldn’t have been simpler: pay per byte sent or received.

“So”, I hear you ask, “if this was so awesome, why have I never heard of this?”  There are many theories, but I’m going to lay out the case for an unconventional one today: it’s all SMS’s fault.

Why SMS was awesome

SMS is the GSM mobile standard’s Short Message Service, and by telco standards it has a venerable pedigree, being first dreamed up in 1984 (yes, that’s thirty years ago).  Fundamentally, SMS is a hack; a glorious hack, to be sure, but a hack nonetheless.  SMS is built on the Signalling System 7 (SS7) protocol, designed in the 1970s for controlling landline calls.  Unlike most previous telco signalling systems, which controlled calls by inserting tones directly into the voice stream and let phone phreaks run wild with blue boxes, SS7 has a separate control channel used primarily to signal when calls start and end, means it transmits blank frames the rest of the time.  SMS squeezes text content into those empty gaps, which explains both why telcos were so fast to adopt it — it needed precisely zero additional hardware to roll out — and where that famous size limitation comes from: the frame size is exactly 140 octets, which is enough for 160 7-bit characters.

The other reason telcos love SMS is the money.  Remember, if you’ve already got a GSM network, SMS costs nothing at all to transmit.  (Yes, there is some cost involved in setting up SMS store-and-forward centers and interconnects and whatnot, and I made my living for close to a decade working in the field, but compared to actually building a network, this stuff is a rounding error.)  However, people in the 1990s were already well-trained to pay for each call, letter or fax, so charging (say) a flat dollar a piece for each SMS still sounded like a bargain, and the telcos, buying SMS for $0 and reselling them at $6500/MB, weren’t about to disillusion them.  In 2013, US operators alone minted 21 billion dollars from SMS, and you can still today get charged that $1 a piece if you happen to send an SMS while roaming in the wrong place.

Crazy Frog Crazy HitsSo far, so awesome (if you’re a telco, at least), and Worse is Better when it comes to victory in the marketplace.  But SMS’s sheer hackiness made it an evolutionary dead end, despite increasingly Sisyphean efforts to build more and more complicated infrastructure on top.  For example, while SMS was originally meant purely for transmitting text, some clever noggins came up with the idea of using six of those precious 140 bytes for a User Data Header that, bit by bit, could say things like “I am a logo!”, so you could squeeze in the 1008 bits needed for a 72×14 monochrome bitmap representing the Vodafone logo.  Or if you were so greedy that 134 bytes wasn’t enough, you could use a few more of those bits to say “I’m piece 3 of 7!”, and get the phone to concatenate those SMSes together into a chain that might contain as much as a kilobyte of info, just enough for a Crazy Frog ringtone (that’ll be $4.99, thank you).  Unfortunately, SMS is a UDP-style best-effort-only service with no guarantees of delivery, meaning that the longer the message, the more likely it was that some pieces would fall by the wayside.  And while there is a “delivery notification” bit that’s supposed to confirm a message was received, and whose absence can trigger redelivery, those notifications are also SMSes and are themselves often dropped along the way.  Remember when, in the olden days, you’d occasionally get 3 or 5 copies of a message?  Somebody was dropping your DNs.

Meanwhile, in Japan, they didn’t have SMS, because they didn’t have GSM.  The Japanese telcos naturally noticed that this SMS thing was taking off in Europe and built their equivalents for the Japanese 2G standard PDC, but the operators never managed to sort out talking to each other, and by 1996 or so they just said “fuck it” and deployed good old e-mail instead.  This was easy enough technically, since PDC offered packet-switched data and WAP 1.0 didn’t, and easy enough financially, since they didn’t have to worry about cannibalizing non-existent SMS revenue.  The standard undiscounted data rate in Japan circa 1997 was around 0.3 yen per kilobyte, and because a short e-mail is about 3 kB (headers and all), it cost around one US cent to send/receive one to/from any device in the world that groks SMTP.

Why MMS is so bad

In 2000, NTT’s arch-competitor J-Phone launched Sha-Mail, the world’s first mobile photo messaging service, which (then as now) was an instant killer app quickly duplicated by NTT as “i-shot”.  This was implemented using standard e-mail attachments and charged for at packet data rates, meaning around 10 yen ($0.10) for the 30 kB images taken by camera phones circa 2001, and phones and pictures sold like hotcakes.

Back in Europe, the WAP hype wave had just crested and crashed when it turned out people weren’t willing to pay one euro per minute to surf an unusably sluggish crude approximation of the few Internet sites that had bothered to completely rewrite themselves with WML.  Yet the first GSM packet data scheme, GPRS, was starting to gain traction and it started to dawn on operators that SMS just wasn’t going to cut it for images.

The MMS network architectureSo they came up with the replacement: MMS, the Multimedia Messaging Service, and you can already sense what a kludge it would be from that very first buzzword, which has killed all it touches.   To grossly oversimplify, MMS works by sending magical SMSes called “WAP pushes” that tell the receiving phone to open a WAP connection to an MMS server, from which they then proceed to download what are essentially e-mails crammed full of bizarre custom MIME parts, which are then rejiggled into an approximation of the original message, defined with a laughably overcomplicated custom slideshow language not too distant from Powerpoint.   For additional hilarity, the protocol provides no way of checking what the receiving device supports: instead, it’s the operator‘s job to attempt to manually track which phone number corresponds to which phone model.  (Thought experiment: imagine if the Internet worked this way, and instead of User-Agent strings, you had to phone up your ISP every time you changed device, browser or window size.)  This grotesque Rude Goldberg contraption is defined by eleven (11) different specifications, imaginatively named MM1 through MM11, each laying out the edges of one piece of the puzzle, and (unlike SMS) requiring very considerable resources to deploy.  Unsurprisingly, nobody could agree on how to actually implement the damn thing, making MMS hysterically unreliable to the point that, in A.D. 2014, I still consider it a minor miracle to successfully transmit one.

But MMS did have one feature that operators considered very, very important: it let them continue charging per piece, although many operators socked you for data usage as well.  So if you were visiting Mexico and Aunt Tilly sent you a 300 kB picture of her cat, she’d pay a flat $2 or something to send it, and you’d pay $30 to download it at $100/MB.  Or, more likely, she’d pay $2 to send it, but her phone or your phone or your home operator or your roaming network or any of the gazillion boxes talking incompatible variants of MMn along the way would barf and lose it.  And then Aunt Tilly would get pissed that you didn’t reply to her message, and never touch MMS again, which is in fact pretty much what happened.

Why i-mode never took off elsewhere

3G_NormalNow operators around the world did notice that this i-mode thing looked like a license to print money, and 17 of them ended up eventually launching it around the world, offering i-phones (small p) with little i-buttons that opened i-sites that charged i-ncredible amounts of money and otherwise looked a whole lot like the Japanese i-mode i-cosystem.  Yet every single one of them failed.

Partly this was technical: not everybody/everywhere had GPRS, and i-mode over plain WAP, which essentially involves a dialup connection every time you press a button, is atrociously slow.  Partly this was timing: so many fingers were burned in the bonfire of WAP malinvestment that few were willing to go all-in on another whiz-bang mobile invention, making the chicken-and-egg problem of getting sites to create i-sites tagged with i-mode’s “compact HTML” extensions that much harder to hatch.  Partly this was the cutthroat nature of the market: at least one operator I know of launched i-mode more or less entirely as a cynical ploy to extract better terms from Nokia.  But mostly it was just because none of those operators had the guts to go all-in on i-mail, because they were all so wedded to sucking on the SMS teat and could not bear to exchange $1 now in easy SMS profit for $0.01 forever in data revenue.  And the straw that broke the back of the few brave operators that did launch it?  The fallback mechanism for sending e-mail to non-i-mode phones was…  MMS.

Instead, it was BlackBerry who grabbed that market opportunity in the West, letting you read business e-mails on your CrackBerry and later launching BlackBerry Messenger (BBM), giving its own users a first taste of rock-solid, instant, all-you-can-eat messaging.  What’s more, it wouldn’t be too far-fetched to argue that BBM was such a hit in North America only because SMS was so bad there: half the operators in the US and Canada were using CDMA, which doesn’t natively support SMS.  But this was a completely proprietary protocol, not an ecosystem others could use, and BlackBerry did its best to make sure BBM only worked properly on their own devices, also opting for easy money now over a chance of future relevance later.

Jobs delivers us the keys to the new kingdom

So that was the state of the rest of the world until 2007: SMS ubiquitous for lack of interoperable alternatives, MMS strangled in the cot, BBM minting money in its little niche.  Only then came along the iPhone and the Cambrian burst of mobile internet evolution, which saw Android make mobile e-mail a commodity and the rise of alternative messaging systems like Skype, Facebook, Snapchat, WhatsApp, etc.  In telco lingo, equal parts dismissive and terrified, these are to this day called “Over-the-Top” (OTT) because they finally scaled over that charge-per-piece wall put in place by SMS in 1984, and brought the rest of the world to where Japan was in 1999.

Meanwhile, in Japan, Matsunaga was railroaded out of NTT barely a year after launching her creation, and is now a director at Bandai. NTT lost over $10 billion on its i-modal overseas misadventures but grabbed nearly two thirds of the Japanese market, with around 50 million i-mode users at its peak in 2008.  But they refused to sell the iPhone until 2013, by which time it had lost over 20% of that market share to nimbler rivals like SoftBank, which went on to buy Sprint.

And that’s where my story ends.  Now, I’m not saying i-mode had any real chance to rule the world, GSM was not a good fit technically and SMS was already entrenched by the time it came along.  But if SMS hadn’t existed, the world would almost certainly have had an i-mode equivalent much sooner, and you can only wonder how the world would look today if it had.

Sydney’s screwed-up smartcard, or why I wrote “Opal or Not”

The backstory behind Opal or Not.

Last year, Sydney started trialing its new “Opal” transit smartcard.  As a regular commuter on Sydney Ferries, the first service to roll out Opal, I awaited its arrival eagerly.  After all, they couldn’t possibly screw it up worse than Melbourne’s Myki, whose ludicrous cost overruns and sheer technical incompetence I had witnessed first hand earlier.

Screen Shot 2014-02-21 at 10.39.12 PM

Alas, while Opal has indeed been lighter on the government’s purse and is mostly capable of registering card taps, Transport for NSW still managed to completely stuff up something that Melbourne didn’t: the fare structure. For many users including me, Opal is much more expensive, in my case translating to $332.80 more every year for the same commute.

Virtually every smart card in the world prices individual trips lower than the equivalent single fare, meaning it always make financial sense to use the card.  Not Opal: for ferries and buses, a single fare costs more than a trip on the TravelTen paper ticket, and only on your 10th trip of the week does the cap finally make Opal cheaper again.  And if, like me, you occasionally bike to work or work from home, meaning you use the ferry or bus less than 10 times a week?  You fall into the Opal Fail Zone, shown in red above: that’s the premium you pay for the privilege of using Opal.

Screen Shot 2014-02-21 at 11.05.16 PM

But believe it or not, I soon found out that there were others even worse off than me.  Say you live in Dee Why, take a bus to Wynyard, and switch to the train to Central.  (Substitute with bus/train combo of your choice.)  Because Opal has no replacement for MyMulti, your commute is going to rocket up $728 a year, even if you travel five days a week!


Just look at that thick red slab of Opal Fail: if you’re commuting by bus and train, unless you’re doing it exactly 6 times a week, it never makes sense to switch to Opal.

Is it easy to figure this out?  Hell no, it takes an intimate understanding of Sydney’s convoluted fare structure and a whole lot of flipping between browser tabs to come up with the actual numbers.  The Opal website has some contrived examples, every single one of which shows Opal as cheaper, but lacks even a basic Opal fare calculator, never mind any way to compare to non-Opal fares.

Now I could have written feedback to Opal, which would have gotten me a form letter response with sneering thanks before getting chucked in the bin.  Or I could have written an angry blog post (well, I am writing one), which with some luck would have been retweeted a few times before being overtaken by Justin Bieber’s latest drunken antics.  But neither would have had any real impact.

Instead, I wanted something that would:

  1. Let people see exactly how the switch to Opal will hit their wallet
  2. Collect statistics on how many people are positively or negatively impacted by Opal, and by how much
  3. Ultimately make Transport for NSW to come up with a saner fare scheme that encourages all public transport use and does not penalize transfers.

So I spent a few evenings coding up a fare calculation engine (and Jesus Christ that was a pain, just look at this shit) and a few more slapping a web interface on top, and the result is Opal or Not.  Here’s hoping it was worth it!