# Week Notes - June 28th


## WWDC

Apple's [WWDC](https://developer.apple.com/wwdc20/) 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](https://www.theverge.com/2020/6/22/21299042/apple-wwdc-2020-recap-biggest-announcements-ios-ipados-macos-silicon-chips-mac)
was announced, but these were my highlights.

I've
[dabbled in iOS development](/blog/2019/05/28/Introducing-Messy-An-iOS-Grid-Puzzle-Game/)
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](https://steveklabnik.com/)'s excellent talk,
[Rust, WebAssembly, and the future of Serverless](https://www.youtube.com/watch?v=-2BO43FvBuA).
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](https://github.com/WebAssembly/WASI), 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](https://github.com/bcongdon/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](https://github.com/bcongdon/bpy_lambda/issues/6),
but... hey, it's an unfunded open-source project. 😅

## Assorted Links

-   [Three Phase Electric Power](https://en.wikipedia.org/wiki/Three-phase_electric_power) -
    Somehow, I went through my entire schooling without learning that the
    electrical grid runs on Three Phase AC power, instead of the single phase
    sine wave that is most commonly used to explain how AC works.
-   ["Dwarf Fortress Creator Explains its Complexity & Origins"](https://www.youtube.com/watch?v=VAhHkJQ3KgY)
    

