The world of development is an interesting one where creativity comes alive through code to produce wonderful programs that do lots of cool stuff.

Okay that's the Wizard of Oz intro over, is it really that rosy?

It seems the world of development has changed a great deal and gone are the days when you could just be a code cutter (though such roles do exist and are required), it seems a developer has to now master a wide array of skills and do battle with various foes like the Windows Operating System (level 72 elite boss for those that are keeping track...) as well trying to do their day job (which in itself now consists of different minion roles).

With the advances in .NET development there are a wide range of Frameworks, Tools and Add-Ons that can be worked with, installed and generally cried over (a black hole in which I have been sucked into, the crying bit...).

Coders

Now I can hear you say, that's all good but we don't have those problems, we have a Textbook Development Team with a Textbook It Support Team in a Textbook Office but that is not quite the real world and you will often have boundaries between teams becoming thinner or more common now, the lack of resources and/or teams (leaving the task of taking on those roles and their responsibilities up to the individuals in the department and organisation).

But then the question has to be asked, just how efficient and proficient can you be as an individual, a team and a department if you are spending a percentage of your available resource and effort performing other duties, often to prepare something prior to performing your actual task or after the event where you still need to perform a multitude of other tasks (covering various roles like administration etc.).


And this is where my hell begins...

Now don't get me wrong, I enjoy the techie element of my role, I feel I fulfil the developer title more fully by being able to flex my many different skills (making me adaptable for almost any occasion), a result of accumulating experience in a wide range of sectors starting from my humble beginnings as an IT Support guy, moving into a System Administration role, sideways across into Application Support, Technical Project Lead, Solution Architecture and back into Software Development in my current role as an Senior .NET Enterprise Developer (not Star Trek...I wish it was, but it's not and I have to live with that disappointment for the rest of my career life...I tried do the Spock hand thing, got strange looks from the others in the developer forum...).

In the company where I work now, my team is fairly self-sufficient and that often means we do a lot of the stuff ourselves (whilst still going through proper channels as required) which is great as it means we can quickly prototype solutions through a Virtual Machine on our PC or install a particular tool we need to perform some task – all of this means that we generally have control over our own PC's (as all developers should...but they don't unfortunately).

But it's a double edged sword as I found out the past few days and while being able to administer your own PC's and Server's is great it can quickly become a bottomless pit that you simply can't escape no matter how many Bear Ghryll's episodes you have watched (some English guy on the TV that does cool stuff to survive, like James Bond for the wild).


So begins my particular episode...

I have a pretty snazzy developer PC inherited from my predecessor, a rather cool Hewlet Packard Z600 Workstation specced up to the hilt with serious 'Uber' hardware (dual quad Xeon's, stupid amount of memory, SSD's, drool...) and thankfully I have complete control over it (mostly) so I had the chance to configure my PC the way I wanted it to do the development I needed to do.

I have the usual culprits on there, Visual Studio 2010 Premium SP1, MSSQL Server 2008 R2, VMware, lots of useful tools (Notepad++, Red Gate, Solitaire) all running on a Windows 7 Professional 64 bit...nothing out of the ordinary there I hear you say, ah I haven't told you about that little evil gremlin called Oracle, more specifically Oracle 64 bit and 32 bit clients on a 64 bit operating system (yes, that combination should cause you to feel nauseous).

The goal was simple, get the latest version of a large .NET Enterprise project, build it, tweak it, break it and glue it back together.  However there was one caveat, I needed to then install the following in some order (mostly like this one):

  • Install the Oracle 64 bit Client for Windows
  • Install the 64 bit ODAC stuff (for some nice ODACness), the Xcopy version btw
  • Install the 32 bit Client (ODT with ODAC)

Simple enough I thought, having virtual zero Oracle skills I was up for the challenge and felt confident I had the knowhow and experience (plus large balls) to deal with any issues that might crop up and like a true techie I refused to read the manual (text file in the case of Oracle products)...I was in for a bumpy ride it seems.

* It should be noted here, if you do happen to install the 32 bit client first and/or the Oracle Developer Tools and ODAC (32 bit), you will have seriously random Installation problems trying to install Oracle 64 bit Client (the solution is to follow the instructions further down in this post to remove and clean up your PC).

I went ahead and installed the 64 bit Client, in this case I used the client installation that came provided with the Oracle 11g database installation CD (supplied by the tech support guys), selected Administrator as the installation type, pointed the installer to where I wanted the files to go, set the Oracle Home directory and went ahead with the installation (no problems here).

Oracle Installer

All good so far, put my TNSNAMES.ORA file into the  {Oracle_Home}Product11.2.0Client_X64NetworkAdmin folder, fired up a Command console and used Sqlplus to connect to an Oracle 11g database server that was supplied by the tech support team, worked like a charm.

After doing this I installed the Xcopy version of the 64 bit ODAC libraries and tools which can only be installed by the command prompt so you need to run a command similar to this in the installation directory:

install.bat all c:oracle OracleHome_Client1

