Kernels of Truth

June 29th, 2008

That’s what make something funny.

Introducing Blanket

March 6th, 2008

I’d like to introduce you to Blanket, a library designed to make automated, remote backup easier. I’ve had to set up automated backup before, and I wrote this package to make it more enjoyable for myself and others. I was also experimenting with a lot of new technologies and techniques, which makes it even more rewarding that the end product ending being a preliminary success.

An introduction to Blanket is available at the excellent GitHub. There’s also the blanket project on RubyForge which means that I also have my first Gem in the wild.

Install it, kick it around, and if you like what you see, take a look at the development road map and see if you’d like to get involved. I have some GitHub invites if you need them, so please contact me if that’s an issue.

A Launch!

December 20th, 2007

I have been working at TradeKing since the beginning of September, and the site that I (and others) have been working on will be launched to the public tomorrow.

It’s a great site, and I am very happy with my change in brokerage, regardless of my employment status. If you are a stockholder, consider transferring your assets to TradeKing. You can’t beat the price, and the customer support is top-notch. You also get to play around and shoot me nasty messages if you find any bugs in the community site. What could be better than that?

Hoedown Roundup

August 11th, 2007

Ezra’s Merb presentation was useful for someone like me with no exposure to the framework, but could have been sexier. Where’s our 10 minute blog app?

Adhearsion looks like it might make VOIP accessible to me, which is a pretty ridiculous notion. If you’re thinking VOIP and Ruby, think Adhearsion. I know the speaker is probably frustrated that his demo didn’t come off at the end, but that was going to be incredible if he pulled it off.

I’ve heard Bruce Tate speak a number of times, but it’s clear to me that getting out of the Java sphere has actually been good for his psyche. He speaks with a lot more passion now and asks interesting questions. He’s not the only one asking them, but I think it’s pretty likely that some of my fellow attendees could really get something out of reflecting on his talk.

Our social schedule led to missing the games development talk. Ooops!

The lightning round was relatively informative, and I preferred it to what I saw during the security talk at RailsConf.

The birds of a feather session that I attended about using Rails for social good included discussion of a mailing list that I hope ends up happening.

The presenters on the second day after that all did a great job. Ken Ault gave a great talk about the Rails ecosystem and how the interrelations were important for Smalltalk and what Ruby can learn. Smalltalk got a lot of “face-time” this weekend.

Jared Richardson gave a really illuminating talk on the interrelationship between C and Ruby.

Both talks I’m going to watch again at some point, and I think that’s one of the highest compliments I can pay.

Marcel Molina wrapped up with a talk on beauty which really wasn’t to my tastes, although clearly many people in the crowd responded well to it.

Overall, I think the organizers and the presenters did an incredible job of getting a lineup of interesting speakers and topics together in a place, delivering a great value, and bringing it off almost without a hitch. Awesome job, and I give my compliments to everyone involved.

OS X Freebies of Choice

August 10th, 2007

I’ve been using OS X on my new MacBook Pro for some time now, and I’m elated with it. I have used OS X before, at Rice. At that time, it was the only computer that I could do everything I would ever need to do from. I’m over that, this time around. I needed to be able to do even more, and OS X did not let me down. I have had to pay a lot for software this time around, but we’ll get into that in a later post.

What I Run

Web Browsing (and del.icio.us) posting

Camino and dashLicious are my preferred combo here, although I do run Firefox right now for GMail. I may try out BonEcho, but my computer hasn’t shied under the load so far, so running two browsers is OK by me. Camino delivers a Firefox level of browsing quality almost always, and pairs perfectly with dashLicious, which is kind enough to be browser agnostic.

Quicksilver

Quicksilver is the majordomo for OS X. “Albert, open my newsreader!”, “Albert, send this file over IM to my friend Jeremy!” Quicksilver has most of its functionality tied to Apple software, but plugins are available.

Flickr Uploadr

I use Flickr for my photosharing needs, and you can view the bigfleet photostream to check it out yourself. The tools are so much better than uploading directly using the web interface, it’s kind of a joke that I ever used the web in the first place.

If you use Flickr, this tool is a must download.

Google Notifier and GMail Macros

The whole reason that I run two browsers is that the combination of GreaseMonkey and GMail Macros is so powerful. The real inspiration for this post is that I have finally reached an empty inbox on GMail after clearing out nearly 2600 unread messages. You can fly through tagging, archiving, and deleting messages with barely any time at all. It really facilitates the sort of session that is advocated in Getting Things Done.

Google Notifier does the job of letting me know when I have new mail. It also lets me know if I have just read a piece of mail (by displaying a “new” entry in the ten newest unread messages list) which is annoying but still worth it.

Handbrake, iSquint and Lostify

Just read this if you have an iPod.

NeoOffice

Even if NeoOffice is slow to start up, you can’t beat free. Maybe the new iWork releases are awesome, though, and they’ll be worth paying for.

