Monday, November 09, 2009

a petition for cat 6 (yep, that's right, i skipped right over cat 5)

This will be short, in keeping with my first cyclocross experience.

Much like my last race, I have no idea why I decided to do this. I certainly hadn't been training a lot lately (read, at all), nor even riding terribly much. The notion to do a CX race was probably fueled by a healthy dose of "how bad could it be?"

The answer, as it turned out, was horrible.

At any rate, it's a Tuesday afternoon and I stumble across a link for an upcoming CX race. On Sunday. Like this Sunday. I think about it. I think some more. I think, "how bad could it be?" They're even marketing it as "rolling out the red carpet" for beginners and MTBers. So I emailed my once-upon-a-time climbing partner Mike who I know to be a CX racer and tell him that I'm thinking about entering a race. His response:

"oh, you silly, silly man"

Over the next couple of days I get Mike's general take on what to expect and what to do in the limited time available to me. I watch and practice some tips on dismounting and remounting for clearing obstacles (turns out this isn't that hard). I buy some skinnies to replace my big fat 2.1 MTB tires (where I discover to my dismay that the manager of the LBS is riding the same class as me). I watch inspirational videos like, "Cyclocross: An Hour in Hell," which, despite the title, does not really delve into the more hellish aspect of things and makes it seem like a big party with beer and bikes. Like you know, fun. Mike has warned me that fun in this context should be in quotes.

So Sunday arrived and I make my way to the Tacchino Ciclocross. Lindsey at registration managed to pierce my disguise and pegged me as a first-timer as I completely cocked-up pinning my bib to my jersey (btw, how on earth do people manage this without a second set of hands?). I stretch for a bit and then get to spinning around looking [mostly in vain] for fellow MTBers. Due to time constraints (overslept) I didn't pre-ride the course. I'm not terribly upset by this as I think it will only tire me out or scare me. Or both. I determined I was better off just flying blind.

I finally lined up at the tail end of a massive (at least to me) pack of somewhere around 100 riders. The coordinators announced that due to the shortness of the course, lapped riders should drop to allow for more accurate times for the leaders. A fellow MTBer mutters, "great, I just paid for a 15 minute race." I make some small-talk with riders around me. And then we're off.

It's a short bit of road before a turn onto the grass and then a hard right off-camber uphill turn which grinds the pack to a halt. I'm surprised at the twitchy-ness of all the CX bikes as I bob and weave around a few riders. I actually tiptoe into a bit of confidence here. If this is enough to screw with these riders, I'm set. This is easy riding and last time, once I established my place, I was able to hold it.

Another turn and climb is followed by a fast downhill followed by a big sweeping off-camber turn. Again, I'm completely confident in this - this isn't hard at all. I see a flat section ahead and then a huge hill.

This is when the passing both starts and ends. A number of riders whizz past me and on up the hill. I don't know if I'm technically DFL but it sure feels like it. But I'm not out yet. There are two riders 10 yards ahead of me and another couple 30 yards beyond them. I'll just keep pace and try not to blow up.

Some twists and turns around trees follow, a run up a gravel path, a U-turn, back down, another 90 degree turn and then out into the main pavilion/pit area for the first and only obstacle. This is straightforward and I'm back in the saddle easily. A hard right-left off-camber turn (someone will break their ankle here later) then then downhill to some dirt double-track with an easy to carry uphill. A long-ish grass uphill is followed by a series of 180 turns, a hard right-left-right off-camber, and then downhill onto pavement and back up.

End of lap one.

I'm heaving at this point. I haven't blown up yet, but I'm not too far off. But I'm still on the rider in front of me and determined not to quit. Lap 2 goes along as these things do. There was one uplifting moment as I passed the pit area and someone yelled out,

"Keep on him! He's lollygagging up there."

I smile grimly but know that it's true. I can see him starting to fade and know that I at least have the determination (if not the fitness) to pass him soon.

Lap 2 ends and we're back in the woods. I'm grinding out a muddy hill when I hear someone bellow behind me,

"GET OUT OF THE WAY!"

And just like that I'm lapped and my race is over. I'll be honest and admit there was a certain sense of relief. I'd known this was coming, I just didn't know when. I pulled over and let the lead pack go by. Some of the riders even thank me. I remount and keep pedaling figuring that I'll ride out the course until I can bail out without getting in the way. I walk it up the big hill and read the sign at the top:

