In my attempt to be a conscientious tester of a new feature in our codebase, I put in some stub code to allow me to test locally and hit all the various boundary cases.  In a painfully ironic twist, that test code introduced a bug which only reared its head in a small set of boundary cases.  Note that all of our operational tests after deployment test transactions with the main path.

So, in being a good(?) tester, I broke the system.  The fun of pushing bits.

Here’s the setup: product/legal required us to update our terms of service on the site. They delivered the new terms of service in a Word file. Headache #1: manually compare that Word file to the text in our site’s JSP. Note to self: require product/legal to at least show us the diffs. Nothing worse than a Saturday morning spent diff’ing legal text. (No, converting from Word to HTML wasn’t helpful: have you seen the cruft it spits out?)

Headache #2: I realized that the terms of service are also in our store site. To the user, it’s all one site. However, physically, it’s a separate site, separate code repository, and the like. NO way I was diff’ing that legal document twice! (I did mention I was doing this on the weekend, right?) Brilliant Idea #1: refactor the terms page from the main site to use an included file (the text of the terms) that I could share across the two projects. Note that the two sites are built differently: both are done on top of Struts, but one uses JSPs and one uses Velocity. That meant that the syntax for the include would be different (<%@ include versus #include), but then their containing pages would be different, not the text of the terms themselves.

Headache #3: when I brought up the separate sites in my local environment, realized that the terms had URLs embedded in them. In the original site, we used html:rewrite Struts tags. That wasn’t going to work in our Velocity setup (at least, not in a way I recognized, anyway). Also, since the URLs referenced all lived in the one site, the webapp context didn’t have to be taken into account. From the store side, I had to deal with it. Solution: update hte URLs in the store side to use an application level variable for the path. It’s not the best solution, but it’s consistent with how URLs are built in the other areas of the application.

Now the include files are different (unfortunately), but at least the changes should be isolated to the URLs. Now if we need to update the terms again, we can convert back and forth readily for the two sites, at least.

…. corrupt your .svn file structure on your local system. Then, disconnect your project from Subversion via the Subclipse plug-in. Now, try to get things up and running again.

Steps thusfar:

* copy my working copy to an -old folder (just in case I need something).

* remove the working copy

* Do a new checkout from Subversion (command-line style, since Eclipse is still unhappy).

* Hmmmm…. that didn’t help me within Eclipse. OK, do a checkout from the SVN Repository tab within Eclipse: that’s deleting my new working copy folder and getting a fresh new checkout.

Ugh. I hate it when I have to wrestle with configuration management.

Useful resources:

(1) help files in Eclipse for Subclipse plug-in. (Team –> Share didn’t help me much, but was useful to find out about.)

(2) Version Control with Subversion

I keep hearing that Scrum’s name comes from rugby, that a rugby scrum is a great model for a self-organizing, adaptive software project following the Scrum methodology.  (Note: I’m in a scrummaster training course today and tomorrow, am a practicing scrummaster, and also played and coached rugby for many years.  So, I’m qualified to rant on this particular topic.)  But the scrum is the least self-organizing and adaptive kind of play in rugby.  Here’s what a scrum is: it’s akin to a kickoff to restart play after something’s screwed up the normal flow of the game.  It’s a set piece, with each player knowing their position and standing in the same place each scrum, trying to do exactly the same thing each time.  When I coached, it was important to me to teach proper repeatable scrum technique because if anyone doesn’t do their part or somehow changes the formation, someone can get seriously hurt: necks get broken in poorly formed scrums.  So, that’s what we say our software processes aspire to: a play you use after someone’s f’ed up the normal flow of the game, where each person does exactly the same thing every time, in which a failure to conform can break someone’s neck.

Now, there is a rugby play which is completely self-organizing and adaptive.  It forms to continue play when the ball’s about to change possession.  Say I have the ball, and I’m about to get tackled.  I want to get the ball out to my teammates so I turn around to give them a chance to get it (rather than have the other team strip it away from me).  I fight like mad to stay on my feet and let my team get to me, at which point they’ll start piling on in a proscribed sort of fashion, but driven by whoever’s nearby and can get to me fastest.  The number of folks involved and amount of pushing depends on how much force the other side musters, and whether my team can get the ball away more quickly than the other team.
Now the problem is the name of that play: it’s called a maul, which understandably might be a bad nom de plume to attach to your software project.  In nearly as bad a naming situation, it’s companion play is called the ruck.   That’s when I don’t manage to stay on my feet, but end up tackled and trying to protect the ball on the ground with my body.  There my team doesn’t just shove me around, they actually step over (though hopefully not on) me to push back the other team and retain possession of the ball.  However, I’d still rather compare my software process to a maul than to something which my team would do when someone on either side screwed up and stopped things from progressing.
I’ll end my rant now, with the additional noted rugby qualification that, in true rugby style, all rant listed above was influenced through the imbibement of beer.

I hate getting a new system. I’m not a person who enjoys tinkering with her computer’s configuration. Once I’ve got something working, I tend to leave it. Which means I tend to forget how I got it to work in the first place. Which leads to royal headaches when I need to change machines.

Work “gifted” me with a newer laptop… a dual core machine that’s supposed to speed up our build cycles. (On my old machine, a single build cycle, including clean, compile, build, and unit tests, could take up to 7 minutes – bleah.) Distributing the load across the two chips, I’m supposed to get a notable improvement. Except that it costs me a day’s worth of work to get my new machine up and running: install Eclipse, install Oracle, install Tomcat, set Subversion up, make sure Ant’s configured, get my hosts files all working correctly, is Cygwin going to let me XTerm into our production environment, etc, etc… Undoubtedly, I’ll find six different things I’ve gotten wrong that I have to figure out how to fix. And, of course, the versions of tools out there are now newer than the ones I had, which always gives me pause. Even the JDK is at a new minor release version (no, I’m not taking that beta 6 version, thank you very much). Oy, my nerves.

