August 26th, 2008
Starting my new project in a new role, as project lead, I need to be managing things in TFS. The UI for batching these things up is nonexistent, but there is Excel integration so you can do it all in Excel, hit save, and it all goes back to the TFS server… pretty slick I must say (I was actually in the midst of writing such a tool when I realized this functionality already existed OOB).
However, the first time I tried to use this functionality… BLAM, I get smacked with this:
TF80042: The document cannot be opened because you do not have Microsoft Excel 2003 or later, or one of its components installed. For more information, see the Team Foundation Installation Guide.
Isn’t that teh suck?
Anyways, there is a sweet write-up on how to fix it here: http://blogs.microsoft.co.il/blogs/srlteam/archive/2007/07/17/Error-when-trying-to-export-queries-to-Excel.aspx.
Thanks Elad!
Posted in Tech, tfs | No Comments »
August 22nd, 2008
So last night I gave a talk at Indy ALT.NET on Castle MonoRail. It was really just a sort of intro to MonoRail type of deal, but the cool part was that we held a Dojo after I got done jabbering.
We ended up building a Poll Generator for our dojo activity. We almost got done in the 45 minutes or so that we dojo’d. It was a pretty fun activity, and I’d like to do it again sometime soon.
Also, this was really my first public speaking engagement to our technical community, and let me say it was a blast. Everyone had great things to say, and many great questions were asked too.
I set up a google code repository so you can grab my slidedeck and grab the source for our dojo activity and my demo app.
Maybe next time I’ll post before the talk, so I can let people know about it.
Thanks guys for all the great feedback, and thanks to my wife for understanding why I wasn’t spending any of my evenings with her this week!
Posted in Tech, Uncategorized | 1 Comment »
August 22nd, 2008
Wowza! So I’ve begun reading LosTechies (tons of great content, highly recommended!), and came across a passage today from Jimmy Bogard, who says what I feel, but what I couldn’t get out of my head:
On a sidenote, it always bothered me when people say that an interface with one implementation is a design smell. No, an interface is used to expose a contract. Interfaces communicate design intent, far better than a class might.
Exactly!
Posted in Tech | No Comments »
May 16th, 2008
The inaugural indy alt.net meeting was last night!
The group appears to be led up by jaxidian/Shane Milton of Leaf Software Solutions. Many thanks to Shane for getting this group together! I think this is an awesome opportunity for our community to learn how to be more receptive to alternative thinking in a .NET world. I have heard of so many shops that have their blinders on and won’t even consider working with frameworks/etc. other than those provided by Microsoft. This can only be a true blessing to our community and where we are going as craftsmen.
Don’t get me wrong, I’m not dissing Microsoft, they make world-class software. The problem is that we need to be careful to always use the best tools that serve us in any given situation, rather than using only the tools that we are told to use via the mothership.
Last night’s discussion was led by one of the co-founder’s of Entity Spaces. Their product, Entity Spaces, is a code generation based ORM tool. I’m very familiar with the concept, but haven’t had much of an opportunity to use many ORM’s other than ActiveRecord in a Rails project I worked on, so I’m not sure how the usual suspects (NH/ActiveRecord, Linq2Sql, Linq2Entities, SubSonic) add up in a real implementation scenario, but it’s at least worth thinking about. Maybe I’ll do a write up or try to find a comparison.
Also, many thanks to Tridge Alliance for their financial support of the group.
All-in-all, it was a great inaugural meeting. I am sure we’ll only continue to grow and get better. If you’re reading, and are in the area, and feel like you’re missing something (sort of like Neo, ya know?) please come and see what we’re all about! We meet the third Thursday of every month. Check the website for more info.
I’m stoked! Let’s make our tech community a better place!
Posted in Tech | 3 Comments »
May 16th, 2008
It was hard. That’s for sure. It’s by far the toughest decision I’ve ever made in my life.
When I started at Ontario, I was part of a "rogue" team. We did .NET. We were agile (not Agile proper). We were fast. We cranked out features like you wouldn’t believe. We were tall. And we had a blast.
Over the last year and a half or so, my team had completely dwindled for various reasons. Folks looking for better opportunities, more money, or discovering God more deeply and intimately to pursue His Kingdom.
I started to question myself:
- Was I limiting myself?
- Was it my mission to impact the lives of all around me by staying and mentoring and instilling the passion and knowledge I have as an engineer into my colleagues?
- Was it my mission to end my mentorship with my colleagues, since the seed had been planted, and move on to see what kind of impact I could make elsewhere?
- What does God want me to do?
A few unexpected things happened that led me to my decision:
- By happenschance I saw a post on jobs.joelonsoftware.com describing the kind of company I want to work for (www.SEP.com)
- That company happens to be full of folks that went to my alma-mater (Rose-Hulman)
- Matt’s Initiate series ultimately sealed the deal for me as I realized I need to continue on, and spread His glory through the use of the talents He has given me.
I have since realized, the importance of me starting my career at Ontario. I learned how to become a software engineer and found my passion via the tallest of my colleagues (yes, that’s you Shawn), and I was re-introduced to God.
Working there was truly a blessing. I still have many dear friends there, so if you are one of them, and find yourself reading this, please post a comment of email me!
Wow… that’s been a long time coming! It has actually been several months now since that time, and I’ve had a lot of time to reflect… but I think this sums it up.
Posted in Uncategorized | 3 Comments »
May 16th, 2008
So one of the things I’ve noticed since I’ve been at my new place of employment, is that people are passionate about their code! I love it! I have always been, and its great to be in a place where everyone else is as passionate about it as I am.
Onto the issue at hand. Along with passion, comes strong opinions (of course).
Statement: I always want to create an interface for any service or class that collaborates with other services or classes.
Why?
Testability.
IMO (I’ve got one too!), testability is THE first class citizen (second only to working, value-adding software).
Having an interface on any collaborating service provides me the ability to (at least):
- TDD
- Test after the fact
- Swap in a new implementation later
- Low-friction
Why not? (my response to each in red)
- YAGNI - "Why do you need an interface if there is only one implementer? We’ll create the interface or base class when there is a second implementer".
There already is a second implementer… the tests! Nuff said. (which is a nice segue into the next point…)
- Testability should not affect the design.
Ahem, isn’t our goal working software? How do I know it works if I can’t write tests for it? This directly opposes the entire idea of TDD. TDD is not so much about testing, as it is about it being a design tool.
- Just "subclass and override".
Have you ever read Working Effectively with Legacy Code? This is the epitome of a legacy code technique
Dear reader (I doubt there are any),
What do you think? Are there things I missed on either side of the equation? I want your opinions.
Posted in Tech | 2 Comments »
January 18th, 2007
I started to write this bit on my previous post, but nixed it because I thought maybe it was just something that was going on in my head, but lo and behold, it at least happens to Jeremy Miller as well.
Before I get started, let me state that I do not claim to know everything about programming or even lots of things, and I am certainly not the best developer (no, I’m not saying I’m bad either!). However I am willing to learn and am learning (LOTS), and thats all I can ask anyone else to do too. Thats the only way we can progress to where we need to be.
The target I’m going for here is the code itself.
I write and design code at the highest level of technical ability that I can. That means if a particular pattern makes sense, I’ll use it. If I can inject the dependencies in some way or another to make it testable, I’ll do it. I (try to) write my code as if I’m the audience.
Many people (I am guilty of this too), all too often try to write code that prevents the consumers of it from screwing stuff up. I normally think this is just programmer paranoia, but I think it is a reasonable consideration.
I hate having to cater to the LCD in my code, but if I KNOW that Barney Fife’s grandson, the programmer, (and he is not in my company) is going to be a consumer of my code, then I may ‘dumb it down’ so he doesn’t end up screwing something up. If he is part of my company, I’ll take some responsibility and help him get to where he needs to be so he can better understand the concepts.
Its a careful consideration that, like the UI and usability experts of the world, we don’t always get right. What audience do you cater to when writing your code?
Posted in Uncategorized | 1 Comment »
January 15th, 2007
It is funny how ‘a-ha moments’ happen at random times and on random topics. The other day I was walking back from the water cooler at work, and doing some critical thinking as I was (yes! I can do two things at once, even though Sandi doesn’t think I can!).
Anyways, I had a realization of how when my English teachers in high school (thank you Mr. Stephens and Mrs. Baldwin) harped on the taget audience for a particular essay, that the topic audience isn’t really specific to writing essays, it lends itself to many walks of life… especially writing software.
Many people talk about Microsoft always catering to the LCD (even Mark recently did!) and how the *nix community is usually the opposite. The conversation usually (at least with tech-types) is that the level of control given by *nix is the right mix of simplicity and control.
Ahem… I beg to differ… or do I?
Maybe you’ll think I’m just trying to walk the line (because you’re mine?), but I don’t think so. I think it all depends on who you’re trying to reach as to what ‘denominator’ you cater to. Obviously its hard for Microsoft to hit it right, for example, with the Vista shutdown menu, when their target audience is EVERYONE. That includes me, you, Grandma’s, 5-year olds and anyone else. It’s easier for *nix to get it ‘right’, because they have a much more narrow audience.
I’ll be the first to confess I have a heck of a time when designing the front-end of an app, and that is mostly due to audience. Part of my job requires that I lay out new UI’s when I add new functionality to our product. Believe you me, I am no graphical designer or usability expert. I usually want to lay it out and build as if I were using it… however, apparently engineers aren’t the typical user-base of debt-collection software. However, when I write tools (I am often times the Toolsmith for my team as well) that are meant for engineers, I have a completely different audience and an entirely different set of assumptions when laying out the UI that is much more native to my own. It’s a learning process, and I am definitely still on the climb up the curve.
Posted in All, Tech | 3 Comments »
January 2nd, 2007
I ran across a testing situation the other day when I needed to compare several properties on two objects, and assert that they were all equal. In my next test, I wanted to assert that those same properties were all not equal. I hate copying and pasting a list of properties to assert against, and just changing the method call from Assert.AreEqual to Assert.AreNotEqual.
The solution many might suggest is implementing the Equals method of my class. However, this would be injecting code into my domain class that doesn’t belong there since it doesn’t get used in the application domain, only in the test domain, or it may already be implemented for its real domain use. I don’t see this as a viable solution.
My solution. Since Assert.AreEqual and Assert.AreNotEqual have the same signature, we can create a delegate and pass the correct assertion method to a new method which we might call AssertProperties. It might look something like the following:
[Test]
public void PropsAreEqual()
{
Coder c1 = new Coder("jon", "fuller", "ruby");
Coder c2 = new Coder("jon", "fuller", "c#");
AssertProperties(c1, c2, new DAssertEquality(Assert.AreEqual));
}
[Test]
public void PropsAreNotEqual()
{
Coder c1 = new Coder("jon" , "fuller" , "ruby");
Coder c2 = new Coder("mark", "garringer", "c#");
AssertProperties(c1, c2, new DAssertEquality(Assert.AreNotEqual));
}
private void AssertProperties(Coder expected, Coder actual, DAssertEquality asserter)
{
asserter(expected.FirstName, actual.FirstName);
asserter(expected.LastName , actual.LastName );
}
Thanks Mark for lending me your name. Anyone have a better solution? Feel free to show me up!
Posted in Uncategorized | No Comments »
December 25th, 2006
Sandi and I have decided to embark on a true dream for college basketball geeks (we are). We are going to attempt to visit all power conference/’BCS schools’ (SEC, ACC, Big 10, etc.) schools for a home basketball game.
It will take us several years, but I think once we get organized we’ll be able to start knocking them out. We started last Tuesday with a trip to our neighboring state’s capitol city, Columbus, Ohio to watch the Buckeyes take on the Cyclones of Iowa State.
We were really wanting to see the guys from Indy play before either of them go pro (Mike Conley Jr. and Greg Oden). It was a great game and the Bucks came out victorious. Our seats were Awesome (note the capital A). Fifth row, practically on the court!
At half time the football team came out and presented the Big 10 championship trophy and Troy Smith presented his Heisman to the school. No matter how good their basketball team is, OSU will ALWAYS be a football school, and we could really feel how much everyone there supports that football program… it was a rush.
The next night we made the trip back westward to Bloomington, a town which I’ve heard called ‘A drinking town with a basketball problem.’ Sandi and I are IU basketball freaks, so we were totally stoked except for the fact I was sick.
This game turned out great as well. We got to see our favorites DJ White and Errek Suhr, and all the rest as well. The Hoosiers came out on top after a half-time deficit (shew, that sounded a little bit like Radio-Rob).
A great week of vacationing and a great kick-off of the tour. Pictures will be posted shortly of some of the happenings as well.
Posted in Uncategorized | No Comments »