hoodwink.d enhanced

Fri Sep 30

The whole experience is a blur. An adrenaline-filled heart-attacky blur.

Hillary, describing what it’s like to ride The Zipper

This patch catches a lot of the low-hanging fruit in AR::Base.



The Zipper

Thu Sep 29


23:22 <@noradio> i'm going to sleep i think
23:23 <@htonl> yeah i'm going to hit it early
23:23 <@htonl> i'm friggin tired tonight
23:23 <@chad> too much disco?
Nothing is less real than realism.

Georgia O’Keefe

Make default template assertions implicit

# Refactor your action and the template assertion # can remain unchanged. Tiny victories! def assert_default_template assert_template @controller.action_name assert_response :success end

Shopify previews Liquid

Jaded Pixel has been working on Shopify for some time now. It’s the same idea as Paul Graham’s Viaweb, ten years later. They’ve just given a preview of a simple yet seemingly powerful templating markup that they will be making available to their users.

<div class="product-image">
   {{ product.image -> thumbnail }}

Don’t see functionality like that too often. I trust Tobi won’t let you do:

{{ customer.billing_info -> creditcard_number}}

New ten dollar bill


12:31 AM < Theiggsta> any apple laptop owners in here?

Wed Sep 28


14:09 * noradio whips out his apl keyboard and writes a love letter
14:11 < chris2> iota space lambda omega vee epsilon space yum omega underbar
14:12 <@noradio> mmmmm...underbar
14:12 < chris2> (there is no yum, but i imagine it to be an upside-down lambda)


11:26 <@chad> what's the johnny cash quote about today?
11:28 <@noradio> Trains' a comin' presages the impending take over of the world by DHH
I hear the train a comin’. It’s rollin’ ’round the bend.

Johnny Cash, Folsom Prison Blues

Tue Sep 27


15:43 < nzkoz> must. not. skive off. work...
15:43 < noradio> "skive" is that New Zealandish?
15:44 < htonl> i don't want to know what "skiving off" means


13:06 -!- [xal] [n=tobi@HSE-Ottawa-ppp235283.sympatico.ca] has joined #rails-core
13:07 < noradio> [xal]
13:08 < htonl> incognito
13:12 -!- [xal] [n=tobi@HSE-Ottawa-ppp235283.sympatico.ca] has quit []
13:12 < xal> shoo
Basecamp is a Web 1.5 app.


Mon Sep 26


Ruby on Rails core developer Jamis Buck has a write-up on a new feature he’s implemented in ActiveRecord that lets you get a snapshot of your DB schema dumped into pure Ruby. (Jamis is a real workhorse by the way. Humility prevents him from telling you that himself. Just look at the Rails timeline sometime: He’s got his fingers all over it.)


21:58 <@Ulysses> anyone know of a omni graffle like tool for linux
21:58 <@Ulysses> ?
21:59 <@noradio> dia (lol)
21:59 <@noradio> i've used it a little
22:00 <@noradio> i used it once to write a uml use case
22:00 <@noradio> http://vernix.org/marcel/share/buen_dia.png


21:18 <@noradio> David Heliotropic Hematoma

A mess of clouds

You’re just full of false hope on this tumblelogging thing today.


Hudson is charming and yuppified and beautiful.

Henry the Intern

Sun Sep 25

Generate sorta-kinda-UUIDs in JavaScript with Prototype 1.4.0_pre6

