State of the Blog address

written by Jeff on June 5th, 2008 @ 10:31 AM

Ok, just got back from Railsconf, and I realize how lax I've been on writing about what I've been doing. Grockit completed it's second round of funding as reported on TechCrunch last week, and things are picking up steam at a nice clip. We're actively hiring if anybody is interested send me a resume. We are in a closed beta now and we'll be adding people throughout the summer. Railsconf was fantastic as usual. Parts were better than years past, parts were worse, but overall I still learned a lot and got to hang with a lot of people I respect and enjoy learning from.

I'm still playing with merb, but work on blerb has pretty much died out. Most have switched over to feather which has a bit more traction. It has a very well developed plugin framework (which is about to be converted to merb-slices according to the chatter in #feather). It's blazing fast and easily extensible. I'm still planning on converting this blog over to something else that will tax my slice less, so feather is the current choice du jour.

For those of you who played the legendary unroll game (llor.nu) when rails was still a fledgling platform, the source has been revived and is available on github. As it is now, it runs under Rails v1.2.6. The instructions in the readme are good enough to get you going. Feel free to fork it and get it up and running publicly if you wish. I'm contemplating a port to merb (just as an excuse to get deeper into the merb framework), or possibly a facebook app. Michael Buffington, creator of the original (and currently my boss), got it running again during Railsconf and wanted it released into the wild to see what kind of craziness people could unleash upon it.

I can haz openid

written by Jeff on February 15th, 2008 @ 03:51 PM

I’ve long wanted to set up jwhitmire.com as my openId provider, but thought that it would be either expensive to tie into a commercial service, or too much hassle to write my own. Thanks to Dr. Evil, it’s a piece of cake. If you want to do the same, check out the instructions.

Come see blerb @ Railsconf

written by Jeff on February 7th, 2008 @ 01:44 AM

It’s official. Not only will I be going back to Railsconf this year, but I just signed up blerb to be part of Chad’s Community Project Code-Drive. I’m excited about the potential of this blog engine and it should be pretty polished by the end of May.

So, if you’re coming to Railsconf, come hang out with us on tutorial day and help us finish it up.

The word on blerb, yay merb

written by Jeff on January 30th, 2008 @ 10:29 AM

That’s not the sound of silence you hear, it’s the blerb-ling of the future. I noted earlier that I was probably going to either get involved with one of the two merb blog initiatives (blerb or mrblog) or write my own. As it turns out, the smart folks at EngineYard who support us at Grockit are the same smart folks behind both. I’m now involved with helping develop blerb, and we are integrating the initial work that went into mrblog to consolidate the two.

It’s not a typo/mephisto/radiant replacement, and is not meant to compete with wordpress, blogger, or any other major blogging engine. The idea is that it will be small, incredibly fast, have everything you need for basic blogging, and be easy to extend by just adding new controllers and hacking away. Each of those other systems has their place, and I’ve used most of them, but what I really want is a blog that I can easily turn into an app. Most of the side projects I find myself building are some set of functionality surrounding blog-like communications. Blerb will be a dream-come-true for that scenario.

In the process, I’m working with some really smart people and learning a lot. For example, I learned last night that when you specify your datamapper relationships, you don’t need to add the foreign key, you get it for free. So, when you build your comments model, with it’s relationship to your post model, by specifying “belongs_to :post” in your comment model, you automatically get a post_id field. Ain’t that cool?

We are hoping to have blerb ready for public consumption before railsconf in Portland. If you want to know what’s going on before that, hang out with us on #blerb in irc (freenode) or check out github We also have a freshly minted mailing list

A deal at twice the price

written by Jeff on January 12th, 2008 @ 10:23 PM

I’ve been a big fan of Macheist since the first bundle came out last year. They recently announced the second bundle. It’s a great deal if you’re a mac user (and why would you be anything else?).

Check it out

The sound of silence

written by Jeff on January 12th, 2008 @ 12:11 AM

It’s been quiet around here, but there’s a storm brewing. I like mephisto, but it’s a bit heavy for what I need and not nearly as extensible as I would like. I’m either going to help with blerb (merb + datamapper based blog engine) or I’m going to strike off and write my own (probably also merb/datamapper based). As I have great epiphanies, I’ll try to record them here. As I have stupid comments you’ll have to endure those too.