SSHKeychain

If you use SSH a lot, you can use SSHKeychain to stop typing your passwords. If you’re like me, that actually makes a big difference.

Adium

Although I really wish that either Adium would work with Quicksilver or Yahoo would work with iChat, since neither of those seems to be imminent, it’s Adium for me. Although I did get laid off, so I’m not really required to use Yahoo! IM anymore, so the iChat door is open again.

CocoaMySQL

MySQL is my favored database, and CocoaMySQL is my favorite interface to it on OS X.

Transmission

For BitTorrent on the Mac, my favorite application is Transmission although BitRocket shows a lot of promise.

Colloquy

IRC is taken care of by Colloquy. It’s the best IRC client that I’ve ever used.

Have fun with this!

Off to Ruby Hoedown!

August 10th, 2007

The gang will show up in about an hour for us to all head to the Ruby Hoedown. I’m printing resumes, thanks for the reminder, Jeremy! And CVReg is back up, you can ditch the apology. Thanks, Strategy Cafe.

RailsConf Writeups: Day 3

June 20th, 2007

For me, this was the slowest day of the conference by design. I was so exhausted, and my feet hurt so badly that I wondered if I would even make it to the keynote in the morning. I did manage to get there without too much problem, and the Aleve that I brought came in extremely handy.

My day included:

During the Memcaching session, I missed my own solitary mention “on the floor” in the Joyent Slingshot presentation when I was mentioned as having worked on porting an application to it. I later got together with the person who was asking about it—Luke Melia is a commiter on Tracks.

Jon, a friend of his, and I walked out to McMenamin’s for dinner. Jon didn’t like the beer that I got (It was named Ruby!) but the meal was decent. After that, we walked back to the hotel and called it a day.

We ended up seeing a clip I had shown Jon at the start of the day on Inside Edition. Jon and I were both tickled because we are evil persons. When I reminded him of the clip, he sent me a link to a better one.

Unfortunately for the fellow at RailsMachine, this talk is an area that I’m really trying to stay abreast of. I historically have had very little money to spend on architecture, and the concept of virtualization has had a huge impact on my professional development. As such, I thought that I would give some time to a practitioner in this space that wasn’t Joyent

Applying the concept of virtualization to Rails deployment is something I’ve already done, and his presentation was more about his offerings than how he engineered them. Any development shop that is concerned with how they will run their product when it becomes successful should have had both ears open. I have been spending a lot of time on this, though, so it wasn’t so useful for me. I’m sure others had a different experience.

This talk was a bit of a stretch for me, having never written an application that was even close to needing Memcached. I had a great seat, though, and really enjoyed meeting Chris at the “Joyent Happy Hour”. I also had just sat through a talk where all the concepts were familiar. What was the worst that could happen?

I ended up really enjoying the presentation for multiple reasons. You can access his presentation here and be sure to look around for the download option. And get the version with notes!!!

I loved the introduction which definitely made me feel like I might have been sitting there in that GameSpot booth with the same challenges. (Although odds are good that I would have been watching the braniacs do the real work.) He also didn’t set himself up as an expert, which I normally respond well to, especially if the speaker is obviously lying because he is in the middle of presenting at RailsConf. I also really appreciated that he shared a mistake he made that brought down GameSpot. Learning from others’ mistakes is the best.

The introduction to memcached couldn’t have been better, from my perspective. I knew almost nothing about it, and learning very quickly about the basics was nice. Everyone knows what a hash is like, and the presentation built appropriately from there.

It takes balls to put a YAGNI slide 25 slides into your presentation… about your presentation itself!

The cache_fu plugin appears to be one of my favorite sort of plugins, the sort that does a lot of assembly and simplifying of other work. The code was never that hard to grasp and his presentation is still available as a starting place.

This presentation also sounded another note about using mocks and stubs. Gotta look into getting more hands-on experience there. Check out slide 70 for goodness sakes, although that’s not a result of mocha or stubba.

The biggest take home for me is it’s OK to make mistakes. It happens all the time. The problem is not being able to react because you don’t know what you’re doing. That’s why you can listen to the front-runners and make sure that you do it as right as you can the first time out.

This presentation was one of the highlights of the conference to me. For me, it was a perfectly structured talk. It joins the V is for Vexing, Joyent Happy Hour, and the make_resourceful talk as the overall highlights of the conference for me. (make_resourceful link coming soon!)

In my experience, there are a lot of developers who are learning Ruby by programming in Rails. Most of us know that Rails takes a lot of advantage of the advanced metaprogramming techniques in Ruby, but how many of us take the time to learn all the mechanics of how it works? What made this talk so effective was that James was able to take a part of Rails that a lot of developers have to interact with (plugins) and explaining some of the Ruby magic behind how it all comes together.

