Sunday, September 14, 2008

Host unlimited photos at slide.com for FREE!

I, for one, welcome our new robot overlords...

This is indeed our Fearless Leader, Max.

Caption contest anyone?

Thursday, June 19, 2008

More cool stuff

More cool stuff, including music. When you arrive, click the "Network" tab.


There will be more to come, brought to you in python and in flex...

.

Labels: , ,

Wednesday, May 28, 2008

New cool stuff










So what the heck is this?

It's part of the latest project for Top Friends on Facebook.

I'll explain more later, but it's AS3 coded in Flexbuilder, and a part of our new Network Profiles.

Check it out!

By the way, I think the CPU utilization caused by this swf is too high. If you can do better, let me know. Or send me your resume. Or both.

Really.

Labels: , ,

Sunday, May 18, 2008

Top Friends News


Now that Paul and I are at Slide.com, we've been busy creating new stuff.

My latest is a humble, yet ever-so-cool Public version of the Top Friends News on Facebook. Given that Top Friends has between 1.5M and 2.5M users per day, the news feed is a fascinating cross-section of activity across the different Slide applications.

Paul's latest project is the new Top Friends Network page - if you're a member of Top Friends, on Facebook, check it out!

If you're not a member of Top Friends, join up and then check it out!



(By the way, my latest project for Top Friends involves ActionScript-3. Stay tuned.. I'll blog on that later).

.

Labels: , ,

Wednesday, May 07, 2008

Do not adjust your set

It's been a month since my last post, and since joining Slide, and I've kept myself too damn busy to blog.

At least I can say I've been reading some interesting material: this, for example.

I have some work to do - my last post managed to mix in "mise en place", The Shaw Brothers, and Brahms. For your entertainment, I'll see what other wildly disparate combinations of turns-of-phrase I can come up with in a new useful and informative post soon.

Labels:

Saturday, April 05, 2008

Changes

Well, you just never know where you may end up.

A few weeks ago Paul and I received an offer for the purchase of Just Three Words in the midst of several RFPs (Request for Proposal) for website and Facebook application development. We began to juggle the prospects of consulting work that would keep our rent paid through June at least and selling Just Three Words & proceeding to create a new product for our business.

After much discussion weighing our options, Paul and I decided to accept jobs at Slide.com.

I was resistant at first
If you'd asked me in mid-January whether I'd consider employment anywhere, I'd have scowled at you. I love being independent, and running my own company - both the technical and non-technical challenges were what got me out of bed in the morning and kept me out of bed until early the next morning.

Having said that, it was becoming increasingly likely that we'd have to take various consulting jobs in order to keep the startup afloat. This is exactly the situation in which I found myself in the early days of Gearhead Music, and was wary of making the same mistake twice - I.e., once you start to make money contracting it is very difficult to stop; and while you're working on someone else's project, you're not working on your own product. Neither the consulting nor the startup excel from the benefits of your undivided attention, and in the end consulting proves to be a trap since you really can't ever turn down a job.

The excitement kicks in
But a "real" job? I couldn't think of a company working for which I'd be happy. But in a casual email exchange a while ago, a friend at Slide.com mentioned that when I was ready to consider a job, come talk to the engineers there.

I know a few of those guys, and not only like them but really respect them professionally and personally and respect the work they do & their approach to solving difficult technical problems. "Hmm", thinks I, "this could be interesting, and worth the consideration".

So I agreed to an interview, flew up to San Francisco from Los Angeles for the day, and over the course of several conversations, started to get excited about coming onboard. Not only are the engineers at Slide sharp as hell and extremely knowledgeable, but also very hard-working. And on a personal level, I liked everyone with whom I spoke.

And the prospect of learning a lot more about python, about solutions to challenging problems of scale (when you serve as many widgets and apps as they do the challenges of scale become very interesting), and about creating products and solutions that just don't exist yet is what really got me fired up about considering employment with them.

By the end of the day I was on the fence, but very seriously interested in working with this excellent group of engineers.

And, in music if you want to get really good go work with people who are better musicians than you are. The same applies to engineering - work with people whose knowledge and ability surpass your own and so inspire you to achieve and improve.

Why this is a great opportunity for an engineer

Man, these people know their [EXPLETIVE DELETED]. It's been only one week and I've already learned techniques that make me a better engineer. There are few better ways to improve than when surrounded by other very smart people solving problems.

And the technical challenges the company faces with regard to application development, infrastructure, database and so on are red meat for any True Geek™. I obviously can't talk specifics here, but if you thrive on solving problems that few companies are required to solve and for which there are very few out-of-a-box solutions, send me your resume and I'll pass it along.¹ Slide does more than make pretty widgets - there's a lot of engineering going on in the boiler room that's just way too damn cool.

Why this is a great opportunity for an engineer with entrepreneurial tendencies

First, the obvious - Slide is run by Max Levchin who is one of the founders of PayPal - one of the few tech startups to survive and thrive through the tech crash. So not only is it very safe to bet that he and his executive staff know what they're doing, but he's a top-notch engineer himself with an intense entrepreneurial drive. A good kung-fu master to learn from if there ever was one.*

Second, this is a new market - social networks are still in their infancy, and it is probable that the speed of progress and opportunity will cause the landscape of the market to look different a year from now than it does currently. For any business-minded soul, the internet space in general is a once in a lifetime opportunity (analogous to what the chemical industry was to 19th century minds**), and within this space the social network market an opportunity within an opportunity rarely seen, as the reward v. risk is higher than in other sub-sectors of the larger market.

Conclusion
So, I'm very excited. I didn't come to the decision to join Slide lightly, and now that I'm there I'm very happy to be a member of the team. I'm working on the Top Friends application, and am just now finding where they put everything. I've been working in my own kitchen (so to speak) for a year and know where everything is. Now, in someone else's, I spent most of my time last week finding where the hell they put the can-opener. But soon, I'll have my technical, geeky mise-en-place all set and I'll be geeking-out in your Top Friends.

¹python, AS2, AS3, C++, java, whatever - the ability to solve problems and possessing intelligence are most important.


*Max is short for "Maximum", so you will work your ass off for this cifu (teacher) and frog-jump up and down the figurative temple stairs until your technical and entrepreneurial -fu are the best anywhere. My apologies to the Shaw Brothers for this analogy...

**And if your interests lie in additional areas but you still want to get involved in the interwebs, remember: both Brahms and Borodin were chemists, and they did some nice work in other fields ;)