Stay tuned for great upheaval

Upgrade to XP

written by Jeff on December 18th, 2007 @ 10:01 AM

Being one to never pass up an opportunity to take pot-shots at Microsoft, I just had to share this article. It makes me giggle:

Windows XP Review

Woot Leakfrog saves the day!

written by Jeff on December 17th, 2007 @ 11:28 AM

This is just too good not to share. I’m a huge fan of Woot!. A while back (it’s probably been a couple of years now) we had a problem with water in our basement. Our house is really dry for the most part, so much so that we don’t even have a sump pump. Every few years, we get enough water to seep up into the floor just a bit. Woot! advertised these things called LeakFrogs: that are little plastic frogs that have metal contacts on the bottom. You put them where you suspect water might seep in, if it gets high enough to cause a connection between the contacts it starts beeping to let you know.

Well, after what I had just been through, I bought a couple of them and put them in the basement (enduring strange looks from the wife and kids in the process). For those who don’t live in the area, Rochester got a pretty big snow storm this weekend. We ended up somewhere in the 15-20 inch range where I live, but not too bad. Usually we don’t have any water issues from melting until spring, but my wife came down the stairs this morning and heard this strange beeping noise. Sure enough, it was the leakfrog, and it gave me plenty of time to hook up the utility pump and take care of the problem before it turned into something serious.

Yay Leakfrog!!

Numeric Keypad in Parallels

written by Jeff on December 13th, 2007 @ 12:26 AM

If you’re using Parallels and find yourself in need of the keypad. It’s not very well documented, but the clear key on the keypad toggles the numlock so you can use the numeric keys.

Thought you’d like to know (plus, if I write it here then I know where to look for it next time I need it) :)

Want to learn ruby?

written by Jeff on December 12th, 2007 @ 10:07 AM

If you want to learn ruby, there are a number of things I would recommend to get you started. However, this corse comes highly recommended from people I trust, and it’s free. Check it out

Leopard screen sharing tip

written by Jeff on December 11th, 2007 @ 01:16 PM

Screen sharing via iChat in the Leopard is indeed awesome and amazing. However, there’s a better way. Here are my issues with the default screensharing via iChat:

  1. It’s modal—you can’t click on any other application or interact with your own desktop in any way while sharing someone else’s desktop
  2. It’s fullscreen, but it’s not—it takes over the whole screen, but there’s a black border around it if the screen you are sharing is a lower resolution than your screen so you still can’t get to your own desktop behind it.
  3. You can’t select which desktop you want to see if they screen sharer has multiple desktops. You get all of them. If you are sharing with someone who has dual 30” displays and you are trying to view it on a macbook pro screen, that’s a real pain.
  4. You can’t share with more than one person. If I were doing default VNC (which is the underlying protocol for Leopard screen sharing), I could allow as many clients as I want to view my screen. With Leopard, it’s one only.
  5. I can’t have a view-only client. With VNC (typically we use the Vines server and Chicken of the VNC client) I can connect my client as view-only so I don’t have to worry about mouse contention with whoever is driving the server. You can’t do that in Leopard.

Don’t get me wrong, it’s still very useful, but these things do add up to be quite annoying. I still don’t have a solution for #4 or #5 (any help would be appreciated, please comment), but I’m here to relieve you if you’ve struggled with #1-#3. It turns out that iChat is using another installed app as the backbone of the screen sharing experience. Venture into finder and take a look at

/System/Library/CoreServices/Screen Sharing.app

This is the actual Leopard screen sharing client and you can run it outside of the iChat context. You give it the address of the server you are trying to share (the sharee has to initiate this to get the screen of the sharer). You then have the option of logging in using a known user/password on the sharing computer, or you can request permission which prompts the sharing computer. In order to set this up, the sharing computer needs to have screen sharing needs to be turned on in System Preferences (under the Sharing panel), and if behind a firewall/router you need to have the VNC ports forwarded to the right internal IP (I forward ports 5900-5902).

