Amy smiling with her hair down with a a sunset and beach in the background.
Amy on Kaimana Beach in Honolulu, HI, USA, maximally reinforcing sabbatical stereotypes.

Winter sabbatical update: Code, community, huakaʻi

Amy J. Ko
Bits and Behavior

--

I can’t believe it’s already been six months since I started sabbatical! Summer went by quickly, full of research with students, travel to Chicago, Germany, Switzerland, San Diego, and Vancouver. As I shared in my September update, by the end of summer, I really only felt like I was getting started.

In contrast, the past three months of Autumn have felt comparatively quiet. I’ve spent my time doing three things, all relatively distinct in practice, but all largely about the same goal of trying to find ways of healing from a challenging six years of faculty life, while also pursuing justice in various forms. Here’s a short reflection on some of my activities, partly for myself, and partly for those who are curious.

Code

I’ve been writing a lot of code. Maybe more than I ever have. That might seem directly counter to some of the justice goals I have this year — after all, what can software do to really change the power structures and assumptions that drive oppression? I draw the link between making and justice through infrastructure: some power structures are built into the infrastructure we use daily. I view rebuilding that infrastructure as part of dismantling the old one.

Part of this has been skilling up. I learned Svelte and SvelteKit, a framework that speaks my values of simplicity and parsimony, while also being playful, and is widely regarded as one of the most developer-centered ways to build for the web (meaning that it’s relatively easy to learn, efficient to use, and powerful). To learn , I reimplemented my faculty website with SvelteKit, finding that it is now much smaller, faster, and easier to maintain, but also fun to maintain, because revisions are so interactive and straightforward, especially with TypeScript. Of course, all of this is primarily about skills; staying current on web development is a hobby, but also relevant to my teaching in and administration of an undergraduate program so centered on the web. Sabbatical skill up, check.

One of my infrastructure projects is trying to create more accessible and open platforms for book-length writing. I’ve written several books in the past few years, and have generally found the traditional publishing world (including the e-book publishing world) to be complicated, full of barriers to sharing and editing, and largely centered on prestige and profit over sharing knowledge. To dodge this world, I’ve been building a side project called Bookish, a framework for making it easier to write web-based books. Originally, I wrote the platform just to satisfy my desire for typographic clarity in web-based reading — so many online book platforms are just ugly or navigation-centric in their presentation. The framework started as just a simple markup language and JavaScript tool for creating books for posting on static web hosting. But at some point, the maintenance burden inspired me to write a full-fledged hosted publishing platform, including a Google Docs-like WYSIWYG book editor, to make writing, typesetting, and revisions more immediate and simple. Here’s a tiny preview:

Screenshot of a chapter editor, with a toolbar, a title “What is a book?” and text that says “I’ve never really thought about what a book is. To me, its always seemed like a physical object, with textures, smell, and weight, a personal artifact to be carried, annotated, and shared. And I like this conception of a book. But with the advent of the internet, books have taken a strange form.”
The Bookish press chapter editor, a WYSIWYGT way of writing long-form content.

I started that work back in Spring and am nearly ready to release a beta, after I fix ~30 more (known) defects and finalize a bit of cloud infrastructure. The goal is for anyone to be able to write, publish, and maintain simple web-based books online without any complicated publishing workflows or typesetting platforms. I still haven’t decided if/how I want to cover bandwidth; there are many possible models, each with tradeoffs (e.g., do readers or authors pay, or do I pay for bandwidth myself? Should web-based books be free?). As a side project, I usually just work on it for a few hours a week on the weekend, as bit of palette cleanser from the week, but since we hope to use it for the new book Teaching Accessible Computing that I’m co-editing with Alannah Oleson and Richard Ladner, I should probably finish it.

Of course, the biggest programming project on my mind is the centerpiece of my sabbatical project, Wordplay. I’ve been intentionally vague about it, but here’s what I’ve shared with many I’ve talked to synchronously about it: I’m creating a creative coding platform focused on secondary CS education that takes seriously three things 1) accessibility in all forms, for all abilities, 2) language inclusion, especially for students who read multiple languages but not English, and 3) teachers needs for using platforms in classrooms. On top of that, I’m also exploring a new output medium of interactive typography (which closely aligns with goals of accessibility and language inclusion, since text is far more amenable to those goals than graphics). It turns out that trying to achieve all of these things requires rebuilding an entire programming stack from scratch. Here’s an itty bitty preview of part of a program that makes a simple word guessing game:

A code editor showing a dozen lines of code, a preview window that says “WhatWord”, and a few play/pause buttons.
A very early prototype of Wordplay, a creative coding platform for creating interactive text-based media.

