Are you getting a "removed by HIPS FW" ?

Are you not seeing things you normally would when you surf the web? When you view the html for the page do you see a comment that content was "removed by HIPS FW" ?

The answer is that CA's Firewall product is blocking them. It is configured out of the box to block banner ads. Well, sometimes what it identifies as a banner ad isn't. For instance this one: http://banners.wunderground.com/banner/bigwx_both_cond/language/www/US/MO/Sedalia.gif

To solve this problem, go to CA's Personal Firewall settings. Go to the Privacy group, then configure the Ad/Pop-Up blocker to not block banners.

CA settings pages that need to be updated As another person pointed out, you may also need to check out the Cookie Control advanced settings. I found that in order to get some sites to work properly, I had to allow the private header information to go out.

Extreme Programming: Science or Philosophy?

I am going to build this posting in an iterative fashion. So, don't be surprised if you see it show up again in your feed reader.

What makes something scientific? Provides a way that the hypothesis can be proven false.

Philosophy requires a paradigm shift. Until you are "enlightened" you just won't get it. You can't prove it wrong.

Kent's background and viewpoint.

Ron's background and viewpoint

My experience in spreading the word about XP practices has been primarily one of elightenment. There is a lightbulb that just clicks on when the other party "get's it".

Customer Proxy

When you don't have the customer handy, a good person to represent the customer is the trainer. In my experience, the organizations trainer has been in touch with the needs and practices of the workers. I've repeatedly heard and experienced that the training room is a place where the workers open up with ideas, thoughts and concerns about the software or processes.

Reflector for disassembly

This is a great free tool that let's you analyze, and decompile .Net assemblies in your choice of IL, VB or C#.

There are a number of plug-ins available too. Use Reflector in conjunction with the File Disassembler plug-in for recreating lost source code.

What does TEAM mean to you?

Some people use the word team to say that they work with other people together. For instance in the traditional big shop, the Architect works with the developers and testers. Everyone has their pigeon holed tasks.

In our small team, team means that anyone is capable of doing the job. While I may be responsible for overall direction as team lead, anyone can do all of the tasks. From working to manage the work, the needed documentation/status reports, business analysis, development and testing. This arrangement has been very beneficial for us in terms of integrating new people and coping while people are out a week at a time.

Because everyone can do the work doesn't mean there aren't specialities.  Quite the contrary.  A really good team will be a blend of people with different backgrounds, skills and strengths which complement each other.  A shared vision with a project that has been broken down into achievable goals helps to focus the team on the work.

Another very important aspect of the team is respectful communication and understanding.  Feedback is important. In a functional team the members let each other know when they are not understanding the other persons view or actions as well as when things are going well.  Don't delay the feedback.

XP Code Review

If it's good to do a code review, do it more frequently. This is one of the things that happens when you do pair programming. The code is continuously being reviewed by the pair. However, when you a have a very small team you probably won't have much "promiscuous pairing" going on. Then you can do a daily team code review. It won't take much time because you're only going over today's work not a whole release. Be sure to leave enough time to refactor too!

Spammer's domain name masquerading

It looks like my domain name has been picked up by some spammer's.

My domain name starts with an "early" letter and is nice and short, so it probably caught their attention.

Now, what's happening is that they are forging mail from my domain and submitting it through SMTP servers that aren't doing authentication. So now, I'm getting all sorts of bounced messages.

Seems to me that a couple of things could be done to help alleviate this sort of spamming:

  • All SMTP servers should require authentication
  • All SMTP servers should only take mail for their domains
  • Spam scanners should block messages that weren't submitted through a SMTP server that matches up with the domain name
  • Spam scanners should NOT return undeliverable messages, it just chews up more bandwidth.

Huddle 'round the projector

When it comes to doing a code review or project review, nothing beats huddling around the projector! Even with multiple monitors you can't get more than a couple people crowding in to see the material. Since we have a big white board we can just wipe it clean and connect a projector up to one of the computers video lines. Instant big screen code review in the development area! There's still enough open whiteboard to jot notes or mark up what's being displayed. Now if I could just get the big dogs to spring for a smart board!

I think it'd be awesome to pair (or mob program) using a dual or triple projector set up on a wall!

Interfaces are cool

