03 May 2006
•
Miscellaneous
Today is my last day at CFP Board. That means that this is my last day working with RoR professionally, for a while at least, and that makes me a little sad.
RoR is a sweet piece of work. It is a platform on which a developer can be enormously productive. For example, I fixed three minor bugs before lunch today. By fixed I mean I analyzed the issue, implemented a test, implemented the change, and deployed the new version into production. I have not worked with any other system that supported that kind of velocity with any level of confidence. The dynamic nature of Ruby and Rails allows you to move amazing fast and the tight integration of testing into RoR allow you to do so without having to compromise the quality of the system.
Velocity is like a drug, the more you have the more you want. I have been super productive the last couple of weeks and everyday I wanted just a little more. Over the long run the pace I have had the last couple of weeks is not sustainableAt some point I will remember I have over
2000 unread items in my aggregator and before I know it whole days
will be spent just learning stuff. Useful to be sure but it does not
have the same umph as writing a boat load code., but damn it feels good while it lasts.
27 Apr 2006
•
Miscellaneous
•
Personal
Things have been a little quiet around here lately because my life has gotten a little busy.
We close on our new house on Friday and we close on our current house the middle of next month. Fortunately, that gives us a couple of weeks to move. The new house is a bit less characterful than we had hoped we would find but it is a great house for us. It is quite a bit larger than our current house. It has a nice backyard, not too big and not too small, and it is just around the corner from a park.
I have accepted a position with WebRoot Software. I have been looking since my current job changed. My new job is not a Rails job (yet) but it is both user facing and data oriented web applications. So my strong opinions about web application architecture and dynamic languages will serve me well. The downside of taking a new job is that there are a few loose ends at CFP Board that I need to finish off so that I can leave with a clean conscience, which means I am even more busy than usual.
I am really excited about the opportunity at WebRoot. The thing I am most excited about, though, is that at WebRoot I will be surrounded by people who live and breath software. CFP Board was nice because the technology we where using but after Donnie left we never had the sort of thought provoking discussions about software that I became accustom to while working for software companies.
20 Apr 2006
•
Personal
The other day Elliot and I were at the dinosaur play area at FlatIron Crossing Mall1 and Elliot started playing imaginary ball. He grabbed my hand and pulled me 6 or so feet and pointed at the empty floor and said, “the ball is right there.” It took a couple of tries on his part because his enunciation was not very good2 and with no context I just did not understand him at first.
After I figure out there was an imaginary ball we had a great time playing race-ball. Race-ball is our favorite ball game it goes something like this. Someone throws, or kicks, the ball and then we race each other to where the ball lands. Whoever gets to the ball first gets to throw the ball next. Repeat until the youngest player gets distracted.
That was the first time I had seen Elliot engage in imaginative play but since then imaginative play, of various sorts, has become quite common.
18 Apr 2006
•
Software Development
While reading Oliver Steele’s article on JavaScript Memoization this bit jumped out at me.
function Angle(radians) {this.setRadians(radians)}
Angle.prototype.setRadians = function(radians) {
this.radians = radians;
this.getDegrees.reset();
};
Angle.prototype.getDegrees = function() {
return this.radians * 180 / Math.PI;
}
memoizeConstantMethod(Angle.prototype, 'getDegrees');
The reason that jumped out is that getDegrees
is a function that returns a number, but in the above code you see this this.getDegrees.reset()
. In other languages that would require a reset
method on number objects, but not in JavaScript. In JavaScript methods are objects and, therefore, can have methods of their own1. This allows you to get the effect of high-order messaging without all the fuss.
12 Apr 2006
•
Miscellaneous
I am regularly amazed by what ends up on the Internet. Today’s example is this Wikipedia article about the Magik programming language.Via
\[Charlie Savage\](http://cfis.savagexi.com) Magik is a proprietary language developed by a company call Smallworld, which was later acquired by GE. I worked in the Magik programming language for six years and it is easily the second best language I have ever worked with professionally (Ruby is the best language I have worked with). I am just amazed that it has a Wikipedia page.