You can’t tell much from that screenshot, so here’s what I’ve accomplished so far:

  • Wordplay has a strongly typed, purely functional programming language that uses no words, only symbols, but looks typographically clean, legible, and terse. Names are the only things that can optionally use natural language, but name localization is built in, with every name optionally having multiple language-tagged aliases. This design has the advantage of being something that can be laid out left-to-right, right-to-left, top-to-bottom, or bottom-to-top, since there are no natural language dependencies that dictate a particular direction, aside from names.
  • I’ve built a code editor that combines text-editing, drag and drop, and menu-based editing into a single interface. This diversity of interactions is essential for accessibility, as no one editing interface is sufficiently accessible on its own. Drag and drop assumes use of a mouse, text editing requires fine-motor control over keyboards and screen reader complexities, and menus can be slow to navigate, and so supporting all of them (and more in the future) is key. There’s a lot to sort out about how these interact, and a lot to polish, but I’m pleased so far with how all of these models are integrating seamless.
  • The Wordplay runtime that centers streams, where all external input to the program is a sequence of inputs that drive reevaluation of a program. This model has the benefit of making time travel debugging relatively trivial: in Wordplay, it’s easy to step back and forward through the entire execution history, and see the output at any point in that history, by simply scrubbing alone a timeline with a mouse or using the keyboard to step back and forward through steps in the program or inputs in a stream. This really transforms the experience of debugging: when there’s an exception, I can just step back a few steps and see what happened, freely going backwards and forwards to see what caused it. (And the cause is usually obvious, because nearly all runtime exceptions are caught at compile time, due to strong typing, and so the cause is already highlighted). It also enables a lot of interesting tutorial possibilities that I hope to explore.
  • Wordplay output is a scene of typographic phrases that can be styled, animated, and grouped, enabling anything from static layouts with subtle animations to highly interactive visual scenes composed of Unicode glyphs. There’s a lot of work to do on this to refine the API, so I expect much of the next three months will be building lots of examples to refine requirements.

There’s much more to do beyond the above, particularly around what I’ve been calling the lore of the platform: the culture, mythology, and stories that shape the values and ideals of the characters in the Wordplay world. The central premise I’m toying with is framing Unicode as a population of glyphs, each with their own personalities, goals, but all centered around a love of textual communication through choreography and dance. From this premise, I’m planning on reframing many programming ideas with these metaphors (e.g, errors are conflicts between glyphs who can’t agree on what something means; output is a performance; code is choreography; animations are composed of poses). Much of this lore will be conveyed through documentation, which will be more like profile page for troupes of glyphs that have come together for a particular choreographic purpose (such as finding the smallest number in a list, LOL).

I only have nine months left. But I suppose that I’ve accomplished a lot working in this part time, so maybe that’s enough time to realize part of my vision. Wherever I land, I hope to publicly share in Summer 2023, along with a call for people to help with localization and critical feedback about accessibility.

Community and Huakaʻi

Admidst all of this coding, I’ve continued to travel. I went to a cozy Google summit on CS education research in Boulder and met many wonderful people doing identity and justice centered work on K-12 CS education. I spent a few days in Cambridge visiting friends and colleagues at Harvard, MIT, Tufts, and Northeastern, enjoying a few days of talking and coffee shop engineering sessions. I spent a few days in November and December in Portland seeing my family for the holidays. And I had a glorious eight days on Oahu at the beginning of December, half with my wife and the other half solo, reading and coding in front of the Pacific Ocean, eating amazing pupus, and enjoying some solitude. It has felt like the Hawaii word huakaʻi, which to the best of my understanding, means “journey” or “voyage”, often with a goal of learning or discovery.

Throughout all of this, I’ve also been building other forms of community. Some of this has been in grant planning, trying to bring together CS teacher educators across the Pacific Northwest to find ways of supporting our teachers thorugh community, communication, and coordation. It’s been a joy to learn about all of the excellent work happening across the region, and ideate ways to move it from silos to the open. I’ve also started volunteering at Lambert House regularly, creating community trans, non-binary, and queer youth across Washington, facilitating some youth groups, helping with some in-person events, and meeting some of the many other wonderful volunteers who support Lambert House’s mission of empowering queer youth through community, mentorship, and role modeling.

At this point, I think I know what the next 12 weeks will bring: wrapping up a grant, preparing for the SIGCSE conference, writing a lot more code to bring Wordplay and Bookish to life, guiding my wonderful students and postdoc, and spending many days talking with queer youth, many of whom have been under direct legislative assault for years. It’s going to go quickly! Thank to you the iSchool, UW, and the state of Washington for making this time possible; it’s such a great privilege to have time to focus, take bigger risks, and try to build a more just world, at least in the little corner I sit in.

--

--

Amy J. Ko
Bits and Behavior

Professor, University of Washington iSchool (she/her). Code, learning, design, justice. Trans, queer, parent, and lover of learning.