Sunday, April 10, 2011
I have been an avid reader all of my life. Everything from SciFi and Fantasy to Technical Books and a little of everything in between. Being a geek, I was of course an early adopter of eBooks. Over time my eBook collection became huge, on the order of over 10,000 books and publications. Long before I reached that point I needed a way to manage that collection. After several different attempts I finally settled on a program called Calibre (pronounced cali-ber according to the developer) which I have now been using for just slightly under 2 years.

This program truly changed the way in which I manage and use eBooks. In fact it was the driving factor that changed how I read. Calibre allows you to slice and dice your collection using user defined tags and categories, as well as metadata such as author, publisher, tags etc. It allows you to copy books between your main library and any device that connects as a USB drive. It directly supports most popular eReaders such as the Nook and Kindle, as well as most smartphones like the Blackberry, Android based phones and Windows 7 based phones. I have an Android Droid 2 Global, and a Color Nook both of which are supported. I can move and copy books between these devices easily.
I added Dropbox to the mix to enable me to keep my library accessible on any device that I have a Dropbox client for, such as my phone and my laptop. Now from anywhere I can reach my library and even add books remotely to it!
One of my favorite features of Calibre is it’s ability to convert between just about any format:
Input Formats: CBZ, CBR, CBC, CHM, EPUB, FB2, HTML, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT
Output Formats: EPUB, FB2, OEB, LIT, LRF, MOBI, PDB, PML, RB, PDF, SNB, TCR, TXT
With my Nook, I have the client software installed on my home system, my laptop, my cell phone, and my Nook of course. I can read a book on any device, and when I switch devices my place in the book is remembered. If you have even thought about eBooks, I would strongly recommend looking into the possibilities. I can now read and enjoy my books anywhere without having to lug around hard copies.
Cheers,
Robert Porter
Tuesday, January 11, 2011
Over the years I have used a number of different types of phones. Windows Mobile, Blackberry, Nokia, and now Android. Until the Blackberry, which was my last phone (and I still have one issued from my office) I had never found a phone that “just worked” especially with email and messaging. The Blackberry did, and does, excel at those functions.
My last personal phone was a Storm 1 which was Blackberry’s first touch screen phone. The Storm 2 was an improved version that fixed some screen press detection issues from the first model and it added Wifi.
Over the last few years I have watched others acquire and fall in love with their ‘Droid’s including a number of iPhone users which surprised me. Our office has until recently only supported Blackberry phones, adding iPhones within the last year or so. When I spoke with our internal telecom folks they confirmed they were evaluating Android phones, but felt they still were not secure enough out of the box for corporate use and SOX compliance.
That being said, as a personal phone, the Droid Rocks! I am impressed with its speed, the number of apps available, and the overall design. It is not as “flashy” as an iPhone but it does everything that I care about and more.
The model I bought is the Motorola Droid 2 Global from Verizon. It is currently running Android 2.2 for it’s OS, 2.3 is just around the corner. It has 8 gigs of internal flash memory and can handle up to a 32 gig SDCard. (I currently have 2 8 gig cards, one for backups, and have ordered a 16 gig card!)
Being a geek at heart, I “rooted” the phone which means gained superuser access to the OS on the phone. And opens a number of doors for further modifications down the road. Also being a geek meant I have already setup a development environment and built and deployed the obligatory “Hello Droid” application.
I will be writing of my development experiences with this new platform here often, to start off I thought I would share my current application list to give you an idea what I am using.
Zedge: http://market.android.com/details?id=net.zedge.android
XDA: http://market.android.com/details?id=com.quoord.tapatalkxda.activity
WRAL.com: http://market.android.com/details?id=com.mylocaltv.wral
Wireless Tether: http://market.android.com/details?id=android.tether
Winamp: http://market.android.com/details?id=com.nullsoft.winamp
Win7 Clock: http://market.android.com/details?id=com.androidapps.widget.toggles.win7
Wifi Analyzer: http://market.android.com/details?id=com.farproc.wifi.analyzer
WeatherBug: http://market.android.com/details?id=com.aws.android
Weather Widget Forecast Addon: http://market.android.com/details?id=com.androidapps.weather.forecastaddon
Weather & Toggle Widgets: http://market.android.com/details?id=com.androidapps.widget.weather2
Vlingo: http://market.android.com/details?id=com.vlingo.client
VirtualTENHO-G: http://market.android.com/details?id=jp.bustercurry.virtualtenho_g
Twitter: http://market.android.com/details?id=com.twitter.android
TweetDeck: http://market.android.com/details?id=com.thedeck.android.app
Tricorder: http://market.android.com/details?id=org.hermit.tricorder
Titanium Backup PRO: http://market.android.com/details?id=com.keramidas.TitaniumBackupPro
Titanium Backup: http://market.android.com/details?id=com.keramidas.TitaniumBackup
Terminal Emulator: http://market.android.com/details?id=jackpal.androidterm
Talking Tom Free: http://market.android.com/details?id=com.outfit7.talkingtom
Stock Blue: http://market.android.com/details?id=org.adw.theme.stockblue
ST: Red Alert Free: http://market.android.com/details?id=com.oldplanets.redalertwallpaper
ST: Red Alert: http://market.android.com/details?id=com.oldplanets.redalertwallpaperplus
Solitaire: http://market.android.com/details?id=com.kmagic.solitaire
Skype: http://market.android.com/details?id=com.skype.raider
Silent Time Lite: http://market.android.com/details?id=com.QuiteHypnotic.SilentTime
ShopSavvy: http://market.android.com/details?id=com.biggu.shopsavvy
Shopper: http://market.android.com/details?id=com.google.android.apps.shopper
Shiny clock: http://market.android.com/details?id=com.androidapps.clock.shiny
ShareMyApps: http://market.android.com/details?id=com.mattlary.shareMyApps
Sense Glass ADW Theme: http://market.android.com/details?id=com.dtanquary.senseglassadwtheme
ROM Manager: http://market.android.com/details?id=com.koushikdutta.rommanager
Roboform Bookmarklet Installer: http://market.android.com/details?id=roboformBookmarkletInstaller.android.com
RealCalc: http://market.android.com/details?id=uk.co.nickfines.RealCalc
Package Buddy: http://market.android.com/details?id=com.psyrus.packagebuddy
Overstock: http://market.android.com/details?id=com.overstock
OMGPOP Toggle: http://market.android.com/details?id=com.androidapps.widget.toggle.omgpop
OI File Manager: http://market.android.com/details?id=org.openintents.filemanager
nook: http://market.android.com/details?id=bn.ereader
MyAtlas-Google Maps Navigation ext: http://market.android.com/details?id=com.adaptdroid.navbookfree3
MSN Droid: http://market.android.com/details?id=msn.droid.im
Matrix Live Wallpaper: http://market.android.com/details?id=com.jarodyv.livewallpaper.matrix
LogMeIn: http://market.android.com/details?id=com.logmein.ignitionpro.android
Liveshare: http://market.android.com/details?id=com.cooliris.app.liveshare
Kobo: http://market.android.com/details?id=com.kobobooks.android
Instant Heart Rate: http://market.android.com/details?id=si.modula.android.instantheartrate
IMDb: http://market.android.com/details?id=com.imdb.mobile
Home Plus Weather: http://market.android.com/details?id=com.androidapps.widget.skin.weather.homeplus
Handcent SMS: http://market.android.com/details?id=com.handcent.nextsms
H7C Clock: http://market.android.com/details?id=com.androidapps.widget.clock.skin.h7c
GTasks: http://market.android.com/details?id=org.dayup.gtask
GPS Status: http://market.android.com/details?id=com.eclipsim.gpsstatus2
Google Voice: http://market.android.com/details?id=com.google.android.apps.googlevoice
Google Sky Map: http://market.android.com/details?id=com.google.android.stardroid
Google Reader: http://market.android.com/details?id=com.google.android.apps.reader
GoMarks: http://market.android.com/details?id=com.androappsdev.gomarks
Goggles: http://market.android.com/details?id=com.google.android.apps.unveil
Glossy Black Weather: http://market.android.com/details?id=com.androidapps.widget.weather.skin.glossyblack
Fox News: http://market.android.com/details?id=com.foxnews.android
Foursquare: http://market.android.com/details?id=com.joelapenna.foursquared
FBReader: http://market.android.com/details?id=org.geometerplus.zlibrary.ui.android
Fandango: http://market.android.com/details?id=com.fandango
Facebook: http://market.android.com/details?id=com.facebook.katana
Extensive Notes Pro: http://market.android.com/details?id=com.flufflydelusions.app.extensive_notes_donate
Expense Manager: http://market.android.com/details?id=com.expensemanager
Espresso UI (LightShow w/ Slide): http://market.android.com/details?id=com.jaguirre.slide.lightshow
Engadget: http://market.android.com/details?id=com.aol.mobile.engadget
Earth: http://market.android.com/details?id=com.google.earth
Drudge: http://market.android.com/details?id=com.iavian.dreport
Dropbox: http://market.android.com/details?id=com.dropbox.android
DroidForums: http://market.android.com/details?id=com.quoord.tapatalkdrodiforums.activity
DroidArmor ADW: http://market.android.com/details?id=mobi.addesigns.droidarmorADW
Droid Weather Icons: http://market.android.com/details?id=com.androidapps.widget.weather.skins.white
Droid 2 Bootstrapper: http://market.android.com/details?id=com.koushikdutta.droid2.bootstrap
doubleTwist: http://market.android.com/details?id=com.doubleTwist.androidPlayer
Documents To Go: http://market.android.com/details?id=com.dataviz.docstogo
Digital Clock Widget: http://market.android.com/details?id=com.maize.digitalClock
Desk Home: http://market.android.com/details?id=com.cowbellsoftware.deskdock
Default Clock: http://market.android.com/details?id=com.androidapps.widget.clock.skins.defaultclock
Daily Expense Manager: http://market.android.com/details?id=com.techahead.ExpenseManager
ConnectBot: http://market.android.com/details?id=org.connectbot
Colorized Weather Icons: http://market.android.com/details?id=com.androidapps.widget.weather.colorized
Chrome to Phone: http://market.android.com/details?id=com.google.android.apps.chrometophone
CardStar: http://market.android.com/details?id=com.cardstar.android
Books: http://market.android.com/details?id=com.google.android.apps.books
Black Ipad Toggle: http://market.android.com/details?id=com.androidapps.toggle.widget.skin.blackipad
Black Glass ADW Theme: http://market.android.com/details?id=com.dtanquary.blackglassadwtheme
Bing: http://market.android.com/details?id=com.microsoft.mobileexperiences.bing
BeyondPod Unlock Key: http://market.android.com/details?id=mobi.beyondpod.unlockkey
BeyondPod: http://market.android.com/details?id=mobi.beyondpod
BeejiveIM: http://market.android.com/details?id=com.beejive.im
Beautiful Widgets Animations Addon: http://market.android.com/details?id=com.levelup.bw.forecast
Beautiful Widgets: http://market.android.com/details?id=com.levelup.beautifulwidgets
Beautiful Live Weather: http://market.android.com/details?id=com.levelup.beautifullive
BBC News: http://market.android.com/details?id=net.jimblackler.newswidget
Barnacle Wifi Tether: http://market.android.com/details?id=net.szym.barnacle
Barcode Scanner: http://market.android.com/details?id=com.google.zxing.client.android
ASTRO SMB Module: http://market.android.com/details?id=com.metago.astro.smb
ASTRO Pro: http://market.android.com/details?id=com.metago.astro.pro
ASTRO Bluetooth Module: http://market.android.com/details?id=com.metago.astro.network.bluetooth
ASTRO: http://market.android.com/details?id=com.metago.astro
AppBrain App Market: http://market.android.com/details?id=com.appspot.swisscodemonkeys.apps
App Drawer Icon Pack: http://market.android.com/details?id=com.adwtheme.appdrawericonpack
androidVNC: http://market.android.com/details?id=android.androidVNC
AndroidGuys: http://market.android.com/details?id=com.handmark.mpp.AndroidGuys
Android System Info: http://market.android.com/details?id=com.electricsheep.asi
AndFTP: http://market.android.com/details?id=lysesoft.andftp
ADWTheme Red: http://market.android.com/details?id=adw.theme.red
ADWLauncher EX: http://market.android.com/details?id=org.adwfreak.launcher
ADW.Theme.One: http://market.android.com/details?id=org.adw.theme.one
ADW.Faded theme: http://market.android.com/details?id=com.xrcore.adwtheme.faded
ADW Gingerbread: http://market.android.com/details?id=me.robertburns.android.adwtheme.gingerbread
Advanced Task Killer Free: http://market.android.com/details?id=com.rechild.advancedtaskkiller
Adobe Reader: http://market.android.com/details?id=com.adobe.reader
Adobe Flash Player 10.1: http://market.android.com/details?id=com.adobe.flashplayer
Adobe AIR: http://market.android.com/details?id=com.adobe.air
3G Auto OnOff: http://market.android.com/details?id=com.yuantuo
---
Generated by ShareMyApps http://market.android.com/details?id=com.mattlary.shareMyApps
Sent from my Droid
Saturday, October 23, 2010
I recently switched to Time Warner's Business Class Internet Service in my home. Previously I had Consumer grade RoadRunner service also from TWC. In my original configuration I had the TWC Cable Modem to which I connected a Wireless Router from D-Link (DIR-600). I connected the Ethernet cable from the cable modem to the WAN port on the D-Link router. All was well, I could connect wireless devices to the router, and wired devices as well via the 4 port switch built into the D-Link. 
Now along comes business class service, which included a new Cable Modem/Router combo, which was an SMC8014-TWC device. I was not home when the installation took place, and when I got home the D-Link was connected to the new SMC router via an Ethernet cable from a switched port on the back of the SMC to the WAN port on the D-Link. Chaos ensued as neither of my children could connect to the internet and therefor were in imminent danger of having their social lives implode!
The D-Link could no longer reach the internet, and therefor neither could anything else connected to it. My solution was as follows and I hope it is helpful to someone out there.
The SMC device had an internal IP address of 192.168.0.1 with a subnet mask of 255.255.255.0 the D-Link, initially had an internal IP address of 192.168.1.1 with a subnet mask of 255.255.255.0
So first things first, I disconnected the WAN port on the D-Link, and connected my laptop to it via wired cable directly into one of the 4 switched
ports. I then changed the Routers internal IP address to 192.168.0.2 (I also changed the DHCP address range it was giving out to be 192.168.0.100 to 192.168.0.120).


