Thursday, December 27, 2007

New Just Three Words stuff

Between November 1 and now, we've been re-building Just Three Words into a really deep, functional application for Facebook.

(It is a collaborative writing application as a game - you can only enter 1 to 3 words at a time until someone else posts their words).

And it's really cool. And fun! Paul's design really works well and is simple to use.

We're constantly improving the design, and changing the features based on user's input. One of the values we maintain is that we're in an ongoing conversation with our users. A "partnership" (not in the business sense of the word, of course).

They provide content, and we provide the means for them to create and develop their content. Most of the time, we take our best guess as to what will make the best experience for the users, changing or tweaking based on their input and on the metrics we collect & analyze. Other times, we create functions that are straight from user experience and the inevitable "You know what would be cool?" email from a user.

(We use both Google Analytics and our own metrics-collection, and spend a lot of time poring over the data)

One of the things that helps us, I think, is that we love our users. We're convinced we attract the best people on Facebook, and some of the most creative. We hit the jackpot, got lucky, whatever you want to call it - and I'm not sure who's more enthused: the writers for our application or us for our writers.

If you haven't seen it yet, go check it out.

.

New Year's Resolutions

What a year. Lots of change, learning, and it's all good.

In 2007, I:
  • Lost my job,
  • Ended my music publishing company,
  • Started a new web startup, built an entire web-application twice.
  • Stopped all work on the IBM iSeries & abandoned that company/career choice,
  • Re-skilled myself almost completely by learning python, actionscript3 & Flex, javascript, linux, django, and translated my DB2 skills to mySQL,
  • Created two facebook apps with Paul,
  • Ended the new web startup,
  • Started a new new web startup,
  • Met some amazing entrepreneurs and coders in LA and SF,
  • Did more all-nighters than in the previous 10 years combined
  • Had a great time.

Now, what about 2008. Hm. I hope it's as good as 2007 was - even better, building upon the foundations set this year.

Speed up your Facebook Django app

One of the things I loved about the iSeries was the easy, easy way we could toss a job to batch from the middle of an interactive session.

It is also one of the things I miss while coding in Django.

What's this have to do with Facebook apps?

Every call to the FB API costs time - from 280ms to 475ms on average - and the more calls, the more time. Where submitting some work really comes in handy is during processing after a user-gesture. Want to publish a bunch of news after the user clicks "BITE ME" and not have the user sit there and wait (and maybe experience an FB timeout) while you send minifeed news and notifications to 4,219 20 of their BFFs?

Use a thread. Really, use a threadpool, but I haven't coded mine yet. It doesn't take long to code, but the holidays grabbed me around the ankle and forced me to take time with friends, so there you go.

But the basics are here:

import threading

def sbmthrjob(cmd, *args):
class newThread(threading.Thread):
def __init__(self, cmd, *args):
self.cmd = cmd
self.args = args
threading.Thread.__init__(self)

def run(self):
self.cmd(*args)

try:
thread1 = newThread(cmd, *args)
thread1.setDaemon(True)
thread1.start()

except Exception, e:
print 'sbmjob exception: ' , e
elsewhere:

sbmthrjob(cmd, argle, bargle)



What I want to do is to have the thread come from a pool of already-created threads - I'll get to that soon.

Django and MySql character set tip

A couple of tips. The first one is from Leah Culver via her blog:

Python lesson I learned today - use “is None” when you want to check if something exists.
[...]

Here’s where it hurt:

def get_notes(qs=None):
if not qs:
qs = self.notes.all()
[...]

The correct condition is “if qs is None” like so:

def get_notes(qs=None):
if qs is None: # no predefined queryset
qs = self.notes.all()



Next one is all mine:

Our MySql implementation was set to default to character set latin1 and collation latin1_swedish_ci. No big deal, says I, I'll change that globally to utf8 and utf8_general_ci so we can handle non-latin charsets like cyrillic and greek.

But no go - when non-latin charactersets were used, the inserts to the database would fail. What the heck? Well.. the problem was that I created the tables before I changed the global default values from latin1 to utf8. The tables still had the old default character sets. Easy enough, just alter the table to use default charset utf8.

Nope. So even though the tables' properties would show ENGINE=InnoDB DEFAULT CHARSET=utf8 some of the text columns would still had a default charset of latin1.

Eventually, I did this and now it all works fine:

ALTER TABLE tablename DEFAULT CHARSET=utf8;
ALTER TABLE tablename CHANGE col1 col1 varchar(128) character set utf8 NOT NULL;
ALTER TABLE tablename CHANGE col2 col2 varchar(1024) character set utf8 NOT NULL;


I'm sure I'M DOING IT ALL WRONG, so make a comment if you just can't hold back.

Out with the third, in with the fourth

We seen the last of Good King Richard
Ring out the past his name lives on
Roll out the bones and raise up your pitcher
Raise up your glass to Good King John*
So, the old company is now dead, and the new company is moving along nicely. And more quickly than its predecessor. You can find us now at www.scoobandgecko.com

