Fabio vs. The Internet

Music coder / Code producer

Giving Up on Maschine

It took almost four years and a major software update, but I’m finally ready to admit NI Maschine isn’t for me.

I’m a bit surprised, really. I come from a sampling background and my first productions were made using trackers running on DOS (Remember the 90s? I was there). I bought an Akai MPC2000 when I was ready to bring my tracks to the stage and I pushed it to its absolute limits, so I feel completely at home with a lovely array of 16 rubberized pads.

So it’s obvious I got interested on Maschine when I first heard of it. An MPC-like design with all the convenience of editing samples, programs and sequences on the computer? Shut up and take my money! But the theory doesn’t always work in practice. Maschine is indeed very straightforward and quick to get a groove going, but once you reach a certain point you can’t help but wish you had a full DAW at your disposal. Even NI knows this - that’s why Maschine also runs as a plugin. And that’s where your problems start.

Double the sequencers, double the fun?

For all practical purposes, Maschine acts as an “external” box MIDI-synced to your DAW. Only it isn’t a box, but a whole new pattern-based sequencer running inside a plugin. This means you get double everything: arrangement (scenes containing patterns), mixer and a second set of effect buses.

Sequencing grooves in Maschine is pretty much the whole point, so you press play on your DAW and start making some patterns. So far so good! Now you have a few beats done and you want to arrange them. Suddenly you realize that any pattern currently selected on Maschine will start playing immediately whenever you press play on the DAW, regardless of where you are in the arrangement.

Things simply don’t match up with the timeline, ever. I’ve lost count of how many times I had the groove for the chorus playing on top of a breakdown and vice-versa.

There are two ways to fix this, and both suck. One is creating scenes on Maschine, which means making a whole parallel arrangement. This arrangement won’t sync up automatically with your DAW, so you need to assign MIDI notes or control changes to each one of the scenes and then fire those from the main arrangement. This is the bad stuff from the MPC times and precisely what everyone hoped to avoid when working with a computer.

The second way is exporting audio for every pattern in every group using Maschine’s drag and drop feature - which works, but it’s a pain in the ass - or sending the plugin’s outputs to multiple channels and recording them to regular audio channels. Your arrangement will be all audio from that point on, which means you’ll have to re-record the whole thing if you wish to change a groove later. Again, that’s the sort of thing we wanted to avoid.

Wait but why?

Because Maschine sits exactly halfway between an instrument and a DAW. While version 1.x was more of the former, 2.x leans strongly in the other direction without quite delivering it. And Native Instruments doesn’t seem to know what to do about it. It’s common to see speculations about an upcoming DAW from NI on several websites, and Maschine seems to be the natural place for that to happen.

Is it all bad? No, not really. It is a brilliant instrument, and a better MPC than Akai could ever make. Sure, you need a computer to run it, but that’s also true for the MPC Renaissance - which came after Maschine. So if that’s what you want, look no further.

But Maschine just doesn’t fit very well on my setup. And if you use Ableton Live as your main DAW (or Bitwig for that matter) it probably isn’t for you either.

The truth is Live does everything Maschine does in a saner and more integrated way. The drum rack device alone does way more than Maschine’s groups will ever do, with the added benefit of being able to drag audio from the arrangement directly into each drum pad. Then you can use the session view to create clips and scenes without worrying about copying all tracks to a new pattern all the time (again, a consequence of Maschine trying too hard to feel just like hardware). Each clip can have a different time signature too, something that simply isn’t possible on Maschine.

Speaking of controllers: sure, Maschine’s big selling point is providing a way to put away keyboard and mouse, but Live has Push and the whole APC line. It also talks to virtually anything with a USB or plain old MIDI port. Any controller with pads will work automatically with Drum Rack, so you can do your finger drumming just the same.