"If you can read, this, you're probably walking."

Too true. I rode the next twisty section and then back out to the field where I bailed. I pedaled over to the officials tent and reported bib 189 as out and then moved to just before the finish line, or what I like to call "Losers Lane."

While physically I resemble the turkey, I think of myself as more of the hunter here. Not from the careful pursuit and capture of prey perspective, but rather more from the seeing another rider far off in the distance and knowing that I will never catch them perspective.

Several other lapped riders joined me as we watched the rest of the field pour in. Chatted with Adam (40th) from The Bike Lane (the aforementioned LBS manager) and then made my way back to the car to change. At this point, there was only one way to salvage the day - sausage and beer.

Back at the car, I ran into fellow rider and, as it turned out, geek Aron (who I just learned placed 33rd). We made our way back to the pavilion to watch some races, talk shop, and down sausage, pommes frites, and beer. I will say that the atmosphere at these races just rocks. Cowbells are clanging, people are shouting, the band is playing and the announcer is alternating between belittlement and encouragement. It really is a party and highly spectator friendly.

So, closing thoughts. It's hard to put a positive spin on this type of thing. I could hang my helmet on the fact that nearly 40% of the field didn't place. That I was out of any kind of condition and riding a bike ill-equipped to the task at hand. But in the end, I think, there is some value in what Jennifer said. That stepping outside your comfort zone is always a good thing. That at least trying is important. It's hard though not to hear that as "loser talk," but she's right of course. Still sucks to not even get to finish.

Mike has already asked when my next race is. I don't know that I'm there yet. It's something that I plan to do again. I think I'd just like to be better prepared.

Sunday, October 11, 2009

psyched about being pumped, and pumped about being psyched

I don't know exactly what precipitated all this. It was no doubt influenced by the retirement of my '95 vintage Trek 7000 and the purchase of a Gary Fisher Cobia (all hail the 29er!), but exactly what made me want to enter an actual race is completely beyond me. I'd contemplated racing years ago when I was hitting Accotink and Wakefield 4-5 days/week while much younger and much fitter.

Regardless, I knew that the Wednesdays at Wakefield series existed and that seemed like a more than reasonable goal - after all, it was nearly a year off. At some point during all this internal musing I found out about the Monster Mash - a charity race on 10/10.

Om nom nom nom

The beginning of October though? It's mid-September already. There was no way I could get in shape for a race in 2-3 weeks - charity or not. I mean Bruce and I were doing our usual Tuesday night rides where he would regularly kick my ass. A race would be a whole different thing. I know it's not supposed to be - this isn't a livelihood nor even something I "do." It should be no pressure but I'm not the type. I'd be bitter if I came in last. Or vomited.

I decided to make a deal with myself. After some digging around on more-mtb.org I found the course map. Armed with this and the lap times from last year, I decided to run a lap and time myself. If I was completely off the pace I wouldn't enter, but if I ran an OK time I would.

The following Saturday I hit the course. I tore through familiar territory (if not in the usual sequence that Bruce and I do it) at what I thought would be race pace and without our usual stops to talk. I hit the finish line heaving and looked at my watch.

21 minutes.

Crap. I was both pleased that I could finish in a reasonable time and disheartened at the amount of effort expended to complete just one lap when the race would demand two. Not a lot of training time between now and race day.

But I kept at it. More riding days and harder ones. Bruce continued to punish me - albeit in unintentional ways. I would feel like I was getting faster and then we would go out and he would still be on my wheel the whole time.

Going into the week before the race I was amped. I had only played team sports growing up (except for climbing where the only competitor is internal), so the prospect of actually racing was a novel one. By Friday though I was back to nervous mode. Friends at work were surprised in how this anxiety manifested itself (for those of you scoring at home, the answer is 3 (low to be sure - I was as surprised as anyone)).

I slept surprisingly well the night before the race. Got up early, ate a solid breakfast, got in the car and hit play for the Monster Mash playlist on my iPod.

"Gimmie Some Lovin'" by the Spencer Davis Group.

This is a very good sign.

