Curriculum Vitae


!My headshot

My name is wilkie. I develop large scale distributed systems and am looking for a position that will allow me to use that specialization to make better the open web. I have a strong desire to develop technology that can be accessed by anybody and push progress of a public commons without constraint. I specialize in the research and development of low-level distributed systems that reduce barriers of entry and push more control, authority, and rights to those that use the system. My overall goal is to provide a system that guarantees the freedom to compute.

Education

Speaking

Writing

Teaching

Work Experience

Software

Occam (ruby/sinatra, python, javascript/webpack+babel) - Software Archive

!Occam screenshot

Occam is a free and open-source (AGPL 3.0), federated software preservation and archival system. This system, designed by myself over several years and developed by a team at the University of Pittsburgh, serves to solve an increasingly dire problem: the degradation of software and digital data. To offset this peril, the system is designed to generate virtual machines (VMs) through Vagrant or Docker to build and run packaged software. Much like a package manager, the system can derive a VM based on a small description of software and then rake its dependencies which are themselves preserved objects. It then recursively preserves each package in a way that can be distributed and extensibly executed as a virtual machine on current and future hardware.

One novelty is that VMs are generated on-the-fly and can make use of preserved software, such as emulators, to provide means of executing obsolete software. These emulators can be introduced to the system (and learned over time) at any point to provide more functionality to patrons of the archive. In this way, new emulators can be introduced and selected as needed without having to change the system or force the system to store large, complete virtual machines that are built around particular emulation targets.

On top of the backend infrastructure, which is a sophisticated object store using python, git, and PostgreSQL, there exists a web portal frontend that allows the execution of software within a browser environment. For instance, software objects may target the browser itself and run (contained within sandboxes) within the browser. Such objects might be emulators, such as Em-DOSBox, which allow for software to be executed within a native emulator (via Docker) or executed within the JS version of the emulator on-the-fly.

RAWRS (ruby/sinatra, javascript/webpack+babel+emscripten) - Educational Tool

!RARS screenshot

The RISC-V Assembler and Workable, Rewritable System (RAWRS) is a learning-focused toolchain that incorporates an assembler, debugger, and RISC-V kernel together entirely within a static website. To this end, a GNU toolchain consisting of binutils and the RISC-V emulator TinyEMU where cross-compiled to JavaScript WebAssembly using emscripten. This allows these sophisticated and time-proven applications to be usable directly within a browser environment without having students install anything to their local machines. This side-steps a huge problem we have had with even Java-based toolchains such as the namesake MARS program.

Overall, this work-in-progress educational tool should provide a nice stepping stone for educators to move from MIPS based education to a RISC-V based environment. By being a web-based tool, it is my hope that this lowers the barrier-to-entry for learning assembly and systems curricula, and overall make this material more accessible to all.

Play and learn here!

rstat.us (ruby/rails, javascript/coffeescript) - Web Application

!rstatus screenshot

A free and open-source, federated microblogging platform I founded with a team of friends, resembling twitter and status.net, that emphasizes personal use and self-ownership of data. That is, this software is designed to be easily deployed on a hosting service or a personal server. The ownership and authority over the content is primarily in the hands of the individual, instead of a company that runs a centralized service such as twitter. It uses the ostatus protocol to distribute content within a social graph to nodes and servers maintained by other people.

Considering it is a social system at heart that attempts to liberate data to individuals, rstat.us became very successful. The rate of adoption out-paced app.net with 6,000 unique users in our opening week. We have over 60 contributors from all across the world which further suggests its appeal and need in the global world. I am a core maintainer along with Carol Nichols, and help organize new feature efforts and review pull requests, although our development model allows for any past contributor to commit and merge at any time.

xomb (D, assembly) - Systems Design and Implementation

!xomb screenshot

XOmB is a novel exokernel-inspired operating system project aimed at developing the most flexible OS architecture possible as a means of building more efficient systems and building systems more efficiently. Our immediate aim is to build a research and education platform, but by doing so we contend XOmB offers the opportunity to develop more streamlined OS implementations for general purpose and server use. The flexibility we aim to achieve should allow the same kernel to be deployed in many scenarios, adapting the userspace if needed.

