Archive for category engineering

Tech Tips from Appdev to Virtual PC

Quick Tips on Virtual PC development, LDAP, Training, Security, and eBay


Just an assortment of hopefully useful miscellaneous items from things I’ve been working on lately along with resources for further review.

  • Virtual PCs (VPC): If you’re in consulting you will find it necessary to develop programs on various platforms- Windows 2003, 2008, XP, Vista.  The client doesn’t always have these available for testing purposes…that’s where the invaluable virtual PC comes into play.  By purchasing a Microsoft Technet subscription for $200/year you’ll get access to download all versions of Windows OS’s and tools.  This in conjunction with Microsoft Virtual PC software will allow you to run any OS inside the virtual environment along with necessary tools.  These virtual PC’s can take up quite a bit of disk space, so it’s a good idea to also buy a small USB external drive to store these images.  This has the advantage of providing multiple virtual images on a small portable drive you can use on almost any PC.  I literally couldn’t do my job without these tools and rely on them every day.
  • Getting VPC 2007 running on Windows 7: I found there are a few quirks when installing and running Microsoft Virtual PC 2007.  Firstly, if you’ve already installed the newer Windows Virtual PC on Windows 7, you’ll have to UNINSTALL it via the control panel applet (clicking on the Windows components will show this option, it’s not in the normal list of programs).  If you do not do this, you will get errors when running VPC 2007.  Next, when running make sure you always run VPC as an administrator (right click on the program icon and choose “Run as Administrator”), otherwise you’ll get an error that the virtual hard drive is read only and other cryptic errors.  Once I did those two things, the program runs flawlessly!
  • Server 2008 and Active Directory/LDAP lookups: I’m currently working on a prototype webapp which takes the current logged in Windows user, looks up that user in active directory, and pre-fills fields with user info such as full name, email, and phone number.  To do this, first create a VPC (see above) for Windows Server 2008 and Visual Studio.  You’ll also have to set up active directory and a domain controller on that test image.  Then, refer to the following article I found which covers this topic in great and useful detail: .  The code is remarkably simple in .NET 3.5…a definite improvement over 2.0.
  • Online video training:  I’m constantly studying various Visual Studio features for certifications.  I find that reading books or on-line articles extremely boring and recently purchased a 1 year subscription to AppDev online training. You can occasionally find deals to get full access to all classes for $1000, otherwise you can purchase just what you’re interested in. I find the video training really engaging and a nice complement to traditional book studying.  This in conjunction with transcender practice tests gives excellent coverage for the Microsoft certification exams.  Note- I’m not affiliated with these companies, just a happy customer.
  • Windows Phone 7 Development:  Microsoft’s new mobile platform is shipping soon and it looks to be very competitive.  Here’s some more info from Paul Thurrott’s site: Hands On With Windows Phone 7.  There’s free tools available now to develop applications, I haven’t tried them out yet but will do so eventually:
  • eBay, PayPal, and the USPS: I recently sold something on eBay…it’s been a while and was really happy with the transaction. The whole process is now seamless and user-friendly from listing through payment and even to shipping via USPS.  I was pleased to learn that after you’re paid in PayPal, you can print (and pay for) a shipping label right from PayPal including insurance.  Both you and the buyer gets an email receipt with confirmation number. The USPS flat rate priority mail boxes (provided for free from the post office) are the way to go…you can stuff them with any amount of stuff for about $10, apply your shipping label, and even have your mail carrier pick it up for you.  Nice!
  • Security Updates:  The hacker conference Black Hat is going on now, and so the annual parade of security flaws uncovered is flowing fast. This is just a friendly reminder to keep everything up to date as there’s been serious flaws found in FireFox, Windows (a really bad one involving .lnk shortcuts), Flash, and Itunes/Quicktime.  Don’t waste a moment downloading and installing the latest updates for these programs.  And why you’re at it, have you updated your backups lately?  I thought so….

Goal-Centered Design

Alan Cooper’s  About Face 3: The Essentials of Interaction Design is the standard for user centered design, in my opinion.  The original 1995 version changed how I approached designing computer programs & interfaces and every programmer who writes user facing systems should read any version of this book.   Warning:  If you’re currently working on a GUI intensive app, reading this book may cause you to rework lots (but the users will benefit).

