Kurt Schrader's Blog2023-08-28T21:22:45+00:00http://kurt.karmalab.org/Kurt Schraderkschrader@gmail.comMy New Company, Clubhouse2015-01-04T00:00:00+00:00http://kurt.karmalab.org/2015/01/04/clubhouse<p><img src="/images/clubhouse.jpg" alt="Clubhouse" /></p>
<p>Over the last 15 years I’ve been privileged to work with some of the greatest engineers in our industry to build software and teams.</p>
<p>These teams have always been greater than the sum of their parts, and I owe everyone that I’ve ever worked with a debt of gratitude for that.</p>
<p>However, in all of that time, and in most of the teams that I’ve been exposed to, we haven’t done a very good job of predicting when things are going to be done. We don’t do a good job of explaining to people how things are changing and we never seem so assess and address risks fast enough, before they become bigger problems.</p>
<p>Enter <a href="https://www.clubhousehq.com">Clubhouse</a>.</p>
<p><a href="https://twitter.com/andrewchilds">Andrew Childs</a> and I started Clubhouse to help companies build better software teams.</p>
<p>We want to use the data that teams are already generating to help the engineering side of a company communicate progress, share their risks, and get better at predicting what’s going to happen in the future, all while lowering the level of overhead that engineers have to deal with on a day-to-day basis.</p>
<p>I’ll have a lot more to say about what we’re building over the next few months, but I’m personally very excited about this, as it feels like the culmination of everything that I’ve been thinking about for the last 15 years.</p>
<p>As one person that I’ve known for a long time said:</p>
<blockquote>
<p>You’ve just taken what you’ve been talking about for the last 10 years and built it.</p>
</blockquote>
<p>That’s exactly how it feels.</p>
<p>If you’re interested in seeing what we’re building or joining the alpha, don’t hesitate to <a href="mailto:kurt@clubhousehq.com">drop me a line</a>.</p>
Scaling Communication at a Growing Startup2013-10-21T00:00:00+00:00http://kurt.karmalab.org/2013/10/21/communication<p>When you’re first starting a company, communication is the least of your worries. If you have less than 10 or so people, everyone knows what everyone else is doing (and if they don’t then they can just walk over and ask them).</p>
<p>Things start to get a little more complicated after that.</p>
<p>At most startups I’ve seen, once you get to 15 or so people you enter a period of time where everyone still wants to know what’s going on everywhere, but the amount of information about what’s happening slowly starts to exceed what any one person can know.</p>
<p>This is a dark time, characterized by two things:</p>
<ol>
<li>The email explosion: Expect to receive tons of emails a day, as the old “just include the entire company on this” starts to overwhelm things.</li>
<li>The tools explosion: People realize that they’re overloaded, so they start to look for tools to make life easier. Unfortunately, everyone now needs logins to and needs to know how to use Basecamp/Asana/Jira/Trello/etc.</li>
</ol>
<p>I think that a big part of the problem is that the creators of these tools don’t think about how the tool is going to grow with the company as it grows. They write their tools to do a good job managing one project, and don’t stop to think about how that’s going to scale up.</p>
<p>Github is a great example of a tool that solves the communication problem around software projects. I don’t use Github just because Git is better than SVN, I use it because the toolset they’ve built around it makes it super easy for me to see what my team is working on and to communicate with them about it.</p>
<p>It’s (almost) just as easy for me to put one project on Github and see how it’s progressing as it is for me to watch twenty projects (or more).</p>
<p>Tom Preston-Warner, Github’s CEO and co-founder <a href="http://www.fastcolabs.com/3020181/open-company/inside-githubs-super-lean-management-strategy-and-how-it-drives-innovation" title="Inside GitHub's Super-Lean Management Strategy--And How It Drives Innovation">recently said</a>:</p>
<blockquote>
<p>We focus a ton on communication in this company. And all of the tools that we build are really about enhancing communication; that’s what GitHub itself is all about. It’s about enabling communication between a broader set of people than would otherwise be efficient.</p>
</blockquote>
<p>It’s great that they’re thinking that, but their product is still too technical for most people to use.</p>
<p>Hopefully over time they (or someone else) will be able to build up a suite of tools that lowers the bar on powerful, scaled-communication to a level that anyone from a developer to a salesperson to a janitor can use to see both what the company is doing and how they’re doing it (and to dig in if necessary).</p>
<p>For now, if you have a growing startup and communication is getting harder, I suggest doing two things:</p>
<ol>
<li>Remind people to really think about the number of people that they’re sending emails to. People have a natural desire to get all of the emails in a company, but if someone really doesn’t need to be included then don’t include them.</li>
<li>Avoid a tools explosion like the plague. Encourage people to experiment with new tools, but be ready and willing to throw away bad ones. Just because someone started a Trello board doesn’t mean that Trello needs to be a part of your company forever.</li>
</ol>
<p>All of that said, I still don’t think that there’s a great answer here (yet).</p>
<p>If you know about a great tool for scaling communication in a growing startup please let me know about it in the comments.</p>
Building a Data Science Team at a Startup - An Engineering Perspective2012-01-30T00:00:00+00:00http://kurt.karmalab.org/2012/01/30/building-a-data-team<p>A few random observations from spending the last few years building a data science team at a startup, from the perspective of an engineering manager:</p>
<h2 id="you-have-no-idea-what-your-data-science-team-is-going-to-do">You have no idea what your data science team is going to do.</h2>
<p>You’re just going to know that you have some data and some problems, and that you don’t really know how to solve them. Of course, that leads into:</p>
<h2 id="the-way-that-youre-thinking-about-the-problem-is-probably-wrong">The way that you’re thinking about the problem is probably wrong.</h2>
<p>Your data scientists are going to need to come in and really blow you away. In the canonical <a href="http://radar.oreilly.com/2011/09/building-data-science-teams.html">“building data science teams”</a> article by DJ Patil he talks about giving people 90 days from when they come in the door to “knock the socks off” of the company. I think that’s a good benchmark. If a data scientist hasn’t made you think about your data or your problems in a new way by then they probably aren’t ever going to.</p>
<h2 id="a-data-science-team-needs-a-different-sort-of-support-structure-than-a-normal-engineering-team">A data science team needs a different sort of support structure than a normal engineering team.</h2>
<p>A data science team seems to end up having people from a much more diverse set of backgrounds than a normal engineering team does, and because of that you’re going to need to figure out how to fit the data science team into your organization. One thing that we’ve eventually come around to is to throw our normal engineering practices out of the window and to start working towards having the data science team work with whatever tools they need in order to move as quickly as possible in their own way.</p>
<h2 id="youre-going-to-need-to-figure-out-how-to-get-stuff-into-production">You’re going to need to figure out how to get stuff into production.</h2>
<p>Data scientists are going to end up building things that need to be translated into production code, usually to save resources (“in order to generate this model, I need 20 machines for a week, and it needs to be done every day”). One thing that we’re working on is building out the interface between engineering team and our data team in order to make it more and more seamless. Hopefully soon we’ll be constantly rotating an engineer (or several engineers) on the data team in order to help do this.</p>
<h2 id="having-data-scientists-around-will-make-you-better-at-thinking-about-your-problem-set">Having data scientists around will make you better at thinking about your problem set</h2>
<p>Data scientists tend to come from a number of different backgrounds (math, statistics, music, etc) that you don’t normally have on an engineering team. Supporting them and interacting with them on a daily basis forces you to think about things differently and should help you build things in a more sensible way to target a larger audience within the company.</p>
<h2 id="everyone-in-the-company-is-going-to-want-to-understand-what-and-how-the-data-science-team-is-doing">Everyone in the company is going to want to understand what (and how) the data science team is doing</h2>
<p>Just like we’ve worked over the years to keep technical business people focused on the “what” of what we need to build, you need to work on keeping every one without a math background away from the data science team. Trying to explain some of the hard math that’s going on to the entire company isn’t a productive use of time.</p>
<h2 id="the-toolset-that-exists-for-jumpstarting-a-data-science-team-is-still-immature">The toolset that exists for jumpstarting a data science team is still immature</h2>
<p>The tools for doing big data analysis are still pretty immature and difficult to set up. There are many companies working to solve this problem right now (although most of them focusing on big companies, not startups) but it’s a bit overwhelming figuring out where to even get started with some of this stuff.</p>
Tackling Knowledge Debt2011-12-19T00:00:00+00:00http://kurt.karmalab.org/2011/12/19/knowledge-debt<p>I was playing around with <a href="https://github.com/nathanmarz/cascalog">Cascalog</a> today, working on rewriting some of our mapreduce jobs, when I came across <a href="http://nathanmarz.com/blog/your-company-has-a-knowledge-debt-problem.html">this post on knowledge debt</a> by Nathan Marz.</p>
<p>Knowledge debt is something that I think about a lot (although I never had a good name for it until today). When you’re working in a startup like the one that I’m currently involved in, there are often times when you need to get a release out of the door by a certain date. Missing a release date with a deal with Expedia on the line, for instance, isn’t really an option.</p>
<p>At the same time, it’s hard to draw a clean line as to when some of the things that we’re doing aren’t really working anymore, or are actively slowing us down. It always seems like we’re making progress, but who really knows if we could be doing some of our work in a much more efficient way.</p>
<p>Of course, money helps with everything, and we have more and <a href="http://www.prweb.com/releases/2011/11/prweb8943027.htm">more</a> of that lately, which I’m planning to put to use to help solve this problem.</p>
<p>My current plan is to <a href="http://www.intentmedia.com/jobs">hire</a> 12-15 more engineers over the next year in order to give us more breathing room to do new things. We need time to try out things like Cascalog (and Scala, Clojure, Cassandra, etc) and to spike out new approaches in our codebase, while at the same time continuing to make steady progress on the work that needs to get done.</p>
<p>Hopefully some of these experiments will pan out and give us a big boost in velocity, but even if they don’t we should still be doing them.</p>
<p>I’m also hoping that each new engineer on the team shakes things up a bit. Every person that walks in the door should be teaching us something new, or else they shouldn’t be walking through the door in the first place. I already know that we have a pretty amazing codebase but, looking at some of the problems that we’re about to tackle, I can’t wait to see what 2012 is going to bring.</p>
Moving to Jekyll2011-12-16T00:00:00+00:00http://kurt.karmalab.org/2011/12/16/moved-to-jekyll<p>I’m always meaning to do more blogging, but I always seem to have a million reasons that I never do. One of the things that I’ve always disliked was dealing with all of the overhead. I don’t want to log in and type things in a Javascript window, etc. I just want to blog.</p>
<p>For that reason I’ve moved my blog to <a href="http://jekyllrb.com/">Jekyll</a>. Jekyll is a highly customizable static site generator that’s used to generate most of the pages on <a href="http://github.com">Github</a>. It lets me write all of my blog posts in a text editor, so that (hypothetically) I can no blog anywhere and everywhere. The philosophy behind it can be found in the original blog post on it, <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">Blogging Like a Hacker</a>.</p>
<p>So there’s one more excuse for not blogging knocked off of my list. Hopefully I’ll do a better job of it.</p>
<p>(Oh, also, porting my blog over is a work in progress. If you see any bugs please let me know in the comments.)</p>
Large-Scale Cucumber Revisited2011-07-28T00:00:00+00:00http://kurt.karmalab.org/2011/07/28/large-scale-cucumber-revisited<p>At Intent Media we’ve been using <a href="http://cukes.info/">Cucumber</a> for 2.5 years to drive a large portion of our testing (on top of RSpec and JUnit). We’re finally getting around to upgrading to the newest version (from version 0.4.4, which is, to put it lightly, a bit rusty), so I’m going to throw out some anecdotes about our experiences using it, which will hopefully help others avoid some of the problems we’ve had.</p>
<p>First a few facts about our test suite:</p>
<ul>
<li>We currently have over 15000 Cucumber steps that run for each build (we use TeamCity for CI, which counts the number of steps, not the number of scenarios, which is kind of annoying, to tell you the truth)</li>
<li>We distribute our build over 3 machines using tags instead of a custom tool. Every scenario that goes in gets tagged with @agent1, @agent2, or @agent3 to indicate which build machine to run on. Hacky? Yes. Implemented in a couple of days with no problems? Also yes.</li>
<li>It currently takes over an hour to run a complete integration build. This is too long, and we'll probably distribute the build out to more agents soon.</li>
</ul>
<p>Some lessons learned:</p>
<ul>
<li>One of our original goals was to get our Product Managers involved in writing and vetting test cases. That didn't happen with us, and I now think that it would be very hard to get it to happen anywhere. Even though we have very well written stories with an annotated list of deliverables, the mental hurdle of going from the the story, to finding the scenarios related to it, to verifying them all just seems too high. Our PMs just want to grab the newest builds, go through whatever mental model they have to test the feature, and then move onto the next thing. Perhaps if we had made it part of the process from the very beginning to somehow tie the scenarios back to the stories, then this might have worked, but I think we missed our opportunity here.</li>
<li>Following on from above, you should figure out a way to tie your scenarios back to the their related stories. One of the first things that our new QA person did was to push the team to always add a comment to completed stories with the names of the related scenarios. This saves her the time that it would take to figure out what's relavent to testing each story. If you're not doing this in some way, you should be.</li>
<li>We made a decision early on to test everything from the outside in (no fixtured data, etc). At first this worked really well for us, because it gave us a lot of confidence that all of our screens were extremely well tested. Unfortunately, it now adds a ton of time to our test runs by running through the same set of screens hundreds of times. We've started discussions about how to fixture in this data after some of the steps have run to completion, but we still need to get around to making it happen. (As an example, a step like 'And I create a new admin user with email address "example@example.com"' could hypothetically run for every scenario in the system.) Doing it all through the UI is just a time sink at this point. What we'd like to do is run the step through the UI once, and then set a flag and fixture in the data after that.</li>
<li>If you are making large scale use of Cucumber and you aren't using IntelliJ/Rubymine then you should be. Its Cucumber support is top notch, and will make your life significantly easier.</li>
<li>All of that said, Cucumber has been vital in allowing us to release on a daily basis. Unlike some other startups, if we screw up a release we start losing a large amount of money pretty much immediately. We have an automated deploy process, but the cucumber suite has given us the confidence to know that anytime we push our newest green build everything is going to work.</li>
</ul>
<p>So there you go, a few things off of the top of my head. If you have any other good anecdotes about Cucumber please add them in the comments, I’d be interested in seeing what other problems people have run into.</p>
<p>For more random development anecdotes, you should follow me on Twitter <a href="http://twitter.com/kurt">here</a>.</p>
Driving Large Scale, Multi-Language Development With Cucumber2010-01-06T00:00:00+00:00http://kurt.karmalab.org/2010/01/06/driving-large-scale-multi-language-development-with-cucumber<p>I’ve been working at <a href="http://www.intentmedia.com">Intent Media</a> for a while now and I’m just getting some time to come up for air to talk about what we’ve been doing while building our software platform.</p>
<p>This will be the first in a series of articles about what I’ve learned over the last year.</p>
<p>For a little background, our engineering team is currently 9 people strong (in a 20 person company). When I joined the company to help build the team, there wasn’t a line of code written and I was the only technical member of the staff.</p>
<p>Over the last 9 months we’ve built what I consider one of the finest pieces of software that I’ve ever worked on. It’s scalable, it uses the right languages for the right jobs, and it does exactly what it needs to do.</p>
<p>It’s also remarkably bug free.</p>
<p>I credit a large part of that (on the tools and good decisions side, that is; I credit most of it to our team) to <a href="http://cukes.info/">Cucumber</a>.</p>
<p>One of the first decisions we made (after writing a unit test and our first bit of code) was to write our first Cucumber test. One of the things that I learned while working at <a href="http://www.collaborativedrug.com/">Collaborative Drug Discovery</a> was the importance of automated functional tests.</p>
<p>I, for one, will never do another project without them.</p>
<p>At Intent Media we use Cucumber to drive <a href="http://celerity.rubyforge.org/">Celerity</a> across our entire software stack. Currently, this consists of 3 Java applications and a Rails application that interact with MySQL and a HDFS data store. Every single time we check in new code we build the entire stack in <a href="http://www.jetbrains.com/teamcity/">TeamCity</a> and run our entire suite of functional tests against it.</p>
<p>As of today, I’m currently greeted with this on our TeamCity server:</p>
<p><img class="aligncenter size-full wp-image-1230" title="FirefoxScreenSnapz025" src="/images/teamcity_green.jpg" alt="Integration Build" width="239" height="63" /></p>
<p>Each of those “Tests passed” is a step in a Cucumber scenario. For example:</p>
<blockquote>Given I login as "admin@intentmedia.com"</blockquote>
<p>Over the last 9 months we’ve slowly built up a library of steps that encapsulate everything that we need to do with our apps so far. We’ve also found that we’ve gotten a huge amount of reuse out of our existing steps as we’ve grown the app. So far, there haven’t been any scenarios that we couldn’t tackle in an automated manner.</p>
<p>This suite of tests gives us the best safety net I’ve ever had on a project to try large refactorings. In fact, we often do refactorings across the data model that affect several pieces of software in the stack, often in unexpected ways. Cucumber (along with our unit tests) lets us immediately surface any problems in both our applications themselves and the communication between the apps.</p>
<p>If you haven’t checked out <a href="http://cukes.info/">Cucumber</a> yet, you owe it to yourself to do so. It’s one of those life-changing pieces of software that’s amazingly simple to get started with, but quickly becomes one of the most important tools in your toolbox.</p>
Falling Off the Face of the Earth2009-07-27T00:00:00+00:00http://kurt.karmalab.org/2009/07/27/falling-off-the-face-of-the-earth<p>Quick update on the last 6 months:</p>
<ul>
<li>Moved back across the country to NYC</li>
<li>Took a job as Head of Engineering at Intent Media (<a href="http://www.intentmedia.com/im-jobs">We're Hiring!</a> <a href="http://paidcontent.org/article/419-intent-media-raises-8-million-in-first-round-for-advertising-on-e-comme/">We're funded!</a>)</li>
<li>Been working in Java and Rails</li>
</ul>
<p>
I've got plenty of things to write about, so I'll try to get back on the horse soon.
</p>
Living In A Post Rails World2009-02-14T00:00:00+00:00http://kurt.karmalab.org/2009/02/14/living-in-a-post-rails-world<blockquote>
<p>The hardest thing to see is what is in front of your eyes. -Goethe</p>
</blockquote>
<p>It's been about 6 or 7 months since I've done any Rails work. </p>
<p>I'm in a post-Rails world.</p>
<p>After working in Rails for 3 years, I was burnt out. I took some time off to try to learn the finer points of marketing and running a business, and then attempted to start a new business just before the market cratered. Not a great idea.</p>
<p>Now I'm back writing code all day and it's great. My days now consist of coming up with test cases to solve problems and then solving them. </p>
<p>Something is different though. </p>
<p>I used to write a ton of test cases in the context of my Rails apps.</p>
<p>Now I write high level test cases and then write code and pick and choose technologies to solve them.</p>
<p>I feel like this is a natural progression for those of us that practice TDD. </p>
<p>Take one more step back, use something at an even higher level to write tests (I'm using some Cucumber and some rSpec), and then implement a bunch of little apps to make what you want to happen, happen.</p>
<p>It keeps things simple, and keeps the problem from growing too large.</p>
<p>In my current project I've got a cluster of Nanite agents up and running with a couple of Merb apps talking to them on the front end. It's something that I never could have done if I was trapped inside of the Rails box.</p>
<p>Hell, it's probably something that I never even would have thought of.</p>
<p>I think that the Ruby world is eventually going to end up in a model like this, writing small simple apps that all talk to each other, and can be replaced or upgraded at any time.</p>
<p>By writing a lot of tiny apps, I've been able to solve problems now in days that used to take weeks or months.</p>
<p>Plus I'm not getting locked in to anything. If I want to replace my Merb app with a Sinatra app next month, it's not a huge project. If I want to swap in some code running on the Maglev Alpha that I'm playing with or deploy some components written in Clojure, I can do that too, without being intimately tied to anything.</p>
<p>All of my hard/long running logic is well tested, encapsulated, and most likely running in little agents on the wire.</p>
<p>I guess what I'm saying is that if you've been writing Rails code for a long time, perhaps now is a good time to step outside of the rules that Rails imposes upon you and look at things from a different angle.</p>
<p>You might find it refreshing and helpful.</p>
<p>I certainly did.</p>
So I Wake Up and Merb is Rails?2008-12-23T00:00:00+00:00http://kurt.karmalab.org/2008/12/23/so-i-wake-up-and-merb-is-rails<p>If you haven't already heard, <a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3">Rails is now Merb</a>, and <a href="http://yehudakatz.com/2008/12/23/rails-and-merb-merge/">Merb is now Rails</a>.</p>
<p>I'm a bit torn about how to feel about this, having dedicated a lot of time lately telling people to use Merb and why I think that it's superior to Rails. </p>
<p>On the one hand, it'll be good for Merb usage, as people using Rails 3 in big projects will now essentially be using what Merb 2 would have been.</p>
<p>On the other hand, I'm concerned with the technical hurdles that the core teams are going to have to deal with in order to make this actually work. There's a lot of old crufty code in Rails that needs to go, although I'm not sure what removing it would do as far as backwards compatibility is concerned.</p>
<p>I've been talking in IRC all morning about this, and I'm sure I'll have more thoughts as things move forward, but for now I'll just post some of my favorite quotes from today's IRC session here:</p>
<pre>
<devjj> Modular meaning, what, not included by default, gem install rails-bad-ideas
<gruntruk> this is like biggy n' pac hugging each other
<bitbckt> so, I presume the quality of conversation in #merb will disintegrate into #rubyonrails :-/
</pre>
<p>Certainly should be an exciting couple of months as this merge happens...</p>
<p>(Credit goes to an IM from my friend <a href="http://bitfission.com/">Will</a> for the title of this post.)</p>
The Open Source Merb Book2008-12-12T00:00:00+00:00http://kurt.karmalab.org/2008/12/12/the-open-source-merb-book<p>Just a quick note to let people know that the Merb community is finally starting to address the lack of good documentation on Merb. I'm personally helping out with the open source Merb Book.</p>
<p>A preview version can be found here: <a href="http://book.merbist.com/">Open Source Merb Book</a></p>
<p>The source can be found here: <a href="http://github.com/mattetti/merb-book/tree/master">GitHub</a></p>
<p>We've got 20 plus people working on it, and considering that it's only been up on GitHub for 12 days it's pretty amazing what we've already accomplished.</p>
<p>If you want to learn more about Merb you should definitely check it out.</p>
GitHub Takes the Pain Out Of Sharing Your Code2008-12-11T00:00:00+00:00http://kurt.karmalab.org/2008/12/11/github-takes-the-pain-out-of-sharing-your-code<p>A long time ago, I did a more than a little bit of <a href="http://people.apache.org/~kschrader/">open source work</a>. Unfortunately, I always found the process of being a part of an open source project to be a pain.</p>
<p>The process usually went something like this:</p>
<ul>
<li>Fix a bug in the code.</li>
<li>Post patches to the dev list.</li>
<li>Bug people to get your patches accepted and committed.</li>
<li>By the time they are accepted, someone else has committed something that breaks them.</li>
<li>Wash, rinse, repeat</li>
</ul>
<p>Once you do this enough times, you get commit rights and you don't have to deal with the process anymore.</p>
<p>I've never enjoyed it. Far too much overhead and bullshit.<sup><a href="#fn1-2008-12-11">1</a></sup></p>
<p>So for the last (more than a) couple of years I've taken to forking code when I needed to and then never bothering to give the patches that I wrote back to the maintainers.</p>
<p>Clearly not the best situation, but it worked for me.</p>
<p><a href="http://www.github.com">GitHub</a> changes all of that.</p>
<p>On GitHub, I can fork anyone's code, patch it, push my changes back, send a pull request, and then not worry about it. </p>
<p>I can share my code with no overhead.</p>
<p>Example: I fixed a bug in the <a href="http://github.com/kschrader/merb_cucumber/tree/master">merb cucumber bindings</a> last week. I pushed my changes to GitHub and sent a pull request to the maintainer. My changes haven't been pulled into the main tree yet, but I don't really care.</p>
<p>One look at the <a href="http://github.com/david/merb_cucumber/network">GitHub merb cucumber network graph</a> should show any prospective users of the library that development has happened on my tree beyond that of the original tree. Hopefully they'll take the time to look at it and use the most up-to-date code.</p>
<p>Either way, I don't have to worry about it anymore.</p>
<p>Also, I love that <a href="http://www.github.com">GitHub</a> lets me share my half finished projects. </p>
<p>I recently posted a partially done <a href="http://github.com/kschrader/gutenberg/tree/master">Merb based blog called Gutenberg</a> on GitHub.</p>
<p>Will I ever finish it? Who knows. </p>
<p>At the very least it's a simple Merb example project for people to learn from, and I already know people who have looked at it to learn more about how Merb works. That already makes it worthwhile to me.</p>
<p>Again, no overhead. </p>
<p>Just push code onto GitHub and it's live to the world. </p>
<p>No pain. No overhead. Just code.</p>
<hr />
<ol>
<li id="fn1-2008-12-11">
As an aside, I really like commit policies like <a href="http://rubini.us/contribute/">one that Rubinius has</a>, namely, "anyone who submits a patch for some part of the Rubinius project and has the patch accepted will be given commit rights to the mainline repository." We need more projects with commit policies like that.
</li>
</ol>
The Simplicity of Merb2008-10-22T00:00:00+00:00http://kurt.karmalab.org/2008/10/22/the-simplicity-of-merb<p>As some of you know, we're building our new startup on top of Merb. One of my favorite things about Merb is how much easier it is to understand than Rails is when you need to hack on something that's outside the realm of what the framework expects you to use it for. I think that Ezra Zygmuntowicz put it best in his <a href="http://uk.youtube.com/watch?v=TcMklv40YMY">recent tech talk on Merb</a>:</p>
<blockquote>
<p>A lot of people tend to end up treating Rails as a blackbox because it is eighty thousand or so lines of code and it's a little bit hard to step into and figure out what's going on because there's so much advanced Ruby meta-programming going on inside of there. I kind of feel like the place for meta-programming and that kind of stuff is in your own application code. I'd rather have the foundation that you're building on top of be as simple and as easy to understand as possible so that when you do hit the wall and you need to look inside the framework you don't get grossed out and you can get in there and actually do stuff with it.</p>
</blockquote>
<p>Amen.</p>
Datamapper (or Just Say No to Active Record)2008-10-09T00:00:00+00:00http://kurt.karmalab.org/2008/10/09/datamapper-or-just-say-no-to-active-record<p>I was having a conversation with a friend the other day who said something along the lines of “lately at work, we’ve pretty much just been rewriting Active Record to make it not suck as much”.</p>
<p>I was thinking about it, and I’ve never really heard anyone say anything good about Active Record. It’s slow, it uses a ton of memory, it’s not thread-safe, etc.</p>
<p>Luckily, the community is starting to tackle those problems with a couple of new projects aimed at doing a better job of OR mapping.</p>
<p>The one that I’ve used the most, and that we’re building the software for my new company on, is <a href="http://datamapper.org/">Datamapper</a>.</p>
<p>The development philosophy behind Datamapper tries to keep everything as fast and as lightweight as possible. It does this by being as lazy as possible in what it loads to keep memory usage down, and by breaking out as much functionality as possible into plugins, so that you only need to include what you’re really using in your application.</p>
<p>In my stress tests here using my new application, I’ve seen significant speed increases across the board compared to ActiveRecord. (I’m writing a Merb app, and it’s relatively easy to switch back and forth between the two of them at this early stage in development.)</p>
<p>Datamapper also has most of the <a href="http://datamapper.org/docs/dm_more/index.html">major ActiveRecord plugins</a> ported to it (as well as a CouchDB adaptor that we’re using for some of our models).</p>
<p>If you’re starting a new Ruby web application, I strongly suggest checking it out instead of just settling for the default choice of Active Record.</p>
Running Merb on Edge2008-08-17T00:00:00+00:00http://kurt.karmalab.org/2008/08/17/running-merb-on-edge<p>The easiest way to run Merb from edge:</p>
<pre>
$ sudo gem install sake
$ sake -i http://github.com/wycats/merb-more/tree/master%2Ftools%2Fmerb-dev.rake?raw=true
$ sake merb:clone
$ sake merb:install:all
</pre>
<p>This will install the edge versions of all of the merb gems.</p>
<p>To keep things up to date, navigate to the directory that you ran the commands in and do:</p>
<pre>
$ sake merb:update
$ sake merb:install:all
</pre>
Why Not Just Fire All Of Your Programmers?2008-08-06T00:00:00+00:00http://kurt.karmalab.org/2008/08/06/why-not-just-fire-all-your-programmers<p>Then no software would get written, but at least we wouldn't have any crap software...</p>
<p>My friend Jay posted two <a href="http://blog.jayfields.com/2008/08/elephant-in-server-room.html">blog</a> <a href="http://blog.jayfields.com/2008/08/elitist-or-optimist.html">entries</a> yesterday on the subject of raising the standard for programmers in our industry. I left <a href="https://www.blogger.com/comment.g?blogID=12467669&postID=2427762782957269871">a comment</a> about it on his blog and talked with him about it on IM, but I figured I'd expand a bit on my thoughts on it here.</p>
<p>First things first, I completely disagree with him.</p>
<p>I don't think that 50% of programmers should leave the profession. I've worked on a lot of projects with a lot of different teams and I can't ever remember thinking "man, this project would be a lot easier if I got rid of half of this team."</p>
<p>I can also only think of few <a href="http://en.wikipedia.org/wiki/NNPP">Net Negative Producing Programmers</a> that I've worked with and most of them usually leave pretty quickly.</p>
<p>Most of the time, I've found that when a person isn't performing up to par, it's because of a management failure. I think that it's up to the development leads to analyze their teams and figure out how everyone can best contribute and make sure that people are performing at the top of their game.</p>
<p>Too often I've seen people fall into the trap of always being assigned to, or always choosing to work on, the easiest features in the project. They then do a half-assed job because they're always working on the boring part of the project and don't feel like a valued part of the team.</p>
<p>Maybe, for a change, we should assign those people the hardest part of the project for a few weeks. Sure, they might not so the best job, but they will work harder because, for once, what they're working on is challenging and exciting. Plus they know that the entire team is depending on them and is there to help them. That's how you bring people back into the fold and make them a productive, happy member of the team.</p>
<p>The point that's neglected in Jay's arguments is that experienced programmers shouldn't just be responsible for writing code. It should also be the job of experienced programmers to take those who are less experienced or interested and pull them up to our level. </p>
<p>Forcing them out of the profession is just as much of a failure on our part as it is on theirs.</p>
Moving On2008-08-05T00:00:00+00:00http://kurt.karmalab.org/2008/08/05/moving-on<p>Things sure have been quiet around here...</p>
<p>As some of you may already know, I've left the relative safety of my job at <a href="http://www.collaborativedrug.com/">Collaborative Drug Discovery</a> to have another go at starting a company. </p>
<p>I'm currently working with a friend to once again create something out of nothing and bring yet another crazy idea into the world. Therefore, if you see me and I look like I just got finished working for 18 hours straight, please buy me a beer and put me to bed.</p>
<p>As for the new company, I'm not ready to talk about what we're doing yet, but I'm sure that I'll be writing about it here as it comes together.</p>
Don't Forget to Clear Out Your Rails Session Data2008-07-01T00:00:00+00:00http://kurt.karmalab.org/2008/07/01/dont-forget-to-clear-your-rails-sessions-data<p>For the last year or so, this blog has been running slow, <em>slow</em>, <strong>slow</strong>.</p>
<p>From time to time, I tried to figure out what was going on, but I figured that Typo upgrades were just causing things to slow down and use more and more memory.</p>
<p>Until tonight.</p>
<p>Tonight I did a database dump and it came to 44 MB. </p>
<p>There is no way I have 44 MB of content in this blog. </p>
<p>So I had a look at the dump and realized that I had close to 100000 sessions in the sessions table, and that there was a table for Sitealizer plugin that's no longer part of typo.</p>
<p>So after a drop of the Sitealizer table and a</p>
<pre>rake db:sessions:clear</pre>
<p>Typo is now using 20% of the memory it was using before, running much, much faster, and the database dump comes to a slim 476 KB in size.</p>
<p>So this is my reminder to myself (and everyone else) to be sure to clear out your sessions table from time to time.</p>
Omnifocus Interface == Fail2008-06-30T00:00:00+00:00http://kurt.karmalab.org/2008/06/30/omnifocus-interface-fail<p>I use Omnifocus everyday to track what I'm doing, and I love it, but there are tons of UI problems with it that drive me absolutely crazy. There's a good article about some of the failings of the interface design <a href="http://db.tidbits.com/article/9594">here</a> (with a <a href="http://www.apeth.com/omnifocus/omnifocus.html">video</a> showing some of them), but there's one interface decision that's been absolutely driving me nuts lately.</p>
<p>Look at this picture:</p>
<p><img src="http://farm4.static.flickr.com/3071/2625870492_0e2b0e6747_o.jpg" alt="omnicalendar" /></p>
<p>See anything wrong with it?</p>
<p>If you said, "There's no way to set the due date for a project to Tuesday without clicking the little arrow at the top left to go to next month" then you're right.</p>
<p>What a horrible failure of UI design. I end up up dealing with this at the end of every month, and everytime it's a pain in the ass. Compare it to the iCal day chooser:</p>
<p><img src="http://farm4.static.flickr.com/3171/2625900694_c43e00c4d7_o.jpg" alt="ical" /></p>
<p>See that? Much better. They just grey out the days in the upcoming month. (They even go above and beyond the call of duty and show two upcoming weeks.) This is what the Omnifocus date chooser should be.</p>
<p>Hopefully there will be an Omnifocus update soon that addresses most of the problems with the interface. I expect more at the price point ($89) that they've positioned it at.</p>
Django Testing Framework == Fail2008-06-27T00:00:00+00:00http://kurt.karmalab.org/2008/06/27/django-testing-frameworks-fail<p>I was reading on a plane recently, and was about halfway through the <a href="http://www.amazon.com/Definitive-Guide-Django-Development-Right/dp/1590597257/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1214594704&sr=8-1">Django book</a>, when I realized that I hadn't seen anything about how to test my application yet. I tend to be a <a href="http://kurt.karmalab.org/articles/2008/02/07/rails-app-without-tests-guaranteed-fail">test first developer</a> and use lots of mocks to play with things, especially at the beginning of a project, so I flipped to the index, turned to the test page, and saw the following:</p>
<blockquote>
<p>Testing was still under development when this book was being written, so to learn more you’ll need to read the documentation online at http://www.djangoproject.com/documentation/0.96/testing/</p>
</blockquote>
<p>Not a whole lot of help when you're on a plane.</p>
<p>Still, I was willing to give them the benefit of the doubt. Maybe they could create a bolt-on testing framework that would really be something. </p>
<p>Unfortunately, it's just <a href="http://www.djangoproject.com/documentation/testing/">not very good</a>.</p>
<p>Perhaps I'm spoiled by Rails and Rspec, but to me, the Django testing framework feels like something that they put in place just because someone told them that they needed a testing framework. It's not an integral part of the system.</p>
<p>Let's look at their test types. </p>
<p>First of all we have doctests. These emulate the output of the Python interactive interpreter exactly inside of your test code. All this does is to encourage the bad practice of writing some code, firing up your your interpreter, running a few cases, and then cutting and pasting the results into a file. There's no need to think through all of the cases or what you're really doing here. It's just an after the fact, feel-good, safety check.</p>
<p>Second, we have Unit tests. Not the most sophisticated testing framework in the world, but these look like a better choice, very much like any sort of xUnit tests.</p>
<p>The biggest problem I have with these, and the Django testing framework in general, is that the tests don't look to be compulsory. Why, in this day and age, don't we make the generation of a test automatic, and make the user decide to remove it if they really, really don't want to test, not the other way around?</p>
<p>Testing as an afterthought inevitably leads to poorly tested code. </p>
<p>I certainly hope that, as Django continues to grow and mature, testing take a more central role in the future.</p>
Innovation, Or the Complete Lack Thereof, In the Start-up Community2008-06-24T00:00:00+00:00http://kurt.karmalab.org/2008/06/24/innovation-or-the-complete-lack-thereof-in-the-start-up-community<blockquote>
<p>You can't just ask customers what they want and then try to give that to them. By the time you get it built, they'll want something new. - Steve Jobs</p>
</blockquote>
<p>I was at a networking event out here in the Valley a few weeks ago where a bunch of companies went up on stage and presented their companies to the audience. I'm fairly certain that at least one of them might have been interesting, but to tell you the truth, I don't really know because I didn't really pay attention to any of them. </p>
<p>I already knew about the ones that mattered and a quick glance at the program showed me that the others weren't worth listening to because they were me too clones of other start-ups.</p>
<p>After the presentations were over, a friend asked me what I though of them, to which I replied, "Don't know, didn't pay attention" and he responded, "yeah, but are you actively a hater like me yet?"</p>
<p>I think that I got his point, and that is that there are times lately where I just want to slap people when they tell me what their company is doing. </p>
<p>I know that innovating is one of the hardest things in the world to do, but lately, I've been disappointed in 99% of what I see. As far as I can tell, there seem to be two main reasons for this:</p>
<ol>
<li><p>The first reason is because of what I call the "me too" start-up. For example, when I first moved to SF, Flickr was the big thing out here, so for a few months everyone seemed to have a crap photo sharing site. Then this changed to Youtube/crap video sites, Facebook Platform/crap widget sites, and on and on. Some degree of competition is a good thing, but it's all a little much. If you have a substantial improvement to an existing product then, by all means, go for it. However, if you're just doing a feature for feature copy of a competitor's website then, please, invest those resources in doing something else. Or at least don't try to pitch it to me as something new and exciting.</p></li>
<li><p>The second reason, and the one that bothers me more, is the "aim high, fall fast" start-up. This is the start-up that has lofty goals, and falls into the trap of selling them out to meet some sort of smaller and less interesting short term target. This is all too common (hell, I did it at my last start-up), and I think that a big part of it comes from the fact that it's so cheap to start a company now that sometime it's easy to forget just how hard you really have to work to make something great. These are the companies that VCs need to fund at their "aim high" stage to keep them from plummeting. Sure, they might have an idea that's way off in left field, but companies like that are usually the ones that grow into something huge and interesting.</p></li>
</ol>
<p>So, I guess that I'm asking everyone out there for one thing, and that is to think bigger than we are right now. Think outside the box, don't water it down in the early stages or once a little revenue starts to trickle in the door. </p>
<p>When I run into you at a networking event, make me say "damn, that's a crazy idea, but it just might work" and when I run into you 6 months later don't make me shake my head at you because you've turned it into a clone of another idea.</p>
<p>Perhaps if we all start using our heads, the innovation will start flowing freely once again.</p>
Exposure to New Things, Still Good (More on Maglev)2008-06-03T00:00:00+00:00http://kurt.karmalab.org/2008/06/03/exposure-to-new-things-still-good-more-on-maglev<p>I'm somewhat taken aback by all of the negative reaction to Gemstone being a closed source product in the wake of the Maglev announcement.</p>
<p>Look at this:</p>
<p><img src="http://farm4.static.flickr.com/3263/2548118475_0c9fed3ee0_o.jpg" alt="Cargo Ship" /></p>
<p>Do you really think that the people that own this ship care about paying for software?</p>
<p>I doubt it, but they probably care about things like development speed. And software reliability. And the ability to get someone on the phone immediately if something goes wrong with the software.</p>
<p>That's the world the Gemstone comes from. I would bet that if the software running the shipping platform for this company falls over, it would lose more money over the course of a few hours then it would cost them to license Gemstone for an entire year.</p>
<p>Here's another example where JP Morgan has a system built on top of Gemstone that they <a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&entry=3272163751">can not afford</a> to shut down or migrate to another language because it would cost them too much money.</p>
<p>How is being exposed to the toolset that powers things like that going to be a bad thing?</p>
<p>Sure, it's closed source, but if enough people use it and benefit from it then the community will just do what we always do:</p>
<p>Some of us will pay for it, some of will find clever ways to subvert the license, and the rest of us will get to work on building an open source clone of it.</p>
<p>That's what always happens, and when it does happen some people will continue buying the closed source supported version (Oracle) and others will move to the free version (MySql).</p>
<p>What makes anyone think that something different is going to happen here?</p>
The Even Bigger News About Maglev2008-05-30T00:00:00+00:00http://kurt.karmalab.org/2008/05/30/the-even-bigger-news-about-maglev<p>I'm not at Railsconf this year, but before he left I asked my coworker Krishna to beg for, borrow, or steal a copy of the Maglev alpha code and bring it back to the office. Unfortunately, it looks like that's not going to happen (in an email he says "They don't have anything to share at the moment"), damn it.</p>
<p>Still, as Obie says, <a href="http://blog.obiefernandez.com/content/2008/05/maglev-is-gemst.html">this is a huge deal</a>. Even without the stated performance improvements that they're already seeing (I'm hearing 5x to 100x in microbenchmarks vs the MRI), it would still be a huge deal, because this might be our best chance ever to move people to a real object database. And not just any object database, but one of the <a href="http://www.gemstone.com/products/smalltalk/">best object databases out there</a>. </p>
<p>Once you use it, you won't ever want to go back.</p>
<p>As far as I'm concerned though, the bigger news about this is that the Maglev VM <a href="http://www.infoq.com/news/2008/04/maglev-gemstone-builds-ruby">"does retain the ability to run Smalltalk code."</a> As long time readers of this blog know, I'm a big fan of Smalltalk and the Seaside framework, and being able to start a project in Rails and then use the same data to build a Seaside app will knock down another huge barrier as far as getting people to try Seaside goes, (see my my post from a year and a half ago about <a href="http://kurt.karmalab.org/articles/2006/11/14/sneaking-smalltalk-in-through-the-ruby-backdoor">sneaking Smalltalk in through the Ruby backdoor</a>). </p>
<p>In my experience, Seaside makes writing web applications faster and easier than even Rails does.</p>
<p>Paul Graham is well known for saying that their <a href="http://www.paulgraham.com/avg.html">secret weapon</a> while developing Viaweb was Lisp, because it let them develop software faster than any of their competitors.</p>
<p>Ruby + Smalltalk + Gemstone is your secret nuclear weapon.</p>
<p>Not only will it let you develop software faster than any of your competitors, it will also let you scale that software in an easier manner than ever before.</p>
Should I Care If You Use Ruby (or Any Other Language For That Matter)?2008-05-28T00:00:00+00:00http://kurt.karmalab.org/2008/05/28/should-i-care-if-you-use-ruby<p>It seems like every time I post something bad about a programming language, or compare one language (A) to another (B), at least one commenter lets me know that they like language B better, and furthermore, some aspect of my post has convinced them that language A is so bad that they won't even try it anymore.</p>
<p>The thing is, I don't care.</p>
<p>I'm not a consultant anymore. I'm not trying to sell you anything (unless you need <a href="http://www.collaborativedrug.com">drug discovery software</a>). I'm no longer actively involved in open source community. If you don't want to ever try Ruby (or Smalltalk, or Python, or whatever) it really doesn't matter to me.</p>
<p>When I point out something about a language, I'm just doing it because I genuinely think that it is better than something else.</p>
<p>So how do I really feel about languages?</p>
<p>Well, over the last couple of months I've written code in Ruby, Smalltalk, Javascript, Python (if you haven't read <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FProgramming-Collective-Intelligence-Building-Applications%2Fdp%2F0596529325%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1211961731%26sr%3D1-1&tag=schradblog-20&linkCode=ur2&camp=1789&creative=9325">Programming Collective Intelligence</a><img src="http://www.assoc-amazon.com/e/ir?t=schradblog-20&l=ur2&o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> you should), Java, and even PHP (<a href="http://developer.yahoo.com/searchmonkey/">SearchMonkey</a> is seriously cool, if you haven't checked it out).</p>
<p>So what language do I think that you should program in?</p>
<p>All of the above, and as many more as possible.</p>
<p>Learn about <a href="http://www.defmacro.org/ramblings/fp.html">functional programming</a>. And <a href="http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_containers.html">iterator methods</a>. And <a href="http://en.wikipedia.org/wiki/Closure">closures</a> And <a href="http://www.ps.uni-sb.de/~duchier/python/continuations.html">continuations</a>.</p>
<p>Even more importantly (from my selfish point of view), learn about things that other programming languages can do that I don't know about.</p>
<p>Then hopefully someday we'll be able to have a discussion about programming languages without resorting to pointless statements like "I still prefer braces over keywords for blocks" and instead we'll get comments that we can all learn something from.</p>
Apple OS Upgrades Need Decent Release Notes (Ruby Broken in 10.5.3)2008-05-28T00:00:00+00:00http://kurt.karmalab.org/2008/05/28/apple-os-upgrades-need-decent-release-notes-ruby-broken-in-10-5-3<p>I've been dead in the water all day here because Apple changed something in the underlying Socket/Networking implementation in Mac OS X 10.5.3 and now Ruby doesn't correctly handle sockets. I've been looking at it, but haven't figured it out so far.</p>
<p>My thread on ruby-talk is here <a href="http://www.ruby-forum.com/topic/154556">http://www.ruby-forum.com/topic/154556</a> if anyone wants to weigh in on it.</p>
<p>I'm assuming something has to be patched into getaddrinfo.c in the ruby distribution, but my C is more than a little rusty, so it's slow moving for now.</p>
<p>Really, how hard is it release a document along with an OS upgrade explaining the low level changes made. Isn't that what we have the Apple Developer Connection for?</p>
Ruby is a Playground, PHP is a Factory2008-05-21T00:00:00+00:00http://kurt.karmalab.org/2008/05/21/ruby-is-a-playground-php-is-a-factory<p>While reading yet another article on why <a href="http://www.codinghorror.com/blog/archives/001119.html">PHP Sucks (today's witty twist, "but It Doesn't Matter")</a> I realized yet another reason that I'm glad to be programming in Ruby.</p>
<p>Ruby, to me, is like a big open playground, while languages like PHP remind me of big industrial factories. I don't think that any of us would argue that industrial factories are more efficient for most things, but they also suck the creativity and life out of the people working in them. </p>
<p>For instance, why would you ever want to write code like this:</p>
<pre>
class DescribeNewBowlingGame extends PHPSpec_Context
{
private $_bowling = null;
public function before()
{
$this->_bowling = new Bowling;
}
public function itShouldScore0ForGutterGame()
{
for ($i=1; $i<=20; $i++) {
$this->_bowling->hit(0); // someone is really bad at bowling!
} $this->spec($this->_bowling->score)->should->equal(0);
}
}
</pre>
<p>when instead you can write this:</p>
<pre>
describe Bowling do
before(:each) do
@bowling = Bowling.new
end
it "should score 0 for gutter game" do
20.times { @bowling.hit(0) }
@bowling.score.should == 0
end
end
</pre>
<p>You wouldn't. The first case is, at best, a bastard representation of the second case.</p>
<p>Of course, being out on the playground means that people get hit in the face with a ball once in a while, and everything isn't as neatly laid out for you as it is in a factory, but you also have the option to be creative, and not just do things like everyone else does.</p>
<p>And, sure, the playground is far more full of assholes than the factory, but these assholes are also more creative and entertaining to work with than people who just put widgets in place in a factory. </p>
<p>Plus the playground has that weird kid in the corner who's doing something totally crazy, but that just might be a genius, and if you get enough of these kids together, you're going to produce something that's much cooler and more creative than anything that gets built in a factory.</p>
<p>So you can talk all you want about big boring websites being written in PHP (or Java, etc).</p>
<p>As for me, I'll keep working in a language that encourages people to be creative.</p>
Monkey Patching Core Functionality == BAD, BAD, BAD2008-04-24T00:00:00+00:00http://kurt.karmalab.org/2008/04/24/monkey-patching-core-classes-bad<p>Yesterday, I finally got around to upgrading HAML in our Rails app to the newest stable version and the first thing that happened was that 20 completely unrelated specs broke.</p>
<p>Why, you may ask?</p>
<p>A monkey got into our code, that's why.</p>
<p>You see, Ruby allows you to redefine any method of any class on the fly (monkey patching) and it turns out that the old version of HAML had the following code in it:</p>
<pre>
unless String.methods.include? 'old_comp'
class String # :nodoc
alias_method :old_comp, :<=>
def <=>(other)
if other.is_a? NilClass
-1
else
old_comp(other)
end
end
end
class NilClass # :nodoc:
include Comparable
def <=>(other)
other.nil? ? 0 : 1
end
end
end
</pre>
<p>This, in turn, snuck into our codebase in all sorts of little unexpected places. In one instance a test was comparing sorted Arrays of nils and returning true. Not good.</p>
<p>Luckily, in all of our cases this ended up being more of an irritant than anything else, but I can easily imagine any number of ways in which relying on the assumed behavior of these methods could have broken our app in any number of subtle and terrible ways.</p>
<p>So I'm only going to say this once:</p>
<p><strong>Don't modify core Ruby functionality in your plugins or Rubygems.</strong> </p>
<p><strong>You will break your users' codebase.</strong></p>
<p><strong>If you do modify core functionality you deserve to be slapped around by those around you.</strong></p>
Startup School, DHH, and the Missing Marketing Piece2008-04-21T00:00:00+00:00http://kurt.karmalab.org/2008/04/21/startup-school-dhh-and-the-missing-marketing-piece<p>If you weren't at Startup School this weekend or haven't watched DHH's speech yet, you should go <a href="http://www.37signals.com/svn/posts/981-the-secret-to-making-money-online">check it out</a>. It was entertaining and a good counter-point to much of the ridiculous talk that you hear out here in the Valley.</p>
<p>As I was watching it though, I had the same thought that I always seem to have when I hear someone from 37 Signals talk, and it came to me right when I saw the slide that said:</p>
<ol>
<li>Great Application</li>
<li>Price</li>
<li>Profit!</li>
</ol>
<p>If only it were that easy. The thing that these guys always leave out seems to be step 1.5:</p>
<blockquote>
<p>Market the hell out of your product, and get a bunch of people to use it.</p>
</blockquote>
<p>That step is really, really hard. </p>
<p>I bet that if you asked DHH if he thought that 37 Signals would be just as successful if he hadn't invented Rails, and without the flood of free publicity that that got them, and he answered truthfully, the answer would be "no".</p>
<p>There are probably all sorts of great applications out there that would help me out on a daily basis, but I have little to no time to try out most of them. I've tried out Basecamp though, simply because while learning Rails you hear again and again about how Rails was extracted from it.</p>
<p>Would I (or you) know anything about 37 Signals if it wasn't for Rails? Probably not.</p>
<p>Those guys do a great job of marketing themselves and getting things out in front of people, but just because you're having fun marketing your stuff, doesn't mean that marketing isn't work that you have to do.</p>
<p>If you think that you don't have to market your app, no matter how great it is, you're living in a world similar to the one that DHH had on one his final slides where he said:</p>
<blockquote>
<p>500 * $40 = $125,000</p>
</blockquote>
<p>That's right, an imaginary world.</p>
Rails is Moving to Git: Helpful Links For New Git Users2008-04-02T00:00:00+00:00http://kurt.karmalab.org/2008/04/02/rails-is-moving-to-git-helpful-git-links-for-new-git-users<p>With the news today that <a href="http://weblog.rubyonrails.com/2008/4/2/rails-is-moving-from-svn-to-git">Rails is moving from Subversion to Git</a>, here are some helpful links for those of you that have never used Git before:</p>
<ul>
<li><a href="http://git.or.cz/">Git homepage</a></li>
<li><a href="http://utsl.gen.nz/talks/git-svn/intro.html">An introduction to git-svn for Subversion/SVK users and deserters</a></li>
<li><a href="http://eagain.net/articles/git-for-computer-scientists/">Git for Computer Scientists</a></li>
<li><a href="http://evil.che.lu/projects/braid">Braid (A Piston clone for Git)</a></li>
<li><a href="http://brian.maybeyoureinsane.net/blog/2008/01/31/git-sake-tasks">Git Sake Tasks (Rake tasks for performing git operations)</a></li>
<li><a href="http://kurt.karmalab.org/articles/2008/02/18/the-power-of-git-git-stash">The Power of Git: git stash</a></li>
<li><a href="http://kurt.karmalab.org/articles/2008/02/19/the-power-of-git-part-2">The Power of Git, Part 2</a></li>
</ul>
<p>Feel free to add more in the comments and I'll update the list above as they come in.</p>
Free Up Disk Space and Make Your Machine Go Faster With A Time Machine Restore2008-03-20T00:00:00+00:00http://kurt.karmalab.org/2008/03/20/free-up-disk-space-with-a-time-machine-restore<p>The hard drive on Macbook Pro died again the yesterday, so I had it in to my friendly neighborhood Apple Store to replace it once again.</p>
<p>Luckily, I was fully backed up through Time Machine this time, and when I got my machine back last night (note to self: always go to the flagship Apple store for repairs, they get your machine back to you <em>much</em> faster than other Apple stores) and started it up, one of the new options during setup was "Restore from Time Machine Backup". I chose that option, plugged in my disk, and when I woke up this morning my machine was back in exactly the same state that it was the day before.</p>
<p>That's not all though, it appears as one of the unexpected side effects of doing this is to clear out all of the temporary and log files that have built up over the last year or so. I went from 18 gigs of free space to over 30 gigs of free space just by going through the restore process.</p>
<p>So now I'm thinking that I might do just do a full reinstall of OS X and restore from Time Machine a couple of times a year to repeat this process. So far I haven't seen any downsides. Everything that I use in a normal day seems to be working perfectly (and actually, some things are going faster, I'm assuming because whatever trail of temp files they create over time has been cleaned up). If your machine is running slow or is low on space, doing a reinstall and a restore might be worth a try.</p>
Running the Rspec spec task as the default task in Rails2008-03-04T00:00:00+00:00http://kurt.karmalab.org/2008/03/04/running-the-rspec-spec-task-as-the-default-task-in-rails<p>Whenever I start a new Rails project, one of the first things I do is install Rspec and delete the Rails default test directory. Even with that directory missing, however, Rails continues to waste my time by trying to run its various testing tasks.</p>
<p>To make it stop, just add the following:</p>
<pre>Rake::Task[:default].prerequisites.clear
task :default => :spec</pre>
<p>to the bottom of the Rakefile in the root application directory. </p>
<p>Obviously, if you want to have a default task other than spec, just change the right side of the second line to whatever task you want it to run.</p>
Selenium RC, Ruby, and Leopard == Pain2008-02-27T00:00:00+00:00http://kurt.karmalab.org/2008/02/27/selenium-rc-ruby-and-leopard-pain<p>At <a href="http://www.collaborativedrug.com">CDD</a> we use Selenium RC and spec_selenium to run our acceptance tests. Selenium is a slow way to test in general, but lately for us it's become excruciatingly painful.</p>
<p>For some some unknown reason under Leopard, our tests would seem to randomly slow to a crawl. Tests that usually take 4 seconds to run would suddenly be taking 170+ seconds. </p>
<p>Even worse, this would persist across reboots, and then suddenly go away while we were trying to diagnose the problem.</p>
<p>It was at the point this morning where we were using DTrace to try to figure out what was going on.</p>
<p>Luckily, it doesn't seem to have anything to do with our code, and it looks like I've solved it (or at least worked around it) for now. </p>
<p>Selenium RC communicates over network sockets. It appears that Ruby network communication performance under Leopard is, in a word, <a href="http://www.ruby-forum.com/topic/138634">terrible</a>.</p>
<p>This problem can be most easily seen when doing a 'gem update' and then waiting forever while the metadata updates.</p>
<p>There seems to be a problem with DNS resolution somewhere in the chain that pops up intermittently.</p>
<p>For now, our workaround is:</p>
<ol>
<li>Turn off IPv6</li>
<li>Use OpenDNS for lookups.</li>
</ol>
<p>as suggested by the Ruby Forum thread linked above. That seems to fix things on all of our machines here.</p>
<p>I would file a bug report for this, but I'm not sure if this is a Ruby thing or an OS X thing. If anyone can shed some further light on this issue it would be appreciated.</p>
I'm Running for Congress!2008-02-26T00:00:00+00:00http://kurt.karmalab.org/2008/02/26/im-running-for-congress<p>I'm announcing today that I've decided to run for US Congress!</p>
<p><img src="http://farm4.static.flickr.com/3083/2295154188_47dc9e4bf3_o.gif" alt="Congress" /></p>
<p>No, not really, but someone else named <a href="http://www.leg.state.or.us/schrader/home.htm">Kurt Schrader</a> <a href="http://www.oregonlive.com/clackamascounty/index.ssf/2008/02/kurt_schrader_to_run_for_congr.html">is</a>.</p>
<p>This, however, is a blog about <a href="http://www.ruby-lang.org/en/">Ruby</a> and <a href="http://www.techcrunch.com/">internet startups</a>.</p>
<p>Welcome.</p>
<p>Please read <a href="http://poignantguide.net/ruby/">this book</a> before continuing.</p>
<p>And if you live in Oregon, vote for that guy. He's got a name you can trust.</p>
The Power of Git, Part 22008-02-19T00:00:00+00:00http://kurt.karmalab.org/2008/02/19/the-power-of-git-part-2<p>My friend Jay wrote <a href="http://blog.jayfields.com/2008/02/using-patch-as-subversion-stash.html">a blog post</a> today that says that you can use 'svn patch' as poor man's replacement for git-stash. Fair enough, I've heard of places that use patch as full-on replacement for source control and integration as well. :-)</p>
<p><img src="http://farm3.static.flickr.com/2007/2279225750_82f8f11981_m.jpg" alt="Patch Trader" /> </p>
<p>First of all, I want to point out that we still use Subversion as our main <a href="http://utsl.gen.nz/talks/git-svn/intro.html#sux">code ghetto</a> at work. </p>
<p>Git <a href="http://utsl.gen.nz/talks/git-svn/intro.html" title="An introduction to git-svn for Subversion/SVK users and deserters">fully supports</a> updating from svn and pushing changes back, so even if you have to use Subversion at work, you don't have to use it on your local machine.</p>
<p>The difference is that I have our entire history of source code commits on my machine in not even twice the space than it takes for my Subversion checkout (969M vs 578M). I also can do fast local branching and checkins, without worrying about being connected to the network.</p>
<p>Here's a real example of how we used git today at work that I never would have done with Subversion. </p>
<p>I started working on a feature yesterday on my laptop that is going to take a few days to finish. When I got to work today I decided to pair with my coworker Krishna to continue working on it.</p>
<p>In the pre-git world we would have had to either huddle around my laptop, check in the broken code to Subversion to check it out on our other machine, or do a patch of just the changes related to that feature and transfer it to and apply it on the pairing machine.</p>
<p>Not today though. Today I just fired up git-daemon on my machine and did a 'git pull' of the feature branch onto the pairing machine. At the end of the day I just did a 'git push' back to my machine to get all of the changes we made today back so that I could continue working on it tonight.</p>
<p>Even better than that though, I can <em>not</em> continue working on it tonight. </p>
<p>Git makes branching and merging so fast and easy that I can rewind all of the changes that I've made to the code base to support that feature, fix a showstopper bug, check that change into the subversion repo, and then merge the feature branch back on top without even worrying about it.</p>
<p>Git is starting to change the way that I do development. I can finally use branches the way that I've always wanted to. I can finally have several features in development at once on different branches, because it's so easy to switch and merge between them.</p>
<p>Even if you're stuck with Subversion as your backbone, you can still grow outside of it.</p>
The Power of Git: git-stash2008-02-18T00:00:00+00:00http://kurt.karmalab.org/2008/02/18/the-power-of-git-git-stash<p>I converted my Subversion repository at work to a git repository recently, and today I had my first real "aha" moment.</p>
<p>I was working on a feature this morning when I realized that some code I checked in about an hour before had broken the build. In the old Subversion world, I would have needed to keep track of what I was changing to fix the bug, and then make sure to just check that in to ensure that none of my half-finished new feature got into the trunk.</p>
<p>Not anymore. Today I just did a:</p>
<blockquote>
<p>git-stash</p>
</blockquote>
<p>and it stashed away all of my changes in a temporary branch. Then I fixed the build, checked in my fix out main Subversion repo (using git-svn), and did a:</p>
<blockquote>
<p>git-stash apply</p>
</blockquote>
<p>to unroll my earlier changes back on top of the now fixed code. It's not the world's biggest saving of time, but it's one less thing that I needed to think about during development, and using git I'm seeing more and more little things that are starting to add up to a big change in the way I'm doing development.</p>
Cells: Bringing Components Back Into Rails2008-02-13T00:00:00+00:00http://kurt.karmalab.org/2008/02/13/bringing-components-back-into-rails-with-cells<p>Whenever I get I get tired of dealing with all of the disconnected layers of Rails, I think about how I should really write a decent component architecture that works well on top of it. Luckily, someone has already done it for me. </p>
<p><img src="http://cells.rubyforge.org/RailsCells_files/cells_logo.jpg" alt="Cells" /></p>
<p>From the <a href="http://cells.rubyforge.org/">Cells homepage</a>:</p>
<blockquote>
<p>Cells brings the benefits of component-oriented development to the Ruby on Rails web application platform, without the performance problems that had been associated with Rails' own, deprecated, component subsystem.</p>
</blockquote>
<p>Each Cell is like a little lightweight controller (with associated views) that you can embed anywhere in your app. I've been playing with it tonight, and while it's not on the level of say, <a href="http://www.seaside.st/">Seaside</a>, it seems like a fairly good baseline for building a more component oriented system for your apps.</p>
<p>I know from a <a href="http://groups.google.com/group/ruby-component-web-frameworks/">mailing list</a> that I'm on that some people are kicking around taking this and building a stateful component framework with real object binding underneath. That would really take Ruby web frameworks to the next level. (And be a ton of work to get right, I'm sure. :-) )</p>
<p>Hopefully that project will get started soon. I'm extremely interested in watching and helping it develop.</p>
The Value of the Data Cloud2008-02-11T00:00:00+00:00http://kurt.karmalab.org/2008/02/11/the-value-of-the-data-cloud<p>Both of my last two companies have been involved in the aggregation of large data sets. </p>
<p>At the company I co-founded, <a href="http://www.tentonlabs.com/">Ten Ton Labs</a>, we collected and normalized music reviews from across the web to support our music search engine, Squishr. </p>
<p>Our original plan, however, was to collect all reviews, of anything and everything, and then build an application that analyzed and tracked various metrics from the data to find out how consumers felt about certain products. We scaled the idea back to focus on music to allow us to continue building the underlying review platform and to have an easier application to implement on top of it to prove it out.</p>
<p>At my current company, <a href="http://www.collaborativedrug.com/">Collaborative Drug Discovery</a> we collect huge amounts of data about experiments in the field of chemistry (there are about <a href="http://en.wikipedia.org/wiki/Chemical">thirty million known chemical compounds</a>) and allow people to search through the data in various ways, as well as add their own data. Our users can use our toolset to keep their data private, but search across the aggregated dataset.</p>
<p>Both of these companies have a lot in common. When I was at Ten Ton Labs, our music search engine held a huge amount of short-term value for us. It was the cool thing that we could show to investors to get them excited about the company, and it gave us attainable short-term goals to go after. CDD is very similar, we currently put most of our effort into our cheminformatics application that runs on top of our data, because it's what we sell to people and show to our investors.</p>
<p>Long term though, I don't think that our music search engine or the CDD cheminformatics app is really where most of our value lies.</p>
<p>It lies in the cloud.</p>
<p><img src="http://farm3.static.flickr.com/2356/2257663876_523a5bc375.jpg" alt="cloud" /></p>
<p>A huge amount of value is created by building tools to make it easy to get data into the cloud, and to make it easy for people to process the data and get it back out in a manner that they're used to. Once you have those tools, especially if you're allowing people to build applications and communities on top of your data, you're creating real value.</p>
<p>You've created an app that people will come back to everyday to see what's new.</p>
<p>And you've created an ecosystem around your data that won't allow it to die. People will build tools to interact with it in ways that you never even thought of, and again, more value will be created because of it.</p>
<p>I think that building a platform for data like this, not just a one-off application, is where the opportunity for huge value creation eventually lies.</p>
Thank You Apple - Macbook Pro Wireless Working Again2008-02-11T00:00:00+00:00http://kurt.karmalab.org/2008/02/11/thank-you-apple-macbook-pro-wireless-working-again<p>Today's <a href="http://www.macworld.com/article/131902/2008/02/1052applelistens.html">10.5.2 update</a> to Mac OS X seems to have solved my issue of losing wireless connectivity every half-hour and having to reboot to get it back.
I was about ready to throw my laptop out of the window with this one. How was I supposed to get work done when the internet was constantly going away?</p>
<p>I wasn't sure how much more I could have taken before I just installed Linux on this box to get back to work.</p>
<p>So thank you Apple for saving my laptop. And thank you for not making me go through the pain of dealing with a dual-boot Linux box once again.</p>
Rails App Without Tests = Guaranteed Fail2008-02-07T00:00:00+00:00http://kurt.karmalab.org/2008/02/07/rails-app-without-tests-guaranteed-fail<p>My friend Jay <a href="http://blog.jayfields.com/2008/02/ruby-did-tdd-make-ruby-viable-option.html">wrote a few days</a> ago:</p>
<blockquote>
<p>I bet of you looked at the majority of Rails applications you would find empty test folders (or only the generated tests, which are never run). I'm quite sure that's true because I expect the conferences to attract the best of the Ruby developers, and several of the people I talk to at those conferences "simply don't have time" to write tests.</p>
</blockquote>
<p>These people are idiots. Either that, or they don't have any sort of complexity in their apps and they're writing them in a far too simplistic and elementary way.</p>
<p>Quite often, doing a little meta-programming magic in Ruby can make you massively more productive and, in my experience, the only way to find the side effects of doing a lot of meta-programming is to have a comprehensive test suite. As this magic-level in your app increases, <a href="http://kurt.karmalab.org/articles/2008/01/22/kurts-law-of-ruby-complexity">the number of side-effects of that magic will also inevitably increase</a>. </p>
<p>Eventually, you <em>will</em> get burned by something if you're not ready for it.</p>
<p>Tests are your flame-proof suit in this case. They're not going to protect you against everything, but most of the time they do a damn good job of keeping you alive.</p>
<p>DHH <a href="http://www.37signals.com/svn/posts/838-ask-37signals-how-do-you-document-code">wrote the other day</a>:</p>
<blockquote>
<p>We try to do a fairly good job at keeping our test suites current and exhaustive as well. Basecamp has a 1:1.2 ratio of test code (thanks to the persistence of Jamis!), Highrise has a ratio of 1:0.8 (bad me!).</p>
</blockquote>
<p>At <a href="http://www.collaborativedrug.com">CDD</a>, our current code to test ratio is 1:4.2.</p>
<p>Overtested? Undoubtedly. </p>
<p>However, we don't want to ever have to go in and fix the damage after someone tries to import 1,000,000 molecules to our system and something goes wrong. The repair work can take days in some cases, so we err on the side of caution.</p>
<p>I'll wrap this up with the following three easy points:</p>
<ol>
<li>If you're writing a Rails app, write tests for it.</li>
<li>If someone who works for you "simply doesn't have the time" to write tests, fire them.</li>
<li>If a consultant tries to give a Rails app without a test suite, fire them (and don't pay them, if at all possible, what they've given you is pretty much worthless, and is going to be a nightmare to maintain).</li>
</ol>
If Your Rails App Has No Tests, It will Fail Miserably2008-02-05T00:00:00+00:00http://kurt.karmalab.org/2008/02/05/if-your-rails-app-has-no-tests-it-will-fail-miserably<p>My friend Jay recently wrote a bit on whether or not </p>
Some Cool New Web Frameworks To Check Out2008-01-22T00:00:00+00:00http://kurt.karmalab.org/2008/01/22/some-cool-new-ish-web-frameworks-to-check-out<p>(Or, How I Spent My Martin Luther King Day Weekend)</p>
<p>Here are the web app frameworks I've been reading about and playing with for the last few days. As usual, they've got a bunch of cool ideas that we'll be seeing in mainstream frameworks in 4 or 5 years.</p>
<p><a href="http://common-lisp.net/project/cl-weblocks/">Weblocks</a>: Weblocks is a continuations-based web framework written in Common Lisp. Think Seaside, in Lisp.</p>
<p><a href="http://ramaze.net/">Ramaze</a>: An MVC framework written in Ruby. Like Rails without all of the garbage and magic. </p>
<p>Check them out. Pretty cool stuff going on.</p>
Kurt's Law of Ruby Complexity2008-01-22T00:00:00+00:00http://kurt.karmalab.org/2008/01/22/kurts-law-of-ruby-complexity<p>My new law of Ruby complexity:</p>
<blockquote>
<p>For a Ruby application increasing in size at rate of X, with an amount of cleverness to cover up the complexity increasing at rate Y, the quantity Y is always greater than X, and Y eventually approaches positive infinity.</p>
</blockquote>
<p>Working on Ruby projects has given me enough examples of "Where did that method come from?" to last a lifetime.</p>
Behold the Power of FeedBlitz2008-01-21T00:00:00+00:00http://kurt.karmalab.org/2008/01/21/behold-the-power-of-feedblitz<p>Last Thursday I published a couple of blog entries and the next thing I knew my FeedBurner stats looked like this:</p>
<p><img src="http://farm3.static.flickr.com/2249/2211029272_4e64f55b85.jpg" alt="FeedBurner Stats" /></p>
<p>So I figured I'd ask the lazyweb. Anyone ever seen anything like this before? Is FeedBlitz just spamming my RSS feed?</p>
A Lesson In Premature Optimization of Subscription Services From the Gym Business2008-01-21T00:00:00+00:00http://kurt.karmalab.org/2008/01/21/a-lesson-in-premature-optimization-of-subscription-services-from-the-gym-business<p>For the last twelve years I've been building web applications. During that entire time I haven't ever worked at a software company that hasn't, at one time or another, been concerned with prematurely optimizing the application we've been working on. </p>
<p>I think that we can all learn an important lesson from this study of gym users that was recently written up in the <a href="http://www.ft.com/cms/s/0/cbc4aafc-c835-11dc-94a6-0000779fd2ac.html?nclick_check=1">Financial Times</a> (via <a href="http://paul.kedrosky.com/archives/2008/01/21/selfcontrol_del.html">Paul Kedrosky</a>).</p>
<blockquote>
<p>Two Californian academics, Stefano DellaVigna and Ulrike Malmendier, studied three US health clubs and discovered that 80 per cent of members used the gym so infrequently that they would have been better off paying the $10 fee for each individual visit. Many also left substantial gaps between their last visit and cancelling their membership.</p>
</blockquote>
<p>This tracks well with my experience with subscription based software products. People inevitably sign up for more access than they need, and the difference between what they pay to use and what they actually use ends up going straight to your bottom line. Optimizing for expected usage never really pays off, because usage never lives up to expectations.</p>
<p>Also, get people on an auto-renew plan:</p>
<blockquote>
<p>Some clubs attempt to limit the attrition rate by telephoning inactive members and asking whether there is anything the club can do for them. Mr Ratner never thought this was a good idea as it might remind them that they were wasting their money.</p>
</blockquote>
<p>Lesson: People almost always use your software less then they, or you, expect. This is a good thing (for you, perhaps not so much for them).</p>
Triggit Beta Launch: Easily Insert Images, Videos, and Text Links Into Your Blog2008-01-17T00:00:00+00:00http://kurt.karmalab.org/2008/01/17/triggit-beta-launch-easily-insert-images-videos-and-text-links-into-your-blog<p>Today marks the official beta launch of <a href="http://triggit.com/">Triggit</a>, the tech side of which is run by my friend <a href="http://www.karmalab.org/~rt">Ryan Tecco</a> (who co-founded <a href="http://www.tentonlabs.com">Ten Ton Labs</a> with me a few years ago).</p>
<p>So what's a Triggit? It's an easy way to insert images, videos, or text links into your blog, without downloading or installing any software. </p>
<p>All you have to do is add one line of code to your blogging software template. You can then use a cool Javascript based tool to insert objects into your blog on the fly. As you can see in the picture below, the Triggit interface just overlays itself on the top of your site to allow you to insert things:</p>
<p><img src="http://farm3.static.flickr.com/2383/2198247149_f5459e1c14.jpg" alt="Triggit screenshot" /></p>
<p>You just select what type of object you want to insert and then drop it into the page wherever you want. For instance, I've used Triggit to insert this image, of Ryan dressed like a cow from Halloween a few years ago, into this post by searching for it on Flickr through their interface, and simply dropping it in below:</p>
<p>This is a game-changing sort of tool that will make your life as a blogger much easier. If anyone wants to try it out, I have 300 invite codes to the beta to hand out. Just use the access code 'kurt' when you sign up.</p>
<p>Update: More coverage at <a href="http://www.techcrunch.com/2008/01/17/triggit-edit-any-page-where-java-script-is-accepted/">TechCrunch</a> , <a href="http://gigaom.com/2008/01/17/triggit-makes-grabbing-internet-content-even-easier/">GigaOm</a>, and <a href="http://www.webware.com/8301-1_109-9852280-2.html">WebWare</a>.</p>
Automatically Measuring Your Code Coverage Using Selenium (or Watir) and Rcov2008-01-16T00:00:00+00:00http://kurt.karmalab.org/2008/01/16/automatically-measuring-your-code-coverage-using-selenium-or-watir-and-rcov<p>My coworker Krishna, inspired by Giles Bowkett's post <a href="http://gilesbowkett.blogspot.com/2007/10/use-rcov-with-selenium-watir-or-just-in.html">Rails Debugger: Use RCov With Selenium, Watir, Or Just In Real Life</a>, whipped up a little rake task that automates the process of checking code coverage using your Selenium tests:</p>
<pre>
desc "Measure coverage of selenium specs"
task :coverage do
FileUtils.rm_rf "selenium_coverage"
mongrel_pid = fork { exec("rcov script/server -o selenium_coverage --rails -- -e test -p 4000") }
sleep(6) # wait for mongrel to start
begin # selenium will call "exit 1" if there are failures
Rake::Task["selenium:spec"].invoke
rescue SystemExit; end
Process.kill("INT", mongrel_pid) # triggers generation of rcov report
Process.wait
system("open selenium_coverage/index.html") if PLATFORM['darwin']
end
</pre>
<p>While we don't agree that this task, in any way, shape, or form, constitutes a debugger, it has been useful in showing us areas of our code base that our Selenium test cases aren't hitting. </p>
<p>This should work for just about anyone that has a rake task to run their Selenium (or Watir, or other in-browser testing tool) tests. Just replace 'selenium:spec' in the block above with whatever task you use to run your in browser functional tests and have at it.</p>
Macbook Air2008-01-15T00:00:00+00:00http://kurt.karmalab.org/2008/01/15/macbook-air<p>Wow:</p>
<blockquote>
<p>MacBook Air is 0.16" to 0.76"</p>
</blockquote>
<p>There must have been some amazing engineering that went into that thing. I'm already drooling over it. I'm assuming that we'll see more info at <a href="http://www.apple.com/macbookair/">http://www.apple.com/macbookair/</a> soon.</p>
Backup Your Hard Drive2007-11-29T00:00:00+00:00http://kurt.karmalab.org/2007/11/29/backup-your-hard-drive<p><img src="http://farm3.static.flickr.com/2099/2074611550_27fddbb9d0.jpg" alt="Sparks!" /></p>
<p>A quick reminder to all of my friends out there as yet another Macbook Pro hard drive bites the dust at our office. I can only imagine that Apple put Time Machine into Leopard specifically because so many of these things crap out.</p>
<p>(Image From <a href="http://www.makezine.com/blog/archive/2006/06/hard_drive_grinder_mod.html">Makezine</a>)</p>
Ruby 1.9 Changes2007-11-26T00:00:00+00:00http://kurt.karmalab.org/2007/11/26/ruby-1-9-changes<p>I was playing with Ruby 1.9 a bit over the holiday weekend and I found the <a href="http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9">eigenclass Changes in Ruby 1.9</a> page to be an invaluable reference to the changes we'll all be dealing with soon.</p>
<p>Some highlights:</p>
<ul>
<li>Ruby 1.9 is significantly faster than Ruby 1.8.6, at least for the toy programs that I wrote with it.</li>
<li><code>send()</code> no longer works to send to private methods. You need to use <code>send!()</code> instead.</li>
<li><p>Symbol #to_proc now allows you to do </p>
<p><code>%w[a b c].map(&:capitalize) # => ["A", "B", "C"]</code></p></li>
</ul>
<p>Check out the link above for more. It looks like December is going to be a fun month for Rubyists.</p>
Closed APIs Suck: An Open Letter to Salesforce2007-11-23T00:00:00+00:00http://kurt.karmalab.org/2007/11/23/closed-apis-suck<p>Dear Salesforce,</p>
<p>I've been doing some work with you lately, and I was hoping to hook into you using your APIs to automatically insert some of our leads. Unfortunately, I can't. Despite the fact that you have a full API, it seems that you've chosen to restrict API access to "Enterprise Edition" and higher level accounts, and at my office we only have a "Group Edition" account.</p>
<p>I've been trying to think of a good reason why you would do this. I'm doing my best to lock our small but growing business into using Salesforce. Why wouldn't you want that to happen? I'm trying to tie myself intimately into your infrastructure. I'm trying to make it impossible to extract myself from being your customer down the road, but you're thwarting my attempts at every turn. </p>
<p>Think of how it would increase my switching costs if something better comes along. I would have to tell whoever is pushing us to adopt the new application, "Sorry, if we switch we'll have re-engineer our app." It would set the bar much, much higher. Also, it would only help your case for sticking around if I could say "You know all of that cool stuff that our app does with Salesforce, it'll all be gone if we switch over."</p>
<p>So come on Salesforce, how about making both of our lives easier and opening things up. I'm sure that some high-up executive there is telling you that there are a bunch of good reasons not to. I'm here to tell you that that person is wrong. Open up and this relationship will be better for both of us.</p>
<p>Thanks in advance,</p>
<p>Kurt</p>
Using Selenium for Navigation and Hpricot for Validation in your Webapp2007-11-21T00:00:00+00:00http://kurt.karmalab.org/2007/11/21/using-selenium-for-navigation-and-hpricot-for-validation-in-selenium-tests<p>Selenium is a great tool. We have a bunch of Selenium tests that run with every one of our builds. Unfortunately, they contain a bunch of XPath in them to verify elements, and the XPath engine in IE6, to put things lightly, is a piece of garbage. It takes a huge amount of time to verify an element in a page.</p>
<p>As an example, here is the amount of time that our Selenium test run used to take on Firefox:</p>
<blockquote>
<p><code>Finished in 506.108548 seconds</code></p>
</blockquote>
<p>And here's how long it took on IE:</p>
<blockquote>
<p><code>Finished in 4567.47592 seconds</code></p>
</blockquote>
<p>That's 1 hour and 16 minutes to the same set of tests that it takes less than 9 minutes to run in Firefox. Clearly this is unacceptable, and, from watching the tests run, it's clear that the IE XPath engine is to blame.</p>
<p>We decided to attack this problem by using Hpricot to verify the elements in a page instead of the built in XPath engine. This allows us to use Selenium for navigation between pages in our site and Hpricot to do the verification.</p>
<p>It's simple enough to grab the HTML from the page at any point during a Selenium test by using</p>
<blockquote>
<p><code>@browser.get_html_source</code></p>
</blockquote>
<p>(as long as you're using Ruby Selenium Driver) and then you can do all of the verification that you want on it, in far less time. Plus, the number of changes that you have to make to your Specs/Tests are minimal. As an example,</p>
<blockquote>
<p><code>readouts_table = table('id=readouts')
readouts_table.cell(0,0).should contain_text("Molecule")</code></p>
</blockquote>
<p>in our old code became</p>
<blockquote>
<p><code>doc = Hpricot(@browser.get_html_source)
readouts_table = doc/"//table[@id='readouts']"
readouts_table/"thead/tr[1]".should == "Molecule"</code> </p>
</blockquote>
<p>in our updated code. </p>
<p>As always though, the proof is in the pudding. I've updated 2 out of 19 of our specs, and our time on Firefox has dropped to:</p>
<blockquote>
<p><code>Finished in 488.753052 seconds</code></p>
</blockquote>
<p>But more importantly, out IE run time is now:</p>
<blockquote>
<p><code>Finished in 3171.07507 seconds</code></p>
</blockquote>
<p>That's a 24 minute difference already and we can already fit in a couple of extra CI builds a day because of that.</p>
<p>We're planning on adopting this strategy for all of our Selenium tests moving forward. Selenium will be used only for navigation, and Hpricot will be used for verifying the page content. I strongly suggest that you consider it instead of using the built in verification.</p>
Software Pundit != Software Luminary2007-11-08T00:00:00+00:00http://kurt.karmalab.org/2007/11/08/software-pundit-software-luminary<p>My friend <a href="http://blog.jayfields.com/">Jay</a> published a blog post today entitled <a href="http://blog.jayfields.com/2007/11/dispised-software-luminaries.html">Despised Software Luminaries</a> and, for once, he got it all wrong. I know <a href="http://martinfowler.com/">Martin</a> and <a href="http://obiefernandez.com/">Obie</a> , his examples in the post, from my time at Thoughtworks, and they're not software luminaries. They're software pundits. </p>
<p>Both of them spend a lot of time telling people how they think the software world should operate. Whenever you tell people how they should do something, it naturally leads to disagreement. It's that simple. People despise them because they disagree with them.</p>
<p>When I think software luminary, I think of people like Alan Kay, Fred Brooks, and Edsger Dijkstra. People that made fundamental changes to the way that we write software. People like Obie and Martin are smart, talkative guys, but they're not quite in the same league as those guys.</p>
<p>(See also: <a href="http://en.wikipedia.org/wiki/Turing_Award">http://en.wikipedia.org/wiki/Turing_Award</a>)</p>
Seaside 2.8 Released!2007-10-28T00:00:00+00:00http://kurt.karmalab.org/2007/10/28/seaside-2-8-released<p><img src="http://farm3.static.flickr.com/2213/1794435688_bf29f7ce82_o.png" alt="Seaside" /></p>
<p><a href="http://www.seaside.st/">Seaside</a>, my other favorite framework, released version 2.8 today. This release has been optimized and optimized some more, as it doubles the average page rendering speed, and now uses up to 4 times less memory. Plus it supports <a href="http://seaside.gemstone.com/">Gemstone</a>, which is the feature that I'm most excited about playing with.</p>
<p>The official release page is <a href="http://www.seaside.st/community/development/seaside28">here</a>, and if you still haven't tried Squeak, a great new tutorial can be found <a href="http://www.swa.hpi.uni-potsdam.de/seaside/tutorial">here</a>.</p>
<p>Congrats to the entire Squeak team on this one. </p>
<p>(Seriously though, who does a release on a Sunday? You guys are nuts.)</p>
The Endless Parade of Firetrucks2007-10-22T00:00:00+00:00http://kurt.karmalab.org/2007/10/22/the-endless-parade-of-firetrucks<p>I've been on vacation down in LA for the last week. </p>
<p>A couple of days ago, my friend James pointed to the horizon and said something along of lines of, "look at all of the smoke from the fires up North."</p>
<p>Well, I had no idea how bad things were until today, when I was driving back up I-5 and literally 10 minutes didn't go by where I didn't see a caravan of 5-10 firetrucks heading South. This was over the course of a 5 hour drive, so I figure that I saw about 200 firetrucks.</p>
<p>We also drove just East of the fires under two lines of helicopters, one that was flying in and dropping water on the blaze, and another that was returning to load up their water tanks again. The suburbs that we could see from the highway all had police cars stationed in front of them to keep people from trying to return to their homes.</p>
<p>It was more than a bit surreal.</p>
<p>Hopefully they get the fires out soon and everyone down there is safely evacuated. </p>
<p>Scary, scary stuff.</p>
Ruby NetBeans, Now With Haml and Better Rspec Support2007-10-15T00:00:00+00:00http://kurt.karmalab.org/2007/10/15/netbeans-and-ruby-now-with-haml-and-run-focused-test-support<p>Ever since I started writing Ruby code I've used Textmate as my editor. Recently, however, I've found myself using Netbeans more and more, to the point where I usually have Netbeans and Textmate open next to one another. Netbeans' refactoring support, ability to jump to method definitions, and ability to autocomplete code is just too good to ignore.</p>
<p>However, a couple of features have kept me from switching to Netbeans full time, namely its lack of Haml support and the fact that it couldn't run a focused Rspec example.</p>
<p>Well lo and behold, I just checked the <a href="http://wiki.netbeans.org/wiki/view/RubyRecentChanges">Netbeans Ruby Recent Changes page</a> and found the following:</p>
<ul>
<li>October 12
<ul>
<li>Lots of bug fixes</li>
<li>RSpec module (not part of 6.0 but available in the continuous builds on deadlock)
<ul>
<li>TextMate RSpec snippets</li>
<li>"Run Focused Test" action which runs test under the caret. Locate the action in the Keybinding options (see the "Other" category) and bind to something convenient.</li>
<li>"Debug Focused Test", which starts the debugger on the test under the caret. </li>
</ul></li>
<li>Preliminary support for HAML and SASS - see announcement </li>
</ul></li>
</ul>
<p>They solved both of my issues on the same day!</p>
<p>I did have to install the Haml plugin from <a href="http://mediacast.sun.com/details.jsp?id=3759">here</a>, but it looks like I no longer have a compelling reason not to switch to NetBeans fulltime.</p>
<p>And the obligatory screenshot:</p>
<p><img src="http://farm3.static.flickr.com/2192/1578264725_7c53b1026e.jpg" alt="Haml in NetBeans" title="Haml in NetBeans" /></p>
<p>Awesome!</p>
Mint Programmers Need to Learn How to Do Math2007-10-08T00:00:00+00:00http://kurt.karmalab.org/2007/10/08/programmers-need-to-learn-how-to-do-math<p>A recent disturbing trend that I've noticed is that more and more programmers I run into seem to be really bad at math. At the very least, I'm starting to think that a few semesters of calculus in college wouldn't have hurt anyone.</p>
<p>Example 1: </p>
<p><a href="http://www.mint.com">Mint</a> is a financial website that recently won first place at the Techcrunch 40 conference here in San Francisco. It aggregates your bank accounts and tells you how you can save money. While checking it out his evening I came across this, which, incidentally, is the same thing that it's been telling me since I signed up:</p>
<p><img src="http://farm3.static.flickr.com/2235/1520354432_c0e1f2245a_o.gif" alt="Savings!" title="Savings!" /></p>
<p>Come on Mint, this is the core feature of your website. (I'm not counting the account sign in and aggregation piece, as they seem to contract with Yodlee to do that.) How hard is it to properly calculate the above value? </p>
<p>I hate it when a startup spends so long on design that they forget to write solid code. People aren't going to come back if you can't even get this right.</p>
<p>Furthermore, check out the account that they want me to switch over:</p>
<p><img src="http://farm3.static.flickr.com/2302/1519493501_31ec9885bf_o.gif" alt="Account" title="Account" /></p>
<p>Where did they even begin to pull these numbers from? They want me to switch an account with no money on it from a lower rate card to a higher rate card in order to save $278 a year.</p>
<p>At this point I've stopped thinking about math though, and starting thinking about all of the security holes that are probably in this site if they got something this fundamental wrong. </p>
<p>Unfortunately, there's no way in their interface to cancel my account. Wonderful:</p>
<p><img src="http://farm3.static.flickr.com/2114/1520595744_7355c205ef_o.gif" alt="Cancel" title="Cancel" /></p>
<p>These just seem like basic, basic things to me. I don't even know how you say that you're in beta when things like this don't work.</p>
Refactoring, Rails, and "Coding Ruby Correctly"2007-07-26T00:00:00+00:00http://kurt.karmalab.org/2007/07/26/refactoring-rails-and-coding-ruby-correctly<p><a href="http://kurt.karmalab.org/articles/2007/07/25/tiresome-tedious-bullshit-on-rails">Yesterday's blog post</a> certainly generated a boat load of feedback, which I'm going to group into a few different tongue-in-cheek categories:</p>
<ul>
<li>Refactoring isn't a problem, just refactor everything yourself by hand, or write a refactoring tool yourself. </li>
</ul>
<p>If I had the time, I would. Refactoring by hand is what I'm doing now on a daily basis, because I don't really have any other choice. Thus the request for better tools.</p>
<p>Which brings up a tangentially related point. Why is it that whenever someone asks for better tools it's because they're lazy? I think that we can all agree that it sucks to use an axe to chop down trees when you've used a chainsaw before. From now on, comments of the form "just use grep to do it" will only be accepted from those of you who program on mainframes and walk everywhere, simply because you remember the good old days before we had these fancy cars and trains to move us around.</p>
<ul>
<li>You must be coding Ruby incorrectly.</li>
</ul>
<p>When making this comment, please point out the web page that shows how to write Ruby correctly. I have multiple Ruby webapps in production, I worked at <a href="http://www.thoughtworks.com">Thoughtworks</a> and I'm currently working with <a href="http://www.pivotallabs.com">Pivotal Labs</a>, two of the foremost Ruby consultancies, and no one has told me or my team that we're writing things incorrectly. However, I have an open mind and I'm willing to learn more about this topic.</p>
<ul>
<li>You can't just throw together Ruby code without tests, that's why you're running into problems.</li>
</ul>
<p>Aren't you going to have this problem with any language? Where did I imply that this was something that we were doing? Anyway, 'rake stats' says:</p>
<p><code>Code to Test Ratio: 1:2.8</code></p>
<p>So I don't think that's the problem.</p>
<p>Seriously though, It's all a bit academic. If you asked me what framework I would use if I was going to start building a new webapp tomorrow (and told me that I couldn't use Seaside) I would still choose Rails. It's still the best tool for lots of jobs out there. Pointing out some of it's deficiencies doesn't make that any less true, despite what some people seem to think.</p>
Tiresome, Tedious Bullshit (on Rails)2007-07-25T00:00:00+00:00http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails<p>In his post <a href="http://gilesbowkett.blogspot.com/2007/07/business-advantage-of-rails.html">The Business Advantage of Rails</a>, Giles Bowkett writes:</p>
<blockquote>
<p>What makes programmers happy? Elegant systems which make them productive and take tiresome, tedious bullshit out of their daily lives. </p>
<p>People who get tiresome, tedious bullshit out of their way forever are great people to work with. Conversely, tolerating tiresome, tedious bullshit without ever fixing it is absolutely not a character trait you want your hiring process to be biased in favor of.</p>
</blockquote>
<p>which sounds like a good idea, except that a lot of programming on a real application, no matter if you do it in Ruby, or Visual C, or COBOL, ends up being a lot of tiresome, tedious bullshit. </p>
<p>Which brings me to something that I've been thinking a lot about lately. At <a href="http://www.collaborativedrug.com">CDD</a> we have a pretty complex Rails app, (as one of the consultants that we're working with said, "I've worked on a dozen Rails apps, and this is about 4 times bigger and more complex than any of them") and as our application gets bigger and bigger I'm starting to see more and more complexity and problems crop up. I feel like we're walking up the same old curve to all of the standard problems you run into when programming a webapp in any language (object model too big to be easily understood, code is getting less and less cohesive, etc). It may have taken a little longer to get there, but I'm pretty sure that we're going to end up in the same place.</p>
<p>Which leads me to another problem. The easiest solution to a lot of these problems, in my experience, has always been to refactor the code. That's what I always ended up doing with Java apps of this size back in the day. Unfortunantly, the state of Ruby refactoring tools, and I'm putting this as nicely as I possibly can, sucks. Even something as simple renaming a class tends to be far more painful than it needs to be.</p>
<p>So the big question now is, have we (and perhaps we're the first team to do this, as I haven't heard much about it from others) finally hit the point where the cost of maintaining our code in Ruby is higher than the savings by writing it in Ruby in the first place? I'm not willing to answer yes to that question yet, but I am starting to see more and more places that have me pining for for the good old days of IntelliJ, with all of the great things it does to make your life easier. It's easy to forget about the amount of tiresome, tedious bullshit that great tools can help us avoid, at least until you start running into that same old bullshit.</p>
Seaside Does Not Have a Marketing Problem!2007-05-30T00:00:00+00:00http://kurt.karmalab.org/2007/05/30/seaside-does-not-have-a-marketing-problem<p>Seaside does not have a <a href="http://gilesbowkett.blogspot.com/2007/05/seasides-marketing-problem.html">marketing problem</a>!</p>
<p>Everyone I know in this business knows about Seaside and its super productive powers. We've all seen the demos and the screencasts and the awesomeness that is <a href="http://dabbledb.com/">DabbleDB</a>. For god's sake, Avi gave a keynote at RailsConf this year.</p>
<p>I think it's safe to say that people know about Seaside.</p>
<p>The problem at this point isn't a marketing one. It's the same problem that Squeak has always had. Namely that when you download Squeak and start it up, you're presented with this:</p>
<p><img src="http://farm1.static.flickr.com/209/521530212_098424aa47.jpg" alt="Squeak" title="Squeak Screenshot" /></p>
<p>When most programmers I know see this, they have the same reaction, "What the fuck?"</p>
<p>This is usually followed quickly by the question of, "Can I edit this using Vi or Emacs?"</p>
<p>Let me answer this now. No and No.</p>
<p>If you're the type of person that can't imagine giving up writing code at the command line, then Squeak isn't for you. (Although there are <a href="http://www.swerlingphoto.com/squeak/svi2/svi2.html" title="SVI">Vi and Emacs keybindings</a>.)</p>
<p>And that's usually the end of it. People play with Squeak for a few minutes and then go back to doing their real work in Ruby or Python or Java or C#. A lot of the power and magic of using Seaside is directly derived from the power and magic of using Smalltalk, which unfortunately (or fortunately, depending on your point of view) means that you're going to have to learn Smalltalk if you want to use it .</p>
<p>And Smalltalk is, at least in the case of Squeak, a whole different world. You have to unlearn a lot of what you know in order to use it. Editing is different, class creation is different, version control is different. Basically everything you know as a programmer gets thrown out the window.</p>
<p>But you know what? At some point, once you do that and really start to immerse yourself in Smalltalk, you'll suddenly realize that it's hard to go back to the old way of doing things.</p>
<p>You'll realize how much easier it is to just ask the system what method you should use to get something done instead of going to a PDF document somewhere to look it up. (Yes, in Squeak you can just type "'class'. 3. 'cla'" into the the method finder and tells you that "contractTo" and "truncateTo" are the two messages in the system that give you that result.)</p>
<p>You'll suddenly come to the realization that this is simply better. </p>
<p>That this is how things are supposed to work.</p>
<p>Unfortunately for most of us at this point, we'll have to go back to our real jobs, (I asked Avi after his keynote how many people in the world are actually making money using Seaside and he said that he figures about 20) but even if you get this far you'll learn enough to to have a whole new outlook on how coding should work. </p>
<p>It's not a marketing problem, it's the the same old problem that people are scared of things that are different then what they're used to. Hopefully someday we will be able to overcome this fear, and then Seaside and Smalltalk will finally take over the world. But for now this new outlook on development will have to be good enough.</p>
RSpec 1.0 Release and Feature Summary2007-05-23T00:00:00+00:00http://kurt.karmalab.org/2007/05/23/rspec-1-0-release-and-feature-summary<p><a href="http://rspec.rubyforge.org/">RSpec 1.0</a> was quietly released last weekend, after a flurry of activity from <a href="http://blog.aslakhellesoy.com/">Aslak</a> and <a href="http://blog.davidchelimsky.net/">David</a>, who were hiding at a little table last Saturday during Railsconf finishing it up. Since it didn't get the blogosphere loving that I thought it should have, here are some of the important changes: </p>
<ul>
<li>The API is now considered stable, which is huge news for those of us that have been suffering through upgrades for a while now.</li>
<li><p>You can now include examples that are not implemented by not providing a block to the example. These examples then show up in yellow in your spec report. For instance:</p>
<blockquote>
<p><code>it 'should tell us it is sharp'</code></p>
</blockquote>
<p>will produce:</p>
<blockquote>
<p><img src="http://farm1.static.flickr.com/213/511783724_ec134c62ea_o.gif" alt="Spec image" title="Spec image" /></p>
</blockquote>
<p>when run. Much handier than a TODO comment, right? It allows you to do a lot of thinking about how your object should act beforehand, and then implement it piece by piece.</p></li>
<li><p>A <code>spec:rcov</code> task was added to the Rails rake tasks that will automatically produce a code coverage report from your specs.</p></li>
<li><p>Numerous other bug fixes and small changes. See the changelog <a href="http://rspec.rubyforge.org/changes.html">here</a>.</p></li>
</ul>
<p>If you haven't checked out RSpec yet, you don't have any more excuses not to. You can <a href="http://rspec.rubyforge.org/documentation/rails/install.html">install it into your Rails app right now</a> and start writing specs without changing anything else. You can even throw it away and go back to the normal Rails testing framework anytime that you want to, although I doubt that you will.</p>
RailsConf Quote of the Day2007-05-18T00:00:00+00:00http://kurt.karmalab.org/2007/05/18/railsconf-quote-of-the-day<p>Said during an informal discussion with Avi Bryant after his keynote:</p>
<blockquote>
<p>When I look at DHH's code, it makes me want to scream.</p>
</blockquote>
<p>The guilty party (not Avi or myself, obviously) shall remain nameless.</p>
We All Suck at Programming2007-05-14T00:00:00+00:00http://kurt.karmalab.org/2007/05/14/we-all-suck-at-programming<p>If Ruby is a step up from Java in productivity and power, and <a href="http://smallthought.com/avi/?p=4">Smalltalk is a step up from Ruby</a>, then we should all feel a little ashamed when we read the following from <a href="http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html">The Early History of Smalltalk</a> by Alan Kay:</p>
<blockquote>
<p>In January 1976, I took the whole group to Pajaro Dunes for a three day offsite to bring up the issues and try to reset the compass. It was called "Let's Burn Our Disk Packs." There were no shouting matches, the group liked (I would go so far to say: loved) each other too much for that. But we were troubled. I used the old aphorism that "no biological organism can live in its own waste products" to please for a really fresh start: a hw-sw system very different from the ALTO and Smalltalk, One thing we all did agree on was that the current Smalltalk's power did not match our various levels of aspiration. I thought we needed something different, as I did not see how OOP by itself was going to solve our end-user problems. Others, particularly some of the grad students, really wanted a better Smalltalk that was faster and could be used for bigger problems. I think Dan felt that a better Smalltalk could be the vehicle for the different system I wanted, but could not describe clearly.</p>
</blockquote>
<p>I know that they went on to implement Smalltalk-76 as the follow-up to this, and that what we use today is a closer ancestor to that then the Smalltalk-72 that he is discussing here, but it was really just anther evolution. How is it that we haven't had a revolutionary advance in programming languages in the 30 years since then?</p>
<p>I don't have a solution, but I think that all too often we forget that there's even a problem to be solved.</p>
Going to RailsConf2007-05-14T00:00:00+00:00http://kurt.karmalab.org/2007/05/14/going-to-railsconf<p>I'll be heading to RailsConf later this week. <a href="http://myconfplan.com/users/kschrader/conferences/RailsConf2007">Here</a>, via MyConfPlan, are the sessions that I'll supposedly be attending, although it's more likely that you'll find me chatting in the hall or over near the <a href="http://blog.aslakhellesoy.com/">Aslak</a>.</p>
<p>Looking forward to seeing everyone there.</p>
Finally, A Good Ruby and Smalltalk Comparison2007-05-11T00:00:00+00:00http://kurt.karmalab.org/2007/05/11/finally-a-good-ruby-and-smalltalk-comparison<p>Someone is finally writing a nice language level comparison of Ruby and Smalltalk, without any of the bias that we normally see in one of these things. I'm still convinced that you can't really see the power of programming in Smalltalk until you really <a href="http://www.squeak.org/">try it</a> (kind of like how Java programmers can't really see the power of Ruby until they try it) but hopefully this will encourage a few more people to give it a go.</p>
<p>Check out the article <a href="http://www.sapphiresteel.com/Ruby-The-Smalltalk-Way-1">here</a>.</p>
Collaborative Drug Discovery: Making Social Networking Useful2007-05-10T00:00:00+00:00http://kurt.karmalab.org/2007/05/10/collaborative-drug-discovery-making-social-networking-useful<p>There are a ton of social networks out there nowadays, but how many of them are really useful?</p>
<p>I mean really useful. Useful in the sense of helping us to get our job done or making our lives easier.</p>
<p>Clearly, the vast majority of the social networks that we use on a day-to-day basis are little more than time sinks. Myspace and Facebooks are prime examples of this. </p>
<p>Twitter? Even worse.</p>
<p>The question remains then, how can we use the power of social networking to make our lives easier? How can we harness it to help us better do our jobs and manage our free time?</p>
<p>The company that I am currently involved in, <a href="http://www.collaborativedrug.com/">Collaborative Drug Discovery</a>, is trying to answer those questions, at least for the domain of drug discovery.</p>
<p>We take data from academic chemistry labs all over the world, some of it sitting in dusty old lab notebooks, forgotten for years; and feed it into our system. This data can then be shared with all of the other researchers in the system.</p>
<p>Suddenly all of these researchers have access to exponentially more data then they had before, as well as the means to search and explore it. </p>
<p>Take just a minute and imagine the possibilities of that.</p>
<p>As an example, say a researcher in Poland finds a chemical that slows the growth of a certain type of cancer. They put it into the CDD system and then find 10 other similar chemicals that have already been studied by researchers from all over the world. If one of those chemicals has already been tested in humans and proven safe for other uses, the researcher might be able to head directly to human testing for effectiveness against the cancer that she found it worked against. This is a stage in the drug discovery process that usually takes many years and hundreds of millions of dollars to get to. We've just routed around it, all thanks to the power of social networking and data sharing.</p>
<p>Millions of dollars and years of people's lives were saves</p>
<p>And just possibly, and most importantly, hundreds of lives might have been saved in the process.</p>
<p>That's our vision, and I'm excited to be a part of it.</p>
Ruby on Rails: Out of the Box Improvements2007-05-08T00:00:00+00:00http://kurt.karmalab.org/2007/05/08/ruby-on-rails-out-of-the-box-improvements<p>I've written several Rails apps that are in production use, and I love working in Ruby on Rails as my daily development platform, but let's face it, it has a bunch of problems. Just because the Rails team did a lot of things right doesn't mean that there aren't a bunch of things that can be improved right out of the box. Here are the first couple of things that I would do if I was starting a new Rails Project tomorrow:</p>
<ol>
<li><p>Install <a href="http://haml.hamptoncatlin.com/">HAML</a>. I can't stress enough how much better your life will be if you use HAML instead of rhtml. Imagine DRY templates, less view code, and perfectly formatted XHTML every time. Imagine the sky opening up and angels coming down and lifting you up to templating heaven (it's next to dog heaven). That's what HAML gives you. We've solved the problem of looking at ugly HTML with embedded code a <a href="http://velocity.apache.org/">hundred</a> <a href="http://www.seaside.st/Documentation/GeneratingHTML/">times</a> now, so why do we keep going back to it? Don't subject yourself to that sort of pain again! Install HAML and don't look back.</p></li>
<li><p>Dump the integrated testing framework and install <a href="http://rspec.rubyforge.org/">RSpec</a>. It's great that Rails has a testing framework integrated with it, but it has a number of problems. It confuses well known testing terms such as functional tests, there's no way to test views separately from controllers, etc. RSpec blows it away. Not only does it give you all of the advantages of doing <a href="http://behaviour-driven.org/">Behavior Driven Development</a>, it fixes the a bunch of the inherent problems with the Rails testing framework. No longer are controller tests called functional tests and model tests called unit tests. Now you just have model and controller specs. It also allows you to group your use of fixtures into different contexts for for different sets of tests, although you shouldn't really have to use fixtures much anymore because of RSpec's great built in mocking support. Overall it's a big step up from the built-in testing framework.</p></li>
</ol>
<p>Just doing those two things will make your development faster by making your code easier to understand and by cleaning up a lot of the rough edges of the Rails framework. At this point I can't imagine going back to the standard Rails way of doing things.</p>
geekSessions2007-05-07T00:00:00+00:00http://kurt.karmalab.org/2007/05/07/geeksessions<p>When I was starting <a href="http://www.tentonlabs.com">my first company</a> and moving out to San Francisco a year and a half ago, I remember attending one of the first meetings of <a href="http://www.sfwin.org/">SFWIN</a>. I took place in the backroom of a sushi place and had about 20 or 30 people at it. Everyone there was an entrepreneur first and foremost, but I remember the meeting having a distinctly geeky feel about it. </p>
<p>Fast forward to the present day, and the geeks are pretty much gone. I've been to a ton of networking events since that first one, and I've watched them fill up with more and more suits (and a bunch of geeks, me included, turn more and more into suits). This is good, as it means that there's lots of money floating around the Valley right now, and it has helped me learn a ton about business since those early days, but there isn't really anyplace anymore that has that geeky edge to it.</p>
<p>It looks like someone is finally taking steps to change all of that. I got an e-mail today from Christian Perry of <a href="http://www.sfbeta.com/">SF Beta</a> announcing <a href="http://www.geeksessions.com/">geekSessions</a>, a new networking event in the SF area that tries to inject a bit of the geek back into things. It's not quite in the back room of a sushi place anymore, but hey, we're all used to spending our time at throwing down drinks at 111 Minna now, so I guess the <a href="http://cityclubsf.com/">upgrade</a> was inevitable. </p>
<p>Sounds like a great idea to me.</p>
Behavior Driven Development: Inside-Out vs Outside-In Pattern2007-05-04T00:00:00+00:00http://kurt.karmalab.org/2007/05/04/behavior-driven-development-inside-out-vs-outside-in-patterns<p>Recently at work we've been having a bit of an argument over the proper way to structure a spec while doing Behavior Driven Development.</p>
<p>I'm going to illustrate a couple of patterns that have emerged using the simple example of a sword that should tell you if it is sharp or not, depending on whether it is new or used.</p>
<p>One camp at my <a href="http://www.collaborativedrug.com">current job</a>, likes to use what I'm calling the Inside-Out Pattern for writing specs. This group likes to start with the method name and then define behavior for it. An example of this is shown here (in <a href="http://rspec.rubyforge.org/">RSpec</a> syntax):</p>
<div class="CodeRay"><pre><span class="CodeRay">describe <span class="s"><span class="dl">"</span><span class="k">sharp?</span><span class="dl">"</span></span> <span class="r">do</span>
it <span class="s"><span class="dl">"</span><span class="k">should tell you if it is sharp or not</span><span class="dl">"</span></span> <span class="r">do</span>
<span class="co">Sword</span>.new(<span class="sy">:status</span> => <span class="s"><span class="dl">'</span><span class="k">new</span><span class="dl">'</span></span>).sharp?.should == <span class="pc">true</span>
<span class="co">Sword</span>.new(<span class="sy">:status</span> => <span class="s"><span class="dl">'</span><span class="k">used</span><span class="dl">'</span></span>).sharp?.should == <span class="pc">false</span>
<span class="r">end</span>
<span class="r">end</span> </span></pre></div>
<p>Their argument for this pattern is that all of the code for that method stays in one place, so it's easy to see if you've covered everything in that method.</p>
<p>The argument against this is that your specs are harder to understand and you can't really do real TDD with this method of development.</p>
<p>The other camp likes to use what I'm calling the Outside-In Pattern. This pattern describes the possible states of the object first, and then describes what the object should do in each state:</p>
<div class="CodeRay"><pre><span class="CodeRay">describe <span class="s"><span class="dl">"</span><span class="k">A new sword</span><span class="dl">"</span></span> <span class="r">do</span>
before(<span class="sy">:each</span>) <span class="r">do</span>
<span class="iv">@sword</span> = <span class="co">Sword</span>.new(<span class="sy">:status</span> => <span class="s"><span class="dl">'</span><span class="k">new</span><span class="dl">'</span></span>)
<span class="r">end</span>
it <span class="s"><span class="dl">"</span><span class="k">should tell us that it is sharp</span><span class="dl">"</span></span> <span class="r">do</span>
<span class="iv">@sword</span>.sharp?.should == <span class="pc">true</span>
<span class="r">end</span>
<span class="r">end</span>
describe <span class="s"><span class="dl">"</span><span class="k">A used sword</span><span class="dl">"</span></span> <span class="r">do</span>
before(<span class="sy">:each</span>) <span class="r">do</span>
<span class="iv">@sword</span> = <span class="co">Sword</span>.new(<span class="sy">:status</span> => <span class="s"><span class="dl">'</span><span class="k">used</span><span class="dl">'</span></span>)
<span class="r">end</span>
it <span class="s"><span class="dl">"</span><span class="k">should tell us that it is not sharp</span><span class="dl">"</span></span> <span class="r">do</span>
<span class="iv">@sword</span>.sharp?.should == <span class="pc">false</span>
<span class="r">end</span>
<span class="r">end</span></span></pre></div>
<p>The argument for this pattern is that it is more descriptive of what the object should do and it helps with TDD.</p>
<p>The argument this is that you get too many descriptions in your spec, and they can get hard to read. Also, the behavior for a single method in a class is spread around the multiple descriptions, so it becomes harder to make sure that all of the behavior of your method is covered.</p>
<p>Most of the specs that we've written so far seem to skew towards one or the other of these options, but there's no consensus on which of them is better yet, so I figured I'd throw it out there and see if anyone has experience one way or the other and which one has worked better.</p>
<p>Please let me know in the comments.</p>
<p>(And yes, before anyone asks, I'm firmly in one of the camps, and yes, I purposely didn't reveal which one here. I'll be talking more about it in a later post.)</p>
<p><strong>Update:</strong> My coworker Dustin <a href="http://www.codebehind.org/2007/5/4/introducing-change">points out</a> another way of doing specs that rests firmly in the middle of these two views.</p>
Is Christian Ubuntu intelligently designed?2007-05-02T00:00:00+00:00http://kurt.karmalab.org/2007/05/02/is-christian-ubuntu-intelligently-designed<p>My friend Pat just pointed out <a href="http://www.whatwouldjesusdownload.com/christianubuntu/2006/07/about-ubuntu-christian-edition.html">Ubuntu Christian Edition </a> and I just had to wonder if is it intelligently designed. It looks to me like Linux evolved over many versions into what it is today. </p>
<p>I can only imagine that some people out there are feeling conflicted over that.</p>
On Type Safety2007-04-27T00:00:00+00:00http://kurt.karmalab.org/2007/04/27/on-type-safety<p>This afternoon I've been reading "<a href="http://www.informit.com/bookstore/product.asp?isbn=9780321474070&rl=1">Rubyisms in Rails</a>" by Jacob Harris. It's a little PDF download from Addison Wesley about how various aspects of the Ruby language enabled Rails to come into being, and I've been enjoying it quite a bit. I had to stop and laugh when I saw the following quote though:</p>
<blockquote>
<p>Because it is not compiled and has no static types, Ruby might seem to be more dangerous to develop in; but in some sense, it can actually be safer to program in: Because developers have no illusions that type checking is a serious defense against bugs, they will not confuse compilation with correctness.</p>
</blockquote>
<p>I'm going to go out on a limb here and say that for the 90% of developers that do a bad job of testing all around, this is not going to be the case.</p>
<p>Also, he makes the statement:</p>
<blockquote>
<p>Simple to use and well suited for their purpose, symbols are one of the unique features of Ruby.</p>
</blockquote>
<p>I'll just assume that he meant to say, "Simple to use and well suited for their purpose, symbols are one of the great features of Ruby that was taken directly from Smalltalk" and his editor just took it out after he turned in his manuscript.</p>
<p>Overall though, it's a good quick read that does a great job of showing how Ruby makes a lot of the magic in Rails possible. Well worth the bargain price of $9.99.</p>
Moving to rSpec2007-03-14T00:00:00+00:00http://kurt.karmalab.org/2007/03/14/moving-to-rspec<p>Down on the Collaborative Drug Discovery ranch we're taking some initial steps towards moving from TestUnit to rSpec.</p>
<p>Blah</p>
Thoughts on Cruisecontrol.rb 1.02007-03-13T00:00:00+00:00http://kurt.karmalab.org/2007/03/13/thoughts-on-cruisecontrol-rb-1-0<p>I just downloaded and installed the <a href="http://cruisecontrolrb.thoughtworks.com/">Cruisecontrol.rb </a> 1.0 release that was just put out by some of my old co-workers at Thoughtworks earlier today. It literally took about 2 minutes to get builds up and running with our project.</p>
<p>As far as I can tell, it seems to be exactly what you would want out of a CI tool, it's easy to install and it gets out of your way until a build fails. Good stuff.</p>
Testing out Twitter2007-03-12T00:00:00+00:00http://kurt.karmalab.org/2007/03/12/testing-out-twitter<p>I think that I actually had one of the first batch of <a href="http://twitter.com/">Twitt(e)r</a> accounts months and months ago, but I've never really used it. It looks like <a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> might change that, at least for a few days, or until I get bored with it again.</p>
<p>Check me out at <a href="http://twitter.com/kurt">http://twitter.com/kurt</a>.</p>
United's Terrible Customer Service2007-03-08T00:00:00+00:00http://kurt.karmalab.org/2007/03/08/uniteds-terrible-customer-service<p>I'm not sure what to make of my experience with United today. I've given them <a href="http://kurt.karmalab.org/articles/2006/02/04/united-airlines-ps-service-is-outstanding">a good review</a> on this blog before, but today made me remember why I hate dealing with them.</p>
<p>The story starts last night when I sleepily booked two tickets to Chicago from San Francisco for later this month. This morning when I woke up I realized that I used my girlfriend's nickname on the ticket instead of her proper legal name. No problem, I thought, I'll just call up and have them change the first name on the ticket.</p>
<p>That's when the fun began. After I spent fifteen minutes navigating the robot phone system to get to a (hard to understand, off-shored) person, I was told that I couldn't change the name on a ticket without a $100 change fee. </p>
<p>A $100 change fee. </p>
<p>To change a first name.</p>
<p>I wasn't aware that this is what the change fee was for. I can understand charging me if I want to change to a different flight, but why would they try to charge me $100 to change the first name of the person on the flight. The only explanation I could come up with is that they were intentionally trying to irritate me.</p>
<p>So i did the only sensible thing. I hung up and called back under the assumption that the first person was crazy. (But not before checking on <a href="http://gethuman.com/">gethuman.com</a> before calling back to figure out how to avoid the robot phone system.)</p>
<p>This rep informed of the same thing that the last rep did, but luckily, I had another out. The customer service rep on the phone informed me that since I had purchased the ticket within the last 24 hours, the ticket could be canceled with a full refund and rebooked. That made sense, so I told her to go ahead and do that.</p>
<p>Unfortunately, due to the magical airline ticket pricing system that we all know and love, the price of the exact same flight had increased by $96 since 12 hours before. And there was a $15 fee for booking over the phone.</p>
<p>Wonderful.</p>
<p>So I had two choices, change the name and pay a $100 change fee, or cancel the ticket and pay the $96 + $15 difference. </p>
<p>Obviously, neither of these options appealed to me to change a first name.</p>
<p>So the first tact I took was to try to get them to waive the change fee. This has worked for me before on a number of airlines (Continental, Frontier, etc) and I figured it wouldn't be a big deal, since this wasn't really a big change to the ticket.</p>
<p>After being put on hold for 5 minutes, I was informed that that couldn't be done.</p>
<p>I would love to personally thank the supervisor who made that decision.</p>
<p>Eventually what I ended up doing was to have the original ticket refunded and book in a different time that was only $15 more expensive then the original flight that I booked.</p>
<p>So far this cost me $15 and an hour of my time.</p>
<p>To change a first name.</p>
<p>And I ended up with a less convenient flight.</p>
<p>Absurd.</p>
<p>The final slap in the face came just now, when I checked back on United's site. It seems that the pricing fairies have set the price of the flight that I wanted back down to the price of the flight that I booked today.</p>
<p>Thanks, United. I'm done flying your friendly skies.</p>
IntelliJ and Ruby2007-02-06T00:00:00+00:00http://kurt.karmalab.org/2007/02/06/intellij-and-ruby<p>The <a href="http://www.jetbrains.com/idea/features/ruby_development.html">Ruby plugin for IntelliJ IDEA</a> has finally been released. IntelliJ is bar none the best Java IDE. Downloaded and installed.</p>
Textmate Find in Project + Rails2007-01-10T00:00:00+00:00http://kurt.karmalab.org/2007/01/10/textmate-find-in-project-rails<p>I love Textmate and I use it every day, but this is just a reminder, to myself and everyone else, that if you're working on a Rails project and your "Find in Project" is taking forever, don't forget to delete your log files. Searching those kills my machine every time.</p>
Apple and My Mom2007-01-09T00:00:00+00:00http://kurt.karmalab.org/2007/01/09/apple-and-my-mom<p>Today's iPhone announcement and subsequent heaping of praises upon Jobs and Co. reminded me once again why I use an Apple every day. Things just work. It's also another reminder that we should try to create things that are simple enough that they just work </p>
<p>Which brings me to a story about helping my mom set up the Mac Mini I got them when I was home over the holidays. I set up Apple Mail, their new scanner/printer/fax, and my mom's new iPod. At every turn, things were easier than she expected them to be. That's really Apple's secret. Users (real users, not tech geeks) don't want choices, they just want things to work, and Apple currently does that better than anyone else.</p>
<p>Questions like "How do I get this CD onto the iPod" that were answered with "Put in the CD and then connect the iPod" were like a breath of fresh air. Users coming from a Windows world expect things to be harder than they need to be. I configured Apple Mail to use her Gmail account and she's already sent me a scan of a postcard that she got from an old friend of mine. I can't imagine explaining to her how to do that on a windows machine. There are too many options, too many ways of doing everything, and too many steps to remember. On the Mac you just push the scan button, click the paper clip on your e-mail, and grab the image out of the Pictures folder. Isn't that what we really what should happen. </p>
<p>The key point, I think, is that even though everyone in the world thinks that they need a general purpose computing device, very few people actually do. Just give most people a few easy to understand, use, and, most importantly, integrated apps and they'll be far happier than if you give them everything in the world and leave it up to them to figure out how everything fits together.</p>
<p>I know that my mom sure is, and isn't that really the ultimate test.</p>
On Hiring2006-12-12T00:00:00+00:00http://kurt.karmalab.org/2006/12/12/on-hiring<p>I've been really feeling the <a href="http://www.tbray.org/ongoing/When/200x/2006/12/07/People" title="Hot Job Market">pain of trying to hire a good developer lately</a>.</p>
<p>We've been posting Craigslist ads, and we feel that we have all of the right keywords in place (Rails, Agile, Cheminformatics, Data Mining, Java, etc), and a bunch of cool challenging problems to work on, but we're not getting back much as far as quality responses go. </p>
<p>Maybe the job market really is that hot right now. Everyone I know seems to have multiple offers on their plate. Still, we're refusing to lower our standards, but we are starting to feel the drag of just not having enough people to get everything done. Anyone out there with any suggestions (or better yet, resumes of good people)? <a href="mailto:kurt@karmalab.org">Email</a> or comment if you've got them.</p>
Sneaking Smalltalk in Through the Ruby Backdoor2006-11-14T00:00:00+00:00http://kurt.karmalab.org/2006/11/14/sneaking-smalltalk-in-through-the-ruby-backdoor<p>It looks like we might be, baby step by baby step, finally bringing Smalltalk back into the Enterprise. </p>
<p>For years, Smalltalk has been standing around outside of Club Enterprise, looking in the door and shuffling his feet, trying to get the attention of someone to let him in. Meanwhile, CTOs and consultants have been standing around the door of the club, laughing at Smalltalk and making sure that he stays on the outside, where they think he belongs.</p>
<p>It's been a rough few years, but suddenly, out of seemingly nowhere, this new kid Ruby has come along and kicked in the door of the club. He's inside and partying now. Everywhere, people are starting new projects using Ruby. He's the popular kid. Everybody loves him.</p>
<p>But there is a problem. A big problem. Ruby is slow. Ruby is by far the slowest guy at the club. He can't keep up with C# and Java and their fancy dancing. It seems like no matter how hard he tries, he's always a step or two behind.</p>
<p>So Ruby looks out the door and notices Smalltalk. "Hey" he thinks, "<a href="http://smallthought.com/avi/?p=16" title="">Maybe I can borrow Smalltalk's shoes.</a> They look really nice, and I bet that they would make me a lot faster." So he goes over and has a little chat with Smalltalk. "Hey buddy, why not let me borrow a pair of your shoes? I'll get you into the club, as long as you just sit in the corner quietly and don't do anything."</p>
<p>Finally! This is the opening that Smalltalk has been looking for! He's been trying to get back into this club for years, and he's finally going back inside!</p>
<p>So he gives Ruby a pair of his shoes and follows him inside and sits down in the corner to watch the action. Unfortunantly there's another problem. Smalltalk's shoes don't fit Ruby. They're way too big and, besides, Ruby's feet are shaped differently from Smalltalk's. (In fact, <a href="http://groups.google.com/group/smalltalk-ruby/browse_thread/thread/050270254246822e/76d0e989d0384b0b" title="">no one can even really tell how they're shaped</a>.) So <a href="http://smallthought.com/avi/?p=19 “”">a group of people in the club go to work</a> fixing up the shoes for Ruby.</p>
<p>This is where we're at today. Smalltalk is just hanging around and no one is really paying attention to him yet. </p>
<p>But they will.</p>
<p>It's too hard to not notice all of the cool stuff that he brings to the table. He's been around forever and he's got a lot of cool tricks up his sleeve. For now though, he'll have to wait, just like he's been doing for years.</p>
<p>Let's all hope that people start noticing him soon.</p>
Management Consulting2006-11-10T00:00:00+00:00http://kurt.karmalab.org/2006/11/10/management-consulting<p>I've often wondered how a brand new college graduate can come in to a company and show them how to manage their people better. I always figured that it was just some sort of a really good scam. Good to see that <a href="http://www.joelonsoftware.com/items/2006/11/10b.html" title="Oh, the emails you'll get...">Joel has figured out how works</a>. Now we just have to figure out why people keep falling for it...</p>
Videoblogging?2006-10-26T00:00:00+00:00http://kurt.karmalab.org/2006/10/26/videoblogging<p>Does anyone out there really watch video blogs? I mean outside of the closed circle that is the tech community? This is a serious question. I saw the <a href="http://www.zefrank.com/theshow/rocketbooming/nerdfight.html" title="rocketbooming">brewing fight over video blogging</a> over at zefrank and it made me wonder who really watches video blogs.</p>
<p>I've watched RocketBoom before and it's not good. I can't imagine showing it to my mom, or brother, or friend, or anyone I like really, unless I wanted to annoy them. So who are these 350,000 people a day watching it? I've been trying to break it down, and here's what I've got so far:</p>
<ul>
<li>20 people: friends of the creators</li>
<li>10,000 people: people that read something about it on a blog, started a video, and then closed the window after 15 seconds</li>
<li>339,980 people: ?</li>
</ul>
<p>That's the best I can do. </p>
<p>Furthermore, it looks like the <a href="http://www.dembot.com/011160.html" title="">creator of RocketBoom says</a> that he gets 15,000 phone distributions of his content each day. That's already more than my numbers come out to, so I decided to go try to watch RocketBoom on my phone, as maybe it's better on there. </p>
<p>Needless to say, it reset my Treo when I tried to start the video. I can't really blame Rocketboom for that though, as everything seems to reset my Treo.</p>
<p>So finally I decided to go watch Rocketboom one more time, just to see if I remembered wrong. Maybe it really is more interesting than I remember and maybe 350,000 people a day would really watch it.</p>
<p>I got through about 15 seconds before I closed the window.</p>
Where Have I Been?2006-10-05T00:00:00+00:00http://kurt.karmalab.org/2006/10/05/where-have-i-been<p>So it's been awhile since I've posted and a lot changes have been down, so here's a quick update.</p>
<ul>
<li>We've decided to back-burner the <a href="http://www.squishr.com" title="Squishr">Squishr</a> project at <a href="http://www.tentonlabs.com" title="Ten Ton Labs">Ten Ton Labs</a> for now. It was an awesome project and I'm really proud of what came out of it, but we've decided to take the technology in a different direction for the time being. Stay tuned...</li>
<li>To pay my bills I've taken a new position that I'm really excited about at <a href="http://www.collaborativedrug.com" title="Collaborative Drug Discovery">Collaborative Drug Discovery</a>, which is yet another start-up. We're still fairly stealthy about things, so I'm not going to say too much about what I'm doing there yet, but rest assured that I'll have a lot more to say in the future.</li>
<li>I've laid out the initial ideas for a new framework that I'm working on for writing web-apps. It takes [steals] a lot of ideas from my work with Rails and Seaside and tries to tie them together. It's still very early stage at this point. The initial implementation is in Ruby, but whether or not it remains that way is up in the air.</li>
</ul>
<p>So that's the quick rundown of things. I'm going to try to get back to posting more regularly now that things aren't quite as hectic with my life.</p>
What a day for a crash...2006-08-31T00:00:00+00:00http://kurt.karmalab.org/2006/08/31/what-a-day-for-a-crash<p>It seems that yesterday was the day that my co-hosting provider was moving all of my <a href="http://www.squishr.com" title="Squishr">Squishr</a> boxes from one location to another, and our app got bonked. Of course, it's also the day a bunch of traffic comes in from a <a href="http://www.techcrunch.com/2006/08/30/viewscore-aggregates-gadget-reviews/" title="">TechCrunch comment</a> and then gets routed to an old landing page for the app that hasn't been up for months.</p>
<p>Oh well, things are back up now. The lesson here is to make sure that your machine comes back up in the correct state after being rebooted. Live and learn, I suppose.</p>
Hey, we do that at Squishr too! (So do a ton of other sites.)2006-08-30T00:00:00+00:00http://kurt.karmalab.org/2006/08/30/hey-we-do-that-too<p>It's <a href="http://www.techcrunch.com/2006/08/30/viewscore-aggregates-gadget-reviews/" title="">yet another review aggregation site</a>. This time for gadgets. </p>
<p>Marshall says:</p>
<blockquote>
<p>The cool technology here though is that the site normalizes numeric ratings across sites that use different scales (a number out of ten or up to five stars are converted to a score out of 100)</p>
</blockquote>
<p>This is the same thing we've been doing at <a href="http://www.squishr.com" title="Squishr">Squishr</a> with music for a while now.</p>
<p>This is actually a bit of deja vu for me, as we originally had our technology working on gadgets, but we moved to music because we found that gadget reviews just didn't end up that useful in the grand scheme of things. People tended to say the same thing over and over again in their gadget reviews (good/bad interface, good/bad battery life, etc), and let's face it, if you're going to buy an mp3 player it's going to be an iPod. </p>
<p>I do agree with Marshall when he says that there's room for a lot of entries into this space. Things should be interesting.</p>
On Terrorism2006-08-15T00:00:00+00:00http://kurt.karmalab.org/2006/08/15/on-terrorism<p>This is a well thought out <a href="http://kfmonkey.blogspot.com/2006/08/wait-arent-you-scared.html" title="">response</a> to the recent terrorist activity. I especially like this throwback moment:</p>
<blockquote>
<p>FDR: Oh, I'm sorry, was wiping out our entire Pacific fleet supposed to intimidate us? We have nothing to fear but fear itself, and right now we're coming to kick your ass with brand new destroyers riveted by waitresses. How's that going to feel?</p>
</blockquote>
<p>It's not doing any of any good to be scared.</p>
Consulting Enjoyment Sliding Scale2006-08-03T00:00:00+00:00http://kurt.karmalab.org/2006/08/03/consulting-enjoyment-sliding-scale<p>Occasionally, we here at the <a href="http://www.tentonlabs.com" title="Ten Ton Labs">Ten Ton Labs</a> take on a consulting gig or two. After some discussion, I've come up with the following easy-to-follow chart for consulting gigs. It lists all of the languages that we write applications in, and gives some idea of what we would charge to produce an app in each language.</p>
<p><img src="http://static.flickr.com/97/206116850_22f14729fb.jpg" /></p>
<p>This chart is rooted in our belief that making someone write C++ code is somewhat similar to straight torture. </p>
<p>The irony, of course, is that it takes quite a bit longer to write something in C++, on top of the higher rates. </p>
<p>As always, contact me at <a href="mailto:kurt@tentonlabs.com" title="">kurt@tentonlabs.com</a> if you want to discuss a potential engagement.</p>
More Ways to Piss Off Your IT Department2006-08-02T00:00:00+00:00http://kurt.karmalab.org/2006/08/02/more-ways-to-piss-off-your-it-department<p>I once worked at a bank where someone got in trouble for checking her e-mail from work. It was a consultant I was working with, and she was checking her legitimate work e-mail through a web interface, but it was still a violation of IT policy to check outside e-mail. She was even checking her mail over SSL, but the IT department noticed her behavior by analyzing traffic patterns, not by actually seeing the contents of any of the traffic she was sending out.</p>
<p>That's just what I thought of when I saw <a href="http://blog.meebo.com/?page_id=140" title="meebo repeater">meebo repeater</a> today (via <a href="http://jeffnolan.com/wp/2006/08/02/meebo-repeater-2/" title="">Venture Chronicles</a>). I imagine that sooner or later someone is going to get fired for using this. If there's one thing that I know about big corporate IT departments, it's that they hate to be fucked with.</p>
Calacanis vs. Rose2006-07-26T00:00:00+00:00http://kurt.karmalab.org/2006/07/26/calacanis-vs-rose<p>I can't believe that Kevin Rose is <a href="http://krose.typepad.com/kevinrose/2006/07/calacanis.html" title="">up in arms</a> about paying the people that make his site valuable. Calacanis isn't a genius, he's just <a href="http://www.calacanis.com/2006/07/25/kevin-rose-cracks-or-how-to-know-when-youve-won-the-debate/" title="">right</a>.</p>
<p>I get the feeling that the era of people making millions off of user generated content is quickly coming to an end.</p>
No iTunes Music Store API?2006-07-10T00:00:00+00:00http://kurt.karmalab.org/2006/07/10/no-itunes-music-store-api<p>Apple apparently doesn't want anyone to know what they have in their Music Store. </p>
<p>I've been trying to add links into <a href="http://www.squishr.com" title="Squishr">Squishr</a> this morning to connect albums in our system to iTunes through their affiliate program. The problem is that you have to use their "Link Maker" to create links into the store. The Link Maker is a simple web form that lets you search for albums or artists and returns a list of links. That probably works out all right for Bloggers or other one-off cases, but I'm not going to do 25000 searches by hand and then feed them into my database. </p>
<p>It would be trivial to add a REST front-end to this service, but one doesn't currently exist, so it looks like I'm going to have to scrape their HTML to get what I want.</p>
<p>What a waste of time. </p>
<p>Come on Apple, I want to send you business, at least make it easy for me to do.</p>
<p>UPDATE: It looks like I'm not the first one to <a href="http://maisonbisson.com/blog/post/10758/" title="iTunes Music Store API?">have this problem</a>.</p>
Best of Ari Gold2006-07-08T00:00:00+00:00http://kurt.karmalab.org/2006/07/08/best-of-ari-gold<p>The best of Ari Gold from Entourage. One of the funniest things I've seen lately.</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/TGTJSorTQvw" /></param><embed src="http://www.youtube.com/v/TGTJSorTQvw" type="application/x-shockwave-flash" width="425" height="350" /></embed></object></p>
Friendster Drops the Patent Bomb2006-07-07T00:00:00+00:00http://kurt.karmalab.org/2006/07/07/friendster-drops-the-patent-bomb<p>Following the lead of any number of failing technology companies, Friendster has <a href="http://www.redherring.com/Article.aspx?a=17498&hed=Friendster+Wins+Patent" title="Friendster Wins Patent">announced</a> that they have a patent on a "system, method, and apparatus for connecting users in an online computer system based on their relationships within social networks.” It should be interesting to see what sort of affect this has on the big players in the space.</p>
<p>At the very least, I've got to assume that they’re a much more attractive acquisition target today then they were a few days ago.</p>
Farecast Launch Thoughts2006-06-27T00:00:00+00:00http://kurt.karmalab.org/2006/06/27/farecast-launch-thoughts<p>It looks like the <a href="http://www.farecast.com" title="FareCast">Farecast</a> airfare prediction site has finally <a href="http://www.techcrunch.com/2006/06/26/farecast-airfare-prediction-engine-opens-public-beta-today/" title="Techcrunch - Farecast airfare prediction engine opens public beta today">opened</a> <a href="http://mashable.com/2006/06/26/farecast-launches-find-cheap-flights/" title="FareCast Launches - Find Cheap Flights">up</a> their beta site to the world. I checked it out and it looks pretty impressive out of the gate.</p>
<p>My first thought when I saw that they currently only have fares from Seattle and Boston was, "great, the two places in the US that I never end up flying to." Once I got over that though, I decided to do a search for a flight from Boston to San Francisco, which I figure is close enough to the SFO to NYC flight I'll be taking later this month. Sure enough, the prices looked similar and the site suggests that I "buy now" which is what I expected it to say. (I was on 98 flights last year and I booked most of my own travel, so I have a fairly good idea of about how much flight on these routes should cost, on average.) There is clearly a lot of data mining going on here, and I was amused by some of the graphs that showed up while I was playing with the site. Take the one below, for instance:</p>
<p><img src="http://static.flickr.com/73/176151372_f9ee96b87a_o.jpg" /></p>
<p>Why in the hell did the fare go up $11 on that one day? I've got to imagine that airline pricing models have gotten to the point where the airlines themselves don't even know what's going on anymore. Perhaps Farecast will be the straw that breaks the camel's back and causes them to reassess their model (although doing so would probably screw over Farecast).</p>
<p>Overall, I really like the idea behind Farecast and how things are set up currently (although, to be fair, I'm kind of a closet data-mining geek, so I almost always like stuff like this). I can't wait until they add additional cities so that I can actually use it.</p>
The Bill Gates F*** Counter2006-06-16T00:00:00+00:00http://kurt.karmalab.org/2006/06/16/the-bill-gates-f-counter<p><a href="http://www.joelonsoftware.com/items/2006/06/16.html" title="My First BillG Review">Today's post</a> on Joel on Software is great, but I love this line:</p>
<blockquote>
<p>In my BillG review meeting, the whole reporting hierarchy was there, along with their cousins, sisters, and aunts, and a person who came along from my team whose whole job during the meeting was to keep an accurate count of how many times Bill said the F word. The lower the f<em>*</em>-count, the better.</p>
</blockquote>
<p>As someone who was once accused of "using the F word like a comma" it's good to know that it won't hurt my career prospects.</p>
Introducing Squishr2006-06-13T00:00:00+00:00http://kurt.karmalab.org/2006/06/13/introducing-squishr<p>My buddy Ryan and I spend a lot of time discussing music. In fact, I tend to spend a lot of time discussing music with everyone I know. Unfortunately, I don't really have as much time as I would like to figure out what to listen to anymore. My friends who had college radio shows have all moved on to real jobs, and no one really has time to explore all of the new stuff coming out. So one day I sat down with my friend Ryan and we asked ourselves, "how can we figure out what music to listen to?"</p>
<p>The obvious answer, of course, was the magic of the internet. Surely, somewhere on the internet there must be something that can help us figure out what to listen to. </p>
<p>Nope. Nothing. At least nothing good enough for us.</p>
<p>So today we've rolled out an open alpha of our music site <a href="http://www.squishr.com" title="Squishr">Squishr</a>, the first thing out of our little company, <a href="http://www.tentonlabs.com" title="">Ten Ton Labs</a>. It picks up music reviews from all over the web and aggregates them together to try to figure out an overall score for the music. Then it lets people add their own reviews if they don't like what the professional reviewers are saying about things. Plus it gives you all sorts of other data about the music and artists, links back to wikipedia about things, and all sorts of other little features that we're throwing in as we go. It's still pretty rough around the edges, but we tend to like it quite a bit so far. Check it out, and let me know what you think.</p>
How Many Blog Search Engines Do We Need?2006-06-05T00:00:00+00:00http://kurt.karmalab.org/2006/06/05/how-many-blog-search-engines-do-we-need<p>I see that several more blog <a href="http://www.techcrunch.com/2006/05/31/askcombloglines-launch-blog-search/" title="Finally! Bloglines Blog Search">search</a> <a href="http://www.techcrunch.com/2006/06/02/the-other-blog-search-engine-that-launched-yesterday/" title="The Other Blog Search Engine That Launched Yesterday">engines</a> have launched over the last few days, so I just did a quick survey of people at the coffee shop and over IM asking, "have you ever used a blog search engine to search for something?"</p>
<p>The answer I got from every single person? "No."</p>
<p>I'm not exactly in a little coffee house in the middle of nowhere either. <a href="http://www.ritualroasters.com/" title="Ritual Coffee Roasters">This place</a> should be filled with people right at the core of who should be using blog search engines.</p>
<p>I think that the real problem is that no one ever says "I really want to search for something, but I only want results about it from blogs." It's just not a compelling vertical.</p>
Squishr Alpha Released!2006-05-26T00:00:00+00:00http://kurt.karmalab.org/2006/05/26/squishr-alpha-released<p>Not much time to blog lately, but here's a short update:</p>
<p>We rolled out the <a href="http://www.squishr.com" title="Squishr">Squishr</a> alpha release to a few selected people a couple of weeks ago and things haven't crashed and burned on us yet.</p>
<p>A couple of things learned so far:</p>
<ul>
<li><p>As soon as you go live you realize that most of your features don't matter unless your big bang features are spot on. With that in mind we've rolled back our ambitions on a lot of cool things and we're working on making the most important things much, much better. Looking back, we probably should have launched the site earlier, and with fewer features in order to start the feedback loop. Apparently I've already forgotten everything I learned while working at Thoughtworks. :-)</p></li>
<li><p>Having real users is great because it really shows you what parts of the site people are using. It also reminds you that not everyone knows how to use the site the way that you do after building it for months, so putting in a bit of handholding on the front page is probably a good idea.</p></li>
<li><p>If you're using Rails and you're not using <a href="http://manuals.rubyonrails.com/read/book/17" title="Capistrano: Automating Application Deployment">Capistrano</a>, then begin immediately. We're able to deploy dozens of times a day right now, into production, with tweaks and small features. It makes life so much easier.</p></li>
</ul>
<p>Overall though, things are going well. We've still got a way to go before we open things up to the public for a real beta, but we're deploying new stuff everyday and things are exciting and still going well right now. If I know you, and you want to check out what we've built so far, then just pop me an e-mail.</p>
Talent?2006-04-28T00:00:00+00:00http://kurt.karmalab.org/2006/04/28/talent<p>Words of wisdom from my friend <a href="http://www.feldt.com/site/entertain/ideas.action?ideaDate=2006-04-19" title="">Matthew</a>:</p>
<blockquote>
<p>one of the saddest aspects of my profession is how many people equate the absence of personality and common courtesy with some intangible talent. my experience shows it to be intangible because it too is absent.</p>
</blockquote>
<p>No doubt.</p>
The Little Guy Wins!2006-04-27T00:00:00+00:00http://kurt.karmalab.org/2006/04/27/the-little-guy-wins<p>Last hand of poker of the night:</p>
<p><img src="http://static.flickr.com/52/135800775_72633f9da2_d.jpg" /></p>
<p>I'm all in on the flop with two pairs, 2s and 7s against a 6 and 7s. Turn comes 6. River comes 2.</p>
<p>Apparently the little guy does occasionally win after all...</p>
Rails and Domain Specific Languages2006-04-26T00:00:00+00:00http://kurt.karmalab.org/2006/04/26/rails-and-domain-specific-languages<p>From my coworker Ryan, while I was complaining about figuring out yet another DSL in Rails (YADSLIR?):</p>
<blockquote>
<p>When you're working with Rails, you don't just get to experience the pleasure of using Ruby, you also get to experience the pleasure of learning 40 fucking different DSLs on top of it</p>
</blockquote>
Working All Night and Day2006-04-24T00:00:00+00:00http://kurt.karmalab.org/2006/04/24/working-all-night-and-day<p>Been working hard trying to get an alpha release of <a href="http://www.squishr.com" title="Squishr">Squishr</a> out the door this week. Back to blogging soon, assuming all goes well.</p>
The End of Iterations2006-04-11T00:00:00+00:00http://kurt.karmalab.org/2006/04/11/the-end-of-iterations<p>For the last few years I've been working in two-week long iterations while working on software. We would pick up a set of features, get as many of them done as possible done over that two-week period, reprioritize the remaining features, pick up a new set of features for the next two weeks, and occasionally do a release to production of our software.</p>
<p><strong>Well no more.</strong></p>
<p>Now I'm doing 100% feature-based development. We've made our deploy process so simple and automated, that as soon as we finish a feature it just shows up in production. If we run into a problem, we just roll the feature back (although our automated test suite prevents that most of the time).</p>
<p>So now, we don't have iterations, we just have features, and as soon as one is finished we can immediately go through the process of choosing the next most important one. We no longer have releases; new features and enhancements just show up while people are working in the system.</p>
<p>The mind-shift necessary for a company to go from thinking of software as a monolithic entity (“We need a new website”) to a small collection of features is fairly large one. Once it happens, however, there’s no turning back.</p>
<p>If there's anything that the short history of the internet shows us, it’s that the company that moves the fastest is going to win. I think that doing feature-based development sets up a company to do just that.</p>
I Don't Care About Your MacBook Pro2006-04-11T00:00:00+00:00http://kurt.karmalab.org/2006/04/11/i-dont-care-about-your-macbook-pro<p>Please, please, stop cluttering my feed reader with reviews of MacBook Pros. I think everyone understands by now that:</p>
<ul>
<li>They're faster than a Powerbook when running universal apps.</li>
<li>They're slower than a Powerbook when running code through Rosetta.</li>
<li>Other than that it's just like a PowerPC based Mac.</li>
<li>It's <strong>really super great</strong> to program Ruby on.</li>
</ul>
<p>Wonderful. Enough.</p>
<p>Unless someone gets a MacBook Pro that can fly or shoot lasers out of it's iSight, I think that we've all had enough of the same review over and over again.</p>
Last Day Consulting2006-03-31T00:00:00+00:00http://kurt.karmalab.org/2006/03/31/last-day-consulting<p>Today is my last day at Thoughtworks. </p>
<p>After two years and an excessive number of plane flights, the time has come to head back into the start-up game and <a href="http://www.tentonlabs.com" title="Ten Ton Labs">try something new</a>. </p>
<p>I'll miss all of the great people I've been lucky enough to work with during my two years consulting (except for <a href="http://www.feldt.com" title="Feldt.com">Feldt</a>, of course). If any of you are in SF and want to take me out to dinner on your expense accounts, be sure to drop me a line.</p>
No Riya Mac Client?2006-03-25T00:00:00+00:00http://kurt.karmalab.org/2006/03/25/no-riya-mac-client<p>How I just wasted 5 minutes:</p>
<ol>
<li><p>Saw that Riya Beta is <a href="http://www.horsepigcow.com/2006/03/door-is-open.html" title="The Door is Open">now open to everyone</a>.</p></li>
<li><p>Went to the Riya site and signed up.</p></li>
<li><p>Was told that I needed Windows XP.</p></li>
<li><p>Realized that it wasn't open to me.</p></li>
<li><p>Closed browser window.</p></li>
</ol>
<p>Seriously, what new web company doesn't launch with Macintosh compatibility in mind. How hard is it to write an uploader? What would it take? Two, maybe three days of a developer's time? </p>
<p>Or better yet, just implement a clone of the Flickr API and be done with it. </p>
<p>Unless the uploader is doing a bunch of preprocessing of the photos on the desktop beforehand, I can't really see any good reason for not offering a Mac client.</p>
AjaxWednesday, Pt. 12006-03-23T00:00:00+00:00http://kurt.karmalab.org/2006/03/23/ajaxwednesday-pt-1<p>So <a href="http://www.ajaxwrite.com/" title="AjaxWrite">AjaxWrite</a> is out today with a ton of <a href="http://gigaom.com/2006/03/22/meet-ajax-write/" title="Meet Ajax Write">coverage</a> <a href="http://www.techcrunch.com/2006/03/23/1119/" title="AjaxWrite, the Newest Ajax Office Entrant">surrounding</a> it. It's another Word clone written in Javascript, which I don't find entirely exciting, especially when compared to some of <a href="http://www.writely.com" title="Writely">the competition</a>.</p>
<p>The demo document when you open AjaxWrite does include the following sentence though:</p>
<blockquote>
<p>Also, sign up on AjaxLaunch to get priority notice of a new AJAX program launching every Wednesday!</p>
</blockquote>
<p>Wow, a new AJAX program every Wednesday!</p>
<p>Well, that's exciting. There are 5 mystery question mark boxes at the top of the AjaxWrite page, so let's guess what they're going to be:</p>
<ul>
<li>AjaxSheet</li>
<li>AjaxPoint</li>
<li>AjaxMessenger</li>
<li>AjaxDB</li>
<li>AjaxDraw</li>
</ul>
<p>Perhaps we should set up a little contest to see who can guess the most correct AjaxWednesday apps. The winner gets an AjaxPrize.</p>
Ruby: Answer The Damn Question!2006-03-13T00:00:00+00:00http://kurt.karmalab.org/2006/03/13/ruby-answer-the-damn-question<p>I came across <a href="http://duckdown.blogspot.com/2006/03/large-enterprises-and-why-they-dont.html" title="Large Enterprises and why they don't care about Ruby">this post</a> today called "Large Enterprises and why they don't care about Ruby". In it, the author says that Large Enterprises don't care about Ruby, which I think is a case that we could argue to an extent, but we don't need to, because there's no "why" in there.</p>
<p>Does:</p>
<blockquote>
<p>Name one system Fortune 200 enterprise that has a mission-critical system written in a dynamic language. Of course, you can't.</p>
</blockquote>
<p>mean that they don't care about Ruby? No, it says nothing about a company caring about Ruby.</p>
<p>And let's see:</p>
<blockquote>
<p>JPMorgan uses Cincom Smalltalk's VisualWorks as the technological "engine" of their KAPITAL system, which is the world's most advanced financial risk management and pricing system. (<a href="http://smalltalk.cincom.com/index.ssp" title="Cincom Smalltalk Homepage">1</a>)</p>
</blockquote>
<p>Fortune 200? Check. Mission-critical? Check. Dynamic Language? Check.</p>
<p>That took all of 30 seconds of Googling. </p>
<p>The rest of the post is similarly lacking in substance. I'm no Ruby zealot, but I was hoping to join the discussion about Ruby’s place in the Enterprise. So answer the damn question, James McGovern, why don’t they care about Ruby?</p>
Google Mars!2006-03-12T00:00:00+00:00http://kurt.karmalab.org/2006/03/12/google-mars<p>Google Earth for the <a href="http://www.google.com/mars/" title="Google Mars">Red Planet</a>.</p>
<p>Perhaps something from someone's 20% time? Regardless, it's pretty cool.</p>
Skobee Launched2006-03-09T00:00:00+00:00http://kurt.karmalab.org/2006/03/09/skobee-launched<p>So <a href="http://www.skobee.com" title="Skobee">Skobee</a> has finally launched and it looks like we've got a little problem here:</p>
<p><a href="http://www.flickr.com/photos/kschrader/110231764/" title="Photo Sharing"><img src="http://static.flickr.com/45/110231764_6cbbbcb0d8.jpg" width="500" height="230" alt="skobee" /></a></p>
<p>I'll just chalk that up to being in beta. </p>
<p>Seriously though, congrats to all of the Skobee guys. It looks like it's going to be a super useful service.</p>
Google buys Writely, Wastes 20% Time, Continues Crusade To Become Bad Microsoft Clone2006-03-09T00:00:00+00:00http://kurt.karmalab.org/2006/03/09/google-buys-writely-wastes-20-time-continues-crusade-to-become-bad-microsoft-clone<p>So Google has <a href="http://googleblog.blogspot.com/2006/03/writely-so.html" title="">purchased Writely</a> and looks to be gearing up to take on Microsoft head on. </p>
<p>I think that this brings up an interesting question, what are all of the Google engineers doing with their vaunted "20% time"? Waiting for for their options to vest? Shouldn't they be building services like this in-house?</p>
<p>On Google's jobs page it says:</p>
<blockquote>
<p>Google engineers all have “20 percent time” in which they’re free to pursue projects they’re passionate about. This freedom has already produced Google News, Google Suggest, AdSense for Content, and Orkut – products which might otherwise have taken an entire start-up to launch.</p>
</blockquote>
<p>I don't think that it would be a stretch to say that if any of those were actual start-ups, they probably would be on their last legs by now. </p>
<p>Inside of my head I have an image of a hundred Google engineers working somewhere, spending one day a week working diligently on something that's going to blow us all away. I hope that's what's happening, although I'm fairly certain that it's not.</p>
<p>Ah well, at least they're rich.</p>
Proverbs2006-03-08T00:00:00+00:00http://kurt.karmalab.org/2006/03/08/proverbs<p>Marc Hedlund posted a great list of <a href="http://radar.oreilly.com/archives/2006/03/entrepreneurial_proverbs.html" title="O'Reilly Radar > Entrepreneurial Proverbs">Entrepreneurial Proverbs</a> on O'Reilly Radar today. Stuff like this really makes me wish that I would have gone to ETech.</p>
<p>My favorite proverb, and the one that I find is the most important in my life, is "Work only with people you like and believe in." It seems like we should all already know this, but I've found that working with people that I like and believe in makes the workday infinitely more enjoyable. A lot of the other things he mentions just naturally fall into place if you do that. I don't think that you'll ever build something great with a bunch of people who are just thrown together, motivated solely by money.</p>
Hit by a Bus?2006-03-02T00:00:00+00:00http://kurt.karmalab.org/2006/03/02/hit-by-a-bus<p>Nope. I've just been busy traveling, working, and generally doing other things. I'll be back to blogging next week, got quite a few half-finished posts that I need to push out.</p>
Rails: Why Use Anything Else?2006-02-16T00:00:00+00:00http://kurt.karmalab.org/2006/02/16/rails-why-use-anything-else<p>From a friend who I've been working on a Rails app with:</p>
<blockquote>
<p>I can't see why, if you were starting a new web app today, you would use anything else.</p>
</blockquote>
<p>Enough said.</p>
<p>Addendum: This comment immediately started a discussion on why we didn't use <a href="http://www.seaside.st/" title="Seaside">Seaside</a>, so it wasn't really enough said, but having written a metric ton of java apps on any number <a href="http://jakarta.apache.org/turbine/" title="Turbine">of</a> <a href="http://www.opensymphony.com/webwork/" title="Webwork">different</a> <a href="http://nanocontainer.codehaus.org/" title="Nanocontainer">frameworks</a>, I'm not going back to that world.</p>
Analytics Discrepancies2006-02-16T00:00:00+00:00http://kurt.karmalab.org/2006/02/16/analytics-discrepancies<p>I've been using Measure Map for a few weeks and Google Analytics for a few months and I'm somewhat confused by the visitor numbers I'm seeing. Looking at the first half of January, Measure Map is reporting that I've gotten about 20% less visitors than Google Analytics. Now one of those numbers has to be wrong, but which one?</p>
<p>Well, I also have a BlogBeat account, and the data there is very similar (within 1%) to the Measure Map results. Thus, it looks like Google Analytics has some sort of problem where it is skewing the number of visitors up by about 20% on my blog. </p>
<p>Now I'm not asking for super precision from these services, but is anyone else experiencing this? I would like some confirmation that others are seeing something similar before I try to figure out what's happening. (and before <a href="http://www.techcrunch.com/2006/02/14/google-buys-measuremap/" title="Google Buys MeasureMap">Google slaps the Measure Map front end on the Analytics back end</a> and all of my stats get inflated by 20%)</p>
Ebay will be Ebay 2.02006-02-09T00:00:00+00:00http://kurt.karmalab.org/2006/02/09/ebay-will-be-ebay-2-0<p>I'm confused about the all of the <a href="http://blogs.businessweek.com/the_thread/techbeat/archives/2006/02/edgeio_edges_ou.html" title="Edgeio Edges Toward Launch--and a Clash with E-Commerce Giants?">hype</a> <a href="http://scobleizer.wordpress.com/2006/02/09/edgeio-opens-new-era-in-blogging/" title="Edgeio opens new era in blogging">around</a> <a href="http://www.edgeio.com/" title="EdgeIO">EdgeIO</a> <a href="http://blogs.zdnet.com/BTL/?p=2565" title="Edgeio stakes out the listing tag">today</a>. Sure it's an awesome idea, but if it catches on then what's stopping eBay or Craigslist from:</p>
<ol>
<li>Buying or building a blog search engine.</li>
<li>Crawling for the "listing" tag and adding the entries to their listings.</li>
<li>Profit.</li>
</ol>
<p>If I was an eBay exec I would already have a team of people building this into the platform, just in case it catches on.</p>
<p>I like the idea of EdgeIO, and I haven't had a demo, so I'm not sure what they offer that eBay doesn't, but I can't help but feel like they're going to be another classic example of a company with a great idea that gets killed by the second-movers in the market.</p>
Flickr Didn't Start This Trendr2006-02-07T00:00:00+00:00http://kurt.karmalab.org/2006/02/07/flickr-didnt-start-this-trendr<p><a href="http://scobleizer.wordpress.com/2006/02/05/scoblr-hatr-thisr-trendr-grabbr-shoots-screens-to-flickr/">Scoble says</a> that Flickr made the trend of “r” names popular, but clearly this isn’t the case! Behold the Rollmastr!<br />
<br />
<a href="http://www.flickr.com/photos/kschrader/96965107/"> <img src="http://static.flickr.com/40/96965107_19a0d0ca95.jpg" /></a>
<br /></p>
United Airlines PS Service is Outstanding!2006-02-04T00:00:00+00:00http://kurt.karmalab.org/2006/02/04/united-airlines-ps-service-is-outstanding<p>I'm writing this on a United Airlines flight from SF to NYC after about three hours of flying time. Usually that would be impossible, because the battery on my Powerbook would have died about 20 minutes ago. Not today though, because United PS transcontinental flights have power outlets in every row, even in coach.</p>
<p>Power outlets. Every row. In coach!</p>
<p>You don't even need an adaptor, they're normal 110v outlets.</p>
<p>You also get dinner, the seats all have extra legroom, and the first class seats are layflat seats similar to those on an international flight. This is really a step up from what I'm used to. (I was on 94 flights last year, almost all of them on Continental.) I would take this over Continental, even Continental first class, any day of the week.</p>
<p>As I'm flying from SF to NYC a couple of times a month, I'll be switching to United. No other airline that I'm aware of offers anything close to this level of service. Kudos to United for trying to compete by offering a truly superior product instead of just lowering prices. I am impressed.</p>
Neverending Bugs!2006-02-01T00:00:00+00:00http://kurt.karmalab.org/2006/02/01/neverending-bugs<p>The last few days have served as a good reminder that, even with all of our cool new <a href="http://www.ruby-lang.org/en/" title="Ruby Home Page">Agile</a> <a href="http://www.rubyonrails.org/" title="Ruby on Rails">programming</a> <a href="http://www.edgewall.com/trac/">toys</a>, if you're trying to do something <a href="http://www.tentonlabs.com/" title="Ten Ton Labs">super cool</a> that no one else has ever done before, sometimes <a href="http://www-cs-faculty.stanford.edu/~knuth/taocp.html" title="The Art of Computer Programming">this shit</a> is still just hard.</p>
Apple and Disney Conflict of Interest?2006-01-31T00:00:00+00:00http://kurt.karmalab.org/2006/01/31/apple-and-disney-conflict-of-interest<p>No conflict of interest:</p>
<blockquote>
<p>Disney has a three-fingered mouse, Apple has a one-button mouse. End of story.</p>
</blockquote>
<p>As stated by CelebratedMrK on <a href="http://www.plastic.com/article.html;sid=06/01/27/08470483;cmt=31" title="">Salon.com</a></p>
Deep Innovation2006-01-29T00:00:00+00:00http://kurt.karmalab.org/2006/01/29/deep-innovation<p><a href="http://www.wgrosso.com/weblog/?p=107" title="Yeah, But Not Really.">In a blog entry yesterday</a>, William Grosso stated:</p>
<blockquote>
<p>When I look at the valley, I see a lot of innovation. But it’s surface innovation instead of deep innovation. To dramatically overstate the case: we’re focusing on building better event calendars and better blog aggregators. And on bringing the same functionality, slightly tailored, to all the nooks and crannies of the long tail.</p>
</blockquote>
<p>I'm not sure that I totally agree with him, but I do agree that the valley needs to get their shit together before Microsoft come through and changes the rules of the game once again. </p>
<p>It's easy to forget about Microsoft while surrounded by a bunch of people banging away on their Powerbooks at a coffee shop in SF, but lest we forget, Microsoft will grab all of the innovations coming out of the valley, package them up, and deliver them to people who have no clue what a tag or a social bookmark is.</p>
<p>Embrace and extend is alive and well, my friends. Just imagine if IE 7 comes with a default setting to post bookmarks to "Live! Bookmarks" or some such service that they come up with. The entire social bookmarking field changes overnight. And Microsoft wins.</p>
<p>I sure hope that Yahoo and friends are taking all of the innovative people that they acquired and figuring out a way to mash their apps together in a way that even my mom can use. Because if they aren't then Microsoft surely will.</p>
Ask, and Ye Shall Receive2006-01-28T00:00:00+00:00http://kurt.karmalab.org/2006/01/28/ask-and-ye-shall-receive<p>Or perhaps "Complain, and Ye Shall Receive." After my post complaining about <a href="http://www.google.com/analytics/" title="Google Analytics">Google Analytics</a> earlier this week, I got a <a href="http://www.measuremap.com/" title="Measure Map">Measure Map</a> invitation in my Inbox. Thank you to Jeffrey Veen for that one. (And thanks to Measure Map for having an install tutorial for <a href="http://typo.leetsoft.com/trac/" title="typo">Typo</a>.)</p>
<p>I've also decided to install <a href="http://blogbeat.net/" title="Blogbeat">Blogbeat</a>, as suggested by Jeff from Blogbeat in the comments. I'm going to give those two services a week or so to gather some statistics, and then I'll write up a more detailed comparison of all three.</p>
<p>It ought to be interesting to see what these services are doing to differentiate from one another. If anyone knows of any other blog analytics services that I should include in this shootout, let me know.</p>
Disney Buys Pixar, Steve Jobs Continues Doing Whatever the Hell He Wants2006-01-24T00:00:00+00:00http://kurt.karmalab.org/2006/01/24/disney-buys-pixar<p><a href="http://corporate.disney.go.com/news/corporate/2006/2006_0124_pixar.html" title="Disney buys Pixar">The rumors were true.</a> I always figured that thing things were over after <a href="http://www.defamer.com/hollywood/business/steve-jobs-plays-the-dozens-with-michael-eisner-032886.php" title="">Jobs said</a>:</p>
<blockquote>
<p>Our films don’t stack up to ‘Atlantis,’ ‘Emperor’s New Groove’ or ‘Treasure Planet.</p>
</blockquote>
<p>but never say never, apparently. Here's to hoping that Disney lets John Lasseter continue making great movies, and doesn't screw up the Pixar magic too much.</p>
The Continuing Google Analytics Debacle2006-01-23T00:00:00+00:00http://kurt.karmalab.org/2006/01/23/the-continuing-google-analytics-debacle<p>Let me start off this post by saying that I love <a href="http://www.google.com/analytics/" title="Google Analytics">Google Analytics</a>. I use it pretty much every day to monitor the traffic to this site and to several others. In concept, it's a great application.</p>
<p>Now if they could only just get the damn thing to work.</p>
<p>I'm not sure what they were expecting three months ago when they launched, but they must have been off by an order of magnitude or so with their estimates about the number of signups. That's the only way that I can explain taking 3 months just to get back to the point of letting people sign up again.</p>
<p>Did they do any load testing at all on this thing? I still find it to be a regular occurrence where the initial summary page just sits there, refusing to show me my data. Even after multiple refreshes I still end up with nothing. The solution? Come back in a few hours.</p>
<p>Now I know that this is a free service and I should be happy with what I got, but just because something is free doesn't mean that you shouldn't finish it and get it tested before you send it out the door. If you own the world's most powerful computer, I feel like you really shouldn't be having simple application load problems.</p>
<p>Oh well, I guess I'll just keep using it when it works and continue waiting patiently for a <a href="http://www.measuremap.com/" title="Measure Map">Measure Map</a> invitation...</p>
hoodwink.d2006-01-22T00:00:00+00:00http://kurt.karmalab.org/2006/01/22/hoodwink-d<p>This site is now officially <a href="http://hoodwinkd.hobix.com/" title="It's the hoodwink.d information booth">hoodwink.d</a>. I've joined the party...</p>
<p><img src="http://kurt.karmalab.org/files/hoodwink1.jpg" alt="hoodwink.d" title="hoodwink.d" /></p>
The Hottest Ticket in the Valley2006-01-19T00:00:00+00:00http://kurt.karmalab.org/2006/01/19/the-hottest-ticket-in-the-valley<p>Apparently the <a href="http://www.techcrunch.com/2006/01/18/naked-conversations-party-at-techcrunch/" title="Naked Conversations Party at TechCrunch">TechCrunch BBQ</a> is the hottest thing going these days in the Valley. It took all of 45 minutes last night for the all of the spots to fill up for the next one, and now numerous people (including myself) are upset that they missed out.</p>
<p>If the appetite is so big for something like this, would it be worth organizing something else on the same night for everyone who didn't get in? It could be like a consolation prize for everyone who missed out. Perhaps we could grab a space somewhere, hack Scoble's e-mail to replace the directions to the TechCrunch house, and hijack the entire party. Anybody want to sponsor that?</p>
<p>If anyone has any good ideas for something, drop them in the comments.</p>
Snakes On A Plane2006-01-18T00:00:00+00:00http://kurt.karmalab.org/2006/01/18/snakes-on-a-plane<p>When starting a new project, letting even one mediocre person join the team is just as stupid as letting a bunch of <a href="http://www.imdb.com/title/tt0417148/" title="Snakes On A Plane">Snakes On A Plane</a>. Just one snake can really cause a bunch of problems. People panic, everything starts to go haywire, the stewardesses are freaking out; it's bad news. </p>
<p>We all know that it's never just one snake though. The snake always brings his friends along, and that's when the shit really hits the fan. When there's multiple snakes they start to come from every direction, the chaos and panic starts to increase exponentially, and it quickly becomes too late to do anything about it, as shown below: </p>
<p><img src="http://kurt.karmalab.org/files/snakes.jpg" alt="Snakes" title="Snakes on a Plane" /></p>
<p>Unfortunately, in the real world, we always seem to end up with at least one snake somewhere on the team. That's life right? What can we do about it? Well, when faced with that situation, I've found that it's best to: </p>
<ol>
<li><p>Identify the snake as quickly as possible. I suggest lengthening out your sssses while talking to them, so that others on the team know that you're talking to the snake in snake language.</p></li>
<li><p>Make sure that none of their other snake buddies start to encroach in on the project. If you have a boneheaded manager who starts to hire a bunch of clearly incompetent people he used to manage at a consulting company, it's probably a good time start panicking. The snakes are on board at that point.</p></li>
<li><p>If things get really bad, try to be Samuel L. Jackson and kick some motherfucking snake ass. </p></li>
<li><p>As a last resort, always have a parachute. When the captain is halfway digested by sort of python and there's a cobra spitting poison at you, it's probably time to eject.</p></li>
</ol>
Google Ball2006-01-18T00:00:00+00:00http://kurt.karmalab.org/2006/01/18/google-ball<p><a href="http://benbarren.blogspot.com/2006/01/mensa-boys-predators-ball.html" title="">This is exactly what I imagine life inside of Google must be like lately.</a></p>
<blockquote>
<p>Well Clicks and Bricks M+A is back. Buy a semi-digital asset with a semi-sorta-not fit, and use scrip + cash to buy your way out of high valuation, one revenue stream and a precarious P/E. </p>
</blockquote>
<p>I've heard stories from people working there of sitting around all day, drinking beer, waiting for their options to vest, and of hordes of newly minted PhDs who are only interested in applying their theses to the unrelated area that they happened to get assigned to. Come to think of it, now might not be a bad time to dump some Google stock.</p>
Geek Networking2006-01-13T00:00:00+00:00http://kurt.karmalab.org/2006/01/13/geek-networking<p>Since I've been spending all of my time in SF lately, instead of NYC, I decided to spend this week out meeting the locals. </p>
<p>On Wednesday I went to the <a href="http://106miles.org/" title="106 Miles">106 Miles</a> event (which, strangely enough, isn't mentioned on their homepage) and listened to <a href="http://www.evhead.com/" title="evhead">Evan</a> talk about his <a href="http://evhead.com/2005/11/ten-rules-for-web-startups.asp" title="Ten Rules for Web Startups">Ten Rules for Web Startups</a>. Cool crowd, plenty of early stage stuff going on there, good stories about Blogger almost dying several times over, good time had by all. The <a href="http://blog.skobee.com/" title="skobee snacks">word on the street</a> is that this is going to become a monthly meeting, which would be awesome.</p>
<p>Last night I went to the <a href="http://wsfinder.jot.com/WikiHome/SF+Web+Innovators" title="SF Web Innovators">SF Web Innovators</a> meeting and met a bunch more cool people. No formal talk, but lots of beer and sushi. Met a <a href="http://www.greylock.com/team/bio.cfm?Id=28" title="Greylock -Team">friend</a> of an old friend that led to a great story that may or may not be the topic of another blog entry. Also tried to pry out some info about what <a href="http://www.radarnetworks.com/" title="Radar Networks">Radar Networks</a> is working on, but despite now knowing even <a href="http://novaspivack.typepad.com/nova_spivacks_weblog/" title="Minding The Planet">more</a> <a href="http://www.rubylabs.com/" title="Welcome to Ruby Labs">people</a> that work there now than I <a href="http://blogs.codehaus.org/people/bob/" title="bob mcwhirter -Main">did</a> <a href="http://fotap.org/~osi/" title="one day">before</a>, I still don't know. Again though, good times all around. (I was surprised that there was no people overlap between the two meetings though. There needs to be a better way to get the word out about these things.)</p>
Finally, the MacBook Pro2006-01-10T00:00:00+00:00http://kurt.karmalab.org/2006/01/10/finally-the-macbook-pro<p><a href="http://www.apple.com/macbookpro/" title="MacBook Pro">MacBook Pro</a>. </p>
<p>Stupid Name, but I'm sure I'll be ordering one. </p>
<p>I'm just waiting for confirmation that it can run Windows as well. </p>
<p>It looks like I might finally be free from carrying my Powerbook and my Dell to work every day.</p>
<p>Steve Jobs and Apple, my back, which is aching from carrying two laptops everyday, thanks you.</p>
<p>Update: Anybody see a number for battery life? Hopefully this thing runs longer than the old Powerbooks, but I haven't seen anything about it yet.</p>
The Fall of MySpace2006-01-09T00:00:00+00:00http://kurt.karmalab.org/2006/01/09/the-fall-of-myspace<p>I just saw the traffic numbers for MySpace on <a href="http://www.readwriteweb.com/archives/latest_sns_numb.php" title="Latest SNS Numbers - MySpace Streaks Ahead">Read/WriteWeb</a> and quite frankly, I find them astounding. (47.3 million members?!?) Who would have thought, a few years ago, that the secret to getting huge web traffic would be:</p>
<ol>
<li>Give teenagers generic profile webpages </li>
<li>Let them mark them up to look like total shit (almost all of the pages I've seen on MySpace look like garbage)</li>
<li>Profit!</li>
</ol>
<p>I have to wonder though, at what point is the popularity of MySpace is going to become its own worst enemy. If there's one thing that teens can't stand, it's when everyone they know is in on the secret. I have to assume that, very soon, the time will come when a "cooler" site will jump in and sweep up a big chunk of that traffic, and MySpace will begin its slow but inevitable decline.</p>
Thoughts about Tailrank2006-01-06T00:00:00+00:00http://kurt.karmalab.org/2006/01/06/thoughts-about-tailrank<p>I've been playing around with <a href="http://www.tailrank.com" title="TailRank">TailRank</a> lately, and it seems pretty cool, if still not quite up to the level of <a href="http://tech.memeorandum.com/" title="tech.memeorandum">Memeorandum</a> yet. </p>
<p>Some issues and comments I have:</p>
<ul>
<li>The stories on the site are listed according to an algorithm based upon inbound links. I'm not entirely clear as to what constitutes an "inbound link". Is it just a link within the network of blogs that TailRank indexes? Can it jump outside of that dataset if someone else breaks some news, the way that memeorandum seems to be able to?</li>
<li>I'm not sure why, but when it shows me who tagged a story, but it only shows one name. Also, if I tag something, it doesn't show me that I've tagged it. I would like some way to see everyone that has tagged something, including myself, so I can see who's interested in the same things as me.</li>
<li>It's a cool idea to combine the tagging functionality with the rankings to show me stuff I'll find more interesting. It's not clear to me, however, how my "social" and "local" network get determined, or even what the differences between those are supposed to be. (I haven't made anyone on the site my "friend" or anything like that, and I don't even think that there's a feature that allows me to do so, but I still have a social and local network.)</li>
<li><p>I can't tell if tags act as inbound links on a story or not. When I use the "TailRank: share" button in my link toolbar the page that comes up says:</p>
<blockquote>
<p>If enough people tag this story or the blogosphere links to it often it will be promoted to the main page.</p>
</blockquote>
<p>So does that mean that tags and inbound links are counted together to determine the rank of a story?</p></li>
<li><p>The site is still slooooow.</p></li>
</ul>
<p>Overall though, it seems to be the best site I've seen so far at striking the right balance between automatically promoting content and taking the opinions of the users of the site in to account. Hopefully <a href="http://www.feedblog.org/" title="Kevin Burton's Feed Blog">they</a> can get the site moving faster soon, as that would make things immediately more useful.</p>
Retrievr Image Search?2006-01-05T00:00:00+00:00http://kurt.karmalab.org/2006/01/05/retrievr-image-search<p>Is anyone else with me on the fact that <a href="http://labs.systemone.at/retrievr/" title="retrievr">retrievr</a> (via <a href="http://www.techcrunch.com/2006/01/03/the-retrievr-flickr-tool/" title="The Retrievr Flickr Tool">TechCrunch</a>) would be much cooler if you could click on one of the images that you've found and do a new search off of that? I'm not sure if the technology would support that at this point, but it sure would be cool if it could.</p>
iTunes Media Store Can't Flop!2006-01-03T00:00:00+00:00http://kurt.karmalab.org/2006/01/03/itunes-media-store-cant-flop<p>I just saw <a href="http://thomashawk.com/2006/01/more-downloadable-tv-from-itunes.html" title="">a post by Thomas Hawk</a> about the new shows posted on the iTunes Music Store that includes the following quotes:</p>
<blockquote>
<p>WHO IN THE WORLD IS GOING TO PAY TO DOWNLOAD ALL THIS STUFF?</p>
<p>THIS THING IS GOING TO FLOP SO HARD.</p>
</blockquote>
<p>and it got me thinking. There's no way this can flop. Think about it, the cost of getting a clip in to iTunes from the source material probably isn't more than a few dollars (if anyone has real cost info and wants to e-mail it to me I'll update this figure). Then all Apple does is upload the clip to their servers and let it sit there (trivial cost). So if we assume that Apple makes $0.10 per show download, it only takes 10-20 downloads for a show to break even, and from there on out it's essentially pure profit. I'm pretty sure that Apple can generate 10-20 downloads on almost anything they put up there, even if most of us (me included) aren't really interested in the stuff they're putting up. It's the same model as selling software, but with a much larger and more diverse audience buying. Sounds like a pretty good business model to me, and definitely not one that'll flop.</p>
Google Web Clip Ads Attack!2005-12-26T00:00:00+00:00http://kurt.karmalab.org/2005/12/26/google-web-clip-ads-attack<p>Google Mail surprised me this morning with an ad at the top of my email instead of a normal web clip:</p>
<p><img title="Web Clip Ad" src="http://kurt.karmalab.org/files/gmailAd.jpg" alt="Web Clip Ad" /></p>
<p>I guess that Google is trying to eke a little more revenue out of Gmail. I wonder what the actual click through rate is though. I don’t think that I have ever clicked on a Gmail ad. It doesn’t seem like it would be part of the normal flow of reading email for most people.</p>
Information Overload Fix2005-12-19T00:00:00+00:00http://kurt.karmalab.org/2005/12/19/information-overload-fix<p>I have 43 blogs in my blogroll, read various news sites daily, write in two journals, write in this blog, and somehow manage to go to work everyday. Despite all of this, I feel like my overall ability to comprehend and process information continues to go down lately. It's either that or my brain just can't keep up with all of the info coming out of the firehose. Luckily, I've found a solution, at least for this week. I'm going on <a href="http://www.sunvalley.com/" title="Sun Valley Resort Online">vacation</a>. See you next week, when hopefully my brain will be functioning once again.</p>
Meebo Funded2005-12-16T00:00:00+00:00http://kurt.karmalab.org/2005/12/16/meebo-funded<p>Looks like <a href="http://blog.meebo.com/?p=78" title="did you hear?">Meebo got funded by Sequoia</a>. I'm not seeing a business model here, but then again, who knows. I can tell you though, that very soon Meebo is going to find themselves on the block lists of all of the major firewalls. When that happens they're going to lose a big chunk of their users who are currently coming in from work/school to chat. (Really, why would I use Meebo if it wasn't to get around a firewall? Dedicated clients are a far more feature rich choice.) Ought to be interesting to see how they handle that. (via <a href="http://www.techcrunch.com/2005/12/16/meebo-confirms-sequoia-funding/" title="Meebo Confirms Sequoia Funding">TechCrunch</a>)</p>
Pulling the Tag Cloud2005-12-14T00:00:00+00:00http://kurt.karmalab.org/2005/12/14/pulling-the-tag-cloud<p>I've pulled the my tag cloud off of the sidebar of the blog, as I'm not finding it to be a very good way <a href="http://datamining.typepad.com/data_mining/2005/12/the_future_of_t.html" title="The Future of Tags: Cloudy">to visualize data</a> about what I'm writing about. As you can see:</p>
<p><img src="http://kurt.karmalab.org/files/tagcloud.JPG" alt="Tag Cloud" title="Tag Cloud" /></p>
<p>the web2.0 tag is so big in this cloud that everything else gets swallowed up. I still think that tags are a good way to classify information, but the whole cloud growth idea seems to be flawed once one topic gets too much traction. Perhaps we could have a cloud where all of the words are the same size, but they have different intensities. Or maybe I just need to write less about web2.0. :)</p>
News Flash: Java Dying2005-12-13T00:00:00+00:00http://kurt.karmalab.org/2005/12/13/news-flash-java-dying<p>Don't use it for your next web project. When the news gets in to <a href="http://www.businessweek.com/technology/content/dec2005/tc20051213_042973.htm" title="Java? It's So Nineties">BusinessWeek</a>, it clearly must be true. Oh, and cue the Ruby zealots...</p>
Trackback Spam Strikes2005-12-12T00:00:00+00:00http://kurt.karmalab.org/2005/12/12/trackback-spam-strikes<p>I just spent a while removing all of the trackback spam that some jack ass left on my blog. Although Typo seems to have a good number of ways to prevent it, it still seems to crop up fairly often. Anybody have a good strategy for fighting it?</p>
<p>Hopefully we'll get some more plugins soon on this front.</p>
Yahoo Says: I <heart/> Tags2005-12-09T00:00:00+00:00http://kurt.karmalab.org/2005/12/09/yahoo-says-i-60-heart-62-tags<p>Yahoo snaps up <a href="http://del.icio.us/" title="del.icio.us">yet another of the good tagging companies</a>. Hopefully we will start to see some defacto standards fall out of this on how we tag things. Coverage <a href="http://www.techcrunch.com/2005/12/09/yahoo-acquires-delicious/" title="Yahoo.icio.us? - Yahoo Acquires Del.icio.us">here</a>, <a href="http://blog.del.icio.us/blog/2005/12/yahoo.html" title="y.ah.oo!">here</a>, <a href="http://www.ysearchblog.com/archives/000223.html" title="Great Tastes That Go Great Together">here</a>, <a href="http://mashable.com/2005/12/09/yahoo-acquires-delicious/" title="Yahoo.icio.us - Yahoo Acquires Del.icio.us!">here</a>, <a href="http://webreakstuff.com/blog/2005/12/yalicious-or-something/" title="Ya!Licious… or something">here</a>, <a href="http://gigaom.com/2005/12/09/yahoo-buys-delicious/" title="Yahoo! buys del.icio.us">here</a>, <a href="http://www.niallkennedy.com/blog/archives/2005/12/yahoo_buys_deli.html" title="Yahoo! buys del.icio.us">here</a>, and <a href="http://www.unionsquareventures.com/2005/12/a_delicious_eig_1.html" title="A Delicious Eight Months">here</a>.</p>
Windows Live Local Ups the Ante2005-12-08T00:00:00+00:00http://kurt.karmalab.org/2005/12/08/windows-live-local-ups-the-ante<p>Microsoft has taken online mapping up another notch with the launch of <a href="http://local.live.com" title="Windows Live Local">Windows Live Local</a> (via <a href="http://www.techcrunch.com/2005/12/07/microsoft-live-local-to-launch-thursday/">TechCrunch</a>). The birdseye view images simply amazing (you can practically see <a href="http://local.live.com/default.aspx?v=2&cp=40.727968~-73.988246&style=o&lvl=2&scene=1477333" title="Windows Live Local">in to the window of my apartment</a>), but my favorite feature is the ability to zoom the map in and out using the scroll wheel on the mouse. This makes moving long distances across the map far easier than it was before. Looks like Microsoft really is looking to be a player in to the Web 2.0 game. Next step, <a href="http://news.com.com/Court+docs+Ballmer+vowed+to+kill+Google/2100-1014_3-5846243.html" title="Court docs: Ballmer vowed to 'kill' Google">kill Google</a>.</p>
The Illustrated Long Tail2005-12-06T00:00:00+00:00http://kurt.karmalab.org/2005/12/06/the-illustrated-long-tail<p>As I push more and more of my personal data out on to the internet, I see more and more examples of the <a href="http://en.wikipedia.org/wiki/Long_tail" title="The Long Tail">long tail</a> in my own activities. Today's illustrated example is my <a href="http://www.last.fm/user/kschrader/charts/&charttype=overall&subtype=artist" title="kschrader's Charts">Last.fm top artists chart</a>. It looks like Johnny Cash could use a little more iTunes loving on my part. (By the way, if you haven't already, see <a href="http://www.imdb.com/title/tt0358273/" title="Walk the Line">Walk the Line</a>. One of the best flicks I've seen this year.)</p>
End of the Year Ideas2005-12-06T00:00:00+00:00http://kurt.karmalab.org/2005/12/06/end-of-the-year-lack-of-ideas<p>You can tell it's getting close to the end of year, as the tech ideas that normally seem to come fast and furious seem to have tapered off a bit, and my day is a little more boring because of it. This week so far we've got <a href="http://cingular.mediaroom.com/index.php?s=pageB&item=3" title="Cingular 3G">"High Speed" Cingular cell phone access</a>, <a href="http://www.apple.com/pr/library/2005/dec/06nbc.html" title="NBC Universal & Apple Offer New Primetime, Cable, Late-Night & Classic TV Shows on the iTunes Music Store">NBC shows on iTunes</a>, and <a href="http://avc.blogs.com/a_vc/2005/12/oh_hell_yeah.html" title="Rhapsody for the Mac">Rhapsody for the Mac</a>. Not exactly groundbreaking stuff. </p>
<p>Ah well, I suppose we've got January to look forward to, although hopefully someone will surprise me before then.</p>
The Problem With Ruby2005-12-05T00:00:00+00:00http://kurt.karmalab.org/2005/12/05/the-problem-with-ruby<p>I've been writing a lot of Ruby code lately, and I think that my friend Ryan best expressed the biggest problem that I've seen with it so far:</p>
<blockquote>
<p>The problem is that I get something done in two lines of code that I normally get done in about 10 in another language, but I always seem to sit there thinking that there must be a way to do it in one</p>
</blockquote>
<p>Not the worst problem in the world to have.</p>
Why I Don't Work for Big Companies2005-12-02T00:00:00+00:00http://kurt.karmalab.org/2005/12/02/why-i-dont-work-for-big-companies<p>Hopefully I never end up working for a company where people are irritated enough with the way management is doing things to inspire something like the <a href="http://minimsft.blogspot.com/" title="Mini Microsoft">Mini Microsoft</a> blog. When your own employees aren't just telling people to not come work for your company, they're broadcasting it loudly on the Internet, then it's probably time for some big systemic changes. </p>
<p>Meanwhile, <a href="http://loneronin.typepad.com/the_lone_ronin/2005/12/life_meditation.html" title="Life Meditation IV">Google is now</a>:</p>
<blockquote>
<p>a "retirement cruise for Artificial Intelligence legends of the 80s and 90s."</p>
</blockquote>
<p>Doesn't sound like a very exciting place either, and from what I hear from friends there who are just kicking back and waiting for their options to vest, it's probably a pretty apt description.</p>
Hotdog!2005-12-02T00:00:00+00:00http://kurt.karmalab.org/2005/12/02/hotdog<p><a href="http://www.thealarmclock.com/mt/" title="alarm:clock">Alarm:Clock</a> has an article on a new tech company that has <a href="http://www.thealarmclock.com/mt/archives/2005/12/israels_electro.html" title="Israel's Electro Biometrics Breakthrough">Yet Another Biometric ID Mechanism (YABIDM)</a>, but the interesting part of the post to me was:</p>
<blockquote>
<p>We once worked in an office where lessons were made of employees who left their computers unlocked while having lunch. Fellow employees would send embarrassing company-wide emails with the offender's signature.</p>
</blockquote>
<p>You mean that there are companies where this doesn't happen? At <a href="http://www.thoughtworks.com/index.html" title="Thoughtworks">Thoughtworks</a> we call this hotdogging (named after the wonderful <a href="http://www.codinghorror.com/blog/archives/000341.html" title="A Tribute to the Windows 3.1 Hot Dog Stand Color Scheme">"Hot Dog Stand" theme</a> in Windows 3.1 that people would often find their machine set to if left alone and unlocked) and all sorts of creative techniques have been devised to mess with someone's head. The sending of company wide e-mails has been banned for a few years now, but here are some other great ideas:</p>
<ul>
<li>Adjust the mouse sensitivity and orientation. Nothing like moving the mouse up a bit and having the cursor fling diagonally downwards.</li>
<li>Change their homepage to something totally inappropriate. Use your imagination here.</li>
<li>Change the MS Word autocorrect so that the word "and" autocorrects to the word "shit" or something along those lines. This is always a good one, because they're not likely to discover it for awhile and it's really confusing when they do.</li>
<li>Take a screenshot of their screen, make it their background, lock the machine, and then drag the unlock box off of the side. When they come back everything looks just like they left it, but nothing can be clicked on.</li>
</ul>
<p>and the ultimate pain:</p>
<ul>
<li>Retheme their machine so that everything (mouse pointer, dialog boxes, text, background, etc) are all the same color. Not only can you not differentiate anything to get anything done, you can't even figure out how to pull up the dialog box to change things back.</li>
</ul>
<p>If you've got anymore let me know in the comments.</p>
Business Games2005-12-01T00:00:00+00:00http://kurt.karmalab.org/2005/12/01/business-games<p>Mark Cuban has posted a <a href="http://www.blogmaverick.com/entry/1234000123070608/" title="Success & Motivation - Redux">bunch of links to blog entries of his about how he succeeded in business</a> and they're all good reads.</p>
<p>The best link by far though is <a href="http://www.blogmaverick.com/entry/1234000187035671/" title="The Sport of Business">The Sport of Business</a>. It hits it spot on about the games that have to be played to win at business. </p>
<blockquote>
<p>The sport of business is the ultimate competition. <strong>It's 7x24x365xforever.</strong></p>
</blockquote>
<p>I'm realizing that I'm reaching the point in my life where the thing that gets me going more than anything else is those games. It's far more fun to be in the mix of things then to be an onlooker. Winning at this competition promises to be more rewarding than anything else I've ever done. Once you make that realization and decide to turn that corner I don't think that there's any going back.</p>
The Train Has Already Left the Station: Google and RSS2005-11-30T00:00:00+00:00http://kurt.karmalab.org/2005/11/30/the-train-has-already-left-the-station-google-and-rss<p><a href="http://www.readwriteweb.com/archives/rss_everywhere.php" title="RSS Everywhere II - but where is Google?">Richard MacManus on Read/WriteWeb:</a></p>
<blockquote>
<p>Watching Google and RSS is like watching a high school student experiment with a chemistry set. Meanwhile Yahoo and Microsoft are busy inserting RSS into their DNA.</p>
</blockquote>
<p>Thinking about it, I get almost all of the information I now consume via RSS. Currently, I'm even looking for a new apartment by using the Craigslist RSS feed, instead of heading off to their website for info like I used to do. I think that I'm using Google less now than ever, and I only see my usage of them continuing to slide. The train has already left the station here, Google better hurry up and get on board.</p>
Ten Rules for Projects2005-11-27T00:00:00+00:00http://kurt.karmalab.org/2005/11/27/ten-rules-for-projects<p>Evan Williams posts his list of <a href="http://evhead.com/2005/11/ten-rules-for-web-startups.asp" title="Ten Rules for Web Startups">rules for web startups here</a>. These rules aren't just for startups though, they should be taken as general guidelines for building any sort of software. </p>
<p>Almost every software project, from a small feature addition to an existing product, to an entirely new idea, should be run with these same basic ideas. I can't understand people who still want to drop a big bang on the world with their projects. Rule #9, unless you're building pacemaker software, should be applied to all attempts at software creation. I've yet to come across a software project where anyone involved really know what they want at the start.</p>
<p>So don't spend time trying to cram everything in the world in to your software, just get it out the door, get some users on it, watch how they use it, and start refining. No one knows for sure how users will use their software until we actually put it in front of them. The rest of the rules will make sure that it gets where it needs to go from there.</p>
Plazes is Cool2005-11-27T00:00:00+00:00http://kurt.karmalab.org/2005/11/27/plazes-is-cool<p>Just saw a post about <a href="http://www.plazes.com" title="Plazes">Plazes</a> over on <a href="http://www.horsepigcow.com/2005/11/crazy-plazes.html" title="Crazy Plazes">HorsePigCow</a> and I have to say that it's a pretty awesome app. I can never seem to figure out where any of the people that I consult with are at any given time, and, on the flip side of that coin, no one ever seems to know where I am since I seem to fly back and forth between San Francisco and New York on about a weekly basis. Now they'll be able to check my <a href="http://beta.plazes.com/whereis/kurt" title="plazes.beta: Where is Kurt Schrader">whereis page</a> and find out right away.</p>
<p>It looks like there are a few ways to get the information about where I am out of system, but I'm not seeing an RSS feed, which I was hoping to integrate in to my blog. Hopefully I just missed it or there's one coming soon. I would rather not have to redirect everyone to that whereis page all of the time. </p>
<p>Now I just need to get everyone else I know to sign-up for <a href="http://www.plazes.com" title="Plazes">Plazes</a> and I'll be able to see where all of my friends are. </p>
Froogle Local Will Not Work2005-11-22T00:00:00+00:00http://kurt.karmalab.org/2005/11/22/froogle-local-will-not-work<p>I was just reading the <a href="http://www.nytimes.com/2005/11/22/technology/22shop.html?ex=1290315600&en=3a07ee03ce2bf3bc&ei=5088&partner=rssnyt&emc=rss" title="Google's Shopping Service to List User's Local Stores">New York Times Article</a> (<a href="http://www.crunchnotes.com/?p=56" title="Total Nonsense">via CrunchNotes</a>) about the new Froogle Local shopping service and the following seems like an awesome feature:</p>
<blockquote>
<p>Additionally, local merchants will be able to send Google product information that will be searchable from Froogle. For example, if users type "iPod Nano New York," they will see map information with the locations of stores that have the iPod Nano in stock.</p>
</blockquote>
<p>except for the fact that it won't work. There are probably 50 places that I can buy electronics in my neighborhood in NYC and I bet that the only stores that will send Google this information will be Best Buy and friends. </p>
<p>If I already knew that I was going to buy at Best Buy or Circuit City, then I would probably just call there in the first place.</p>
<p>Hell, Google Local can't even find all of the electronics stores around my apt. If it can't even do that, then I have no faith in them keeping inventory data up to date.</p>
diggdot.us2005-11-21T00:00:00+00:00http://kurt.karmalab.org/2005/11/21/diggdot-us<p>This pretty much encapsulates my morning browsing habits. <a href="http://diggdot.us/" title="diggdot.us">Best Thing Ever</a>. (via <a href="http://www.techcrunch.com/2005/11/20/instantly-hooked-on-diggdotus/" title="Instantly Hooked on Diggdot.us">TechCrunch</a>, of course.)</p>
<p>Sombody needs to make a tool where I can just feed in a number of feeds like this and come up with a site that aggregates them and kills the dupes. Can't be that hard, right?</p>
101 Ways to Write a Business Plan2005-11-17T00:00:00+00:00http://kurt.karmalab.org/2005/11/17/101-ways-to-write-a-business-plan<p>As I've been looking at how to write a business plan lately, I've been reading everything I can about the matter and the only consensus I can find is that there is no consensus. Today we've got another <a href="http://whohastimeforthis.blogspot.com/2005/11/how-to-not-write-business-plan.html" title="How To NOT Write A Business Plan">post about the matter from David Cowan</a> over at Bessemer that, while helpful, is completely different from what I've heard and read from other people. </p>
<p>Going through this exercise, I've realized that, for me at least, the best thing to do is write a short business plan, pull a couple of pitch decks (long and short) out of it and then get back to work on the technology. I just get the feeling that it's better to blow away a VC (or a VC's friend, or family member, etc) with a nice tech demo and then back it up with whatever form of the business plan they ask for, than to just drop a 20 page document or Powerpoint deck onto their desk. I would much rather have someone put their time and money into me and my idea who's seen at least a rough draft of my vision. Am I way off base here or does this make sense?</p>
Respect the Suspenders!2005-11-16T00:00:00+00:00http://kurt.karmalab.org/2005/11/16/respect-the-suspenders<p>As I was walking home from work yesterday (and by home I mean the SF hotel that I've been residing in for the last couple of months) I heard a person loudly exclaim to the group of people he was with, "Guys who wear suspenders get respect!" After stopping to record this awesome quote in the <a href="http://www.moleskine.co.uk/" title="Moleskine">Moleskine</a> where I've started collecting my thoughts, I started thinking about what technologies I've been playing with lately could use some metaphorical suspenders.</p>
<p>Tagging, for one, could really use some suspenders. Despite the fact that everyone I know seems to be tagging things lately, I bet that >99% of the US still doesn't know what tagging is or why it's useful. Perhaps someone could come up with an elevator pitch for tagging that would convince my mom why it's cool. Stuff about "self-generated metadata" just isn't going to cut it. If there's already a good one of those, someone please let me know about it, because I need a good explanation for people.</p>
<p>Also, while we're on the subject of tagging, I would really like a service where I can feed all of my accounts into it and then get an RSS feed of all of the tagged data together. For example, I want to have an RSS feed for my halloween tag and get the blog entries, Flickr photos, del.icio.us links, etc that I've tagged with it. Anybody working on this sort of tag based aggregator, or do I have to write it myself? </p>
eBay APIs Free2005-11-14T00:00:00+00:00http://kurt.karmalab.org/2005/11/14/ebay-apis-free<p>Now that <a href="http://news.com.com/eBay+to+make+APIs+free+to+developers/2110-1032_3-5949958.html" title="eBay to make APIs free to developers">the eBay APIs are free</a>, I'm betting that we'll see a sudden surge of innovation in that area.</p>
<p>Extra points to the first person who builds a Google mashup that shows me where to buy from to save on shipping.</p>
Extending Riya2005-11-11T00:00:00+00:00http://kurt.karmalab.org/2005/11/11/extending-riya<p>I've been seeing <a href="http://www.wired.com/news/technology/0,1282,69514,00.html" title="Riya Eases Pain of Pile of Pix">a lot</a> <a href="http://sapventures.typepad.com/main/2005/11/riya_eases_pain.html" title="Riya Eases Pain of Pile of Pix">of talk</a> about <a href="http://www.riya.com/" title="Riya">Riya</a> over the last few days, and I must say that it looks pretty cool. </p>
<p>I'm not sure if Riya is going to have open APIs to their service, but if they do then I hope that someone takes the opportunity to build a dating service on top of their technology. It seems to me that, with minimal training, the system could match up people with others who they find attractive, as well as give an indication of how attractive they would be to that person. Although this probably wouldn't be a great indicator of how well those people actually get along, it would be cool nonetheless, and a killer feature for a dating site to have.</p>
The Google Copycat Effect2005-11-10T00:00:00+00:00http://kurt.karmalab.org/2005/11/10/the-google-copycat-effect<p>Om blogs <a href="http://gigaom.com/2005/11/10/tis-a-season-to-copy/" title="Tis the Season To Copy">here</a> about the general trend lately of one company copying another, copying another, copying another, ad nauseam. This most likely began when Google came along and looked at a field that was essentially dead, (search, and then eventually advertising) and then waltzed in and proceeded to dominate it.</p>
<p>I think this flipped the light on in everyone's head that, on the Internet, if you can do something better than everyone else and get some mind share, you can leapfrog them, seemingly overnight. I think we're just seeing this process continue to accelerate. Now people are trying to copycat before the site they're copying has even launched. Hopefully we'll continue along this path to it's natural end, where an infinite variety of all possible Web 2.0 ideas will all be launched simultaneously. I hope that I have the good sense to start a server farm before that day comes.</p>
Microsoft vs The World2005-11-09T00:00:00+00:00http://kurt.karmalab.org/2005/11/09/microsoft-vs-the-world<p>The blogosphere is abuzz over the leaked Microsoft memos from Bill Gates and Ray Ozzie that are found <a href="http://www.hypercamp.org/2005/11/09#a43" title="Exclusive: Full text of Gates email, Ozzie memo">here</a>. I've read the memos, and I can't help but wonder if Microsoft can really win a battle where the enemy is coming at it from all sides. History shows that if Microsoft has a well defined enemy, they can turn into a juggernaut and run them over. It'll be interesting to see how they deal with a battle that includes numerous small competitors. As many countries have learned in the past, guerrilla warfare is much harder to fight and requires a whole different set of tactics than standard warfare.</p>
What's the big deal about Sphere?2005-11-08T00:00:00+00:00http://kurt.karmalab.org/2005/11/08/whats-the-big-deal-about-sphere<p>I keep reading about the <a href="http://www.sphere.com" title="Sphere">Sphere</a> beta on a number of different feeds that I read. Now, I'm not on the beta test for Sphere, but is it so radically different from what's already available that it deserves all of the buzz it's generating? This <a href="http://datamining.typepad.com/data_mining/2005/11/sphere_update.html" title="Sphere Update">post</a> today on Data Mining simply says that we can now search with subhour times. So basically Sphere has caught up with any number of other blog search engines already available. From what I've seen Sphere looks pretty, but it doesn't look revolutionary. From my point of view, just being better than the other currently available blog search engines out there isn't going to be enough, especially after Yahoo integrates blogs into their normal search results.</p>
Interruptions2005-11-07T00:00:00+00:00http://kurt.karmalab.org/2005/11/07/interruptions<p>Jeff Nolan writes <a href="http://sapventures.typepad.com/main/2005/11/mercurynewscom_.html" title="Eventually, our entire day will consist of interruptions">here</a> about all of the interruptions that we have during our work day now. I thought it was mildly ironic that his entry popped up in my Newz Crawler alert window at the same time an instant message came in and a text message hit my Trio. I'm almost to the point where I'm going to set aside two hours a day and just disconnect from all of my networks in order to actually get some work done.</p>
<p>I think what we really need is some sort of interruption pipeline software where everything that can interrupt us flows through one channel and we can prioritize the interruptions. Over time an interruption hierarchy could be built up so, say, my boss could still IM me, but if the pipeline got too deep and I was working on too many other things, I would appear offline to all of my friends. Then, as I got some of the high priority work done I would slowly appear back online to people. This sort of a sliding scale would ensure that we get the work done that we need to do, but that when we have less to do then others can still contact us.</p>
New Blog Location2005-11-06T00:00:00+00:00http://kurt.karmalab.org/2005/11/06/new-blog-location<p>I’ve moved my blog again. The new URL is<a href="http://kurt.karmalab.org"> http://kurt.karmalab.org/ </a>. I’ve moved it away from the <a href="http://codehaus.org">codehaus</a> because I’m not really involved there anymore, and I’ve been broadening my horizons from the technology focus that I ended up talking about there. This should be a more general blog going forward, and hopefully one that’s updated more than quarterly. My old blog archives can be found <a href="http://blogs.codehaus.org/people/kschrader/">here</a>, and my really old blog archives can be found <a href="http://karmalab.org/~kschrader/blog/">here</a>.</p>