Test Post From Android

I bought a record, and the label is all puffed up so it doesn’t sit flat on the b side.

wpid-wp-1397665300693.jpeg

edit: My buddy Nick points out this happens when the plant accidentally attaches two labels to one side of the record. I carefully cut away the label, and sure enough, there’s a second one hiding underneath. Thanks Nick!

Share

Tracklist from Make It New, December 27th

On December 27th I opened for Perc at Make It New — it was an awesome experience, and having people come up to me afterwards and compliment me on my taste in music is something my 16-year-old self would never have imagined :). I was worried going in because Mixxx had been crashing earlier in the week as a result of me being dumb and using the bleeding-edge development version. But I worked with RJ to fix the problem, and Mixxx worked without a hitch.

There’s a fan recording of the set on youtube:

Actually there was a lot of trainwrecking, for some reason the Cue/Master control on the mixer was broken so it was a little hard to line things up. I’ll see if I can get a full recording from the Mmmmaven guys.

Tracklisting:

  1. Alan Fitzpatrick – Always Something For Nothing (Original Mix)
  2. Cassegrain & Tin Man – Athletic
  3. Paul Mac, Mark Broom – Remember When (Original Mix)
  4. Function, Jerome Sydenham – Computer Madness Re-Vision (Function vs Jerome Sydenham remix)
  5. Macromism, DJ Kool Dek – Shifted
  6. DETTMANN, Marcel – Push
  7. Blawan – And Both His Sons
  8. Slam – Crowded Room (Original Mix)
  9. BAS MOOY – Desolaat (Xhin remix)
  10. ANGELIS, Dimi/JEROEN SEARCH – Rhetorica (Jonas Kopp remix)
  11. Monoloc, Daniel Wilde – When I Get Older
  12. Jeff Derringer – Passenger (Original Mix)
  13. Dadub – Unlawful Assembly (Al Bielek Takeover)
  14. Mike Parker – Moisture (Treatment 3)
  15. Lodbrok – Oil (AnD Remix)
  16. Hizatron, Bashley – Discharge (Original Mix)

(edit: replaced broken ustream link with youtube link)

Share

Owen at the Together Center, 3/27/12

I played a 1.5 hour set of deep house at the Together Center this Tuesday. I was only supposed to play for an hour but the next DJ was late. I was running out of tracks to play at that point so I started playing some techno instead. In the following video I start playing around the 1 hour mark.



Video streaming by Ustream

Here’s the tracklist:

  1. Matthias Meyer, Patlac – Salt City (Nick Curly Remix)
  2. HouseRiders – Yesterday’s Future (Evren Ulusoy Remix)
  3. Lips – Mbali – Original Mix
  4. Soukie & Windish – Great Gatsby (Original Mix)
  5. John Talabot – So Will Be Now… feat. Pional (Original Mix)
  6. Daniel Dexter – No House For Old Men (Original Mix)
  7. Dark & Stormy – Feel It
  8. &ME – Glaced (Original Mix)
  9. SIS – Aires
  10. NTFO & Optick – From The Tower (Nikola Gala Remix)
  11. Atnarko, Sam Mollison – Thinking Of You – Pezzner’s Remix
  12. Pete Gooding, James Doman – Oosa – Original Mix
  13. Freak Seven Feat. Aniff – Nano Kids (Vocal)
  14. Tony Rohr – Night Drive (Alexi Delano Remix)
  15. Shifted – Spire
  16. Sandwell District – Feed Forward Test Session (Recorded Live In Berlin 23/10/2010)
  17. Kevin Gorman – Cast
  18. Mathew Jonson – Marionette
Share

On The Boogiedownload — behind the scenes

A while back, Nick over at Beantown Boogietown asked me for a mix to post on his website, and recently I put something together that I thought was worthy of publication. Nick went all-out, doing a little mini-interview and giving the mix a very flattering review.

Check it out.

I do want to get one more thing on the record: although I didn’t have a preset tracklist, this isn’t a one-take mix. I did go back and rerecord a few of the transitions that drifted a little. If I was in the middle of a mix and things started trainwrecking a bit, I stopped everything, rewound the outgoing track to the breakdown, and redid the transition. I did that twice. And then when I listened to the recording I discovered nine or ten minutes of the recording was doubled up, making it unlistenable, so I had to go back and rerecord that section too.

I took these four or five pieces into Ardour and spliced them carefully together. I know, the magic is ruined, etc etc. Sorry. I was just really glad that the messed-up section wasn’t the whole last 40 minutes of the mix instead of just the two tracks.

