Skip to Content

Code

Documenting a lifetime of learning
  1. Introducing Kaleidophone

    A relaxing generative audio toy

    Manipulate time to explore ambient soundscapes in this submission to LOWREZJAM, Brackeys Jam, and AGJam. Kaleidophone is an audio toy designed for deep thinking, meditation, and relaxation that’s best experienced with headphones.

    Continue reading Introducing Kaleidophone
  2. Announcing the No Video Jam

    An audio game jam without graphics

    Please join us on Friday, August 14, for the No Video Jam, an audio game jam featuring accessible games without graphics. Participants will create blind-friendly games of any genre using audio and accessible text. Submissions will then be judged by the public based on criteria like accessibility, fun, originality, and sound.

    Since I began making audio games I’ve learned that it’s a niche and neglected market. Gamers who are blind often feel isolated from the mainstream gaming community and have few games made specifically for them. My hope with organizing this jam is to give them visibility by normalizing audio games with sighted developers and gamers. Then when it’s over they’ll have more games in their canon to enjoy and discuss.

    I’m looking forward to hearing what everyone creates!

  3. Introducing Audo

    A high-speed endless audio racing game

    Avoid opponents and collect power-ups as you vie for the top velocity in this submission to GMTK Jam 2020. Audo is an audio game with screen reader support that’s best experienced with headphones.

    Continue reading Introducing Audo
  4. Building Soundsearcher

    Starting with nothing for Ludum Dare 45

    Last month I participated in Ludum Dare 45. Over its 48 arduous hours there were many challenges to overcome and insights to gain as I built a game completely from scratch.

    As an accessibility advocate with a background in digital signal processing, I wanted to explore how the Web Audio API could be leveraged to build spatial audio experiences. The result was Soundsearcher, a minimalist exploration game designed for playing with your eyes closed.

    Continue reading Building Soundsearcher
  5. Introducing Soundsearcher

    A minimalist auditory exploration game

    Explore a procedurally-generated world of synthesized sounds in this submission for Ludum Dare 45. Soundsearcher is designed for playing with your eyes closed. Headphones are strongly recommended.

    Continue reading Introducing Soundsearcher
  6. A Day With Python

    Where have you been all my life?

    Today I installed Python for the first time.

    Whenever I learn something new I like to stay motivated with a small project. A friend and data engineer told me that Python excels at crunching numbers—and lately I’ve been quite a Numberphile—so I built a small library for generating my favorite OEIS integer sequences. When I encounter exciting sequences in the future they’ll surely get added.

    You can explore the result at this GitHub repository.

    Continue reading A Day With Python
  7. Web Performance

    An empathetic pitch

    Unlimited data and processing power is a privilege.

    Ignoring this privilege adversely affects: user experience because true performance is the foundation of perceived performance; accessibility because every requirement for a baseline experience is exclusionary; the economy as long as our users are paying for each web request with their labor; and the environment because every web request has material costs.

    It’s easy to forget that the web is for all people. So it’s a moral imperative to prioritize performance when we develop for the web.

  8. Lazily Lazy Loading

    Crafting a lazy loader for lazy folks

    Lazy loading is one of the best accessibility wins available to front-end developers. By deferring the loading of assets until we need them, we save our users’ data—and consequently their money. For folks who pay disproportionately more for their data, this can be invaluable.

    In this tutorial we will craft a lazy loader that can be deployed with minimal effort on any site. Because we’re lazy folks. So we’ll leverage the MutationObserver and IntersectionObserver interfaces to lazily lazy load lazy-loadable elements whenever they’re added to the DOM.

    Please feel free to skip to the result at this GitHub repository.

    Continue reading Lazily Lazy Loading
  9. Changelog: Links

    Conjuring a Web 1.0 staple

    The thing I miss most about the web before social media was everyone having their own blog or personal site. It was decentralized and punk.

    The URL made it all work. One inbound link and you were in. And every outbound link made it stronger. So we all linked to our friends and favorites to include, inform, and pay respect. We called them blogrolls.

    Let’s unpack some teachable moments that I encountered while implementing my links page.

    Continue reading Changelog: Links