words:

how to commute by bike in a toronto winter

Bike

While I don’t mind the TTC, I have always preferred my bike, maybe most in the winter. Bundled in a parka on a packed, stuffy streetcar is no fun and on stormy days delays can make my commute almost 90 minutes. By bike it’s about 30 minutes all year round.

But without the proper equipment it can be miserable. I’ve tried a lot of different bikes, clothing and accessories over the years for usually what amounts to ~10 months of riding a year. This year I’ve refined it to a setup that works for me 365 days a year.

the bike

First, the bike. There are two things that make a huge difference: tire diameter and disc brakes. After hardheadedly riding road bikes and fixed gears in the fall and giving in when the snow starts to fall, I decided I should treat myself to some real traction.

Tires
The Schwalbe Winter K-Guards are studded for confidence on icy patches.

Skinny tires are fine eight months of the year in the city but the minute there is snow on the ground it’s time to look at tires 30c and larger with tread designed for those conditions. You may even want to consider studs, as the City of Toronto’s intepretation of snow removal isn’t so much a “removal” as a “push to the gutter where the cyclists are and hope for the best” I like the Schwalbe Winter K-Guards.

Disc brakes are worth it in the snow, as the temperature in Toronto usually means “slush” which can build up between your fork and seat-stays, bogging down rim brakes.

Beyond these two things the bike doesn’t really matter. Gravel bike, mountain bike, whatever. My approach was to buy a used [Norco Indie 3][indie] from Kijiji and switch it to drop bars for an imitation gravel bike.

full coverage fenders

I don’t have specific product recommendations here because the best fender seems to vary a lot from bike-to-bike but fenders that reach over the rear wheel closer to the ground are essential. Snow sticks to your tires more easily than rain and can spray your back if your fenders aren’t long enough.

bar mitts

These things are the most effective way to keep your hands warm. I’ve tried many types of gloves, but once the temperature drops below about -10°C they all stop keeping my hands warm. Bar mitts give you a wind break that creates a pocket of warm air in front of your hands. Pair them with a thinner inner glove and you also have the benefit of better articulation for braking and shifing compared to big lobster gloves or mittens.

boots

Boots
The Fizik X5 Artica boots are mostly one piece of fabric, which helps a lot with water resistance.

I’ve worn regular non-cycling boots with flat pedals and straps or cages (I like my feet connected to the pedals) but I’ve found this combo can effect the circulation in my feet and make my toes cold quicker. These Fizik X5 SPD-compatible boots are the best option I’ve seen in terms of waterproof performance.

pants

Pants
Endura Gridlock pants are the perfect fit for wearing over jeans without feeling too much like wearing a parachute.

On days where good fenders don’t protect you (like it’s actively snowing or raining) you need pants. I’ve bought every rain pant at MEC and they are all terrible, with nonsensical fit and excessive material in the wrong places. These Endura pants are bulky enough to wear over street clothes but not too bulky that they get caught in your drivetrain. They also have pockets and ventilation, which are not always a given with cycling pants.

lighting

With shortened days, good lighting is a requirement. The Cygolite Metro headlight strikes the right balance between price and brightness. It’s lowest setting is enough to ensure you’re seen in clear conditions and it’s bright settings are plenty for flooding an unlit bike path.

layering

Above the waist the best approach is to have options. I ride at a pace that a good rain jacket over a t-shirt keeps me warm down to near freezing as long as my extremities are protected. Below that I will add fleece and thermal base layers as necessary. Uniqlo Heattech is great and cheap.

words:

headlights reflected on american water

A cricket in the McDonald’s parking lot told me to listen to American Water for the rest of the drive. I’ve been listening to it almost weekly this year for some reason.

My parents live in the country and there’s an impossibly long, straight and featureless road on the route where time stretches out and becomes liquid. It’s as long or as short as your wits, forcing you through the same motions every time. “Are we there yet?” With a conversation it speeds by, but in the dark, with Jen and the dog asleep, it was just me and DB.

