Enable VoLTE on Huawei P20 Pro in Australia via USB debugging (Windows computer needed)

My Huawei P20 Pro's last EMUI update in 2023 added VoLTE support - it was specifically added to do that. Nonetheless, because of the shambolic way that the move off 3G has been handled in Australia, my phone was effectively "bricked" on both Vodafone and Telstra.

If you're in a similar situation, here's how to force unlock/enable VoLTE on Telstra's network in Australia. Note that you will have to do this procedure every time you restart your Huawei P20 Pro. What's more, it seems to drain battery about 10%-15% faster. This makes it a bandaid solution, but does allow you to keep having mobile phone service until you get a new phone.

This works on unrooted devices running EMUI 12. I believe it also works for unrooted devices running Android 10 and below, based on the Shizuku app guide.

I don't know if it'll work with Vodafone, because they handled the situation so badly that I'll never use them again.

What you'll need

  • Your Huawei P20 Pro
  • A Windows 10+ desktop or laptop computer
  • A USB charging cable that can transfer data
    (You can verify this by using the cable to plug your phone into your computer. If Windows picks up the phone as an external device, you're good. If it doesn't, the cable won't work for these purposes.)

Apps to install

On your phone

  • Shizuku
    I recommend downloading this from the Google Play store
    https://shizuku.rikka.app/guide/setup/
  • Pixel IMS
    This isn't available on the Google Play store any longer. Plus, we need the specific patch as linked for our Huawei P20 Pro, to prevent Pixel IMS from crashing when Shizuku is on. Normally I'd caution against downloading random APKs from the interwebs, but it all depends on your own individual desperation and situation. ;)
    Github comment | Github download

If you've never installed apps on your phone outside of google play, and don't know what an "APK" is, it can seem a bit scary. But it's really easy, promise! Just follow the Pixel IMS link either on your phone, or type it into your phone's web browser. The APK download should start, and once it's done, your phone should prompt you to install it. 

If the prompt doesn't show up, then once the download is done on your phone, go to Files > Downloads/Received files > Download Manager > Tap on dev.bluehouse.enablevolte.apk and you should get an installation prompt.

On your Windows computer

Enable VoLTE

  1. Turn on Developer Mode in your phone (if you haven't already).
    Settings > About phone > Build number > Tap "Build number" repeatedly.
  2. Turn on USB debugging on your phone.
    Settings > System & updates > Developer options > Enable "Stay awake", "USB debugging", "Allow ADB debugging in charge only mode", and make sure "Set USB configuration" is "Charge only".
  3. Plug your phone into your Windows computer.
    Again, this needs to be with a cable that can do data transfer. If your computer doesn't detect your phone as an external device when you plug it in, it won't work.

  4. On your computer, go to the "platform-tools" folder you extracted (this is ADB). 
    Shift-right-click "platform-tools" folder > Open Powershell window here
    Windows PowerShell will launch.
  5. On your computer, in Windows PowerShell, type 
    .\adb
    If successful, you should see a wall of text. :)
  6. On your computer, in Windows PowerShell, type 
    .\adb start-server
    You should see "daemon started successfully".
  7. On your computer, in Windows PowerShell, type 
    .\adb devices
    If successful, you should see "List of devices attached", a long serial number, followed by the word "device". That's your phone! :D
  8. On your computer, in Windows PowerShell, type 
    .\adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
    This will use your computer to start the Shizuku app you installed on your phone.

  9. On your phone, open Pixel IMS, and select the "SIM" tab on the bottom of the app.
    For example, on my phone, it says "Telstra (SIM 1)".
  10. On your phone, in Pixel IMS, turn on all the things!
    Enable VoLTE
    Enable VoWiFI
    Enable VoWiFi while roaming
    Enable Supplementary Services over UT
    Enable Supplementary Services over CDMA
    Enable Video Calling (VT)
    Enable Enhanced 4G LTE (LTE+)
    Allow adding APNs
    Show VoWiFi Icon
  11. On your phone, check that everything is enabled and working.
    Settings > Mobile network > Mobile data > Enable "4G" and "Wi-Fi Calling".
    Set preferred network mode to LTE/WCDMA/GSM auto
  12. The top bar of your phone should show "Telstra", and "VoWiFI".
    You've successfully enabled VoLTE and VoWiFi on your Huawei P20 Pro. :D

