Sunday, February 25, 2007

A handy Eclipse tip

I was reminded of this recently when I read it on Ted Patrick's blog. To be fair, I think I first heard about this from Paul Thiel... but.. uh.. forgot. . .

In Eclipse, be sure to close projects that aren't currently active. Go to your navigator, right-click on a project folder, and select "Close Project".

It turns out that Flex Builder will scan all open projects & decider whether anything requires compilation. This will bog eclipse on open -and on save!

Wednesday, February 21, 2007

"i am the musicplayer of my pocket calculator" (a pre-beta beta)

Something I've been messing with:


mp3-player!


You'll have to go here to see the real one. Enjoy!

(roll the cursor around to see the tooltips that should guide you in the right direction).

Update: I've cleaned up a couple of small things in the design. The app is still too heavy, and future iterations will have to be much lighter and faster.

Update 2 and 3: Updated the engine to the XSPF standard, added a load-progress bar, help text, credits, and included a rollover to XML provided ID if ID3 isn't available. Later: changed the division key to a "help" key.

Some notes: yep, this is not a design that allows for intuitive use. (Where's the "play" button? How do I make it go?) This is not a design I'd spring upon an unwary populace, but it's fun - and as an exercise for me, it's perfect. And the buttons are be skinned dynamically.. just drop them into a folder with the correct filenames and they will appear on the calc at runtime! So changing the "=" button to look like a "play" button at rollover is eaaaaasy....

Update 4: Whoa! This is featured on the scale nine frontpage! Thanks, Juan!
(and re-positioned this post to the top of the blog)
.

new blogroll - the scale nine website

I picked up Flex really only three weeks ago, read the Flex Training From The Source book and Actionscript 3 with Design Patterns, and started coding. I also picked up The ActionScript 3 Cookbook, which I can also highly recommend.

One of the sites that has been a great inspiration and resource is scale nine, Juan Sanchez' site/blog. Added to the blogroll! Read his information and collections of information on skinning Flex apps.

Saturday, February 17, 2007

Software Dev and Music Prod, pt. 2.5

Use what ya got .

When I first fell in with the local composers crowd, I'd join them once in a while at a Studio City coffee joint and we'd talk shop. This piece of gear, that piece of gear, this client, that project, blah blah blah. Inevitably, several of the guys would speak of the newest, latest, best recording equipment in reverant tones, and offer this bit of (to them) sage advice: "If you don't have [piece of gear x] and [piece of gear y], you can't compete. You suck. You'll never make it. Who are you fooling? You can't possibly be professional unless you own these gadgets! Go home! Now!" How odd that these guys, save one, did not produce even one product. Everything was, oddly enough, a "demo". This is akin to never getting out of "prototype" stage.

Hey, look. If I had the extra cash to buy the thing, I might. But the gear I own is not only good enough, it's excellent if you know what you're doing. And if you don't know what you're doing, learn what to do so that you eventually know what you're doing!

And, with one exception, the music out of my studio was far and away of better quality than the work of these gearheads. In the end, they depended on the hardware to make them successful, rather than depend on their knowledge, skill, and talent to get them to where they wanted to be.

Here's a great example. While we were working on a Gypsy Soul production, we needed a decent shaker and also a decent brushes-on-snare sound. We had no budget, and so we had to use what we had.

Use what ya got. What'd we got have? For one, we had Roman's production skills and bat-like hearing. For two, we had my sound-design and editing skills. And for three.. we had a cupboard full of spice canisters and imaginations fueled by gallons of caffe americanos. (two shots of espresso and hot water in a tall cup). We found a plastic canister of sesame seeds for our shaker. I still have it, and it's the best damn shaker I own. And it turns out that a bunch of loose change in Roman's corduroy pants pocket made the best brushed-snare sound if you recorded it in the right way. (See their CD "Superstition Highway"). In fact, our at-the-time odd recording style made it into EQ magazine! Go figure.

In software development, the same applies. Use what ya got. Anyone who's worked on an iSeries nee AS/400 knows what I mean.. Enterprise solutions using RPG-III and IV? Get outta here. I mean.. ouch. But we did it, from 1987 onward.

Now, to be fair, I did just spend two weeks learning AS3. And I have one killer laptop to go with my two used, old, slow, ancient laptops. So it isn't like I'm suffering here... But, using what I got, I am going forward with the skills I already have, learning more as I go. Might this mean re-engineering later? Well, maybe. But rather than wait for my RoR ship to come in, or for some expert in AS3 or somesuch to arrive at my doorstep, or for the free money to go and buy a monster server, an additional flatscreen monitor, etc. etc., I'm coding coding coding...

There are limits, of course. Lets make an agreement right now, shall we? I won't argue from extremes here - everything I write will take into account that there is always an exception to a rule, somewhere.. and there are always extreme cases that can serve as arguments contrary to what I write. Let's be clear - unless I'm way off about something, "thinking from extremes" gets us nowhere and provide little but anecdotal suppositions with a highly suspect probability of occurrence. For example "Yeah, use what ya got, but what if all ya got is a TRS-80 and a cassette recorder, and an old Hitachi black and white TV, huh? Huh? Huh?" Shaddup. Don't think or argue from extremes.

Software Dev and Music Prod, pt. 2

Alright, lets talk about some of these points I mentioned in the first part.

Work harder than anyone else you know. This one seems obvious. And yet...

This one isn't a surprise to anyone, I hope, in any business. Programmers have a reputation of being work-fanatics whose problem might be characterized not as needing to working harder, but to work smarter. (Although, I know of more than a few programmers who talk about work more than they actually work). Musicians on the other hand... ah, the easy party life. Let's put it this way: in three years, the four of us produced and published over fourteen high-quality, full-length CDs. Our immediate competition barely got four out the door. And they had more people working on their projects! Our secret? One example: Roman and I would start at 8am, finish at midnight or later sustained on coffee and ginger cookies and capped with drives around a semi-sleeping Los Angeles, reviewing our work on the car stereo and checking for anything that might be a problem, and start again the next day. For ten days to two weeks straight, we'd kick some serious studio ass. It paid off. It's a lesson I learned and have brought to the coding of my new project.

Work hard. It helps if you love what you do (and is necessary in my not so reasonably humble opinion), but as Vonnegut said about being a successful writer: "Put glue on the chair". This will propel you past your competition, who don't work as hard as you do and will end up wondering how you got so much done before they did.

On a personal note, it's been a good three weeks for me here. Since my last day at the old job as an employee, I've taken two weeks of Flex training, a review of OO design patterns, and re-read some Hume, some Hayek and some Postrel, and started coding my new project in AS3. A lot of work, to be sure, but still not enough.

(Uh, I also found out that Hume and Hayek are two of Virginia Postrel's philosophical influences. Hm. No wonder I like her work..).

(Sidenote: You can't go wrong with Hume, Hayek, Hoffer, and the occasional Plato. Trust me.)

Don't fear the all nighter, or the near all-nighter. Look, there are times when you have to produce. Better yet, there are times when you're on a roll and lose track of time. At some point, your eyes feel like they're made of grade-D sandpaper, your mouth feels like the cotton-harvest-boom of 1919, and your head starts to feel like it's floating a half-meter to your left. At these times, I think to myself "Man, it must be midnight!" and it is, of course, 4:30am. This is a great all-nighter, or if you choose to crash at this point, near-all-nighter.

However, there are times when you and your business need you to just go. Do it. Go until it's done. There's not much for me to say here, other than there is nothing quite like the wolf at the door to hone your focus, energy and commitment into laser-like concentrations. If it isn't.. uh, this kind of work may not be for you.


Don't forget to smell the flowers. I.e., Balance! Lest you burn out and die young, here's one I didn't follow my first time around: balance! Relax. Take time out. Don't forget to stop speeding, get out, and smell the marigolds. It's miserably hard sometimes, at least it is for this writer, since I can go go go go go business 24/7/365. Ask my friends.. I drive 'em nuts. Won't shut up, I won't. So a reminder to myself is to relax.. do something else, and find some balance. How you do it is up to you. Personally, I find that there are a couple of restaurants nearby with excellent wine selections, superb food, and very pleasant bartenders that I will visit when I need to get away, relax, and smell the merlots. And the pinots.


Be a mentor to someone. I know I didn't mention this before, but it just occurred to me. At the moment, I have a fantastic mentor. I got lucky is all I can say. And ten years ago, I was a mentor to two talented musicians who knew nothing or next to it about computers and their use in music production. I became a mentor to them and taught them everything I knew about computer music, and computers in music production. They're now experts in their own rights, and I'm very proud of them. They in turn were mentors to me, and from them I learned volumes.

When you teach, you also learn. Go for it.

Monday, February 12, 2007

quotes

Two from Ludwig Mies van der Rohe:

"God is in the details."

"Architecture starts when you carefully put two bricks together. There it begins."

And one from Frank Lloyd Wright:
"Form follows function - that has been misunderstood. Form and function should be one, joined in a spiritual union."

(And on that note, this book comes to mind)

Saturday, February 10, 2007

Software development lessons applied to music production, and music production lessons applied to software development, pt 1

Some background.

I became a professional programmer straight out of college, coding on the IBM system/38 and AS/400 (now iSeries i5 System i platform). In my spare time I'd code 3D animation in assembly language, teach myself C++, and later eventually HTML and all the web goodies.

And, after working for someone else for a few years, I decided I had to run my own business. There's no other way to describe the need to be self-employed other than as a need to be self-employed. And so, I struck out on my own and started a small company that contracted programmers (including myself) to IBM midrange systems shops.

Now also during this time, I had to have music in my life. I had to be a musician. There's no other way to explain this calling other than to say it was a need, a drive, and I had to do it. Simple, no? And so... while I was coding, drumming up new clients, learning new-to-me languages, and writing .asm code for an early-90s demogroup, I attended piano lessons and jazz ensemble classes and performed around town.

My apartment was comprised of a bedroom, a kitchen, and a stockpile of computers, technical manuals, synthesizers samplers and keyboards, many bags of coffee and a bottle of single-malt whiskey.

Hey, my senior project in college for my C.S. degree was writing my own MIDI sequencer on a fat Mac in 68000 assembly! Hello? 1986 on the phone for you, line one...

Music and computers.. huge in my life, and I didn't have the sense to pick one over the other. So I did both.

It was only a matter of time before I decided to start a second business, and that was music production and publishing. (It later became music licensing and sound design, and thus my first lesson of entrepreneurship: be willing to sail with the wind, and not against it).

After a few years, I noticed more than a few similarities between successful software development and engineering projects and successful music production projects. I'll share some of these observations in this article and in subsequent articles.


Choose the right people: find good people and throw out the rest.
I observed many horrible ways to run projects while I was a contract programmer, and a few good ways. You can learn a lot by watching, or being involved in, a disaster and that's exactly what I did - experienced disasters and so learned a lot! If you work in enough shops, you can very quickly learn what is and isn't good project management and practice.

My father's first advice to me early on when I had my own project to run was "Rule number one: don't mess with people". Er, he used an entirely different and much more colorful word that "mess" when he said it, but you get the drift. This brings us to the first lesson:

Find and work with the right partner(s).
Lets face it - no one likes to work for an [EXPLETIVE DELETED]. We don't always have a choice, of course, but if you can help it, avoid 'em. This also goes for the people with whom you work, and who work for you! My colleagues and I have a rule, decided upon sometime after our collective 38th birthdays: "No more working for/with [EXPLETIVE DELETED]s!" It may mean short-term lost income, but has not meant lost opportunities whatsoever. Another opportunity always seems to pop up.

What I noticed as a contract programmer was that most of the time, the projects that failed were run by said unpleasant personalities. On very rare occasion, someone was so smart and possessed with ability that you simply figured out a way to deal with their steel-wool social skills. A vast majority of the time, a single aberrant personality could sink a project very, very quickly. Ditto for music production: a troll in the control room usually meant disaster, or at the very least a lot of extra time (and money) fixing Mr. Troll's damage.

And in a small shop or group, or godferbid in a startup, it's completely deadly to the project/startup. So choose wisely. Find people who have similar values, similar goals, and are preferably smarter than you are in some areas of expertise. Avoid toxic people.. they're toxic. [DuH! -ed]

This is vitally important for a number of reasons, many of which aren't clearly tangible. Projects of any kind are incubators for stress, pressure, anxiety, doubt... do you really want to be harnessed to a complete jerk during these times? At one-in-the-morning the day before a launch or release? When nothing's working right? When you feel that all of the music or code you've just been creating totally sucks? And this may sound strange, but the ability to pick up the phone & talk to your trusted, respected, smart co-founder simply to hear "don't worry", or get a reiteration of the project focus, or blue-sky new ideas and/or narrow down the existing ones, or dismiss some doubts, is huge. At least to me, it is. And remember, you may find that you also provide the same occasional duty for him or her.

This also may mean cutting certain people out of your life: the nay-sayers, the "Yes, But Did You Think About How You're Going To Do [x]" advisers, the free-advice relatives, the leeches, the coat-tailers, and so on. Anyone who's a psychological (or physical!) obstacle between you and success - dump 'em.

Surround yourself with people you look up to, people you respect, people from whom you' d like to learn! There's a thought that "We become like the people with whom we relate", and I agree with that idea. Pick people who inspire you to be a better person, better developer, better businessperson, better musician. Keep the group small, and make sure your personalities work well together. Respect each other, and each other's skills and abilities. The weight of a project is nearly impossible to carry alone, so finding a co-producer, co-founder or partner is in my opinion very key to success.

I got lucky: I met a handful of talented, committed, brilliant musicians while we were all working with a complete lunatic. No, really, the guy was banana-nut bug$%#@ crazy. We cut the lunatic out of our lives and decided we'd all keep each other. We've been working together in music on and off for ten years now, and some of the best music production in independent music has sprung from our studios! Check out the works of Gypsy Soul and of Kevin Fisher to see what I mean. Roman Morykit of Gypsy Soul has been my producer and co-producer for years, and we work together extremely well. We all brought different knowledge and skills to the table - for example, while I taught everyone else computer skills and new project management techniques, they taught me music-production engineering skills, new work managment skills, and so on.

(I also found an excellent co-producer for the audio-effects library "Orchestrated Chaos". The director or a short film I'd scored proved to be another excellent choice for partnership in our sound-effects-for-television-productions project)

Early on, we all worked mostly from one studio, pooling our technical resources and our technical expertise, and most of what we learned is uncannily similar to agile software development. I'll talk more in detail about these in later posts. For you coders out there, isn't it interesting how some of these concepts overlap with "agile"practice, and some of the stuff the 37signals group talk about?


  • work harder than anyone else you know (which in our case was pretty easy): start early, end late. fear not the all-nighter, or the very-near-all-nighter.
  • use what ya got.
  • set boundaries (to what technologies will we limit ourselves?).*
  • be eager for change, be ready for change.
  • Descartes was right. But even so, don't forget about your instincts.
  • document everything.
  • don't be precious with what you've coded/recorded. Be prepared to toss it aside and move on: Hard Work doesn't always mean it's Cool or Good. And Cool doesn't guarantee it's also Valuable.**
  • tell nobody nuthin'. ("If you're gonna shoot, shoot. Don't talk")
  • work fast. quickly. fast. well, you know what I mean.
  • be flexible.
  • have a general project plan - a high-level design of what you want to do. When you end up doing might be different from your plan, but we had one notebook-page per song, and one notebook-page for the entire CD. Gypsy Soul had a stack of Cilette's lyrics to serve the same purpose, and even then they wrote some songs "on the fly" (see "be flexible").
  • take care of the people with whom you work.
  • no "ant-fucking". Splitting hairs. At some point, finish the task and move on. You can always go back, but it's preferable to go forward.
  • fear not failure. We learn by doing things the wrong way and then deducing the correct solution. If we already know how to do something, we're not learning, we're executing (this is not a manichaen dichotomy, by the way).
  • fear not execution. If you can do it, Do It.
* Too many limitations means no freedom. No limitations means no freedom.
**if you only knew how many songs we threw away after 18-hour sessions...


Some of the CDs made this way are here:

Friday, February 02, 2007

Thursday, February 01, 2007

sound design bragging and "LOST"

I won't post much about music and sound-design here because I'm spending most of my energy these days in the software engineering world.

But I'll brag a little bit.

Back in 2000, I and a co-producer created and assembled a library of audio effects for television use called "Orchestrated Chaos". Included in the library is a sound called "Howl1" that eventually was used in the howling, clanking sound-effect of the "smoke monster" from ABC's show "LOST".

And so, without further ado, here's the howl component of that smoke monster: Howl1

You can download it and use it for personal, private use only. Please don't distribute it, don't sell it, don't do something to it you wouldn't want done to your own work-product. It's copyright protected and etc etc etc.

If you do like it and want more information, click here to contact The Winogradsky Company, who handle my entire library of music and sound.