<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-16876791</id><updated>2011-04-21T17:29:53.624-07:00</updated><title type='text'>Rupert Fozz's House of Ill Winds</title><subtitle type='html'>making up for that last post since 1983</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16876791.post-114340055641728291</id><published>2006-03-26T11:14:00.000-08:00</published><updated>2006-03-26T11:15:56.430-08:00</updated><title type='text'>New Home!</title><content type='html'>&lt;p&gt;I am officially &lt;a href="http://twifkak.com/"&gt;web-present&lt;/a&gt;. It's a great day, everyone.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114340055641728291?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://twifkak.com/' title='New Home!'/><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114340055641728291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114340055641728291' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114340055641728291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114340055641728291'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/new-home.html' title='New Home!'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114289287576775351</id><published>2006-03-20T14:12:00.000-08:00</published><updated>2006-03-20T18:57:48.370-08:00</updated><title type='text'>Yup, Pretty Sure I Got Hoodwinked</title><content type='html'>&lt;p&gt;Upon further investigation (of his other writings), it indeed looks like Jimmy's posts were some form of meta-sarcasm with which, until now, I hadn't, unfortunately, been introduced. &lt;a href="http://twifkak.blogspot.com/2006/03/james-mcgovern-is-ass-wipe.html"&gt;Oops&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At least, that's what I hope.&lt;/p&gt;

Examples:
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://blogs.ittoolbox.com/eai/leadership/archives/003045.asp"&gt;Government Enterprise Architecture is a big fat joke!&lt;/a&gt; in which he ponders, "Maybe someone there should seriously consider reading the agile manifesto."&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.sanityfair.org.uk/images/Sanity%20Fair%202003%20030.jpg"&gt;The obnoxious clown picture in the original post&lt;/a&gt; may have been an attempt to tag the post as "humor."&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://duckdown.blogspot.com/2006/03/outstanding-questions-on-mainframes.html"&gt;Outstanding Questions on Mainframes and Open Source&lt;/a&gt; in which he queries, "Does Ruby run on Z/OS? If not, anyone game to work with me to port it? Hopefully, if we port it, the folks in the media will tell the story of how open source can also be created by folks who work in large enterprises and not just software vendors."&lt;/li&gt;
 &lt;li&gt;The aforementioned &lt;a href="http://blogs.ittoolbox.com/eai/leadership/archives/003338.asp"&gt;The Five Rules of Propoganda&lt;/a&gt; in which he lays the context for a sarcastic propoganda post.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style="font-weight:bolder"&gt;UPDATE:&lt;/span&gt; My hope was quenched. &lt;a href="http://duckdown.blogspot.com/2006/03/additional-thoughts-on-why-ruby-isnt.html"&gt;Quoth&lt;/a&gt; the Thought Leader:
&lt;blockquote&gt;
Many folks haven't figured out that I too am a fan of Ruby. The problem I think the community has is when folks separate what they like from what they will "recommend" and push for the enterprise. In talking with other architects in corporate America, they too have came to the same conclusion. &lt;strong&gt;It doesn't matter if you feel any perspective I state is valid or not, what matters is that others may be thinking the same thing and it is in the best interest of the community to have canned answers to them.&lt;/strong&gt; Oh by the way, don't get it twisted and think that every single opinion is my own because that would be highly inaccurate...
&lt;/blockquote&gt;
&lt;/p&gt;

&lt;p&gt;I don't really buy the premise that I need to be spending my free time answering questions that are meaningless to me, but at least we know his motivation's clean... ish.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114289287576775351?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114289287576775351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114289287576775351' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114289287576775351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114289287576775351'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/yup-pretty-sure-i-got-hoodwinked.html' title='Yup, Pretty Sure I Got Hoodwinked'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114255966850427761</id><published>2006-03-20T13:10:00.000-08:00</published><updated>2006-03-20T14:52:17.173-08:00</updated><title type='text'>James McGovern Is An Ass-Wipe</title><content type='html'>&lt;p&gt;Well, it seems DHH &lt;a href="http://www.loudthinking.com/arc/000577.html"&gt;beat me to the punch&lt;/a&gt;, so I'll have to one-up him by kicking the vitriol up a notch.&lt;/p&gt;

&lt;p&gt;The title, of course, is a lie. I don't know James McGovern. I imagine he's a good guy. Judging by his presence on mailing lists such as &lt;a href="http://groups.yahoo.com/group/extremeprogramming/"&gt;the XP list&lt;/a&gt;, he certainly knows a lot about &lt;a href="http://en.wikipedia.org/wiki/Availability"&gt;availability&lt;/a&gt;. But &lt;a href="http://duckdown.blogspot.com/2006/03/large-enterprises-and-why-they-dont.html"&gt;this post&lt;/a&gt; and his &lt;a href="http://www.redmonk.com/sogrady/archives/001401.html"&gt;subsequent&lt;/a&gt; &lt;a href="http://duckdown.blogspot.com/2006/03/more-thoughts-on-ruby-and-why-it-isnt.html"&gt;comments&lt;/a&gt; are total crap.&lt;/p&gt;

