Why are streaming apps so dodgy?

Why are commercial streaming apps so dodgy?

In the past few weeks I’ve seen two that I use develop major issues with Chromecast (I think it’s a 1st generation model) from iPad (iPadOS 15.7), which I’d have thought is a very common use case.

Britbox, at the moment, flat out doesn’t work for me. You try to start the stream apart from a big logo, nothing happens. And I’m not the only one:

Disney Plus works, but has more subtle problems.

  • Audio cuts in and out during the credits at the start and end of the program
  • The subtitles turn themselves on every single time I start watching something – they have to be repeatedly turned off.
  • Rating and content information only appears at the end of the program
  • The ”buffering” spinner keeps appearing during the stream, perhaps for half-a-second or so every few minutes – even though the internet connection is strong and fast. Thankfully the audio and video doesn’t drop out.

I’ve also tried on a newer Chromecast. Some of these problems don’t occur on a third generation model, but on the older unit, even switching Disney Plus to the low bandwidth option doesn’t help.

Playing streaming video is meant to be the core business of these companies.

All the others I’ve used recently (apps from all the Australian TV networks – ABC, SBS, 7, 9, 10, Amazon Prime Video, Netflix, Apple TV Plus*) are okay – how is it Britbox and Disney Plus are so bad?

And why did they work a few months ago, but now they’re broken?

*Apple TV Plus doesn’t work with Chromecast – I use it with an old Lightning to HDMI adapter that I’ve got.

On a Zoom/Teams call? Turn off your sounds

I think a few people need to know this:

If your computer is set up with audible alerts for email and other events, unless you’re on mute, sounds will blast out for everybody else on a group Zoom or Teams call with you.

This will block out your voice (and anybody else’s) and is very jarring.

The easiest way to avoid this is to turn off these system sounds.

Windows:

  • Search for “Change System Sounds” – or go via Control Panel to Sounds
  • Select the Sound Scheme: “No Sounds”

I’m not a Mac OSX user, but it looks like the option is in System Preferences / Sounds – you need to turn “Play user interface sound effects” off.

These settings will let media and audio calls play as normal, but otherwise the computer should shut up when a calendar reminder pops up, or an email or Slack message arrives.

Making text and lines bolder in Paint.Net

I use Paint.Net quite a lot for mostly minor editing of pictures, including scans.

Scans of text and diagrams tend to come off the scanner with very thin text/lines, so I was wondering how to make them bolder. Thanks to this forum discussion I found a quick one-step way of doing it, without requiring any 3rd party plugins.

From the Effects menu, choose Noise > Median

Set the Percentile to 0, and the Radius to a low value such as 1 or 2. Depending on the file, a slightly larger value might work too.

That’s it. You can adjust the Brightness and Contrast too, but the Median tool makes a huge difference to readability of these scans.

WordPress’s autosave freezes up

I’m glad it’s not just me: WordPress’s Gutenberg editor is very nice, but it has an autosave feature which gets stuck regularly.

Very annoying. If you browse away, you lose changes. You can’t do a conventional Save Draft while the autosave is stuck.

It’s not constant, so I’m not really sure how to fix it. But there are a couple of workarounds.

1. Noted on this thread: add this to wp.config:

define(‘AUTOSAVE_INTERVAL’, 86400);

(that’s a full day, so it should rarely be a problem then)

2. This method seems to work for me:

  • Press Ctrl-A twice, to highlight the entire post text
  • Ctrl-C to copy it to the clipboard
  • Paste it into a text editor. You’ll see the WordPress markup, which shows <!– wp:paragraph –> at the start of each paragraph.
  • Jump out of the draft. Ignore the warning about losing your work
  • Go back into it. If it’s like what happens with mine, anything since the previously successful draft save will have been lost
  • Ctrl-A twice to highlight the entire post text, then Delete it all
  • Then Paste from your copy in the text editor. The entire post should be back, including references to articles

Okay that’s a lot of steps, but for an occasional problem, seems like a reasonable workaround, especially if fiddling with the wp.config isn’t your thing.

Programatic submission of Australia Post’s CN23 customs form

A number of major international destinations of packages now will only accept packages with electronic CN23 customs declaration. Normally, you’d do this by rocking up to the Post Office with your pre-addressed parcel, filling in a CN23 paper form, and have that transcribed into Australia Post’s computer system by the postal worker behind the counter. You can elect to receive SMS notifications of change of status (landed, delivered, etc) for 50c.

Australia Post also allows you to fill in the appropriate details on their website; if you do this, then you get a QR code sent to you via SMS (free) and email (free) which the postal worker scans in and all the details (your name and address, destination name and address, contents, etc) are attached to your package’s details without any error-prone re-keying. The downside of going down this path is the dismal website Aussie Post provides, a JavaScript heavy, painfully slow dog of a site that doesn’t cache your own address.