Last night it was as long as American Water. A half moon to the south the colour of yogurt darts behind clouds pushed jarringly fast by what’s left of the days August winds. Reflectors on the taillights of sleeping pickup trucks whip by, the outline of a barn, a fluorescent chicken farm during the last feed of the day.

Malkmus doesn’t get enough credit as a guitar player. He dove into a trove of unseen pickin’ licks, contorted by his years of scrawny, velcro playing in Pavement. Sometimes its a staccato yellow center line, sometimes it’s a smooth white, keeping you from the gravel shoulder and the ditch beyond.

In the night you can’t trust your vision on this road. Your brights seem to make it worse. You just grip and stay between the guitar lines.

DB combined a set of tools like nobody else: he was a keen observer and empath, maybe better than anyone. Even when sneering—attacking the mundane evil of America—he was never smug. He never wrote a “Southern Man”. He always seemed to have lived it, or at very least absorbed his observations enough so he could project them through a lens of empathy.

Headlights from miles behind you still shine into the rear view. Sometimes they seem closer, tailgating you in the mist, bouncing around the road. And then they recede to a single point but never turn or fade.

Water is the one I know the best. It was the first one I heard and I’ve listened to it more times than all the others combined. That’s okay, because there’s a lifetime of lessons in its songs. It’s the funniest and most fun, a document of some levity that obviously left his life.

Eventually you cross a county line, the speed limit becomes 90 clicks and you can open it up.

words:

batch generating jpgs from fuji raw files

The best Google service is Google Photos. Despite one’s usage probably providing material to train Google’s machine learning corpus that will eventually enslave us all, having a canny search function for your unorganized archive of digital photos is worth it. Type in “dog” and you get all the photos of your dog.

My problem is it doesn’t support raw files from Fuji cameras, of which I have a few. In the future I can solve this problem by shooting in RAW+JPEG, which stores a .jpg file processed with the camera’s colour profiles that the Google sync app can pick up and put on Google Photos.

But what do I do with my years-long archive? I tried a few different batch image converters but none of them retained the Fuji film simulations, or adjustments I had done in Lightroom. I also couldn’t find a way to filter my photos in Lightroom for the images that lacked a corresponding .jpg file and convert them that way.

Enter raw2jpg, a script (Mac only) I wrote for bulk converting raw files that is RAW+JPEG aware and applies adjustments made to the image in Lightroom or Photoshop. To use it, install Homebrew and run:

brew cask install adobe-dng-converter
brew install exiftool
curl -Lk https://raw.githubusercontent.com/tylerball/raw2jpg/master/raw2jpg > /usr/local/bin/raw2jpg

Then you can run it on a directory of RAW files.

raw2jpg ~/Photos/Fuji

words:

building a better sonos with free software and cheap hardware

When I first heard about Sonos I was impressed. Completely synchronized music playing in every room is something I’ve always wanted, but the price seemed ridiculous, especially if you like the speakers you already own. Most of their products have a speaker integrated into them, forcing you to ditch any Hi-Fi equipment you might already own. Also I like keeping my own library of digital music and Sonos steers users towards using streaming services.1

For a while I was convinced there wasn’t a good open-source solution that could rival Sonos, but then I started playing with forked-daapd. It’s like iTunes but better. It scans your music library and allows you to stream it to Airplay receivers around the house. It also accepts audio via pipe so you can hook it up to receive audio from other sources and send it to your speakers.

For receivers, Volumio is a great OS that you can install on a Raspberry Pi. It has Airplay reception built in, with plugins for Spotify and other services. This combined with hardware from HiFiBerry gets you a high-quality output in the format of your choice for under $100.

For example I bought some cheap but awesome Edifier speakers for our home office and these are connected via an optical cable to a HiFiBerry Digi+ on a Raspberry Pi 3.

