contact

in the future, this will be an amazing website. it will contain an enormous amount of hilarious content, and it will give you advice that is relative to your life. it will never tell you that you're fat, even if you are. occassionally it will reminisce about the good old days, not because it has any regrets, but just because it's sometimes nice to take comfort in all the good things that have come to pass. it will always be here for you, making sure that you always have an amazing website to go to when you are feeling alone. yes... it will be a most excellent website.

I'm sometimes known to be found at @jordanorelli.

My Favorite CMS is github.com

March 1, 2012, 12:25 p.m.

Every web project involves some amount of content production that is to be done by the non-developer. While working on BarkBox, I considered the option of adding some CMS functionality to our admin interface to allow the team to edit sections of copy on the website. We all know it becomes a bottleneck when the developer has to be the person to apply every spelling correction or title change across the site. Django makes it easy to build CMS-like tools thanks to its automatic admin interface, but even that seemed like overkill, since I'd have to define models and I'd be making database hits everywhere for little chunks of copy. Instead, I opted to just tell everyone on the team to make a Github account, and added them to the project. Most developers would recoil in horror at the idea of using Github's edit feature as their code editor, but for a non-developer that just wants to put in some content without having to learn the ins and outs of version control systems, editing a Django template in the Github edit window is just fine. The changes are a part of the project history, I check them before putting them into production, and I get to avoid a little bit of complexity in my admin interface. A nice win for the whole team.

Beyond simplifying the management of simple content, giving your whole team access to the repository is a great way to build trust. Giving your teammates access to the codebase shows them that you trust that they won't soil the sanctity of the work that you are doing, which in my experience, has been reciprocated every time. In the worst case scenario, a teammate puts a bad change into the repository, which you can easily undo with the git revert command. Sure, it happens. It's no big deal. So long as you aren't pushing code to your production server automatically with git hooks (suicide), you're still the gatekeeper.

early sketch

Jan. 15, 2012, 4:38 p.m.

I've read a number of programming textbooks in my day. Some are good, some are bad. It's rare that I read a programming textbook and I'm actually excited about the book itself; usually it's the material, the language or tool I'm learning, that I'm excited about. Case in point: Version Control with Git is among the most useful books I've read (and I highly recommend it), but to merely call it insipid would be a great understatement of the tedium involved in reading it cover to cover (which, again, I still recommend doing).

By contrast, the book Processing: A Programming Handbook for Visual Designers and Artists is among the best programming books I've ever read. Partly due to the nature of the material, the book lends itself to pedagogy better than any other I've experienced, chiefly for one reason, above all else: the exercises are completely subjective. Most textbooks will include questions along the lines of "calculate such and such". There is no implied secondary goal; if the answer is six and you've found six, then congratulations, you're finished. But with questions like "create a composition by carefully positioning one line and one ellipse", there simply is no one true answer. You solve the exercise and you take a look back at your creation and if you decide it is not aesthetically pleasing, you do it again, significantly reinforcing the learning material.

As an example, there is one exercise that states simply "Use the data from the curve y = x ^ 8 to draw something unique". I must have done this exercise six or seven times before I arrived at the following image:

For the curious, here's the Processing source for this solution, which satisfies the described puzzle from the text:

adventures abroad

July 27, 2011, 1:31 p.m.

Alright, so. I've spent the last month away from NYC for a number of reasons, principle amongst them simple curiosity. It's been a good trip so far. I've had some time to sit back and think about what in the hell I'm doing with my life. Rupert Murdoch's empire started to crumble in Europe, the space program ended, a Christian terrorist shot up a bunch of innocent Norwegians, and the Republicans are holding the American economy hostage in an attempt to gain their party favor for next year's presidential election. So it goes.