&lt;p&gt;It was my initial intent to shoot his arguments down on an itemized basis, but an initial iteration of that proved laborious and low in value. So, instead, I'll just group the bullshit from his initial comments into five categories, per James's own &lt;a href="http://blogs.ittoolbox.com/eai/leadership/archives/003338.asp"&gt;Five Rules of Propoganda&lt;/a&gt;. Feel free to similary categorize his later comments on your own blogs.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;The rule of simplification:&lt;/strong&gt; reducing all data to a simple confrontation between 'Good and Bad', 'Friend and Foe'.&lt;/dt&gt;
&lt;dd&gt;
&lt;blockquote&gt;Hmmm. I would ask the same thing of the dynamic community. Right now, you folks are living on hype instead of stating facts.&lt;/blockquote&gt;
This one's pretty obvious. The entire "dynamic community," if there is such a thing, is living on hype, the obvious antithesis to a Thought Leader such as James McGovern.
&lt;blockquote&gt;I predict that many folks in the agile community are busy bidding on enterprise application development as we speak using approaches such as Ruby on Rails with the flag waving fervor is saying that development is cheaper. I guess the average enterprise doesn't already have enough languages to deal with and throwing a few more on the pile won't hurt.... Thanks agilists for making the enterprise more of a mess...&lt;/blockquote&gt;
Here, the "agile community" (bad guys) is doing unfettered detriment to the "average enterprise" (good guys) by "throwing a few more [languages] on the pile."
&lt;blockquote&gt;You may have noticed that pretty much everyone in the Ruby camp are insultants with many of them being book authors attempting to capitalize on hype.&lt;/blockquote&gt;
"The Ruby camp" -- "insultants" -- "book authors" (oh, goodness forbid) -- "capitalize on hype." I'm especially amused by his definition of "open minded" in the following sentence, but I digress...
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;The rule of disfiguration:&lt;/strong&gt; discrediting the opposition by crude smears and parodies.&lt;/dt&gt;
&lt;dd&gt;
&lt;blockquote&gt;The funniest thing is occuring in the blogosphere. Lots of folks who write for industry magazines have jumped on Ruby, yet you will never find a single large enterprise that is even considering it. Ever wonder why?&lt;/blockquote&gt;
Ruby's growing popularity is being deemed "the funniest thing." He again associates the inherent evil in authors (this time, magazine columnists) to Ruby. And "yet you will never find a single large enterprise that is even considering it." Big, blatant, unproven smears.
&lt;blockquote&gt;Name one single enterprise application in the ERP, CRM, etc space that either is written in a dynamic language and/or is being considered ported? Name one system Fortune 200 enterprise that has a mission-critical system written in a dynamic language. Of course, you can't.&lt;/blockquote&gt;
Of course! Smear.
&lt;blockquote&gt;I wonder if these folks have ever studied software engineering economics? What is even sadder is that many of these folks believe in agile software development yet refuse to consider costs over the lifetime.&lt;/blockquote&gt;
The folks talking about Ruby have never "studied software engineering economics," and that's not the saddest part, says McGovern.
&lt;blockquote&gt;You may have noticed that pretty much everyone in the Ruby camp are insultants with many of them being book authors attempting to capitalize on hype... So, &lt;a href="http://www.rubyconf.org/"&gt;when&lt;/a&gt; &lt;a href="http://www.sdforum.org/SDForum/Templates/Level1.aspx?pid=10218&amp;sid=3"&gt;will&lt;/a&gt; &lt;a href="http://redhanded.hobix.com/cult/planofrubyconferencejapan2006.html"&gt;we&lt;/a&gt; &lt;a href="http://www.ruby-lang.org/en/20051010.html"&gt;start&lt;/a&gt; &lt;a href="http://www.canadaonrails.org/"&gt;seeing&lt;/a&gt; &lt;a href="http://railsconf.org/"&gt;conferences&lt;/a&gt; on Ruby? Bet they will be filled with these same insultants as speakers but will never manage to even get anyone from a Fortune enterprise to talk about it...&lt;/blockquote&gt;
Wow. Speaks for itself.
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;The rule of transfusion:&lt;/strong&gt; manipulating the consensus values of the target audience for one's own ends.&lt;/dt&gt;
&lt;dd&gt;
From his &lt;a href="http://www.redmonk.com/sogrady/archives/001401.html"&gt;comment on redmonk&lt;/a&gt;:
&lt;blockquote&gt;I want to jump out a window. Folks still keep ignoring the point. I have never said that dynamic languages wouldn't be used in the enterprise or don't have a place. I can find Perl at work for an example, but ask yourself want is it used for. Sooner or later, Ruby will show up on our doorstep but I can tell you that it won't be used for anything worth hyping in magazines and certainly won't be used for any mission-critical enterprise applications.&lt;/blockquote&gt;
See, bloggers? It's your fault. You're driving poor Jim to consider autodefenestration. Besides, you should be happy that Ruby &lt;em&gt;might&lt;/em&gt; get used in the slightest, most throwaway applications. That's what you want, isn't it?
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;The rule of unanimity:&lt;/strong&gt; presenting one's viewpoint as if it were the unanimous opinion of all right-thinking people: draining the doubting individual into agreement by the appeal of star-performers, by social pressure, and by 'psychological contagion'.&lt;/dt&gt;
&lt;dd&gt;
Well, I've pasted the entirety of his first post into blockqutoes, by now. Just re-read those quotes, and see how he's using words like "enterprise" and "mission-critical" to mean "right-thinking" and words like "agile" and "folks" to mean "psychological contagion."
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;The rule of orchestration:&lt;/strong&gt; endlessly repeating the same messages in different variations and combinations.&lt;/dt&gt;
&lt;dd&gt;Again, the consistency and the redundancy of the above quotes covers this. &lt;a href="http://www.loudthinking.com/arc/000577.html"&gt;DHH's response&lt;/a&gt; does a good job grouping some of his comments together, to show the endless repetition being employed.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Also: I think we should add a sixth rule -- putting really freaky-ass pictures in the middle of your posts to confuse your readers and distract them from the sleight-of-word tricks you're so fond of playing.&lt;/p&gt;

&lt;p&gt;In addition to being ridiculously miffed at his posts, I'm a little confused at why he uses "dynamic languages." Is there something about a particular language's dynamicity that makes it unscaleable, unreliable, un-Enterprise in your eyes, or is it just a (possibly only perceived) common characteristic among the particular dynamic languages at which you've looked?&lt;/p&gt;

&lt;p&gt;I swear, is this some cultural experiment on your part, James?&lt;/p&gt;

&lt;p&gt;But my intention wasn't just to prove him nuts. It was to ask a greater question &amp;mdash; why does this phenomenon exist on so great a level? Sure, there are lots of people in the world, and so a few of them are bound to vocalize stupid ideas loudly. But here's a guy who's &lt;em&gt;known&lt;/em&gt; for being so smart in many areas (one comment claims, "Knowing you, this is only to stimulate debate for the right reasons !!"), and so open to learning and change, and yet he backs up his arguments with fallacies, circumstantial claims, ad hominem attacks, and, oh yeah, plain old lies. What's up with that?&lt;/p&gt;

&lt;p&gt;This isn't meant as an attack on James. &lt;a href="http://lesscode.org/2006/03/12/someone-tell-gosling/"&gt;He's&lt;/a&gt; &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=141312"&gt;not&lt;/a&gt; &lt;a href="http://www.enterprisej2me.com/blog/java/?postid=145"&gt;alone&lt;/a&gt;. I get the impression that either I (and a great many others) am misinterpreting all of their comments, or that, even in the &lt;a href="http://www.cluetrain.com/"&gt;cluetrain&lt;/a&gt; age, our society continues to brew loud, inhuman, self-serving mouthpieces. Or that these loud, inhuman, self-serving mouthpieces will, every once in a while, get mad drunk one night, lower their guard, post some incomprehensible rant, and get stuck justifying it in the morning.&lt;/p&gt;

&lt;p&gt;Mind you, my ideas have not solidified, so take my rhetoric with a grain of salt.&lt;/p&gt;

&lt;p&gt;(&lt;a href="/2006/03/yup-pretty-sure-i-got-hoodwinked.html"&gt;Follow-up&lt;/a&gt; posted.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114255966850427761?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114255966850427761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114255966850427761' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114255966850427761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114255966850427761'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/james-mcgovern-is-ass-wipe.html' title='James McGovern Is An Ass-Wipe'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114269803161738151</id><published>2006-03-18T07:58:00.000-08:00</published><updated>2006-03-18T08:28:45.830-08:00</updated><title type='text'>Advice for Young Whipperbloggers</title><content type='html'>&lt;p&gt;Actually, they're already on it, so this is just advice for me.&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;Write about whatever the hell you're thinking about.&lt;/li&gt;
 &lt;li&gt;Don't be afraid to interrupt whatever the hell you're doing to get that thought of yours down in words.&lt;/li&gt;
 &lt;li&gt;Don't be afraid to write your draft right there in the middle of whatever the hell Word doc or Ruby file you're working on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The common theme here is Don't Inhibit Creativity. Yeah, duh, but apparently &lt;em&gt;I&lt;/em&gt; needed a reminder.&lt;/p&gt;

&lt;p&gt;In the &amp;ldquo;early days&amp;rdquo; of this blog, I made myself adhere to strict rules about the content and tone of the blog. As a result, the content and tone suffered. Recently, I began removing the rules. Obviously, that meant I'd write more. What was (but shouldn't have been) &lt;em&gt;surprising&lt;/em&gt; to me, was that I was writing more posts that met my strict rules. See, the &amp;ldquo;off-topic&amp;rdquo; posts, which wouldn't have otherwise been written, keep my mind thinking about different subjects and about writing, and encouraged me to write yet more.&lt;/p&gt;