In the living room I have an older Onkyo TR-NX414 receiver that receives audio from via the optical out on a Behringer UCA202 connected to an Intel NUC. Eventually I’ll upgrade the receiver to something that has Airplay built in, but the point is that with DIY-ing this yourself you have the flexibility to use whatever hardware you have. My dad’s old beat-up but otherwise great-sounding Bose 301s still find use in the garage with this system.

intalling forked-daapd

My server is an old PC running Ubuntu which runs everything to do with home automation and home audio with Docker. My full config for this machine is kept here. The relevant piece is the daapd directory:

daapd
├── Dockerfile
├── forked-daapd.conf
└── start.sh

I couldn’t find a good pre-built Docker image for forked-daapd but writing my own was pretty simple. To set this up copy the daapd directory and add a docker-compose.yml with the following:

docker-compose.yml#L97-L109 ↗︎
  daapd:
    container_name: daapd
    build: daapd
    network_mode: host
    volumes:
      - /mnt/pool/tunes:/mnt/pool/tunes:ro
      - ./daapd/forked-daapd.conf:/etc/forked-daapd.conf
    environment:
      - MEDIA_SERVER_NAME=Home
      - PUID=1000
    env_file:
      - ./daapd.env
    restart: always

Be sure to adjust the /mnt/pool/tunes volume to where your music is stored. You can reference the forked-daapd.conf in the project repo for its available options and their defaults.

streaming spotify around the house

Despite what I think about streaming music sometimes you just want to throw Spotify on and have it play through the whole house during a party or when you can’t be bothered to queue up a bunch of music manually. Thankfully there’s the librespot2 open source client which you can pipe right into forked-daapd. One thing that isn’t built in is metadata, which is just a nice thing to have instead of blank album art and empty current track info. A PR was opened but wasn’t accepted for some reason, so I keep a fork of librespot with this feature added.

Like forked-daapd, copy the contents of the librespot folder and add the following to your docker-compose.yml:

docker-compose.yml#L71-L81 ↗︎
  spotify:
    container_name: spotify
    restart: always
    build: librespot
    depends_on:
      - daapd
    volumes:
      - /mnt/pool/tunes/spotify:/data
    env_file:
      - ./librespot.env
    restart: always

Again, update /mnt/pool/tunes to point to your music. You will also need to create a librespot.env file with your Spotify username, password and a name for the streaming destination.

SPOTIFY_NAME=Home
SPOTIFY_USER=myusername
SPOTIFY_PASSWORD=mypassword
'Home' as a destination in the Spotify app

streaming other audio from macs and phones

Sometimes you need audio from places that aren’t your library or Spotify, like playing from the Bandcamp app, website or from YouTube. Luckily there’s also an open-source Airplay receiver called shairport-sync3 we can pipe into forked-daapd.

The setup for shairport-sync is a lot simpler, just add the following to your docker-compose.yml:

docker-compose.yml#L83-L95 ↗︎
  shairport:
    container_name: shairport
    image: kevineye/shairport-sync
    network_mode: host
    depends_on:
      - daapd
    volumes:
      - /mnt/pool/tunes/airplay:/output
      - /mnt/pool/tunes/airplay.metadata:/tmp/shairport-sync-metadata
    environment:
      - AIRPLAY_NAME=Home
    command: --metadata-pipename=/tmp/shairport-sync-metadata -o pipe -- /output
    restart: always
'Home' as an Airplay Output Device on Mac OS

running it

Start Docker with sudo docker-compose up -d and enjoy your more-capable, cheap, whole-home audio system.

I learned alot about running all this stuff from Benoit Beauchamp’s excellent post about setting up his own whole-home music setup, which differs a bit with the use of mopidy as a music manager, but everything else is the same. This video by James Petersen gave me some cool ideas about how to control the system from Home Assistant.


  1. You can add local music via an app running on a computer, but it’s limited to 65,000 tracks. Amateur hour. 

  2. This is also the software the Volumio devices use for Spotify streaming under the hood 

  3. This is also the software the Volumio devices use for Airplay reception under the hood. Everything works together. 

words:

music i thought about in 2018