On the other hand, Maschine only works with Maschine. There’s a General MIDI mode and a few other control templates, but the controller always requires a Mac or PC to do anything useful (forget about Linux). It also isn’t class-compliant, so you can’t use it to control iOS music apps. This includes NI’s own iMaschine, somewhat ironically.

And the icing on the cake: my controller is still the monochrome version - no cute RGB pads for me. I thought about upgrading it, but of course NI doesn’t offer the option to buy just the hardware. If you want to taste the rainbow there’s no other option but paying for a brand new software license, which I refuse to do. Ah, the joys of vendor lock-in!

If your DAW is boring, go for it

But let’s say you’re stuck with a boring old linear DAW like ProTools or Logic. In that case, Maschine will feel revolutionary! A sizeable number of features all cool kids have been playing with for the last decade will be finally available to you. Hell, you might even love the fact Maschine mostly works like an external piece of hardware.

The included sample library and plugins are also well worth it. That’s actually the only thing stopping me from selling it, especially since they’re available without having to fire up Maschine.

(On the other hand, this means I should have gotten Komplete and a good pad controller instead, but that’s another story.)

Fixing it

It turns out there’s a way to bypass Maschine’s internal sequencer entirely using Live’s drum racks. It’s a long-winded solution, but it makes using those sweet drum synthesizers less painful. Live’s sequencer is a dream to work with, so cutting out the middleman brings great relief.

UPDATE: I made a Live 9 template based on TekMonki’s blog post linked above. Click here to download it.

Even so, the bottom line is clear: if you’re not stuck with a boring DAW and want to make more than beats, do your homework. You might already have what you need after all. It also pays to buy hardware that won’t lock you to a single software. Ableton tried that with the first APC line and failed; now Push and the APC MKII are fully class compliant. Open and hackable hardware is always the way to go.

Hy Brazil Compilation (Also: New Music!)

The fourth Hy Brazil Compilation was released this week, including a new track by yours truly! What’s that, you ask? Well…

Hy Brazil is a compilation series that aims to map and promote the new music produced in Brazil focusing on electronic and experimental sounds.

The compilation was curated by Chico Dub, who’s behind a number of music festivals and related events in Brazil. Apparently they don’t mind the fact I don’t live there anymore and asked me for a track anyway. The reception has been pretty good so far, including a very nice writeup on SPIN.

My new track The Borly Dossier is also available on Bandcamp, along with the previously unreleased Walker. This makes for a tiny EP with stupid quantities of bass. Seriously, crank up dat subwoofer or wear decent headphones. You’ll miss all the fun otherwise.

More new music coming soon(ish).

Bitwig, Finally

NOTE: This is not a full review; there are plenty of specialized people writing those already and I simply don’t have the time (I also don’t want to spend $400 just to write a proper blog post). These are my personal impressions after trying the demo for a few days. It’s important to note I’m a long-time Ableton Live user, but I’m far from being a fanboy.

Bitwig Studio is finally released! The Duke Nukem Forever of DAWs is here, and it’s looking pretty good.

I’ve been playing with Bitwig for a few days now. My general impression (and a good TL;DR) is that it’s nice and worth it if you don’t use Ableton Live yet, but there are no real reasons to switch for now. It’s very possible that Bitwig 2.0 could change that (actually I’m betting on it).

Here’s a quick summary of my impressions so far.

User interface

The UI has more than a passing resemblance to Live, but it’s definitely not a ripoff. It’s like they’ve combined the best ideas from Live and Renoise while making everything extremely smooth and responsive. On the other hand, sometimes there’s too much going on; things can get confusing pretty quickly with tons of parameters with brightly colored icons on multiple panes.

There are very interesting routing options, with LFO generators and envelope followers that one can route freely to different controls inside instruments and effects - a feature that also resembles Renoise quite a bit. It’s a nice feature for sound design, and can also be used to get around some pesky limitations (more on that below).

Features

