November 27, 2007
@ 11:36 PM

No matter how agile your development practices are, and no matter how skilled your team is, you can still generate a failure.

There are some sure signs you are headed for a failure that you can watch for. One of the most obvious and common is when deadlines are set without regard to input from the development staff.

Artificial "drop dead" dates are always a sure sign of trouble to come. It is especially worrisome because it is so prevalent. I have participated in a number of projects where the milestones, phase durations etc, are set in stone before all of the analysis is even complete.

A common scenario, particularly in "internal" non commercial projects is that the business unit identifies a desired set of functionality and delivers the desire in the form of a loosely defined set of requirements, accompanied by a delivery date that is usually wildly optimistic.

I actually worked for a company where the development manager was fond of saying: "The customer will settle for 80% of the desired functionality."

This is far more common than anyone would like to believe. And the particular company I am speaking of is still developing internal projects with the same mentality 10 years later. (I am no longer there, but people I know still are.)

The result of this "settle for" mentality is that there is a loss of confidence in the development group by the customer, and a sense of hopelessness in the developers that becomes pervasive. Most developers leave, a core group will stay until they burn out, but by and large these teams are marred by high turnover rates, low morale and frequent re-organizations.

Do you work for a settle for group? Any idea on how to combat this from within? Please share your thoughts!

Cheers,

Robert Porter


 
Categories: Programming | Ramblings | Rant | TDD


November 26, 2007
@ 10:10 PM

I will be working in Kentucky this week, which means posting may be a bit light for awhile.

Going to be looking at VS2008 this week, and will try and come up with a couple of posts about my install experience and first impressions etc.

Also will be working with some interesting Vista related stability focused hotfixes that I have recently become aware of. As I get the chance to check these out I will post about them as well.

Meantime, going to see if I can introduce at least some agile practices at my new project. Am not going to hold my breath as I am not in a position with any significant influence, however I can try.

Currently, I am stuck in RDU airport waiting for the aircraft to be repaired. I was originally supposed to be in Kentucky by 9 AM, now looking like about 3:30 PM if there are no further delays. <sigh> Travel is often not according to plan, hope my luggage manages to find me!

UPDATE: It took all day to get to Kentucky, and my luggage is still a few hours behind me.

Cheers,

Robert Porter


 
Categories: Misc | Ramblings | Visual Studio


November 16, 2007
@ 04:00 PM

I just came across this site and the resources contained for the first time today! Thanks to post by Robert C. Cain better know (at least by me) as Arcane Code.

Take a peek at the .Net University web site and materials, it is well worth the visit!

The available courseware is freely downloadable and they allow it to be "re-delivered" to technical audiences.

Their mission statement gives a pretty good idea what they are all about:

Welcome to .NET University! Our mission is very simple. We want to give you a good developer-oriented overview of new and emerging Microsoft technologies.

This site has been added to the bookmarks!

Cheers,

Robert Porter


 
Categories: .NET | Programming | Rave | Reviews | User Group | Visual Studio


November 15, 2007
@ 02:12 PM

Scary thought seen at blogoscoped in an article by Philipp Lenssen's. He raises a point that I have not fully explored. With our increasing use of and dependence on "elsewhere" hosted services such as Google and Windows Live, what would you do if your account was hacked?

Another factor that in my mind increases the risk, is that with more and more services available via a single sign on, if your account is compromised you could have a great deal of vulnerability across a very large surface in a very short period of time.

Take Google for instance. If my account was compromised the attacker would have access to my:

  • Email, and Archives (GMail)
  • Contacts (GMail)
  • Notes (GMail)
  • Appointments and Schedule (GMail)
  • Documents (Google Docs)
  • Photo Albums (Flickr and Picasa)
  • Blogs and Blogs I have access to. (Blogger)
  • AdSense Account

Now I operate by the rule that anything I store on someone else's server is accessible to the world anyway. For that reason I don't store any family or professional secrets, medical info etc online, however even my day to day info would be a goldmine for a potential identity thief. Or to a competitor.

But increasingly more and more information is being hosted behind fewer and fewer federated logins. Which means you can have large areas of your online life compromised by losing a single password.

Not to mention the potential damage that could be done just by having access to your account, such as sending emails that actually DO come from you (just not actually authored by you), to everyone in your contact list.

It does not take long to think of nightmare scenario's. So as Philipp asked "What would you do" if this happened to you? Do you have all that data and email backed up somewhere? Even if Google or Microsoft restores your access to your account, some or all of your data may be gone.

Has anyone had something like this happen to them? If so what did you do to regain access and did you lose anything irreplaceable?

Something to think about!

Cheers,

Robert Porter


 
Categories: Misc | Ramblings | Security


November 9, 2007
@ 02:35 PM

I have added a "Home" page again, which is currently visible at http://www.rp2c.com which will soon have several static pages that will be linked to from this blog.

My thoughts at the moment are to add the following:

 

Projects Page: Projects I am working on or involved in.

Tools Page: Tools I use day in and day out, and my thoughts on them.

Community: Links to various community sites I find useful.

 