I reconnected the D-Link to the SMC by the Ethernet cable but this time not via the WAN port, instead via one of the switched ports. Then I went to all of the computers attached to the D-Link and made sure they were using 192.168.0.1 as their gateway address and 192.168.0.1 as their DNS address and everything came back up. I accomplished that by disabling and then re-enabling the local area connection on each which caused them to renew their IP configuration from the DHCP server.
Cheers,
Bobster
Sunday, October 03, 2010
Back in April I began to work with Oracle again after a multiple year absence from doing so. So naturally I decided I would install Oracle on my home system so I could reacquaint myself with it. That proved to be more difficult than I expected. I was able to get Oracle 10g Express downloaded and installed but could not connect to it. So, to save someone else some of the grief I went through let me go through the final sequence of steps that resulted in a solid working Oracle development environment.
My end goal was to have the Database, Client, and Developer tools all on one single system. As I no longer have my “server” system running any longer.
First of all, some background on my home system. I have a Toshiba laptop running 64-bit Windows 7 Professional. The laptop has 4 gigs of RAM and is pretty much otherwise standard. I had already installed and setup SQL Server 2008 along with Visual Studio 2008 and 2010. All of these tools were working as designed and expected.

Oracle requires you to establish a free OTN (Oracle Technology Network) account before you can download their software. Once you have an account you can go to the downloads location and the fun begins!
Oracle Editions
To get started I recommend downloading and installing Oracle 10g Express Edition. It is a small footprint starter database edition that should have everything you need as an application developer and it runs well on most Windows OS versions without slowing your system to a crawl. At the time of this writing it is based on Oracle Database 10g Release 2 and is free to developers.
You could also download either the Enterprise or Standard editions of 11g Release 2 as well, however they will consume every bit of the available resources on your development system. This article assumes you have selected the 10g Express path.
Installing the Database
Oracle Database 10g Express Edition downloads as a single EXE installer. I launched the installer and accepted all defaults. It will ask you for a password during the install for the SYSTEM and SYS accounts. Don’t leave it blank and don’t forget the password! My install root path was off my C:\ drive in a subdirectory called: oraclexe. I truly recommend you do NOT allow the installer to place files in the “Program Files” or “Program Files (x86)” paths. Oracle clients seem to have an issue with trying to connect to a database that has a space somewhere in the installation path.
Verifying the Install
After the installation completes, I suggest rebooting your system. You don’t need to, but I found that things tended to change slightly after a reboot, I assume there were some registry changes and so forth that don’t fully apply until a reboot. Either way, once the installation is complete you should have the following Services installed on your system.