Live’s session view is there, looking pretty much the same - only it’s called mix view. Audio clips behave similarly, with automatic stretching (which sounds pretty good, by the way), envelopes and so on. The big difference is there can be several audio events (let’s call them subclips) inside a clip, so you can do beat-slicing in place. Aside from that, you’ll feel at home if you’ve ever used Live. This is the only instance where Bitwig can feel like a Live clone; everything else looks like Renoise (I kid, I kid!).

MIDI support is pretty basic - actually borderline crappy. There’s no easy way to send program changes and other important configuration data to external MIDI instruments. Another sorely missing feature is MIDI routing between tracks, which is extremely useful for things like recording the output of an arpeggiator or MIDI filter running on another track.

External plugin support is both better and worse: plugins can be executed in a separate process so they don’t bring Bitwig down when they crash. On the other hand, there’s no multiple output support, which means you’re pretty much screwed if you use Maschine or Kontakt and want to mix their outputs properly.

A few other common features present in other DAWs are also missing, like track folders and proper channel groups. Also, a few devices that were “borrowed” from Live are simply not as good, particularly Sampler, EQ and Compressor.

Bitwig also seems less geared to live performance than Ableton. You can’t assign keyboard shortcuts to clips, scenes and knobs - only MIDI notes and controls. There’s a limited MIDI keyboard emulation available when you press caps-lock, but it’s not the same thing.

On the other hand, their control scripts seem to be very good. Novation Launchpad is brilliant with Bitwig - even better than Launchpad95 on Live. Their controller API is open and scriptable with Javascript - a huge diference from Live’s obscure and undocumented Python API. Definitely a step in the right direction.

But the biggest feature is definitely Linux support. That’s huge news for anybody wanting to leave Apple’s monopoly while keeping the ability to run a decent operating system.

Future

Bitwig is promising some very interesting features for upcoming versions, including a fully modular system (like Reaktor/PD/Max4Live), network collaboration and native OSC support. If all that happens, I’m definitely buying it (and I really hope they sweeten the deal with a crossgrade discount!).

Conclusion

Going back to the TL;DR at the top of the article: if you’ve already purchased Live, Bitwig is probably not worth it in its current incarnation (unless you really need Linux support). Some features need polishing, others need to be added and a few bugs need to be solved. Either way, it’s definitely pretty good for a first version. Bitwig 2.0 could be a real game-changer if they manage to add everything that’s being promised.

The Async Web, or “Javascript Sucks, but Someone Did Something Cool on It”

(Disclaimer: this is ranty. Don’t say I didn’t warn you.)

I’m old in internet years. I was there for the first browser war, fighting my way through layouts made with <table> tags while adjusting margins with shim.gif to get around half-assed CSS implementations. You could even call me a veteran. If you have also been working with the web since the 90s, you know that server-side Javascript isn’t a new thing, even though it has become the new hotness lately.

I’m talking about Node.js, of course. Everybody wants to jump into the real-time web bandwagon, and Node.js is the passport to the promised Web 3.0 land (or is it 4.0 already?). Single-page apps! Asynchronous connections! Websockets! Webscale! Woo!

Well, I’m all for it. No, seriously, it’s cool stuff. The problem is, of all the languages anyone could have picked to make this happen, someone had to pick Javascript. Wat?

While Javascript is ubiquitous and pretty easy to get started with, it’s also so flawed someone took the time to create a whole new language that gets “compiled” into it to make development less painful. And it’s a huge success! There’s nothing quite like Coffeescript happening on other languages, and certainly not for the same reasons.*

But yes, Node does work pretty well. The V8 Javascript engine out-performs most popular runtimes in other languages, including Ruby’s MRI* and cPython. But since everything is asynchronous, it forces certain patterns that can become messy very quickly and breaks built-in Javascript features like exception handling. Want better performance? Then you have suck it up and code around it. Or, you know, just use Coffeescript and hope for the best.