And now that is 4 failures behind me: two absolute wrecks, and two relative failures that could be counted as successes in someone else's book (just not mine). Great. Ok, learned a lot. Next!!

Why'd we kill the old project? The site-whom-what-we-must-not-name? It wasn't scalable, and it wasn't something that lent well to a strategy that included the social networks. And, there were people issues. Enough said.

So, stay tuned.. I'll keep you updated!


* Steely Dan, Kings, Can't Buy a Thrill

Saturday, October 20, 2007

New Facebook Application - Just Three Words

Paul and I released a fun Facebook application last week called "Just Three Words".

It's a tell-a-story mashup where you and all of your friends (and we do mean all!) put together a story three words at a time. Remember that childhood game where you pass the paper around and everyone adds three words? Same thing - but in this case we take advantage of the simultaneity of users' access to a web-app: nobody has to wait for their turn and the story build rather quickly.

If you have friends like mine who either a) are witty & clever, b) have wildly dirty minds, or c) both, you get some very, uh, interesting stories!

We'll be making small enhancements over the next few weeks to make the user experience more fun and engaging. Come on by and start a story or read existing stories, or better yet add your three words to a three word story.

Monday, October 08, 2007

Conferences

I just got home from attending two conferences - CommunityNext (organized by Noah Kagan and Johnny Lam) and GraphingSocialPatterns (organized by Dave McClure).

The latter is still going on - I had to get back to Los Angeles for some prior commitments, alas.

At CommunityNext, in addition to meeting some exceptionally bright developers & listening to their ideas about and experiences from developing successful Facebook applications, I listened to various presentations & observed: every successful developer/entrepreneur was quick to market with a product and quick to iterate new releases based on user feedback. In addition, they "failed" quickly - if an application didn't gain traction as hoped, they'd move on to a new idea.

