RSSAmplifier

Blog

dave yarwood

blog.djy.ioRSS feed ↗71 posts

Latest posts

Trash Signal's album is out now on Bandcamp!

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!)…

Using lots of instruments in an Alda score

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…

MusicXML import and other new Alda features

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…

JUXT Cast interview at Strange Loop 2022

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…

Trash Signal - "The Palms"

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…

Alda welcomes your Hacktoberfest contributions!

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…

Clojure through the lens of music

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…

10 Bash quirks and how to live with them

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…

Announcing Alda 2

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…

Why I'm rewriting Alda in Go and Kotlin

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…

How I deploy my personal projects

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…

Something cool that happened every month of my life: 2011

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…

Alda and the nREPL protocol

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 ,…

Alda has a new logo and website

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…

Conjuring Clojure in Vim: 2020 Edition

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…

Using git write-tree to cache builds

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…

How to implement an Alda library for your favorite language

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…

Fixing timing issues in tests

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…

The FIFO-controlled, text-to-speech narrator

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…

Exit Mice: Eggshells

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…

Reorganizing my vimrc

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…

PlantUML turns text into diagrams

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…

Working with OSC: UDP vs. TCP

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…

Conjuring Clojure in Vim

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…

Writing music with Alda #3: flats, sharps, and key signatures

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…

Writing music with Alda #2: rhythm and meter

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…

Writing music with Alda #1: your first notes

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…

Minutiae #5: Strange Loop, Mantra & Chronoid

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…

Minutiae #4: Strange Loop talk, git submodules

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…

Minutiae #3: alda-clj lightning demo, weather data, Seven Languages in Seven Weeks

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…

Minutiae #2: Crux, slideshow tools, Asciidoc, Heart of Clojure

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,…

Minutiae #1: Alda stuff, Clojure tooling for Vim

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…

Out of the Blue

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 Music Composition Language With a Functional Backbone

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…

Exit Mice and an ode to grunge pop

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…

Taskwarrior, where have you been all my life?

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…

A History of the Architecture of Alda

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…

Alda for Clojurists

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…

Alda: A Music Programming Language Built With Clojure

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…

Vignettes: Vimwiki, HTTPie, jq

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…

moar no love videos!!!

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…

Alda Has a Bunch of New Features

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…

Getting Your First Programming Job: Not as Hard as You Think

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…

Something cool that happened every month of my life: 2010

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…

Alda: A Manifesto and Gentle Introduction

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…

Making MIDI Sound Awesome in a Clojure Program

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…

Vignettes: Vim, Fish Shell, Amethyst

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 ,…

Making MIDI Sound Awesome in Your JVM

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…

Susanne

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 put some S-expressions in your Ruby

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…