Once the QR code is scanned, and the postal worker checks everything with you, they’ll print out the CN23, get you to sign it , and then it gets attached to your parcel. Because the To and From addresses are on the CN23 form (and those details are in electronic form, associated with the barcode for the package), it’s perfectly acceptable to present an unaddressed package to the post office (make sure you can tell which package is which, if you go down this route).

One thing you need to be aware of: Australia Post hasn’t heard of Unicode. You absolutely can’t use any characters not in the ASCII character set, and even then a very limited range of them. Certain fields allow some characters, which in turn aren’t allowed in other fields.

One of the fields you can supply is the HS tariff code, which is an international standard group of codes to describe “stuff” – the Harmonised System Tariff code. The sourcecode below uses the code for “Toy, plastic construction” – you should use the code for what you’re actually sending. You can specify multiple HS codes. Dollar values are in decimal dollars, weights are in decimal kilograms.

After calling the Australia Post website with your customs declaration, it returns to you a base-64 encoded PNG of the QR code to present at the counter, and a base-64 encoded PDF of the CN23 form – there’s no point printing this out, because it’s not paid for yet; let the Post Office print it out with the postage on it. You’ll also get the PNG via email and SMS (free).

Here’s some Python to make this submission:


    AP_session = requests.Session()
    jsonFormData =  {"customDeclaration":{
      "label":{"source":"AEM","postagePaidIndicator":False,"eadIndicator":False},
      "parcelCharacteristics":{
        "productClassification":11,
        "dangerousGoodsIndicator":False,
        "returnInstructions":"Return By Most Economical Route",
        "confirmationMobileNumber":"0411111111",
        "content":[{
          "content":"HS traffic code name for your stuff",
          "contentQuantity":1,
          "contentUnitValue":subtotal,
          "totalContentValue":subtotal,
          "contentWeight":int(order["total_weight"])/1000,
          "hsTariff":"95030039",
          "contentCountryOfOrigin":"DK"
          }],
        "totalConsignmentValue":subtotal},
      "senderAddress":{"firstName":"Josh","lastName":"FromGeekrant.org",
        "addressLine":["11 Example St"],"suburb":"YourSuburbName","state":"VIC",
        "postcode":"3000","email":"addr@example.com",
        "phone":"0411111111","smsConfirmation":False,"countryCode":"AU"},
      "receiverAddress":{"firstName":CustomsString(order["label_address_name_first"]),
        "lastName":CustomsString(order["label_address_name_last"]),
        "countryCode":order["label_address_two_char_country_code"],
        "addressLine":CustomsAddress(order),
        "suburb":CustomsString(order["label_address_city"]),
        "state":CustomsString(order["label_address_state"]),
        "postcode":CustomsString(order["label_address_postal_code"]),
        "email":order["buyer_email"]}
    }}

    stopact = {"jsonFormData":json.dumps(jsonFormData) }
    result = AP_session.post(url='https://auspost.com.au/bin/form/stopact', 
      data=stopact, timeout=2)
    response = json.loads(result.text)
    result.raise_for_status()
    filename = "{}-customsQRcode.png".format(orderid)
    with open(filename, "wb") as fh:
      fh.write(base64.b64decode(response['qrCode']))
    filename = "{}-CN23.pdf".format(orderid)
    with open(filename, "wb") as fh:
      fh.write(base64.b64decode(response['label']))

LEGO Pick-a-brick container sizes, dimensions and capacity

There are three Pick A Brick containers – The 950ml tumbler, 475ml tumbler and 30ml lid. I have measured the volume of these containers using a 0.1g scale and water; I have high confidence in the measurements. Other measurements have been taken with callipers and rulers; I have lower levels of confidence in those numbers.

The lid’s stud (where you can store LEGO if you’re particularly cunning) is 48mm diameter and approximately 16mm deep – six studs in diameter by two studs deep. This means you can’t fit something six studs wide (48mm) into it, because LEGO bricks aren’t 0mm tall or long. You might be able to store one 1×6 plate if you jammed it in, as plastic objects are plastic (bendy).

The 475ml tumbler has a profile matching that of the 950ml tumber, cut off at the bottom. They share an opening of over 100mm. They both have an indentation that matches that in the lid, allowing stacking. The displacement of the indentation of the base is 55mm wide and has three strengthening piers projecting into the interior of the base.

The length of the interior wall top-to-bottom depth of the 475ml tumbler is 76mm; it can hold 1675 1×1 round plates. The top-to-bottom depth of the 950ml tumbler is 170mm.

Dear ABC: use English better

It’s been several years, but now it’s time to complain about the use of certain phrases by ABC News journalists:
– “Quote Unquote” is meant to surround what you’re quoting, not preface it. If you’re just going to preface it and use a different tone of voice, just use “Quote.” If you want to clearly signal the end of a quote, say “Unquote” at that part.
– All crimes happened in the past, and are thus historic. There is no such thing as historic rape. It’s rape. Find another way to communicate “very old”. Vintage rape? Much classier.
– If a court order or law forbids naming someone, then you “mustn’t” name them, not “can’t”. You can, but you’re just unwilling to go to jail for contempt. “can’t be named for legal reasons” is also wrong, but less wrong than “can’t”. I hope you’re not trying to avoid sounding like characters in Harry Potter and “He who mustn’t be named”
– Vehicle crashes are not best described as accidents. As reporters you don’t generally know at the time of reporting the intent of drivers, so it could well not be an accident. Try crash, collision, or even the bland “incident”.

