RubyFringe: Day 2 Notes, Part 3

And finally, the last of the notes I took during RubyFringe’s presentations:

  • The Pete Forde Break
  • Ruby.rewrite(Ruby) (Reginald Braithwaite)
  • Conceptual Algorithms (Tom Preston-Warner)
  • Sinatra (Blake Mizerany)
  • Be Good (Leila Boujnane)

Read on for the notes…

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!

3 replies on “RubyFringe: Day 2 Notes, Part 3”

Comments are closed.