FutureRuby: July 9th – 12th, 2009

First Came RubyFringe

RubyFringe logo

I can’t talk about FutureRuby without first talking about RubyFringe.

Last July, the fine folks at Toronto’s Little Coding Shop That Could – Unspace – created one of the best and most memorable conferences I’ve ever attended: RubyFringe. RubyFringe made its mark by taking the standard geek conference formula and turning it on its head. Among the things that distinguished it were:

  • RubyFringe was intentionally a small conference, with its attendance capped at 150 attendees.
  • No sponsors!
  • It had a single conference track, and all presentations took place in the same room.
  • The presentations were vetted carefully by people who really, really, really loved the Ruby programming language. This meant that we got interesting speakers and no vendor pitches. We felt Damien Katz’ pain when he talked about his situation prior to creating CouchDB, grooved as Nick Sieger talked about the parallels between jazz and programming, and stayed glued to our seats as Giles Bowkett gave us his rousing call to action in his 400-slide extravaganza, even though he’d gone well beyond his allotted time and was cutting into lunch (it was that good).
  • They didn’t allow questions at the end of the presentations. In organizer Pete Forde’s words: “Our experience has been that questions are hard to hear, generally of poor quality, often just statements, and almost always an exercise in demonstrating how brilliant the questioner is while dominating the attention of the whole room.”
  • There was a “companion track” for attendees’ non-geeky significant others, where they were taken on a tour of the city while their partners were at the conference.
  • They served some of the best food I’ve ever had at a developer conference. The lunches were at the Downtown Metropolitan Hotel, and the big dinner at the Drake Hotel was beyond anything I’ve ever had at a developer conference.
  • The conference also included parties at some of the best spots in the city, some of which you wouldn’t find on vanilla tourist guides. Better yet, those parties were open bar!
  • Not only was there an opening party at a brewery, complete with stand-up comic, rock band and DJ, but there was a great closing party on Unspace’s roof.
  • The organizers paid attention to little details that set the conference apart, from giving everyone transit passes to heralding speakers as they walked on stage with the song of the choice to the giant polaroid montage featuring every attendee.

The organizers’ decisions in crafting RubyFringe made it a high-quality, memorable and inspiring experience, and its carefully limited scale gave it a sense of community that I could almost describe as familial.

Many people who went declared it the best conference they’d ever attended, and many who passed up the opportunity kicked themselves for missing it. Those pale next to the highest praise for the conference: the fact that after attending RubyFringe, a half-dozen handful of attendees were so inspired that they quit their day jobs to strike out on their own doing Ruby development.

Now Comes FutureRuby

FutureRuby comic

With RubyFringe’s resounding success, it was only natural that people would ask if Unspace would be doing it again next year. They gave it some serious thought – the last thing that they wanted to create was a weak sequel. They didn’t want to simply rehash RubyFringe, but reinvent it, just as they had reinvented the developer conference with RubyFringe.

So they reinvented RubyFringe as FutureRuby.

FutureRuby will take place from July 9th through 12th, and will build on what RubyFringe accomplished. The organizers bill it as “an opportunity to prepare for the future by learning from the mistakes of the past”, and promise us that it won’t just be RubyFringe warmed over – we shouldn’t expect to find the same things in the same places!

What else will it have?

  • Parties and nightly entertainment, three nights in a row
  • FAILCamp (which I co-hosted last year, and which I am invited to host again) is back with a vengeance, and an adorable sailor suit
  • “More better than” swag that you’ll be proud to wear in public
  • The return of the companion track for partners and secret lovers during the conference
  • An amazing two nights of lunches and dinners that you’ll photograph and tweet about
  • Loving attention to all of the details, like excellent wifi, transit passes, and no paid presentations

All the details are in this post at Unspace’s blog, Rethink. You can bet that I’ll be at FutureRuby.


RubyFringe was Profitable, People are Happy, and the Sky Didn’t Fall. What Now?”

Collage of images from the RubyFringe summary article at \"Rethink\"

Over at Rethink, the blog of Accordion City-based development shop Unspace, Pete Forde shares his thoughts on the RubyFringe conference in an articles titled RubyFringe was Profitable, People are Happy, and the Sky Didn’t Fall. What Now?”.

The article covers all kinds of things including:

  • A loving poke at RailsConf (“A 400 person conference doesn’t become better with 1600 people, but if you’ve already done the hard work, why not scale up?”). That’s a reference to RailsConf 2006 and 2007.
  • The number of attendees (something that I’m going to cover in an article very soon)
  • Why they might not do another RubyFringe (think of all the movie sequels you’ve ever seen)
  • Women and tech conferences
  • You can hold a conference without sponsors (well, Engine Yard helped foot the bill for a party)
  • Consider going with just a single track
  • Just as Obie said that you shouldn’t undercharge for your services, you shouldn’t undercharge for a conference. Charge what it costs, and deliver real value
  • “Great food is important, because nobody can focus for fifteen hours on cold boxed lunches.” And RubyFringe had great food.
  • Care about the details! “This cannot be overstated, and the key word here is care.”

Meghann Millard of Unspace
Meghann Millard, RubyFringe cat herder supreme.

Pete said it in his article, and I feel it bears repeating: Meghann did an amazing job herding cats for RubyFringe, and if you attended RubyFringe and have a little cash to spare, it might be a nice idea to send her some flowers (or an Amazon gift certificate) for all the work she put in. I owe her big-time for thinking of me when she was looking for a host for the Friday night opening events as well as an emergency host when FAILCamp needed one. Thank you, Meghann! I salute you with a filet mignon on a flaming sword!

As for Pete thanking me for the RubyFringe guides and notes from the conference: it was my pleasure. I believed in the event from the get-go and was only too happy to apply the Burning Man ethos to this event (“There are no spectators, only participants”). Besides, that’s what we in the Accordion City tech community do!

If you’re thinking about putting together a tech conference, you should steal as many ideas as you can from RubyFringe, and Pete’s article is a good starting-off point.


RubyFringe: Day 2 Notes, Part 3

Photo by Carsten.
Click the photo to see it on its Flickr page.

Pete Forde Break

- When the idea for this first started, it was much simpler:
  "Let's throw a merb conference, it would be awesome!"
- We love you people a lot
- This has exceeded our expectations
- Meghann: I see her every morning when I arrive, and she works late
- Rubyfringe has become like a monolith in space for us
- Meghann did all the heavy lifting
- [standing ovation for Meghann]
- Rubyfringe next year? In Portland, next year, it's going to be awesome!
- But seriously, maybe we'll have one again next year. We'll have to think
  about it.

Ruby.rewrite(Ruby) (Reginald Braithwaite)

Photo by Libin Pan.
Click the photo to see it on its Flickr page.

- I'm happy to be here with the smart people and good people
- Being interested in the same things that smart people are interested in
  is not the same thing as being smart
- I had no idea what Pete was thinking when he came up with the
  "RubyFringe" concept -- did he mean the fringe of the Ruby
  community, or did he mean the fringe of the Ruby language
- The conference seems to be a nice mix of both