And on another matter, could your staff stop editorializing misfortune? “The driver reversed and tragically didn’t see the three year old, who sadly died as a result” ought to be reported as “The driver reversed and didn’t see the three year old, who died as a result”

BrickLink API PushNotificationMethod Get Notifications callback semantics

The documentation for the BrickLink API PushNotificationMethod suggests that the data sent to the URL you registered on the BrickLink API Consumer Registration Page is sent to this URL (via a POST verb, by the way) and as such you don’t need to call Get Notifications. Given the body of the POST is empty, this is not right – what you instead need to do is use any POST to your registered URL as a prompt to call Get-Notifications. It’s probably best to periodically call it too, given “it does not guarantee delivery of all events” and doesn’t either based on my experience.

A notification to be created when:

  • Order
    • You received a new order.
    • Buyer updates an order status.
    • Items of an order are updated (added or deleted).
  • Message
    • You received a new message.
  • Feedback
    • You received a new feedback or reply

Also note: NULL fields are not included in the returned JSON. Some fields names don’t match the documentation (eg: drive_thru_sent instead of the documented sent_drive_thru).

Sonos memory capacity

There’s an excellent chart on Reddit (and a slightly different one on Sonos’s forum) plotting the amount of memory each Sonos device has built into it. This has increased over the years.

I thought I’d do a table with this info, but also with the year of release, and the new crop of devices just released.

And I’ve also added a column noting if each device supports voice commands (which take more memory) and is compatible with the new Sonos operating system S2 (introduced August 2020), or whether users of these are stuck on S1.

(There are a few gaps which hopefully I’ll fill over time. And I’ve deliberately excluded non-playing accessories such as the Bridge and Controllers. For now I also haven’t included the Sub, which is not a standalone player.)

DeviceYears soldMemoryStorageVoice S1 or S2Supports SonosNetReplaced by
ZonePlayer 1002005-08??NoS1YZonePlayer 120
ZonePlayer 802006-08??NoS1YZonePlayer 90
ZonePlayer 120
aka Connect:AMP
2008-153232NoS1YConnect:AMP (gen 2)
ZonePlayer 90
aka Connect
2008-153232NoS1YConnect (gen 2)
Play:52009-153232NoS1YPlay:5 (gen 2)
Play:32011-186464NoS1 or S2Y
Playbar2013-20128128NoS1 or S2YArc
Play:12013-1712864NoS1 or S2YOne
Play:5 (gen 2)2015-20256256NoS1 or S2YFive
Playbase2017-20256256NoS1 or S2YArc
Connect (gen 2)2015-19256256NoS1 or S2YPort
Connect:AMP (Gen 2)2015-19??NoS1 or S2YAmp
One2017-1910241024YesS1 or S2YOne (gen 2) / One SL
Beam2018-2110241024YesS1 or S2YBeam (gen 2)
Amp2019-10241024NoS1 or S2Y
One (gen 2)2019-202310241024YesS1 or S2YEra 100
Symfonisk Lamp2019-512256NoS1 or S2Y
Symfonisk Bookshelf2019-512256NoS1 or S2Y
Port2019-512512NoS1 or S2Y
Move2019-10241024YesS1 or S2N
One SL2019-512512NoS1 or S2Y
Arc2020-10244096YesS2Y
Five2020-512512NoS2Y
Roam2021-10244096YesS2N
Beam (gen2)2021-10244096YesS2Y
Roam SL2022-10244096NoS2Y
Ray2022-10244096NoS2Y
Era 1002023-10248192YesS2N
Era 3002023-81928192YesS2N

There’s certainly a pattern there.

Devices with at least 64Mb storage and 64Mb memory can support S2, but others can’t.

Voice command support appears to require at least 1024 Mb of storage and the same of memory.

S2 was the first big move in the 15 years since the first devices were released that they left behind some legacy devices on an older version. (Though in 2018 they did do an update which dropped support for their CR100 controller, sold from 2005-09, and long replaced for most users by iPads and smartphones.)

S1 will continue to get security and bug fixes – but not new features. And those users can get a 30% voucher for upgrades (and still use the older devices if they want – initially Sonos’s unwise idea was to brick them, but they changed that scheme).

S2 has only been out for a few weeks, so it’s unclear how quickly new features will be added. And from a software development perspective, under the hood there may have been a great culling of legacy code, which might be good for performance and stability (not that either have been a big issue in my use of Sonos).

Hopefully it’s another decade or more before they decide to exclude more older devices from the latest and greatest.

Updates: Updated with new models. Added SonosNet column, as some new models don’t support it.

Update 2024-11-13: As new products continue to come out, I probably won’t keep updating, but Wikipedia has a similar table.