Share

Tech House Session Oct 18 2011

New mix up! Moving away from the dark techno for once, trying out some new tech house

Tech House Session Oct 18 2011 by ywwg

  1. Bjorn Wilke and Someone Else – Rainbow Bridge (Aki Bergen Instrumental Remix)
  2. Alessio Mereu – Eyes Of Sin
  3. Daniel Dexter – The Other Day (Original Mix)
  4. Daso – Open Cage (Original Mix)
  5. Pele, Findling – Deep Sea (Original Mix)
  6. NTFO & Optick – From The Tower (Nikola Gala Remix)
  7. Prompt – Brazz – Original Mix
  8. Oliver Klein, Peter Juergens – Hey Baby – Original Mix
  9. Andre Butano, Miguel Lobo – Straigh Ahead (Original Mix)
  10. Dan Caster – Wunderbar – Remerc Remix
  11. Dan Caster – Wunderbar – Original Mix
  12. NTFO & Optick – From The Tower (ONNO & David Labeij Remix)
  13. D-Formation – Stuck In The Airport (Original Mix)
  14. Dadub – Amnion – Original Mix
  15. Delano Smith – Change Is Coming – Original Mix
Share

Mixxx Session 2011-06-20

Two posts in one day? This will really skew the average. I recorded a new mix in anticipation of… something fun happening later this summer. I kept this one on the shorter side, under 50 minutes. My mixing (in a technical sense) is getting better, I’m at the point where there are some little drifts but I pull it back fairly quickly. On the creative side, there’s one track that sticks out as not quite fitting in with those around it, but it’s not a huge problem.

Tracklist:

  1. Knobs – Reality
  2. dml – forstenried
  3. Truncate (Audio Injection) – Truncate.16 – Original Mix
  4. Truncate – Concentrate – Original Mix
  5. James Ruskin, Mark Broom – Hostage – Original Mix
  6. Gary Beck – Egoist
  7. Pfirter – Vasodilatador – Original Mix
  8. O/V/R – Post-Traumatic Son – Original Mix
  9. Tommy Four Seven – Ratu
  10. Surgeon – those who do not
  11. tleilaxu – to other people

Mixxx Session 110620 by ywwg

Share

On Debugging

I’ve been doing more programming than usual recently, both at work writing scripts for managing video media, and at home working on the Mixxx DJ software. It seems 90% of my time is spent debugging, and the more difficult a bug is the more I find myself falling into an unproductive death spiral: try to fix the problem by tweaking a little code, recompile, test, fail, repeat. I’ll think that if I just change this one variable, or move this one bit code I’ll be done, but no it’s still broken and two hours later I’ve gotten nowhere. I keep having to relearn the same lesson: you can’t debug well if you don’t have good information.

Often my first stabs at debugging involves sprinkling print statements around my programs1. For simple problems this can actually work well, but as bugs get more tricky and complicated trying to analyze all that screen barf of can be difficult and a huge waste of time. It’s important to recognize when you’re not getting anywhere.

One problem I’ve been working on is the audio processing in Mixxx. When a DJ is using turntables to play music, and especially when they are scratching, the music changes speed radically, often in a tiny fraction of a second. The music will speed up, slow down, and reverse direction. The playback code has to mimic this bending, stretching, and warping that happens on an actual record player. If there are any errors in the math, it will cause ugly and unacceptable pops and clicks in the playback.

The old Mixxx code had a lot of clicks, buzzes, and pops. Certain playback speeds would cause noise, scratching would cause loud snaps, slow speeds caused rapid popping. I wasted several days trying to analyze those clicks by looking at printouts of variables, and only after I got to the point of complete frustration did I take a step back and think about how to attack the problem better.

I had been testing my code with actual music, and that was difficult because actual music often looks random up close — it’s hard to discern where the errors are in all that noise. So step one was to analyze data for the simplest possible case: a sine wave. Any errors would show up as large deviations from the smooth wave. This is a basic first step in making debugging easier: create a simple test-case. If you’re working on a huge data set, or a giant calculation, or a massive document, pare it down to the bare essentials necessary to reproduce the bug.

But even using a sine wave I couldn’t figure out what was going on. With 44,100 samples per second, there was too much data to analyze based on printed-out numbers. I recalled a bit in Michael Crichton’s “Terminal Man”2 that explains the problem:

“People,” Gerhard said, in mock irritation. “They just can’t handle machine data.” It was true. Machines could handle column after column of numbers. People needed to see patterns.