I was at Wakefield by 8:30 for a 9:30 start time. I picked up my bib number, stretched for an inordinate amount of time, and then began my warm-up ride. Easy cruiser stuff on the river trail and then into the blue loop. Not hard by any means but more attention needed to be paid. The rain the night before and slicked things up and I certainly didn't want to crash warming up of all things. After 1/2 hour I'd just about had enough and just wanted to get started. I hit the start line around 9:20 and found the beginners group.

Easy enough to find them - huddled up in the back like a bunch of 7th graders at a dance.

For those reading that don't know (and I count myself among you until recently) they stage races likes these in waves. Experts run first, then sport a minute behind, then beginners another minute behind etc. In this way you can get a lot of racers on the course without slower groups interfering with faster groups and given even the slowest of lap times, it's unlikely that anyone will get lapped.

So I was way in the back. Actually too far back at it turned out. What we thought was a race class ahead of us turned out to be the less nervous beginners who didn't want to huddle near the back. All told it ended up being a field of 31 - though it felt much bigger. Especially as a first-time racer.

It was also funny - each person eyeing up the opposition trying to figure out if you were faster than them. I heard one guy behind me say that he had just ridden Wakefield for the first time a few days ago and it had scared him silly. I figured I could at least beat him. In truth though, that really impressed me. I ride every week at Wakefield and had no confidence in my ability to race and this guys signs up having never ridden off-road before. I should have more of his attitude.

Helped that I had the correct inspiration on my bike.

Only a Mille Bornes Hall of Fame member would have the temerity to do this

Luckily I ended up being on the left side of the trail as it affords the best line up the start hill that would weed out the pack.

And suddenly we were off. I remember having this "holy crap I'm racing" thought as I clipped in my left foot and started cranking. Bizarre riding with that many people.

The pack was still thick as we hit the hill and started to quickly thin out as racers got on non-optimal lines or had racers in front of them spin-out and stop on the loose gravel. I manged to keep my line until close to the top when I had to bob and weave around a few riders that lost traction. I hit the downhill to the powerlines close to the front of the field, though stuck behind riders going slightly slower than I would have liked (especially on a downhill).

I hit the always less than fun Salamander trail still in good position and just tried to get though it as fast as possible and not lose any time. A group of around five of us (hard to know how many were close behind) crossed the bridge and came on the only log crossing of the course. There is a way around but it's much slower so we all lined up to clear it. The leader of our group pulled up and then just completely endoed over it in a spectacular fashion. The two riders behind him had to stop but the rider in front of me and I were just far enough behind to swing around the alternate trail and head up the hill.

An easy downhill followed and then back onto doubletrack for a bit before the creek trail. I grabbed some water and made sure to stay on pace with the rider in front of me. I also felt someone on my wheel, we'll call him Patrick because, as it turns out, that's his name. He wasn't trying to pass but definitely stayed on my wheel throughout.

The river trail was fun as always and hitting the double track again, Patrick and I were still hot on the next rider. Back onto singletrack through the woods and then out onto the powerlines and the newly refurbished race trail. I kept up a steady pace through here and things were going well until we caught a rider from a previous wave who had stopped on the mini-climb before the longer powerline climb. We came to a dead stop. There was some clusterfuck-ery as I offered to let Patrick pass which he either declined or didn't act quickly enough and then I was back on and pedaling away. But the nonsense had cost me as I would catch sight of the rider ahead periodically but never in a position to pursue (though, as it turned out, he only finished 12 seconds ahead. I guess the lesson to learn here is you might be surprised how close people are in front/behind you).

Up the powerline trail, across, and back down and through the woods. Through the mini-berms and the up the switchback climb. I climbed relatively well but was knackered by the top so I pulled over to let Patrick pass as I figured that by this time I was just holding him up.

Down the berms which were fun as always.

Eye of the tiger. Body of a manatee

The course then took what I thought was a weird turn by not going left across the creek but back into the woods and then back out with a tough turn to maintain at speed.

Another awkward turn across the creek and then along the trail next to 495. I made sure to mash down my gears as I crossed the stream into the finish climb. We passed someone on this climb but I have no idea what class he was racing in.

One more thing that surprised me about the race course is that after the finish climb the course went back into the woods instead of staying on the fireroad. I came back out of the woods and the end of lap 1 to see Jennifer and Lauren cheering for me which was just awesome.

Less waving more fucking pedaling Daddy!
- Lauren