- andand
    - Groovy has an andand built in; it's called the Elvis operator
    - The Haskell people said "Reg is just inventing the maybe
      monad in Haskell"

    [shows code]

    - There has to be a better way
    - If returning nil -- method_missing
    - "Yes, I know because I heard the guy who wrote it says it sucks"
    - I'm using it because I'm hardcore

    - Problem: we've opened up the Object class
    - andand is really slow
        - This is not a performance bug
    - A Haskeller will tell you that the problem is solved
        - Haskell has lazy evaluation
        - Haskell never bother evaluating stuff that will always be nil
        - Ruby isn't "turtles all the way down" -- it doesn't give
          you all the tools it has for itself

    - @logger.debug is expensive
    - Make it a block!
    - Or do if defined?

    - This is going to sound smarmy -- you know, the way it sounds smarmy when
      people say "I don't know how to do this" or play dumb to seem more "real",
      but I swear this is true: I'm not good with IDEs
    - I think that when IDEs give you some kind of wizard or other feature
      to simplify some aspect of programming, it's a sign of a defect in the
      language you're using

    - Ruby's open classes and "eager eval-by-default" are problems
    - There are probably a number of ways to get around it -- my way was to
      use macros
    - Using Rewrite gets around the open class problem
    - Yes, it turns your code into this shit [shows slide]
      but better by far to have the code do it than your IDE
    - [shows benchmarks] As you can see, it performance is far better than
      doing it by opening up the Object class
    - Rewrite version of andand doesn't execute the shit

    - Okay, this is tather nichey stuff
    - You know the saying that people don't by drills or drill bits, but they
      buy *holes*? Think of Rewrite as diamond dust that you use to make
      drill bits. Maybe you'll make use of it, but most people won't

- Just a quick note -- in his presentation, Giles [Bowkett] renamed lambda as
  L because he needed to use it a lot.
- Having to do that is a code smell
- Never mind making it shorter -- get rid of it entirely!