The latest version is much expanded from the original but the second half especially has useful information on proper use of dialogs, toolbars, menus, etc. The first part covers mental models and behavioral aspects of human-computer interaction and the last part goes through many current UI paradigms which could be vastly improved.  An interesting read on many levels and worth the time if you’re interested in this area.

5 Tips for Crash-Proof Consulting

Are you considering a career in computer consulting?  Here’s some semi-serious personal tips I’ve developed from years in the trenches…consulting

  1. Expect Chaos, Deliver Zen: Consultants are brought in because the client lacks resources or expertise for an important project they’re willing to pay good money for.  Things will be disorganized, confusing, and probably behind schedule yet you should project a calm, confident demeanor no matter what the craziness.  Some calm words and projecting zen-ness will be greatly appreciated, and necessary to save your sanity.
  2. Skim the Docs, Step the Code: Clients will dump documents galore on you, the fact is most are out of date and incomprehensible because you aren’t intimately familiar with this specific project-speak.  Spend minimal time skimming these documents, but spend lots of time actually stepping through sample project code in a debugger.  The code doesn’t lie, and gives priceless insight into how the application works, technical architecture, and standards.  Get a quick demo of any relevant apps, then insist on code access and test accounts to start stepping through the code line by line, module by module.
  3. Under Estimate, Over Deliver: Before even memorizing your network login you’ll be asked to give project estimates.  Be honest but realistic, then add some buffer.  If your original estimates are accepted, everyone will be ecstatic that things come in ahead of schedule.  If you’re ahead of schedule, squeeze in some extra documentation and deliver more than expected.  You’ll feel like a hero, and your client will feel even better.  Everyone wins.
  4. Less Is More:  When asking for decisions, give about three proposals but no more.  This gives some valid, thoughtful choices, but doesn’t paralyze with too many details.  Don’t over complicate designs or decisions with too many choices…it’ll all change in a few weeks anyway and require new decisions.

  5. Three Days to the Future: The mood and experience of the first three days will predict the future, things will not change.  Wonderful, fabulous people with interesting projects will stay that way.  Conversely- boring, aggravating, disorganized projects won’t miraculously get better.  If a project you’re on rubs you the wrong way immediately it might be time to find something else.  It’ll save lots of pain and suffering in the future.

There’s tons more tips, but I think these 5 can really result in increased performance and realistic expectations.  Keep them in mind for a successful consulting job or just improving your current job.

The Simple Things

While working on some enhancements for a client’s application I was reminded how sometimes simple changes can be powerful, useful, and appreciated by end users.

I was giving a demo of new functionality, some of which was pretty slick, but the changes which got the most positive reaction and comments from users were three simple and seemingly boring ones: sorting a list in descending order so newest items were at top, defaulting some date fields to the current date, and filtering out old records (but giving a way to show all of them).  These ideas came from the users themselves but I never realized how useful they could be.

Not having these simple changes were really annoying on a daily basis to users because it forced extra steps to complete very common functions.  Nobody wants to click through an extra long list because the default sort order in database is ascending rather than descending…and constantly entering today’s date for a field when no other date makes sense is irritating.

It’s so easy for programmers to get stuck in the rut of just getting things done when some time should be spent in the user’s head..imagine how your application is perceived and used doing real work throughout the work day.  You might discover something simple which can make a huge difference to many people.

Don’t Call Me Shirley

People in other professions have fairly concrete titles which indicate what they do.  Think surgeon, math teacher, architect, or president.  The computer field is somewhat different in that I’ve been doing basically the same thing (developing custom software on Microsoft platforms) for years and have been called software engineer, consultant, contractor, programmer, computer scientist, systems engineer, developer, and systems analyst (with various numbers involved even!).

None of those really capture the art and science of programming accurately.  Even after decades of research, discussions, methods, and patterns,  working in computers is definitely not a science with well defined rules and methods but it also isn’t an art with zero defined rules.

It’s a mixture of both and one of the reasons I think the field is so difficult and intimidating.  It involves a high degree of something like ordered creativity– being able to recombine patterns and ideas into something which is unique for each person but able to solve problems many have.  You don’t have to be a genius to do this, but not many people have the insight and patience to work like that (and of course can stand endless hours in boring cubicle farms…a topic for a future post).

Of all the terms, I like “software engineer”.  It best encompasses the ideas of structure and creation with the “software” modifier indicating that yes, no matter how hard we try, programming is fuzzy, malleable, and adaptable.