4. This has just expanded the virtual disk, now you must grow the partition on the disk. Linux does not have
good tools to grow a partition that is running the OS, so don't boot your VM back into Linux.

(there is some LVM stuff that lets you make multiple partitions and then treat them as a single one,
but for a Unix newb like myself that looks too scary).

6. Now you have to get the virtual machine to boot from CD. Getting into the BIOS interactively was impossible for me.
Fortunately VMWare has a solution. Find your VM files and edit the .vmx config file. Add this line :

bios.forceSetupOnce = "TRUE"

7. Power on the VM and you should enter the BIOS. Go to "Boot" and put the CD first. Save and Exit and you should now
boot into GParted.

8. Using GParted is pretty self explanatory. It's a good tool. When you're done, shut down and Power Off the VM.

My VM was set up with a swap partitition, so I had to move that to the end before I could grow the primary partition.
I hear that you can set up Linux with a swap file instead of a swap partition; that would be preferable. A swap partition
makes zero sense in a VM where the disks are virtualized anyway (so the advantage of keeping the swap thrashing off your
main disk doesn't exist). Not something I want to change though.

It seems to me it's a good idea to leave it this way - BIOS is set to boot first from CD, but the VM is set with no CD hardware
enabled. This makes it easy to change the ISO and just check that box any time you want to boot from an ISO, rather than
having to go into that BIOS nightmare again.

More generally, what have I learned about multi-platform development from working at RAD ?

That it's horrible, really horrible, and I pray that I never have to do it again in my life. Ugh.

Just writing cross-platform code is not the issue (though that's horrible enough, solely due to stupid non-fundamental
issues like the fact that struct packing isn't standardized, adding signed ints isn't standardized, restrict/noalias isn't
standardized, inline linkage varies greatly, etc. urg wtf etc etc).
If you're just releasing some code on the net and offering it for many platforms (leaving it up to the downloaders to actually
build it and test it), your life is easy. The horrible part
is if you actually have to maintain machines and build systems for all those platforms, test them, be able to debug on them,
keep all the sdk's up to date, etc. etc.

(in general coding is easy when you don't actually test your code and make sure it works well, which a surprising number
of people think is "done"; hey it compiles, I'm done! umm, no...)

(I guess that's a more general life thing; I observe a lot of people who just do things and don't actually measure
whether the "doing" was successful or done well, but they just move on and are generally happy. People who stress over
whether what they're doing is actually a good job or not are massively less happy but also actually do good work.)

I feel like I spend 90% of my time on stupid fucking non-algorithmic issues like this Linux partition resizing shit
(probably more like 20%, but that's still frustratingly high). The regression tests are failing on Linux,
okay have to figure out why, oh it's because the VM disk is too small, okay how do I fix that; or the PS4 compiler has a
bug I have to work around, or the system software on this system has a bug, or the Mac clang wants to spew pointless warnings about
anonymous namespaces, or my tests aren't working on Xenon .. spend some time digging .. oh the console is just turned off, or the IP changed
or it got reflashed and my SDK doesn't work anymore, and blah blah fucking blah. God dammit I just want to be able to write algorithms.
I miss coding, I miss thinking about hard problems. Le sigh.

I've written before about how in my imagination I could hire some kid for $50k to do all this shit work for me and it would be a huge win
for me overall. But I'm afraid it's not that easy in reality.

What really should exist is a "coder cloud" service. There should be a bunch of VMs of different OS'es with various compilers and SDKs
installed, so I can just say "build my shit for X with Y". Of course you need to be able to run tests on that system as well, and if
something goes wrong you need remote desktop for interactive debugging. It's got to have every platform, including things like game consoles
where you need license agreements, which is probably a no-go in reality because corporations are jerks. There's got to be superb customer
service, because if I can't rely on it for builds at every moment of every day then it's a no-go. Unfortunately, programmers are almost
uniformly overly optimistic about this kind of thing (in that they massively overestimate their own ability to manage these things quickly) so wouldn't
want to pay what it costs to run that service.