Patrick was still only a few seconds in front of me as we went back into the trees for a fun descent then an easy climb to the top the gravel road that had served to weed out the pack at the beginning of the race.

I just kept on Patrick's wheel as he was going at the same pace as me and I didn't want to pass if I was going to just get re-passed at some future point. I think I felt like if the opportunity presented itself I would take it but wasn't going to push the issue.

We skipped the log the racer had wrecked on before as there was no pressure from behind and I suspect that neither of us wanted to make a stupid mistake. We cruised on like that until the top of the powerline climb when I risked a look back and didn't see a soul on the climb coming up. I think at that point I finally relaxed and realized that barring some horrible wreck the rest of the race was going to be easy as there was no one to catch up to and no one who would catch me.

I made sure to stay on Patrick's wheel as I was hoping that I would magically get some passing energy or that he would falter in some way that I could take advantage of. Sadly, neither happened. I tried to gun it for the final sprint to the finish on the fireroad but you're on it for such little time there just wasn't enough room. The official results show us as tied as they were only timing down to the second but Patrick's wheel hit the line first.

Stupid Patrick finishing before me

No, wait. Here he is

I knew I had done reasonably well but was thrilled with the final result.

PlaceBib #NameLap 1Lap 2Time
10141Brian Connors22:0023:3645:36

That's the honest version of the results with Patrick in 9th

Jennifer and Lauren came running over to congratulate me which was great.

Lauren is the non big fat load on the right

Having been in one anther's company for the past 45 minutes, Patrick and I then introduced ourselves to one another. I think we were both equally tired and glad not to be battling with one another.

Somewhat (OK, very) pooped. But happy

While I'm not going to miss the pre-race anxiety, I'm genuinely sorry it's over. It was a complete obsession for three weeks and not having it to look forward to anymore was kind of a letdown. I had a ridiculously good time and I'm completely looking forward to racing again (Dave and Bruce, you totally should have entered). The only unfortunate thing is now I have a set of expectations.

I think I may have the bug.

As always, thanks to Jennifer for her support and for coming out with Lauren on race day. It was beyond great seeing you as I went by. And to Bruce for his constant reassurance of "you're gonna be fine man."

Friday, July 31, 2009

2 week review

Normally this should have been a number of posts but I've been a little lazy on the writing front and busy on the "doing" front. I'll try to do better.

but first a message from our sponsors

So I can stop with the oblique references to "a system here at work" I'll call a spade a spade and now refer to my MVC application as iDEV because, well, that's what it's named (not my first choice in names but that's where we're at). And I'll stop with "it does stuff" because no one is reading this save myself and even if they were, they're not about to run off and steal all my ideas and build "the next big thing." What I've done has been done before and done better. Moreover, if you're stealing from me you're stealing twice.

there is *way* more to this testing thing than i thought

My last post was more prescient than I would have thought possible. Writing tests is...actually it's sort of interesting. There's a lot to do to be sure (more on that later), but the whole notion of thinking about what it is you want, writing some tests, and then implementing until they pass is fairly gratifying. At least in the sense that something didn't work and then does because, see, I have all these little tests that tell me so. It's also a metric fuck-ton of more work to do.

When I started with Rails I more or less skipped the whole testing framework. Wish that I hadn't now, but at the time it was way more fun to whip out features. So when I set out to learn ASP.NET MVC/redesign iDEV I was committed, to the extent possible to do it the right way - testing, testable patterns, and layers man, layers! What I didn't have an appreciation for, at least w/r/t to writing unit test vs. integration tests, is how much goes into making that possible. Especially all the things I have to learn. To be able to test these things in isolation means learning testable patterns, understanding how and what should be tested, and then understanding when to stub/fake things and when to use a mocking framework (in my case Moq).

Its been challenging to be sure. The only thing that's sort of driving me nuts is the the repetitive nature of the tests I'm writing. Given your typical Create action on a controller - I have to write a test to verify the view isn't null, returns the right model type, redisplays on an invalid model, and saves and redirects on a valid model. And that's just for one action in one controller (and I'm probably not writing enough tests there as it is). I still have to write essentially the same code for each create action in each controller - and I have a lot of controllers.

So I could make the argument that I know that I've implemented the controller actions correctly (since they're all mostly the same) and can now skip all those tests. Which would defeat the whole notion of writing tests in the first place. So I'll keep at it. Lot of work though. Especially when you think about how much visible stuff you could be implementing if you weren't writing all those tests. Best not to think too much.

