A FlySafair Experience

A company recently paid for a flight for me from Johannesburg (OR Tambo International) to Cape Town International Airport.

And yes, it’s VERY* important to name things after people and not after the landmarks they’re in/near. Naming locations after people solves real problems, like unemployment and disease. In fact it’s so important to rename things that you should seek out places that don’t have names and name them, because that’s what successful countries do.

“you get what you pay for” and FlySafair is a great example of that. Their legroom was non-existent and a colleague of mine (who’s taller than I am and was on the flight with me) had to do some interesting contorting to fit into the available space.

I thought Mango was shit, but FlySafair takes the cake for “crappest South African airline”. Did I mention the flight I was on was late ? Yes, it was 40 minutes late.

The experience started with online check-in… which kinda worked but kinda didn’t. Online check-in worked but didn’t indicate it had worked and offered to allow seat selection but refused to show the seat selector. Okay, that was disconcerting. No worries. Then came baggage, ah, we need to buy extra baggage allowance, which was followed by a trip to a kiosk, then waiting, then paying then back to the check-in desk. Mango let us on their flight with the same baggage with no extra cost, but even so, I didn’t mind paying, I mind being shuffled around and waiting in queues. “Innovation” is hard.

Eventually we get urged to start boarding – more queuing. The queue eventually starts moving, yes, I’m through the boarding gate… and then this :

Like excrement clogging up a sewerage line (we wouldn’t do this to our dogs and cats, right?) we get filtered based on priority boarding vs normal shitty boarding (I was priority for some reason – it didn’t help). Once you’ve been segregated based on priority status you then get further segregated based on seating position. And then you eventually board the plane in some sort of order. This is stupid and does not work. It does not work. It doesn’t. Stupid. Blerrrrrgh.

After being segregated based on seating row, you wait… in the air bridge, where it’s hot, humid and dark. Nice.

You finally get let out again, for a moment, as you get shuffled along the concrete apron. This is fast boarding, apparently, some 30 minutes after scheduled take-off.

And then you realise that Mango isn’t all that shitty after all… it could be worse.

It was cramped. We were surrounded by three very unhappy babies.

Also, please, don’t take your infants flying until they’re old enough to have a vague understanding of the selfish reasons you have for putting them through such torment.

It doesn’t look that bad here but believe me, it was bad.

Ventilation is apparently a luxury in the aviation industry because they seemingly shut off ours or severely limited it (isn’t it taken from the engine’s air bypass ?).

At least this dodgy experience only lasted ~2 hours… and I had Patricia greet me on the way home.

This advert is both unnecessary and ridiculous – paid for by excessive water and electricity charges. The City used to work for you… but now it makes progress possible – for its employees.

In short, avoid FlySafair like the plague. It’s just a cut too far. Airlines should be regulated out of offering such inhumane conditions.

*it’s sometimes acceptable to rename something when that something is named after an absolute bastard nazi – but then rename it to something innocuous and politically-indifferent.

Back to you Jenny.

Up-Cycling Dell Server Power Supplies

Cryptocurrencies, in general, are a controversial topic. All decentralised “cryptos” use some sort of algorithm to generate signatures that ensure the integrity and immutability* of their respective blockchain/ledger. The predominant family of cryptocurrency algorithms are known as PoW or Proof-of-Work.

PoW is extremely controversial for a variety of reasons, but the biggest issue with PoW is that PoW requires machines to do… work and “work”, by definition, requires energy to be expended. The “work” is generally carried out by a processor (in some recent algorithms novel approaches like “Proof of Capacity” are being trialed).

So “work” needs power and power comes from power supplies. Power supplies are expensive and so any way of making the acqusition of power supplies for mining cheaper improves profitability.

Enter the Dell Poweredge 1950 server, which includes two very beefy power supply units capable of ~49A on 12V apiece… very nice. These servers were released to the market circa 2006, which makes them 12 years old. In the computing world, that’s ancient. They’re extremely loud and noisy, big, awkward, use loads of electricity and can’t really do that much. Unfortunately, they’ve reached their expiry date. It happens. I’ve collected several of them off auction sales and some have even been given to me.

A Dell PowerEdge 1950 Server with cap off.
Dell D670P-00 670W Power Supply – each server has two of these.

Innovative peeps have built interface cards for larger variants of these power supplies, specifically for mining operations, but unfortunately, these power supplies are a bit too small to make that kind of time investment viable. A more, er, “DIY” solution is required.

These power supplies are designed to be cooled using ram-air provided by a set of jet-like fans in the main server chassis. The servers are old and hopelessly inefficient, so I won’t be using them in future. I therefore removed the fans and drilled holes through the power supply enclosures to provide cooling.