The services which we care about at this stage are the OracleServiceXE and the OracleXETNSListener. Don’t worry if you don’t see all of these services now, some of them get installed during the installation of the Oracle Tools for Visual Studio.
The main thing is that you have the two services mentioned above. The first is OracleServiceXE. This is the actual Database service that must be running to provide Oracle Database services. The second service, OracleXETNSListener is the Oracle “Listener” service which is what accepts connections from clients and forwards them on to the actual database. (Your service names may vary if you did not install the Xpress Edition.)
To verify that all the bits and pieces are up and running, first make sure that the Listener and the XE service are in a “Running” state. If not, right click each service and select Start to launch the services. If they are running, open a command prompt and type the following at the prompt:
C:\> TNSPING XE
Then hit enter. If everything is as it should be, you will see something similar to the following output:

The most important part is the last line where it says “OK (20 msec)” that means the listener is up, and reachable by clients! So now fire up your favorite Oracle client and you should be good to go! If you don’t have a client Oracle gives a Java based one away. It is called SQLDeveloper and can be downloaded from here.
Installing Oracle Developer Tools for Visual Studio
So, now that we have installed and verified Oracle Express, it is time to download and install Oracle Developer Tools for Visual Studio which allows you to integrate Oracle development inside Visual Studio, much like you can develop with Microsoft SQL Server in a tightly integrated fashion.
The version I downloaded was ODT 11.2.0.1.2 which adds support for Visual Studio 2010 and .NET 4.0, it also continues to support .NET 2.0 and Visual Studio 2008. I happen to have both installed so I wanted to make sure that whichever environment I was working in, I would have the appropriate Oracle tools.
Once you download the file, which is a ZIP archive, extract the archive be sure to use the option that recreates all the source paths. Then, and this is the part I could not find any documentation for, copy the entire newly created folder tree to your C:\ directory. Launch the setup from there by right clicking and selecting Run As Administrator if you are on Vista or Windows 7.
I did not do this the first 20 or so times I tried, and got various and sundry errors none of which made any sense. The root cause was again, spaces in directory paths. I was originally launching the setup from down inside my “My Documents” tree. Moving the file to the root of C: and running it from there resolved all of the errors. Why in this day and age Oracle cannot tolerate spaces in path names is beyond me, but for whatever reason, it cannot, so don’t try and make it.
Another wrinkle on this install, I installed it to C:\Oracexe\app\rbporter which is what I chose for my home directory for the Oracle Client. By default it wants to self destruct and try to install into your User directory with all those nasty spaces in it. Prevent a needless death and install it into the same structure as the server itself.
Once the install is complete, using whatever your favorite client tool is, run the SQL script called InstallAllOracleASPNETProviders.sql which will be located in a path similar to this:
C:\oraclexe\app\rbporter\product\11.2.0\client_1\ASP.NET\SQL
Notice that there are no spaces in this path!!!!
Verifying the Tools Installation
This script creates various packages, tables, grants etc in your Oracle database to enable a lot of the functionality of the toolset. That’s it! You are done! Now you can fire up Visual Studio, select Server Explorer, and create a new Data Connection. You should see a dialog like the following: (Click to view a larger version.)

