Wednesday, February 28, 2007

Scratch Programming

I have started doing more scratch programming, one off little bits of code that I use and throw away. I found that I am not coding as much at work as I need to be, or want to be for that matter. I am loosing my touch.

Like any thing else, if you don't use it you loose it.

When I create projects I like to follow a specific file structure. Nothing fancy, I use a solution folder with folders for lib, src and tests. So when I create my scratch solutions I want to create the same folder structure, but there is no easy way to do it with Visual Studio. I tried to create a project template, which would work if what I wanted was skeleton projects. But what I want are skeleton folders and the VS templates won't create those.

What I wound up doing was create an MSI using NSIS that would create the folder structure and copy core libraries that I like to use. So far it is working out pretty good and was surprisingly simple to create, not by hand of course but with HM NIS Edit, a free tool to create and edit NSIS scripts.
; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Scratch Template"
!define PRODUCT_VERSION "1.0"
;!define PRODUCT_DIR_REGKEY "SoftwareMicrosoftWindowsCurrentVersionApp PathsMbUnit.Cons.exe"

; MUI 1.67 compatible ------
!include "MUI.nsh"

; MUI Settings
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
;!insertmacro MUI_PAGE_LICENSE "............\path\to\licence\Your\SoftwareLicence.txt"
; Components page
; Directory page
; Instfiles page
; Finish page
!insertmacro MUI_PAGE_FINISH

; Language files
!insertmacro MUI_LANGUAGE "English"

; MUI end ------

OutFile "ScratchSetup.exe"
InstallDir "$DOCUMENTSVisual Studio 2005ProjectsScratchNewSolution"
;InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show

Section "MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "GenericSolution.sln"
CreateDirectory $INSTDIRlib
CreateDirectory $INSTDIRsrc
CreateDirectory $INSTDIRtest

Section "MbUnit" SEC02
SetOutPath "$INSTDIR\lib\MbUnit"
SetOverwrite try
File "\lib\MbUnit\MbUnit.Framework.dll"

Section "Log4Net" SEC03
SetOutPath "$INSTDIR\lib\log4net"
File "\lib\log4net\log4net.dll"

Section "Enterprise Library (June 2006)" SEC04
SetOutPath "$INSTDIR\lib\EntLib.2006.01"
File "\lib\EnterpriseLibrary.2006.01\EntLibConfig.exe"

;Section -Post
; WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\lib\MbUnit\MbUnit.Cons.exe"

; Section descriptions
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} ""
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} ""
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} ""
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} ""

Add the appropriate files to the Sections, compile and your ready.