the new hotness

It's always fun learning something new. No matter how trivial the item, it's something new that you didn't know before and now you do. But there's also the frustration. The "why the fuck won't this work?" - I'm following the example to the letter...no wait, I forgot that line. There, now it works. Frustration and reward - the lifecycle of the developer.

Trying to do things "the right way" on this project also means new things beyond just the framework. Things like Moq and StructureMap for dependency injection. Which, while it is incredibly cool and I understand conceptually how it works, I still don't entirely understand. Even spent a few days trying to make it work with version 2.5. All the code samples I could find were for prior versions with deprecated methods. Thank god for this article. Frustration and reward.

So to sum up, learning ASP.NET MVC means learning:
  • The framework of course
  • Moq
  • StructureMap
  • TDD/BDD
  • Linq to SQL
  • Testable patterns
It can be a little much sometimes.

things from my dome-piece (b/c thoughts might be giving me too much credit)

So a while ago I had this post outline talking about the differences between Rails and ASP.NET MVC. I think it's worth going over. Rails was dead easy - ruby script/generate Scaffold Product name:string and you had a model, controllers, and views for basic CRUD operations on a Product. There is way more plumbing that goes into ASP.NET MVC to accomplish the same thing b/c it [ASP.NET MVC] lets you choose how you implement your models. In Rails there was only the way. Play by those rules and your life rocks. Validation with a few lines, relationships with one more. Pretty cool indeed. I mean you still had to write the tests but you can't win them all.

So Rails development was fast to say the least. ASP.NET MVC offers some scaffolding features similar to Rails but not quite all of them. On the other hand, b/c Rails offerered only "the way" the only thing you really learned was Rails - or at least the Rails way. With ASP.NET MVC you have to make decisions, decisions that aren't necessarily well informed b/c, remember, you haven't done this before. And b/c there are decisions and alternate ways of doing things there is what I'll call tangential learning - things that are applicable outside of the current problem domain. Things that will serve you as a developer when ASP.NET MVC and the current project are long forgotten.

Frustration and reward.

Sunday, July 19, 2009

the corruption of youth

I'm sorry Aunt Darryl - I truly am. But like a crack dealer, I'm just serving a willing populace.

the backstory

So the whole climbing thing isn't terribly popular thing in my family. Sure people find it interesting, but hey, I'm not their kid.

Fast forwarding slightly, my considerably [?] younger cousin Max is living with us for the summer. He's been nothing less than an ideal guest. There may have been hope that I/we would be a positive influence. There was probably the [faulty] expectation that between Jennifer, Lauren and work there just wouldn't be time - or at the least, inclination. Sadly, for some, there was plenty of both former and latter.

a recent anecdote

So we (Bruce and you humble narrator) took Max out last week for some bolt clippin' at Roadside. Minus the torrential rain that cut the day [slightly (and quickly remedied by wings and beer)] short,we had a terrific time. And then, the phone calls started.

"So how was climbing?" asks my mother.

"Fine." I reply.

More questions follow eventually circling back to question #1.

"You know Mom, you've now asked more climbing-related questions in the past 15 minutes than you've asked in the past 15 years of me climbing."

"I know. I was just worried."

"He's still alive. Promise"

less exposition, more action

One week later and it's shaping up to be a beyond-perfect weekend at Seneca. Max is interested in something, ahem, bigger, and Bruce is interested as well. In particular, Bruce's attendance will mean that Max can gain the summit on some more interesting ground than Old Man's Route.