I'm talking about OO interfaces. They came in handy recently when I was working on some code (Java) that launched a web browser as the result of a message that was received. In my test I was primarily concerned with the message I would receive back from that code.

So, the answer for me, was to extract the interface that I needed for the call to the web browser. Then I created a "mock" web browser that didn't do anything. So, when my tests are run the functional code around the call to the web browser is exercised and I don't have a bunch of open web browsers on my system.

You can do something similar if you are wanting to do some processing on the content received from a web page. Actually going out to the internet and pulling information is an expensive operation. Instead you can create a "mock" web browser class that has hard coded the expected web responses.

I've also been working on some C# code that involves communication between applications. By using an interface specification for the communications layer I can swap out the communications layer at will. For testing I'm using a mock object that implements the interface. Now I'm able to experiment with a variety of technologies for implementing the communications layer and I can choose the one that works best. Or I'll be able to choose the one that works best for a given situation. Definately cool stuff.

In summary, interfaces are a useful tool to keep in your bag of TDD tools.

Crystal Reports and TDD

It is my experience that doing TDD (test driven development) could help avoid some pain with Crystal Reports. Suppose that you have a column of floating point numbers that go out to 6 places. You want to display those numbers to the user rounded to 2 places. Then you are going to display the sum of the numbers displayed. This is where the fun comes in. It was our experience that the sum being displayed is the sum of the unrounded numbers that was then rounded to 2 places. This is entirely different than rounding first and then summing.

So what is the answer? The answer is in the pink book. TDD of the presentation layer is tough. Keep the presentation layer thin. TDD the business logic that puts together the numbers that will be displayed, include the rounding and summing. Pass a dataset or multiple datasets with the data to your Crystal Report. Now your presentation layer is thin and doesn't have to know anything about where the data came from. (No redirecting of databases at run time!)

My XP Team's progress

A recent topic of discussion in the XP2E yahoo group got me thinking a little bit about the progress our team has made in adopting XP, some of the issues we're encountering and where we're going.

We've read the XP2E book as a team and are following on with the XP Installed book. The XP2E book helped us with a lot of the theory and we started down the road together. With the Installed book we're picking up some more "how to do it" material.

  • We've physically opened up our area and are enjoying the improved communication.
  • We're pairing up most of the time. We notice when we don't (more errors and slower).
  • We're holding each other accountable to standards.
  • We are still building our TDD, program by intention skills.
  • We are getting a lot more user involvement, but not co-located.
  • We are having few (near zero) minor defects found in production.
  • We're still getting a handle on stories and points.
  • We're working out issues with testing and data bound controls.
  • We're having problems with integration - we need to install a CI server.
  • We're looking to swap out VSS for SubVersion.
  • We are going to work on picking up design patterns soon.

And as always, how do I test this object that is generated by the ORM tool and expects to see a database on the back end?

This week we moved 3 releases (different projects) to production. All of them sailed through testing with no defects. We have 1 more system pending release and 2 more in testing. Overall, a pretty good feeling.

The weekly planning and keeping focus on those goals is an extremely important thing for our team. The morning stand up helps us to keep our focus.

NUnit - ExpectedException with Custom Exception

While the NUnit docs give a good example of how to test for system exception types, it leaves you hanging on how to capture the custom exceptions that you are throwing. For instance, you might do something like:

throw new Exception("SSN should be formatted 123456789");

How do you set up your test attributes for this exception?

In VB:

<Test(), ExpectedException(GetType(Exception), "SSN should be formatted 123456789")>
        Public Sub ValidateSSNFormat()
        ' code that will cause the routine to throw the expected exception

In C#:

[Test]
[ExpectedException(typeof(Exception),"SSN should be formatted 123456789")]
public void ValidateSSNFormat()
// code that will cause the routine to throw the expected exception

DIY PVC Flute

Have you been thinking about learning to play flute but the cost of purchasing a flute has been holding you back. Well if you're a do-it-yourselfer check out Mark Shep's website and book. Following Mark's instructions I was able to build a PVC flute in no time at all. I've been having some fun playing with it. Next week I'll build one from CPVC.

RSS Bandit

