A few years ago I started an atheist-themed blog at nogodsallowed.wordpress.com (which now redirects here) where I ranted about various religious topics. I spent the majority of my life as a flag-waving Christian fundamentalist and gave up my religion somewhere in 2005 or so. In 2007, I started that blog because for me, writing helps clarify my thoughts and ideas and if there’s one thing the internet needs, it’s another bitchy atheist.
I ran that blog anonymously because I felt it gave me greater freedom to express my opinions without the risk of being outed by friends, family, or coworkers. I’m not so concerned about anonymity anymore, but it helped me in the early days. Since that blog was just laying there lonely and dying, I figured I’d put it out of its misery and bring the contents over here because this domain name is just freaking awesome.
The contents are now squished into this history of this blog, now going back to 2007, where you can read all about my travels as a newly deconverted wanderer.
There are a few favorites of mine, like the time I visited Resurrection Life Church, a local mega-money church, or my post about the hordes of Easter zombies briefly mentioned in the Bible after Jesus died. I’ve also got a bunch of pages detailing my PRK laser eye surgery, which seem to be popular among people considering the operation. Now that I’ve got that one here, hopefully I’ll be able to respond a little more timely to all those PRK questions.
It’s kind of fun for me to go back and read all the crap I wrote along the way. It’s a nice little trip down memory lane. Enjoy!
Team Foundation Server has never been friendly when it comes to the complicated love triangles that inevitably rise from wanting to merge between three different branches. The only option we have is, at some point, to create a common merge point using a baseless merge. These tend to be pretty finicky and if you don’t plan on it up front, are nearly impossible to deal with.
Our typical use for three way merging arises when we branch from the trunk into an internal developer branch, and at the same time create a partial branch (just views and content) for a third party design group who we want isolated from the rest of the team. We need to be able to merge our internal code changes to and from their branch. These scenarios are usually project-based, and we get by with the fact that we can create both the design branch and the internal branch at the same time. When you have that synchronization, a baseless merge can be done between the two new branches to get a merge history which sets you up for a project lifetime filled with happy merges.
However, we ran into another scenario the other day and I didn’t know whether we’d be able to handle it. Our client has a large codebase and our general strategy is to keep the Trunk in synch with what’s live or approved to go live (though we’re contemplating another “Production” branch which may make things easier). During the October to December timeframe, the busy season hits the websites as customers buy their product and development on our side slows down, at least on the day to day small projects. We can’t leave large projects in the trunk during this time and risk accidental deployment.
We will have several large projects going on which won’t be released for several months. One of these projects is to finally upgrade all our disparate systems to .Net 4 and MVC 3. At the same time, we’ll have at least one more large project separate from the upgrade, but looking to use a lot of the fun new MVC 3 functionality. We need a three way merge. We may have other projects coming down the pipe during these months as well, so I wanted to find a way to use baseless merging to assure that all new projects could be merged with the Upgrade branch without polluting the trunk.
Future projects won’t have the same exact starting point as the designer branch scenario, but I found a way to mimic starting from the same point. It goes something like this.
Assume you have Trunk and Upgrade branches which were branched months ago and each has a lot of changes since then. You need to branch from Trunk into the new project branch, Foo, but then to also get the updates from the Upgrade branch.
- View history on the Upgrade branch and find the changeset at which it was branched. We’ll call that X.
- Branch from the Trunk to create Foo, but branch from changeset X.
- From the command line, do a baseless merge from Upgrade to Foo, specifying changeset X and including the /discard option. This causes it to only create the merge history, which is fine because the code is identical when you specify changeset X.
- Now you’ve got your merge history. You can merge up from the trunk to get the latest of its code, and you can merge from the Upgrade code to get the latest of its code, and everyone’s happy.
And there you have it. Of course, now that I think about it, I’m wondering whether I’m over-complicating things. I bet I could get the same end result by merging the latest from Trunk to Upgrade, branching from Trunk to Foo at latest, then baseless merging from Upgrade to Foo and accepting all edits. For some reason, the bullet list above seems cleaner to me but they probably boil down to the same thing.
I guess the moral of the story is this: Baseless merging is going to be a nightmare if you don’t plan for it up front. The whole reaching into history for a common merge point probably has other uses as well, and I wonder whether something like this could also be useful to bring together two separate branches which weren’t baseless merged up front. I’ll investigate that another time. In the meantime, I’ll dream wishful dreams of distributed repositories like git and Mercurial, which live in a land where this type of thing is supposedly mundane.
Over the summer a big silo went up in the middle of a nearby empty field. Nothing out of the ordinary there. Then one day, they decided to start welding this thick metal shell around it, about double its radius and tapered at the bottom. Every once in a while I’ll see little guys walking around the inside of the metal cylinder building it higher and higher in large chunks.
I grew up in a small farm town and I thought I knew my silos. This one just seems so diabolical; more likely to carry explosives or snakes, or explosive snakes, than corn or grain. Maybe there’s a missile in there, or some top secret government project. It feels like it’s right out of the Cold War era. I probably shouldn’t ask too many questions, lest I risk being drugged and thrown in there myself.
I keep forgetting about that fun little yield statement we’ve got in C#. It’s that one that lets you magically create an enumerator out of a normal method.
The other day I was feeling lazy. I had a bunch of views that all shared the same model which allowed for a bunch of different editors for different types of data. Some of them needed a list of features pulled from the database. The easy thing to do would be to just slap that feature query result onto the model, but it only needed to be used by a single view and it was an expensive query with some other nonsense happening to the list in the controller, so it was slowing down all other views unnecessarily.
I then remembered the yield statement and wondered whether it would lazy-load, hoping that my slow loading method would never be called unless the view actually used it. It worked!
And the output:
Test 2 (just peeking in the enumeration)
GetFeatures was called
First entry in list: a
Press any key to continue . . .
Of course, all this lazy loading nonsense could be skipped if we just built the query logic inside the model’s collection get method, but that wouldn’t be very MVCy, now, would it? I’d rather set the list in the controller.
As I was driving home today I got passed by the Jesus Mobile.
I like the stance. It’s got kind of a Kung Fu or Jew-Jitsu aspect to it, like he’s ready for action and about to start smiting. Or, as my brother put it, looking like he just shoved somebody onto the subway tracks.
I hope to see this thing in ArtPrize next year. It’s way better than this year’s first place Hover-Jesus.
There are a few more masterpieces to choose from on the artist’s website in case you’re thinking about upgrading the paint job on your car. A couple of them are all blood and gore Jesii, meant to make you feel bad, but my favorite has to be Sexy Alluring Jesus, showing off a bit of skin and winking with that come hither look, beckoning you to stick your finger in him. Hot.
My pace has slowed through Mein Kampf and I’m still less than a third of the way through it. I’ve been taking breaks and getting reacquainted with my old friend, Edgar Allan Poe; a companion more suitable for these autumn evenings.
But back to Hitler. One of his comments caught my eye, as he was discussing suitable ways for advancing a philosophy near the end of the fifth chapter:
Any attempt to combat a philosophy with methods of violence will fail in the end, unless the fight takes the form of attack for a new spiritual attitude. Only in the struggle between two philosophies can the weapon of brutal force, persistently and ruthlessly applied, lead to a decision for the side it supports.
Proposing violence as a means to convincing opponents of the merits of an argument. That sounded familiar.
It reminded me of his experience as a youth arguing politics with workers in Vienna near the beginning of chapter two. The men with whom he was arguing became fed up and threatened him with violence. I went back and reread that section, expecting to find a Hitler condemning such use of violence. But I didn’t. Instead, he never seems to condemn their threats but only complains a little bit, then seeks to do more research to make his argument clearer. And of course, he spends a while ranting and raving about Jews.
I actually don’t think he ever made a connection, or ever truly thought of his opponents’ threats as wrong. He never realized that by resorting to violence, that side is really just admitting defeat. Instead, it seemed to have become one of his core tactics and here, he admits it plainly. Was there anything in this guy’s head besides a nationalistic fury? He spends so much time attacking Marxism, Jews, and anything else you can think of, and all he offers in return is a feeling of how cool it is to be German. Was his nationalistic leaning just a tool to get rid of those he deemed undesirable? His comments in this chapter seem to point to him thinking that it’s just a necessary filler to be used in eradicating other philosophies.
It’s hard not to get a little cynical about the annual ArtPrize competition in Grand Rapids. The event name itself gives me a twinge of agony every time I consider it. ArtPrize. It cuts right to the point in an almost patronizing way. In case we find ourselves walking around downtown and forget why we’re seeing all sorts of art, it’s because there’s a prize involved. It’s like the teacher trying to dumb down a concept for the lowest common denominator in class.
Don’t get me wrong. I usually have a lot of fun walking around and taking in all the different works of art around the city. The key is that you have to get off the beaten path. It’s a competition in which anyone with a text-ready phone can be a judge. The result is that the usual high traffic areas are often filled with large and memorable gimmicky pieces that, while often fun to look at, aren’t really the most artsy pieces. They often lack any real depth and are only there to collect votes, like last year’s giant steampunk pig (which was awesome, by the way) or this year’s guys painted bronze acting like statues (blech).
In the interest of full disclosure, I know absolutely nothing about art. That much should already be obvious.
Which leads me to my rant about this year’s top ten. There were three in particular that made me facepalm when I found out they were finalists. There were a couple bronze-painted construction workers who, for the most part, stood still except for the occasional surprise movement that you could see in any tourist-ridden city in the world, as well as a wax-museum-grade sculpture of Grand Rapids’ only claim to fame, America’s first accidental president, A Narcissistic Gerald R. Ford checking out his own bust.
But those two are merely tasteless hors d’oeuvres compared to this year’s winner. That’s right, I’m talking about Hover-Jesus. Er, I mean, Crucifixion, by Mia Tavonatti. Here he is, in all his hackneyed glory, soaring through the clouds on his trusty airship made of wooden beams and rusty nails:
This thing is made of tiny shards of stained glass that she individually selected and carved. There are even little glass circles for his nipples. It must have taken an awful lot of time, and as our previous ArtPrize winners have shown, that’s what we Grand Rapidsians adore. Our votes tend to appreciate hard work over content. She had an entry last year using the same medium and won second place. The only thing missing was Jesus. That correction netted her $250,000 this year. Congratulations, Mia, you gamed the system. I only wish I had thought of it first.
Which is why I’m announcing my entry for next year’s competition. I’ve learned the ArtPrize game. Years one and two showed me that whatever I make, it has to be big. Last year’s entry also showed me that you don’t even have to create art; you can get by with just a pencil, a wall of paper, a projector, and some photograph you find in granddaddy’s shoebox. Seriously, the dude who won last year just used a pencil and a projector to magnify an old military photograph from 1921. He’s like a human laser-jet printer. It was genius.
All I need to do is combine that with what I’ve learned about Jesus to make my vision complete. I submit to you my proposal for a thirty foot tall, pencil-drawn reproduction of this masterpiece I found wandering around the internet:
I’ll have some stiff competition, but my art will be loved. Next year, vote for me. And Jesus. And Santa. And 9/11. To vote otherwise would be unAmerican.
Actually, don’t vote for it. Vote for what you like, but for Hover-Jesus’ sake, just make sure that the next time you visit ArtPrize, you go off the beaten path. There is a lot of good stuff out there if you take the time to look. Just try and avoid all the gimmicky kitsch so prevalent in the open spaces.