If all is well when you press the Test Connection button you will get Test Connection Suceeded message! Once the connection is defined you can expand it and you will see all of the normal Oracle Objects in a tree view.

You are now on your way! Hope this helps!
Cheers,
Bobster
Sunday, February 21, 2010
This should not require a blog post! That being said, I struggled on and off for several days before I hit the right sequence of steps to install the SSMS package onto my existing instance of SQL Server 2008 Express.
When I initially installed SQL Server 2008 I downloaded the version that said it was “with tools”, assuming that meant I would get the light version of the Management Studio along with the instance. Okay, I know what assume means. And as usual, it did not work as it should have. I ended up with a bare bones Express instance.
So, how hard can it be to add the management studio to an existing instance I say? Ridiculously non-intuitive as it turns out. I did not want to do an uninstall and reinstall cycle since I now had SharePoint 2007 up and running with all of its database connectivity working.
Fired up the installer, navigated to the point where you choose to either install a new instance, or add features to an existing instance. Now being your typical geek I thought, well since I have an instance already, and I just want to add the Management Studio the obvious choice here would be to select add to existing instance!
HAH! That’s what I thought, after hours trying with every available download version of the Express installer, I gave up. Figured I would have to eventually bite the bullet and uninstall and reinstall.
Then I decided to go ahead and do what I figured would be a side by side install of two instances, just to get the tools. Figured I could always come back and disable the second instance etc.
So I downloaded the SQL Server 2008 Management Studio Express from Microsoft one last time. Fired up the installer, selected New Instance, rather than add to existing instance, and lo and behold, it would not let me install a new instance, but it did finally let me install the Management Studio!
I am sure to someone at Microsoft this makes perfect sense, I am equally sure they imbibe mind altering substances on a regular basis in enormous quantities! Whatever the case, at least I know have the Management Studio configured and running!
Saturday, February 20, 2010
This is not a new topic for most of us, however there are aspects of using Virtual Machines that are applicable to us as developers and consultants that are not often discussed. As a consultant, when I begin a new project I want to be able to turn over my work and an established proven development environment to the client at the end of the project. With a VM I can give them the exact system I used, with all of the configuration and tooling intact. (Licensing can be a tricky issue so be sure you acquire and use any necessary OS or application licenses from the client up front.)
When I start a new project, especially one of significant size or duration, I usually create a virtual machine to host my development environment and the tools associated with it. I have a number of “base” images that I use to start from, my current crop consists of a Windows XP system, a Vista Business edition (soon to be replaced with a Windows 7 version), a Server 2003 R2 Standard edition system, and a Server 2008 Standard edition system.
I typically keep these systems ‘virgin’ except for updates. The two server VM’s I have provisioned with Application Server roles which installs IIS and all of the supporting files and features since I am primarily a Web developer.
About once a week I start each VM and apply any outstanding OS patches so that the base system is as up to date as possible. I have also created a separate virtual hard drive that I can attach to any of the VM’s in which I keep my current favorite crop of developer tools and addins, my current code snippet library, handy trouble shooting tools and so forth.
These tools are not in an installed state, I keep the installers here, and when one is updated I refresh the installer with the current version. The reason I do this is that sometimes at a client site, I don’t have access to the internet, or I have a very slow connection. Either way, I don’t have to wait to download the tools I need, they are right there.
Development Environment Fail Avoidance
By working entirely within a virtual environment I can avoid a lot of the typical gotcha’s that arise from working on multiple technologies. I can keep my development environment clean and focused on just the technologies I am working with on the current project. I don’t have to wonder if an odd behavior or error I am experiencing is related to the fact that my current copy of Visual Studio is crammed full of 3 versions of Silverlight, two versions of Ajax, and several beta’s of the 4.0 framework!
Application Server Environment Fail Avoidance
My server application environment is similarly focused, instead of turning services on and off, changing database logins and settings, and managing ports on IIS to accommodate multiple projects, I can install a nice, clean server environment. Again, since I am turning this environment over to the client at the end of the development effort, I make sure and acquire licenses from the client for everything used.
Bouncing Domain Memberships
One of the hidden benefits of this approach is domain membership. If you have ever joined your own system to a ‘foreign’ domain you know the baggage and issues that can cause. In one case I know a developer that subsequent to joining his system to his clients domain lost administrative access to the system as the default policies applied rebuilt the local administrators group. It’s just cleaner and more straightforward to keep your personal machine separate from your clients network.
Why Not Use a Client Machine?
So why not just get the client to give you a machine to use? Actually I resist that suggestion like the plague and insist on using VM’s unless the client is totally
opposed. The benefits you get from using a virtual machine, for both you and the client, far outweigh any objection I have ever heard from a client.
Recover From ‘Oh No’ Moments
The foremost benefit I have seen from experience is the ability to recover the environment to a known point in time. Once I have established a VM base system for a particular project I enable differencing hard disks, or snapshots. All VM systems have some form of this feature. What it allows me to do is take a “picture” of my environment at a specific point in time. So if after installing the latest update to a tool, or a service pack, the environment becomes unstable or unusable, I can “roll back” to a point prior to that event. It takes minutes, not the hours or days rebuilding an environment usually takes. I usually take a snapshot at each major milestone or prior to each major change.
Experiment With Freedom
This gives me a huge advantage in being able to experiment with less fear as I know I have a quick easy way to recover from a failed “science experiment” if I need to do so. I can try that service pack or hotfix without worrying if I can recover from a bad result. You can also try that registry hack you read about in a blog post without worrying about never seeing your login screen again! In short you can experiment with relative impunity in a virtual environment.
A side note here, is you can create virtual environments to experiment with beta tools. At this writing I have a virtual environment setup to allow me to experiment with Visual Studio 2010 and SharePoint 2010. I don’t take a chance at corrupting or compromising my primary productivity environment with beta tools and buggy code.
Collaboration
Another benefit that is less than obvious is that if I need to, I can give another developer a complete copy of the environment for them to work on or to help me resolve a problem. Collaboration becomes more effective when all parties are working in the exact same environment. If you encounter a massive issue that is on your critical path it is nice to know that you can get other developers and resources involved, either by sending them a copy of the VM, or enabling remote access to your VM and let others in to assist.
Avoid Vendor Finger Pointing
On at least one occasion I have sent a VM to a vendor to help them diagnose an issue. Their response was that without the VM they would have spent 100’s of hours trying to duplicate the issue. With the VM, their engineers were able to see and experience the issue exactly as I was describing it without having to attempt to reproduce it. They were able to instrument the VM environment with their own test tools and quickly identify and correct the issue. This avoids every developers nightmare of each vendor pointing at another as the source of the issue. You can provide each vendor a copy to work with and take away excuses before they arise. (Be sure your vendor supports their product in a virtual environment first, not all do, and some will use the fact that you are running their product in a virtual machine as the cause of all issues.)
Stay A Step Ahead of Your Client
On several projects, I use my virtual environment to stay a step or two ahead of the actual project. I can experiment with approaches in my own sandbox, get the approach honed to the one I like, and then present that approach cleanly and with less trial and error in front of the client. Which helps minimize confusion and lets you maintain a more professional appearance. If you are a typical developer, you tend to “think with your fingers” meaning you tend to write trial chunks of code to prove out an idea, usually with plenty of failures or not quite right attempts.
Preserve For Posterity
The final advantage I am going to discuss in this post is the ability to cleanly preserve your final result and environment for posterity. You can back a VM up to DVD, or copy it to an external hard drive that is then achieved with a 3rd party or otherwise secured. If 6 months after your project ends, you are called upon to rework or expand on it, or questioned about it, you can produce an exact copy of things as you left them. This avoids the whole issue of who did what, who made what change etc.
You can now approach any issue or question about what you did or did not due with full confidence. You have the evidence and the ability to demonstrate the technical aspects of your project with 100% clarity and conviction.
Having an achieved copy can also help you when you are trying to remember how exactly you solved or approached a specific issue later. I usually archive all deliverable content on the VM image as well. My notes, emails, documents, presentations, diagrams, graphics etc, get placed in a folder on the systems hard drive image. I even keep copies of timesheets, and contracts, statements of work, everything related to the project, all in one place.
On another DVD I keep a copy of the virtual machine software itself, that way I have a better chance of recovering the environment farther down the road if I need to. We all know that software keeps being updated and backwards compatibility is not always as good as we would like.
Typically after 5 years, it is no longer necessary to go back and look, by that time everything will have moved far enough from where you were that there is little to no value to retaining copies in an accessible manner like this. At that point I would discard the backups after retrieving anything I still valued from them.
In conclusion, Virtual Machines are a great way to keep your environment focused on the task at hand. They are not the solution for everything however. Complicated projects may require multiple systems, web servers, application servers, and other systems. They are an effective solution for single purpose development efforts. And of course, not every application is certified to work in a virtual environment. But where possible I strongly advocate the use of this approach to development. It has made my life considerably easier than it would be otherwise.
Saturday, February 13, 2010
I have been using VSeWSS 1.3 since it first became available. As of this writing it is still in the CTP release stage. The previous version, 1.2 is still available, but the biggest advantage of the 1.3 release is support for 64 bit OS which was a prime motivator for me. Also 1.3 now supports publishing sites which was not possible with the previous versions.
VSeWss 1.3 March 2009 CTP is available, and is the version I am using for the purposes of this article. A good blog post about the extensions is available on Paul Andrew’s blog here. Another great overview of the extensions in action is a screen cast from Kirk Evans available on Channel9 here. He has also posted follow up screen casts which are listed as related posts on the Channel9 page I linked to.
It’s great to have these resources and the extensions do make life as a developer much easier, however installing them is more difficult than it needs to be. Hence I am documenting the process I went through, twice, as much for my own future benefit as yours!
I have successfully installed the extensions in two different VM environments, one based on 32bit Server 2003 R2, and the other on 64bit Server 2008 Standard.
Order is Important
Installing the extensions needs to happen after you have the rest of your environment installed and running. The extensions are designed to be installed in Visual Studio 2008 which itself must be installed on the same physical box with your single server SharePoint installation. The extensions are limited to deploying to the localhost and the direct deploy method will not work over the network to an external farm. (They do support packaging so that you can then copy the deployment package to another farm and deploy your project, solution, feature, or web part there.) But the extensions primary purpose is to support the develop, deploy, test cycle while you are actively developing components.
My installation overview that follows is just a high level overview of the process, their are a number of detailed references available on the web for installing WSS or MOSS, and I don’t want to repeat them here as my focus is on the extensions.
The installation order I followed was:
- Install the base OS, get it fully patched.
- Install IIS (6.0, 7.0) depending on your OS. A good article on how to configure IIS for SharePoint is here.
- Make sure ASP.NET (Application Server Role) is applied.
- Enable ASP.NET 2.0 on the Server. Same article as above.
- Install either WSS 3.0 or the full Moss 2007 install, select either Basic, or if you choose Advanced, make sure you select Single Server Farm.
- Run the Wizard and either configure the basic install or create and configure a farm depending on which installation choice you made.
Test your WSS or MOSS installation, make any post installation configuration changes you want. As you do, note the account that your installation is using to access the content databases. This account needs to be added to the local administrators group.
Once you are satisfied that you have everything correctly working on the WSS and MOSS side, install any patches or hotfixes for WSS and MOSS, re-run the wizard, then check for OS patches again. One caveat to note, if you use SQL Server 2008 Express edition or any other flavor of SQL Server 2008 you must install SQL Server 2008 Service Pack 1 or later if you are running on Server 2008 OS. Its a good idea to do this in any event regardless of which OS you are running. But it is required if you are running on Server 2008.
Now that your WSS or MOSS environment is up and running and patched and happy, you can move on to the development tools.
Development Tools
I installed the following and in the following order:
- Installed NotePad++ my favorite free text editor with syntax highlighting etc.
- Installed Visual Studio 2008
- Installed Service Pack 1 for Visual Studio 2008
- Installed the .NET Framework 3.5 SP1
- Installed the SharePoint (or WSS) SDK’s
Now validate your Visual Studio install, setup your source control of choice, and in general assure yourself that Visual Studio is fully setup and configured.
The next part was the tricky part. At least for me, go ahead and install the VSeWSS extensions. The installation will create a new Web Site called VSeWSS if all goes well, and it will select the same application pool that Central Administration is running under.