Here’s my futile act of resistance against posting screenshots of algorithmically generated “Your Top Songs 2018” playlists.

eli keszler - stadium

This album broke my brain during a late night subway ride. It sounds like the city more than any: the predictable randomness of machinery; the steel scrapes of the train bouncing through the tunnel; the steady, ethereal drone of electricity; a beeping that you can’t place. Two men board a nearly empty subway car, sit on opposite sides and start chirping each other like only old friends can.

Those two friends are Eli Keszler’s hands and what he does to the drums creates this soundscape. It wasn’t until after I heard it that I read the album is performed live with a drum kit and percussion, with sounds from a laptop triggered by his playing. There are other drummers exploring this technique but none with as much delicacy and intention as Keszler. He layers melodies and rhythms effortlessly and his virtuosity allows him to improvise within them. The result is an ever-changing document of our environment.

playboi carti - shoota (ft lil uzi vert)

My favourite rap subgenre is widescreen euphoria raps, for lack of a better term. Music for staring out into the great beyond, driving fast down an elevated highway through the city on a summer night in a vehicle with no top. Leave it to Playboi Carti, a rapper with a taste for the surreal and blissful to release the years best1 example of the genre.

“Shoota” is a pile of questionable arrangement choices that came out so well; the drums come in whenever but they lock everything into place. It continues to pile on sound and new frequencies throughout, continually raising the compositional stakes before letting Lil Uzi Vert jump in to bring the song to its ecstatic climax. Two guys rapping about how good it is.

m geddes gengras - hawaiki tapes

As an unrepentant gear nerd I can’t help but be humbled by this LP made almost entirely on a Korg Volca FM and some effects pedals. The prolific M. Geddes Gengras made it while on vacation in Hawaii and its sound reflects the sun and waves in that place.

When I visited Maui with my family a few years ago I couldn’t seperate its idyllic location from how American it is. There’s a Wal-Mart there. I picture Gengras retreating from happy hours and luaus to make this record. It’s a demonstration of how restraint can help create something larger than its parts.

earl sweatshirt - some rap songs

My memory of early Odd Future is clouded by a lot of critical hand-wringing over their lyrical content and attitude. Not that many years later Tyler the Creator is making songs for the Grinch movie and has branched out across the pop spectrum. Earl Sweatshirt is making the most honest and introspective music I’ve heard. This might be surprising to those critics, but it shouldn’t be.

Some Rap Songs is like leafing through tabs of youtube videos in Earl’s web browser, bouncing from influence to influence, rooted in the sounds of what he’s found. It’s freeflowing and unconcerned with polish and perfectionism; the samples and production service the idea rather than the final mix, sounding like you’re right inside of his head.

And that head is reconciling a lot of things: the death of his father, expectations of his musicianship and celebrity, his relationship to his mother. The songs exude it. I can’t overstate how personal and emotional it is, moreso than any other music I heard this year. It makes everything else sound vapid and meaningless.

gang gang dance - kazuashita

I joke that all my favourite music came out in 2008, when I think I started to finally understand it and develop some taste. Gang Gang Dance was a staple. They showed that being in a band didn’t have to mean staying inert in sound or attitude. Their Saint Dymphna is exemplary of this approach has been on repeat for me since. I still find new perspectives and ideas in their music years later.

Kazuashita reflects living in a frustrating, seemingly futile political atmosphere, but it remains rooted in optimism and joy. At the end of the album’s opener, audio from this video of the Dakota Access Pipeline protests enters. A protestor elequently describing the unfathomable philosophical gulf between the oppressed and the oppressor that plays out in media daily, before being interrupted by a heard of buffalo in the distance. I cry every time I hear it.

honorable mention

Laurel Halo’s ambient journey Raw Silk Uncut Wood, Burna Boy’s summer dancehall perfection Outside, Duppy Gun Production’s dancehall acid trip Miro Tape, Swae Lee’s synthwave rap excursion Swaecation and finally seeing Radiohead play live.


  1. Sorry, nothing will ever top “Citgo”

older stuff

