RubyFringe: Day 2 Notes, Part 1

If Kant Had a Computer (Geoffrey Grosenbach)

- Super special trivia fact: Only speaker to wear utilikilt

- I was going to throw the word "philosophy" into the title of
  this presentation, but I remembered what Hawking wrote in
  "Brief Hisory of Time": his publisher said that for every equation he put
  in the book, he'd halve the readership

- This isn't going to be a super-practical talk
- My degree was in philosophy
- Had computers been around back then, some of the philosophers may have hacked;
  I think it would've appealed to them
- But since they did not have computers, they became mathematicians and thinkers
- A number of philosophy and programming concepts were the same

- Immanuel Kant's most famous work is "Critique of Pure Reason"
- Written in German, but it's so obtuse that even German students
  read the English translation, which is supposedly easier to understand
- Kant wrote easier-to-read follow-up in which he lambasted people for
  not being able to follow Critique of Pure Reason
- Don't worry: I found ideas from books that are easier to understand
  than Kant's

- The natural vs. the simulated
    - Philosophers like to think that their thoughts match up in the real world
    - a priori vs. a posteriori knowledge
    - Mythical Man-Month: We're building things out of pure thought-stuff

    - In philosophy, I learned about different ways of thinking, arguing
      and fallacies
    - I can see where this knowledge would help -- I recently read a
      "Rails doesn't scale" post in a blog, where the rebuttal in the comments
      went "Too much emphasis on REST and not enough on internationalization
      is why it doesn't scale!"
    - Philosophy teaches us that a single argument against something
      is not enough to refute it

- Consider these three points below. Where are they from?:
    1. Limit new features to a well-defined scope
    2. Implement the feature, analyze the result
    3. Take the result into account for subsequent features
- Did they come from a 37signals manifesto? Scrum? Agile?
- No, it's the scientific method!
- The method is centuries old: take an idea, test it, measure, record and report the results
- As developers, we're kind of detached from the process:
    - In many cases, we just do the implementation
    - Sometimes the idea's not ours
    - Oftentimes we don't do the analysis or consider the result for
      subsequent features
- Exercise for the reader: Contrast the scientific method with development

- Music
    - I play the double bass, a big instrument
    - Everyone knows what a cello is, but nobody recognizes an upright bass
    - Been playing for a while, but finally found a great jazz teacher
    - I learn by doing, being made to perform with other musicians in the class
    - Old ideas have been around for a long time
    - As a bass player (as mentioned in the jazz presentation yesterday),
      my is to provide the root. Typically, I want to play the lowest note
    - That's a constraint -- I'm working within a set of rules

- Working with Less
    - Miles Davis: criticized for playing too few notes
    - Improvising: instead of starting out by running through the notes,
      start with silence, play a note or two, and then just get on with it

- DeMorgan's Law:
    - not (p or q) = (not p) and (not q)
    - A useful identity!

- Recent study of PhD's: the philosophy majors were the most employed group
- Philosophy is just math expressed as statements of logic

- Terms, referents, proper names, designators, initial baptism
    - Saul Kripke: Naming and Necessity
        - Descriptivist theory of names
        - For any name, we can come up with a list of descriptives that
          identify that name
            - For example, for the name "Hampton Catlin", we can come up with
              descriptives like: "Works at Unspace", "Lives in Toronto",
              "Changes his hair frequently"
        - Causal theory of reference (advocated by Kripke): When a baby is born
          and given a name, from that point on we can have a causal sequence...
    - This also applies to programming:
        - Creating an object involves naming it
        - We can match up a name with the object it references
        - We also have the decriptivist theory of names with duck typing:
            - Consider the respond_to? method and other forms of introspection
              we use to get descriptives attached to a named object

