Happy new year! 🎇 I’m happy to announce that my synth punk band Trash Signal’s album is out now on our Bandcamp . We’re super proud of this album. You can listen to the whole thing for free, and if you’d like to support us, you can also pay to download the 8 song album. We worked hard on this, and your support would be very much appreciated! 🙏 Trash Signal by Trash Signal (That’s me on drums!)…
Hello again. Another year gone by, another new feature for Alda ! I just released Alda 2.3.0 yesterday, and it features some improvements to the way that Alda determines which MIDI channel to use for each instrument part, and even for individual notes. This is something that I’d been meaning to do for quite a while, and I’m excited that I finally got around to it. With this new release, it is now…
Hey everyone! It’s been quite a while since I’ve posted an update about Alda . First of all, rest assured that I’m still here, and I’m as interested as ever in taking Alda in fun, new directions. I wanted to share a little update about what I’ve been up to lately with Alda. Moreover, I want to highlight an amazing new feature that has been contributed recently and tell you about why I’m so excited…
This past September, while I was attending Strange Loop in St. Louis, I had the pleasure of being interviewed by Jordan Miller (who has a podcast called Lost in Lambduhhs ) for a podcast series by JUXT and Vouch where they interviewed Strange Loop attendees to “learn about their interests, ongoing projects, and innovative ideas.” It was a lovely 15-minute chat. We talked about Alda and the…
I’ve started a new band called Trash Signal , and I’m excited to announce that our first single, “The Palms”, is available now on all of the major streaming services (Spotify, iTunes, YouTube, etc.). Look for it wherever you listen to music! You can also listen to it right here: The Palms by Trash Signal If you like it, please consider supporting us by downloading the song on Bandcamp! This band…
An community member in the Alda Slack group recommended that I register Alda as an open source project for Hacktoberfest participants to contribute pull requests to, so after giving it some thought, I did! The idea behind Hacktoberfest is that the organizers will reward anyone who makes 4 contributions that are accepted to participating code repositories during the month of October. The first…
Last week, I had the pleasure of speaking at Functional Conf , a functional programming conference that usually takes place in India, but was all virtual this year due to the pandemic. I had a great time! Here is the video of my talk, which was about how we can better understand the functions in the Clojure standard library by “visualizing” them with music (naturally, using Alda and its Clojure…
I have a love/hate relationship with Bash. It’s a quirky little language with many subtleties that make it all too easy to make mistakes. It’s not uncommon for programmers writing Bash scripts to discover bugs in their scripts related to a variety of things, including getting some obscure syntax wrong, using quotes incorrectly, platform or shell compatibility issues, and mishandling errors. On the…
I’m excited to announce the release of Alda 2.0.0! This new version of Alda is a from-the-ground-up rewrite that I’ve been working on since late 2018, and I couldn’t be happier to finally share it with the world. Despite the shiny new version number, at a language level, Alda 2 is almost exactly the same as the Alda that you’re used to. I have sampled scores from the wild and taken great care to…
Over the last 2 years or so, I’ve been working on a ground-up rewrite of Alda , the music composition programming language that has been my passion project since 2012. Now that I’m finally almost done(!) with the rewrite and just about ready to release Alda 2 to the world, I figured I should explain why I made the somewhat surprising decision to rewrite it in Go and Kotlin, given that Alda 1 is…
Just for fun, here is a quick run-down of how I deploy my personal projects. If you’re reading this and you have projects of your own that you might like to deploy, then hopefully some part of this will be helpful to you. Domains and DNS Whenever I register a domain, I use Namecheap , not necessarily because it’s the best option, but just because I’ve always found Namecheap to be easy and…
5 years ago, I was doing some reminiscing about what my life had been like 5 years prior to that (in 2010), and I had a lot of fun sharing those memories . It’s been a long time since I posted those memories from 2010, but I’ve been thinking about it recently and now I’d like to continue the timeline by sharing some memories from 2011. I hope you enjoy them! January 2011: Antibubbles had the…
As you may have heard, I have been busy, working on Alda 2, a ground-up rewrite of Alda using Go and Kotlin. As part of this project, I have re-thought the Alda REPL experience to make it closer in spirit to the nREPL experience that I’ve been enjoying as a Clojure programmer. The big idea about nREPL is that it is a REPL that operates over a network connection. After starting an nREPL server ,…
Up until recently, the official Alda website looked like this: I cobbled together that logo and color scheme sometime in 2017, and I was never particularly excited about it. I kept telling myself that I would come back someday and give the logo and the website a good redesign. Among the things I didn’t like about it: The dull blue and gray color palette is rather depressing, like a rainy day. The…
Clojure tooling for Vim has been getting more and more interesting over the last several years. When I first came to Clojure, Fireplace was the standard Vim plugin for Clojure development, providing Clojure developers with a great in-editor REPL experience. I think it’s still the case that the majority of Clojurian Vimmers use Fireplace, but in recent years, a number of viable alternatives have…
Write, compile, run, observe When you’re writing a program in a compiled language, you might find yourself repeating this cycle: Write code Compile executable Run executable Observe results (Lather, rinse, repeat.) I don’t know about you, but when I’m repeating this cycle over and over again, I don’t want to have to worry about whether or not the build that I’m running was compiled from the same…
An important design goal of Alda is that the language should not be a Turing-complete programming environment. This keeps Alda simple and focused on doing what it does best: being an easy-to-learn, markup-like text language for music composition. At the same time, I really enjoy being able to compose algorithmic music by writing programs that generate Alda scores. This was what led me to make the…
The premise Let’s say you need to write some tests about the behavior of something asynchronous. Imagine that you have a worker process that consumes messages from a queue and uses them to update some state, and you want to test that when you put a message on the queue, the worker ends up receiving the message and doing what it’s supposed to do. Let’s make this a little more concrete with an…
I’m very proud to be married to the amazing modern dance choreographer and educator Renay Aumiller . From time to time, Renay and I collaborate to produce works of modern dance that are accompanied by original music. Our most recent piece, By Chance , involves feeding suggestions from the audience into a web application that I wrote, which randomly generates a series of short dance vignettes. This…
My band, Exit Mice , released our second EP this past month. It’s called Eggshells and we’re very excited about it! You can listen to it on all the major streaming services (Spotify, iTunes, YouTube, etc.), or right here: Eggshells by Exit Mice (If you like it, please consider supporting us by buying the digital album for $4 on Bandcamp!) Just like with our first EP , we recorded the raw tracks in…
When I first started using Vim, I used “the ultimate vimrc” as the foundation of my Vim config. I had no idea where to start configuring Vim, and this looked like a good starting point for a nice, batteries-included Vim setup. It comes with a bunch of useful plugins installed and configured out of the box, a variety of sensible default settings, and some useful mappings. There are a bunch of…
A coworker of mine introduced us to PlantUML a year or two ago and we used it to create an architecture diagram of our distributed systems. I revisited that old architecture diagram recently and I ended up making a bunch of tweaks and updates just for fun. The PlantUML language is very intuitive, and it’s nice to be able to throw together a quick diagram just by editing text. As an example, here’s…
If you’ve seen my talk at Strange Loop this year , you may have noticed, during the part where I talked about the future direction of Alda , that we’ll be using OSC to communicate between the client and the player processes. I’ve been spending a lot of my time lately implementing this, and it’s coming along nicely. An interesting development from the last couple weeks is that I ended up deciding…
UPDATE: In May 2020, a ground-up rewrite of Conjure was released . It works a little differently than the older version of Conjure that I was talking about when I wrote this blog post. The big change is that Conjure now uses nREPL instead of prepl. nREPL is a well-established protocol that offers a ton of useful features out of the box, and as a result, Conjure is now able to do a lot more with a…
This is the third installment in a series where I guide you through learning how to write music using Alda . So far, we’ve covered: #1: Setup and first notes #2: Rhythm and meter White keys and black keys So far in this series, we’ve been working with 7 notes: C D E F G A B C On a piano keyboard, these are the white keys . You may have noticed that there are also black keys : These black keys are…
This is the second installment in a series where I guide you through learning how to write music using Alda . So far, we’ve covered: #1: Setup and first notes Note lengths Now that we know how to make different notes, we can start to play around with making the notes longer or shorter. Listen to this example, where we’re playing the note C a bunch of times, with descending note lengths tacked on…
Every now and then, somebody tells me that they just installed Alda and they’re enjoying it, but that they aren’t quite sure where to start when it comes to writing a piece of music. The trouble is that Alda is significantly more useful to those of us who already have some knowledge of songwriting or music theory. If you don’t have that kind of background, you might feel like you could use some…
Strange Loop I attended Strange Loop for the third time last weekend, and the experience was as awesome as ever. This year, I had the honor of giving a talk, and I think it went over well! I talked about the history of the architectural design of Alda , and how the relationship between Alda and Clojure has changed over the years as the architecture has evolved. I concluded the talk with a live…
Polishing my Strange Loop talk With Strange Loop drawing closer, I’ve been spending most of my free time tweaking and practicing my talk about the dynamic relationship between Alda and Clojure. As I tend to do, I planned way too much material and so I ending up having to trim down the sections of my talk in order to keep it under time. Some things I had to cut include: An extended demo at the…
alda-clj lightning demo As I mentioned in my last blog post , I had the pleasure of attending the Heart of Clojure conference in Belgium this month. Somebody suggested that I give a 5-minute lightning talk about Alda , so I signed up at the last minute and (after some hasty preparation) gave a quick demo of alda-clj . Because it was a Clojure conference, I decided to skim through the basics and…
Here’s some stuff I’ve been spending time on lately: Crux tutorial The UK-based Clojure consulting company JUXT recently released Crux , an open source, bitemporal, document-oriented database. I thought it was interesting when I heard about it, but I haven’t had a good opportunity to try it out yet. Now they have an entertaining tutorial that guides you through the concepts at a gradual pace,…
I’ve been meaning to update this blog more often for a long time now. The problem I have is that I have a lot of interesting things that I could write about, but I feel like it would take so much effort to produce a blog post worth reading, I just never have the time to do it. As a result, I’ve been setting aside time only about once every 2 to 6 months to write a long blog post about a particular…
In January 2019, I collaborated with the choreographer Renay Aumiller to create a modern dance piece called Out of the Blue . I wrote a program that prompted the audience to contribute a list of body parts and dance qualities, and then fed that creative input into an algorithm to randomly generate a series of short dance vignettes. Each vignette featured a body part and a movement idea contributed…
A couple months ago, I was fortunate enough to be invited to speak about Alda at the Compose::Melbourne conference in Australia! Compose is a conference all about functional programming as it pertains to professionals, academics and hobbyists alike. The conference was great and I had a fantastic time in Melbourne; I would go back in a heartbeat! In my talk, I gave a lightning-fast introduction to…
Hello, I started a new band called Exit Mice ! It’s always exciting to start a new musical project, and this one is no exception. We just released our debut EP (which you can listen to below) and we’ll be playing our first show this Thursday, July 5, at The Pour House in Raleigh. If you’re in the Raleigh area and you’re not doing anything, come see our live debut! Here’s our first EP. You can…
I’ve been thinking a lot about task management lately. I’ve actually been thinking about it for years. I’ve always been searching for the optimal way to sort through the bajillion things I have to do and remain productive. This all started when, as a programmer, I realized that I had the power to automate the tasks that I found repetitive in my digital life. I would write scripts, for example, to…
In my last blog post , I talked about an important evolution in the implementation of alda.lisp , a sort of DSL or “mini-language” that represents a musical score and compiles down to data that can be interpreted and performed by Alda’s sound engine. In this post, I’ll discuss another way in which Alda has evolved over the past couple years. On the way there, I will tell you the tale of how I’ve…
NOTE: Alda 2.0.0 was released in Spring 2021. It was a total rewrite from the ground up in Go and Kotlin . As a consequence, a lot of the information below about the Clojure internals of Alda (v1) is no longer relevant! In 2018, Dave released the alda-clj library, which is the new recommended way to write/generate Alda scores in Clojure. A more FP-friendly Alda Just recently, I rewrote a big chunk…
I gave this talk about Alda a few months ago as part of Clojure Remote , the world’s first remote-only Clojure conference. This talk serves as a quick introduction to music programming languages and the philosophy that led me to create Alda. I talk a little bit about what Alda is and a few of the things you can do with it, but a large part of my talk focuses on why Clojure proved to be the perfect…
I tried this once before and it was pretty fun. I continue to find and use awesome things (the internet has many of them), so here are a few more things I’ve been enjoying lately. Vimwiki I think keeping a personal wiki is a great way to organize your life. It’s like the digital equivalent of a handy scratchpad that you can use to jot down notes about anything that comes to your mind. (I use mine…
I haven’t been diligent about posting stuff about No Love , the band I play drums in. So here’s a handful of videos I found on YouTube – enjoy! 6/20/15: Rock 'n Roll Party Fest I 9/2015: Hopscotch 2015 4/1/16: Full set at a house in Raleigh For those of you in the Triangle area, we have a handful of shows coming up at the end of the month. Follow us on facebook for updates on those and other…
Three months ago, I wrote a blog post introducing the music programming language Alda and walking through the basics of using it to write a musical score. To my amazement and delight, my blog post went mildly viral on Reddit and Hacker News, bringing about a spike in activity on GitHub. I’m thankful for this not only because it brought a handful of new contributors to the project, but also because…
NOTE: Adzerk is now called Kevel . We rebranded in 2020. Today marks my one-year anniversary of working at Adzerk , which also means I have now been working professionally as a software developer for one year. I could not be happier to be programming for a living, and I’m still not really over the fact that it was as easy as it was for me to break into a career that I had no prior work experience…
Quite often, I think about what I was doing exactly 5 or 10 years ago. I think about what bands I was playing in, where I was living, what my interests were then, how I felt, which people I spent the most time with. As individuals, we are constantly re-inventing ourselves, transitioning in and out of different phases of our lives. I think it’s good to reflect, every now and then, on these…
What is Alda? Alda’s ambition is to be a powerful and flexible music programming language that can be used to create music in a variety of genres by typing some code into a text editor and running a program that compiles the code and turns it into sound. I’ve put a lot of thought into making the syntax as intuitive and beginner-friendly as possible. In fact, one of the goals of Alda is to be…
I wrote a couple months ago about MIDI and the JVM . I explained that Gervill has been the JVM’s built-in soft synth since Java 7, and I mentioned that there are two ways that Gervill allows you to load SoundFont files, changing the way the General MIDI instruments sound on your computer. You can replace your default (“emergency”) soundfont by replacing ~/.gervill/soundbank-emg.ef2 (so that, when…
I’ve been exploring all sorts of awesome things lately. I feel compelled to share the magic™ of these things with you, but to be fair, there are already a ton of great blog posts and tutorials out there about each of these things, and I’m not sure there’s much more that I could say that hasn’t already been said. So, this idea occurred to me of doing one blog post divided into several vignettes ,…
You might be surprised to learn that your Java Virtual Machine is a capable musician. A MIDI soft synthesizer has actually been built into the JVM for years and years, and starting with Java 7, it’s gotten a whole lot more awesome. MIDI: A Primer Quoth Wikipedia : MIDI (/ˈmɪdi/; short for Musical Instrument Digital Interface ) is a technical standard that describes a protocol, digital interface…
It’s been a while since I’ve posted anything, so here’s another laptop recording from the vault. It’s a cover of one of the best Weezer B-sides, “Susanne.” I recorded it in my dorm room during my last semester of college, Spring 2008. I was on a major Weezer binge at the time, although to be fair, I guess I never really stopped being on a major Weezer binge. Recording the backup vocals on this was…
I just rediscovered Rubeque , a set of short problems/koans to solve using Ruby, ranging in difficulty from “What does true equal?” to writing simple AIs and solving logic puzzles . The web UI provides an interactive code editor that you can use to write your solution in Ruby and see if the tests pass. I found this problem particularly interesting. The task is to write an S-expression evaluator in…