You’re left with a very solid understanding of how everything works behind the scenes. As a result, you’re in a much better position to be able to write your own plugins, but also how to be a good plugin consumer. Don’t waste any more time listening to me, download the talk and check it out.

RailsConf Writeups: Day 2

June 1st, 2007

Friday was the first “real day” of the conference, with DHH’s opening keynote (well summarized by Patrick Reagan here) and the first day of sessions. You’ll have to wait for my own summary post on the entire conference to get my impressions of the keynote speakers.

My day included

After that, Jon, Patrick and I had a horrible dinner at American Cowgirls which I will now erase from my memory forever. After that, we walked to some bar whose name I can’t remember where I fell asleep in a chair on the back patio. We took a cab back to the hotel, and I relished my good fortune.

If you’ve never been to a talk by Bob Martin before, one picture really does equal a thousand words. (Make sure to check out the link in the third comment.) He is a very passionate, very intense speaker. He challenges the listener to rise to a higher level of code-fu. This was the first time I had heard him talk, and I won’t be likely to forget it anytime soon.

More than any of the lessons about Ruby that we went through, what stuck with me the most was the attitude he shared with his listeners about rewriting and redesigning the system you’re working with. In his view, the “main build” never ceases forward motion. Requirements will be added and the code base will change in response. Thus, any redesign is still aiming at a moving target. His warning was to be very careful about pinning all your hopes as a developer on the Once and Future Rewrite.

He would recommend that when you work with a certain piece of code, check it back in a little cleaner, and a little nicer. Eventually, those habits will accrete and really start to add up in terms of code quality.

You can get a lot of the benefits of this talk (without Bob’s inimitable style) by reading his presentation files. Those files use Java as the language, but feel free to skip those bits to get the flavor of his message. It’s definitely worthwhile.

I originally found Jay Fields’ blog from a reference in the back of Rails For Java Developers from Stu Halloway. Reading his blog was really interesting and dealt with a lot of unfamiliar topics. As a result, I was eager to hear him speak.

Jay had one slide for his entire presentation, but a lot of ideas. Visiting Jay’s blog particularly the posts that he has tagged Testing Refactorings would be an excellent start.

Jay’s session started one of the ongoing themes of the weekend for me, which was rethinking my approach to testing. Just because tests deal with models does not make them unit tests. Just because tests deal with controllers does not make them functional tests. That determination depends on the context, and what precisely it is that you are testing. To that end, during the presentation it was revealed that Rails plans at a later date to begin structuring the test hierarchy to include model/ and controller/ directories under test/ instead of unit/ and functional/.

Less than ten minutes into the presentation, Jay mentioned that one of his development goals was test each test case should fail in isolation. In other words, if you make a change to your code-base and run the tests, there should be no cascading failures. I found this to be an outlandish idea at first, but when I started to think about it, it made a lot more sense in certain ways. My first question for him was if that led to an explosion in the number of his test cases, which he answered in the affirmative. It makes sense to me, though, that a fuller explication of every bit of behavior that you expect will lead to healthier code-bases in the long term.

One reason that Jay is able to have goals like these is that he is comfortable with Ruby metaprogramming and the various mock libraries for Ruby. As in Martin Fowler’s Mocks Aren’t Stubs article, I have been a classicist for a long time. Like Mr. Fowler, I find the mockist dependence on implementation troubling. Unlike Mr. Fowler, I have not worked with mocks nearly enough to have formed my own opinion of their benefits. It’s an exciting area of inquiry for me.

My summary is that Jay is a very thought provoking thinker who is very serious about his testing. I really appreciated the conversational tone of his talk, and I wouldn’t hesitate to ask him a question if I come up with one while looking into the area.

Ben Scofield, who I had not met, works with Patrick Reagan, who I have. Combined with the fact that almost every Rails site that I have written has some amount of static content, I was interested to see the talk.

In the style of Bob Martin’s talk early in the day, Ben’s presentation dealt with a progression of potential solutions to the problem of handling static material within Rails. The first solutions were very greasy! Check out this potential security hole:

def show
  page_path = params[:path].join('/')
  if File.exists?("#{RAILS_ROOT}/app/views/static/#{page_path}.rhtml")
    render :template => "static/#{page_path}" 
  end
end

Obviously, that was from phase one. In the end, they end up with a solution of some elegance!

I don’t want to short-change Ben here, but I would like to give a better writeup when he comes to speak at CVREG in the coming months.

Their plugin is available, as are the presentation slides.

Adam Keys made a big splash last year with his presentation AC/DC, Stravinsky, and Rails. Reading open-source code is one of my primary methods of learning, particularly languages in which I’m not that experienced. So I was pretty pumped for this session.

Despite Adam’s entertaining style, I thought this presentation was pretty slow apart from the rapid-fire, laugh a second intro. (Check slide 8 for the “hottest thing he could think of.”) I would have much preferred to see a few more examples of real code that he thought were particularly enlightening, although he has promised to write more about that in his own blog post.