Catch up with 30 Rock

OK, here’s the deal. If you’re not watching 30 Rock, you’re not watching the best show on TV. There I said it. Fortunately, you’ve got time to catch up; the show doesn’t come back until October 30th. To whet your appetite, I give you clips summarizing the “lives” of the two main characters, played by Alec Baldwin and Tina Fey.


Google Calendar + iCal + CalDAV = happy

Google Calendar CalDAV support - instructions for setting up Google Calendar accounts with iCal. Makes Google Calendar a lot more useful to me. Conversely, CalDAV accounts don’t appear to sync with MobileMe. Bummer.


Sync your TaskPapers

I’m a fan of TaskPaper, the todo-list app that makes sense and doesn’t throw huge amounts of UI at me. Ergo, I’m pleased to see a Ruby library for syncing your TaskPaper documents to what will soon become the web version of TaskPaper. Rawesome.


Interview with David Flanagan

Last week I interviewed the author of The Ruby Programming Langauge, David Flanagan. We posted the first part of it today - Five Questions with David Flanagan, Part 1. The second part will go up next week. Enjoy!


Refactoring to more code

Refactor my code is a neat site where you can post your code and watch others refactor it. I saw an interesting bit of code whiz past and thought I’d take a crack at it.

Removing conditionals from code is one of the little games I sometimes play while coding. Here, I’ve extracted the logic of the conditional into another class. The resulting class is much more code than the original. So why do that?

Well, I say you get a few benefits:

  • The logic is now far easier to test. It’s a standalone object now rather than a Rails functional test.
  • The flow of what’s being done and tested is more decomposed and easier to follow.
  • Most importantly, the code explains itself. No need for comments (which will undoubtedly go out of sync over time) here!

While I delight in deleting code and writing as little as possible, refactoring this to more code seems the right way. What say you?

Update: Make sure you check out Marcel Molina’s refactoring. Its probably better than mine ;)


Program is information.

Its retro, its cool. It’ll come in handy when I need slides on the sameness of code and data in good programming languages.

information_programs.jpg

Via Square America.


Good Erlang reading

Socklabs - lots of interesting Erlang bits here. Not academic at all. :)


Realtime challenges

beyond rest - if publishing data in realtime, XMPP, Comet and scaling HTTP services pique your interest, this thread is an excellent read. Lots of smart people disagreeing here.


Women working on a plane

1940s and 50s industry is neat, OK?

women_plane.jpg

Via ffffound!


Some Grieg

Please to enjoy, Grieg’s Piano Concerto in A minor. Brought to you by Artur Rubinstein and the London Symphony.

[youtube=http://www.youtube.com/watch?v=Dxzpy1b1_BY&hl=en&fs=1&rel=0&color1=0x3a3a3a&color2=0x999999]

The rest of the first movement, the second movement and third movement, also for your enjoyment.


Thor and agility

Watching Thor at his agility classes is really interesting. It’s fun to see the dogs constantly looking up to their person to see what jump or obstacle to go to next. Of course, the class is half dog training and half people training.

I’ve noticed a distinct change in Thor’s obediance since he started taking the classes. He’s more receptive to good boy/bad boy commands now. And, of course, he’ll do anything for food!

Here’s some video I took of Courtney and Thor doing their agility thing.


House on water

I wouldn’t mind living on the water like this.

ocean_house.jpg

Via ffffound!


HTTP wrappers with ease

httparty looks really cool. It’s a little library for making writing tiny REST clients easier. From the examples (edited for length):

class Twitter
  include HTTParty
  base_uri 'twitter.com'

  def initialize(user, pass)
    self.class.basic_auth user, pass
  end

  # which can be :friends, :user or :public
  # options[:query] can be things like since, since_id, count, etc.
  def timeline(which=:friends, options={})
    self.class.get("/statuses/#{which}_timeline.xml", options)['statuses'].map { |s| s.to_struct }
  end
end

twitter = Twitter.new('bob@example.com', 'bobtime')

twitter.timeline.each do |s|
  puts s.user.name, s.text, "#{s.created_at} #{s.id}", ''
end

Great job, John!


Agility course made of people

Wow.

[youtube=[www.youtube.com/watch](http://www.youtube.com/watch?v=bxLX63qqNyg&hl=en&fs=1&rel=0&color1=0x3a3a3a&color2=0x999999])

Community anti-patterns

You’ll have to pardon me for linking to Ted Leung twice in short order, but the man is good peoples. This time I’d like to draw your attention to his presentation from OSCON on Open Source Community Antipatterns.

Ted’s talk is full of great observations from his time at OSAF and his ongoing work with the Apache project. Keep in mind that the presentation is on anti-patterns, so most of the slides describe what you don’t want to do.


Its a Data. Base.

Say it with me. Data. Base. I knew you could!

database.jpg

Via Square America.


Not your father's IDE

IDE’s and Dynamic Languages. Ted Leung’s got some useful and insightful things to say about dynamic languages, history, IDEs and the people who use them. While I still think many of the features in a modern IDE are crutches, I hope that what Ted is alluding to becomes a reality.


Golf fail

My golf game is hurting these days. Since I’ve become so familiar with my shots drifting off to the right, I figured I’d finally figure out the correct term for these sorts of shots. Thusly, an illustration to teach myself:

BadSwing.jpg

Handsome penance, isn’t it?


Failings of the expert's mind

Why Analytical Applications Fail. Ostensibly, this article is about analytics applications that expect users to know exactly what they want before they start. But to me, the underlying story is of developers who get caught up in their domain and build an application for themselves instead of for their users.

We’ve all fallen into this trap. Whenever a new person joins my team, I always try not to squander their beginner’s mind. Fresh team members can often point out places where the interaction design or domain model need to soften up for those who haven’t lived in the project for months. That said, it requires patience and humility on the part of the existing team.


Practical language kleptomania

Introducing Functor - another library for implementing multiple dispatch/pattern matching in Ruby. This is a great example of what I talked about at OSCON: stealing ideas and applying them to your daily work. I’m particularly impressed with how Dan has applied it to something that isn’t a recursive mathematical function - check out the example of using in a view class.