[Joey note: Reg corrected himself in a blog entry written after RubyFringe,
 stating that having to rename lambda is *not* a code smell;
 it's a *language smell*. Giles is simply using the best workaround
 available to him.

 See his blog entry at

- Why does Ruby read from left to right?
    - I have a lot of unpaid Demeter speeding tickets
    - thingy.thingy2.thingy3.thingy4
    - Because this OOP paradigm, even Ruby goes from left to right
    - From time to time, people want to go from right to left
    - blitz.not.blank?
    - not is really a adverb
    - There's really no place for adverbs
    - Adverbs modify verbs, and since OOP is in the Kingdom of Nouns,
      they get short shrift. I'd like to see more support for adverbs.

- Take a look at ruby2ruby, created by the folks at seattle.rb
- It asks "Hey, interpreter, what are you actually working with?"
- It does a lot of cleaning up of Ruby's s-expressions.
- Lisp's s-exps are like the nice flat-pack furniture you get from IKEA;
  Ruby's are the furniture you find in the dumpster -- and that's the stuff
  left over after a couple of people have been through it first.
- In the end, Ruby is like Lisp. Except you do all this work up front,
  and you do all this work on the back, and it's morepainful.
- But aside from that, it's like Lisp!

- Abstraction solves every problem except for one: the problem you have
  when there are too many layers of abstraction
- If working with the tool is worse than the problem, then the tool is bad
- Maybe you've been taken in by Home Depot -- they sell you on how easy it is to
  do the job. Many tools make the job part easy to do, but often they make
  cleaning up after the job more difficult
- Need to consider this when using or building tools

- I know that I don't have the best solution for this
- I *do* know that we have don't have enough competing solutions
- I don't believe that "open classes" is sustainable

Conceptual Algorithms (Tom Preston-Warner)

- When I was 7 years old, I'd fight with my brother over the TV
- I vividly remember a time I was so frustrated that I ran to the top of the
  stairs, took off my shoe, and threw it at my brother's face.
- Naturally, this led to a "time out" -- we were both sent to our rooms and
  told to think about what we'd done and if there was a better way to
  handle things...
    - What happened?
    - Are there better ways to resolve it that shoe-throwing?

- Problem solving can be broken down into these steps:
    1. Think about the problem
    2. Proposed solutions
    3. Evaluate the benefits and consequences of those proposed solutions
    4. Select the best soltuion

- I wrote chronic, god, fixture scenarios, fuzed, grit
- I work at Powerset -- now Microsoft
- Just realized John Lam and I are colleagues! I'm going to have to catch up
  with him when I get back
- I co-founded GitHub

- Conceptual Algorithm: Scientific Method
    - Geoff covered in his philosophy talk
    - It's one of the most powerful conceptual algorithms ever devised

    1. Define the question
    2. Gather info and resources
    3. Form a hyptothesis
    4. Analyze and interpret the data
    5. Plan
    6. Publish the data

    - How *not* to do science
        - To fix a memory leak in god.rb, I didn't use a reasonable methodology
          at first.
        - I just tried commenting stuff out to see if eliminated the leak
        - It was random and didn't get any real results

    - Then I tried the scientific method
    - Go see "science and god.rb" -- my use of the scientific method
      to fix a bug in god.rb is documented at:

- Conceptual Algorithm: Memory Initialization
    - George Dantzig
        - Imagine a situation where you come late to class and everyone's
          already gone, but there are two math problems on the blackboard.
          You copy them down, take them home, find the solutions and
          hand them in, under the impression that it's just an overdue
        - Now imagine that a little while later, you discover that those
          problems were strictly for display because they were considered
          unsolved problems by the mathematics community at large!
        - Everybody wants to be that dude -- and George Dantzig was that
          dude at UC Berkeley

    - The "memory initialization" algorithm works like this:
        - "I have a problem"
        - "I am going to disregard everything I know about a problem"
        - When you don't know about a problem domain, you often bring in a
          new perspective, no limits and no limits
        - Rather than look at existing work when developing chronic,
          a Ruby natural-language date parser, I worked from first principles
        - Sometimes coming in "fresh" and working from first principles
          gets you results!

- Conceptual Algorithm: Iteration
    - In making what is considered to be the best vaccuum cleaner in the world,
      James Dyson -- actually SIR James Dyson -- built 5127 prototypes
    - He said: "Making mistakes is the most important thing you can do"
    - Knighted for his efforts

- Conceptual Algorithm: Vaporset Corollary
    - Hard problems take a long time to solve
    - When harangued about why you haven't got any results yet,
      ignore the wankers
    - In the end, your long, hard work can pay off:
      Powerset sold to Microsoft for $100 million

    - Charles Darwin
        - Took 20 years on his evolution research
        - He published his finding only when his colleague Wallace said
          "Hey! You should publish this!"
        - [shows picture of Darwin] Look at those sideburns! He's awesome!

- Conceptual Algorithm: Breadth-First Search
    - There are over 2500 programming languages. Why just explore only
      2 or 4?
    - My original title was "Sapir-Whorf for Robots", but I didn't think
      it would catch on
    - For developing Fuzed, I tried using Erlang
    - The most important thing about trying a new language is to
      just accept the syntax. A strange new syntax often turns off
      developers -- tell yourself: "The syntax is okay"

- Conceptual Algorithm: Imagining the Ideal Solution
    - There's an example of this in god's config file
    - If you're creating a language, don't model it after English.
      That's retarded.
    - Config files are just big lists. You can't do loops or other things
      that we take for granted in programming languages
    - god config files are just Ruby

- Conceptual Algorithm: Dedicate Thinking Time
    - You should set aside some time to just think
    - Sometimes the best things come from this
    - One example: Gravatar, the avatar system -- this came up during my
      thinking time, and I did all right selling it to Automattic last year

    - A guy who devoted a lot of time for thinking: Rene Descartes
        - He's fringe to the max! I know Babbage is RubyFringe's mascot,
          but I think Descartes should've been the guy
        - Many accomplishments: a major philosopher and the father of
          analytic geometry
        - He got on the  Pope's list of prohibited books! How cool is that?

- Conceptual Algorithm: Cash Filter
    - There comes a point when you need to build something that makes you money

- Conceptual Algorithm: Deathbed Filter
    - Imagine yourself on your deathbed
    - Think about a decision you have right now
    - Think about yourself in the future -- imagine yourself looking back on
      that decision. Would it be a good memory or a bad memory?

Sinatra (Blake Mizerany)

- Sinatra is a micro-framework
- Less than 2K LOC in GitHub, including blank lines and comments

- Sinatra "hello world" is simple
- Rails was too slow
- Multiple Mongrel handlers getting cumbersome to maintain
- Same reasons as most for starting a new framework

- Camping is awesome, but...nuff said

- Freaks
- Islands on Second Life
- git-wiki by Simon Rozet

- Ultimate REST client
- RESTClient + Sinatra
- No longer have to use curl

7 WTFs of Sinatra
- Why am I falling for Sinatra?

Be Good (Leila Boujnane)

- People have been asking how I've been doing, and I've lately been saying
  "not too good"
- Some kind of aphasia-like symptoms [Get well sooon, Leila!]
- Founder of Idee Inc., which makes image search

- I'm probably the only person at this conference using notes
- Martin: here from Copenhagen
    - Needed a break -- working really really hard
    - Really really tired
- Couple of days, realy tired
- Use giant Post-It notes to think process
- Have been having trouble writing ideas down -- a sort of aphasia

- "If you make enough money in this world, you can smoke pot all day and have
  people killed." -- Patton Oswalt
- I am not one of those interesting individuals
- Here's something that was true when you were growing up and it's true today:
  Let's not have people killed. Let's be good.

- "What does a man need -- really need? A few pounds of food each day, heat and
  shelter, six feet to lie down in -- and some form of working activity that
  will yield a sense of accomplishment." -- "The Wanderer" by Sterling Hayden
- We have been brainwashed into belonging to an economic system that says you
  need more than that. Way more.

- How do we start to make the world a better place?
- I work long hours, seven days a week, and I love my job
- I love my clients
- Every day you walk in and have to make a set of decisions
- These are the early days

- Make something people want
- Paul Graham: "If you make people with money love you, you can probably
  get some of it."
- Idee: Gives people a better way to search for images
- Nothing more gratifying than an inbox full of messages from happy people
  who love what you make
    - It's satisfying -- you feel wanted and desired
- If you are not good at what you do, you end up resorting to being bad
    - You may have to cheat
    - Bully
    - Lie to your customers
- Your adoption rate is not tied to the number of people who you bully
  into adoption!

- Contrary to what a VC will tell you: don't focus on business models first
- Instead, focus on building something useful first.
- *Then* focus on the business model, *after* you've proven your usefulness
- Crappy products plus sales equals unhappy users

- It's all about happiness and being good!

RubyFringe: Day 2 Notes, Part 2

Jabl: The Language You Will Hate (Hampton Catlin)

  • This is the best-case week we could have ever hoped for
  • JavaScript bugs the shit out of me!
  • Nathan is da man! He makes HAML what it is today and he played a big part in a lot of today’s stuff. I’m just some dumb shit with ideas.
  • If a lot of programmers really dislike an idea, but can’t give you a reason why, it’s probably a good one

  • I like writing languages! It’s super fun!
  • I’m not in love with Python, but I think indentation’s better! It’s one of the few things Python gets right.

  • People are really defensive about JavaScript. It’s like you punched their mom in the face.

  • It’s a fairly decent general-purpose language
  • I think it belongs more on the server side than on the browser
  • It got so beaten up. mocked and put down initially that when we discovered it was a real language, we came to defend it rabidly
  • JavaScript is a fucking terrible browser language, hence many people have created frameworks to overcome its shortcomings

  • The JS world has nothing to do with the DOM world. JavaScript and the DOM
    connect only because they’re glued together by the document

  • The DOM is a really cool thing!
  • CSS is nice — with it, we can talk about the DOM. Why are we not outraged that we can’t do this with JavaScript?
  • If you’re saying “I don’t want to learn a new language”, what the hell are you doing in this field?

  • Jabl compiles into jquery

Archaeopteryx (Giles Bowkett)

  • I was going to have a contest to give away this book, O’Reilly’s “JavaScript: The Good Parts”. As you can see, it’s a small book.
  • Audience member: “Just give it to Hampton!”
  • During his presentation about jazz and programming, Nick didn’t talk about
    what I consider to be modern variants — hip-hop groups like A Tribe Called
    Quest and Roni Size’s drum and bass are things I consider to be jazz.
  • I have 496 slides. I don’t think I’m going to get through them all!
  • The Mainstream
    • The mainstream is not just lame, it can get you *killed*
    • Take a look at the life of Heath Ledger. Go check out his Wikipedia entry
    • Most people don’t know that in his youth, he was a chess champion
    • He had a lot of mental energy, and like such people, he suffered from insomnia
    • Insomnia is a solved problem: hypnosis works
    • But…hypnosis is on the edge, on the fringe, even though it has been around for and working for over 100 years
    • So they didn’t use hypnosis, but put him on pills, which killed him
  • At Railsconf 2008, David Heinemeier Hansson talked about “The Great Surplus”, in which he says that there’s still something missing from mainstream languages and tech that gives Ruby and Rails a surplus of power and
    capability, but that this surplus was limited.
  • DHH says people eventually figure out the cool tools and the surplus will go away.
  • I think he’s wrong: the mainstream *never* catches up — it’s too easy to be ordinary
  • The question should be: “Are we going to use that power for good, or are we going to use it for AWESOME?!”
  • People should be saying “This is going to be a wicked party: I’m going to bring my laptop”
  • What are we?
  • Are programmers artists?
  • Kai “Kai’s Power Tools” Krause would say yes
  • Steve Jobs’ said: “Real artists ship”
  • Leonardo da Vinci was a real artist, but there’s a lot of stuff he designed that he never shipped (the hang glider, helicopter, and so on)
  • One of his bridge designs was never built until this century when the Swedish government decided to build it. Talk about failing the “release early, release often” mantra!
  • In many instances, his genius was wasted.
  • How does genius get wasted?
  • In the old days, an artist would seek a patron
  • Patrons were rich nobles who wanted to look good
  • An artist with a patronage would create works in the name of or that glorified the patron
  • If you accept that programmers are artists, then VCs are patrons
  • Let’s talk about adventure for a moment
  • During the boom, working for a startup was often sold to prospective employees as an adventure
  • Let me tell you about adventures:
    • When I moved out of the house, I went to Chicago and lived in a ghetto because my need to create art was actually greater than my need for safety
    • When I lived in New Mexico, I found bear droppings not more than ten feet from my front door on a regular basis
    • I used to carry a .357 Magnum with me because the area was being prowled by a mountain lion. You need a big fucking gun to take down that kind of animal
    • I used to get calls from my parents where they’d tell me that they’d just caught a rattlesnake, killed it and threw it onto the barbecue and would you like to come to dinner?
    • [Something about “psycho rocks” — I was laughing so hard that I wasn’t able to take down notes at this point — Joey]
    • I’ve also done enough LSD to kill a herd of elephants
  • Now consider what you were doing when you were going on a dot-com “adventure”:
    • You get to sit for 4 years at a desk
    • Maybe, if you’re really lucky, your options might turn into something
    • Who are these weasel-brained Muppetfuckers?
    • These people who tell you that working for them is an adventure: they’re not fools; they’re *liars*
  • It all comes back to a system of patronage — this is just the modern version
  • Just as landed nobles gave artists money for the artists to look good, VCs give geeks money so that they can brag
  • [showing a picture of Julia Allison in a skimpy little dress, surrounded by admiring geeks]: This woman is wearing programmers!
  • You are just their pet monkeys!
  • If the company IPOs and you are lucky, you can start collecting pet monkeys of your own
  • I’m not kidding about the “pet monkey” thing. Think of Google, with their ball pit playpens and other niceties with which they coddle you: it is in their economic interest for their employees to think of themselves as Google’s children!
  • If not for the Muppetfuckers who couldn’t see the value of Leonardo’s hang-gliders and helicopters, we could’ve had them hundreds of years sooner!
  • As programmers, we get to create things that didn’t exist before
  • Why should we waste that on things like and stock market price grafts?
  • So I learned to draw. I was a starving artist
  • But the people who run this industry are scum
  • Only 3 months prior, I was working at Morgan Stanley for $75/hour
  • At that time, 2001, I made $7.50/hour at a gas station
  • Here’s a picture of an RV that I lived in in New Mexico
  • VCs are:
    • the causes of economic instability
    • “stock puppets”
    • Because of these Muppetfuckers, someone you could have called a genius was instead just building bullshit back in 1997
  • The lesson?
    • Build your business with your money
    • With your money, you’re the boss
  • Consider the case of Engine Yard: the VCs need Engine Yard, not the other way aroung
  • It’s becoming more common: as startups get cheaper to launch,  VCs find themselves in the cold
  • The VC company Benchmark Capital says that open source enriches the ecosystem, which is why they backed MySQL, Red Hat, JBoss
  • Look at Jay Phillips — he leveraged Adhearsion to create consulting work — he is an internet startup
  • The probability matrix
    • Drum machines are simply matrix builders
    • Rows in the matrix represent individual drums
    • Columns in the matrix respresent a beat played at a given time
    • You want drum X to play at time Y? Just put a “1” in [X, Y]
    • In 4/4 time there are 4 beats ber par, and typically drum machines play music in 4-bar chunks making 16 beats
    • So the probability matrices are 16-element arrays
    • But rather than just either playing or not playing the drum at any given point, you assign a probability
    • You want there to be a 25% chance that drum X gets played at time Y? Put a “.25” in [X, Y]
  • It’s social software
  • Archaeopteryx generates rhythms through probability matrices
  • It’s open source. I’m not worried, because the name of the game isn’t locking people out, it’s providing superior service at the same or better price point and competing with people who are illiterate about an important part of their job
  • Maybe I won’t be able to say “My career is Archaeopteryx” I’ll be happy if I simply say “My career *includes* Archaeopteryx”
  • What wonderful things would we have seen?
  • What if the guy who built the board for Sasha open-sourced his design?
  • This DJ mixer is in a niche market
  • [At this point in the presentation, Giles’ allotted time had run out, but people stayed to hear the rest, and the organizers let him run with it because the audience was enraptured by this point. — Joey]
  • As such, it unleashes new creative possibilities
  • [Photo] Here’s his DJ mixer. It’s not a traditional DJ mixer, but a MIDI controller
  • [Photo of DJ Sasha] Here’s a DJ that gets paid $25K a night
  • One day, I want to be able to say “My career is Archaeopteryx”
  • Takes advantage of the fact that MIDI [Musicial Instrument Digital Interface] is cheap and ubiquitious, controlling more than just instruments, but lights, effects, visuals and other things
  • Lightweight
  • Archaeopteryx is a Ruby midi generator
  • Archaeopteryx
  • OOP
  • It’s irresponsible to use Ruby and not leverage its power
  • You should make your own OOP paradigms — that what Ruby is for!
  • Archaeopteryx uses lambda a lot — so much that I’ve had to alias “L” to lambda
  • Loads of lambdas in the code
  • In the OOP used in Archaeopteryx — objects act as host for methods, which can be redefined at any time
  • Goes to core of why mainstream is dangerous
  • Ledger just went with the crowd
  • There is absolutely nobody that does not do that
  • It’s incedibly meta
  • Altering rhythms is adding a lambda to an array of lambdas using a lambda picked out of a queue
  • It’s the use of the strategy pattern to play beats
  • There’s a strategy for deciding which strategy to use
  • “Ruby is like Cthulhu in that it goes beyond sanity”
  • I plan to use it at Burning Man and have it running continuously for the full 7 days
  • Archaeopteryx’s core MIDI code comes from “Practical Ruby Projects”
  • Vaporware alert! I’ve got 2 things planned for user-generated visuals in Archaeopteryx
    • 1. MIDI VJ software
    • 2. “Drum circle”
      • Take a number of drums and rig them with Bluetooth touch sensors
      • Use them to trigger JRuby/Processing
      • Use that input as a voting system for what beats to emphasize
      • Updating the probability matrix based on this is trivial
      • End result: people can influence the music in real time
  • Andy Warhol said “Good business is the best art”
  • “Steve [Jobs], you ridiculous douche…”
  • You don’t need an IPO, you don’t need an exit strategy, that’s fail 2.0
  • Computers are everywhere, which means that you can do anything
  • Language wars are bullshit — it doesn’t matter whether I’m doing music with Ruby or whatever other language is out there
  • It’s about passion
  • Maybe being a programmer is not a *what* but a *how*
  • Maybe being a programmer is about applying programming to your passions
  • Go and build! Build for yourself, not the VCs
  • And remember: real artists ship!
  • [Standing ovation]

CouchDB and Me (Damian Katz)

  • Sell my house, move my family and live off savings? WHY?
  • This is not a tech talk, but about the considerations behind this decision
  • [Shows photo of baby daughter to great applause]
  • Why jeopardize this beautiful young family?
  • I got laid off and had to look for a new job
  • I had a house and the associated mortgage
  • I looked around and didn’t see anything I wanted to work on

  • “Other people work on cool stuff…why not me?”
  • They’re out there, doing cool things they love — designing motorcycles, making music and creating art
  • How do people get jobs where they get to work on cool things, work on what they want, and get paid for it?
  • So I made my decision: sell the house, move someplace cheaper and live off my savings
  • Reasons for doing this:
    • It would be educational
    • I’d get to spend more time with my family
    • It would be a test to see what I can do
    • It would make for an interesting story
    • Moved to Charlotte, North Carolina. The cost of living was cheaper and we had family there
  • Change in Lifestyle
    • Thought I could live with fewer things, but the downgrade hurt!
    • Nobody wants to get wrapped up in a consumerist lifestyle, with the big house and the nice stuff
    • Had to go to the local Goodwill to buy furniture — being in there, thinking “I was better than these people”, but followed quickly by “What is wrong with you?” — these were just people trying to save money and get by. I wasn’t all that different and certainly no better than they were
    • Couldn’t shake that feeling that I was an unemployed loser
  • So what to build?
    • I worked on Lotus Notes for years
    • I thought: I’m going to extract the good stuff from Notes, get rid of the crap and maybe something good can result
  • The development process in the new environment:
    • I’m away from all my development friends
    • Developed in C++: storage engine, view engine, query language
    • Had trouble seeing past the complexity
    • Went into panic mode
    • I ordered “Code Complete” from Amazon, hoping it would help — (it *is* complete and about code)
    • Glad to *not* get new information out of it. The important thing is that it helped me to just push forward with the project
    • Decided to use Erlang –– “I knew Erlang before it was cool” (It was never cool)

  • In late 2007, my cash reserves were drying up
  • I looked heavily at VCs and angels and discounted them quickly
  • I decided that I didn’t want to sell out CouchDB to commercial interests
  • Got a job — a cool one — at MySQL
  • There, I wrote the CouchDB that you know
  • IBM
    • I was approached by IBM
    • Wrote back to the guy who contacted me, saying that I was not interested because they had too many douchebags
    • Surprisingly, he replied with “Send me the same email, but clean up the language”
    • So I did: s/douchebags/vapid bureaucrats/
    • He sent it around his department
    • The result, they offered to pay him to work on CouchDB, and to keep it open, all the code I wrote for it went to the Apache Foundation
    • IBM really stepped up to the plate — they really helped CouchDB happen
    • As much I’m down on them, they’re a positive force in the tech industry. They’re big supporters of open source and big supporters of the tech industry in general
  • Q & A
    • When did it catch on?: When I added JSON

  • How’d the core team get together?I really don’t know
    • Only met one of them in person (Jan)
    • He’s been doing the evangelizing
    • They were basically volunteers who kept adding and it became “I guess you’re part of the project now”

An Amusing RubyFringe Moment

This is funnier if you happen to follow the Ruby programming scene or know me and Zed Shaw:

Photo by Libin Pan.
Click the photo to see its Flickr page.


RubyFringe: Day 1 Notes, Part 2

Jazzers and Programmers (Nick Sieger)

Nick Sieger had two talks ready and put it to an audience vote. They could pick either:

  • Pointless and Time — Wasting Things You Can Do with JRuby, or
  • Jazzers and Programmers

As you can see by the title, the audience picked “Jazzers and Programmers”.

Experience the music! Carsten Nielsen put together a muxtape page where you can hear the samples of jazz that Nick used in his presentation.

You should also see Nick Sieger’s blog entry Jazzers and Programmers, which is his presentation in article form.

- Let's trace the evolution of Jazz
    1. Swing
        - A popular, easily accessible style
    2. Bebop
        - Miles Davis
        - A little less accessible
    3. Hard Bop
        - Addition of soulful, gospel r&b elements
    4. Free Jazz
        - Improvisation with minimal themes
        - Visceral emotional style
    5. Jazz rock / Fusion
        - Miles Davis (again!)
        - On the Corner
    6. Today
        - Postmodern jazz?
        - Jazz rendition of "Iron Man"

- Programming is on a similar path
    - C: like New Orleans hot jazz
    - Java: like swing? (Groans from audience)
        - Both are very accessible to the masses, mainstream
    - What's in the future?

- The basis of jazz is the rhythm section
- The bassist is typically in the center of the rhythm section
    - Responsible for both the harmonic foundation *and* beat
    - Often established using a walking bassline
- Piano and drums: comping (short for "acCOMPanyING")
    - In jazz, these instruments are more about creating sonic textures
- The rhythm section is analogous to a programming library, framework or pattern
- Bass/drums/piano == Model/view/controller

- Musical structures
    - In a jazz piece, it's typically head / solos / head
    - The theme is established in the head at the beginning
    - The solos are based on the theme, but each musician is free to improvise
      based on the theme
    - The closing head ties everything together
- The Real Book
    - A big book of sheet music of jazz standards notated by working musicians
      (without bothering to get the rights)
    - Allows musicians who don't normally play together to have a common
      point of reference
    - In a jam session, musicians call tunes out of the Real Book
    - It's essentially a "patterns book"
- This like common structures provides a common language and organic conventions
- There is no "W3C Committee"-like body that dictates how you play jazz
- It's all conventions established by musicans floating between bands

- Improvisation separates jazz from other styles
    - Ornette Coleman quote: "When I found out that I could make mistakes,
      I knew I was onto something."
    - The structures in jazz provide a framework that actually makes
      improvisation possible
    - Inronically, it's these constraints that free you

- Communication and persuasion
    - Improvisation is all about being convincing
    - It has a back-and-forth conversational element
    - It's a non-verbal kind of communication
    - Consider the act of "trading fours": that's where different musicians in
      a jazz combo take turns playing for four measures, "trading" back and
      forth with each other: perhaps sax 1 takes 4 measures, then sax 2, then
      the piano, then the drummer.

- Do programmers improvise?
    - The best programmers have a sense of spontaneity
    - Consider continual rewrites
        - Fred Brooks says "Plan to throw one away"
        - I say "Why stop at one?"
    - I like it when developers do live coding in front of an audience rather
      than doing it in advance and running it, or just showing a screencast
      of them coding
        - It's fascinating to see the process, especially when it's a good
          programmer doing live coding.
        - Jazz musicians make "mistakes" all the time, but they're not mistakes,
          they're the music
        - "Do not fear mistakes. There are none." -- Miles Davis

- Coding jam session
    - Musicians jam together; coders should too!
    - When commenting on a fellow jammer's code, think in terms of
      "Yes, and..." rather than "Yes, but"

- Jazz musicians and altered states
    - "Write the test cases when sober. Write the code when you're drunk."

Do the Hustle (Obie Fernandez)

From the RubyFringe program booklet:

Sales is an a rt that very few technical people have mastered. Very few. It takes patience, confidence, empathy and a whole slew of other skills mixed together — a brew that is seriously difficult for many geeks to figure out. In this talk, Obie will leverage his experience successfully selling consulting services for both Thoughtworks and Hashrocket to help you with the following questions: How do I figure out how to price my services? How do I figure out the kind of work I want to sell? How do I write contracts and statements of work? What about proposals? And RFPs? How do I close the deal?

- My formula: Get into programming, write a bestselling book,
  start consultancy, profit!
- I've had to make my own luck
    - I come from a humble background, with no prospects coming out of
      high school
- I landed my first job in IT in 1996
    - It was as a Java programmer
    - I read "Teach Yourself Java in 21 Days" and wore a nice suit to interview
    - I knew how to present myself
    - That's what I'm talking about today
- I'm talking about hustling!
    - This is not about scams or cons
    - It's about being able to jump on opportunities when they present themselves
    - The dictionary definition of "hustle" is to "obtain by forceful action
      or persuasion"
    - Yes, I do mean "forcefully"

- The sales cycle, which I will discuss, is made up of these phases:
    1. Marketing
    2. Qualifying
    3. Closing* -- ALWAYS BE CLOSING
    4. Maintenance

    - Marketing
        - Take a holistic approach
        - Looking good is a must: often it's what makes or breaks you
          when trying to get other people to "buy into you"
        - Your site/blog is your face -- make sure it looks good!
        - HashRocket logo:
            - Based on the "=>" is hashes
            - $15K for design work
            - Worth it, because it's gorgeous
            - Don't cheap out on your visual identity!

        - Have business cards
        - Having a business card determines whether or not you have a
          sales conversation -- if you've got a card, it's much easier to
          start one that has a hope of converting
        - Your website is like a business card: it should have correct
          and complete contact info
        - Having a phone is very important, and having the phone number on
          your site is also very important!
        - We got a lot of customer call within a day of posting
          our phone number on the site -- we tripled incoming sales contacts!

        - Encourage word of mouth
            - Read "Never Eat Alone|
            - Be altruistic and help people, do favours
            - "Seed the interactions that lead to good word-of-mouth"

    - Qualifying
        - Narrow down your offerings by defining products -- don't
          "just develop software" in a vague sense
        - Give yourself constraints
        - One great constraint to have is a minimum billable rate
        - Leads should not be qualified by the ultimate decision maker

        - Defining success
            - You can't rush the sales process
            - Ask yourself this question: Is the team prepared to fulfill
              or exceed the project requirements? If not, don't take it on!
            - Determining success criteria involves getting to know the
              prospective client via conversations. These can be face-to-face,
              or online, but you must get to know them!
            - Your own success criteria should remain constant
              -- write them down!

    - Closing
        - Use master service agreements with attached
          statement of work documents
        - These are easy to get client to sign up for, since they
          have no monetary component
        - Once someone signs this, they're the client!
        - Separate deliverables into "type A" and "type B"

        - Learn to negotiate!
        - You're worth more than you think
            - Average rate of $150/hr
            - See "Predictably Irrational" by Dan Ariely

    - Client management
        - Do remarkable work
        - Read "Purple Cow" by Seth Godin
        - Don't fear your clients -- make them fear you!
            - Not in a bad, trembling way
            - Make them afraid they can lose you if they misbehave
            - Client yelling at you: grounds for firing the client
                - Yes, you can fire a client!

Being Dumb and Using it to Your Advantage (Matt Todd)

From the RubyFringe program booklet:

You’re in over your head, dumber than you (and others) think, and you want to matter to your community. What do you do?

There are many good developers in this same position sitting on some dumb ideas simply because they are dumb. I’m challenging you to implement them…let me tell you why. First hand experiences from some dumb developer.

- I'm a nobody
- Contributed very little

- Lacking good judgement is not a bad thing all the time
- Be open to doing things that may seem a little ridiculous
- We are too smart for own good
- Tons of ideas bad in long run good in short run
    - Canvas for PHP
    - Building from scratch: a stretching experience

- From doing dumb things: taking chances, making mistakes and taking chances, you get:
    - Code
    - Confidence
    - Experience
- "Don't let your good judgement get in the way"

- What I learned from Halcyon
    - Anything can happen
    - A lot of tech things, maintaining a project openly, you don't combine an app,
      server and framework all together
    - I "don't want to fail to connect"

- Challenge!
    - Ideas sitting around the back of your head -- take 'em out! Work on 'em!

- Advice
    - Set yourself up for good problems (such as too many people using your app)
    - Set goals (including "make it work")
        - These goals don't have to be time-based

- "Creepy eyes! The end!"

The Framework Mass Index: Why Your Web Framework Sucks and You Should Build Your Own (Jeremy McAnally)

From the RubyFringe program booklet:

Frameworks are getting fat. Many times it’s just as easy to build your own stuff that does what you want rather than shoehorning what you want into an existing framework. This talk will discuss experiences in shoving specific functionality into a general framework and some options for curing the problems that were encountered.

- Pete Forde: "It's pronounced Mack-uh-NAL-lee."

- They told me to come here and drop a brain bomb
- I'm going to present what is "just a bunch of old ideas that need to be repeated"

- Beased on Obie's earlier talk, I checked our site and realized that our contact
  page is broken. That's probably why he haven't gotten any new work in a while.
- I'm starting a new project -- a magazine called "The Rubyist", which needs writers,
  editors and so on. If you're interested in contributing, we want you!

- Main point: Keep your framework within its domain
- I like Rails
- I like like Merb (except for 413 gems)
- But frameworks are getting fat
- "We're suffering from framework envy"
- There are 13,000 classes in .NET
- There are 13 web frameworks for Ruby
    - Rails has 521 classes
    - Merb has 400
- BMI: Body Mass Index
    - A measure of obseity based on a weight-height ratio
    - Not necessarily the best measure: Tom Cruise is obese, if you go by BMI
    - Maybe the equivalent for BMI in frameworks is WTFs/poung
    - Comparing the WTFs/pound in frameworks:
        - Merb has 16,000 WTFs/pound
        - Sinatra has 7 WTFs/pound
        - Rails has 12 quatrillion Heinemeiers
        - And Camping just has "true"

- Domain Specificity
    - Cruft is getting in the way
    - Have we forgotten YAGNI?
    - wxWidgets is a framework that's good at GUI
    - .NET is a framework that's good at...?
    - Rails is a framework that's good at database backed, front end driven
      web apps
    - Rails is not good at federated web apps
    - Integrating legacy systems with Rails is a pain

- Don't molest a framework
    - Problem: Ruby is a hacker's language, and hackers love to hack
    - You can open up a class and mess with it
    - This is okay, unless it's bad:

    - 3 things to consider when making your own framework for a specific
        1. Joy vs pain ratio when it fails
            - Does it take too much code to make things happen?

        2. Wrench meet mail
            - Are you using the right tool for the problem?

        3. Conventions rock
            - Favour conventions, be consistent!

    - Tools at your disposal:
        - Rack -- framework for writing frameworks
        - merb_core (if you need a little more fanciness)

- Use common sense: Don't hack a framework for the sake of hacking!

There Will be Porn (Zed Shaw)

From the RubyFringe program booklet:

I’ll go through 10 truly horrible ideas that I’ve implemented or thought about, all created just for RubyFringe.

- Pete: Don't be put off by that "AUGGGGGH!" stuff on his blog...
  he's really a super-nice guy

- GWAR-riffic intro song (available at his site)

- This is the best conference!
- Small conferences are the best; the giant conferences suck

- This is my Ruby retirement
- I will not be back. No more Ruby code. No more Ruby conferences
- -- if you're worried about your popularity on this site,
  you're a whore
- I'm currently writing a book, "How to build the greatest ruby server ever"
- I'll also be writing a book after that: "Protocols and performance"
- I consider myself an observer and an "anti-pundit"
- And now, my ideas!

- Idea #1
    - To-do lists are hot
    - Porn is even hotter
    - Social networks are hottest!
    - I combined them
    - Imagine a giant todo list. Just one, where everybody just adds to it.
      And at the same time, you upload porn!
    - You get everyone's to-do lists and everyone's porn

- Idea #2
    - Imagine Miro but with all the free porn uploaded and ready for you!
    - One-handed operation
    - If you can't be a chick magnet, be a porn magnet

- Idea #3, which I actaully might just implement
    - It hate politicians of all stripes. I want to get rid of all of them
    - Maybe I'll start by just removing incumbents. I want to fuzz incumbents.
      Let's pick a random guy and make his day bad
    - The website would list all memebrs of congress members
    - People could leave short statements about any member of congress
      that would "kick 'em in the nuts"
    - The top-rated and verified statments would be collected
    - Based on those, the site would automatically launch a war-dial campaign to
      "fuck up that senator's day"
    - "Oh wow, I'm so not getting back into the US"

- I'm so tired of making web applications
- I put together some code to help me play some "fucked up songs"
- The result: Inculcator
- Just PyGame and Ecasound
- Didn't take long to make

- I've got T-shirts!

Zed devoted the rest of the presentation to his Ruby “swan songs” — four numbers which he constructed on stage using Inculcator to record tracks and the salmagundi of music and computer gear shown in the photo below:

Zed Shaw\'s music gear setup at RubyFringe

Zed’s gear consisted of:

The four numbers he constructed and performed were:

  1. Zed Jumped the Shark (940K MP3)
  2. Matz Can’t Patch (1.7MB MP3)
  3. Don’t Fuck Up Chad’s Community (2.1MB MP3)
  4. Goodbye Friends (3.6MB MP3)

You can download them by clicking on the links above or by visiting their Internet Archive page, where you’ll find them in various formats. Zed put them in the public domain — in his own words: “I’ll nevermanke any money off them.”

In the photo of Zed’s setup, you can see four boxes on the left side. They’re t-shirts which have been compressed into cubes. Zed customized them by hand-painting “ZSFA” (short for “Zed’s So Fucking Awesome”, the name of his blog) on them. They were rewards given to people who supplied the vocal samples (“Zed jumped the shark”) for Zed Jumped the Shark. Those people were: Hampton Catlin, Deb, one unidentified person and Yours Truly.

Here’s what the t-shirt looked like after I extracted it from its cube:

Uncompressed ZSFA t-shirt from Zed Shaw

For Zed’s perspective on the event and his presentation, see his article titled RubyFringe 2008 – Killing Floor in Toronto.


RubyFringe: Day 1 Notes, Part 1

Here’s the first of my notes from RubyFringe, the non-corporate, almost-non-sponsored, edgy Ruby-but-not-Rails conference organized by the folks at Unspace and held in Toronto (a.k.a. “Accordion City”) on July 18th – 20th, 2008. I’ve read on a lot of blogs that people have been calling it “the best Ruby conference ever” — I might go so far to say that it’s the best tech conference I’ve been to.

This first set of notes covers the following presentations:

  • Adhearsion (Jay Phillips)
  • Deployment Monoculture / Scaling Ruby Down (Dan Grigsby)
  • Rockstar Memcaching (Tobias Lutke)
  • Living on the Edge (Yehuda Katz)
  • Testing is Overrated (Luke Francl)

Adhearsion (Jay Phillips)

From the RubyFringe program booklet:

Jay Phillips will talk about what’s been changing in the Adhearsion and VoIP scene and how people with virtually no VoIP experience can use Ruby and Adhearsion to write their first application in this generally foreign world of technology. If you’re building a Rails web application, with Adhearsion you could consider leveraging voice as a new, cutting-edge feature of it. If you’re a cowboy hacker with more personal ambitions, Jay will also talk about fun hacker projects and how you can go about implementing them. The world of voice is certainly a growing market and it can’t hurt to know a little about the technology!

- "Voice development on the fringe"
- "There's opportunity in the fringe"
- "Web development has this's saturated with innovation"
- Rails integration is a one-liner
- Asterisk's config file: complex and looooooong, app-specific config syntax
- Adhearsion's config: Ruby

- Does it scale? Yes
- Asterisk breaks down at about 130 simul calls -- new box after that

Deployment Monoculture / Scaling Ruby Down (Dan Grigsby)

From the RubyFringe program booklet:

Most conversations about scaling Ruby web apps are pointed in the wrong direction. Instead of talking about whether Ruby can scale up — I think we all agree it can — I’d like to see it scale down.

As an entrpreneur, I launch dozens of ideas before I pick the one to turn into a startup. The Rails-inspired approach of deploying long running instances of the runtime, one or more per app, doesn’t scale down to support even a few side-by-side applications.

Instead of reflexively arguing that EC2 is cheap enough, this talk will challenge some base assumptions, take a hint and some inspiration from Google App Engine, and suggest another angle for deploying Ruby-based web apps.

- The programmer/entrepreneur lifestyle
    - Attractive
    - Hits the "sweet spot" -- lets you be who you are
    - It's all about controlling your own destiny
- The trick is to find opportunities to build stuff and match it with people who
  want that stuff

- Barrel research
    - It's a way of looking at markets and opportunities
    - Think of all the markets and opportunities out there as the volume
      within a barrel
    - Think of anything released into the market as a rock dropped into the
    - The size of the rock in the barrel represents the size of the
      corresponding project or opportunity
    - Big rocks represent big projects taken on by big organizations
    - There are plenty of gaps between the big rocks, which can be filled in
      by smaller stones, representing smaller projects executed by smaller teams
    - It's fractal -- there are smaller gaps between the smaller stones, which
      can be filled in with sand, which represents even smaller projects by
      even smaller teams.

- The ideal team size these days: about 3
- Our current tools allow us to create well-crafted stuff with a small team
- Consider -- employs 9 people
- "Happy end of the Mythical Man-Month"
- If you're a hacker and have good hacker friends, you can do well

- With this in mind, what ideas should you implement?
    - "Late-bound ideas"
    - You want to make multiple, small, narrowly-focused bets
    - Act darwinistically -- take on a number of projects and cull those
      that aren't "fit to survive"

- Psychology and "Free"
    - Cheap is not free
    - Worry about spending money
    - Small psychological inputs can have a very large impact
    - Treat non-free things as dependencies -- try to get rid of them
    - Eliminating non-free things is part of a larger process:
      eliminating inefficiencies
    - If a customer is worth $100 -- Google will try to charge me $99 for it
    - Whoever your potential customer is, there'll always be someone out there
      who's going to spend more money than you trying to land that customer

- Disproportional Reward
    - This part of the talk is going to be all about market hacks,
      "fuzzing the market" and getting a result that is disproportionately
      greater than the time/effort/money you put in
    - They're all tech-driven: does not require you to be a salesperson
    - These approaches are tech- and marketing-based

    1. Breaking into the walled garden
        - was Pepsi to PayPal's Coke, with about 10% market share
        - We realized that auction buyers would be the big adopters of
          systems like ours, so we approached eBay who wouldn't take our ads
          because of an exclusive agreement
        - We found out that eBay had relationship with LinkExchange -- they sold
          a lot of ads in eBay
        - We bought out LinkExchange ads, many of which ended up appearing on
          eBay pages as per their arrangement, effectively doing an end run
          around eBay's refusal, getting out ads on their pages against their
        - Exploiting this non-obvious relationship made our company successful

    2. Baby's Mamma
        - The parenting market has a strong geographic component: new parents
          tend to clump together in the same neighbourhoods
        - Certain postal codes are parent-rich
        - Going after parents? Find out where new schools are being built --
          that's where they are
        - School websites post which of their teachers are going on maternity
          leave -- send their colleagues coupons!
        - Take a page from the stalker book: use readily-available demographic
          information, sych as driver's licence registration, voter info
        - Do analysis on that information
        - Look for info that ties them to a specific demographic -- consider
          names that belong to specific generations, like "Hildegarde"
        - Use Freedom of Information Act requests
            - For example, Nate's dad gets an National Science Founation
              database of people who just got funding and uses it
              to cold call them
            - Often, he would be the first person to inform them that they
              got the funding, making him the bearer of good news and thus
              more likely to make the sale

    3. Tai Chi Marketing
        - I wrote a script to auto-fill contact forms that I knew would lead to
          my getting called by a telesales person
        - I got calls from telesales people, whose jobs are tough
        - I'd explain that I wasn't likely to buy what they were selling, but
          told them that I have a product that would make their job easier;
          could they introduce me to their boss?"
        - End result: an inbound sales call was redirected and turned into a
          sale to them
        - Making emotional connection with people is key

    "At this point in the list, we're now approaching that fine line that
    separates an entrepreneur from a criminal

    4. Dorm Spam
        - My first job: selling white box computers at dorms, a la Michael Dell
        - My major cost: shipping flyers
        - So I used the inter-campus mail system to send the flyers

    5. Tragedy of the Commons for Fun and Profit
    - This was in the era of desktop-based file-sharing clients like Scour,
      Kazaa and eDonkey
    - Shared a lot of windows media files with the names of popular videos and
    - .WMV files back then could include an instruction to pop open a browser
      window pointing to a specific URL when the file was played
    - We used this as advertising

Don't short this stuff:
- As programmers, we have a tendency to bury ourselves in coding when things
  get tough
- Some problems can't be solved with tech
- Learn about handling people

Rockstar Memcaching (Tobias Lutke)

From the RubyFringe program booklet:

Memcached is what makes the web fast. It’s also the simplest thing ever: you put a little memory aside for it, you put some keys in, you get them out at a later time.

So why the hell do all of you geniuses use it wrong? I’ll teach you how to tackle your performance issues using memcached once and for all.

- "I'm here to present the most boring talk of the entire conference"
- Memcached: "like a hash with Alzheimer's"
- Originally for LJ ("which is about people cutting themselves)
- Lots of people use memcache

- How does memcached work?
- Talking to servers
    - Simple protocol: get, set, delete
- What do you store in it?
- Object caches
    - after save to database, save it to cache
- Expiry options
    - flush_all: the nuclear option
    - :expires_in
    - use an observer -- delete an activity after saves
- Unique ID lookup

Living on the Edge (Yehuda Katz)

From the Rubyfringe program booklet:

Ruby is growing up quickly, and a number of Ruby’s mainstays are falling by the wayside. I’m talking about classics like Rails, Rake, Rdoc and much much more. This talk will help you squeeze even more developer productivity out of the latest edge tools that will be the mainstays a year from now. Of course, living on the edge is a dangerous game, so I’ll cover how to sanely keep abreast of the latest and greatest without having to spend all your time keeping your tool chain up and running.

I intend to cover Merb and DataMapper (briefly, as they are rapidly reaching escape velocity from the Land of Edge), Thor, YARD, basis and Johnson. I will also cover other edge tools that are released between time of printing and Rubyfringe. Rock on!

1. Merb
- Not really edge anymore, but still worth playing with
- Monolithic-ness not everything it's cracked up to be
- Merb lets you pick and choose
- Large community
- Stats: "I don't have numbers, but this is real!"
- You probably want to use Merb off edge
- Sake:
    - Does all the work cloning multiple git repositories

2. DataMapper
- NonSQL things
- Hard to get set up
- You should be using Github -- see
    - "It's pretty much where Ruby edge is at"

3. Sake
- Lets us set up tasks

4. Thor
- Rake + Sake + Optparse

- Bigger than just an RDoc replacement

6. Johnson
- Rhino for Ruby
- A full Ruby-JavaScript bridge
- Lots of support for JavaScript expressions
- What's it for?
    - Server-side JS
    - Templates that work on client and server
    - Browserless tsting, potential
    - Optimizing Ruby?

Testing is Overrated (Luke Francl)

From the RubyFringe program booklet:

Develper-driven testing is probably the most influential software development technique of the last 10 – 15 years. There’s no question that it has improved the practice of building software. And in a dynamic language like Ruby, it’s hard to get by without it. But is it really the best way to find defects? Or is the emphasis on testing and test coverage barking up the wrong tree?

- Testing is a programmer's solution to the problem of bugs
- Coding's what we do, so why not make the solution out of code?

- What's wrong with this?

    1. Testing is hard
        - Developers tend to write clean tests describing the normal execution
        - Tend not to write "dirty" tests, which check non-normal cases, such as
          out-of-bounds conditions, bad data, various error states
        - Mature orgs write more dirty tests

    2. You can't test code that's not there

    3. Tests have bugs
        - A number of studies have shown that tests are just as likely to have bugs
          as the code they're testing
        - Who tests the tests?
        - There's also the matter of developers who comment out tests
          just in order to "get stuff done"

    4. Developer testing isn't very good at finding defects

- Complements to developer testing

    1. Manual testing
        - A good tester is worth his/her weight in gold
        - A good tester I know is not only good at explaining how the bug
          occurred, but also very thorough about providing info about it,
          including the stack trace
        - Have testers do it rather than programmers --
          besides, programmers hate it
        - Testers are also responsible for verifying fixes -- don't take the
          programmer's word that the bug has been fixed, confirm it!

    2. Code reviews
        - A good measure of code quality is the number of "WTFs per minute"
          during the code review
        - The polite code review definition of "WTF" is "What is this function?"
        - There are sociological considerations for code reviews -- you are,
          after all, leaving your creation (and by extension, you)
          open to criticism
        - Try to find bugs, not rip your collegaues to shreds
        - Code reviews can motivate you to code better
        - Can code reviews make better developers? Possibly:
          consider Robert Glass' argument that reading code
          can help make you a better developer

    3. Usability testing
    - Fun and easy
    - Jeff Atwood: Usability test failure is the ultimate unit test failure
    - The cheap way to do usability testing is to follow the model of
      Steve "Don't Make Me Think" Krug's "Lost our lease" usability lab:
      the testing computer and a camera, with you following the user
      through your application

- "Don't get me wrong: I write tests, I'm just not fanatical about it"