function UUID() {
  return [4, 2, 2, 2, 6].map(function(length) {
    return $R(0, length, true).map(function() {
      return (Math.random() * 256).toString(16);

/* UUID()
 * => "eea637ad-e840-dc78-8199-d1c176f3a170" */

Sat Sep 24

Her body has not truly been stripped til her clothes have been ripped by his nail bitten fingers.

The Librarian by Hefner

Tip Prevent accidental toggling of Safari’s popup blocker

It took me quite a while to realize that the reason Safari so frequently forgets its popup blocker setting is because I’m accidentally triggering its Cmd-K hotkey (either by mistyping Cmd-L to get into the address bar, or by not switching focus to Finder before using Cmd-K to mount a network share).

Here’s how to remap it to something else:

  1. Open System Preferences and click on the Keyboard & Mouse button.
  2. Click the Keyboard Shortcuts tab, then click the + button below the shortcut list.
  3. Choose “Safari” from the Application drop-down and enter “Block Pop-Up Windows” in the Menu Title field.
  4. Type a new key combination in the Keyboard Shortcut field. I’m using Shift+Cmd+K.
  5. Click Add, then restart Safari.


12:57 <@htonl> ?SZ$"<??Q???{x?Q#*)?z$k?h9,??e{>Q_P???[???6DoZ?&?1W?y.qPZI??,???)?n???B=>T??M J?Eb??Z??Mu*?.`I?~D}[.TH?,??NJN??BhHU?QD?"u?^?*?S*???c@g?P&uv?n?K?????m??>??????s?m?L3:a?~?[Ma?=HTK3 C??X[XYwo?C??W?q@[?jS?fs%|MQ
12:57 <@htonl> ?KFcRE^Cm?G??$?? ???fY??[?Y?-B?ZL??F?6??????B?BnT??8 ?sgC!t{REJR-5)dM???_?C?CPn$M?U
12:58 * chad refreshes projectionist


11:07 * chad blogs that
11:08 * noradio meta-blogs chad's blog
11:08 * chris2 meta^2-blogs the discussion
11:09 * noradio watches the blogosphere explode once it reaches its stack limit
11:09 * chris2 has an tail-recursive aggregator
11:09 <@chad> oh lucky


10:44 < noradio> David Hinterland Horticulturalist


18:21 < noradio> David Hypercard Hageography

Ms. Penn’s dog Hegel


09:40 <@noradio> chris2: you should have yodeli.st be your tumblelog's domain name
09:41 <@noradio> since you are german and what not
09:41 <@chris2> i can't yodel
09:41 <@noradio> Hegeli.st
09:41 <@chris2> linkedli.st
Ten PM, and the town of Chicago was shining.

Denis Johnson, Angels

Fri Sep 23


16:33 < toryj> I'll take a screenshot
16:34 < toryj> Why German Nudists
16:34 < toryj> Are Wearing Frowns
16:34 < toryj> As Others Disrobe
16:34 < toryj> wtf?
16:34 < toryj> that is NOT what I meant to paste
16:34 <@noradio> ...


13:06 < minam> okay, ActiveRecord::SchemaDumper is committed
13:07 < noradio> you are so fast
13:07 < minam> noradio: heh :) look at the code--there isn't much to it ;)
13:07 < nextangle> That's always been my secret to fast ;)
13:07 < nextangle> I don't work faster, I just do less ;)

Thu Sep 22


20:18 < noradio> rake migrate && rake load_fixtures :)
20:18 < htonl> && rake my_yard
[I]t makes me sick just thinking about it. [N]o program should be that big (25,000 lines) - just like no soda should be 64 ounces.

Ara. T. Howard

Easily assert that records are correctly ordered in functional tests

def assert_ascending(collection) previous_value = yield collection.first assert(collection[1..-1].all? do |current| returning(previous_value <= (current_value = yield current)) do previous_value = current_value end end) end def assert_descending(collection, &block) assert_ascending collection.reverse, &block end # Test that @people is ordered by company name assert_ascending assigns(:people) do |person| person.company.name.downcase end


16:33 <@Ulysses> my sub just exploded bbq sauce all over my shirt
16:33 <@Ulysses> ... that girl fails it as a bbq sauce applicator
16:34 <@Ulysses> she did not shake it at all and it is way too fluid
16:36 <@htonl> go back and throw it in her face

Tip Rake task dry-run

You can see what a Rake task would do without having it actually do it by passing in the -n option.

$ rake test_functional -n
** Invoke test_functional (first_time)
** Invoke test_environment (first_time)
** Execute (dry run) test_environment
** Invoke create_db (first_time)
** Invoke destroy_db (first_time)
** Invoke environment (first_time)
** Execute (dry run) environment
** Execute (dry run) destroy_db
** Execute (dry run) create_db
** Execute (dry run) test_functional
i2 is a lot less software and more opinionated.


Wed Sep 21


15:50 < htonl> if only i had a webcam ... you could see what i'm doing to switchtower right now


They make stuffed animals that look like tiny microbes. If you go down to the woods today, you’re in for a big surprise. Who knew ulcers were so cute?
My job went to Ionist…


…and all I got was this lousy tumblelog.



12:30 < madrobby> ok, so how do i use Apache with multiple fcgi processes spawned by spawner? do i need extra load balancing software?
12:37 < minam> I wonder how hard it would be to write a simple ruby daemon that did that... wouldn't be nearly as efficient as something like haproxy, but it would be simple to set up anywhere
12:37 < madrobby> please do :)
12:38 < minam> must...focus...on...the...task...at...hand...

I got a new bike (lusty!)

Tue Sep 20

Ruby 1.8.3

Grab it while it’s hot.

Continuous integration in one line ;)

$ watch -n 600 rake
Matz has given the OK to start checking RubyGems into the Ruby trunk.

why the lucky stiff

DRY up object attribute change assertions

def assert_difference(object, method, difference=1) initial_value = object.send(method) yield assert_equal initial_value + difference, object.send(method) end def assert_no_difference(object, method, &block) assert_difference object, method, 0, &block end # ... def test_new_publication assert_difference(Publication, :count) do post :create, :publication => {...} # ... end end

Parking tickets

Tumblelogs everywhere

Chris Wanstrath kindly informed us of his new tumblelog, ones zeros majors and minors, by email last night. It seems great, and we’re looking forward to the release of his ozimodo tumblelogging engine.

Make all associated records of an AR object spring into existence as instance variables

# ex.: If Client belongs_to :firm and :project, # vivify @client = Client.find(params[:id]) # gives you @firm and @project associations. def vivify(object, macros = [:belongs_to]) all_associations = object.class.reflect_on_all_associations all_associations.each do |association| next unless macros.include? association.macro instance_variable_set "@#{association.name}", object.send(association.name) end end

Happy birthday to Scott’s son, Luke

Mon Sep 19

The bearing of a child takes nine months, no matter how many women are assigned.

Frederick Brooks

Tip Rake tab completion for bash

[Courtesy of Nicholas Seckar] Tab complete your Rake tasks in bash with this script (508 bytes). Load it in your ~/.bashrc like this:

complete -C path/to/script -o default rake

Sun Sep 18


21:18 < chad> you guys have really been letting me down with projectionist
21:18 < chad> i mean
21:18 < chad> i don't understand any of your posts
21:18 < chad> and it's making me feel unintelligent

Posted, via saqataq

All programmers are optimists…Perhaps it is merely that computers are young, programmers are younger, and the young are always optimists.

Frederick Brooks

Sat Sep 17

Everything is both.

My 5 year old nephew

Fri Sep 16

We’re doing everything just right, except for touching and for holding and consoling. Let’s go bowling.

Lambchop , Let’s go bowling

I search for myself.

James Britt, out of context

David Hockney goes to the movies

Tons of pictures shot with a digital camera assembled together into a narrative that “reads” like a short movie. High quality and well done.

Thu Sep 15



Build a hash from two arrays

keys = [:a, :b, :c, :d] values = [:one, :two, :three, :four] Hash[*keys.zip(values).flatten] # => {:a=>:one, :d=>:four, :b=>:two, :c=>:three}

Wrap instance variables in accessors without exposing them

class Image [:name, :path].each do |sym| attr_reader sym private sym end def initialize(name, path) @name, @path = name, path end # ... end

What happens when t approaches 0?

Andy Hunt ponders the implications of rapid (and I mean rapid) application development.
There are a number of additional UI enhancements that you can take advantage of in the ASP.NET ‘Atlas’ framework. For example:

  1. Coming soon
  2. Coming soon


Microsoft Atlas: Let the “embracing” begin

The new Atlas Ajax framework from Microsoft features a $() function, lifted wholesale from Prototype where it debuted in March with Rails 0.10.

I couldn’t find mention of its origin anywhere on the Atlas site. Fancy that! The Atlas team should take a cue from David Flanagan, author of O’Reilly’s JavaScript: The Definitive Guide, who politely asked if he could include $() in the next edition of his book.

Update Thomas Fuchs has more on the Scriptaculous/Prototype ripoff.


12:49 < madrobby> hmm. M$ put up a 17-page document on how to create a autocompleting textbox with their Atlas ajax-framework.
12:54 < madrobby> they have a "_loadIECompatLayer" function in AtlasCore.js
12:54 < madrobby> so they need extra functions to be compatible to their own products

Wed Sep 14

You will care far less what other people think of you when you realize how rarely they do.

David Foster Wallace [paraphrased]

C# 3.0 specification

Mixins, lambda syntax, implicit typing, named arguments for constructors, and a query expression language mean it’s not just a Java clone anymore.

Open source spirituality

_Just as open source software is continually being upgraded with new improvements or capacities, the open source spirituality process is also in a process of never ending upgrades. _

The Onion can only wish they’d come up with this first.

Sadly they have nothing to say about the new Agile Spirituality methodology. They need to Get Real.

Tue Sep 13

Starry Decisis…Starry Decisis…Starry Decisis…Super Starry Decisis…[etc…]

Arlen Specter

Here’s something to keep an eye on—tumblelogs … The best example (by far) is the gorgeous Projectionist website … a site that has forever changed the way I think about blogging. Amazing.

Thanks Marcus Vorwaller

Mon Sep 12

I only write two things by hand: math and love letters.

Zane Crawford


22:12 <@htonl> man i wish itunes had a "pressing play right now will likely blow out your fucking ear drums" warning

Sun Sep 11


Lincoln Park Zoo

Joel has fulfilled my vibration needs by driving on the rubble strip for extended periods of time.

Ruth, who is taking a road trip with Joel

Sat Sep 10


10:16 < dblack> tango_: here docs don't strip whitespace
10:17 < dblack> tango_: you'd have to filter it through a stripper
10:17 < dblack> (so to speak :-)

Fri Sep 9

We are still in the infancy of naming what is really happening on software development projects. The answer is not process, modeling, or mathematics, although those play parts. The answer has much more to do with craft, community, pride, and learning.

Alistair Cockburn in Agile Software Development


Attention, FedEx

Cerf the net

Google is taking over…


1:09 PM <@htonl> oh good, now i get to read "is rails ready for prime time" a thousand times as every nerd blogs their link to it
1:14 PM < chris2> sorry, on anarchaia too :P

Is Rails ready for prime time?

Dave Thomas serves up a huge dose of pragmatism.

Choice excerpt:

[T]here are situations that call for the shock and awe that is J2EE

Racy ;)

Thu Sep 8

Since I have been sick of poorly managed issue tracking in Ruby development (my bad), finally I decided to move on to basecamp.


Wed Sep 7


module Enumerable def inject_with_index(memo = nil) inject([-1, memo]) do |(i, m), v| next [i, v] if i == -1 unless m [i += 1, yield(m, v, i)] end.last end end
I am gen awesome.

Patrick Henry Ewing


Any suggestions on how we could arrange our office? Here is the graffle. furniture@ioni.st or wink.

Tue Sep 6


22:38 <@noradio> gilligan died
22:38 <@toryj> yeah :(
22:39 <@noradio> guess he's out for chief justice in that case :\

Mon Sep 5


Mo got a new car

Ajaxed Apple Store

So I’m checking out new PowerBook configurations, and what do you know? The Apple Store has been Ajaxed. Select an option and the price and configuration in the right-hand sidebar is updated, along with a blue-colored “yellow fade.”


Sun Sep 4

Software is at least as malleable as software requirements.

Chad Fowler, My Job Went to India


10:37 <@sam-> have you noticed how the guys from NASA post benchmarks alongside every bit of example code on the ML?
10:39 <@chris2> ;)
10:39 <@chris2> slow rockets suck
In other words, I think your katamari is pretty huge right now.

Patrick Henry Ewing

Sat Sep 3

Nudge, nudge

So we added comments to Projectionist. It took 0 lines of code, thanks to why the lucky stiff’s hoodwink.d. And it’s spam-free.

Feel free to steal our banner if your site is hoodwink’d too. And if you haven’t signed up yet, what are you waiting for?

Fri Sep 2

TextMate 1.1b17

A new beta of TextMate is out with enhanced (“intelligent”) snippets. Watch this video, then read the detailed explanation in his blog post and watch the video again. Odgaard truly is a perfectionist.

Selectors with CSS Builder

Have you been following Scott Barron’s progress on CSS Builder? He’s created a convenient, DRY DSL for describing selectors, which he plans to use as the basis for a set of macros which let you, say, hide a block of CSS from Internet Explorer.

Super cool stuff. (You can check much of it out now from the Builder CVS repository.)

Thu Sep 1


Train’s a comin’

Itís not about where you sit on the perceived value chain of project work (where the architect holds the highest spot of royalty). Itís about how generally useful you make yourself.

Chad Fowler, My Job Went to India