The book then proceeds to show both a list of numbers and a graph — the difference in readability is immediately apparent.

With some help from my dad and brother, both of whom often need to plot data, I was able to write a small script to display my debugging information:

A graph of a vinyl-stretched sine wave
A graph of a vinyl-stretched sine wave

This was a major breakthrough: find the best way to visualize your variables. I’m working with audio data, so a plot is a good choice. It took me a whole day just to adapt my program to write the audio data to a file and to write a new program to display that data, but once I was done the errors showed up as obvious spikes in the graphs. Moreover, by the shape of the waves I could get an idea of why certain clicks were happening: an off-by-one error here, a rounding error there, etc.

The graph above shows several variables: the actual generated sound wave (green), a reference sample (red), playback speed (cyan)3, and some other internal variables. If I see a spike I can look at the other lines and figure out where to start looking for a problem — the rate going from negative to positive (a record scratch), perhaps. The output above is correct — a smooth curve that is gradually brought back to zero when the turntable stops. (OK so that linear part at the end is not ideal, it should really be a curve — but otherwise it’s good.)

This is what the old, incorrect code looks like by the way. Notice the obvious errors in the graph, how the green line jumps up and down suddenly:

Bad Mixxx sound stretching
Bad Mixxx sound stretching

This method debugging could still be improved. I need to get up and scratch the turntable manually to generate data. Time spent triggering a bug is wasted. Every second you’re clicking around is time not spend debugging, which is why you need to make testing quick and easy. A bad test case is one that requires you click some options, open a file, manipulate some UI elements, and then eventually trigger the bug. An ideal test case would be a single command or button in the UI that performs a test. This keeps your mind focused on the bug, not on the boring, repetitive actions needed to trigger the bug.

Debugging is already a slow, painful process, and the prospect of writing extra code and programs just to debug your code can feel like superfluous work. But time spent writing good test cases and analyzation tools will more than pay itself back. Not only will you solve a bug more quickly, you may not have been able to solve the bug otherwise. It’s hard to get out of the tweak, recompile, test, repeat cycle, but you won’t get unstuck until you make your job easier:

  • Recognize when you’re not getting anywhere
  • Create a simple test-case
  • Find the best way to visualize your variables
  • Make testing quick and easy

With my Mixxx work, I still haven’t made testing quick and easy. I should probably write an internal test-case that loads the sine wave and performs a few basic scratches automatically. But even doing only two out of three of the steps got me out of the debugging death spiral.

  1. This article might be rendered entirely irrelevant if you work the Right Way, using debugging interfaces, stepping through code, and looking at live backtraces. But I suspect a lot of people start with print statements []
  2. This is why Google Books is a good idea []
  3. except that when playback speed is zero, I set it to -5000 so I can see it clearly []
Share

Bicycle v. Boston

I recently went to a DJ show at Good Life, and since these shows usually last longer than the T runs and I also hate cabs, I decided to bike both ways (about 5.5 miles each way). It had been flurrying all day, but there wasn’t enough snow or ice on the roads to make me worried about wiping out.

One factor I hadn’t considered, however, was road salt:

My bike, caked with salt and grime
My bike, caked with salt and grime

Closeup of salt and grime
Closeup of salt and grime

I’ve wiped as much of it off as I can, but it’s too cold to wash the bike (it would probably just freeze). My hope is that the chain isn’t ruined and my components aren’t all going to rust. Ah well, the show was fun.

Share

Together Bedroom DJ Contest Entry

Together Bedroom DJ Contest Entry by ywwg

I think there are one too many latin-style bombs in a row on this one, and I fucked up the effects at 37 minutes, but otherwise a fun mix with my usual chillout ending

  1. Luca Cazzoni & Naila`kil – High spirit
  2. Glutamate – Don’t look back
  3. Joel – Knopf (Live)
  4. Andreas Henneberg, Simon2 – Bolingo Grigo
  5. RuLO – Sounds Like
  6. Oblivion – Weaver
  7. SQL – Distorted Reality
  8. Alex Kenji – Tropical Chicks
  9. eavesdrop – chased by the trombone
  10. Chris Lake, LYS – La Tromba
  11. eavesdrop – clarinette
  12. Tea Time – My Name Isn’t Jack(System Zoid remix)
  13. damolh33 – nuda
  14. Dintun – Runge Mufasin (Pablo Denegri Remix)
  15. Function – Variance – Function Reduced Edit
Share