The design of the XOmB kernel does not impose any unnecessary abstractions, and thus avoids hiding state from the applications or incurring additional overheads (e.g. implementing a database on top of a filesystem introduces numerous inefficiencies). Due to minimizing abstractions imposed by the OS, XOmB will be able to provide a software base sufficient to build new interfaces without having to tear down or re-engineer the kernel.

We (myself and James Larkby-Lahet) diverge significantly from prior efforts in our treatment of state with the XOmB exokernel, and in many ways predicted the rise of Xen-like hypervisors. We relegate even more kernel code to userspace libraries, which are untrusted and can be customized (completely modified or replaced) on a per-application basis. We do so by extracting two key components of the exokernel: device drivers and system state. These components are implemented in userspace where they are met with easy debugging and hardware enforced safety.

gutenberg (ruby, javascript/jQuery) - Content Generation

!gutenberg screenshot

I am very intrigued by typesetting and often find myself writing typesetting tools instead of actual writing, which is what I should be doing. More to the point, I am very interested in hypermedia and exploring its use to transform traditional media into something more substantial in this information era. To that end, gutenberg is a project that turns a flavor of markdown into a website that is typeset using javascript code on the client side. The idea is that books can contain links to other books and other external information and to provide, eventually, a seamless experience in reading this information.

The project consists of ruby code that will render the markup into html, css, and images and package them with javascript. It is designed such that without javascript or using a screenreader (typically used by blind individuals), the book is still readable as a basic webpage. The book output can also be easily parsed by html parsers and generates a very minimal markup. The rest of the work to make the book into a dynamic frame with full typesetting is done completely in javascript. Styling can be provided by stylesheets and images provided by the library or easily extended by adding custom css and javascript.

reuleaux-selectors (javascript) - User/Human Interfaces

!gutenberg screenshot

As a queer individual, I'm concerned with forms of available representation and allowances of diversity in the technological space. The role of personal gender identification is a part of human interfaces that has been untouched regardless of the fact that dropdown gender selection of simply male and female is unacceptable. Textfields, while better, allow for so much choice that people may pigeonhole themselves and would be otherwise incomparable.

Along with Lindsey Bieda, we designed and implemented a new form of gender and sexuality selector that we feel is a stage of evolution that provides a familiar selector that is both comparable and highly representative of the queer identity. We see the primary use of such a selector for social networking sites as a means of representing oneself as one pleases, and also for dating services to offer better support for the preferences and identity of queer individuals.

Play around with the selectors here.

apsis (C++, assembly, GLSL) - General-Purpose Game Engine

!apsis screenshot

Going along with my open source game coding competition, I am currently developing a free and open-source (early stages) game engine builder. To jumpstart games and creative expression, I have created a framework that gives you the building blocks for creating game engines.

Here is how it works: Create an Engine. Add a Map to draw tile-based maps. Add an Actor to represent the player. Attach an Up, Down, Left, Right modules to the player actor to give it a set of rules that let it respond to input and move in all four directions. Add a MapCollider rule so that you do not go through walls. You now have a basic top-down 2D scroller much like Zelda games. Remove the Up and Down rules on the player actor, and add Jump and Fall rules, and now you have a 2D side-scroller.

By building games via a set of rules, you can be provided a set of predefined rules to quickly make traditional games, but also allow extensibility by defining new rules. This will be perfect in an educational environment where predefined rules can be used to get things rolling, but programming concepts can be introduced gradually to beginners when they want to do something fancy.

I hope to bind the logic and rule creation to a language that is better suited for beginners such as Lua or Ruby. That way, the game engine itself is written in OpenGL/C++ but the extensible components can be an easy to use scripting language.

Open-Source Contributions

Tags

personal

Comments

If you'd like to comment, just send me an email at wilkie@xomb.org or on either Twitter or via my Mastodon profile. I would love to hear from you! Any opinions, criticism, etc are welcome.

Donations

If you'd like to make a donation, I don't know what is best for that. Let me know.

Copyright

All content off of this domain, unless otherwise noted or linked from a different domain, is licensed as CC0