Dell PowerEdge 1950 fans – powering them took a bit of guesswork…
Ghetto as hell, but wood-gluing the fans to the power supplies is cheap and effective.
Fans are “installed” with the airflow directed upwards to take advantage of convection and keep dust accumulation on the outside of the housing.

Next, we need some cables to attach to our power supplies. I removed one set of ends while the glue was drying in preparation for soldering.

PCIE connectors stripped and ready to be soldered.

This is all pretty high-current stuff (made worse by it all being 12V), as such it’s important to make sure solder joints are really solid (more so than what’s demonstrated in this picture).

A better set of soldered joints.
Two sets of pins need to be shorted to make the power supply run.

And there you have it! A “proper” AND efficient 670W 12V supply. These can be used to comfortably drive 3x overclocked AMD RX580 GPUs. It could probably power 4x GPUs, but as always, it’s better to er on the side of caution.

Powering the fans took a bit of guesswork as well as trial and error, but essentially fans have a positive, negative and sensor line. One set of fans use black (GND) and red (+12V). Yellow is the sensor line and for this application remain unused.

Reverse Engineering the Ubbey Box

Some time ago I came across an ICO (distressed choir wails in the background as if welcoming lucifer to a dark cathedral) and said ICO was aiming to build a decentralised storage system. “Cool”, I thought, eager to experiment with a small amount of Ethereum on a diverse set of ICOs. I gave them some ETH… but before doing so I discovered that decentralised storage isn’t a new thing. Several projects have tried (and somewhat succeeded) in building dencentralised storage networks already; big examples being BitTorrent and IPFS being (neither offer in-band remuneration). In addition, cryptocurrency-supported examples include SiaCoin and StorJ – both of which have serious issues. After contributing to the Ubbey/Universal Labs ICO I decided to give Sia hosting a try… but that’s another story.

Ubbey’s 2000 Ethereum ICO was ultimately successful and I got some tokens. Shortly thereafter Ubbey allowed ICO participants to use some of their tokens to order their “Ubbey Box” at discounted rates. By this stage I had acquired additional Ubbey tokens at a fraction of the ICO price on decentralised exchanges (I love DEXs). Yesterday, the Ubbey box I ordered arrived. I only recently got a chance to play with it.

As with most boxes I don’t control, the Ubbey box has gone onto a DMZ network, which means it can’t access my home security cameras, storage machines, geyser controller, irrigation controllers… you get the idea.

First things first, unpacking :

Very nice Ubbey… the packaging looks good, even after being bashed around by DHL.

An Ubbey Box, by Universal Labs

This box is very obviously a general purpose media player that’s been rebranded to fit Ubbey’s needs. There’s nothing wrong with that, it’s sensible. They inadvertently hint at it being a general purpose media box with their specs, which quote the device as having an ARM CPU in it with 2 GBs of RAM, a VERY common configuration for ARM dev boards from around 2 years ago. This is begging to be disassembled…

So, onto the DMZ it goes. I installed the Ubbey app from the Google Play Store and soon enough it found the box (through what looked like an IP scan of the local subnet). The scan was followed by a login prompt and then a firmware update (forced) :

Unfortunately, it’s been about 2 hours now and it’s still updating…

While we wait for it to update, let’s see what’s inside :

This is how the device looks inside with the lower cover removed (it’s upside down in this shot).
The Ubbey logo is illuminated by an over-spec’ed 7-segment LED display.
The top-side of the main board of the Ubbey Box.

The top side of the main board of the Ubbey Box is -very- interesting. The device is equipped with a dual-chain/MIMO wifi module and the box has antennas for it installed. The top cover of the box has a large metal mass, which is squeezed against the top of that shielded cage/case with a thermal pad sandwiched inbetween. The board is clearly designed to have multiple display outputs with one set of traces unpopulated. The FORESEE module is probably flash “ROM” storage for the OS, which is OpenWRT. Also present are traces/holes for a TTL UART, an SD Card module and two USB ports (one of which appears to be USB 3).

It should be noted that the Ubbey Box runs an SSH daemon by default – attempts to log in to it using root/root, root/password, root/etc. proved fruitless.

The top side of the Ubbey Box PCB with the CPU/RAM shield/case and thermal pad removed.

A quick Google search for SEA Beelink SEA I found me this Amazon page :

Wireshark packet sniffing indicates that the device spends a lot of time communicating with, which seems to reverse-resolve to api.yqtc.co. Visiting the server with https indicates that the server’s HTTP certificate expired in May… so I thought the client device may be less than strict with it’s certificate acceptance. Some DNAT rules on my router and mitmproxy later and I got this :

mitmproxy is very cool software. Unfortunately the Ubbey Box’s Go client, although permissive, isn’t that permission ๐Ÿ˜‰

It would appear that the best way of gaining access to this device is via the TTL UART.

Update 22 September 2018 : Serial Debug Console