&lt;p&gt;Again, this is probably not news, but it's New To Me.&lt;/p&gt;

&lt;p&gt;I could also say something along the lines of, &amp;ldquo;The compendium of &lt;strong&gt;all&lt;/strong&gt; the things that make you you makes your blog your blog,&amp;rdquo; but I'm not sure I believe that. Maybe I will as soon as I switch to a blog that supports categories, and thus allows people to filter out my exciting turkey sandwich escapades. :)&lt;/p&gt;

&lt;p&gt;(&lt;em&gt;Wha???&lt;/em&gt; Devin, nerd of all nerds, is starting to buy into the old "Be Yourself" adage? What is the world coming to?)&lt;/p&gt;

&lt;p&gt;(Sorry, I meant to say, "To what is the world coming?" Sorry, everybody.)&lt;/p&gt;

&lt;p&gt;(Also, &lt;cite&gt;whippersnapper&lt;/cite&gt; has an interesting &lt;a href="http://www.answers.com/whippersnapper"&gt;definition&lt;/a&gt;.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114269803161738151?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114269803161738151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114269803161738151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114269803161738151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114269803161738151'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/advice-for-young-whipperbloggers.html' title='Advice for Young Whipperbloggers'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114253834686968437</id><published>2006-03-16T11:35:00.002-08:00</published><updated>2006-03-16T11:48:21.036-08:00</updated><title type='text'>O General, My General</title><content type='html'>&lt;p&gt;Have you ever noticed that the phrase &amp;ldquo;in general&amp;rdquo; really means &amp;ldquo;in specific&amp;rdquo;? In general, when people say it, they actually mean &amp;ldquo;in most cases&amp;rdquo; or &amp;ldquo;on average,&amp;rdquo; which is just a way of talking about a specific subset of reality.&lt;/p&gt;

&lt;p&gt;Without loss of generality, let's pick a concrete example. If you say, &amp;ldquo;In general, people fear what they do not know,&amp;rdquo; you lie. In &lt;em&gt;general&lt;/em&gt;, &lt;strong&gt;some&lt;/strong&gt; people fear it, and some people do not. In most cases, people do. But then, saying &amp;ldquo;Most people fear what they do not know,&amp;rdquo; just doesn't sound as cool.&lt;/p&gt;

&lt;p&gt;Actually, &lt;em&gt;I&lt;/em&gt; lie. A general desire for validation is not the reason for the above confusion. The definition of &lt;cite&gt;general&lt;/cite&gt; itself is our actual culprit. According to &lt;a href="http://www.answers.com/general#Dictionary"&gt;The American Heritage&lt;/a&gt;, the first two definitions of general are:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;Concerned with, applicable to, or affecting the whole or every member of a class or category&lt;/il&gt;
 &lt;li&gt;Affecting or characteristic of the majority of those involved; prevalent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Well, which is it, America? A concept applicable to all, or a concept applicable to most?&lt;/p&gt;

&lt;p style="font-weight:bolder;"&gt;Uh... Devin? Why the hell should I care?&lt;/p&gt;

&lt;p&gt;It's a linguistic example of how generalities become stereotypes. All it takes is a switch from one &lt;em&gt;definition&lt;/em&gt; of a word to the next, for a statement about the majority to become a statement about the entirety. If language influences thought, since it certainly is the basis of communication, and since it's so easy, in our language, to jump from one to the next, it's no wonder that we allow absolutes to linger in the field of popular belief.&lt;/p&gt;

&lt;p&gt;That, or it's an excuse for me to do fun word play. I'm not sure which. (I have a guess, though, and it has a lot to do with the fact that it's just as easy for a statement about the entirety to become a statement about the majority. (Now would be an appropriate time for somebody to pipe in about the effect of the vocal minority, were it not for the fact that I'm being overloaded with vague abstractions, and I really need to take a rest.))&lt;/p&gt;

&lt;p&gt;Hrm. Maybe I should do a future exploratory rant on the word &lt;cite&gt;actual&lt;/cite&gt;. :P&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114253834686968437?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114253834686968437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114253834686968437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114253834686968437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114253834686968437'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/o-general-my-general.html' title='O General, My General'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114239878045414192</id><published>2006-03-14T20:56:00.000-08:00</published><updated>2006-03-14T21:03:24.086-08:00</updated><title type='text'>O/R Mapping — Ooh! I'm all w–ahem, ears.</title><content type='html'>&lt;p&gt;&lt;a href="http://www.agiledata.org/essays/impedanceMismatch.html"&gt;Folks&lt;/a&gt; &lt;a href="http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch"&gt;talk&lt;/a&gt; &lt;a href="http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;entry=3246121322"&gt;about&lt;/a&gt; the &lt;a href="http://en.wikipedia.org/wiki/Object-Relational_Impedance_Mismatch"&gt;impedance mismatch&lt;/a&gt; between object-oriented views of data, and relational (as in "relational database") views of data. Specifically, they talk about the havoc that this wreaks on people trying to implement O/R mappers.&lt;/p&gt;

Ted Neward (of 2003) &lt;a href="http://www.neward.net/ted/weblog/index.jsp?date=2003112"&gt;writes&lt;/a&gt;:
&lt;blockquote&gt;Basically, I want the object-relational impedance mismatch to go away, just like everybody else does. But instead of continuing to try to force objects on top of the relational model, how about we give up going in that direction, and instead try lacing relational semantics into our favorite languages of choice?&lt;/blockquote&gt;

&lt;p&gt;He's right about the fact that we try and force objects onto a relational model, and he's got a point that lacing relational semantics into our language would lessen the mismatch, but he's solving the wrong problem. Getting rid of the O/R mapper stops us from forcing &lt;strong&gt;classes&lt;/strong&gt; into a relational model. We've still got our data to contend with, and as long as we're human, this means we're still forcing &lt;strong&gt;objects&lt;/strong&gt; onto a relational model.&lt;/p&gt;

Compare the following hypothetical SQL statement:

&lt;pre&gt;&lt;code&gt;select s.name
from classes c, classes_students cs, students s
where c.name = "Japanese Tea Ceremony and Zen Aesthetics"
and c.id = cs.class_id
and s.id = cs.student_id&lt;/code&gt;&lt;/pre&gt;

to the following hypothetical hypothetical language statement:

&lt;pre&gt;&lt;code&gt;select c.student.name
from classes c
where c.name = "Japanese Tea Ceremony and Zen Aesthetics"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Maybe while we're all lacing relational semantics into our favorite OO languages, we should think about lacing OO semantics into our relational languages...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114239878045414192?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114239878045414192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114239878045414192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114239878045414192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114239878045414192'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/or-mapping-ahem-ears.html' title='O/R Mapping &amp;mdash; Ooh! I&apos;m all w&amp;ndash;ahem, ears.'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114239601031971680</id><published>2006-03-14T20:05:00.000-08:00</published><updated>2006-03-14T20:18:48.466-08:00</updated><title type='text'>Trumpet Tie!!!</title><content type='html'>&lt;p&gt;Because I've been getting lazier about my blog, but Jerry's been wanting me to post more often, I'm just going to paste this post of mine &lt;strong&gt;directly&lt;/strong&gt; from one of my (often more entertaining than my posts) emails:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Oh, oops, if you wanted personal commentary, I suppose it would be this:&lt;/p&gt;

