top of page

PROGRAMMING

I've played in the shallow end with code for some time. When you want to understand all the different aspects of technology and dig your fingers into it to know how it all works, then it's a matter of time before you're either poking around with code or heating up a soldering iron. Aside from the usual XML/HTML duties and CSS authoring that comes along with the duties of a writer, I've also dabbled around with other scripting languages, to varying degrees of success.

 

Over the years, I’ve learned to read the relative functionality of new features from the code, and have participated in occasional code reviews. Some of the code I wrote for documentation features even got integrated into the product itself. 

 

On my own, I fell deep down the rabbit hole programming audio components with Max/MSP, a visual audio scripting language for complex sound processing. As of 2023, I have over 50,000 downloads of my software (ironically surpassing the circulation of most B2B software I’ve worked on), and I’ve gotten a handful of emails from famous producers who used it and had questions or feature requests.

I'm no developer by any stretch of the imagination, then I'm always game to give it my all.

APPROACH

Life in tech is about adjusting to change and making your own solutions. Priorities change, staff changes, scope changes, and things get lost in the shuffle. I worked with a team in Madrid who produced a number of plugins to collect NXLog messages from various sources. Once the backend work was complete, they were called to work on another project, so the configuration process was left to tech pubs to finish. This meant telling the users how to go into a text editor for a loosely organized, 600-line configurations file and edit it. We had 12 primary NXLog sources in the configuration file (some of which were incompatible with one another), with configurations based on three different protocol. Additionally, the user needed to manually enter the file paths and IP address in some sections of the file, with errors being hard to diagnose if made.

 

The configurations file was causing consistent confusion, and the support and sales engineering teams were the ones left to reassemble the config files in customer environments. While triaging tickets, I would usually find support tickets about the configurations file, and there were a few tickets in the Engineering backlog related to it as well. Having tooled around with issues of variable output content while programming DSP processing in Max/MSP, I offered to add a JavaScript tool to the documentation that would basically allow the user to assign what the need, enter the relevant information, and have the configuration compiled to their environment's specs with a click of a button.

JavaScript-Compiler.gif

The end result was simple and clean. It was my first time working with JavaScript to that capacity; I'd only previously worked with simple jQuery additions to pages. I had the support and sales engineering teams test it out, and they loved it. Within a month, it got around to some of the PMs, and the tool was taken from the documentation pages and implemented directly into the software.

Legend has it that an estranged draft of the code still haunts CodePen to this very day...

JAVASCRIPT TOOL

 FEEDBACK TOOL

My work to make an internal feedback tool was another experience that took on many shapes throughout its creation.  Our previous feedback tool was part of a third-party subscription. It wasn't collecting much useful information, and users had difficulty finding it. One of my coworkers looked into other services that we could purchase, but she couldn't find one that would work with the default layouts generated by our CMS. I offered to see if I could create an alternative so we wouldn't need to rely on other prefabricated tools. This way, I could also design the tool to match the visual themes I'd implemented across the rest of the documentation.


I was successful in creating and drafting a simple PHP/JS tool in our staging environment after some experimentation, but our servers were dropping occasional feedback tests. I talked to our backend team and they explained that AT&T reconfigured the Apache servers so that it might not work as expected. Rob, one of the leads on the team, mentioned that there was a similar API utilized by our lead generator forums that we could adapt to function the same way. I worked with him and we were able to add a smaller and cleaner tool at the bottom of the page. It gathers the expected information from the text fields and appends the page url to the feedback. 

Feedback-Tool.gif

FEEDBACK TOOL

I love to mess around and program audio devices with Max/MSP. I've even taken some of my ideas and adapted them as patches to share for free with Ableton users on the maxforlive site. I’ve garnered over 50k downloads so far, and the audio effects have already found their way onto various demos and studio albums. 

Keeping in line with the native UI of Ableton that is accessible in the API, I’ve tried to straddle the line between a functional interface with minimum latency and low CPU usage, which sometimes requires small sacrifices for code optimization, but I’m proud of a lot of the solutions I’ve come up. I’ve collected a few of my favs here.

College Dropout is an audio-drop/pitch-drop effect akin to a battered old cassette tape that's due to pop any day now. I came up with a probabilistic algorithm to periodically drop the volume and, optionally, the pitch either in unison or stereo. I also tacked on some tape hiss and some other parameters (including some secret ~hidden~ controls) for the distinguished knob-tweaker.

CollegeDropout.gif

High School Crush is a bitcrush/sample rate reduction effect. Typically, digital effects like this tend to cause harmonic resonances due to anti-aliasing, but I used three parallel instances to blur the harmonic relationship and added crossover filters with wet/dry controls to help shave off unwanted high frequencies to maintain the strength of the fundamental frequencies. Just what all the kids were clamoring for. 

HighSchoolCrush.gif

Grain Mill is a granular delay that uses two asynchronous granulator objects for that delicious fragmenting of realtime audio input à la Christian Fennesz and Tim Hecker. The audio channels can be mixed against the dry signal, and the master output can be further contoured by the additional side-chain compressor at the end of the signal. For the connoisseur of the unusual, this is a multi-course meal of strange.

GrainMill.gif

SOUND DESIGN

bottom of page