The parking lot is empty (deceptively so we'll come to find) when we arrive shortly before 10. There is some debate on the best way up. Bruce is pushing for the Ecstasy Jr. - Le Gourmet - Front C - Critter crack linkup. I'm down with most of that but want to start all the way down at Skyline and do the casual East Face linkup - mostly because it more or less follows the way I went my first time at Seneca. I have a distinct memory of doing those 3 pitches, having no idea where I was while turning to Andy and asking, "Are we at the top?"

Bruce demurs and we make our way up the East face trail. Skyline is coming into focus...doesn't look too bad...and then resolves into chaos. We turn around and head for the Stairmaster. We briefly consider Vegetable Variation and just as quickly discard it.

Between an in-shape Bruce and a young and in-shape Max (yeah, I just did that Bruce) I quickly fall behind. In short, I get thoroughly pwned. Max pats me on the shoulder like a supportive parent (or child with his grandfather),

"It's OK" he says.

A few minutes later we hit the bottom of Le Gourmet with a party already on it. I look at Bruce knowing that if we'd headed here directly/me not dying on the Stairmaster, we'd be on it.

"Sorry" I apologize.

"I wasn't going to say anything" he replies.

We make our way North and eventually settle on the first pitch of Monkey See, Monkey Do. Bruce blasts up with barely a pause at the crux and is at the belay in no time - pleased to see that it's a decent pitch despite his memory of it. Max works his way up next with just a bit of effort at the crux. I pad up last and make my way across the ledge to Front C.

My running joke about Front C is that I climb it in one of two ways - gracefully or desperate clawing. I make my way up and at the crux nearly lapse into desperate clawing. My typical fear plugs the crux jam with a #2 Camalot but I manage to get up somewhere between graceful and desperate - hopefully edging more to the graceful side of things. Max quickly follows, thrilled that he has managed an "actual move" in his words by employing a nice backstep through the crux. Bruce follows quickly (as he would) and quickly scrambles up to the base of Critter Crack.




We have a quick lunch as we watch some dark clouds swirl above us while the wind picks up. I shiver. Stunning for mid-July. Bruce explains the basics of jamming to Max and then heads up. One [uncharacteristic] pause at the crux and it's then Max's turn. He starts up.

"I'm going to punch Bruce in the face when I get up there" he gasps between breaths. "Just put in a jam he says. My. Ass."

Once past the requisite jamming, Max moves quickly with only one short hang at the crux. I, despite all previous evidence to the contrary, actual jam through the bottom without a problem and continue up. Probably the best jamming I've ever managed on Critter - I actually start to get what Bruce is always trying to explain.

We unrope on the summit ledge and head North. I rope up for the summit scramble and put in a few pieces for Max's benefit (who knew there was gear going up?). He quickly follows with only the slightest bit of trepidation.



I'll go ahead and say that Max was somewhat awed by the summit. While he'd become accustomed to the view to the West as we made out way up, the new 360 vista with a drop on all sides was something new. He signs the summit register and even stands on the true summit.

We stick around for a few minutes and then head back down for the Conn's West rap.

and then, there was the rappelling

Bruce ties the ropes together and slides on down to give Max a firemans just in case. I explain how rapping works, rig him with the standard BARK check, and then, with one slightly pleading look, he makes his way down. He's clearly not thrilled but we've told him few people are - it's a necessary evil.

We've already decided that we have time for another route and that heading back up Conn's West seems the easiest choice. By the time i finish rapping I find Bruce hard at work trying to free a purple Metolius fixed by some over-enthusiastic noob. After indulging him for a few minutes, I head up the chimney pitch. Max has one short fall at the beginning trying to follow the direct line and then some fun working out chimney technique.

Bruce swarms up and then heads up the corner pitch. Max has a great time on this pitch just working his way up with steady progress. I hit the belay just in time for an odd conversation with Bruce and another party trying to negotiate with us the share ropes for the rap - which we really don't need.

Max is much more comfortable on rappel this time. Two raps later and we're headed down (barely missing Danny on his way to do Back to the Front. Again). Our purpose is clear - chips and Sierra Nevada. One quick stop to see if Ben is around (complete with Bruce's clever, and remarkably legible, note to Ben using a burnt piece of firewood as writing utensil) and we're on our way home.

Sorry again Aunt Darryl - Max seemed to have a good time.

Tuesday, July 14, 2009

and...we're back

So yeah, its been a bit. Work, low motivation.

Stuff dammit. Don't question me.

So back at the whole ASP.Net MVC thing which, in the considerable interim, has made it to 1.0. Did the whole Nerd Dinner thing which I found interesting - and not just from the framework perspective. Lots of other goodies in there like IoC, mocking, testable patterns.