Resources

A whole bunch of kind folks on the interwebs made this solution possible for me, and here they are. Parts of this guide are pretty much directly quoting them. :)

No guarantees that this will work for you. But if you have a Huawei P20 Pro in Australia, it's worth a shot. The original that twigged me on to realising that force-enabling VoLTE in a way an Australian telco would recognise was for a Huawei Honor 90 Lite, after all.

Good luck! :)








One bowl muffins - no butter, no egg! :D Plus bonus custard filling to make them into Stuffins.

Add flavourings of your choice. The pics are matcha in the batter, and chinese preserved sweet salted plum powder in the custard.

Muffin base

Ingredients

Flour 200g (AP, bread, cake, all will work)
Almond meal 50g <-- this is to boost the fat, don't leave it out
White sugar 150g
Baking powder 1tsp
Salt 1/4 tsp

Thickened cream / whipping cream 100ml
Fresh full cream milk 200ml

Crafting

  1. Dump dry ingredients in bowl and stir till more or less the same
  2. Dump cream into dry ingredients, mix into pastey doughy thing (can still have bits of flour, it's fine)
  3. Dump milk in 50% at a time, mixing in each time. (But don't overmix, just like... fold it lazily. Lumps are fine.) You're looking for a very thick milkshake type batter, so we wanna control the liquid to make sure it's not too ... liquid.
  4. Fill cupcake cups to about 5mm below the edge. Alternate filled/empty bits in muffin tray for best results/most even heating. If you're using those fancy tall muffin cups like I did in the pic, still go 5mm~ just below where it'll start to leak. The fancy muffin cups are GREAT if your oven (like mine) heats unevenly. They seem to shield the cupcackles and make them come out more symmetrical.
  5. Pop in 180C oven and bake for 30m~ (tops should start to be golden brown on the sides)

If using coconut cream to replace thickened/whipping cream, the texture will be more dense. But still nice!

Microwaveable custard-filling base

Ingredients

Corn starch 20g
Sugar 20g
Milk (cow or other, doesn't matter) to fill a generic :P coffee mug till about 2/3 to 3/4 depending on how squishy you want the custard
  1. Dump corn starch and sugar in mug
  2. Stir to homogenise
  3. Dump a bit of milk (enough to make a paste to avoid lumps)
  4. Stir into said paste form
  5. Add the rest of the milk, stir
  6. Nuke for 2 minutes, stirring every 30s, until the custard thickens. at 1m 30s, you may want to change to nuke for 15s rather than 30.
  7. When it looks thick and gloopydrippy and not-set-custardy, it's done
  8. Shove in fridge to cool for a couple hours (I usually leave it overnight so I can bake the next day).
If you add egg, then the proteins coagulate differently and it will be tetchy and not cook as evenly. I advise not adding egg.

For a chocolate version, also add 20g cocoa (dutch processed is nicer).

For hot chocolate that is amazeballs, just add more milk, all the way to more or less normal-full mug. It's GLORIOUS.

Note that this will only work in a normal coffee mug type mug. If you try to use a 500g pyrex jug, for example, it won't cook evenly. I think it's something to do with the size and volume vs microwave penetration, heat, and evenness.

Fucking Cherubs!

"Did you hear?"
"Hear what?"
"Our sister Candy Haus. She's dead. Burnt to a cinder."
"What! How?"
"Well, you know, she always was a careless one. Picked up two plump brats. Fattening up the one, and making the other do chores. Never occurred to her that maaaaaybe it might have been better to leave Hans-El and Gret-El alone."
"Ugh. Cherubs?"
"Yep."
"Oh well, ashes to ashes and all that."

<.< An original retelling by Nugget.

(I don't know why, but I've never seen anyone else riff on this before...)


FrameQuery Figma plugin: Like CSS container queries in your Figma components and frames

I currently lead an enterprise digital Product Design team, and I'm also design co-lead (together with my dev co-lead) for our Design System. We already have multiple UI (code) components that use container queries. This is gonna be soooooooooo helpful on the design model side, because with this plugin, our designers don't have to remember when to manually swap layouts on our models.

First iteration took about 10-12 hours total, and about 100~ credits on my personal Pro account. Fixing the bugs took another 200 or so credits. Learned quite a bit of stuff along the way though. Adding support for components imported into libraries (without which the plugin is basically pointless) took another 300~ credits.

Still need to get it cleaned up, it's a mess, but at least the core bugs are fixed.

This is a working copy, and here's how to use it, if you're curious. :)

Load & use FrameQuery Figma Plugin

  1. In Figma desktop app ONLY, open a Figma file with components that you want frame queries on.
  2. Right-click on empty space in Figma canvas: Plugins > Development > Import Plugin from Manifest.
  3. In FrameQuery 1.0.30 > new-plugin > select manifest.json.
  4. Click on "Nugget's Frame Queries" and the plugin should load.
  5. In the component that you want to have frame queries on, add a new Property FQ-size. Needs to be exactly this string incl. capitalisation. You can name the variants anything you like, for a given value of "anything". Spaces are supported, but there are some other characters that might not be.
  6. FrameQuery should dynamically pull your variants from anything you set in FQ-size.
  7. With the component selected, turn FrameQuery on.
  8. Set your breakpoints. A max is needed for your biggest breakpoint, just make it something silly like 9999px.
  9. Pop a component instance onto the canvas, stick it in a frame, and resize the frame. The current version only cares about width, but I might enhance with height later.

FrameQuery appends 🤖 to component names that have FQ enabled, and prepends 🤖 to frames that contain component instances with FQ enabled, so we can keep track of 'em without messing up how our prototypes look in demos.

FrameQuery also works with components imported from libraries (1.0.30)

  1. Follow steps 1-8 from above in your library file, and publish the library.
  2. Close the library file (you don't need to have it open).
  3. In your target file, load FQ.
  4. Pop in the component instance from your library file, just like you normally would. This is the component with 🤖 appended to its name.
  5. Pop the component instance in a frame.
  6. 🤖 is prepended to the frame name, and the frame is now responsive.







BDO Barter Planner

Proliferate little web apps, proliferate! Doesn't make up for the crap that's polluting the interwebs in terms of content, but I guess at least I can have my own little web apps now.

I got sick of writing the same stuff in Notepad over and over, and realised that, "hey, now I can get an LLM (via Windsurf) to write this really simple thing for me!"

Behold, the Black Desert Online (BDO) Barter Planner!

Bartering is basically a trading (mini) game. You sail around trading stuff (...bartering it). BDO has a really really big map, and it's almost all non-instanced, so you can (literally) sail around for hours if (a) you want to for some reason; (b) you are bartering or hunting sea monsters.

In the "Item" column, I have the Item (survival kit) that I need to bring to a particular Location (Arakil island) to barter. It's grade "g" for green, and what I'll get in return for the barter is "box". The number of the item I need to bring is in the Quantity column.

This is a far from optimised setup. I don't even try to optimise distance and time, except to my own lackadaisical playstyle of "are those things in the same general vicinity". It doesn't have Margoria nor Valencia nodes because I've <.<; memorised all of those. Plus the "Crow Coin" option in the Barter UI in-game renders it unnecessary to track those nodes for trading. At least for me.

Features

  • Easily track the trade goods you need for your non-Margoria barters, grouped by proximity.
  • Search and filter by location names and codes.
  • View location codes (arbitrarily assigned by me) by clicking on "Location code" column header.
  • Clear rows when you've completed the barter.
  • Sort rows to the top as you fill them in, so your to-do barters are always visible.
  • Data is saved in LocalStorage, so you can open/close the file without worrying. Data is removed when you clear it.
  • Runs purely local on your machine.
  • No installation needed. Just unzip the file and open it in a web browser.

Download


Droplet aka ChatGPT (via Windsurf) wrote me a knock-off Airdrop/Snapdrop! :D

First iteration / MVP

Windsurf told me how to install Python, and wrote the base HTML and JS, plus the PY file needed to run the Droplet server locally. My original idea was to use the web browser's localstorage, but that didn't work out, not least because the amount of data I could store that way is puny. The first iteration was very ugly and unfriendly, as the text/instructions were written in a way that made sense only to me.

After testing with my partner helping with uploading files (it worked, yay MVP), then it was refinement time.

Later iterations

  • Add determinate loading bar during upload.
  • Make it prettier.
    Hm! I've heard about classless styling/boilerplate HTML frameworks, maybe I can use one of those!
    I ended up using the very lovely Water.css
  • Add understandable-to-humans instructions.
  • Support folder uploads.
  • Delete uploaded files.
    From the web app, instead of me deleting directly from Droplet's "upload" folder.
  • Display human-readable network device name of server.
  • Improved instructions (round 2).
  • Add QR code for easier mobile device access.
This was great fun, and I did manage to pick up a little bit about server side code, and improve my (very poor) JS knowledge a little to boot. And of course, now I have a Snapdrop replacement. ;)

Get a Droplet of your very own. :D

How to get an accessible PDF out of Google Docs (with free tools)

Today, I learned that Google Docs doesn't save accessible PDFs, even if you conscientiously wrote the doc accessibly. I.e. With the correct heading structure, lists that are actual lists, tables that are tables, figures, captions, alt text, oh my!

Instead, when exporting to PDF, Google Docs strips all accessibility-related information, resulting in an untagged PDF.

This was rather annoying to me, since I absolutely needed this particular document (a VPAT) to be accessible while in PDF form.

Poking around the interwebs, I came to the conclusion that most PDF accessibility remediation tools are one of the following:

  • Paid and expensive
    Adobe Acrobat Pro, I'm looking at you. To be fair, it isn't just Adobe that charges rather a lot.
  • Free, but don't work at all, or don't work very well
    Pave-PDF was an example that didn't work for me at all... even when it finally loaded my document.
  • Free, but insert watermarks, and possibly don't work
    PDFix allowed me to tag my PDF, but I couldn't quite trust that it was working. Especially since PDFix finds "no bugs" with a PDF that... has no tagged content. To be clear, a PDF with no tagged content is not accessible. Plus, it inserts watermarks.
    We'll get back to PDFix in a moment though - it does come in handy.
  • Free, very possibly good, but Windows only
    My work machine is a Mac.

Enough with the complaining - tell me how to get that accessible PDF!

It's really simple, but I didn't find anyone else laying out the exact steps, so here they are. Every article or answer I found assumed access to specific paid tools, which I don't have (MS Word, Acrobat Pro).

  1. Ensure your base Google Doc has been authored accessibly.
    If it isn't, make it so. I.e. use the correct heading structure, add captions to your images, etc. This is 95% of the work, "pre-done", almost. And if you need to fix stuff, it's easiest to fix it in your base Google Doc, rather than attempt it with any free tools.
  2. Export your base Google Doc as a MS Word .doc. Yup.
    Because interestingly enough, when you export a Google Doc as an MS Word file, it preserves all of that tasty tasty accessibility information that you've included.
  3. If you have access to MS Word, open the file, and THEN export it as a PDF.
    According to the interwebs, this should give you a nice, clean, accessible PDF.
  4. If you're like me, and don't have access to MS Word...
    Go to ilovepdf.com - it's free.
  5. On the ilovepdf.com site, choose the "Word to PDF" option, and select your exported MS Word file.
  6. Wait for your file to convert, then download it.
  7. Congratulations! You now have a nice, accessible PDF!

    BUT WAIT... How can you be sure it worked?

  8. On a Mac, right-click your nice (and hopefully) accessible PDF, and "Get info".
  9. Look for "Tagged PDF" - if it says "Yes", it worked!
    (Note that depending on your Mac OS version, "Get info" may no longer return this data.)
    That's okay, you can check another way, that also lets you look at the tags, to make sure they're all legit, which is...
  10. Download and install PDFix.
    You're not going to use this to fix your PDF (because that'll make watermarks, among other issues), you're going to use it to check your PDF.
  11. Open your file in PDFix, and click on the "Tag" icon.
    This pretty much works exactly the same way as Adobe Acrobat Pro, except that it's free. ;)
  12. Check out the tags in your (hopefully) lovely, accessible PDF. :D
    Woohoo!