This site is the service endpoint for the extensions.
The next two steps, for my installations, proved to be crucial. I created a new application pool, I called mine VSeWSS, original huh? 
I used the settings shown in the illustration, basically the same settings that the Central Administration app pool was using. The difference is that I made this app pool run under the identity of the account that I was using to access the content databases, and which I had added to the local administrators group as I mentioned above. In IIS 7 you select the application pool and then select Advanced settings from the actions menu on the right.

In the Process Model I selected Identify and changed the user to the one I had selected. This means the application pool in essence runs with full administrative access as well as full access to the content database. (Good thing this is a development machine!)
And that was it! At that point I was able to get everything working, and built and deployed my first hello world web part and had all the nice shiny goodness of the extensions up and running!
I did run into a few odd errors as I was retrofitting other development systems and one of the worst to overcome was when I was getting an error indicating that no service was listening at the endpoint. Turned out that the .NET Framework 3.0 and 3.5 was installed on that machine prior to IIS being installed.
To fix that I ran the apsnet_regiis –i and the servicemodelreg –i commands from the appropriate locations in the Framework directories. You may also need to add a mapping between svc files and the aspnet_isapi.dll file in your IIS mappings maintenance area if the first two commands don’t resolve the issue.
Happy SharePoint development! Please feel free to comment if you have questions or issues and I will be happy to try and help.
Cheers,
Robert Porter
Recently my son had noticed that I was reading eBooks on my BlackBerry Storm using MobiPocket reader.
Since he and I share an interest in a lot of the same books, he inquired as to if he could do the same thing with his cell phone. Unfortunately his phone is not capable of running MobiPocket reader. I remembered that I still had my Sony Clie NX70V which in its day was a fantastic Palm device.
And I used to use it to read eBooks with MobiPocket as well. The problem was that I was not sure I could get it working on a modern OS, all of our home systems are running Windows 7 of one version or another.
But I figured it was worth a shot. So I dug it out, charged it up overnight and the next day set about trying to get it to sync with my PC.
That turned out to be next to impossible on Windows 7. I could get HotSync to work, and the Palm Desktop software installed just fine, but the USB Drivers for the Clie would not install. I had the original CD to work from and spent several hours on the web trying various approaches.
I think the real problem was that I am running a 64 bit OS and the drivers were written pre XP days and there was just no way Windows 7 would work. Since I have Home Premium edition and since my processor does not support the hardware virtualization options, I could not run Windows 7’s XP Mode or Virtual PC which will no longer install on Windows 7 Home Premium. (Yes I am going to upgrade to Pro soon, but without the CPU support for virtualization that will only buy me a little bit.)
Since I am a developer I, I live in Virtual Machines, so I had found a virtual machine system that worked with Home Premium 64 bit Windows 7, which is Sun’s Virtual Box (Now Oracles' VirtualBox), this software was a snap to install, it’s open source, and supports just about every OS I have ever heard of. I have Windows Server 2008 R2, 2003 R2, XP, and Win7 all running in VM’s. It Supports snapshots and rollbacks, and most importantly for this article, it supports USB device capture.
So I fired up my XP virtual machine, installed the Clie software from the original CD, captured the Palm device on the USB menu, pressed the HotSync button on the cradle and voila! I had syncage!
Now, I just downloaded the latest reader software from MobiPocket, installed it to the Palm, got the PID identifier for the reader, added it to my Fictionwise account and downloaded the books I was interested in, synced them to the Palm and my son was happily clicking away and reading eBooks!
As an aside, I have a full SharePoint (WSS 3.0 and MOSS) including SQL Express 2008 with Reporting Services, installed in one of the VM’s complete with Visual Studio 2008 and all the SDK’s, Ajax, Silverlight and the v3 extensions for Visual Studio 2008 installed. I use it to develop and test SharePoint code. I have another VM based on XP that is an older Visual Studio 2005 based development environment for when I have to work with older code that I can’t upgrade. And I am building another VM now to investigate Visual Studio 2010 and SharePoint 2010. Virtual Machines are the best way to keep a focused development environment and avoid clogging your main system with beta’s and multiple versions of applications.
I tried VMWare’s products but found Virtual Box, faster, more reliable, easier to configure and maintain and much less resource intensive than anything from VMWare. And since I could no longer run VPC from Microsoft on Home Premium I could no longer use their product which used to be my main VM system.
Some takeaways from this little odyssey where:
- If you keep the hardware, hang onto the driver software! I found hundreds of forum posts while searching for a solution to get my Palm going from people that no longer had the original install media and therefore no longer had the all important drivers. And apparently you can not get them from Sony any longer. So hang onto those CD’s! (I made ISO images of both while I was at it and have them safely stored on an external USB hard drive as the CD’s do apparently go bad.)
- Virtual Machines are your friend! And not just for developers! A VM based OS is easy to setup and makes it possible to extend the life of older hardware and software, or just simply to be able to test software and devices in different OS configurations.
- Just because you have outgrown a gadget does not mean you won’t find someone or some use for it later. So if it is not valuable enough to sell, hang onto it, you may find a new use for it!
I hope this helps someone out there think of other ways to use VM’s, and if their are any Sony Clie NX70V users out there that need the original CD, I have an ISO image you can download! Just email me and I will work with you to get a copy!
Cheers,
Robert Porter
Monday, December 14, 2009
Anyone that deals with Enterprise Content Management (ECM) shudders when the subject of email comes up. With good reason! It truly is a massive problem in almost any size of organization. The problem space is itself ill defined and not well understood by anyone. Governments and Corporations large and small struggle with the issue, mostly by either brute force archiving, or ignoring it. It plays a huge role in eDiscovery and can cause innumerable security and personnel issues when it is mismanaged.
First and foremost is a lack of a unified governance consensus in any industry. It is a problem I, and I suspect every other consultant, re-visits every time we work with a new client.
Email is ubiquitous, most people have more than one active email address at any given time, work, home, throwaway accounts, etc. And now with almost every mobile phone capable of sending and receiving emails or at least texts, we have a whole new area of concern, e.g. protecting email and managing it on these devices, a great many of which are personal and not owned assets. Access to email is ever more widespread as well. POP/IMAP/Web Based etc. And then there is forwarding of email from home to office, office to home.
Most organizations have some form of “Acceptable Use” policy that at least peripherally touches on email usage. As always the problem is enforcement and monitoring. If Mega Corp has a policy that forbids forwarding of, or receiving of corporate email on anything other than corporate approved and owned computers, and an employee does forward or receive emails on, say their phone, which they then lose, and as a result a competitor obtains corporate sensitive data, where does the liability for that loss start and stop? Or sensitive HR information is compromised, such as salary figures, or perhaps a sensitive disciplinary action is exposed prematurely to one or more of the affected parties? The list of potential issues is obviously huge. Yet few if any entities have established policies along with compliance monitoring and auditing.
Even now, after countless lawsuits and public news stories, I still encounter people that conduct side business or extensive personal business on a corporate email system and assume they have an expectation of privacy. Email is no more, and quite possibly considerably less, secure than a post card. Even while travelling only on internal networks, email can be inadvertently misdirected, wrongly addressed, intercepted, not delivered, corrupted, or exposed to parties it was never intended for. As a quick aside, never put anything in an email you would not want to see being read aloud on the evening news!
This post is to set the stage as it were for a series of posts I am planning to help define, understand, and quantify the issues encountered with email in general, but especially as it relates to document management. Over the next several posts we will examine how email is used, and misused, existing solutions to assist in managing it, and methods we all as users can implement to be more conscious of and responsible for our use of a largely mismanaged medium. I hope you will find some benefit in the process, I know I will!
Cheers,
Bob Porter
Friday, December 11, 2009
A sure sign that you are in trouble with a customer, or your co-workers, is when you come to the realization that they truly do not understand what you are trying to tell them. By its very nature, IT work is very technical, filled with jargon and TLA’s (Three Letter Acronyms), and routinely deals with complex subject matter. Heck, I don’t even know what all the TLA’s of the day mean, and I am immersed in the cause nearly 24/7/365!
So, if you are attempting to explain to a decision maker, why you need them to authorize a $30,000.00 purchase of software and licenses you had better be able to make the case for it in terms they can understand. This is crucial, even if you have an excellent relationship with your management and they trust the fact that if you say they need 10,000 widget licenses, then you really do, they often have to defend that need to others. And if they don’t really understand it, how can they convey the need onward?
But how do you educate your audience? The answer is to find common ground and experience and convey your needs and ideas in non jargon, clear language. You need to communicate! You need to educate! Think about the core concepts you are trying to get across, spell out acronyms, add explanations where necessary, in short demystify your language and your topic. It is not that hard to get the core concepts across to a layperson if you approach the subject carefully, having thought things out ahead of time.

I am constantly surprised when I realize just how much jargon and tech speak creeps into my everyday conversations. And to make it worse not everyone in the industry uses the same words to describe the same concepts. Take any 10 document management professionals and ask them to describe a Taxonomy, Content Types and Metadata, you will get 29 different answers! That is because a lot of the concepts we work with every day are subject to context to clarify the meaning.
Don’t fall into the trap of trying to talk down to your audience either. Most of the people you will be dealing with are in all likelihood at least as well educated as you, have at least as much experience in their fields as you do in yours, and will correctly feel you are a condescending twit if you try to overly “dumb” down your topic.
Instead of talking down, talk too and with them, but doing so requires some preparation on your part. You need to be able to clearly explain the key concepts of what you are talking about in terms that are common to both of you. There is plenty of help available to do this, it just takes some time. I frequently turn to the web and look up definitions for terms I know and use every day but are not necessarily common outside my field of expertise. Often a couple of minutes of web searching will reveal others attempts to explain the same concepts or needs. I often stumble on White Papers and other sources that were written as sales aides. Sales people live and die on the ability to explain complex concepts in terms lay people can understand, more importantly, often in terms of answering the unspoken question all management asks “Why do I care?”
The next step is to practice your approach until you are comfortable with the concepts you are trying to convey in terms you normally would not use. And here is where I will let you in on a little secret! When you are asked a question, don’t answer it with the first thing that pops into your head! Count to 5, while you think about your answer, make sure you stay away from unnecessary terminology and unneeded technical terms. Speak clearly, confidently, but slowly, with deliberation. Works almost every time!
The reverse is true in our day to day lives. How often do we sit down with a SME (Subject Matter Expert) and exhaustively go over their job with them in order to understand their needs and be sure we are solving the actual problem they need solved? My first client in any industry is always a huge learning experience as I learn what I can of their jargon and TLA’s. We can’t solve a problem if we don’t understand it, and we have no trouble when it comes time for us to sit down and work hard to understand their world and their language, but we seem to be very reluctant to explain ours.
So next time you see your audiences eyes begin to glaze over, step back, start to work out how you are going to educate them in a way that ensures you are both understanding what you are saying! Your life, and theirs, will be much better for the effort.
Cheers,
Bob Porter