I think what has startled me most about this trip is how much I haven't really cared to explore. Maybe I'm burnt out on travelling in Europe; it just doesn't seem terribly foreign to me any more. Sure it's interesting, but there's not that sense of complete disorientation that I used to have, that sense of mysteriousness. At the moment I mostly just feel like I want a bagel, and that I want to get some work done. Being freelance definitely changes things. Without anyone to legitimately scare the shit out of me, with no fear of retribution, and without the regularity of a paycheck going direct deposit into my bank account, my desire to get shit done was severely reduced. I had had enough of feeling pressured all the time, but now I've come to realize I thrive on it. The eleventh hour. When shit is about to hit the fan. That's where I like to be. It's those times of pressure that are so rewarding, the feeling of the world collapsing on you, of facing insurmountable odds. Left to my own devices, all the odds I've tasked myself with have been rather pedestrian. I have a few things lined up for when I return, a few projects here and there; enough to keep me adequately stimulated.

Yesterday I drank a bunch of coffee and wrote a ton of Python, fueled by caffeine and dance music. As it approached the wee hours of the morning I realized I may have some trouble getting to sleep after all this and swapped the coffee out for beer (the dance music was left on). Remarkably, coffee and beer both have the amazing ability to crank the dial of productivity, but in very different ways. Sometimes when I drink and code I do my best work; sometimes I just thrash around and write bugs (last night was the former). I have a few days left in Brussels, and even though there's still so much I'd like to do here I feel I'm ready to come home, spend some quality time writing code, and get back in touch with my inner nerd.

Going to Brussels

June 16, 2011, 1:28 p.m.

For the entire month of July I'll be in Brussels. Why, do you ask? Well, quite frankly, I don't really know. Last year when I decided to go freelance, I did so because I had decided that spending all my time doing client work was not a very good way to spend my twenties. I believe my intentions were generally stated as "I want to be able to fuck of to Mongolia for a month just because I feel like it". Well, it's not Mongolia, but I'm fucking off to Brussels for a month.

You see, a friend of mine that's in grad school in Brussels injured his knee playing soccer, and he's looking to sublet his studio for a month. It's much cheaper to do this than it would be for me to just go traipsing around Europe on my own, and, dagnabbit, this is why I quit my "job", isn't it? So I'm going. I can't speak French or Dutch, I don't really know anything about Brussels, I have no plan whatsoever. But for fuck's sake I won't be able to do this for much longer, so I'm going.

Holy crap, did I actually get it right?

June 14, 2011, 12:18 a.m.

Well, I've been working for the past week or so to build my own blogging engine and it's been a lot of fun, actually. After a while I realized it would be good to finally get around to building my own website with Django, my prefered web technology. I looked around for a bit at existing blog engines, but, quite frankly, building it myself was just more fun. Sitting around reading about Wordpress configurations is completely boring to me. Besides, I knew that I'd want to customize whatever it is I'd be working with, and there just was no way I'd use a back end tech other than Django right now.

So... ta-da. This is the first blog post actually made with my own blog engine. Really there's nothing special about it on the exterior; it's what's on the inside that counts. The driving force behind the architecture that I'm working on is that all of the site administration should be done at the command line. That probably sounds ridiculous, but, so far I've got a good set of little command-line tools for working with my data:

  • mkpost - makes a post. The user is prompted for a title, and then their editor is open so that they can edit the text of their blog in any chosen editor. Right now I only support Markdown syntax, but I can add other formats in the future. The thing that makes me really happy about this is that now I can edit my blog posts inside Vim, my chosen text editor. This is infinitely better than using a standard browser textbox, or, god forbid, TinyMCE. Seriously, it's got an emoticon button, like I really need that. It's just a million pieces of shit all over my screen that I never use. Bah! Humbug! Anyway, the point is I like to use Vim, but it's not restricted to Vim; it just uses whatever editor is specified in the user's EDITOR environment variable, so if you use something else like Emacs or Nano you can use that instead just fine.
  • lsposts - Lists the posts in the database. Mostly this is for getting IDs and names, since the rest of the commands tend to use post IDs as their arguments.
  • publish - Publishes posts, specified by id.
  • rmpost - Removes posts, specified by id.
  • vipost - Edits posts, specified by id. This one is neat because it takes an arbitrary number of post IDs and allows you to edit an arbitrary number of posts. This makes editting things that appear in multiple posts a little easier to handle.