- Natural Kinds
    - Philosophers like to ask themselves about the way we group or categorize things:
      Are the groupings we create inherent in the nature of the grouped objects,
      or are these artificial groupings that we have assigned based on some
      perception we have of those things?
    - In web development, we like the idea of REST
        - It's an artificial grouping
        - It's the result of a decision by a person that a certain way of
          grouping things is the right way to do it
        - You need to understand REST is not a hard-and-fast natural way of
          organizing things, but an arbitrary way

- Spinoza
    - He's a philosopher with an interesting life: born somewhat wealthy, worked as lens
      grinder, excommunicated from his church, ended up turning down a lot of honours
      in his life, gave family inheritance to his sister, died early
    - He said that the whole universe is just a single substance
      (you can spend weeks studying just what he meant by "substance")
    - Each of us is just different states and concentrations of this substance
    - Reminded me of cloud computing
    - Problem: under his philosophy, we have no free will
    - As programmers, we like free will (we like our programs doing
      what we intend them to do)

- The Sapir-Whorf Hypothesis
    - Go look up the Sapir-Whorf hypothesis if you haven't already heard of it
    - Benjamin Whorf's quote: "We dissect nature along lines laid down by our
      native languages. The categories and types that we isolate from the world
      of phenomena we do not find there because they stare every observer in the
      face; on the contrary, the world is presented in a kaleidoscopic flux of
      impressions which has to be organized by our minds - and this means
      largely by the linguistic systems in our minds. We cut nature up, organize
      it into concepts, and ascribe significances as we do, largely because we
      are parties to an agreement to organize it in this way - an agreement that
      holds throughout our speech community and is codified in the patterns of
      our language."
    - The practical upshot: language anchors thought (Kant thought the same
    - Why I like Ruby: helps me organize my thoughts
    - Since a programming language can shape the way you solve problems, you
      should stretch yourself and:
        - Learn other programming languages, especially if their paradigms
          are quite different from ones you're used to
        - Write different types of apps -- if you're used to writing web apps,
          try writing a desktop app, and vice versa
        - Do you typically write apps? Try your hand at writing a library!
    - Stretch your thinking!

Ruby Beyond Rails (John Lam)

- John works for Microsoft, so it's fitting that they used the Imperial Theme
  from "Star Wars" to play him in

- I've been looking at the audience and making mental notes of yesterday's
  presentations -- I've decided to take a less conventional approach to this

- In yesterday's presentation, Dan Grigsby said "You're not really on the Fringe
  if you work for the Man."
- I was in a meeting with "The Man": Steve Ballmer, talking about how to recruit
  young programmers straight out of school who might not think of Microsoft as
  an option -- perhaps they've bought into the hype about Google
- "Are you gonna go work at Google and just so you can increase their market
  share from 65 to 66%? Come to MS where every day is a glorious day!"
- I believe that if you want to change things, the best way to do so is work in
  difficult circumstances

- Three things I want to talk about
    - Go see Steve Jobs' Stanford commencement address
    - He talks about "connecting the dots backwards" in viewing his life
    - Looking at that path, he was able to see that he was going to end up where
      he was today
    - People talk about how they accidentally wind up where they are,
      but really, it's all a result of the choices you make

- Back when I was a kid, 6502-based machines were all the rage (Apple ][,
  Commodore 64 and so on)
- (I'm old but I have the Asian mystique working for me)
- I came up with a lot of things that I didn't know already existed
    - Metaprogramming
    - 6502 assembly very limited
    - Built a 16-bit interpreter kind of thing
    - All my 16-bit instructions were prefixed with a BRK (break) instruction,
      which triggered a call to an IRQ routine which would then start the
- Another thing I did as a kid: building bridges between tech
    - Commodore disk drives had their own processors
    - I used to build bridges to conenct these smart peripherals to all sorts
      of things
    - Kids today, they're spoiled! You have to remember that a floppy drive
      back then had throughput similar to a 1200 baud modem. Anyone remember
- Went to University for a while
    - Did not do computers in university, I did chemistry and got a doctorate
    - I used computers, but did not program them
    - Learned lots of skills, the most of important of which are:
        - Teaching
        - Writing
    - In undergrad, when you turn in a paper, you just get a grade and
      don't care about the feedback
    - In grad school you can't do this; your supervisor won't okay it
      until s/he likes it
    - When I graduated, I realized I didn't want to "do the science thing"
      and ended up doing computers
    - Looked to see of there was a hot new thing that people weren't doing --
      in a drag race, if there are fewer competitors, I'd have a good
      chance of winning
    - I took up Delphi
    - My advice: look for something that people aren't much into and link it to
      someething hard
    - I did this by building bridges between Delphi and COM
    - By doing this work, introduced to Michael Edigan, who ended up
      being a mentor who opened my eyes to new things, including GSL jam
    - One of these things was XML, which was trendy, hip and even
      fringe at the time
    - Ended up working with Don Box (SOAP spec, amongst other things) --
      SOAP was awesomeness if you looked at the original intent
    - This was all before I got into dynamic languages, so I built code
      generators to make my life easier

    - Does anyone remember the Treedragon blog? (a couple of hands go up,
      including mine)
    - I remember its author, Rhys, ranting about dynamic languages, saying they
    - I truly believed this

    - I recommend this book: "Advice to a Young Scientist": P.B. Medawar
    - Back when I was getting started, wanted to build stuff for people to use
    - Like many people, the way I did this was via open source
    - There's an open Source entrepreneur problem: the belief that "if you
      build it they will come"
    - Building it might actually be the easy part; getting people to come to
      your solution may be the hard part
    - You can get around that by working for a big company
    - When I interviewed at Microsoft, they didn't tell me what I was
      interviewing for
    - I met with Scott Guthrie, who created ASP.NET, after my interview -- he
      told me about the plan to release a cross-platform version of the CLR
      and its support for dynamic languages

- IronPython is the fastest implementation of Python out there
- Of course, "fastest" needs to be defined. After all, there are three kinds of
  lies, damned lies and bechmarks
- It's fastest in terms of throughput, but its startup is slow
- It was harder to build IronPython than it should have been
- It took a smart guy (Jim Huginin) and a smart team to make lots of
  little decisions well
- Could we get a win the second time and extract a DLR -- dynamic language
  runtime -- from IronPython?
- To prove it would work, we would use the DLR to build other dynamic languages
- That was the ideal, then there's the reality
- Back in May, we demoed Rails running under IronRuby -- really slowly and
  consuming a lot of memory
- We're now working on performance
- Startup time turns out to be more important than you think it is
- Unit tests are the worst kind of code you want to run through a compiler
  -- many are run only once
- Realized that we had to go off and build an interpreter
- We were working backwards from a compiler
- In getting from the language front end to IL, you have to build two trees --
  a language-specific tree and a corresponding, more general DLR tree
- There's cost in building those 2 trees, and the DLR tree is 10x as costly
  as the language-sepcific tree
- The ideal: we could put effort into building the DLR
- We have a working interpreter, just not that fast
- Have to adjust goals

- The world of Ruby development is "a sea of Macs", which sometimes makes people
  wonder who the intended audience of IronRuby is
- Ask yourself: What parts of my app should I write in Ruby?
  What shouldn't I write in Ruby?
- You're on .NET because of the library
- If Rails were "done" -- for some level of "done" -- should portions of it be
  written in a statically-typed language?
- Why should you care what languages the libraries are written in?

- (See slide above -- a photo of balaclava'd protester kids rushing a police
    - Don't be one of these kids: it's all gesture, no result
    - If you really want to make change, you should "enter the belly of
      the beast"
    - Find an ally in the beast -- mine was Jim Huginin -- and make the
      change you want to see from within

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"


Scenes from RubyFringe, Part 1

It’s been a while that we’ve had a slide as controversial as David Heinemeier Hansson’s infamous one from the Canada on Rails conference, so I thought I’d make one, and this one’s a good deal friendlier too:

Photo by Libin Pan.

Here’s the crowd at FAILCamp, the gathering that Hampton Catlin and I hosted, where people shared their stores of personal and professional failure — and sometimes even the lessons learned. This was taken early in FAILCamp; later on, the room was packed quite nicely:

After FAILCamp came the kickoff party at the open space on the upper floor of the Amsterdam Brewing Company. Here’s the RubyFringe logo projected against the back wall:

The opening act was Katie Crown, who had a charmingly oddball stand-up routine, which included her taking song suggestions from the audience and turned them into slightly-different version that were in the public domain (for example, she turned Who Let the Dogs Out into Who Released the Canines) and even invited me to join in with the accordion and help her out. We ended up creating public domain versions of Welcome to the Jungle and Gigantic:

Here’s the crowd at the Amsterdam taking in Katie’s routine:

The second act were We Take Lovers, who put on a great show with their indie-rock sound. They’re shopping around for accordions, so I was pleased to “talk shop” with them.

Today is day one of the conference; tonight we’re off to West Queen West to descend on the Drake and Camera!


RubyFringe Guide: The Unofficial IRC Back Channel

Joey\'s Unofficial Ruby Fringe Guide to Toronto - Small logoIn case you were looking for the IRC back channel for the RubyFringe conference, there’s one on at . Check it out, and see you there!


RubyFringe Guide: The Lay of the Land, Part 2

Joey\'s Unofficial Ruby Fringe Guide to Toronto - Small logoThis is article number eight in Joey’s Unofficial RubyFringe Guide to Toronto, my guide to Accordion City for attendees of the RubyFringe conference, as well as anyone else who’s interested in our fair city.

In case you missed them, here are the other articles in this series:

  1. Where Did All the Cigarettes Go?
  2. Getting from the Airport to the Hotel
  3. Boozin’ in Accordion City
  4. The Lay of the Land, Part 1
  5. FAILCamp
  6. The Best Damn Cookie in Town
  7. Active Surplus, a.k.a. Hardware Nerdvana

In The Lay of the Land, Part 1, I covered some areas close to the hotel. In this article, I’m going to go over some of the interesting areas to the west: Chinatown, Kensington Market and Queen Street West.


The interesting neighbourhood that’s closest to the Metropolitan Hotel is Chinatown. From the hotel, all you have to do is walk to Dundas Street and hang a left and starting walking westward along Dundas. Things will start out a bit sparse, but as you cross University Avenue, there’ll be more to see. Continue westward and the concentration of Chinese restaurants and shops will increase until you reach the corner of Dundas and Spadina, the heart of Chinatown. Chinatown stretches north to about College Street, south to Sullivan, and west to about Denison.

As you might expect, Chinatown is lined with a lot of Chinese restaurants, although you’ll also find a lot of Vietnamese places, with a little Thai and Japanese thrown in for good measure. You’ll also find a lot of grocery stores with sidewalk stalls carrying fruits and vegetables. There are also some cheap clothes in the mix: if you need some plain T-shirts, there are plenty of places that carry them in many colours, 4 or 5 for a mere $10.

If you find yourself with the late-night munchies, Chinatown is the solution to your problem. A good number of the restaurants cater to the late-night crowd; many close as late as 5 a.m. on the weekends, and at least a couple of the Vietnamese places run 24 hours.

Kensington Market

Getting to Kensington Market is easy: just walk west on Dundas from the hotel for about ten minutes and go one block past Spadina, then turn up Kensington. You’ll be in Kensington Market, an area that blends alternative and counter-culture stores, traditional food markets, international restaurants and offbeat bars. Here’s a map of the area:

If you’re looking for stuff that you’re not going to find at the mall, this is the place to go.

For more about Kensington Market, see its Wikipedia entry and this Globe and Mail story (with video) of Dr. Richard “Creative Class” Florida paying a visit to the Market.

You can also take a little photo tour of the Market through the slideshow below:

Created with Admarket’s flickrSLiDR.

Queen Street West

Check out this map: it shows the way from the hotel to the corner of Queen Street West and University Avenue, followed by a long stretch west. If you’ve got the time, it’s a very interesting walk — about 4 kilometres (two and a half miles) of one of the more interesting streets in the city. Things will start off a little more gentrified and no more edgy than the Hot Topic store in your local mall, but as you progress westward, the stores, bars and restaurants get quirkier, and you’ll see the “creative class” types who make Queen West their home. If you don’t feel like walking, you can always check out the scenery via streetcar.

Once again, I direct you to Wikipedia for a description of Queen Street West and its OurFaves page for some locals’ recommendations.

And There’s More!

I haven’t yet told you about Little Italy on College West, the Annex, that stretch of Baldwin Street with all the restaurants, the Beach(es), Mink Mile, Greektown, Koreatown, Roncesvalles, High Park and a lot of other places, but I hope that I’ve given you a good start. If you’re at the conference and have any questions about the city, feel free to ask me or any of the other locals — we’ll be happy to help!

See you at the conference!


RubyFringe Guide: Active Surplus, a.k.a. Hardware Nerdvana

Joey\'s Unofficial Ruby Fringe Guide to Toronto - Small logoWelcome to installment number seven of Joey’s Unofficial RubyFringe Guide to Toronto, my guide to Accordion City for attendees of the RubyFringe conference or for anyone who’s wondering about interesting stuff in Toronto.

The previous articles in this series are:

  1. Where Did All the Cigarettes Go?
  2. Getting from the Airport to the Hotel
  3. Boozin’ in Accordion City
  4. The Lay of the Land, Part 1
  5. FAILCamp
  6. The Best Damn Cookie in Town

This article will cover Active Surplus, a long-time resident of Queen Street West and a surplus electronics-and-gear store like no other. It’s a short walk away from the Metropolitan Hotel and well worth a visit.

If you’re a mad scientist, electronic hobbyist, artist, looking to get your stereo hooked up or even getting stuff for your wedding, I recommend taking a look around Active Surplus on a regular basis. A fixture of Queen Street West since my high-school days (the early 1980s!), Active Surplus is a warehouse filled with bins of all sorts of gadgets, gears, cables, adapters, speakers and all sorts of electronic and mechanical stuff that you’re just not going to find at Best Buy or Radio Shack, especially at their prices.

Active Surplus is located at 347 Queen Street Westhere’s a Google Map showing you the way there from the Metropolitan Hotel.

Here’s what it looks like once you climb up the stairs leading into the store:

They’ve got all sorts of cables: audio, video, computer…

…and there are power strips and extension cords aplenty, all going dirt cheap:

They’ve got a row of interface peripherals — mice, trackpads and keyboards, including this water-resistant flexible USB keyboard:

…and there are all sorts of electric motors and pumps, from those for small aquariums to those for light industrial purposes:

You can unleash your inner security officer with one of these surveillance cameras:

Or perhaps it’s your inner meter maid you want to unleash with these assemblies from decomissioned electronic parking meters:

They’ve got a section of bin devoted to digital camera and card goodies. They’ve got all kind of card readers going for very low prices:

If RubyFringe turns into that kind of party, you’ll know where to buy electric trimmers:

Active Surplus has a good stock of pens, for those of you who like taking notes by hand:

They have a few bins of sunglasses as well as 3-D glasses:

Need to cordon off an area so that you can do CSI-style investigations? They’ve got police barrier tape:

They have a seemingly endless supply of stickers and adhesive-backed mini-mirrors:

I have no idea what this glass thing was originally for (bedpan?), but I’m sure all of you who listen to jam bands saw this and thought “bong!”:

Here’s a portable toilet, suitable for camping. I love that they felt it was necessary to say that you’re not supposed to try the in the store:

And last but not least, they’ve got “Baby Legs”, which are described as “young padawan parts, thanks to Darth Vader.”