Not my neatest work, but I now have access to the device’s debug console…
Part of the Ubbey Box’s boot process and the OpenWrt failsafe mode entry point.
The Ubbey Box’s labeled partitions.
The contents of description.xml inside what looks like an overlay filesystem called “nasetec”

More to follow…

Free Garmin GPS Maps for Cycling with Topographic Data/Contours

The Jonkershoek plantation is pretty… and very bicycle-friendly.

I recently went for a mountain bike ride in a mountainous area of the Western Cape (South Africa). This location is littered with mountain bike trails but some of them are very steep and ideally suited to dedicated downhill cycling. It isn’t always obvious where the trail you’re on may go and a vertical climb isn’t always desirable. Wouldn’t it be great to have a GPS with both detailed cycling routes and topographic data/contours ?

Probably, yes. Luckily I have an old-ish Garmin eTrex HCX “Color” handheld GPS. In my mind it’s still a new-ish device, but in reality it was released to the market 11 years ago in 2007. For reference, that’s one year after the Intel Core 2 was released – so tech has changed a bit… but apparently not much for Garmin GPSs.

Yes, that’s what low-res looks like.

This eTrex has a microSD card slot, which probably supports cards up to 2GB in size. That’s more than enough for elevation data and some South African bicycle maps.

To generate said maps, under Ubuntu Linux (18.04), I did the following, improvised from the OpenStreetMap wiki :

Download a suitable .osm.pbf from here : http://download.geofabrik.de/africa.html

Download Splitter : http://www.mkgmap.org.uk/doc/splitter.html

Download a style file : wget https://svn.openstreetmap.org/applications/utils/export/garmincyclemap/network/cyclemap.TYP

Install subversion if you don’t already have it :
sudo apt install subversion

Get mkgmap’s repository :
svn co https://svn.openstreetmap.org/applications/utils/export/garmincyclemap/network/cyclemap

Get the mkgmap JAR file :

Split your PBF files : (I gave it 8GBs of RAM, but you may not have that)
java -Xmx8096m -jar splitter.jar --max-nodes=900000 south-africa-latest.osm.pbf

Convert the split files into a gmapsupp.img file : (RAM, if available, set to 8GBs and threads set to 16 threads)
java -Xmx16000m -jar mkgmap-r4240/mkgmap.jar --style-file=cyclemap --route --description=aquarat --mapname=aquarat --gmapsupp --max-jobs=16 --keep-going -c template.args

Make a directory:
mkdir archive

Move gmapsupp.img into archive :
mv gmapsupp.img archive/gmapsupp-cycling.img
mv south-africa-latest.osm.pbf archive/

Delete the temporary stuff :
rm *.img *.pbf

Now for the contours! Download a suitable contour file here : http://develop.freizeitkarte-osm.de/ele_20_100_500/
wget http://develop.freizeitkarte-osm.de/ele_20_100_500/Hoehendaten_Freizeitkarte_ZAF.osm.pbf

Split it :
java -Xmx8096m -jar splitter-r591/splitter.jar --max-nodes=900000 archive/Hoehendaten_Freizeitkarte_ZAF.osm.pbf

Render it to gmapsupp.img :
java -Xmx16000m -jar mkgmap-r4240/mkgmap.jar --style-file=cyclemap --route --description=topoaquarat --mapname=aquatopo --gmapsupp --max-jobs=16 --keep-going -c template.args

Move it to archive :
mv gmapsupp.img archive/gmapsupptopo.img

Combine all the things :
java -Xmx16000m -jar mkgmap-r4240/mkgmap.jar --style-file=cyclemap --route --description=topoaquarat --mapname=aquatopo --gmapsupp --max-jobs=16 --keep-going archive/gmapsupptopo.img archive/gmapsupp-cycling.img

aaaand copy the resulting file to your device’s SD card :
mkdir -p /media/cooluser/somedevice/garmin
cp gmapsupp.img /media/cooluser/somedevice/garmin

Eject and you’re done.

It looks like this site may do some of these things too : https://extract.bbbike.org/

Retrospective : My experiences with the Blackmagic Design Cinema Camera

This is a somewhat brief overview of my history/experiences with Blackmagic Design’s Cinema Camera (2.5k variant). I came to own this camera as well as their 4K “Production” and Pocket variants, but fortunately I didn’t repeat the mistakes with the latter that I had made with the former.

Magic Camera