So... yeah, that's an overview of what's going on with this site. Once the blog engine is a little further along I can release the source for that. For the time being, the source is pretty embarassing.

polyphony and concurrency in ChucK

Nov. 28, 2010, midnight

I've been messing around in ChucK a lot more over the holiday break, getting some work done on coding for my Novation Launchpad. It's been very different from my usual business of web application developmen in some ways, but also very similar in others. It's a little difficult to explain the project in pure text, so I'll put up a video once I can get my hands on a video camera to more properly explain what the hell I'm talking about.

The best I can put it right now is that I'm working on a suite of audio tools that are very time sensitive and run concurrently, and that I've got something that resembles a physical version of Andre Michelle's ToneMatrix combined with a straight mapping of Launchpad keys to a sine wave oscillator, kinda like this Monome key mapping but a lot more awkward in the hands and completely awful sounding (I call this little program TouchPad). Most of the hard work today was in setting it all up to run multiple programs concurrently and handling the context switching on the device. Funny thing is, the way the architecture works out is similar to the client-server architecture of web applications, but in this case the client is the MIDI controller.

The end result for the user is being able to set a sequence up on ToneMatrix and then flip over to TouchPad to play over it, without ever touching the computer or even needing to look at it. It sounds absolutely awful, but it's been a great learning experience. For now, adventurous programmers with an interest in audio and a spare Novation Launchpad (what's niche about that?) can head on over to the github page and check out the source. Oh and Startup Weekend was rad. Wooo lack of follow-up.

ChucKPad at github

did I ever tell you about that half of a game that I wrote?

Nov. 28, 2010, midnight

This never got finished, but here's a game I was working on. It's a shoot'em up where you, the valiant WHITE SQUARE dare to traverse the infinite plane of BLACK VOID and rid it of the evils of RED SQUARE, GREEN SQUARE, and BLUE SQUARE. Really imaginative, I know. It was an exercise in learning about game programming and how to write ActionScript. Either way, you can check it out here. Fire red lasers to kill red guys, green lasers to kill green guys, blue lasers to kill blue guys. Any other combination will see your laser bouncing back into your face, killing you dead. Press 1 to fire red lasers, 2 to fire green lasers, and 3 to fire blue lasers. You can also hold down multiple buttons to fire multiple types of lasers at the same time, which makes it ridiculously easy. The enemies are much too small, and there's no levels of any kind; it's purely random. There's also a known bug where dying doesn't cause the enemy respawn rate to reset, so it just gets more and more impossible as time goes on.

Upcoming Startup Weekend - Nov 12th

Oct. 29, 2010, midnight

Startup Weekend will be back in NYC in a few weeks, kicking off on Friday, Nov 12th and continuing until Nov 14th. Looking forward to another round! The first time I went I had no idea what to expect. This time I'll be a little more prepared. Slowly but surely ideas are coming together...

first day with ChucK

Oct. 24, 2010, midnight

The first time I tried to dive into ChucK, the so-called strongly-timed Audio proramming language, I didn't get very far at all. The sounds I was getting were horrible to listen to, and the whole concept of scripting everything out ahead of time was so far removed from my saxophone experience that it was completely foreign; there was just nothing fun about it. Well I tried it again tonight, but the difference now is that I have a MIDI controller handy, a Novation Launchpad.

As I worked my way through the ChucK manual I stumbled into the MIDI section and dusted off my Launchpad. As soon as I got some MIDI info printed to the console I was excited; here was an audio environment that let me really play with my controller, something that gave me control in a way that made sense. I tried in the past to work with Ableton Live, but there was too much shit everywhere. If I just wanted to play my Launchpad like a straight instrument, each button a note, it was a headache. After a few hours of playing around with ChucK, going through some of the early examples, I was able to write a ChucK program that let me use my Launchpad like a horrible, velocity-insensitive electroluminescent tonebox the way I've always wanted to. Sure it sounds like complete shit, but it was fun to work on and it let me build something without any previous knowledge of MIDI or ChucK. If you have a Launchpad and you want to try it out, you can pick up the source here. So far it's monophonic, but that's as far as I could get for tonight.