&lt;p&gt;I've never much modified the way I looked. (In middle school, I started wearing jeans, as means to conform.) I've had the same haircut since, well, the dawn of my hair. For a while, I've had the desire to change the way I look, if only so that I can say it's "mine" and not my parents'. Once in a blue moon, I'll even go so far as to attempt it -- a change of hairdo or clothes. But every time I do, I find:&lt;/p&gt;
&lt;ol&gt;
 &lt;li&gt;I don't much like the result.&lt;/li&gt;
 &lt;li&gt;I don't much dislike the result.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;and I've been reading a lot of stuff lately (selectively, I imagine) that's been telling me not to bother pursuing things for which I don't have passion.&lt;a href="#trumpet_1"&gt;*&lt;/a&gt; Thus (a mathematician at heart, I'm prone to say "thus" from time to time), I've stopped caring about the fact that I dress boringly, and have satisfied myself with the fact that I'm awful weird on the inside.&lt;/p&gt;

The End,&lt;br /&gt;
Devin
&lt;p id="trumpet_1"&gt;* Some go so far as to say &lt;a href="http://paulgraham.com/love.html"&gt;"avoid the things that'll make you rich and famous"&lt;/a&gt; because chances are the only reason you're interested is the prospect of wealth and fame, and that'll lead to crappy performance at whatever it is, and /that/'ll lead to a palpable /lack/ of wealth, fame, and, oh yeah, happiness.&lt;/p&gt;

&lt;p&gt;PS &amp;mdash; So to answer your question: I dunno. Whatever it ends up being, it sounds like it's not for me, so I'm not the one to ask. So why'd you ask me? Weirdo.&lt;/p&gt;

&lt;p&gt;PPS &amp;mdash; Trumpet tie!!!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mostly unedited.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114239601031971680?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114239601031971680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114239601031971680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114239601031971680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114239601031971680'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/trumpet-tie.html' title='Trumpet Tie!!!'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114225944398218286</id><published>2006-03-13T06:10:00.000-08:00</published><updated>2006-03-13T06:18:23.833-08:00</updated><title type='text'>On TV, You Never Hear The Furnace</title><content type='html'>&lt;p&gt;I've seen more than my fair share of TV shows. In them, many scenes take place in homes. Not once, however, have I heard a furnace kick on or off during one of these scenes. In real life, of course, we hear the furnace all the time. I, personally, am eternally annoyed by it as I'm trying to fall asleep.&lt;/p&gt;

&lt;p&gt;So, you heard it here first: I will give 5 cents to the creator of a TV show in which I hear a furnace. Five cents &amp;mdash; out of my pocket, and into the hands of innovation.&lt;/p&gt;

&lt;p&gt;This post written without glasses, so you'll forgive me if there was a 'g' in the moiddle of "furnace" or something.&lt;/p&gt;

&lt;p&gt;PS &amp;mdash; a close friend told me that he doesn't value my technical opinion, and therefore I should be posting more non-technical posts. What a friend, eh? Well, Mr. Loserface, I think I'll just get &lt;em&gt;more&lt;/em&gt; technical, to spite you. For the next four weeks, I'll be doing daily coverage on the source code to irb.rb. We'll learn how the code works inside and out, and maybe learn a little about ourselves along the way.&lt;/p&gt;

&lt;p&gt;(Actually, no, I won't. If you got here via technorati or something, and were hoping for coverage of irb, then I'm sorry to put your dreams on such a whirlwind tour like that. But I have good reason &amp;mdash; I wanted to spite a "friend.")&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114225944398218286?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114225944398218286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114225944398218286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114225944398218286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114225944398218286'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/on-tv-you-never-hear-furnace.html' title='On TV, You Never Hear The Furnace'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114179020241333509</id><published>2006-03-07T19:55:00.000-08:00</published><updated>2006-03-07T19:56:42.440-08:00</updated><title type='text'>WORST. COVER. EVER.</title><content type='html'>&lt;p&gt;I just listened to Elton John's version of Nick Drake's &lt;cite&gt;Saturday Sun&lt;/cite&gt;, from back when he was a studio artist for Island Records, for the first time.&lt;/p&gt;

&lt;p&gt;Gag me with a steak knife.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114179020241333509?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114179020241333509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114179020241333509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114179020241333509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114179020241333509'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/worst-cover-ever.html' title='WORST. COVER. EVER.'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114131125888597835</id><published>2006-03-02T06:43:00.000-08:00</published><updated>2006-03-02T06:54:18.896-08:00</updated><title type='text'>I came very close to sending this...</title><content type='html'>&lt;p&gt;but I didn't, 'cause I'm a wimp. (Mostly, 'cause I couldn't decide who should be the victim.) It's based on some particulars due to the fact that we use *cough* Lotus *hack* Notes *die*.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;See, here's what I don't get.&lt;/p&gt;
&lt;p&gt;"Reply to All with History" is the last of four menu items that appear when you click the "Reply" button, whereas "Reply" is the first and is right below the button. Now, Fitt's law tells me that, all else equal, the likelihood of you clicking a button is inversely proportional to that button's distance from your mouse cursor's current position.&lt;/p&gt;
&lt;p&gt;So, why would you go through all the extra effort to click "Reply to All with History," when "Reply" is right there, much closer, and much less annoying to the other 25 recipients of your email?
&lt;/blockquote&gt;

&lt;p&gt;This has been a Public Service Announcement from yours truly. Thank you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114131125888597835?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114131125888597835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114131125888597835' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114131125888597835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114131125888597835'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/03/i-came-very-close-to-sending-this.html' title='I came very close to sending this...'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-114056424557364580</id><published>2006-02-21T15:19:00.000-08:00</published><updated>2006-02-21T15:24:05.586-08:00</updated><title type='text'>Know of a good synonym for "disenthuse"?</title><content type='html'>&lt;p&gt;Look, I know &lt;cite&gt;disenthuse&lt;/cite&gt; is not a real word, but I can't find a decent substitute. Comment if you can.&lt;/p&gt;

&lt;p&gt;The meaning I'm looking for is: &lt;em&gt;to kill one's interest in a subject or an action&lt;/em&gt;. As in, &lt;em&gt;"DHH's anti-Java rants have really disenthused me from learning the framework."&lt;/em&gt; This is a significantly different meaning from &lt;cite&gt;dissuade&lt;/cite&gt;, which is &lt;em&gt;to actively persuade against a certain action&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Ready.... Go!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-114056424557364580?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/114056424557364580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=114056424557364580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114056424557364580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/114056424557364580'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/02/know-of-good-synonym-for-disenthuse.html' title='Know of a good synonym for &quot;disenthuse&quot;?'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113743394862585448</id><published>2006-01-16T08:21:00.000-08:00</published><updated>2006-01-16T09:52:28.656-08:00</updated><title type='text'>On Literature</title><content type='html'>Is it just me, or is &lt;a href="http://www.imdb.com/title/tt0083564"&gt;&lt;cite&gt;Annie&lt;/cite&gt;&lt;/a&gt;'s plot strikingly similar to that of &lt;a href="http://www.imdb.com/title/tt0112442"&gt;&lt;cite&gt;Bad Boyz&lt;/cite&gt;&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113743394862585448?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113743394862585448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113743394862585448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113743394862585448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113743394862585448'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2006/01/on-literature.html' title='On Literature'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113561765372161286</id><published>2005-12-26T09:09:00.000-08:00</published><updated>2005-12-26T09:21:46.050-08:00</updated><title type='text'>This Is One Of Those Pathetic Multi-Topic Posts</title><content type='html'>&lt;ul&gt;
 &lt;li&gt;Hi, my name is Devin, and my dad likes Jeff Foxworthy.&lt;/li&gt;
 &lt;li&gt;&lt;cite&gt;Love, Actually&lt;/cite&gt; is &lt;em&gt;still&lt;/em&gt; a good movie. Dare I say: classic? No, I dare not.&lt;/li&gt;
 &lt;li&gt;&lt;cite&gt;Lumines&lt;/cite&gt; is quite fun. Strangely, I'm much better at it than any other  puzzle game I've played (excepting &lt;cite&gt;Columns&lt;/cite&gt;, which, I'd imagine, is deliberately self-defeating). I think it's the music. That, or it's easier than Tetris.&lt;/li&gt;
 &lt;li&gt;Merry Christmas, you bastards!&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113561765372161286?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113561765372161286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113561765372161286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113561765372161286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113561765372161286'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/12/this-is-one-of-those-pathetic-multi.html' title='This Is One Of Those Pathetic Multi-Topic Posts'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113505009997848424</id><published>2005-12-19T19:40:00.000-08:00</published><updated>2005-12-19T19:43:01.483-08:00</updated><title type='text'>I'm Not Going To Get Involved</title><content type='html'>&lt;p&gt;in &lt;a href="http://www.robsanheim.com/?p=143"&gt;this&lt;/a&gt; debate. Needless to say, I'm right.&lt;/p&gt;

&lt;p&gt;I may post something meaningful and non-technical one day, though.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;...who am I kidding?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113505009997848424?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113505009997848424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113505009997848424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113505009997848424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113505009997848424'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/12/im-not-going-to-get-involved.html' title='I&apos;m Not Going To Get Involved'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113401451213923546</id><published>2005-12-07T20:01:00.000-08:00</published><updated>2005-12-07T20:01:52.150-08:00</updated><title type='text'>It's Not You, Blog; It's Me.</title><content type='html'>&lt;p&gt;No, I know, but I'm serious.&lt;/p&gt;

&lt;p&gt;Why do you have to jump to that?&lt;/p&gt;

&lt;p&gt;Well, yes, but I mean, why do you -- is that how little you think of me, that when I say, "it's not you," I always mean, "I met someone else"?&lt;/p&gt;

&lt;p&gt;I'm just say--&lt;/p&gt;

&lt;p&gt;It doesn't matter.&lt;/p&gt;

&lt;p&gt;No, it doesn't matter. It's our business, not yours.&lt;/p&gt;

&lt;p&gt;Look, I don't even know if she wants to divulge her name.&lt;/p&gt;

&lt;p&gt;Yeah... yeah, okay, shut up. It's not like I'm an English major here.&lt;/p&gt;

&lt;p&gt;No, I mean it.&lt;/p&gt;

&lt;p&gt;Okay, fine! It's &lt;a href="https://opensvn.csie.org/traccgi/rescueroadways/trac.cgi/wiki/MigrationsConsideredImperfect"&gt;Wiki&lt;/a&gt;! Damn it. You really piss me off sometimes.&lt;/p&gt;

&lt;p&gt;No, that's not why.&lt;/p&gt;

&lt;p&gt;No, I'm sorry...&lt;/p&gt;

&lt;p&gt;N--you know what, nevermind.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113401451213923546?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113401451213923546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113401451213923546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113401451213923546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113401451213923546'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/12/its-not-you-blog-its-me.html' title='It&apos;s Not You, Blog; It&apos;s Me.'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113323081614998001</id><published>2005-11-28T18:13:00.000-08:00</published><updated>2005-11-28T18:20:16.170-08:00</updated><title type='text'>Why Ruby?</title><content type='html'>Sorry for yet-another-&lt;a href="http://ruby-doc.org/whyruby/"&gt;Ruby&lt;/a&gt;-post. This time, I'm just really pissed that &lt;a href="http://ruby-doc.org/whyruby/"&gt;this&lt;/a&gt; &lt;a href="http://ruby-doc.org/whyruby/"&gt;particular&lt;/a&gt; &lt;a href="http://ruby-doc.org/whyruby/"&gt;Ruby advocacy page&lt;/a&gt; (called &lt;a href="http://ruby-doc.org/whyruby/"&gt;Why Ruby?&lt;/a&gt; and graciously hosted by &lt;a href="http://ruby-doc.org/whyruby/"&gt;James Britt&lt;/a&gt; on &lt;a href="http://ruby-doc.org/whyruby/"&gt;ruby-doc.org&lt;/a&gt;) -- a fountain of useful &lt;a href="http://ruby-doc.org/whyruby/"&gt;powerpoint presentation slides&lt;/a&gt; that you can use to help &lt;a href="http://ruby-doc.org/whyruby/"&gt;convince your coworkers that Ruby is a good thing&lt;/a&gt; is nowhere to be found in the Google search results for &lt;a href="http://ruby-doc.org/whyruby/"&gt;why ruby&lt;/a&gt; or &lt;a href="http://ruby-doc.org/whyruby/"&gt;"why ruby"&lt;/a&gt; or &lt;a href="http://ruby-doc.org/whyruby/"&gt;ruby advocacy&lt;/a&gt; or even &lt;a href="http://ruby-doc.org/whyruby/"&gt;ruby advocacy powerpoint slides&lt;/a&gt;. Possibly it'd help if he changed the title tag to &lt;a href="http://ruby-doc.org/whyruby/"&gt;Why Ruby?&lt;/a&gt; instead of the current &lt;a href="http://ruby-doc.org/whyruby/"&gt;ruby-doc.org&lt;/a&gt;. I'm hoping it'll help that I &lt;a href="http://ruby-doc.org/whyruby/"&gt;linked to it&lt;/a&gt; a thousand times, so that I don't have to remember the &lt;a href="http://ruby-doc.org/whyruby/"&gt;URL&lt;/a&gt; later. More likely, though, it'll just make Google think I'm a spambot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113323081614998001?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113323081614998001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113323081614998001' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113323081614998001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113323081614998001'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/11/why-ruby.html' title='Why Ruby?'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-113059981748534394</id><published>2005-10-29T08:22:00.000-07:00</published><updated>2005-10-29T08:30:17.503-07:00</updated><title type='text'>See? Having a blog is useless</title><content type='html'>&lt;p&gt;if you don't practice the art of the blog. I bet my three readers feel pretty abandoned right now.&lt;/p&gt;

&lt;p&gt;I was going to post something about how Test-Driven Development is hard, but I think it really comes down to this: I suck at TDD. All my efforts to do it end up, within a couple hours, as expansive attempts to build ever more elaborate (and, consequently, fragile) mocks. I put &lt;a href="http://www.amazon.com/gp/product/0321146530"&gt;TDD By Example&lt;/a&gt; in my shopping cart. It'll be a secondary purchase whenever I next buy something from Am.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-113059981748534394?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/113059981748534394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=113059981748534394' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113059981748534394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/113059981748534394'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/10/see-having-blog-is-useless.html' title='See? Having a blog is useless'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112813152256355317</id><published>2005-09-30T18:38:00.000-07:00</published><updated>2005-09-30T19:00:36.013-07:00</updated><title type='text'>Rails Migrations for Dummies, and Jeff</title><content type='html'>&lt;p&gt;On a mailing list I belong to (&amp;lt;nerd/&amp;gt;), Jeff wrote:&lt;/p&gt;
&lt;blockquote&gt;How hard was it to get going with Migrations?&lt;/blockquote&gt;

&lt;p&gt;Very easy. Instead of creating your table or column or whatever through traditional means, do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;kbd&gt;script/generate migration products_table&lt;/kbd&gt;. The script tells you it creates a file called &lt;var&gt;db/migrate/1_products_table.rb&lt;/var&gt;.&lt;/li&gt;

&lt;li&gt;Edit the file. Initially it looks like this:&lt;br /&gt;
&lt;code&gt;&lt;pre class="code"&gt;class ProductsTable &lt; ActiveRecord::Migration
  def self.up
  end

  def self.down
  end
end&lt;/pre&gt;&lt;/code&gt;
Change it so it looks like this:&lt;br /&gt;
&lt;code&gt;&lt;pre class="code"&gt;class ProductsTable &lt; ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      #id column is add automatically when you use create_table
      t.column :name, :string
      t.column :price, :integer  #anybody who chooses :float deserves what they get
      t.column :date_added, :date
    end
  end

  def self.down
    drop_table :products
  end
end&lt;/pre&gt;&lt;/code&gt;

Full docs at &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Run &lt;kbd&gt;rake migrate&lt;/kbd&gt;. This opens up your DB and looks for a table called &lt;var&gt;schema_info&lt;/var&gt;. If not found, it creates the table. If found, it pulls the single row from the table containing the database "version number." It then runs all the available migrations (in the db/migrate directory) with a number greater than the DB version number, in numerical order, and finally sets the new DB ver # in the &lt;var&gt;schema_info&lt;/var&gt; table.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's all!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obviously, there's a way to do rollback, else we wouldn't have wasted the time to write the down method. From the looks of the Rakefile, it's &lt;kbd&gt;VERSION=0 rake migrate&lt;/kbd&gt;.&lt;/li&gt;
&lt;li&gt;I'm not sure what happens if Alice generates &lt;var&gt;5_quantity_remaining.rb&lt;/var&gt; and commits, and Bob generates &lt;var&gt;5_system_settings.rb&lt;/var&gt; and commits without noticing and renaming his to &lt;var&gt;6_...&lt;/var&gt;. The simple answer is "read your svn up log" anyway.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112813152256355317?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112813152256355317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112813152256355317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112813152256355317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112813152256355317'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/rails-migrations-for-dummies-and-jeff.html' title='Rails Migrations for Dummies, and Jeff'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112808183630138713</id><published>2005-09-30T04:58:00.000-07:00</published><updated>2005-09-30T05:03:56.306-07:00</updated><title type='text'>I Saw an Awesome Movie Preview</title><content type='html'>&lt;p&gt;I saw a movie preview this morning. It was awesome. Seriously, it was like &lt;cite&gt;Good Will Hunting&lt;/cite&gt; on Soderbergh. Friendship, murder, emotionally disturbed geniuses, nontraditional editing, a silver Corvette... Then the alarm went off.&lt;/p&gt;

&lt;p&gt;Apparently, my subconscious is a freaking &lt;em&gt;awesome&lt;/em&gt; writer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112808183630138713?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112808183630138713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112808183630138713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112808183630138713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112808183630138713'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/i-saw-awesome-movie-preview.html' title='I Saw an Awesome Movie Preview'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112796264481186495</id><published>2005-09-28T19:57:00.000-07:00</published><updated>2005-09-28T19:57:24.810-07:00</updated><title type='text'>Over There</title><content type='html'>Seriously, though. Over There. Can't recommend it enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112796264481186495?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112796264481186495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112796264481186495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112796264481186495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112796264481186495'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/over-there.html' title='Over There'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112795863734292822</id><published>2005-09-28T18:44:00.000-07:00</published><updated>2006-03-16T17:28:13.586-08:00</updated><title type='text'>Dear Devin: Why Is Rails So God-Damned Hot?</title><content type='html'>&lt;h2&gt;UPDATE: &lt;strong&gt;Don't read this.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;It's long-winded, boring, and useless. For history's sake, I leave it up, but suffice it to say: I'm glad somebody besides me cares about database versioning, and Rails is a compromise.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Dear Devin:&lt;/p&gt;

&lt;p&gt;People have been developing webapps for 10 years, MVC-style apps since the 80s, and apps with user interfaces since the dawn of the terminal. Why the fuck does &lt;a href="http://www.rubyonrails.com/"&gt;Rails&lt;/a&gt; think it's so special? Somebody just came out of the air with something so hot and new that had never been thought of before, not even by the industry giants or the academic greats? I don't buy it.&lt;/p&gt;

&lt;p&gt;Sincerely,&lt;br /&gt;
Jammin' wit' Java&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Dear Jammin',&lt;/p&gt;

&lt;p&gt;Well, here's my bullshit opinion for what made Rails become such a "revolution" for so many people. There were three principle players:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The increase of interest in Agile meant doing certain types of things like "smart defaults" (i.e. no explicit documentation of the wiring) don't seem anathema to most developers any more.&lt;/li&gt;
  &lt;li&gt;Ruby means many more "smart defaults" and other time- and finger-savers are possible. (Yes, the same is accomplishable with LISP, but, hey... &lt;em&gt;come on&lt;/em&gt;... &lt;strong&gt;&lt;em&gt;LISP&lt;/em&gt;&lt;/strong&gt;.)&lt;/li&gt;
  &lt;li&gt;Before Rails, most frameworks of this sort fell into two categories:
    &lt;ul&gt;
      &lt;li&gt;Do the right thing. (MVC frameworks)&lt;/lil&gt;
      &lt;li&gt;Do the simplest thing. (PHP)&lt;/li&gt;
    &lt;/ul&gt;
    Rails cleverly decides to merge these two philosophies into one devilishly pragmatic philosophy:
    &lt;ul&gt;
      &lt;li&gt;Do the simplest thing that's right.&lt;/li&gt;
    &lt;/ul&gt;
    (Wait, was that sarcasm? I can't tell.)
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll give you an example of #3 there, and it's with the Rails &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migration&lt;/a&gt; API that I used for the first time today. (The canonical example is &lt;a href="http://ar.rubyonrails.com/"&gt;ActiveRecord&lt;/a&gt;, the stupid easy Model API, followed by the insanely helpful integration of the &lt;a href="http://ap.rubyonrails.com/"&gt;View and Controller&lt;/a&gt;. I am, however, 1)trying to be different, 2)trying to educate, and 3)trying to point out how well-rounded Rails is. If you haven't seen the 15-minute video on rubyonrails.com, though, maybe you oughta start there and come back here if you want more.)&lt;/p&gt;

&lt;p&gt;But first, some background. I started on my first "real world project" about two years ago. In the context of this background snippet, this means that two years ago was my first experience with a database, and more specifically, my first experience dealing with the maintenance and development of an application whose behavior was strongly correlated to a specific database schema (&lt;em&gt;phew!&lt;/em&gt;). Once of the problems that this project had, in a big way, was version control and integration, and I made it my goal to fix it, first with the code, and then with the database schema &amp;amp; data.&lt;/p&gt;

&lt;p&gt;Tackling the code took a lot of time setting up CVS and educating people on how to use it, a lot of Ant coding, a lot of testing of the Ant build, and, mostly, a lot of patience making sure to transition only one thing at a time. It was painful at times, but ultimately successful. (Well, until I left, I'm told, but that's another story.) I managed to create a build script that successfully built from a CVS tag in one click, and managed to institute a weekly build to an integration server where people would test their changes (which I would pull from &lt;tt&gt;`cvs hi`&lt;/tt&gt; or &lt;tt&gt;`cvs pa`&lt;/tt&gt; and send out in a friendly little email). This is government we're talking about, so that's fuckin' &lt;em&gt;A to the G-I-L-E&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Tackling the database was going to be my next task, and I never got to it, unfortunately. When I first started reading up on database versioning, well, I was appalled. I was shocked and dismayed that the industry &lt;strong&gt;DIDN'T GIVE A FUCK&lt;/strong&gt; about database versioning. The accepted solution, in almost all cases, was to make the database the bottleneck. Surround it with tons of paperwork, make it take 7 weeks to actuate a change, and basically make it so people didn't want to change the database very often, so you didn't have to deal with versioning it very often.&lt;/p&gt;

&lt;p&gt;I started finding little papers here and there in the pockets of Agile communities that were rapidly forming, where people were beginning to realize how stupid an idea this was, and were looking for solutions. "Well," they said, "it's so gosh darned easy with code. You just make a central repository, throw &lt;tt&gt;diff&lt;/tt&gt; and &lt;tt&gt;patch&lt;/tt&gt; at it, et voil&amp;agrave;, CVS." But they cautioned, "It's not so easy with databases, though. You can't just &lt;tt&gt;diff&lt;/tt&gt; and &lt;tt&gt;patch&lt;/tt&gt; willy-nilly. You've got test and configuration data to deal with. You've got integrity constraints which restrict the ordering of 'patches,' and you've got hundreds of database dialects that make writing a general-purpose database differ next to impossible." I cried. I &lt;em&gt;so&lt;/em&gt; wanted version control on our database, but I didn't want to have to write &lt;cite&gt;Oracle Diff 9i&lt;/cite&gt; from scratch, especially since the DBAs weren't giving me any help.&lt;/p&gt;

&lt;p&gt;The plan I had settled on, and that would've been implemented had I stayed about two months longer, was a cheap little thing that involved putting all the &lt;tt&gt;.sql&lt;/tt&gt; artifacts in CVS, and never fucking with int, test, or prod except through doing "a build." &lt;em&gt;Ah, change management...&lt;/em&gt; I would then sigh. The build was to be as follows: a shell script would run a &lt;tt&gt;`cvs pa`&lt;/tt&gt; on two tags, &lt;tt&gt;sed&lt;/tt&gt; the output to display only the added lines, and to error out if there were any removed lines (if you want to remove a column, you have to stick an &lt;tt&gt;ALTER TABLE yada yada..&lt;/tt&gt; in CVS), and pipe the result to a &lt;tt&gt;upgrade_tag1_to_tag2.sql&lt;/tt&gt; file. The result would then be thrown at the database.&lt;/p&gt;

&lt;p&gt;Except... wait! What about all that environment-specific configuration data, and those integrity constraints? How was the complexity of those being handled? Well, it wasn't. For that, my solution was, "Who do I look like, a DBA? Go hand-edit the &lt;tt&gt;upgrade.sql&lt;/tt&gt; file already." But I wasn't really happy with that solution. It was simply the best I could come up with with the tools I had at hand.&lt;/p&gt;

&lt;p&gt;Two months later, enter Rails &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migration&lt;/a&gt;. I've been learning Ruby since mid-June, but until recently, Rails had been on the sideline for me. Whatever. Just another framework. Recently, though, I've been starting to go to a little weekly codefest started with a couple of people, with the intent to learn Rails. We're trying to establish a means (through sourceforge, sadly) to do distributed development the other 166 hours of the week, and the first hurdle we came across is the database. Surprise. How do we make sure that the 4 of us are all dealing with the same database schema locally? We could just serve up a database on the public internet, but that would royally suck (if only because we want to be Agile and have "private workspaces"), and nobody has the gear to handle that, apparently.&lt;/p&gt;

&lt;p&gt;So I mention, "Hey, I've read a little about this &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migration&lt;/a&gt; thing. It was included in Rails circa 0.12 or 0.13, so it's pretty new, but I think it might be what your after." Within 10 minutes of messing around, we've figured it out and committed two &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migrations&lt;/a&gt; to CVS. By now, I've linked to &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migrations&lt;/a&gt; five times, so you should've read up on it by now. For those too lazy to have clicked the link, it's a way to specify schema changes in Ruby. You can do:&lt;/p&gt;

&lt;code&gt;&lt;pre style="overflow:auto"&gt;class MyFirstMigration &amp;lt; ActiveRecord::Migration
  def self.up
    add_column :table_name, :column_name, :data_type
    #you can also just shove in "straight" SQL via the execute method, if you like
  end
end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;And then run &lt;tt&gt;`rake migrate`&lt;/tt&gt; at the commandline. The &lt;a href="http://docs.rubyrake.org/"&gt;Rake&lt;/a&gt; task will notice the new migration, notice that it hasn't been applied yet on the database, and apply it. You may also provide a down method to support rollback.&lt;/p&gt;

&lt;p&gt;So, yeah, big whoop. It sounds like what I was proposing, but with some Ruby thrown in for no good reason. Eh?&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;My way required you not only to be rigorous about committing all database changes into CVS, but about tagging it obsessively, in order to pull off the &lt;tt&gt;`cvs pa`&lt;/tt&gt;. This way, you still have to keep on top of CVS, but you can get away with just typing &lt;tt&gt;rake migrate&lt;/tt&gt; -- &lt;a href="http://ar.rubyonrails.com/classes/ActiveRecord/Migration.html"&gt;Migration&lt;/a&gt; will figure out how much or how little to update.&lt;/li&gt;
  &lt;li&gt;This way supports rollback.&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;What about those environment-specific configuration variables I talked about, like, seven pages ago? Well, here's the thing. By making the pragmatic leap to do this in Ruby ("Why am I doing SQL in Ruby? You're a total-fucking-nutcase," I hear all my readers shouting in unison, mostly because I know my only readers are a school of magical fish-elves that live in my head, and I really &lt;em&gt;do&lt;/em&gt; hear them shouting in unison right now), you are afforded the ability to do whatever logic you so desire in your migration script. For example:&lt;/p&gt;

&lt;code&gt;&lt;pre style="overflow:auto"&gt;class AMuchCoolerMigration &amp;lt; ActiveRecord::Migration
  def self.up
    title = case RAILS_ENV
      when 'development' then "Suck My Kiss"
      when 'test' then "Jake's Automatic Underground Fishhead Emporium"
      when 'production' then "A Title The Reading Of Which Won't Trigger My Customer To Fire Me"
    end
    #the following line creates a database row, you nincompoop
    SystemSettings.create :param_name =&amp;gt; 'application_title', :param_value =&amp;gt; title
  end
  def self.down
    row = SystemSettings.find_by_param_name('application_title')
    #the following lines deletes it, foo
    row.destroy if row
  end
end&lt;/pre&gt;&lt;/code&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Just as important, though, is what it isn't: An overly complex solution that tries to do everything. It doesn't figure out how to properly order SQL calls so that integrity constraints don't barf. It provides a mechanism to make manual ordering of that stuff ass-simple, and leaves the actual thought process to you. Sure, the automatic ordering would be nice, but this is a much, much, much simpler way that gets me 90% of the way there. Seriously, you could have coded Rails Migrations in, like 2 hours, or maybe a day if you're, like, scared of code or something. You're not scared of code are you? No, you just &lt;strong&gt;didn't&lt;/strong&gt;, you &lt;em&gt;fucking moron&lt;/em&gt;. Seriously, what the fuck is wrong with you?&lt;/p&gt;

&lt;p&gt;So, no, Rails is not a magical hoop-ah solution that cleans your chimney and wipes your nose. It is, however, a good balance of pragmatism and idealism.&lt;/p&gt;

&lt;p&gt;(For that matter, so is Ruby, but that's a-whole-nother cake.)&lt;/p&gt;

&lt;p&gt;Wow. I kind of veered there. Sorry. To answer your question, JwJ, no, I don't believe Rails &lt;em&gt;did&lt;/em&gt; invent something new. I think the industry giants probably thought about it a couple times, but couldn't figure out how to make a profit off of it. I imagine it occurred to the academic greats on more than one occasion, but held their interest as tightly as any of their undergraduate students held onto his sobriety. I think the &lt;em&gt;rest of us&lt;/em&gt; are either too god-damned lazy, or just fucking morons.&lt;/p&gt;

&lt;p&gt;XOXO,&lt;br /&gt;
Devin&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;BTW, in TextMate, if you select some text and hit Ctrl-Shift-W, it'll wrap the selection in &amp;lt;p&amp;gt;...&amp;lt;/p&amp;gt; for you. It then selects the letter 'p' in the start tag -- if you type over it, it automatically updates the end tag. &lt;em&gt;Sweetness!&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112795863734292822?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112795863734292822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112795863734292822' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112795863734292822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112795863734292822'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/dear-devin-why-is-rails-so-god-damned.html' title='Dear Devin: Why Is Rails So God-Damned Hot?'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112725973237425735</id><published>2005-09-20T16:39:00.000-07:00</published><updated>2005-09-28T20:00:24.533-07:00</updated><title type='text'>My Two Favorite Current TV Shows</title><content type='html'>&lt;p&gt;&lt;a href="http://www.sho.com/site/barbershop/home.do"&gt;Barbershop&lt;/a&gt; is funny. It is on &lt;a href="http://www.sho.com/"&gt;Showtime&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.fxnetworks.com/shows/originals/overthere/main.html"&gt;Over There&lt;/a&gt; is not funny. It is on &lt;a href="http://www.fxnetworks.com/"&gt;FX&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you don't have FX or Showtime, then I guess you're &lt;a href="http://www.amule.org"&gt;S&lt;/a&gt;&lt;a href="http://www.emule-project.net/"&gt;O&lt;/a&gt;&lt;a href="http://xdonkey.macdk.net/"&gt;L&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112725973237425735?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112725973237425735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112725973237425735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112725973237425735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112725973237425735'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/my-two-favorite-current-tv-shows.html' title='My Two Favorite Current TV Shows'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112725931761891383</id><published>2005-09-20T16:34:00.000-07:00</published><updated>2005-09-28T19:59:44.693-07:00</updated><title type='text'>Dear Daniel Berger,</title><content type='html'>&lt;p&gt;I had promised you I would take a look at your &lt;a href="http://www.brockman.se/software/hyphen-ruby/long-live-the-parens.png"&gt;LISP-with-commas+&lt;/a&gt; &lt;a href="http://www.brockman.se/software/hyphen-ruby/hyphen-ruby.rb"&gt;pre-processor&lt;/a&gt; one day. I still haven't. I apologize. I really do. I should just try it out. Right now. It's not like it won't interoperate with Rails or something. I'm not sure why I'm not doing that. Probably just gets shoved to the back of my brain behind too many other things. Sorry.&lt;/p&gt;

&lt;p&gt;There. Does that get me out of the requirement, now? :) (Just kidding...)&lt;/p&gt;

Hugs and kisses,&lt;br /&gt;
Devin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112725931761891383?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112725931761891383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112725931761891383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112725931761891383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112725931761891383'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/dear-daniel-berger.html' title='Dear Daniel Berger,'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112709331900747991</id><published>2005-09-18T18:22:00.000-07:00</published><updated>2005-09-18T19:10:54.630-07:00</updated><title type='text'>Mainstream languages: you may now bow to Ruby.</title><content type='html'>&lt;code&gt;&lt;pre style="overflow: auto;"&gt;require 'rubygems'
require 'binding_of_caller'
module Kernel
  def debug
    Binding.of_caller do |b|
      var_types = ['local','instance','self.class.class'] #,'global']
      var_types.each do |var_type|
        puts "#{var_type.split('.')[-1].capitalize} variables:"
        eval(var_type+"_variables",b).each do |var|
          puts "#{var} = #{(eval var,b).inspect}" unless var =~ /gempath_searcher/
        end
      end
    end
  end
end&lt;/pre&gt;&lt;/code&gt;Perfect for script/breakpointer in a Rails app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112709331900747991?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112709331900747991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112709331900747991' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112709331900747991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112709331900747991'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/mainstream-languages-you-may-now-bow.html' title='Mainstream languages: you may now bow to Ruby.'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112708871621520319</id><published>2005-09-18T17:06:00.000-07:00</published><updated>2005-09-28T20:24:35.216-07:00</updated><title type='text'>A snippet of the running monologue in my head (polished up a bit)</title><content type='html'>I figured this made more sense here than sitting around in some unsaved window in &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;.
&lt;blockquote&gt;&lt;p&gt;... I mean, look no further than the English language. It has the reputation for being one of the hardest languages to learn. Not just as a second language, but as a first language. How many people do you know who speak with proper grammar most of the time? How many high school students? How many people actually &lt;span style="font-weight: bold;"&gt;understand&lt;/span&gt; the rules of grammar that they're applying subconsciously? The English language has a Usability rating of "total piece of shit."&lt;/p&gt;

&lt;p&gt;On the other hand, the same language has a reputation for being one of the most expressive. Shakespeare, Joyce, &lt;a href="http://qa.poignantguide.net/"&gt;_why&lt;/a&gt;... The language has an impressive ability to let us cull from the innumerable expanses of thought, and to enable us to distinguish between the slightest differences in inflection. It is an &lt;span style="font-style: italic;"&gt;advanced&lt;/span&gt; language, horribly difficult to learn, but incredibly powerful for those that master it.&lt;/p&gt;

&lt;p&gt;The HCI school of thought that says that says "documentation is a smell, preferences are evil, etc." is bullshit. There's a reason vi and emacs exist today, and it's not nostalgia. These editors fall under the category of "advanced," allowing power users to edit like a mother-fuck. There is room for Notepad, vi, and everything in between in the zoology of text editors...&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112708871621520319?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112708871621520319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112708871621520319' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112708871621520319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112708871621520319'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/snippet-of-running-monologue-in-my.html' title='A snippet of the running monologue in my head (polished up a bit)'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16876791.post-112708836060431811</id><published>2005-09-18T17:04:00.000-07:00</published><updated>2005-09-18T17:06:00.606-07:00</updated><title type='text'>I hate you, Jerry.</title><content type='html'>I thought &lt;a href="http://www.dungeonmajesty.com/DMteaser_lg.mov"&gt;this&lt;/a&gt; deserved its own blog, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16876791-112708836060431811?l=twifkak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twifkak.blogspot.com/feeds/112708836060431811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16876791&amp;postID=112708836060431811' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112708836060431811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16876791/posts/default/112708836060431811'/><link rel='alternate' type='text/html' href='http://twifkak.blogspot.com/2005/09/i-hate-you-jerry.html' title='I hate you, Jerry.'/><author><name>Devin</name><uri>http://www.blogger.com/profile/15911239330255379726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