Anyway, back on to the redesign effort. It would be really easy, and probably considerably faster to just re-implement the app, apply my lessons learned, and be done with the whole thing. Probably be able to knock it out in a month or so. But then I don't know what I would learn and probably skip over some important things.

Like testing.

So I'm making a commitment right here that I will write the tests I didn't last time. I will take the time to have a legitimate go at TDD. I will think first before I go whipping away at new features. The whole point of this exercise is to learn right? And not just the latest hotness but about things that are generally useful no matter what.

But good lord, one 16 tests and only one controller sorta covered? It's gonna be a looong road.

Friday, January 09, 2009

taint

End of Day 2 with the ASP.NET MVC framework.

Taint Rails.

Taint regular ASP.NET.

Taint 1.0 yet - to be fair.

Taint a good developer working here either.

I'm probably being a little hard on myself here.  No, I'm not world-class developer by a long shot but I do pay attention to a few things.  It's an odd thing being caught between two worlds.  I consider myself a solid .NET developer and an OK Rails developer.  

I think the hard part is that when learning something genuinely new (e.g., Rails, .NET the first time 'round, Django) there's a certain expectation of difficulty - I mean, it's not like you've done this before.  But I think that working with ASP.NET MVC represents a certain crossover which doesn't bode well (at least for me) for a non-frustrating learning curve.

So it boils down to this: I know how to work in a .NET environment; I know how to work in a Rails environment.  ASP.NET is a [theoretical] merge of the two.  How could I not be successful?

Turns out, it's pretty easy.

The frustrating part emerged quickly.  For each (forgive the prose, I could break into a [vaguely] witty version of prose in code] but shall not) issue encountered, I could imagine how easily this could be done in one environment (Rails vs. ASP.NET) versus the other -but I'm not in the those environments.

The other part was an unintended side-effect of a rewriting a previously written application.   I'm experiencing an unfortunate non-acceptance of a learning curve (again).  I'm sure that all those now self-evident decisions that I made in my Rails app were not so self-evident at the time.  And probably hard won.  But because this is a .NET app, things should be easy.  I mean, all I have to do is implement the same feature in a language I'm, if anything, more comfortable in.  What could be easier?

And the other, other thing is that this is, above all, a beta version.  I think I picked up Rails at 1.0.  They (DHH et al) had already learned a number of things.  Perhaps not.  At the very least, they'd decided that things were OK enough to slap the 1.0 label against it.

The RC for ASP.NET MVC is coming up shortly (slated for sometime in January 2009) which means that a majority of the articles written are centered around various preview releases.  And because they're preview releases, there's no expectation nor promise of backwards compatibility.  So any number of articles/tips may (and typically do) include code samples based around features no longer in the codebase because, see, it taint 1.0 yet.

More to come.

Wednesday, January 07, 2009

the notion

Learning in a vacuum is always tough. Say you want to learn some new technology - in my case, the ASP.NET MVC framework. I could go through and just read and watch and probably learn a thing or two. I could build something made up, like a music collection, but the problem with those kind of learning vehicles is that because they're made up, you feel no particular desire to follow through with them to the bitter end. At any point, usually when things get too hard, you can:
  • Make it easier by not implementing feature "X" at all

  • Dumb down feature "X" to make it easier

  • Declare victory and move on
You can do these things because, after all, it's not a real project. It's not for a customer - even myself. Even when it's done, I don't plan on using it.

So the real trick is to build something practical, something you might even use.  Or in my case, rebuild something you use.

We have a system here at work I built using Rails to keep track of projects, requirements, etc.  The problem is that I work for the government and they're not always fans of open source, or all too often, anything new.  So my app sits on our dev environment (which is where it ought to be anyway), but I keep hearing how we're going to need a version of it that will sit on the government network.  And because the .NET framework (which is what we use here 99% of the time) already has a pass from the powers that be, perhaps a should just write a version for .NET?

Historically my answer has been, "I don't feel like it." I can get away with this answer because nobody has pushed on it and the Rails app works just fine on dev.  But it occurred to me the other day that the Rails app would be a perfect candidate for learning the ASP.NET MVC framework.

Practical?  Check.
Defined requirements?  Check.

Plus it is (or should be) a largely 1-1 translation.  Lots of lessons learned from building it the first time plus an interesting comparison on how the two frameworks stack (if you'll pardon the pun) up against one another.

So we'll see what happens.