Of course it’s not all bad. There are amazing frameworks like Meteor and Derby that make it very easy to create real-time collaborative apps. Express is a pretty good platform to create JSON APIs and regular websites that, admittedly, perform way better than Sinatra (the Ruby equivalent). But I can’t help thinking I could achieve the same results with less hassle if, say, Python was picked up by the hipsters as the foundation of the “new” asynchronous web craze (it has Tornado after all).

To be honest, my hopes lie with Go right now. It’s still a bit rough around the edges, but so was Ruby when Rails exploded. Go is statically typed and compiles to native binaries, which makes it extremely fast and light. It’s also built for concurrency and includes pretty good standard packages to build networked and web applications. The only missing pieces are a decent package manager (the current state of affairs is frankly very messy) and a web framework that can bring all that potential to fruition. Revel is promising, but it’s still missing a few key parts to make it brilliant.

It’s interesting to note that Go and Node.js even share similar patterns. Error handling is a good example. Here’s a Go snippet to read a file and print its contents:

1
2
3
data, err := ioutil.ReadFile("/tmp/data.txt")
if err != nil { panic(err) }
fmt.Print(string(data))

And here’s the Javascript equivalent:

1
2
3
4
fs.readFile('/tmp/data.txt', function (err, data) {
  if (err) throw err;
  console.log(data);
});

Take out the mandatory callback on Javascript and it’s pretty much the same code. You have to pass errors around and handle them manually; Go doesn’t have exceptions by design and Javascript’s asynchronous behavior breaks them. The main difference is Go gives you the option of running functions asynchronously instead of forcing callbacks due to bad design.

Another similarity: neither Javascript or Go have a class-based object model. Javascript uses objects that work pretty much like associative arrays in PHP (or hashes in Ruby, or dictionaries in Python). They’re not really objects derived from classes - they just kinda sorta work like them.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Defining a rectangle object
var rectangle = {
  width: 5,
  height: 10
};

// Adding an area() method
rectangle.area = function() {
  return this.width * this.height;
};


// Adding a perimeter() method
rectangle.perimeter = function() {
  return 2 * this.width + 2 * this.height;
};

// Calling the methods
rectangle.area();
rectangle.perimeter();

Go has type structures that can contain data and functions, therefore working just like classes (but only if you want to). It even provides inheritance through embedding.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Defining a rectangle type
type rectangle struct {
    width, height int
}

// Adding an area() method to rectangle
func (r *rectangle) area() int {
    return r.width * r.height
}

// Adding a perimeter() to rectangle
func (r *rectangle) perimeter() int {
    return 2 * r.width + 2 * r.height
}

func main() {
    r := rectangle {
      width: 5,
      height: 10
    }

    // Here we call the 2 methods defined for our struct.
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter:", r.perimeter())
    // ...
}

All things considered, it’s a good time to be a developer. It’s a pity the best technologies seldom become the most popular, while inexplicable fads take over the landscape from time to time. Such is life. But if people could realize that abandoning SQL completely wasn’t such a good idea, who knows? Maybe the best tools for the job can become more popular sooner rather than later.


* Before anyone mentions it, Elixir is to Erlang as Scala is to Java. Also, it goes whithout saying that Javascript is orders of magnitude slower and less fault-tolerant than Erlang.

* jRuby is a completely different story, though - particularly the latest release. But then you need to run your code in the JVM. Take that as you will.

Shut Up and Take My Money!

I’ve had this article on draft since the Instagram TOS debacle, but I didn’t finish writing it because of reasons. Life got busy and I lost the timing.

Anyway, the crux of it remains relevant. I won’t get into the whole “if you don’t pay for a service, you’re the product” thing since it’s been done to hell, but it doesn’t make it any less true.

So, I decided to move from Instagram back to Flickr when the TOS “controversy” was at its height. I didn’t have that many photos or thought they were good enough to be used in ads, but I was a bit pissed off when Instagram decided to pull out Twitter integration about one month before that.