words:

how to commute by bike in a toronto winter

Bike

While I don’t mind the TTC, I have always preferred my bike, maybe most in the winter. Bundled in a parka on a packed, stuffy streetcar is no fun and on stormy days delays can make my commute almost 90 minutes. By bike it’s about 30 minutes all year round.

But without the proper equipment it can be miserable. I’ve tried a lot of different bikes, clothing and accessories over the years for usually what amounts to ~10 months of riding a year. This year I’ve refined it to a setup that works for me 365 days a year.

the bike

First, the bike. There are two things that make a huge difference: tire diameter and disc brakes. After hardheadedly riding road bikes and fixed gears in the fall and giving in when the snow starts to fall, I decided I should treat myself to some real traction.

Tires
The Schwalbe Winter K-Guards are studded for confidence on icy patches.

Skinny tires are fine eight months of the year in the city but the minute there is snow on the ground it’s time to look at tires 30c and larger with tread designed for those conditions. You may even want to consider studs, as the City of Toronto’s intepretation of snow removal isn’t so much a “removal” as a “push to the gutter where the cyclists are and hope for the best” I like the Schwalbe Winter K-Guards.

Disc brakes are worth it in the snow, as the temperature in Toronto usually means “slush” which can build up between your fork and seat-stays, bogging down rim brakes.

Beyond these two things the bike doesn’t really matter. Gravel bike, mountain bike, whatever. My approach was to buy a used [Norco Indie 3][indie] from Kijiji and switch it to drop bars for an imitation gravel bike.

full coverage fenders

I don’t have specific product recommendations here because the best fender seems to vary a lot from bike-to-bike but fenders that reach over the rear wheel closer to the ground are essential. Snow sticks to your tires more easily than rain and can spray your back if your fenders aren’t long enough.

bar mitts

These things are the most effective way to keep your hands warm. I’ve tried many types of gloves, but once the temperature drops below about -10°C they all stop keeping my hands warm. Bar mitts give you a wind break that creates a pocket of warm air in front of your hands. Pair them with a thinner inner glove and you also have the benefit of better articulation for braking and shifing compared to big lobster gloves or mittens.

boots

Boots
The Fizik X5 Artica boots are mostly one piece of fabric, which helps a lot with water resistance.

I’ve worn regular non-cycling boots with flat pedals and straps or cages (I like my feet connected to the pedals) but I’ve found this combo can effect the circulation in my feet and make my toes cold quicker. These Fizik X5 SPD-compatible boots are the best option I’ve seen in terms of waterproof performance.

pants

Pants
Endura Gridlock pants are the perfect fit for wearing over jeans without feeling too much like wearing a parachute.

On days where good fenders don’t protect you (like it’s actively snowing or raining) you need pants. I’ve bought every rain pant at MEC and they are all terrible, with nonsensical fit and excessive material in the wrong places. These Endura pants are bulky enough to wear over street clothes but not too bulky that they get caught in your drivetrain. They also have pockets and ventilation, which are not always a given with cycling pants.

lighting

With shortened days, good lighting is a requirement. The Cygolite Metro headlight strikes the right balance between price and brightness. It’s lowest setting is enough to ensure you’re seen in clear conditions and it’s bright settings are plenty for flooding an unlit bike path.

layering

Above the waist the best approach is to have options. I ride at a pace that a good rain jacket over a t-shirt keeps me warm down to near freezing as long as my extremities are protected. Below that I will add fleece and thermal base layers as necessary. Uniqlo Heattech is great and cheap.

words:

headlights reflected on american water

A cricket in the McDonald’s parking lot told me to listen to American Water for the rest of the drive. I’ve been listening to it almost weekly this year for some reason.

My parents live in the country and there’s an impossibly long, straight and featureless road on the route where time stretches out and becomes liquid. It’s as long or as short as your wits, forcing you through the same motions every time. “Are we there yet?” With a conversation it speeds by, but in the dark, with Jen and the dog asleep, it was just me and DB.

