## 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_PUBLISHER "HomeNet"!define PRODUCT_WEB_SITE "http://blog.ddpruitt.net";!define PRODUCT_DIR_REGKEY "SoftwareMicrosoftWindowsCurrentVersionApp PathsMbUnit.Cons.exe"; MUI 1.67 compatible ------!include "MUI.nsh"; MUI Settings!define MUI_ABORTWARNING!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!insertmacro MUI_PAGE_COMPONENTS; Directory page!insertmacro MUI_PAGE_DIRECTORY; Instfiles page!insertmacro MUI_PAGE_INSTFILES; Finish page!insertmacro MUI_PAGE_FINISH; Language files!insertmacro MUI_LANGUAGE "English"; MUI end ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"OutFile "ScratchSetup.exe"InstallDir "$DOCUMENTSVisual Studio 2005ProjectsScratchNewSolution";InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""ShowInstDetails showSection "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite ifnewerFile "GenericSolution.sln"CreateDirectory $INSTDIRlibCreateDirectory$INSTDIRsrcCreateDirectory $INSTDIRtestSectionEndSection "MbUnit" SEC02SetOutPath "$INSTDIR\lib\MbUnit"SetOverwrite tryFile "\lib\MbUnit\MbUnit.Framework.dll"...SectionEndSection "Log4Net" SEC03SetOutPath "$INSTDIR\lib\log4net"File "\lib\log4net\log4net.dll"SectionEndSection "Enterprise Library (June 2006)" SEC04SetOutPath "$INSTDIR\lib\EntLib.2006.01"File "\lib\EnterpriseLibrary.2006.01\EntLibConfig.exe"...SectionEnd;Section -Post;  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\lib\MbUnit\MbUnit.Cons.exe";SectionEnd; Section descriptions!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} ""!insertmacro MUI_DESCRIPTION_TEXT${SEC02} ""!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} ""!insertmacro MUI_DESCRIPTION_TEXT${SEC04} ""!insertmacro MUI_FUNCTION_DESCRIPTION_END