Or something similar to the above command which should go ahead and install the required ODAC bits into the proper place (you need to ensure you specify the Oracle Home directory).  Again this went fairly smoothly as well with no hick-ups so up next was the 32 bit client and here you need to make sure you install the Oracle Developer Tools with ODAC which includes the 32 bit client otherwise you will experience much pain as I did (where I installed the 32 bit client, then ODAC and other bits which caused no end of pain due to path problems, mismatched versions of dll's etc).

The above allows you to correctly use PL/SQL Developer (if you have this cool application installed) as long as you remember to go into the Tools > Preferences > Connection section and set the OCI Library to the correct location (e.g. {oracle_home}product11.2.0client_1oci.dll or client_1binoci.dll depending on your version) and any other application that requires the 32 bit Oracle Client.

Now the above hard work should be adequate to get a working Developer Workstation with both 64 bit and 32 bit Oracle Clients and Developer Tools however there is always a but...what I didn't tell you was the amount of pain I went through to get the above installation list right, and believe me it was extremely painful and as I have found out after posting this blog page, there a few other client combinations that can work e.g. having a primary 32 bit Oracle Client installation with the developer tools and a 64 bit Instant Client installation (will save this for a future post).

I spent an awfully long time getting my workstation working and when things did go wrong (which they did a lot, just Google the various issues people have had trying to install and use Oracle clients with their Visual Studio developer machines) I barely got any work done which prompted my colleague to say:

"We have to do so much administration work, just to get to a solution developed and delivered"

Which got me thinking, this is very true and probably becoming the norm now with modern development, more so in my case due to the nature of the team I am in i.e. we develop lots of bespoke solutions, integration various systems together, sometimes involving small pieces of development to large scale projects.

What I haven't shared is the nightmare scenario I ended up in with a totally messed up pair of gac's (32 bit and 64 bit) and problems compiling any of our projects because they all used one combination or another of the Oracle client (mostly 64 bit now).  So if anyone has had this problem here is the proper way to deal with it...

Open Command Prompt and change to the directory containing your Oracle client installation and run the deinstall.bat batch script:

{oracle_home}product11.2.0Client_X64Deinstalldeinstall.bat

Once the de-installation (uninstall to you and me...Oracle people...) is complete you need to run the Oracle Universal Installer (semi-cool Java tool...Java is not cool, the app is however).  When this app fires up you have the option to Deinstall any installations on your system:

Oracle Deinstall

Select all the products and then click on Remove to uninstall (deinstall) the products:

Inventory

If you have no issues with the uninstallation of the Oracle Client stuff you will need to go into the Windows Registry to make sure you remove any references to an Oracle installation otherwise your future Oracle Client installation exercises will result in broken installations and more headaches.

Edit the registry (click START > type regedit32) and start with the following registry location:

HKEY_LOCAL_MACHINESOFTWARE

Find the Oracle Key and delete it, do the same for the HKEY_CURRENT_USER and HKEY_USERS (you will need to go through the various sub parent keys and find any Oracle sub Keys and delete them).

Don't forget to clear the gac's (both 32 bit and 64 bit), I found this the simplest way of doing it:

  • Start Command Prompt for Visual Studio 32 bit
  • Type gacutil /l > c:gac32list.txt
  • Open the gac32list.txt file and find the word Oracle
  • In the Command Prompt window type the following commands:
    • gacutil /u Oracle.DataAccess
    • gacutil /u Oracle.Database.Extensions
    • gacutil /u Oracle.Web
  • Close the Command Prompt window
  • Start Command Prompt for Visual Studio 64 bit
  • Repeat the above commands
  • Close the Command Prompt window

This should give you a clean installation and hopefully allow you to get a working installation of the Oracle clients on your .NET Developer Workstation.


So back to the question at hand, just what kind of developer does a developer need to be?  Someone who is comfortable at administering their local, virtual and remote computers?  And just how much effort should be made before you require assistance (and will that not take more effort) but what if you work in an environment where the resources are not available and you have to "man up" (so to speak) and take the reins, do you factor that into any and every piece of work and project you do?

Well in an ideal world you would minimize the effort required for each subsequent piece of work and/or project however you cannot avoid the moments when you will simply have to dig into the trenches and get your hands dirty so be prepared to lose half your estimated time (if not more) battling system incompatibilities, software bugs, assembly hell and those gremlins that keep causing you to see spots on your screen (honest).

Set aside time to climb a difficult mountain and get your hands cut, you will need to work out the many holes in your nice setup and as more and more technical requirements popup don't expect everything to work well together the first time (you have to integrate your own development environment first).

So key here is to develop the expertise if you don't have it at hand, become adaptable but remain honest to yourself (you will have to go through some pain to get to the fruits of your labour).  Use knowledge base tools (Wiki) to record your efforts, communicate your findings with your colleagues and attempt to automate and make reusable as much of what you use as possible.

This will help you better deal with those moments when you have to spend most of your effort on the administration of your development work as appose to the actual developing and as a bonus increase your skills repertoire which every modern developer shouldn't shy away from (becoming more agile in nature by having a can-do attitude).

mememe

I dedicate my first LTD blog post to Chrissie1.


References:

Oracle 11g Database Download (includes the clients)

ODAC Xcopy 64 bit Download

Oracle Developer Tools with ODAC 32 bit