I had reached the 200-picture limit on my free account a long time ago, but there I had a service that did way more, where I could store full-resolution photos, create sets, use proper geolocation and, on top of everything else, had proper social network integration. A Flickr Pro account costs 25 bucks a year, a very fair price for a full-featured ad-free cloud photo storage service. Flickr offers 1Tb of storage for free, and you can get rid of the ads and a few more niceties by getting a paid account. So yeah, sign me up.

Please let me pay for stuff

It’s a known fact that paying for a service makes it more serious. Paying legitimizes a commercial relationship; it gives you leverage when you have a complaint, it creates a proper binding contract where you have a say about the services you’re using. When you use a service for free, the company can always come back at you and say “I was being generous, you ungrateful bastard”.

A good example is Posterous. I’ve used it for a long time to post pictures and short text posts via email when I didn’t have a decent smartphone. Twitter bought them and now the service is being discontinued. They offered an easy way to download everything as a working website (which I’ve uploaded here), but it doesn’t change the fact that it doesn’t exist anymore. If I want to post via email, I’ll have to look elsewhere.

Unfortunately, not all “free” services have decent paid options. The biggest example is possibly Google. While I can buy extra storage for Gmail, that doesn’t really constitute a proper paid account. Yes, I can sign up for Google Apps, but that’s way more than most people need and still lacks integration with a few services (Youtube, for example). What if I don’t have (or don’t want to use) a domain? Would it be so hard to offer a Google Premium account?

I have a non-Google email that I use for serious stuff precisely to have an “exit strategy” if Google ever decides to pull the plug on Gmail. Don’t think it can’t happen - remember that Google Reader had a loyal following, and was killed anyway.

So please internet, take my money. Use it to remove those annoying ads and create great services for users, not shareholders.

Divorcing iTunes From Your Media Keys

You’ve been there. Maybe you’re listening to your favourite song on Rdio, or maybe checking your Soundcloud stream. You reach for the play/pause key on your keyboard and BAM, motherfucking iTunes comes up. Don’t you hate that? I do.

Luckily, there’s a way to fix it. Open your terminal and type:

launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist

VoilĂ , iTunes no longer responds to the media keys. The only downside is that now iTunes doesn’t respond to the media keys at all. I couldn’t care less, but if you’re a crazy person who actually likes iTunes (poor you!), you can reattach the keys at any time with:

launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plist

One could conceivably run the detach script at login and write a small AppleScript launcher to reattach the keys and then launch iTunes. I’ll leave this as an exercise to the reader.

Ch-ch-changes

In case you’re one of my 17 readers, you probably noticed the site’s design has changed recently. This is because we’re not running on Wordpress anymore, but on sub-atomic quantum entaglement engines Octopress!

But what exactly does that mean for you? Well, the site will load much faster, for one. It’s also very resilient against l33t h4x0rz, which is always a good thing.

For me it means I don’t have to worry too much about my site going down if I’m ever featured on HackerNews or Reddit, since there’s no interpreter between the files and what you see. Instead of being a dynamic blogging engine that reads databases and process templates on the fly, Octopress generates all necessary files before uploading them. All the webserver has to do is spit data in your general direction (and it does that really fast).

I also took the time to clean up the blog a bit; all photo-posts were removed, since I already had a copy of those on Posterous. This has left only posts with “actual content” (mandatory quotes, I fear), which should serve as an incentive for me to stop being lazy and write more.

And what will I write about? Well, taking from my older stuff, I’d say music, programming and random ramblings - In other words, a regular blog. A more focused portolio-like website will come soon, and I’ll probably comment on its development around here.

I know this sounds a bit like a new-year’s resolution thing (and I know what usually happens to those), but I missed having an honest, real blog instead of scattered posts on assorted social networking sites. Not that I’m abandoning them, but instead of linking to other people’s stuff, it’s high time I go back to making stuff other people would want to link to.

Oh, and before I forget: happy multi-denominational food and gifts holiday!