Last night it was as long as American Water. A half moon to the south the colour of yogurt darts behind clouds pushed jarringly fast by what’s left of the days August winds. Reflectors on the taillights of sleeping pickup trucks whip by, the outline of a barn, a fluorescent chicken farm during the last feed of the day.

Malkmus doesn’t get enough credit as a guitar player. He dove into a trove of unseen pickin’ licks, contorted by his years of scrawny, velcro playing in Pavement. Sometimes its a staccato yellow center line, sometimes it’s a smooth white, keeping you from the gravel shoulder and the ditch beyond.

In the night you can’t trust your vision on this road. Your brights seem to make it worse. You just grip and stay between the guitar lines.

DB combined a set of tools like nobody else: he was a keen observer and empath, maybe better than anyone. Even when sneering—attacking the mundane evil of America—he was never smug. He never wrote a “Southern Man”. He always seemed to have lived it, or at very least absorbed his observations enough so he could project them through a lens of empathy.

Headlights from miles behind you still shine into the rear view. Sometimes they seem closer, tailgating you in the mist, bouncing around the road. And then they recede to a single point but never turn or fade.

Water is the one I know the best. It was the first one I heard and I’ve listened to it more times than all the others combined. That’s okay, because there’s a lifetime of lessons in its songs. It’s the funniest and most fun, a document of some levity that obviously left his life.

Eventually you cross a county line, the speed limit becomes 90 clicks and you can open it up.

words:

batch generating jpgs from fuji raw files

The best Google service is Google Photos. Despite one’s usage probably providing material to train Google’s machine learning corpus that will eventually enslave us all, having a canny search function for your unorganized archive of digital photos is worth it. Type in “dog” and you get all the photos of your dog.

My problem is it doesn’t support raw files from Fuji cameras, of which I have a few. In the future I can solve this problem by shooting in RAW+JPEG, which stores a .jpg file processed with the camera’s colour profiles that the Google sync app can pick up and put on Google Photos.

But what do I do with my years-long archive? I tried a few different batch image converters but none of them retained the Fuji film simulations, or adjustments I had done in Lightroom. I also couldn’t find a way to filter my photos in Lightroom for the images that lacked a corresponding .jpg file and convert them that way.

Enter raw2jpg, a script (Mac only) I wrote for bulk converting raw files that is RAW+JPEG aware and applies adjustments made to the image in Lightroom or Photoshop. To use it, install Homebrew and run:

brew cask install adobe-dng-converter
brew install exiftool
curl -Lk https://raw.githubusercontent.com/tylerball/raw2jpg/master/raw2jpg > /usr/local/bin/raw2jpg

Then you can run it on a directory of RAW files.

raw2jpg ~/Photos/Fuji

words:

building a better sonos with free software and cheap hardware

When I first heard about Sonos I was impressed. Completely synchronized music playing in every room is something I’ve always wanted, but the price seemed ridiculous, especially if you like the speakers you already own. Most of their products have a speaker integrated into them, forcing you to ditch any Hi-Fi equipment you might already own. Also I like keeping my own library of digital music and Sonos steers users towards using streaming services.1

For a while I was convinced there wasn’t a good open-source solution that could rival Sonos, but then I started playing with forked-daapd. It’s like iTunes but better. It scans your music library and allows you to stream it to Airplay receivers around the house. It also accepts audio via pipe so you can hook it up to receive audio from other sources and send it to your speakers.

For receivers, Volumio is a great OS that you can install on a Raspberry Pi. It has Airplay reception built in, with plugins for Spotify and other services. This combined with hardware from HiFiBerry gets you a high-quality output in the format of your choice for under $100.

For example I bought some cheap but awesome Edifier speakers for our home office and these are connected via an optical cable to a HiFiBerry Digi+ on a Raspberry Pi 3.

