WWDC

Apple's WWDC was virtual this year, because of the coronavirus. Per usual, I watched they keynote address. Given the circumstances, I thought that it was a well-produced event. However, the tone and pacing were a bit strange: I saw someone on Twitter describe the WWDC keynote as “somewhere between an infomercial and a corporate safety training video” – and I'd agree, except also with vibes of an airline pre-flight safety video.

Kidding aside, the things Apple announced this week are exciting: Macs are moving to ARM (“Apple Silicon”), iOS’ springboard is finally getting a functional redesign (in the form of widgets and the App Library), and AirPods will now automatically switch between devices. Of course, much more was announced, but these were my highlights.

I've dabbled in iOS development in the past, and some of the new features coming to iOS (widgets, especially) make me want to dive in again. Unfortunately, I'm using a pretty underpowered, space-constrained Macbook right now, so the experience loading the new versions of XCode is painful. Also, I've heard that early beta builds of iOS tend to be buggy, so waiting a bit for stabilization isn't the worst idea.

I thought the way Apple announced its transition to ARM was interesting too. It sounds like they've given a lot of thought to the developer community and to providing backwards compatibility for x86-compiled apps. Unfortunately, there aren't any consumer ARM Macs yet, which throws a wrench into my plans to update my laptop. I don't think I want to buy in to the first ARM Mac when it gets released, but it's also not a great feeling to be buying the (potentially) last Intel Mac Laptop design.

“Rust, WebAssembly, and the future of Serverless”

This week I watched Steve Klabnik‘s excellent talk, Rust, WebAssembly, and the future of Serverless. It covers a brief history of Rust, Docker, Devops, and WebAssembly, and how the rise of Docker within cloud computing could portend an analogous genesis of rich WebAssembly apps within browsers. The argument, in brief, is that: just like Docker containers allow cloud vendors to run arbitrary code on their infrastructure without worrying about code breaking out and acting maliciously, WebAssembly will allow users to run arbitrary applications inside browsers in a similarly safe way. Of course, we've already been doing this to an extent in browsers for a long time: Javascript web apps are arbitrary code bundles that can run safely on a user's machine.

Klabnik argues that the increased flexibility and performance of WebAssembly will allow the creation of even more powerful applications. Enter WASI, the WebAssembly System Interface, a project that aims to provide a secure, portable interface for WASM apps to have lower-level access to system resources (like networking and filesystem access).

Of course, this might just be one more failed “write once, run anywhere” ambition, but it is a compelling idea. I'd recommend watching the full talk, if only because Klabnik is an outstanding speaker.

bpy_lambda

bpy_lambda is one of the open-source libraries I maintain. It's a packaged version of Blender's scriptable python library suitable for deployment on AWS Lambda. Blender had a new release a few months ago, and I've been working on updating bpy_lambda to support it… but wow is compiling large projects manually a pain. bpy_lambda uses a Docker version of AWS Linux to compile down Blender into a package that can be uploaded to PyPI. AWS Linux is similar to RHEL, but not identical, so tracking down packages/libraries for it can be challenging.

Blender has a huge web of dependencies, many of which aren't even required for the Python package. So, this week I've been going through and trying to disable as many Blender feature flags as possible to get the thing to compile. It's pretty frustrating, as even on a pretty powerful machine and with decent Docker caching, each build can take upwards of 10 minutes, just to error out. I feel kinda bad because the issue requesting support for the newest major Blender release was opened in 2018, but… hey, it's an unfunded open-source project. 😅