Around June 2012 a colleague on a shoot told me about this amazing camera set to be released in the near future. He couldn’t remember the name of the manufacturer or the model number of the camera but he knew it could shoot RAW and that it took DSLR lenses. Shooting with Canon DSLRs at that stage was new and edgy; everyone wanted the shallow depth-of-field look, but most couldn’t afford it through traditional means (read “ARRI” and “RED”). In what seemed like a fit-of-rage-type mistake, Canon introduced HD video recording to their 5D MKII and then to their 550D and 7D. This opened up a whole new look to budget filmmakers. Of course it wasn’t without risks; early video-shooting Canons readily overheated, suffered severe aliasing (they still do ๐Ÿ™ˆ), had inefficient compression, poor battery life, no manual-focusing aids, no exposure aids, etc. so they were (and still are) a pain to work with. The promise, then, of a camera that gave one that shallow DOF, used existing Canon EF glass and shot RAW (!) was like the heavens were opening up to deliver a gift from a god (lowercase by choice).

I did some research and discovered the camera in question was the Cinema Camera, by Blackmagic Design. Soon to be shipped, waiting to be pre-ordered. Back then “pre-order” wasn’t common and Kickstarter was a fledgling business…

Shut up and take my money

So I pre-ordered three of these magic cameras, expecting to have them in a few weeks. Of course B&H charges up front for pre-orders (unlike Adorama, who are a more decent company generally speaking). Of course the product that was supposed to ship a few weeks later actually shipped 8 months later. And this, my friends, is how Blackmagic Design operates; promote pre-orderability to your customers, use the funds to develop your product and then ship out a half-baked product (and by half-baked I mean prototype).

Yes, 8 months later, when the cameras actually arrived, I and many others, quickly discovered that the firmware was hopelessly incomplete. They were beautiful, shiny metal boxes that could do one thing: record raw video. No format, no delete, no time remaining, no exposure aids, no auto focus, no focus aids, no audio metering, severely impeded audio, the list goes on. An alpha product, at best. Barely field-usable. But okay, it filmed raw video, at 2.5k, holey smokes, that’s amazing. Even now 2.5k 12-bit 4:2:2 video is pretty damn amazing.

Half-baked product, but it worked and it did something nothing in that price-range came close to doing: shooting RAW video. Blackmagic Design was promising firmware updates to fix all the issues, so things weren’t looking too bad. But of course, Blackmagic Design didn’t seem to realise that they (1) had customers and (2) that those customers are what should be driving their business. And so it came to pass that BMD CEO Grant Petty announced only 4 months after my cameras arrived that they would reduce the retail price of the cameras by 33%. Yes, $1000 price reduction.

Thanks for the asset value destruction Grant. Good job.

The video business isn’t just about filming cool stuff; you buy equipment and it starts depreciating. You use said equipment for a while and then you eventually sell it.

Purchase Price – Sales Price = Effective Cost

As a business, you have to pass your costs onto your clients with a profit margin. Therefore, if you can reduce your equipment purchase price and increase your equipment selling price you can improve your profit margin and/or offer your client a better deal (which makes your business more competitive). Blackmagic Design, by reducing the price of their product by a third only 4 months after shipping severely damaged the resale price of their product and in doing so fucked their pre-order customers, who had already been fucked by the fact that the product was grossly late and was an alpha product at best (more like a prototype really). Blackmagic Design Cinema Cameras (2.5k variant) now retail on eBay, used, for around $500. In 5 years they’ve lost 83% of their value.

A Sony PMW-200, having been released a year before the BMCC, now retails on eBay for around $ 2300 ย with an initial retail price of $ 6000 – that’s a depreciation of 62%.

Lessons Learnt

  • Don’t buy big-ticket Blackmagic Design products.
  • If you do decide to buy a BMD product, don’t pre-order buy it.
  • Don’t pre-order buy anything.
  • If you decide to buy a BMD product, try and buy one second-hand. They don’t bite when they’re second hand and you’ll optimise your costs. I got my 4K BMDs using this route and I saved a bundle.
  • At minimum make sure the product has been on the market for at least 6 months – if it’s used it’s probably got a track record already and it’ll have some updates that make it usable.

Bonus Material – An incomplete list of issues

  • No audio metering
  • Audio inputs had hardware-applied filters which heavily impacted usability of recorded audio
  • No disk format
  • No file deletion
  • No time remaining
  • Dodgy battery indicator
  • No autofocus
  • Severe infrared contamination
  • Overexposure artifacts (purple fringing)
  • Unreliable and poorly defined exposure metering
  • It didn’t deliver "shallow depth of field" like its DSLR cousins because its sensor was too small.
  • RAW isn’t anywhere nearly as useful as everyone thought it’d be. In practice formats like ProRes, DNXHD and in recent times high-bitrate H.264 Intraframe are radically easier to work with and cheaper.

An incomplete list of good things

  • It had amazing dynamic range.
  • It re-used existing collections of Canon EF lenses.
  • It used relatively cheap solid state media (SATA SSDs) – this is ironic because BMD’s latest cameras mostly use the silly-expensive CFast standard, which very few other companies have adopted.