There will be static links in the sidebar on the main blog page for each of these, as well as links from the home page mentioned above. Please let me know if you think I am missing something.

Cheers,

Robert Porter


 
Categories: Misc


Like most of us I use a number of FTP sites in the course of my daily work. I use FileZilla, I have a U3 compatible version on my USB Thumbdrive, and the "regular" client installed just about everywhere else.

FileZilla like most clients, has an address book that you can store connection information, including usernames and (optionally) passwords in. And on my thumb drive and home clients I do store the passwords, and I typically also create a SplashID entry in my primary password keeper. I sync SplashID to my phone, or I used to, until a combination of Vista, Windows Mobile 6, and Vista's new replacement for ActiveSync now called Windows Mobile Device Center, rendered syncing unworkable. (Story for another post!)

I recently had need to communicate the username and password for an FTP login to someone else, and without access to my stored passwords and due to my inability to remember 38,359 passwords off the top of my head I was out of luck. Until I remembered Microsoft Network Monitor!

I fired up NetMon and created a new Capture Tab as shown: (Click on the image for a full size view)

netmon01

Then in the Display Filter I entered a filter expression that consisted of the destination address I wanted to capture traffic going to, and the protocol I was interested in, in this case FTP.

(The latest versions of NetMon have intellisense for filters built in which makes writing filters much easier. Not using a filter means you would have to wade through several hundred to a few thousand lines of captured traffic on a typical network.)

netmon02

Then I fired up my FTP client, switched back to Network Monitor, started the capture, switched back to the FTP client and initiated a connection. Once the connection was complete, I switched back to Network Monitor and stopped the capture and there was my password!

netmon03

Now this works best if it is a non encrypted connection, although having not tried it with an SSH connection I am not sure if it would not work there as well.

There are dozens of good network sniffers and packet capture utilities out there, I use NetMon and WireShark as my two standbys. NetMon I use for day to day captures when I am diagnosing web services traffic, or local network issues, WireShark I bring out when I need the "big guns" looking for intrusion or other wide area issues, like traffic trends etc.

Cheers,

Robert Porter


 
Categories: Security | Tools and Toys


If you write code for a living, no matter what language, flavor, or IDE, sooner or later you begin to develop/write code to a set of unwritten rules that experience has taught you. Sometimes these rules are based on great, hard won lessons, wrested from spectacular failure or success. (Both failure, and success are great learning opportunities.)

Other times they are holdovers from some other project or something you learned from someone else. Or even something you just do but can't explain. My favorite story about the genesis of those kind of rules is as follows.

Child watches Parent making a meatloaf, after the meatloaf is made, Parent takes it out of the pan and cuts about 2 inches off one end and then puts it in the oven. Child ask's Parent why they always cuts 2 inches off the meatloaf? Parent pauses for a moment and says they are not sure why, but their Parent always did that. They decide to call Grand Parent and ask them, Grand Parent thinks for a minute and says it's because their Parent also did the same thing. A quick IM to Great Grand Parent asking why this was done results in the response: "Cause my oven was small and a full size meatloaf would not fit!"

Sometimes, we continue a practice out of habit, not because the need is still there. Most of the time this is fine, but sometimes we unconsciously propagate a behavior or methodology that has lost it's meaning or usefulness over time. Sometimes even to our detriment. It is useful therefor to question why we do things the way we do every now and again. A few moments of introspection can lead to an "Ohhhhh" moment.

I recently experienced such a moment when I was explaining some code I had written to another developer. Once I had finished my explanation they asked me a series of questions about why I did it this particular way as opposed to another. My knee jerk response was "because it's the best way" followed by an unspoken "that I am aware of".

The discussion continued and I soon learned that the method I was using was not only obsolete but was potentially dangerous because of changes in the underlying structure of the language I was using. Changes I was not only ignorant of, but which made a much more robust solution possible.

The method, involving collection classes, that I was using was one I had been using in one form or another for years. I was so comfortable with it, that I had ceased to question it, or look for alternatives. I had developed a blind spot when it came to that particular topic because I was so deep in my personal comfort zone that I subconsciously did not want to move away from it.

This is also an example of the benefit of pair programming, TDD and agile methodologies. To a lessor extent the same results can occur in any team environment. Looked at another way it is an example of why solo developers sometimes do not fare as well. Not having a team to bounce ideas off, or to have question and challenge you on assumptions and approaches can often lead to practices that become bad habits.

That is not to say that all solo developers progress less slowly or that all teams progress better. There are plenty of examples out there of "Toxic Teams" and solo Super Hero coders. But it is nice to be exposed on a daily basis to others points of view, experience and skills. You can derive a lot of the same level of benefit, albeit less interactively, by reading blogs, and participating in development forums all over the net.

But every now and then, solo or team member, you should stop, reflect, and refactor your own thinking process and assumptions. Weed out the things that no longer work for you, and try and replace them with things that do. Learn something new, test it against your own experience, if it seems to fit consider making a new habit to replace an older one!

Cheers,

Robert Porter


 
Categories: Agile | Programming | Ramblings | TDD