It still does the same cool screen sharing, but you get these options as well. Under the view menu, you can select which display you want to share. You can easily use this to switch between displays, or go back to viewing them all if you really need to.
  • You can syncronize the clipboard contents of the shared machines. I can copy something to the clipboard on my end, then use the menu to sync the clipboards of the two machine. My pairing partner can then paste in the code/url/whatever that I just put on his clipboard.
  • The sharee (client) sees the shared content in a window that can be resized at will. It no longer consumes the whole screen, and you can have the focus on another application so you don’t accidentally contend for the mouse on the shared machine anytime it happens into the shared window. You can adjust the quality (adaptive vs. full) of the view as well which can help alleviate issues from sharing on a smaller or lower res monitor, or if you are trying to optimize network bandwidth.
  • If you want to have multiple clients, you still need to fall back to VNC/NX/etc, however using the actual screen sharing app instead of doing it through iChat has greatly enhanced remote pairing for me. Hope that helps.

    Richter bubble video

    written by Jeff on December 5th, 2007 @ 09:54 AM

    I know the stupid song says to blog about the video, and yes I am, but it’s just too funny not to, and besides it’s Billy Joel. If you haven’t seen this yet, check it out:

    Richter Bubble Video

    Having been burned rather badly by the first bubble bursting, I have had thoughts lately that it feels like 2000 all over again. On the other hand, I think VCs are a little smarter this time, especially since they have so many options. On the other hand, how can you explain an industry that is based on the whims of social networking as a legitimate enterprise? Facebook could disappear even faster than it appeared if you combine a strategic mistake or two along with something cooler coming along (who uses Myspace anymore anyway?). On the other hand (can you tell I just watched ‘Fiddler on the Roof’ lately?), the expectations are set higher than they were, and there is some expectation of cash from something other than an IPO.

    Here’s hoping that if it happens, it’s at least more like the air going out of a balloon than a bubble bursting. At least that gives a much more exciting ride.

    Slicehost rocks

    written by Jeff on November 17th, 2007 @ 10:00 PM

    I just have to give a quick shout-out to the fine folks at slicehost. I’ve been doing shared hosting for years, but this is my first real experience with a VPS. It took a few weeks to get my slice ordered, but it was well worth the wait. I’ve currently got nginx fronting a mongrel cluster serving up 3 blogs (no, they are not all mine). It’s screaming fast and other than figuring out how to get all the data migrated was really easy to set up. If you’re looking for a hosting solution and you want more muscle than a cheap shared host can give you, I strongly recommend them. It’s not for the faint of heart, you have to set up the machine from scratch, but if you’re comfortable in a unix command line, there’s lots of good help to be found in the slicehost community.

    What is Grockit?

    written by Jeff on November 16th, 2007 @ 10:49 AM

    I love what I do as a developer. As I’ve grown in my profession, I’ve come to realize that writing good code for the sake of writing good code is not enough for me any more. I have been on too many never-ending projects that outside of the narrow scope of the company had a pretty low POGG score (POGG = my new metric for determining the worthiness of any endeavor: Purpose of Greater Good). There is nothing wrong or inherently evil about those projects, I am just at a point where I want my work to count for something better if I have that as an option.

    So with that as a backdrop, I’d like to brag a bit about my current job. Anybody that knows me, and especially those who have been to my house an been pwned by my 5 year old at a game of Jenga knows I’ve always been passionate about gaming, especially good ones that make you think in different ways. I’ve had very animated conversations with many people about the educational power of games and how that’s been so underutilized in mainstream education. As a homeschooling family with five incredible children (and an amazing wife who shoulders the bulk of that immense burden) education itself is also something I take very seriously.

    Back in the summer, my contract at Revolution Health was quickly coming to an end and I was concerned with what I would find to do next, the prospects were not that encouraging. Like a cloudburst on a dry parched day, along comes Grockit. I answered a post on the ruby jobs list with some fear and trepidation because the opportunity sounded too perfect. Some while later, on a Tuesday morning I had a phone conversation with Michael Buffington (technical co-founder). Later that day I had a call with Farbood Nivi (CEO and education ninja). It was a perfect match and by Wednesday evening I had an offer in hand and a place to go. (There are some other interesting parts to this story involving haiku, but that can wait)

    So that’s my part of the story, but what’s Grockit all about? For the bulk of that answer you’ll have to be patient. We are working very intensely on a platform that will be released at some later date. I can tell you it’s a game platform about education, and it’s all about helping people teach each other. The premise is that you learn better when trying to help others learn as well (not coincidentally, kind of like the title of this blog :) ). I could tell you more, but then I’d have to kill you so let’s just keep things simple for everybody and I’ll keep quiet. It would be better for you to get the vision from the our “Chief Teachnology Officer” himself (no that’s not a misspelling). He recently did an interview with Brian Norgard that’s worth a look. It shows his passion and drive to pull this off. Check it out and stay tuned. I’ll post updates as the important dates are nailed down.

    RSpec pending goodness

    written by Jeff on November 15th, 2007 @ 11:02 PM

    I’ve always liked the way RSpec succinctly clarifies the intentions of your tests in such a non-computer fashion so testing in fact turn into requirements gathering exercises. At Rubyconf last week David Chelimsky showed off some new syntax sugar that I absolutely loved. For all I know it could have been in RSpec from the start, but it was new to me and it’s now a regular part of my repertoire. It’s the pending block syntax.

    The ability to mark tests as pending has always been a strength of RSpec over any other testing framework I’ve ever used. It’s easy enough to rename a test method so it doesn’t execute, but before RSpec I’ve never worked with one where you can mark it as pending and it then reminds you that you still have work to come back too. Too often renamed tests get forgotten. Here are the many ways to mark tests as pending.

    1
    2
    3
    4
    5
    6
    7
    8
    
    describe "Test some object with pending tests" do
      it "should make sure 2 + 2 = 4" do
        4.should == (2 + 2)
      end
    
      it "should make sure the second derivative of something calcs fine"
    
    end

    That will run with one green test, and one yellow test marked ‘PENDING: Not Yet Implemented’.

    (That’s the output you get from Textmate’s most excellent spec runner). Another way to do the same thing, but add some context is as follows:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    describe "Test some object with pending tests" do
      it "should make sure 2 + 2 = 4" do
        4.should == (2 + 2)
      end
    
      it "should make sure the second derivative of something calcs fine" do
        pending "This test can't be implemented until derivatives make sense to me"
      end
    
    end

    It still marks the spec as pending, but instead of ‘Not Yet Implemented’, it gives the text you specified (in this case: ‘This test can’t be implemented until derivatives make sense to me’ - seemed like a good reason to me).

    Both of these forms are very useful for marking entire specs as pending. I tend to use the first form when I’m first trying to capture all the specs I need to write to implement a piece of functionality. Then I come back and implement each spec, then get it passing, but I’ve already captured what I think would be the entire scope of functionality necessary in the pending specs. I’ve seen people use the second form (the pending keyword) a lot to skip a spec that is suddenly failing. There is a better way. Instead of marking the whole spec as pending, add a block to the pending keyword and use it to wrap the part of the spec that is misbehaving. You get a double benefit. Take the following test for instance:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    describe "Test some object with pending tests" do
      it "should make sure 2 + 2 = 4" do
        4.should == (2 + 2)
      end
    
      it "should follow the rules of basic arithmetic" do
        4.should be < 5
        9.should_not == 76
        3.should == (1 + 1)
      end
    
    end

    It fails as follows:

    Ignoring the trivial nature of the spec, if the failing test is part of a library or in some code which you are dependent on somebody else to fix it. Take the failing spec, wrap it in a pending block with an appropriate comment like so:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    describe "Test some object with pending tests" do
      it "should make sure 2 + 2 = 4" do
        4.should == (2 + 2)
      end
    
      it "should follow the rules of basic arithmetic" do
        4.should be < 5
        9.should_not == 76
        
        pending "need to alter the rules of the universe to make this happen" do
          3.should == (1 + 1)
        end
      end
    
    end

    This produces:

    Now, not only does the spec pass, you get a huge benefit. While it appears that the entire test is skipped as pending, it’s not. The specs outside the pending block are still evaluated and the spec will fail if any of their assumptions are broken. Another unexpected benefit is that the code inside the pending block is actually run with each spec execution. As soon as it passes, you’ll get an error notification saying that though you expected this spec to fail but it didn’t (in this case I modified the code to work, but you get the idea).

    Consider it a friendly reminder to come back and clean up your pending specs as soon as they no longer need to be pending. That way you can stay lean and mean and keep those specs green.

    If this is the first time you’ve seen RSpec in action, you don’t know what you’re missing. If you like to read up on cool stuff, head on over to the RSpec Homepage. If you’d rather sit back and let some smart person explain it to you and show you how to get it all set up, I’d say this would be a better bet.

    Enjoy!