In the living room I have an older Onkyo TR-NX414 receiver that receives audio from via the optical out on a Behringer UCA202 connected to an Intel NUC. Eventually I’ll upgrade the receiver to something that has Airplay built in, but the point is that with DIY-ing this yourself you have the flexibility to use whatever hardware you have. My dad’s old beat-up but otherwise great-sounding Bose 301s still find use in the garage with this system.

intalling forked-daapd

My server is an old PC running Ubuntu which runs everything to do with home automation and home audio with Docker. My full config for this machine is kept here. The relevant piece is the daapd directory:

daapd
├── Dockerfile
├── forked-daapd.conf
└── start.sh

I couldn’t find a good pre-built Docker image for forked-daapd but writing my own was pretty simple. To set this up copy the daapd directory and add a docker-compose.yml with the following:

docker-compose.yml#L97-L109 ↗︎
  daapd:
    container_name: daapd
    build: daapd
    network_mode: host
    volumes:
      - /mnt/pool/tunes:/mnt/pool/tunes:ro
      - ./daapd/forked-daapd.conf:/etc/forked-daapd.conf
    environment:
      - MEDIA_SERVER_NAME=Home
      - PUID=1000
    env_file:
      - ./daapd.env
    restart: always

Be sure to adjust the /mnt/pool/tunes volume to where your music is stored. You can reference the forked-daapd.conf in the project repo for its available options and their defaults.

streaming spotify around the house

Despite what I think about streaming music sometimes you just want to throw Spotify on and have it play through the whole house during a party or when you can’t be bothered to queue up a bunch of music manually. Thankfully there’s the librespot2 open source client which you can pipe right into forked-daapd. One thing that isn’t built in is metadata, which is just a nice thing to have instead of blank album art and empty current track info. A PR was opened but wasn’t accepted for some reason, so I keep a fork of librespot with this feature added.

Like forked-daapd, copy the contents of the librespot folder and add the following to your docker-compose.yml:

docker-compose.yml#L71-L81 ↗︎
  spotify:
    container_name: spotify
    restart: always
    build: librespot
    depends_on:
      - daapd
    volumes:
      - /mnt/pool/tunes/spotify:/data
    env_file:
      - ./librespot.env
    restart: always

Again, update /mnt/pool/tunes to point to your music. You will also need to create a librespot.env file with your Spotify username, password and a name for the streaming destination.

SPOTIFY_NAME=Home
SPOTIFY_USER=myusername
SPOTIFY_PASSWORD=mypassword
'Home' as a destination in the Spotify app

streaming other audio from macs and phones

Sometimes you need audio from places that aren’t your library or Spotify, like playing from the Bandcamp app, website or from YouTube. Luckily there’s also an open-source Airplay receiver called shairport-sync3 we can pipe into forked-daapd.

The setup for shairport-sync is a lot simpler, just add the following to your docker-compose.yml:

docker-compose.yml#L83-L95 ↗︎
  shairport:
    container_name: shairport
    image: kevineye/shairport-sync
    network_mode: host
    depends_on:
      - daapd
    volumes:
      - /mnt/pool/tunes/airplay:/output
      - /mnt/pool/tunes/airplay.metadata:/tmp/shairport-sync-metadata
    environment:
      - AIRPLAY_NAME=Home
    command: --metadata-pipename=/tmp/shairport-sync-metadata -o pipe -- /output
    restart: always
'Home' as an Airplay Output Device on Mac OS

running it

Start Docker with sudo docker-compose up -d and enjoy your more-capable, cheap, whole-home audio system.

I learned alot about running all this stuff from Benoit Beauchamp’s excellent post about setting up his own whole-home music setup, which differs a bit with the use of mopidy as a music manager, but everything else is the same. This video by James Petersen gave me some cool ideas about how to control the system from Home Assistant.


  1. You can add local music via an app running on a computer, but it’s limited to 65,000 tracks. Amateur hour. 

  2. This is also the software the Volumio devices use for Spotify streaming under the hood 

  3. This is also the software the Volumio devices use for Airplay reception under the hood. Everything works together. 

words:

music i thought about in 2018

