tag:blogger.com,1999:blog-40448574704569813342023-11-16T05:54:05.136-08:00BacktraceAnonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.comBlogger52125tag:blogger.com,1999:blog-4044857470456981334.post-36029108937561373282014-01-16T14:57:00.000-08:002014-01-16T14:57:02.033-08:00Source Code for the First Piece I Ever Wrote in SuperCollider<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/129778296&color=ff6600&auto_play=false&show_artwork=true"></iframe>
<p>
This is presented more as an example of how not to write music in SuperCollider - it was within the first week or 2 of me trying things out.
</p>
<p>
The piece is a drone piece based on an instrument that plays a set of overtones of a base frequency, and slowly bends those frequencies by a microtonal increment over a period of several minutes - creating cascading overtones at higher frequencies as the sound waves cross in space and cancel each other out. <br/>
The piece starts with a base drone over 20hz and later fades in complementary drones at (20*21/16)hz and (20*4/3)hz - <a href="http://www.kylegann.com/Octave.html">a septimal major third</a> and perfect fourth. <br/>
The piece ends after 30 minutes - when the pitch bending of first drone cycle returns to a unison.<br/>
This pattern of slow pitch bending in sine clusters was something I experimented for several years. I still write a piece in this style every now and then for fun. I've learned a lot about sound design since then so it's always good to go back and apply those learnings. <a href="http://backtrace.bandcamp.com/album/orbital-slingshot">Orbital Slingshot</a> - composed in late 2011 is the most recent piece I've released in this style.
<br/>
Commentary follows the source code.
</p>
<pre>
(
SynthDef("sine-phase-additive", {
arg baseFreq = 32, baseFreqLFORate = 1/3600, baseFreqLFOMult = 0.01, baseFreqLFOPhase = 0 , baseFreqLFOAdd = 2, pan = 0, amp = 0.03, partials = #[1,2,4,8,16,32,3,6,9,12,18,24,25,27,36,40,48,54,56,60,64];
var base;
base = baseFreq * SinOsc.kr(baseFreqLFORate, baseFreqLFOPhase, baseFreqLFOMult, baseFreqLFOAdd);
Out.ar(0,(Mix.ar(Pan2.ar(FSinOsc.ar(base*partials,0,amp),pan))));
}).load(s);
)
s=Server.local;
s.boot;
s.sendMsg("/s_new", "sine-phase-additive", 1005);
s.sendMsg("/n_set", 1005, "baseFreq",20*(4/3));
s.sendMsg("/n_set", 1005, "pan", 0);
s.sendMsg("/n_set", 1005, "amp", 0.013);
s.sendMsg("/n_set", 1005, "baseFreqLFOPhase", 0);
s.sendMsg("/n_set", 1005, "baseFreqLFOMult", 0.0125);
s.sendMsg("/n_set", 1005, "baseFreqLFORate",1/300);
s.sendMsg("/n_set", 1005, "pan", 0.3);
s.sendMsg("/s_new", "sine-phase-additive", 1001);
s.sendMsg("/n_set", 1001, "baseFreq",20*(21/16));
s.sendMsg("/n_set", 1001, "pan", 0);
s.sendMsg("/n_set", 1001, "amp", 0.012);
s.sendMsg("/n_set", 1001, "baseFreqLFOPhase", pi);
s.sendMsg("/n_set", 1001, "baseFreqLFOMult", 0.0325);
s.sendMsg("/n_set", 1001, "baseFreqLFORate",1/120);
s.sendMsg("/n_set", 1001, "pan", -0.3);
(
s.sendMsg("/s_new", "sine-phase-additive", 1000);
s.sendMsg("/n_set", 1000, "baseFreq", 20);
s.sendMsg("/n_set", 1000, "pan", 0);
s.sendMsg("/n_set", 1000, "amp", 0.030);
s.sendMsg("/n_set", 1000, "baseFreqLFOPhase",0);
s.sendMsg("/n_set", 1000, "baseFreqLFOMult", 0.00325);
s.sendMsg("/n_set", 1000, "baseFreqLFORate",1/1200);
s.sendMsg("/n_set", 1000, "pan", 1.0);
//static drone
s.sendMsg("/s_new", "sine-phase-additive", 1003);
s.sendMsg("/n_set", 1003, "baseFreq", 20);
s.sendMsg("/n_set", 1003, "amp", 0.040);
s.sendMsg("/n_set", 1003, "baseFreqLFOMult", 0.0);
s.sendMsg("/n_set", 1003, "baseFreqLFOPhase",0);
s.sendMsg("/n_set", 1003, "pan", 0.0);
//base hourly cycle drone
s.sendMsg("/s_new", "sine-phase-additive", 1002);
s.sendMsg("/n_set", 1002, "baseFreq", 20);
s.sendMsg("/n_set", 1002, "amp", 0.030);
s.sendMsg("/n_set", 1002, "baseFreqLFOMult", 0.00125);
s.sendMsg("/n_set", 1002, "baseFreqLFOPhase",0);
s.sendMsg("/n_set", 1002, "baseFreqLFORate", 1/1800);
s.sendMsg("/n_set", 1002, "pan", -1.0);
SystemClock.sched(480.0, {
s.sendMsg("/s_new", "sine-phase-additive", 1001);
s.sendMsg("/n_set", 1001, "baseFreq",20*(21/16));
s.sendMsg("/n_set", 1001, "pan", 0);
s.sendMsg("/n_set", 1001, "amp", 0.012);
s.sendMsg("/n_set", 1001, "baseFreqLFOPhase", pi);
s.sendMsg("/n_set", 1001, "baseFreqLFOMult", 0.0325);
s.sendMsg("/n_set", 1001, "baseFreqLFORate",1/120);
s.sendMsg("/n_set", 1001, "pan", -0.3);
});
SystemClock.sched(1200.0, {
s.sendMsg("/s_new", "sine-phase-additive", 1005);
s.sendMsg("/n_set", 1005, "baseFreq",20*(4/3));
s.sendMsg("/n_set", 1005, "pan", 0);
s.sendMsg("/n_set", 1005, "amp", 0.013);
s.sendMsg("/n_set", 1005, "baseFreqLFOPhase", 0);
s.sendMsg("/n_set", 1005, "baseFreqLFOMult", 0.0125);
s.sendMsg("/n_set", 1005, "baseFreqLFORate",1/300);
s.sendMsg("/n_set", 1005, "pan", 0.3);
});
SystemClock.sched(1800.0, {
s.sendMsg("/n_free",1000);
s.sendMsg("/n_free",1001);
s.sendMsg("/n_free",1002);
s.sendMsg("/n_free",1003);
s.sendMsg("/n_free",1005);
}
)
</pre>
<p>
At this point I wasn't using either the Synth or Routine abstractions. I was creating a synth and giving it attributes by sending osc messages directly to the server, and manually allocating a node ID for each synth. My timing routine was to create events on the system clock at the outset and then delay them before being played - so the command to end the piece (by freeing the synth nodes, not sending them any kind of envelope) after 1800 seconds is already set when the piece starts.
<br/>
Among things I hadn't learned about synth design yet - envelopes, gates and amplitude balancing. Amplitude balancing with additive synthesis can be a little tricky. I'm starting with a base frequency (20hz in this case) and sending it an array of partials = #[1,2,4,8,16,32,3,6,9,12,18,24,25,27,36,40,48,54,56,60,64] ) which is all well and good (note that there are no multiples of 5 until you get into the highest octave). 2 things to note about amplitude for your partials - 1) sound waves at the same amplitude carry more energy at higher frequencies (more wavefronts are hitting your ears over the same span of time) so they sound louder. Also, when you're creating an array of integers, there will always be more integers in the higher range of the array. To use the standard harmonic series as an example - in the 1st octave, there are only overtones at 1 and 2 times the fundamental frequency. 3 octaves up you have 8 overtones at 8,9,10,11,12,13,14,15,16. The higher you go, the more tones are likely to fit into your tuning scheme, even if you eliminate overtones that have factors higher than some number. For this reason, you should compensate for your amplitude using something like amp = (1/(f**k)) where f is your frequencies and k is a constant - usually from 1 (pink noise) to 2 (brown noise).
</p>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-57959342877291540032014-01-06T17:10:00.003-08:002014-01-06T17:10:56.794-08:00Snowday<iframe style="border: 0; width: 350px; height: 470px;" src="http://bandcamp.com/EmbeddedPlayer/album=3071214890/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/transparent=true/" seamless><a href="http://backtrace.bandcamp.com/album/snowday">Snowday by Backtrace</a></iframe>
This was an album I originally wrote in January 2000. The first sketches came together during a day off work (from excessive snow, naturally). This was one of the first things that I wrote in Buzz that felt like I was getting a handle on something more than just beat-oriented stuff. The source materials include some samples I found on mp3.com and some drawings from early blogs that I ran thru Metasynth. All of that has been gone from the internet for almost a decade.
Track 5 was improvised in one take and remains one of my favorite noise / drone pieces. The title of track 1 is the punchline to an inside joke I've forgotten. The piano sample is from the opening of the last movement of Beethoven's "Hammerklavier" sonata. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-20946805496365444022013-12-19T21:36:00.000-08:002013-12-19T21:36:00.991-08:00Chicago Boss: an Erlang Web Framework<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/LGGo6bIuj8w" width="480"></iframe>
This looks really exciting. The goal of the project is to cut operations cost of web apps by 90% through better processor and memory utilization. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-29245048867786512702013-11-25T05:53:00.001-08:002013-11-25T06:08:56.807-08:00"Decoherence" Music Video<iframe allowfullscreen="" frameborder="0" height="281" mozallowfullscreen="" src="//player.vimeo.com/video/80175698" webkitallowfullscreen="" width="500"></iframe> <br />
<a href="http://vimeo.com/80175698">Decoherence</a> from <a href="http://vimeo.com/erstwhile">backtrace music</a> on <a href="https://vimeo.com/">Vimeo</a>.<br />
<br />
I've started making some music videos to go with the tracks from Pythagorean Clouds and a few other pieces. I got a new computer last week with a GPU card which, combined with the new OpenCL rendering in the new version of Mandelbulber (1.19) lets me render certain kinds of animations very quickly. <br />
<br />
The animation in this video is a transformation of a Mandelbox, which took about half a day to render at 1280x720px. The current OpenCL implementation only allows for a few basic fractal formulas to be rendered, and it's a little crashy on Windows. But it's super fast - cranking out almost 100 frames per minute sometimes, compared to maybe getting 1 frame per minute if I was lucky with my previous setup. I can't do anything with volumetric shaders right now, but I'm kind of getting into this aesthetic. Flat surfaces, "perfect" lighting with no depth of field. (I feel like if there's too many shading effects, you fall into the uncanny valley of being super conscious that you're watching a computer-generated video, and not really being able to experience the visuals for what they are) Because the algorithm gets glitchy when you zoom too close, I've been trying out different effects where the camera stays still and the fractal morphs around it. Overall though I like working within the constraints of a medium, especially when it's kind of minimal and lo-fi, so this works for me. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-58542952422085495032013-10-29T16:00:00.000-07:002013-10-29T16:00:14.420-07:00Circles and Euclidian Rhythms<a href="http://createdigitalmusic.com/2011/03/circles-and-euclidian-rhythms-off-the-grid-a-few-music-makers-that-go-round-and-round/">Circles and Euclidean Rhythms: Off the Grid, a Few Music Makers That Go Round and Round</a><br />
<br />
<blockquote class="tr_bq">
<span style="background-color: rgba(255, 255, 255, 0.74902); color: #221e1f; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.59375px; word-spacing: 1.75px;">Imagine an alternate universe in which Raymond Scott’s circle machine – a great, mechanical disc capable of sequencing sounds – became the dominant paradigm. We might have circles everywhere, in place of left-to-right timelines now common in media software. Regardless, it’s very likely Scott’s invention inspired Bob Moog’s own modular sequencers; it was almost certainly the young Moog’s exposure to the inventions in Scott’s basement that prompted that inventor to go into the electronic music business, thus setting the course for music technology as we know it.</span></blockquote>
This blog entry includes some nice software examples.Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-65239031704374428092013-10-23T11:54:00.003-07:002013-10-23T11:54:41.252-07:00"Horizontal Movements"<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/1407521"></iframe>
<br />
I composed these 2 pieces almost 2 years ago, but even though they are very autobiographical, I never really talked about the inspiration for them. So I've added a description on SoundCloud. <br />
<blockquote>
Like a lot of my music, these 2 pieces are autobiographical, at least in the sense that they were composed during and immediately in response to some significant events in my life - in this case my involvement in the Occupy Wall Street protests. They were composed in late December 2011 through early January 2012, while I was taking some time off from activism to recuperate after police chaos and setbacks of late November and December. The "Frozen Zone" of the titles refers to both the blockade that the NYPD set up in the Financial District in the middle of the night as they evicted protesters from Liberty Square, and more metaphorically to all systemic injustice. <br/><br/>
Although the music doesn't convey any overt political messages, the act of writing it was kind of a meditation on the idea of leaderless organizing (the anarchist political philosophy of "Horizontalidad / Horizontalism"). I think of the sounds as being "horizontal" in the sense that there's no hierarchy working to organize them. The musical parts aren't divided into "instruments or "voices" - there's just a single algorithm generating clusters of sine waves. Those individual sine waves, which only differ in pitch and amplitude, converge temporarily to create harmonies, and then dissipate.</blockquote>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-40686613288656561852013-10-13T22:41:00.000-07:002015-09-23T10:48:10.875-07:00MIDI in the web browser, 2013 styleMy first homepage (on AOL) included a lengthly MIDI composition that auto-played upon loading the page. Browsers don't support MIDI natively anymore but there are JS libraries that will load sound fonts and let you create midi compositions in JS.<br />
<br />
<a href="http://mudcu.be/midi-js/">midi.js</a> is a good starting point.<br/>
<a href="https://github.com/gasman/jasmid">Jasmid</a> for reading MIDI files with JS.
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-47009371594803213782013-10-13T16:17:00.000-07:002013-10-13T16:17:00.304-07:00Grimes "Genesis" extended remix<iframe frameborder="no" height="166" scrolling="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F115078301" width="100%"></iframe>
<br />
<br />
I haven't done one of these in a few years but I've been really into the song Genesis by Grimes lately so I decided to do an extended granular remix of it, similar to what I'd done with <a href="https://soundcloud.com/backtrace/emotional-levy-backtrace" target="_blank">Aisler's Set</a> and <a href="https://soundcloud.com/backtrace/sets/a-quiet-hum-is-amplified" target="_blank">Joanna Newsom</a> a few years ago. <br />
<br />
This song works well for looping - the melodies are all in the high register, with lots of reverb so they won't sound choppy when overlapped, and there's not a lot of bass so it doesn't sound muddy. The drum track is clean, with the one strong kick drum that adds just the right amount of bass when it's looped. <br />
<br />
This is the first time I've really done anything with Garage Band. The granular looping was done in Granulab as usual. With both of these programs I feel like I've pushed them as far as I want to go - it's too bad that in going for simplicity of the user interface you loose a lot of precision in the settings. In Garage Band I really wanted these loops to hit exactly on the beat, but you can only get resolution on the low end of around 0.1 BPM which makes for some noticeable grinding or stuttering. Similar in Garage Band, the resolution when automating parameters is kind of a joke - it's a linear division of the frequency spectrum in Hz, so while I can get like 100 divisions of the octave between 10khz and 20khz, on the low end, settings jump right from 20hz to like 700 hz, with nothing in between. Good luck getting a band pass filter to zero in on one sound. <br />
<br />
This went through a bunch of phases where there were a lot more ideas at first - there was a timestretched track with doomy overdrive + reverb, and other rhythmic layers, all fading in and out, but I ditched all of that for a simple one track of the song looped with a little bit of pitch shifting going on.<br />
<br />
I'm looking forward to emulating enough of Granulab in SuperCollider that I can do mixes like these with the kind of precision you need eliminate artifacts (or make the artifacts musically significant by harmonizing them with the rest of the song). I've been getting into using the TGrains ugen alot in the Backtrace Livestream project, so this should be a pretty straightforward thing to adapt. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-35517407019194547842013-10-06T18:27:00.000-07:002013-10-06T18:27:00.449-07:00Phrontist.org: The Bjorklund Algorithm<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F12229312&show_artwork=true"></iframe>
More <a href="http://www.phrontist.org/2011/03/the-bjorklund-algorithm/">here</a>.Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-11520231149992753672013-10-05T18:26:00.002-07:002013-10-05T18:26:41.597-07:00Fractal Blog
<script src="http://zoom.it/OsKR.js?width=auto&height=400px"></script>
I started a Tumblr a few weeks ago for <a href="http://fractal-explorations.tumblr.com/">3D fractal art</a>.Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-56872678010147866532013-07-01T22:47:00.001-07:002013-07-01T22:47:41.242-07:00Granular Amen Break Impromptu<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F99323910"></iframe>
Source Code -
<script src="https://gist.github.com/erstwhile/5907007.js"></script>
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-30163234421250177962013-06-29T14:33:00.000-07:002013-06-29T14:33:13.236-07:00Upgrading from Snow Leopard to Mountain Lion: Not BadI upgraded my MacBook from Snow Leopard to Mountain Lion last night. So far there have only been a few minor hangups, which I've mostly been able to get around.<br />
<ul>
<li><a href="http://mac.tutsplus.com/tutorials/os-x/15-tweaks-to-make-when-moving-to-lion-or-mountain-lion/" target="_blank">Fixing scrolling, hidden scrollbars etc in Mountain Lion</a></li>
<li> Here's some other <a href="http://www.lifehack.org/articles/technology/level-up-os-x-with-these-8-mountain-lion-tips-and-tricks.html" target="_blank">useful tips for Mountain Lion</a></li>
<li>X11 isn't supported, so if you run X11 / GTK apps like Mandelbulber use <a href="http://xquartz.macosforge.org/landing/" target="_blank">XQuartz</a><a href="http://www.blogger.com/"></a></li>
<li>Quicksilver stopped working after the upgrade so I switched to <a href="http://www.alfredapp.com/" target="_blank">Alfred</a> (thanks to <a href="http://ashedryden.com/blog/my-favorite-little-osx-helper-apps" target="_blank">Ashe Dryden</a> for the recommendation)</li>
<li>I used Spaces heavily on Snow Leopard (6 desktops, with apps assigned to workspaces for music, code, social media, graphics, sysadmin and writing), which became useless with 10.7 (one of the biggest reasons I didn't upgrade when 10.7 came out). I'm using <a href="http://totalspaces.binaryage.com/" target="_blank">TotalSpaces</a> to restore classic Spaces functionality. I'll probably end up paying the $18 for the full version (almost as much as the OS upgrade itself) just because Spaces is so essential to how I work.</li>
<li>Getting the battery time remaining to show in the menu bar was a chore. In Mountain Lion, you can no longer see the battery time next to the battery icon. There are 2 apps that can fix this for you. One is a simple one called "<a href="https://batterytimeapp.com/" target="_blank">Battery Time</a>" the other a more-advanced $1 app called "<a href="https://github.com/codler/Battery-Time-Remaining/" target="_blank">Battery Time Remaining</a>".</li>
<li>Since 3rd-party menubar items cannot be re-arranged (come on already) I couldn't actually see the battery time remaining on my laptop since the icon was pushed all the way off to the side. There are a few apps that you can get to fix this for you. "<a href="https://sites.fastspring.com/macbartender/instant/bartender" target="_blank">Bartender</a>" at a pricey $15 or the more reasonably-priced "<a href="http://www.seense.com/mbra/mbra.htm" target="_blank">Menu Bar Rearranger</a>" at $4.99. But really, why do I have to pay to do something as basic as change the ordering of some icons on my menu?</li>
</ul>
<div>
So overall, it could have been much worse. I didn't have to recompile all of my gems or rebuild virtual machines or re-install anything major to be productive again. A little annoying though that the upgrade cost $20 (which is cheap for an upgrade) but then I had to pay another $20 or so to restore all of the things that Apple "innovated" between versions.</div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-70205719479967065252013-06-23T14:48:00.001-07:002013-06-23T14:52:46.250-07:00New Album: Orbital Slingshot<iframe style="border: 0; width: 350px; height: 470px; margin-left:auto; margin-right: auto" src="http://bandcamp.com/EmbeddedPlayer/album=619240519/size=large/bgcol=ffffff/linkcol=0687f5/notracklist=true/transparent=true/" seamless><a href="http://backtrace.bandcamp.com/album/orbital-slingshot">Orbital Slingshot by Backtrace</a></iframe>
A 70-minute drone piece, composed with SuperCollider. You can stream it here, or purchase a download on Bandcamp.
This is part of a series of studies that may someday lead up to a full-length (195 hours) sonification of the Apollo 11 mission. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-17368170238345864812013-06-20T15:24:00.001-07:002013-06-20T23:37:47.756-07:00How to Block the Sponsored Posts on your Tumblr DashboardI was surprised at how intrusive I found the sponsored posts that have started appearing in the stream on my Tumblr dashboard. Luckily if you run the <a href="http://adblockplus.org/">AdBlock</a>plugin it's super easy to tweak your settings to block the sponsored posts:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFjxK9mximX4ozjMV7CN9CuSqHDzUY6sBuUKeM8tU7zzG7xFza_AmtC1dw-EgxyZyjLRhLN5S4DuYo7tnqDujZoMulutiPW5DF7_oUplnrlYjzwZseIa5rp1QuucwazZLmAYXCM9oyMgxR/s1600/Screen+shot+2013-06-20+at+6.17.04+PM.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFjxK9mximX4ozjMV7CN9CuSqHDzUY6sBuUKeM8tU7zzG7xFza_AmtC1dw-EgxyZyjLRhLN5S4DuYo7tnqDujZoMulutiPW5DF7_oUplnrlYjzwZseIa5rp1QuucwazZLmAYXCM9oyMgxR/s320/Screen+shot+2013-06-20+at+6.17.04+PM.JPG" width="280" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
First, open your AdBlock menu from the icon. This should be in the upper-right corner of your browser window (I'm using Chrome on OSX in the example). Select "Options" and you should see this menu towards the botton of your screen.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJETrDEsdrQo1vRhzvkKOv2JoIZRPkMUnLmAT1wOk6zlPxgyCq-lUFeBYyolAB4MUencQEEAJ1PvQcmsxCb8ALuVmfw9jqCnmEUFlM8YxqSqQsUWj2GiE7cMrF1Bgi5tP5TDmVxGxMdS5K/s1600/Screen+shot+2013-06-20+at+6.17.19+PM.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJETrDEsdrQo1vRhzvkKOv2JoIZRPkMUnLmAT1wOk6zlPxgyCq-lUFeBYyolAB4MUencQEEAJ1PvQcmsxCb8ALuVmfw9jqCnmEUFlM8YxqSqQsUWj2GiE7cMrF1Bgi5tP5TDmVxGxMdS5K/s1600/Screen+shot+2013-06-20+at+6.17.19+PM.JPG" /></a></div>
You'll want to paste this line of code to the bottom of the "Manually Edit Your Filters" window:
<pre>
www.tumblr.com##DIV[class="sponsored_post"]
</pre>
Click the "edit" button, add the line of code, and then click the "paste" button. This will block all sponsored posts that appear on Tumblr.com.
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-20401084207755314672013-06-20T14:31:00.003-07:002013-06-23T16:08:21.255-07:00How to Probably get Pandoc Running on a Linux Server
<i>(<p>Drink-by date: This post was written based based on work I did in June, 2013. The GHC, Haskell, Cabal and pandoc were all current versions installed in Ubuntu 10.04. If you're reading this documentation after June, 2015, consider it out of date.</p>
<p><a href="http://jonmifsud.com/blog/writing-in-markdown-and-converting-markdown-to-pdf/">This blog post</a> was the original inspiration to use Pandoc</p>
)</i>
<p>A few months ago I started putting my <a href="http://github.com/erstwhile/resume">resumé</a> on Github. As a freelance software dev it's quicker to send somebody to 1 spot to see both code for projects I work on and descriptive, bulleted-list of accomplishments (without all of the monetization noise of LinkedIn). Recently I spent 5 hours on one of those endlessly-recursive campaigns of compiling things from source code in order to save myself a few minutes of maintaining my online resumé in different formats (pdf and markdown) and since it deals with some bugs in some standard Ubuntu / Debian packages, I'll post instructions here for how I fixed them.</p>
<p>My goal was to be able to update my resumé in markdown, and have run a single deploy script that would commit changes, generate a pdf from the markdown and push the updated markdown and pdf to GitHub. There's a Linux utility called "<A href="http://johnmacfarlane.net/pandoc/">pandoc</a>" that does this and a whole lot more. It's written in Haskell, a powerful functional programming language that is beloved by academics and high-frequency stock traders and otherwise hasn't broken into mainstream software developement. </p>
<p>My first time around, I did a standard "sudo apt-get install pandoc" on my Ubuntu server and thought I was good to go. The syntax for a basic conversin is simple, and like ffmpeg, the input and output formats are inferred by file extension: </p>
<pre>
$ pandoc resume.md -o resume.pdf
</pre>
<p>
Except that this yielded the following error:
</p>
<pre>
pandoc: resume.md: hGetContents: invalid argument (Invalid or incomplete
multibyte or wide character)
</pre>
<p>
A character-encoding bug. Removing curly quotes from the markdown file confirmed this since it worked fine if the input document was all ascii. But what's the point of a PDF if you have to limit yourself to ugly straight quotes and spelling "resumé" as "resume"? There was some chatter on google groups that this was an issue with setting the right <a href="https://groups.google.com/forum/#!topic/pandoc-discuss/i_tT-xtZvRs">LANG in your locale</a>, but that in later version of pandoc this bug was fixed. Rather than fiddle with global settings, I opted to upgrade pandoc.
</p>
<p>The version of pandoc, as well as Haskell and GHC (the Glasgow Haskell Compiler) are all years out of date in debian / ubuntu. (The computer I was working on was running Lucid 10.04 which is supported through 2015). So geting the latest pandoc woudln't be as simple as an apt-get upgrade, and would require upgrading the GHC, Haskell, the Haskell Package Manager (cabal) and finally pandoc. All of these are source-code installs except for the final upgrade of pandoc. </p>
<p>
If you've already tried to install pandoc or Haskell via apt-get you'll need to remove the packages via the following command:
<pre>
$ sudo apt-get autoremove ghc6
</pre>
</p>
<p>
Now we're ready to start the installation process. First, install the dependencies via apt-get:
<pre>
$ sudo apt-get install libgmp3c2 freeglut3 libedit2 libedit-dev freeglut3-dev libglu1-mesa-dev
</pre>
pandoc uses LaTeX for formatting, so you'll need to get pdflatex on your system.
<pre>
$ sudo apt-get install texlive-full
</pre>
</p>
<p>
Now you'll want to get the source code to build the GHC and the Haskell Platform. First the <a href="http://www.haskell.org/ghc/download_ghc_7_6_3#x86_64linux
">GHC</a>. This a standard configure / make install build. </p>
<p>Cabal, the Haskell Package manager, is included in the Haskell Platform</p>
<pre>
$ wget http://lambda.haskell.org/platform/download/2013.2.0.0/haskell-platform-2013.2.0.0.tar.gz
$ gunzip haskell-platform-2013.2.0.0.tar.gz
$ tar -xvvf haskell-platform-2013.2.0.0.tar
$ cd haskell-platform-2013.2.0.0
$ ./configure
$ ./make
$ ./sudo make install
</pre>
<p>You can also get the source for Cabal from <a href="https://github.com/haskell/cabal">GitHub</a>.</p>
<p>
Once you have Cabal up and running, first refresh the packages list:
<pre>
$ cabal update
</pre>
Now, you can install pandoc
<pre>
$ cabal install pandoc
</pre>
Cabal will install a bunch of dependencies. This will tak a few minutes.
Cabal installs executables to ~/.cabal/bin/pandoc - you can symlink this to a directory that's already in your path:
<pre>
sudo ln -s ~/.cabal/bin/pandoc /usr/local/bin/pandoc
</pre>
</p>
<p>Now you should be ready to go. For some pointers as to how I actually automated the generating of pdf's by committing changes to my resumé, check out this shell script:
<a href="https://github.com/erstwhile/resume/blob/master/deploy">https://github.com/erstwhile/resume/blob/master/deploy</a>
</p>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-41226753886908174632013-06-14T14:23:00.000-07:002013-06-14T14:31:41.600-07:00Constructing "Cloud City" - the Mandelbulber settingsI've gotten into playing with 3D fractal rendering this year, using a program called "<a href="http://mandelbulber.com">Mandelbulber</a>." There's a whole <a href="http://www.fractalforums.com/videos/?PHPSESSID=396f44a64f6aa6958735e495687b4fc9">scene</a> that's emerged in the last 4 years around rending animations exploring 3D fractals, since the <a href="http://news.discovery.com/space/introducing-the-mandelbulb.htm">discovery</a> of the "Mandelbulb" (a 3D mapping of the Mandelbrot Set) in 2009.
I was playing around with a hybrid fractal (combining several algorithms into 1 system) a few months ago when I discovered something that reminded me of the "Cloud City" gas-mining station from the final act of "The Empire Strikes Back".
<iframe width="480" height="360" src="http://www.youtube.com/embed/gdxCm1tKwm4" frameborder="0" allowfullscreen></iframe>
The color palette comes from a photo of the hallway runner in my house, hence the name "Rugs in the 4th Dimension"
This is a closeup flythrough of one of the many "trees" that appear throughout the system:
<iframe width="640" height="360" src="http://www.youtube.com/embed/31jTQFx7cXQ" frameborder="0" allowfullscreen></iframe>
You can get the Mandelbulber settings for this algorithm and explore it <a href="https://gist.github.com/erstwhile/5785392">via Github</a>.Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-14621752095930789572013-06-12T04:24:00.001-07:002013-06-12T04:27:19.968-07:00New Album: "Cloud City"<iframe width="640" height="360" src="http://www.youtube.com/embed/MmDHczF26TI" frameborder="0" allowfullscreen></iframe>
<br/>
<b> <a href="http://backtrace.bandcamp.com/album/cloud-city">Available on Bandcamp</a>.</b>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-40839707601896137472013-06-08T19:54:00.000-07:002013-06-08T19:54:04.834-07:00James Tenney - Melody, Ergodicity, Indeterminacy<iframe width="560" height="315" src="http://www.youtube.com/embed/Rrky32zDtW4" frameborder="0" allowfullscreen></iframe>
James Tenney (1934-2006) was probably the first composer to develop an aesthetic for computer music, realizing that electronic music almost forced the composer to accept noise as “music” and to abandon the idea of absolute control over a composition. <a href=" He came to accept Cage's passion for randomness, but from a different angle: computer music can be “unpredictable” (rather than “random”).
">He came to accept Cage's passion for randomness, but from a different angle: computer music can be “unpredictable” (rather than “random”).</a>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-71378585047693142452013-04-14T15:19:00.001-07:002013-04-14T15:24:44.799-07:00Going to try using a Git Repo on DropboxMaking another attempt to get my Supercollider coding practices in line with something sane that resembles how I write code in other languages. When I write code in SC I usually work off of the same set of files on a Dropbox folder so I can sketch something on my laptop, and then have those changes automatically deployed to my "rendering" machine (an 8-core Mac Mini) or my "livestream" machine (an older-generation Mac Mini running Nicecast, Supercollider, and nothing else). While Dropbox provides automatic backups and deployment, it doesn't provide version control, so I end up committing the cardinal sin of using filenames for version control ("20130410-livestream.scd" or the like). So I'm going to try setting up a git repo in the Dropbox with the source code for the Livestream project and see how that works out. <br/><br/>
The more difficult issue here is doing version control in a system that's designed to run entirely as a REPL - how does Smalltalk do version control? Periodic snapshots of object instances? In sclang, you can use Object.archive to dump the state of an object to a text file and from there use Git or whatever to save. Which is kind of a kludge - in Smalltalk you're running in a virtual machine that is a Smalltalk object, with no files. So where do you keep the snapshots?<br/><br/>
Here's some StackOverflow conversations on using Git with Dropbox:<br/>
<a href="http://stackoverflow.com/questions/1960799/using-git-and-dropbox-together-effectively">Using Git and Dropbox together effectively?</a><br/>
<a href ="http://stackoverflow.com/questions/2199637/is-this-plain-stupid-git-sharing-via-dropbox?lq=1">Is this plain stupid: GIT Sharing Via DropBox?</a>
<br/><br/>
And a tutorial: <br/>
<a href="http://intermediaware.com/blog/how-to-use-dropbox-as-a-git-repository">How to use Dropbox as a git repository</a>.
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-58022079054545667242013-03-28T20:36:00.001-07:002013-03-28T20:36:52.118-07:00Imogen Heap improvises with a Kinect<iframe width="560" height="315" src="http://www.youtube.com/embed/6btFObRRD9k" frameborder="0" allowfullscreen></iframe>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-89195615655911322662013-02-25T01:09:00.000-08:002013-02-25T09:48:13.795-08:00Fractal ReturnEvery 12 years or so I get really into fractals and higher dimensional geometry in at least a serious recreational mathematical way. The last 5 years or so I've been doing a lot of music based on distributions of prime numbers (stuff like <a href="https://soundcloud.com/backtrace/continuation-and-closure">Continuation and Closure</a>) but at the start of this year, the fractals came back in a big way. I've been playing around with a program called <a href="http://sourceforge.net/projects/mandelbulber/">Mandelbulber</a> to explore 3-D renderings of fractal shapes, an d getting back into the math behind generating the Mandelbrot set. <br/><br/>
Last time I was this interested in fractals was around 1999 when I was playing with a MIDI-generating program called "Mu Soft Music Generator" (I think) which would create music based on different fractals, L-Systems or periodic oscillators. This was in between the long-term project from 1997-2003, a Q-Basic application that combined twelve-tone and minimalist techniques to play music on the SoundBlaster 16 soundcard - culminating in <a href="https://soundcloud.com/backtrace/sets/writing-software-to-play-music">Writing Software to Play Music to Write Software To</a>. I was trying to wrap my head around Manfred Schroeder's <a href="http://www.amazon.com/Fractals-Chaos-Power-Laws-Infinite/dp/0486472043">Fractals Chaos and Power Laws</a>. At the time, seeing any kind of rendering of a fractal was a special thing - I feel like it was one of the first things that really caught my interest about the Web (funny how so many pages relating to fractals and fractal art still date from the late 1990's). Something to look forward to in 15 years will be having computers fast enough to explore high-resolution 3-D fractals in realtime. <br/><br/>
I just purchased a copy of <a href="http://www.amazon.com/Experiments-Four-Dimensions-David-Heiserman/dp/0830601414/ref=cm_cr_pr_product_top">Experiments in 4 Dimensions</a> which was one of the books that got me started on all of this, back when I was in 4th or 5th grade (circa 1986). I had that book out from the library multiple times, trying to master the code examples given for rendering and rotating a simple wireframe tesseract (on a 4-color, 8mhz, 640k computer). I don't think I ever got one of the programs completed, because having the source code back in 1986 meant that you had a printout of the source code that you could set in your lap while you typed it into your computer (and probably guessed at how to get Apple Basic to run under DOS). I did build some tesseract and hyperpyramid models out of toothpicks.<br/><br/>
When I get the book, I'll see if I can translate the code examples from Experiments in 4 Dimensions to Javascript/html5 so people can share it and play with it. Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-88083695619459933892013-02-18T07:03:00.004-08:002013-02-18T07:03:49.196-08:00How to Fold a Julia Fractal
<a href="http://acko.net/blog/how-to-fold-a-julia-fractal/">How to Fold a Julia Fractal</a>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-18674919482614116802013-02-15T17:44:00.001-08:002013-02-15T19:23:40.996-08:00Mandlebrot Sonifications<iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F3733582"></iframe>
Here are 2 studies on sonifying iterations of z=z^2+c. I'm using the same instrument from the Carotid Kundalini studies, and mapping the real, imaginary, angle and radius of each iteration to instrument parameters (see the code comments). Each note is actually a chord of iteration values for one point in the set. As the music moves forward in time, parallel rows move along the real axis. What's most interesting to me here is how you can definitely hear cycles, and loops within loops in the pitches, especially in the 2nd study.
<pre>
//load up all of our servers into an array
~z = Server.all.asArray;
//our instrument - phase multiplication of sine waves, in a cluster of 8 phase / pitch shifted voices
~z.collect({|z|
SynthDef("sine-cluster",{|freq=100, atk=1, rel=1, slope=1, amp=0.005,pan =0,gate=0,m=0,p=0,ph=0,pl=0,pf=1|
var sin = SinOsc.ar( [1,1] * freq *.x (p+[1-p,1,1+p,1+p+p]) ,pl*SinOsc.ar(freq/(pf),ph*(0..3)/3,XLine.ar(freq.sqrt.ceil*pf,pf*slope.abs,pf/(rel*freq.log2.ceil))),(1/(rel+1))+((2-1)/2)*(amp)/(freq+512));
OffsetOut.ar(0,Mix.ar(Pan2.ar(sin
,[-1,1])) * EnvGen.ar(Env.perc(atk,rel, 1,slope),gate, doneAction:2) );}).send(z);
});
//the Mandelbrot function, where z is a complex number and c is a real number
~m = {|z,c|squared(z)+c};
//utility function - returns unique values in an array
~unique = {|a|var t = Array.fill(a.size);
a.collect({|i,j|(t.includes(i)).if({t.put(j,nil)}, {t.put(j,a[j])})}).reject({|i|i==nil});
t.reject({|i|i==nil});
};
//the pitch set
~p = ~unique.((16..32).reject({|x|x.factors.detect({|n|n>5})!=nil})*.x(2**((-6)..3))).sort;
//some sonification parameters
~globalSustain =2;
~d = 10;
~minIters =5;
//how many iterations to generate the pitches for an orbit
~maxIters = 1024;
~rows =2;
//minibrot on the the real axis
~d = 12;
~minIters =4;
~cx = -1.635;
~ci = -0.0001220703125;
~globalSustain =1.5;
~rows =2;
//on our way out to the western point
~cx = -1.875;
~ci = 0;
~cx = -1.95125;
~ci = -1/(2**30);
~globalSustain =0.5;
~cx = -1.957125;
~ci = 0;
~rows =2;
//5 arm spirals
~globalSustain =2;
~cx = -0.52482350635;
~ci = 0.62534492645;
~rows =3;
~d = 12;
~minIters =6;
(
//start a loop to crawl along the real number axis of the graph
//each cycle zooms in 2x closer to the original point, and crawls 1/2 as quickly
Routine {
(9..9).do({|y|
var max = (2**(5+y)).asInt;
max.clip(1,2048).do({|x|
//the player function is defined outside this loop so it can be tweaked in realtime while the loop is playing
~player.(x,y,max);
})
})
}.play;
/*recursive function to generate a collection of orbit points - bail out if we reach infinity, zero, or a non-number. Always quit after reaching "safe" number of iterations
this function returns an array of "points" which are the Complex values for a particular iteration
*/
~mr = {|z,c,safe,points|
((safe > 0).and(z.real.isNaN.not).and(z.real!=inf).and(z.real !=0)).if({
~mr.(squared(z)+c,c,safe-1,points.add(z))
},points)
};
)
(
~player = {|x,y,max|
//we sonfiy a line of points on the imaginary axis together, based on the value of ~rows
~rows.asInt.do({|ii|
//slowly crawl along the real axis
var c= ~cx+(x/(2**(8+y))) - (max/(2**(9+y))) , z = Complex.new(c,~ci+(1/(2**(8+y))*ii)),points;
//our initial point to iterate on
z = ~m.(z,c);
/*
alternate traversal strategy, move our sonification point in a tightening spiral around the orginal values for real and imaginary.
var z = Complex(~cx,~ci),points,c=~ci;
//z is the original center point. We add the orbit point to this
z = (z.asPolar+ Polar(1/2**y,0).rotate(((x*pi*2)/128)).scale(1+((1-(x/1024))/(2**(y-ii))))).asComplex;
*/
//generate an array of orbit points
points= ~mr.(z,c,~maxIters,[]);
/*
take a slice of the array to sonify it
the size of this slice can be tweaked by adjusting ~minIters and ~d.
the lower end of the array tends to be more chaotic and the higher end of the array more constant.
all of these points sound simultaneously, as a chord
*/
points.reverse[~minIters.asInt..~d.asInt].collect({|p,i|
var ss;
z = p;
/*
z is given as a complex number, but we can also treat it as a polar to get its angle (theta) and radius (rho) from the origin (0,0). it would probably be more interesting to get rho and theta relative to the original z point. */
((z.real.isNaN)).if({},{
ss = Synth("sine-cluster",nil,~z.wrapAt(x));
//frequency of the pitch, based on the distance from the origin
//fundamental pitch of 66hz multiplied by an overtone in the pitch set ~p
ss.set(\freq, 66 * ((~p.wrapAt(z.rho*~p.size*~cx))));
//phase offset of the pitch, also based on radius
ss.set(\ph,z.rho);
//add a small pitch bend
ss.set(\p,1/512);
ss.set(\gate,1);
//this is the amplitude of the 2nd (phase-shifting) oscillator, based on the imaginary value of of z
ss.set(\pl, z.imag.abs.log2.clip(-1,1));
//frequency of the 2nd oscillator, based on one of the harmonics in the pitch set ~p.
ss.set(\pf, 1/(~p.wrapAt(~p.size *z.theta/pi)));
//length of the note, based on the real value of z
ss.set(\rel,~globalSustain/((z.real.abs+2).log2).clip(2,32));
//pannign position
ss.set(\pan, (z.imag%1) * (z.real%1));
//note attack value, based on the reciprocal of the imaginary of z (maximum value 1 second)
ss.set(\atk,1/(1+z.imag.abs));
//slope of the peak amplitude drop - higher negative value = sharper attack, quieter sustain
ss.set(\slope,z.real.abs.log * (z.real/z.real.abs));
//tweak the amplitude a little to offset notes with a longer attack
ss.set(\amp,2.5 * (2/(1+(z.imag.abs.clip(0,1)))));
});
});
});
(1/10).wait;
};
)
</pre>Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com1tag:blogger.com,1999:blog-4044857470456981334.post-64440101797147960362013-02-15T16:59:00.001-08:002013-02-15T16:59:55.722-08:00Visualizing and Sonifying the Iterations of z=z^2+c<iframe width="420" height="315" src="http://www.youtube.com/embed/P3WdnLSI2hs" frameborder="0" allowfullscreen></iframe>
This video looks like an interesting point of departure for sonifying the Mandelbrot fractal. I've never been happy with graphical sonifications that map pitch to the y axis of a rendering, and time to the x axis, but mapping these patterns to sound seems like a very promising way to get interesting patterns out of the iterations of the z=^2+c formula. And it would also be something that could render in realtime, instead of rendering millions of points in advance and then putting that data through a sonification function.
Here's a blog post on <a href="http://softologyblog.wordpress.com/2011/02/01/orbit-traps/">orbit traps</a>.
Just started experimenting with Mandelbrot sonifications this week. I'll have some demo's up in another post.
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0tag:blogger.com,1999:blog-4044857470456981334.post-86322940667992813632013-01-12T10:37:00.000-08:002013-01-12T10:37:01.196-08:00New Album: A Sine of the Times<iframe width="400" height="100" style="position: relative; display: block; width: 400px; height: 100px;" src="http://bandcamp.com/EmbeddedPlayer/v=2/album=1841052318/size=venti/bgcol=FFFFFF/linkcol=4285BB/" allowtransparency="true" frameborder="0"><a href="http://backtrace.bandcamp.com/album/a-sine-of-the-times">A Sine of the Times by Backtrace</a></iframe>
Anonymoushttp://www.blogger.com/profile/12513694702058976478noreply@blogger.com0