Well, after the issues I had with NewsGator I explored some other news aggregators. I used Attensa for a while now and have been fairly happy with it. However, it is tied to a single machine. Then a recent update broke it and after several attempts at figuring it out and getting it going again, it was just easiest to drop it. I tried the NewsMonster aggregator that works (s'posedly) with FireFox but no go. It wouldn't install and work correctly. I did check out some of the RSS readers on www.codeproject.com but had some issues with one that appealed to me. So, now I'm using RSS Bandit. Having it not tied in to Outlook has actually been a good thing. It has a handy configurable synch feature. I used it to save settings/state to a flash drive. Then when I got home, I installed RSS Bandit on the home machine and downloaded from the flash drive. RSS Bandit went out to the web and pulled the content. I was good to go. Ironically, I should be able to synch with NewsGator OnLine too. Since I've already paid for that, I might give it a go.

MS Word 2000 and Visual Studio 2003 Interop

The other day a friend of mine was asking me about reading content from a Word document. To me, this was an interesting question. I'd previously been exposed to Excel Interop and was somewhat intrigued by his problem.

After a quick search of the web I came across numerous solutions on how to write to a Word document but nothing on reading from one.

So, I put together a small VS2003 solution in VB with some NUnit 2.2.2 tests as a "spike" solution. I am making available the solution at http://www.dbbear.com/WordInterop.zip for a limited time? (maybe) I hope that other's might find the simple class and unit tests handy.

Note: updated based on feedback. Better clean up with finally block.

NewsGator sucks

Right now I am harboring a lot of ill will towards the Newsgator folks. I was one of those that bought the Outlook version early on. You know the one that you'll never have to update again? Well, it didn't take 'em long to figure out that wasn't going to work so they switched their business model to where the Outlook version is part of the business package. But hey, we'll give the existing users a "free" upgrade to the 2.5 version and 2 years of service. After that though you have to pay every year. In a bit of a revolt? many people were sounding off with, whatever, I'll just keeping using this version with out all of the other new features. I simply don't need them. That's the camp I fall in to. Well the folks at NewsGator put their thinking camps on and figured out that they could turn off service to 2.0 clients.
The online synchronization support for NewsGator Outlook edition 2.0 will be switched off on Tuesday, November 8, at approximately 5pm MST.

If you are using Outlook edition 2.0 in synchronized mode, you will need to upgrade to Outlook edition 2.5, which has greatly enhanced synchronization capabilities.

Existing 2.0 customers can get a free upgrade to 2.5, along with a free 2-year premium NewsGator Online subscription, by following these instructions.


But, hey, what am I complaining about, they gave me a whole 34 or so hours notice from the date/time on the email to turning the service off. To frustrate me even further the install process nuked all of my default folder settings for the feeds I'm subscribed too. Nice huh? Then, they proceeded to download the ENTIRE CONTENTS of ALL the feeds. Only about 800 items to wade through. GRRRRR. And guess what else, they didn't fix the post to Blogger bug. I'll have to reinstall that. IS THIS THE FUTURE OF WEB SERVICES? You thought Microsoft had a monopoly with Office, etc. At least they can't turn off your Office 97 installation.

I'll definitely be looking around for a different service.

Update: Now neither of my Outlook Edition machines are synching. Lovely.

Update 2: After having the synch fail, ALL of my specified folder settings have been lost AGAIN.

Update 3: After 3 days, I got an email back from NG tech support. They pointed me to "Greg's" blog where he says it's just the synching which will quit working. One of the main reasons people bought the lifetime Outlook version.

My favorite part of the response: "If you still have 2.5 installed can you describe the problems which you have?" I thought I had outlined them pretty well here. But as of this moment, I don't have NewsGator installed.

NewsGator really screwed up on this whole deal. They should have just sucked it up and let the 2.0 folks continue on with what they have. And then try and entice them to switch to one of the newer plans with better features and service. Depending on what we see in OutLook 12 or Windows Vista RSS, the need for NewsGator Outlook edition will be obviated. The NG WebEdition and Synch Service is where they will be making money down the road. That's why they had to figure out a way to pull the plug on the existing lifetimers. It all smacks of the PayPal "free now and free forever"

Extreme Programming in St Louis, MO

We had a meeting Monday night and did some testing of "untestable" code. Brian Button briefed us with a simple problem he'd run into and presented us with a sample project to tackle. The problem was not so overwhelming that you got lost in what it was that was trying to be accomplished by the code, but you could focus on the testing part. (It was a simple problem dealing with putting together a string based on the AppDomainName.)

We broke up in to small groups. Mixing up some with people we don't usually work with. (Which I really liked.)

The first thing we had to do was put together a VS2003 C# project. The VS2005 solution format isn't compatible with VS2003.

Brian had already briefed us that two of the tests weren't passing and it was obvious that this should be the case. However, the fun part was that two of the test may or may not pass depending on the test runner you ran them with. Initially, NUnit was passing two of the test and ZaneBug was failing all of the tests! It turns out that NUnit creates an AppDomain with a much longer name than does ZaneBug. I liked being able to switch between the two different test runners and see how things were behaving.

    The interesting things for me out of the evening:
  • My team got to see TDD on "untestable" code.
  • We got to practice mob/pair programming.
  • We got to interact with other people that are doing/working towards XP.
  • The different groups came up with 3 or 4 other solutions than what Brian had coded.
  • Although we didn't go this route, I saw where an interface would have been handy in creating a mock object.
    Things to keep the same in the future:
  • Mixing up the groups with people that don't usually work together.
  • Simple problems that let you focus on the TDD as opposed to the algorithm, etc.
  • Open networked environment
  • Brief presentation to entire group
    Things I'd do different:
  • Let someone else drive?
  • Have beginning/starting point code available printed.
  • Give TDD guidance up front or at the end, but not during session. (Only answer the business rules questions.) Maybe preferably at the end? I'm pretty sure we would have implemented things differently if we didn't know how Brian had implemented it. Although, we did discuss the various alternatives and their pros-cons and opted for the route he went. Partly for the sake of time, too. But once you had an inkling of how it was solved it seemed a bit like being told the ending to the movie.

Overall, I enjoyed the meeting and I look forward to future meetings and "hands on" nights.

Recent Command Post Deployments

I was Incident Command at our local "Ham and Turkey Festival" this past weekend. Luckily only a few minor incidents. We had our EMA command post set up and had multiple Law, multiple Fire, EMS and 911 in the structure. Good activity for all involved. I won't say exercise or training, because it was the real deal. We had real issues with the real people responding. As part of it, we were testing all features of the new command post and working with a prototype CAD software I'm developing. Numerous tours were given and feedback was gathered for review. 153 hours were logged for the event. Last night we had our first rapid deployment. We hadn't fully rehab'ed from the weekends activity, but we had worked out some kinks Saturday at the Ham and Turkey Festival. We responded with the Command Post to an overturned propane tanker. Ironically? while enroute, another ham from the neighboring county gave us a holler on our local UHF repeater to ask about our status. He was out with the HazMat Comm team from that area, which serves a wide area including our county. Luckily we didn't need that resource. It was estimated that 80 gallons of diesel and 8900 gallons of propane were onboard the truck. We set up on the road blocked highway in the cold zone. The incident commander took up residence at the command post and we established communications with the Law, Fire and EMS units on scene via mutual aid channels. The central dispatch center was able to clearly copy our traffic on one of the mutual aid frequencies. This freed up two of the county wide repeaters for other use. (Did I mention we also had another active incident in the same area a result of an earlier tornado warning?) We had numerous entities involved and multiple locations. Approximately 70 hours were logged during the time the command post was on scene. It was a somewhat extended deployment but overall very successful and rewarding.

Katrina window open and closed.

Well, I came close to deploying to Katrina several times. Actually had the green light once and was then disregarded. The last round I was scheduled for a third rotation with a comm team and the second team was released, mission complete.

Long Weekend

Complete Universal kits are never complete nor universal when you are 30 minutes from the hardware store.

A loose (inaccessible) battery cable is all it takes to make all your gauges wacko and finally leave you stuck on the side of the road.

No one stops for a big biker guy on the side of the road. Unless you've just about got the bike strapped down in your buddy's cattle trailer. Then the police stop to check things out.

The indicated gasket that you picked up before the bike died doesn't fit.

Finally, universal air conditioner install kits are not designed for the metal frame and concrete sash of a dorm room.