.


Labels: ,

Saturday, February 23, 2008

Quick and Dirty Database Pooling in Django and MySQL using SQLAlchemy

As our Facebook application "Just Three Words" started to get rolling, we started to optimize our database calls.

The first step was to take a look at the ORM db calls taking the most time. Django has a facility to do this, by taking a look at the raw SQL Django is running. Once we did this and replaced the obviously slow calls with custom and optimized SQL, I started to look into some sort of database connection pooling for Django.

A friend suggested I look into, among other things, SQLAlchemy. There's a very good database connection pooling piece to SQLAlchemy (docs here), and after thinking about ways to write my own db pooling code based on routines I'd researched all over the web, I figured it was quicker and easier to use what was already out there. I could get pooling in place and buy myself some time to write a customized db pooling routine, thus not only getting what I specifically needed but also learning how exactly to write a db pooling routine!

(Of course, I haven't done that yet - part of the price of quick and dirty code that works is that the pressure is off to actually create a routine that isn't q&d).

We're using MySql, so I opened up django.db.backends.mysql.base.py and applied the code from the SQLAlchemy docs to base.py:


import sqlalchemy.pool as pool
from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
try:
import MySQLdb as Database
Database = pool.manage(Database)
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)

This wasn't enough, however, as SQLAlchemy didn't like the use of **kwargs at the time the connection is created. So I changed this:

self.connection = Database.connect(**kwargs)

to this:

self.connection = Database.connect(user=kwargs['user'], db=kwargs['db'], passwd=kwargs['passwd'], charset='utf8')


and voila! Quick and dirty DB pooling hack in Django for MySql implementations!

There are problems with this, of course, the most obvious being that I'm now branched from the standard Django trunk, that this isn't a universal solution & if taken to other database implementations violates DRY, etc. But: as a quick stopgap, and as a solution to an immediate need to speed up the user experience and keep them happy, it's pretty good.

(Facebook has an 8-second timeout for calls to your server. If 8 seconds passes and your server is still ruminating the nature of it's navel, the users see the White Screen Of Death, and they drop your app like it was an unpleasantly hot rock)

As usual, post your comments, criticisms, and cliches, and feel free to tell me UR DOIN IT ALL WRONG & offer suggestions if that's what makes you happy.

Labels: , , , , ,

Thursday, January 31, 2008

Hmmmm

The early bird catches the worm.

The second mouse gets the cheese.


Great minds think alike.

Fools seldom vary.


Time heals all wounds.

Time wounds all heels.


.

Labels:

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.

.

Labels: , ,

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.

Labels: ,

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.

Labels: , ,

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.

Labels: , ,

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

Labels: ,

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.

Labels: , ,

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.

Labels: , ,

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.

Labels: ,

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.


Labels:

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.

Labels: ,

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!."

Labels: , ,

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."

Labels: ,

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!

Labels: ,

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

Labels: , ,

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.

Labels: ,

Friday, July 13, 2007

Very very cool.

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

Labels: ,

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.

Labels: ,