Here’s my futile act of resistance against posting screenshots of algorithmically generated “Your Top Songs 2018” playlists.

eli keszler - stadium

This album broke my brain during a late night subway ride. It sounds like the city more than any: the predictable randomness of machinery; the steel scrapes of the train bouncing through the tunnel; the steady, ethereal drone of electricity; a beeping that you can’t place. Two men board a nearly empty subway car, sit on opposite sides and start chirping each other like only old friends can.

Those two friends are Eli Keszler’s hands and what he does to the drums creates this soundscape. It wasn’t until after I heard it that I read the album is performed live with a drum kit and percussion, with sounds from a laptop triggered by his playing. There are other drummers exploring this technique but none with as much delicacy and intention as Keszler. He layers melodies and rhythms effortlessly and his virtuosity allows him to improvise within them. The result is an ever-changing document of our environment.

playboi carti - shoota (ft lil uzi vert)

My favourite rap subgenre is widescreen euphoria raps, for lack of a better term. Music for staring out into the great beyond, driving fast down an elevated highway through the city on a summer night in a vehicle with no top. Leave it to Playboi Carti, a rapper with a taste for the surreal and blissful to release the years best1 example of the genre.

“Shoota” is a pile of questionable arrangement choices that came out so well; the drums come in whenever but they lock everything into place. It continues to pile on sound and new frequencies throughout, continually raising the compositional stakes before letting Lil Uzi Vert jump in to bring the song to its ecstatic climax. Two guys rapping about how good it is.

m geddes gengras - hawaiki tapes

As an unrepentant gear nerd I can’t help but be humbled by this LP made almost entirely on a Korg Volca FM and some effects pedals. The prolific M. Geddes Gengras made it while on vacation in Hawaii and its sound reflects the sun and waves in that place.

When I visited Maui with my family a few years ago I couldn’t seperate its idyllic location from how American it is. There’s a Wal-Mart there. I picture Gengras retreating from happy hours and luaus to make this record. It’s a demonstration of how restraint can help create something larger than its parts.

earl sweatshirt - some rap songs

My memory of early Odd Future is clouded by a lot of critical hand-wringing over their lyrical content and attitude. Not that many years later Tyler the Creator is making songs for the Grinch movie and has branched out across the pop spectrum. Earl Sweatshirt is making the most honest and introspective music I’ve heard. This might be surprising to those critics, but it shouldn’t be.

Some Rap Songs is like leafing through tabs of youtube videos in Earl’s web browser, bouncing from influence to influence, rooted in the sounds of what he’s found. It’s freeflowing and unconcerned with polish and perfectionism; the samples and production service the idea rather than the final mix, sounding like you’re right inside of his head.

And that head is reconciling a lot of things: the death of his father, expectations of his musicianship and celebrity, his relationship to his mother. The songs exude it. I can’t overstate how personal and emotional it is, moreso than any other music I heard this year. It makes everything else sound vapid and meaningless.

gang gang dance - kazuashita

I joke that all my favourite music came out in 2008, when I think I started to finally understand it and develop some taste. Gang Gang Dance was a staple. They showed that being in a band didn’t have to mean staying inert in sound or attitude. Their Saint Dymphna is exemplary of this approach has been on repeat for me since. I still find new perspectives and ideas in their music years later.

Kazuashita reflects living in a frustrating, seemingly futile political atmosphere, but it remains rooted in optimism and joy. At the end of the album’s opener, audio from this video of the Dakota Access Pipeline protests enters. A protestor elequently describing the unfathomable philosophical gulf between the oppressed and the oppressor that plays out in media daily, before being interrupted by a heard of buffalo in the distance. I cry every time I hear it.

honorable mention

Laurel Halo’s ambient journey Raw Silk Uncut Wood, Burna Boy’s summer dancehall perfection Outside, Duppy Gun Production’s dancehall acid trip Miro Tape, Swae Lee’s synthwave rap excursion Swaecation and finally seeing Radiohead play live.


  1. Sorry, nothing will ever top “Citgo”

visit the archive