Right now, my VPN client is happily blocking me out (nicely, on both laptops), and subversion isn’t giving me any feedback as to whether it’s on my system or not: typing svn gets me a grand bit of squat. If I mistype it as svb, I at least get a command not found response. Svn gives me nuttin’. Arrrrgh.

Tomorrow I turn in the old laptop and flounder on the new. Luckily, I don’t need to do any “real” work until after Thanksgiving.

Reading up a bit on the Wii, the new gaming system set to be released by Nintendo just in time for the Christmas rush. Have to admit, even though I wouldn’t consider myself a gamer, this thing sounds appealing. Its price point appeals to me (cheaper by far than the XBox or the PSP3), the fact that you can download “old” games for $5 or $10 bucks to its console appeals to me (hey, I racked up a lot of time on Frogger, Pitfall, and SeaQuest as a kid), and the new controller REALLY appeals to me. The idea of someone rethinking how to interact with a game, beyond the traditional joystick: now that’s the kind of thing that sounds exciting. Wave my hand, and the game responds: I can’t wait to see the magic wand princess game for my girls. I’ll just lead you here to Fast Company’s blog posting, and definitely here, to Nintendo’s site for the Wii.

Oooooh, browsing through Nintendo’s site, found the Mii channel: check out the video of the caricatures you can create, and the thought they put into being able to adjust your caricature/character/avatar.  Looking for the announcements that lets me (1) extend the set of caricature features: more facial expressions, ability to add clothing, jewelry, accessory items…, (2) share that caricature with my game-playing friends, (3) personalize the movements of the caricature, and (4) export it in some form that lets me use it on my webpage, cellphone, etc….

It’s Labor Day weekend, and my answer to the inevitable question tomorrow at work for what I’ve done will be “Blissfully nothing”.  That’s not technically true: I did a bit of work on Saturday and pushed out a deployment, and have some plans to do some light housework today, including making my second great dinner of the weekend, but compared to the usual race, this feels like ‘blissfully nothing’.  I’ve read that vacations of shorter than a week or two aren’t enough to recharge you, and maybe I don’t know what a fully battery recharge feels like, but I have to admit to feeling much more energized today than I have in a while. I’m reading Runner’s World and planning next year’s marathon; thinking up neat menus for dinner tonight; daydreaming about various craft projects; making a laundry list of fun and interesting projects to play with on maternity leave (some technology related; some not.  Maybe another post will have a running list of ideas…).  It’s a wake-up call to me that I’ve been running around half mentally asleep of late, just focused on work and how to solve that interesting bug or how to work off the pile of not so interesting bugs.  Don’t necessarily have answer as to how not to get into that state again, but a good first step is even recognizing that I’ve been in it.

I’m at 36 1/2 weeks into this grand adventure called pregnancy, not that I’m counting down or anything. Who wouldn’t be counting at this stage, I wonder? The things to count down to:

– clothes that fit again

– no longer having an aching back

– having more energy

– going to the gym again (eventually)

– holding our baby!

The corollary list of things to count down to (since having a baby isn’t all sweet smelling baby powder)
– not sleeping more than 3 hours at a time

– changing diapers again

– LABOR!

Someone asked me yesterday whether we were ready for our lil’ guy. My response was that yes, we’re ready, but mostly because this is kid #3. That means we’ve already got a car seat, we’ve already got a bassinet, and our expectations of what this kid will need on the day he comes home from the hospital are much lower. We’ve got some clothes washed, some diapers ready, and some new receiving blankets. Callie’s willing to share her blankies, but we figured we’d use her expertise to pick out some nice new ones for our baby boy. Toys? I think we have a new rattle for him. A decorated room? Well, we are getting the carpet redone, but that’s needed to be done, anyway. A matching crib set? He won’t be in the crib for a bit, anyway: there’s still time. Most things just don’t seem as critical anymore as they did when we were newbie parents. And if it does turn out to be critical, we’ll go out and get it then, rather than overstocking our house in advance. Given that this’ll be the first maternity leave period where we’ll have both parents at home, this is looking like a relative vacation. I’ve been mentally making a list of techie topics to explore whilst on my “vacation”. (I understand that as long as you’re drawing short-term disability pay, you’re not allowed to perform actual work for your employer.) And did I mention that I’m looking forward to going to the gym? 🙂

Just a quick update, to make me feel that I haven’t abandoned my blog baby. As time challenged as I’ve been, I’ve been working very hard to not abandon my kid babies, my dog babies, the baby who’s kicking (hard!) inside of me. I’ll not compare my husband to a baby, but I’ve been trying to not neglect him, too.

The short and sweet update: since my last post/confessional, we’ve been to a wedding in Texas, been to a funeral in Frostburg, crammed in more hours working and fewer hours sleeping than I though possible for a pregnant woman, and unofficially dropped out of an MBA program.  I’ve crammed a ton of software development into wee hours of the morning, and thought I was going into labor in the mall, some eight to ten weeks early.  Tiny bit of stress going on around here.  Wish there were a great end in sight, and more musing going on at this site.  Keep mentioning to Jas as we talk about X or Y that there’s a blog post here and a blog post there.  Here a post, there a post, everywhere a post post….  But you’ll have to be stuck with Old McDonald singing in your head instead for a little while, as I’m going to sleep!