I was very lucky to have the opportunity to speak with, among others, the developers of Free Gifts, Top Friends, Honesty Box, Nicknames, Audio Poke, Social Moth, one as-yet-unlaunched application, the CTO of Hi5, and representatives from UserPlane, Compete, FaceReviews, both Noah Kagan and Johnny Lam, and others. (If I didn't mention you here, gimme a shout!)

It was humbling to sit at a table with developers whose Facebook applications have user bases in the millions while mine has barely 1000. Lesson: Move! Build something else quickly, and iterate. And simplify! While there are users who think what I've built is cool and fun, it needs to be re-worked to allow for more social engagement - and it still won't appeal to a general population, but rather only to the music&sound-geek-crowd. So we're moving on to building other applications & will see what takes.

And if you have a chip on your shoulder as large as the one I have on my shoulder, being humbled sucks. So I won't be blogging much for a while.. I have a lot of work to do.

At GraphingSocial, which I was only able to attend for one day, I took the technical session given by R. Tyler Ballance of Slide.com. He reviewed a Facebook application he created specifically for the class (Why Are You Awesome?) , gave insight into some ways to build a better application (E.g., use fql), and presented an excellent walkthrough of how to get started. If you're interested in building facebook applications, watch the video once it's on the web. I suggest keeping an eye on the GraphingSocial website.

I also got to meet Dave McClure, who truly rocks. I've been following his blog for a while, and his "Startup Metrics for Pirates" presentation is a must-see for anyone building a web site or application, or even an intranet application since within an intranet, your "customers" are your employees.

Some technical notes from R. Tyler's presentation:
  • If you're building a facebook application, try to use fql instead of the apis. If you don't know what this means, email me or leave a comment and I'll reply - or come to the IRC channel for Facebook and ask anyone there: it's on freenode and is called #Facebook.

  • If you're working in python and using the excellent pyfacebook module, I'd suggest adding cjson to the code. The module is written to use simplejson, but cjson is much faster. What I did was to try import cjson and fall back to simplejson on an exception. If you're using django, pyfacebook is the way to go. Also, I prefer to use pyCurl to urllib2 for heavy http work.

  • Learn to love the Facebook developers wiki.

Friday, September 07, 2007

Doing this at 42

Ok, I'm not the normal web startup guy, as I'm 10 to 20 years older than your typical startup geek.

Who else out there falls into the category of 40+ web entrepreneur? Leave a comment & share your experience.

Some of my thoughts:
  • Prior business experience helps in some ways, but actually hinders in other ways. I won't make some of the same mistakes I made with GHM; but some of "business as usual" in the non-web-commerce world has little relation to or analogy with the web-commerce world.
  • Learning new technology, a new platform, and new programming languages takes more work that it seems to have taken when I was 20-something. What I thought I could accomplish in 3 months took 5 months. Has anyone else experienced something similar?
  • It seems that everyone around you can code more quickly and produce output more quickly than you. Darned kidz...
  • The business "learns" are as exciting as the technology "learns"; an opinion that doesn't seem to be shared by many of the under-30 geeks I've met. Anyone else find this as well?
Most of my complaining and kvetching* is about how long it is taking me to produce good code and the website/product. I'm not easy on myself, and my expectations are high. It probably doesn't help that the guy I really admire and look up to is one of SV's most notorious workaholics! I get that everyone has their own pace of learning, but I have no point of reference here. I hear of people picking up RoR in a week and launching a website six weeks later. And why the hell am I worried about this? Why is this an issue? Is my hour over already? You take checks, right?


*it's like complaining but much, much more.

Things they don't tell you, and some things they do

When I asked a friend for advice on how I could better monetize my music publishing business, he responded by telling me to get out of it and start, or join, a web commerce startup. And since I can code and have been hacking in some way or another since childhood, I took his advice and did just that.

We then discussed what I was in for, and he described some of the consequences of the life I was about to choose (again).

Here's a list of stuff I was warned about, or have already experienced in my other business, or am discovering and experiencing now as I put all of my time and energy into making something useful, beautiful and cool for the web:

  1. Your social life will come to an end. Yeah, well, something has to suffer when you spend a lot of time working, and social life is it. To be honest, when I was getting a music catalog put together at the start of Gearhead Music (GHM) I was in the studio all day, every day, and had little social life then. So this isn't new to me.

    What I'd forgotten about this time around was that your friends & family don't really understand that yours is not a M-F, 9-5 lifestyle. Some don't seem to take it kindly when I consistently cancel Friday-night pub meetups, or can't talk on the phone for a few hours "after work". My solution is to find friends who "get it", or who have businesses of their own. And, when I am spending time with them, they have my 100% attention.

  2. Advice. Boy, you get all sorts of advice. Luckily for me now, with GHM I listened to and took all sorts of bad advice from all sorts of people. I learned my lesson then, and painfully. This time around I listen to advice from people in the business whom I respect and from other entrepreneurs. Uncle Freddie the plumber? Not so much.

    Examples of bad advice? "Don't ever quit the day job!", "Make sure you write a full business plan before you do anything", "You can't start with less than $2mil", and my favorite "Don't do it. Find a job somewhere that's safe." Excuse me while I go puke now.

  3. The emotional roller-coaster. Yeah, well, be prepared. But it's not different than working for a corp - the experience is just compressed in time. While working in a cube-farm, you may be depressed for a week or two, then content for a week, and excited for a day or a few hours. In business for yourself? A month's worth of emotions in a 12-hour period! Ecstatic at 9am, mood indigo at 3pm, excited at 10pm, exhausted at 1am. Rinse, repeat! Neato! Hey look Ma, I'm bipolar!! And I'm told that the amplitude of the emotional sine-wave only gets greater from here. Coool. That being said? No complaints. I still love what I'm doing.

  4. Do what you love. This one is easy.. if you love it, do it, and have fun. Ask yourself the hard questions: Do I love this, and am I having fun?

  5. No more assholes. Make a decision to minimize assholery in your life as much as possible, lest #4 above become impossible and you can't have fun.

  6. No more idiots (corollary to #5). There are plenty of idiots out there. Stay away from 'em. My favorite is the coder-as-couch-potato idiot. The one whose idea of "working from home" or "starting a business" is to turn on the TV, poke at the laptop a few times, troll for hotties on MySpace, and then walk out for a smoke every ten minutes. Followed by a deafening volume of advice. Followed by a litany of excuses in pseudo-tech-speak about why his web project isn't complete yet. Obviously, don't hire these buffoons. But in addition, get away from them as quickly as possible. While they might be tolerable in doses when you're not trying to start a business, they're utterly intolerable on the days when you feel slightly like Sisyphus. There is no room for morons, and this becomes painfully clear when starting a company - as I have discovered. And the IT world is fill of them. Don't believe me? Take a job at a large mainframe or midrange shop.

  7. One thing I wasn't warned about - my wine consumption has increased. Wow. Gotta be careful with this one, of course. Start a business, drink more wine. If it isn't a law of nature, it oughta be. However, slow-burning money means fewer trips to Bev Mo, or Sam's. So at least there's that control in place!

  8. Do Not think from extremes, and don't work with anyone who does. At the end of iWoz, Steve Wozniak's autobiography, he mentions that engineers should, and must, see things in shades of gray. Most people it seems see and think in black-and-white terms. This is what a colleague of mine calls "Thinking from extremes". Drives me nuts, frankly. It's is also called building a "straw-man argument" when in discussion. I'm tempted to file this under "no more idiots. And as far as I know my experience with straw-man conversations might be due to my working in the music and music-related business for so long - a biz that hardly attracts the best&brightest minds. Regardless, it's a habit that's deadly to engineers, or anyone in a creative field. Absolutist thinking, extreme positions, incorrect inferences, misrepresentations.. leave that to the gossip bloggers.

  9. Back up your work.

  10. Don't abuse coffee. Oh hell, NOW they tell me. By the way, did you know Peet's delivers?

  11. People you meet will not understand what you do or why you do it. This is close to #1, but as I've heard it from multiple sources, it bears repeating. They'll admire you and think you're nuts - all at the same time. Deep down, they might be thinking they wish they could do it if they only had the knowledge/guts/$2mil "everyone" knows you need before you can get started. I dunno. I do know that, outside of other geeks, the #1 questions I get are "Aren't you scared?" and "What are you doing for money?". Why, using the green paper stuff everyone else is using.. I tried using oak leaves, but Ralph's didn't seem interested in them.

  12. There are days it will feel incredible. That's great. There are days it will feel hopeless.. just keep going! Also from multiple sources. Enough said.. and good advice this one.


Saturday, August 18, 2007

Six Months !

Hey, my company's six-month anniversary came and went and I forgot to blog it. We started this journey on Feb 14th of this year. We're not as far along as I'd like, but given that I started this adventure with a seriously rusted set of technical skills, well.. maybe I'll learn to give myself some slack.

My original plan was to have a Flex prototype up and working by May 15th. That target date flew by and I had it ready by about June 20th.

Our next milestone is to have an alpha launch by Aug 31st. After that, we shall have weekly miletones and we'll "iterate, iterate, iterate"!

Most days I feel like I can't work fast enough, and that this is taking way too long to get into alpha. However, looking back...

On Feb 1, my tech skills were limited to the RPG procedural language, DB2 (and SQL), midrange architecture, HTML, and some hacking experience with linux, assembly, C and java. from 1994-1996. But I was pretty seriously rusty in anything outside of RPG procedural programing and relational database design and implementation using DB2, SQL, and DDS.

Since then, I've learned Flex and Actionscript3, javascript, python, django, more modern HTML and CSS practices, apache server administration, object-oriented techniques, MVC framework, some RoR (not much, but enough to hack through it if I had to) and coding for the Facebook platform. I'm no expert or guru obviously - but enough of a generalist to competently build, and to keep learning.

I did it by doing - building some mp3 players, building our prototype in AS3, building a Facebook app in django and FBML, and so on.

In other words, I hacked. And made countless mistakes.. boy, my original AS3 code is ugly! Wow. Unsightly. But with help, and advice from more experienced coders (thank you all !), I've re-written most of it using the Cairngorm microframework for AS3 and the django framework & javascript for XHTML.

I'm taking this moment to pat myself on the back. Because compared to damn near everyone else I've met in tech circles, I've felt like an idiot!, but looking at the last 6 months' work as I've written it here.. I gotta say: not bad. I still want to work faster, and more efficiently.. but that will come.

Tuesday, August 14, 2007

Jeremiah Owyang on Web Strategy and Facebook

"If you’ve not already figured it out, the corporate website is becoming less relevant, and web marketing (and support) has spread off your domain and google results. You also know that prospects trust the opinions of existing customers (who are ‘like them’) far more than marketers, and Facebook let’s these communities of practice assemble, your brand is decentralized –embrace!."

Saturday, August 11, 2007

Doc Searls on Advertising

"Advertising has always been woefully inefficient. Improving targeting and making advertising accountable by counting click-throughs does not solve the problem that advertising has always been an exercise in guesswork. At some point the guessing ends — not by absolute improvements in targeting, but by the creation of new methods by which demand finds supply. These methods will be anchored in better tools for customers, and better means for sellers and intermediaries to satisfy demand by connecting to better-equipped customers.

The Net revolution has always been about radically improving the connections between demand and supply, and about equipping profusions on both sides of the relationship — while reducing intermediary costs and frictions in the direction of zero.

As a term for describing this development, “commoditization” is a misleading failure. Roles are changing far more than “content” — a term which itself misleads by reducing the informing of people to deliverable commodities. People still need to inform other people. More ways to do that will emerge. There will be business models there. Supply and demand will find each other. We need to figure out how to make new and better money with new and better roles. Advertising will still be part of that picture, but it won’t fund the whole thing."

Thursday, August 09, 2007

speechless

I was at the Twiistup 2 event last night in Venice, CA and had a great time hanging out with SoCal geekdom. The tech sector is exploding down here, and it's damn exciting.

I have no voice left, and am just getting my coffee, so I'll blog more about this later. But suffice to say it was cool, and there's a lot happening that you should check out. Among others, take a look at Elephant Drive, Fafarazzi, Geni, Teleflip, Beat9, Goowy/YourMinis and Verse Studios.


(uh, and oh yeah - that wasn't Bono. Sheesh.)

update: Forgot one... sorry about that!

Monday, August 06, 2007

Self-Expression Advertising


What is Self-Expression Advertising?

It's a form of advertising by means of self-expression, of course!

"I like this/I am this" is the key concept here* - and it's not a new concept. If I identify with a certain product strongly enough for whatever reason - aesthetics, prestige, etc. - I'll be more than happy to wear their t-shirt, or jacket, or whatever with the big 'license plate' logo. Manufacturers and rocks bands have known about and marketed this way for decades (see the designer products markets), and now web advertising is finally catching up.

Allowing people to choose their ads, giving them incentive and making it easy & fun to do so and making the process a vehicle for self-expression, is a great way to advertise on the web.

Advertising then becomes a form of self-expression and a conversation between the viewer, the content provider, and the vendor - the relationship here is probably complex, and I'm toast at the moment after having been coding all day, but I'm right. Don't argue, we're good to go on this one.

This, my friends, is gonna be huge.



* from "The Substance of Style", V. Postrel

Saturday, August 04, 2007

Learning the learns

I've been learning the Facebook platform these last few weeks and before that I was getting our prototype into a state ready for review. Coding day and night, and as Paul put it the other day "learning the learns". I knew I'd need a widget strategy for our product and as soon as Facebook launched their platform last May I quickly knew that FB was going to play a big role in that strategy. As soon as I returned from my last trip to SF a couple of weeks ago, I jumped into learning the Facebook platform markup language (FBML), and really started coding in earnest with django rather than with PHP.

Oh yeah.. lots of learns. Re-tooling my rusted tech skills to actionscript, javascript, python, linux, and apache has taken longer than I'd hoped (three months to learn it all was unrealistic!), and developing while you're learning something new sometimes feels like you're trying to ride a 10-speed in molassess.* I'm used to developing very quickly on an iSeries, and so have had to change the expectations I place upon myself as I now produce code more slowly; some skills translate from my former hacker life - on the one hand I can design a database, normalize it in my head, and get it modeled & implemented very quickly. On the other, I'll make basic mistakes in code that put me behind schedule by days, or I'll hack together programs that require later re-design. My debugging skills are getting back up to top quality, which is good, and I know of more efficient frameworks now that I seldom needed on an iSeries.

I commented to a friend that music production was a much faster process than consumer web product development. His reponse was that it wasn't - just stick with what I'm doing and eventually it'll be as natural as walking. He's right, of course - and what I should have said was that music production feels like a faster process.

However, all this being said - back in January I had no idea how to code in as, js, python, how to use django, or how to develop an application on Facebook. Now I can do all of these things, and even launched a small app on FB the other day. I gave myself one week to get it functioning, and another week to polish it to a rudimentary state for launch. I'm not really taking advantage of the platform's incredible access to a huge social graph yet - that's by design - and the program I created is at the limits of my javascript expertise as of last Friday. But as I learn, and as users respond, I'll enhance the app, change it, and connect it further to points of engagement into FB's social graph. At the moment I'm not proud of it - the UI still needs work, and the overall functionality will be improved as I figure out how to do what I want, and how to implement what Paul has designed. (Hint: It's cool!).

I attended the L.A. Facebook Developer's Garage last weekend and asked a couple of people to "beat the crap" out of my app - in other words, review it with a critical & professional eye and offer constructive criticism. Thanks to Max, Kareem, Ryan and Otis for taking a look and offering said criticism. As a result, I changed the program and am much happier with the results. As I built my app, I paid no attention to flow, or design - a HUGE contradiction to my usual development philosophy: design first, then technology. However, as an exercise to learn some hacking skills, I broke my own rules. Jump into the code, quickly, and start swimming.

I'm looking forward to getting back into Flex, but have been having a blast with django and python. This stuff is very cool. Once I'm back coding in AS3, I'll be implementing the cairngorm framework, which is a very lightweight MVC microarchitecture that provides a very easy-to-maintain framework on which to hang code. I'll never go back to coding RPGLE on an iSeries, ever again if I can help it. While the iSeries is a fantastic piece of hardware, and I'd love a new one with a linux partition the size of Montana, I can't go back to the mind-numbing tedium of 1980s-style shitcode.

I'm also looking forward to more of the business stuff. Unlike many hackers I've met, I like the business work of business. But in the meanwhile, I'm getting closer to the point where coding for the web is as easy as walking.

If you're an as(2 or 3) or js coder, and interested in some side-work, send me an email.

*Orson Welles is alleged to have said that working in Hollywood was like 'trying to ride a tricycle in a barrel of molasses' or words to that effect.

Thursday, June 21, 2007

Eclipse 3.2 crash and solution

Are you working on a big project in Flex Builder, or have several projects open at once? Is Eclipse 3.2 giving you woe and grief by running out of memory and crashing often?

If so, friend, I used to be just like you, until I searched the web and found this answer that is working fine so far:

In your eclipse.ini file, add the following line:

-XX:MaxPermSize=128m


My .ini file looks like this:
-vmargs
-Xms40m
-Xmx1024m
-XX:MaxPermSize=128m

Tuesday, June 19, 2007

Finally

After coding like a madman, re-coding like a madman to correct learning-curve mistakes in AS3 and in python, getting software installed on the server, reading tech manuals, coding experiments, late night coffee-fueled code hacking turned to early morning greet the dawn coffee-fueled code hacking... after all of this I finally have a decent prototype in Flex up and running!

Last week I demo'ed it for some friends, who actually gave it a thumbs-up. They didn't say "It sucks", which they would tell me if they thought it sucked. So it doesn't suck!

About halfway through the coding of the proto, I switched my approach from building something for me to use to building something everyone else in the world to use - something easy and elegant and way &%$#*&% cool. This approach was confirmed by an email from a mentor-type friend (Mr Mentor) who suggested I narrow the focus of the product down even further, and do NOT build for myself - I'm a geek, the vast majority of the rest of the world are not, so what works for me will annoy the hell out of them - imagine my users, become a user-advocate, and go from there. Think of and build for them, not for me.

And I'm halfway through The Humane Interface by Jef Raskin, a must-read for anyone developing machines (soft or otherwise) for humans. *

So yeah, OK, I get it.. understood and gladly. I love the idea of being a user-advocate, since it isn't very far from being a teacher. And when I was traveling around the country for Softlanding, I was teaching -- placing myself in the shoes of the student and drawing upon whatever common experience I could to communicate the understanding of certain ideas, followed by the understanding and usefulness of techniques in and of the software. Creating usable user-centric software isn't so far off from that.

That being said, yesterday Paul and Charlie and I finally got to talking about the prototype, and criticizing the hell out of what we have so far. We meet this Weds to discuss what the UI should look like, considering all of the use-cases and not just the handful I started with when I was building the infrastructure of the thing. (MVC of course, so changing flow and cosmetics won't be too painful). The UI of the "back office" piece needs improvement/overhaul, but I expected that. It seems that none of us are overly precious with our work, so we're critical as hell of every little piece and more than willing to change it so it works.

(There is a fine line between engaging in perfectionism and engaging in ant-f*****g, but so far we're on the safe side of that line).

So, much more work to go before an invite-alpha launch, but soon.. soon Igor, soon the monster will rise....

***

I read this yesterday: Why Not To Do A Startup, Part 1 and it didn't discourage me. Depressed the crap out of me, sure, but I'm not swayed from my intentions here. While I even now have the occasional frightful dream about running out of money and having to return to the hot furnaces of iSeries dev work, in my pajamas, a day late for the final exam, I read it and came to the same answer I came to when told pretty much the same thing by Mr. Mentor - "I can't NOT do it". (Of course, Mr Mentor also told me to make music my hobby and get into the interwebs business, but I think he meant work for a startup, not create one. Not sure.. I leapt pretty quickly into creating one and may have missed the last memo).

I feel the same drive, the same intensity now that I felt when I started the music biz. What I do NOT feel is the same sense of blindness; the music biz failed, in the end, and the lessons I learned there are being applied here. That in and of itself is a pretty good bit of light (and enlightenment). And - Failure measured in monetary terms - it was a success in some other ways.

(In short: while I had incredible distribution of music on TV, I was monetized vertically - two or three huge corporate vendors owed me (lots of) money. What happens if your big enterprise customers don't pay, for whatever reason? Your company dies, that's what. I finally got paid, years later, after much learning and pain.).

Drive. It's a big one. As is the utterly deep-seated, non-rational yet unshakable belief that I'll be successful, no matter what.** And "L'Audace, l'Audace, toujours l'Audace!"

Now, what's it like to do this at age 42? Uh.. more on that later.



*Books I suggest very highly:
The Humane Interface
The Substance of Style and The Future and its Enemies
The Road to Serfdom and Individualism & Economic Order and anything else by Hayek
The True Believer and anything else by Hoffer
A Treatise on Human Nature
and anything by Mark Helprin. especially this, this and this.


** Some people call this delusion, naivety, etc. I call it a very good way/method to skewer fear right where it sits and be done with it. How do I know I can do it? I know - the rest I'll learn and figure out, and ask for help.

Monday, April 23, 2007

new mp3 player

I needed a break from my project, and so finally took some time to create a prototype of the easy-to-use, simple mp3 player I'd been thinking about. It's over there, to the right.. black.. says "MP3" in nice, clean, mid-century-modern lettering.

The background will (should!) change every time the widget is loaded, choosing randomly from one of four background images.

The next step is to display the CD cover art when the song is loaded and to include the little VU meters that respond to the audio. I'm not so sure people care about seeing the CD cover art, unless it's also the image for a link to a store from which the music can be purchased. What do you think? Is the CD cover art important to you?

I do think the volume buttons need to be instead a volume slider, and some sort of visible VU meters needed so as to give a visual clue as to volume levels.

But you look at this, and think "Yep, it's an mp3 player".

Sunday, March 25, 2007

work work work work work

This weekend, this very weekend in which we are right now, is the first weekend in over five weeks that I'm not working.

Just over five weeks ago, I started a new company.

This was just after the two-and-a-half weeks that I spent learning some new programming skills and a new development platform that isn't based on an IBM midrange system.

So I haven't taken any time off in over a month, until now.

(pause for dramatic effect here).

I have no idea what to do with myself.

It's a strange feeling! I love working for myself - this is my third company in sixteen years - and when I work, buddy lemme tell ya I work. So for a over a month I've been doing 12 to 18 hour days, an all-nighter or two for good measure and still feel that I can't seem to work quickly or efficiently enough. And I jump out of bed every morning eager an excited to get going. Drink coffee, get to work. That simple, and exactly how it should be. So now, when I give myself "nothing" to do, I have no idea what to do. As in: have a life. What? How?

So yesterday and today have been "have a life" days. "Smell the flowers" days. It's important, I know, but still... it feels strange. Anyway, I had no intention of sitting in front of my computer, but here I am, and for the first time in eons adding to this blog. [ed note: this is crossposted from my other, older blog] Not exactly "having a life", but in a few I'm up and out and going somewhere interesting. Or at least somewhere with beer in clean glasses. Maybe I'll take my camera - the one that uses real film - and go shoot things.

I can't bring myself to blog about politics. I'm still burned out on blogging about politics, though I'll still talk about it off-blog. It's all a mess - what more is there to say?

So, today, a rare day off. Then tomorrow, back at the desk working to my heart's content.

Friday, March 23, 2007

Creating a new hit-area for a button in Flex Builder 2.0.1

I ran into this yesterday, and thought I'd put it up here & share with the class.

I have a button in mxml:

<mx:button x="-22" y="294" id="reallyBigButton" stylename="reallyBigButtonStyle" buttonmode="true" usehandcursor="true" creationcomplete="addHitArea()" />
It's really big, this button, and I only want a portion of it to be the hit area. The button is skinned via css with a .png file, and it covers about a sixth of the pixellated real-estate. Not good.

So notice that on creationcomplete it calls a function addHitArea().

That function looks like this:

private function addHitArea():void{
var newHitArea:Sprite = new Sprite();
newHitArea.visible = false;
newHitArea.mouseEnabled=false;
newHitArea.graphics.clear();
newHitArea.graphics.beginFill(0x000000, 1.0);
newHitArea.graphics.drawCircle(117,216,80);
newHitArea.graphics.endFill();
reallyBigButton.addChild(newHitArea);
reallyBigButton.hitArea = newHitArea;
reallyBigButton.validateDisplayList();
}
Notice a couple of things: the new hit area doesn't need to be visible. And it should have mouseEnabled set to false. You want the button to reference the button sprite for size and location, but not to capture control of any click events. Click events are still captured by the button.

Why the graphics.clear? I'm not sure, other than good-practice. Clean the board before scribbling, I suppose.

Keep in mind that the coordinates of the hitarea sprite are relative to the coordinates of the button, not of the stage or the button's parent.

Saturday, March 17, 2007

as3syndicationlib and ATOM feeds

This needs review, but for anyone else reading Atom feeds using the as3syndicationlib, you may have found that feeds with no content tag for an entry, but with the summary tag, don't process correctly. I.e., feeds that use summary and not content don't get processed as intended.

As a quick fix, I modified Entry.as in src.com.adobe.xml.syndication.atom below the comment block at line 194.

I'm still working on this, and so this code needs work. It's not the prettiest, but it's a start. Please note that indentations didn't make it from eclipse to blogger.

/*
*JDR -- Changed assignment to content.
* Also, detect for or tag usage. Blogger uses summary tag, but feedburner et.al. use content tag.
* I'm also loading the same source for XHTML or not, since ATOM feeds with XHTML I tested
* don't have the x.atom::content.xhtml::div contained.
* And, type="html" is causing >>if (content.type == "xhtml") to valuate true in the debug session.
*
*
*/
public function get content():Content
{
var content:Content = new Content();
content.type = ParsingTools.nullCheck(x.atom::content.@type);
content.src = ParsingTools.nullCheck(x.atom::content.@src);
if (content.type == "xhtml")
{
// this line needs to be changed, but for now, return flat content.
content.value = ParsingTools.nullCheck(x.atom::content);
}
else
{
content.value = ParsingTools.nullCheck(x.atom::content);
}
if(content.src != null || content.value == null)
{
content.type = ParsingTools.nullCheck(x.atom::summary.@type);
content.src = ParsingTools.nullCheck(x.atom::link.(@rel=="self").@href);
if (content.type == "xhtml")
{
content.value = ParsingTools.nullCheck(x.atom::summary);
}
else
{
content.value = ParsingTools.nullCheck(x.atom::summary);
}
}
return content;
}


See here for more info on Atom.

Thursday, March 15, 2007

AS3 object mistake

Most of my experience in coding is with a procedural language on an IBM iSeries. And on occasion I fall into old habits in as3. For example, I coded:

var var1:Text = new Text();
var var2:Text = new Text();
var1.text = "Var 1 text";
var2.text = "Var 2 text";
trace(var1.text, var2.text);
var2=var1;
trace(var1.text, var2.text);
var1.text="Some new var1 text";
trace(var1.text, var2.text);

and didn't expect these results:

Var 1 text Var 2 text
Var 1 text Var 1 text
Some new var1 text Some new var1 text


Oops. Old (and bad) habits die hard. In RPG, I'd expect the system to take care of instantiating a new object, so a change to var1 didn't also change var2. I know better in as3, but it had me puzzled for a few minutes. This works:

var var1:Text = new Text();
var var2:Text = new Text();
var1.text = "Var 1 text";
var2.text = "Var 2 text";
trace(var1.text, var2.text);
var2=var1;
trace(var1.text, var2.text);
var1 = new Text();
var1.text="Some new var1 text";
trace("Final var1: " + var1.text, " -- Final var2: " + var2.text);

and yields:

Var 1 text Var 2 text
Var 1 text Var 1 text
Final var1: Some new var1 text -- Final var2: Var 1 text


Note new object instantiation before the last "Some new var1 text" assignment.

Learning curve.

Wednesday, March 14, 2007

One month

Today marks one month of working on my own company! After two and a half weeks of training, teaching myself Flex and AS3, and remembering half of what I've forgotten in python, I started actual work on Feb 14.

One month. Blew right by. But the long days and weekends are paying off, though slowly.

In the meanwhile, here's another little tip for FlexBuilder 2.0.1: before you refactor any code, make sure you remove all watch expressions from the debugger view. I was able to freeze eclipse in subsequent debug sessions after I changed a couple of properties in a class while said properties were being watched. Removing the watch expressions from the debug view & replacing them to the debug view when needed seemed to clear up the problem.

Sunday, March 11, 2007

flex theme use

I recently needed to "grey-box" something - I needed to check the flow from use-case to use-case throughout the app. Rather than use the standard flex themes, I used Juan Sanchez's "Shadow" theme.

Usually we think of themes and skins in terms of final product - at least I did until about a week ago - but there's a call for their use in any situation. What impression do we give our audience about the product? What are we communicating about our attention to detail, our understanding of aesthetics, and what first impression are we inspiring people to infer, or feel?

I plan on using more themes as different situations arise, and I use "Obsidian" for my own personal tools just because I like it & it feels good to me. And of course content and functionality need to be high-quality, but I've found that in many cases there are more than a few people in a room who, when asked why they went with our product (back a few months ago when I had a job) was that "it just felt right". Hm. Not an answer Descartes would be happy with, but a valid and valubale answer none-the-less.

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.

Wednesday, January 31, 2007

Re-tooling

I spent my December vacation in study: read a bunch of manuals, brushed up on my javascript, my python, played with RoR for a day or two, coded a bunch of little things in javascript learning the DOM. It'd been a while since I'd used javascript.. a long, long while.

(And helped out a friend who needed music for his pilot. No joke.. three hours to compose and record the titles-music for his project. Yikes.) *

Now, I'm in the middle of some excellent, and fun, training in Adobe Flex. Great stuff!

I'm enjoying learning these new tools. Not only do I believe that it is important to keep the mind sharp by learning new concepts, new techniques, and new languages but it keeps me going.. this stuff is fun.

In the end, of course, they're all just tools. Some more enjoyable to use than others, but useful only for creating solutions to problems. For the holy-grail-description of the problems inherent in software engineering, read the famous No Silver Bullet essay by Frederick Brooks, Jr.

First!

Ah, the first post on a blank blog. So clean, so pristine...

Well, not anymore.

So, I'm back on my own, starting up my third company in 20 years. It's been a wild few months leaving my previous employer, and I'm glad it's over and done and I can now concentrate on this new venture!

(The first two companies were an IBM iSeries consulting company, and a music licensing company. I closed the consulting operation in 2002, and the music licensing company still exists and is still raking in the nickels).

So far, I've spent a little bit of money, but have "re-capitalized" my existing assets. My old laptop is now my development server and backup system. My new laptop is my development machine. My existing office will do for now, with a new printer as the old one died in a fit of grinding noises and ill-smelling smoke. Web-based project software and whatever else I can use that's clean, fast, and low-to-no-cost is the way to go.

The key here is "slow-burn" of the cash resources. Aside from a new laptop, which I needed anyway, the most expensive bit has been a set of new technical manuals and guides.

So far, so good. I'll post here as things progress and I have time.

And so, dear reader(s).. all 3 of you.... watch this space.