BX24 and PowerShell for managing a build process

by Mike Linnen 18. July 2006 21:01
BX24 and PowerShell for managing a build process

I have been doing some BX24 development again lately.  I have also been reading a lot about the new shell support that Microsoft has pre-released called PowerShell (formerly known as Monad).  Well since I have been using the same batch files and VBScript files to manage my build process for BasicX source since 2001 I thought it might be time to look at another alternative. 

I need to be able to do the following:
  • Perform command line compiles of the BX24 project
  • Allow for the source to reside anywhere on the hard drive and still be able to compile.
  • Initiate a compile of all BX24 projects so I do not have to do them one at a time
  • Parse the BasicX.err file to determine if the compiler found errors
  • Launch an editor that shows the BasicX.err file only when an error exists
  • Be able to manage some registry entries specific to the BasicX IDE
  • Have a limited set of scripts that do not require any changes to support the build process
  • Allow for multiple project files to co-exist in the same folder. This means I need to save off the BasicX.err file into another file if I want to preserve what the results where from the compile.

After reading some about PowerShell it was very apparent that it would support anything I needed to do.  The main huddle I needed to over come was learning the syntax that revolved around PowerShell.  Fortunately it is based on the .Net framework so the majority of it was fairly easy to adjust to. 

Since I already had a VBScript file that did most of the above tasks I started dissecting what it did first.  The last time I touched this script was in 2001.  The script did the pieces around changing the registry entries and launching the compiler but it had no support for parsing the error file and managing many project files.  Here is the script that I ended up with:

param ([string]$WorkingDirectory)
# Define some script variables$chip_type="BX24"
# Save the current dirrectory so we can return to it
Push-Location
# If a working directory was passed in lets change to it
If ($WorkingDirectory){Set-Location $WorkingDirectory}
# Get the project files to process
$projectFiles = Get-ChildItem *.bxp 
foreach ($project in $projectFiles){$project_file = $project.name.split(".")[0]
# Use the current directory as the working directory
$work_dir = $project.DirectoryName
# Set some registry entries for the basicx IDE
$configEntry = "hkcu:\software\vb and vba Program Settings\basicx\config"
Set-ItemProperty ($configEntry) -Name Chip_Type -value 
$chip_typeSet-ItemProperty ($configEntry) -Name Work_Dir -value 
$work_dir
# determine from the registry where the basicx executable is installed
$program_dir = Get-ItemProperty ($configEntry) -Name Install_Directory
# Map the P drive to the basicx install directory for convieniance
if (Test-Path p:) {}else {subst P: $program_dir.Install_Directory}
# Remove the error file if it exists
if (Test-Path basicx.err){del basicx.err}
if (Test-Path ($project_file + ".err")){del ($project_file + ".err")}
# Launch the compiler
P:\basicx.exe $project_file /c
# Wait for the compiler to finish
$processToWatch = Get-Process basicx$processToWatch.WaitForExit()
# Unmap P: drive
if (Test-Path p:){subst P: /d}
# Check for errors and launch the error file if some do exist
$CompileResult = get-content basicx.err
If (($CompileResult -match "Error in module").Length -gt 0){notepad basicx.err}
# Copy the error file off so it does not get overwritten when multiple
# projects are being compiled in a single directory
copy-item basicx.err -destination ($project_file + ".err")} 
# Restore the original location
Pop-Location

Well that was pretty painless.  I basically had a script that managed processing all BasicX project files in a given folder.  Next I needed to have another script that found all the project folders for a given folder.  This also meant processing projects in sub folders.  This higher level script would launch the script above to do the compile.  I ended up with the following script:

# Save the current dirrectory so we can return to it
Push-LocationSet-Location ..\
# Get a list of all projects
$project_Files = Get-ChildItem -recurse -include *.bxp | sort $_.DirectoryName$lastDir=""
foreach($project in $project_Files)
{
# Since we can have multiple projects in a folder and we send the
# working folder to the build script we want to skip folders we already
# processed
if ($lastdir -ne $project.DirectoryName)
{./tools/build $project.DirectoryName  $lastDir = $project.DirectoryName}}
Pop-Location

Well that too was pretty easy.  I am beginning to really respect the power of PowerShell.  I can do so much more than what I was able to do with VBScript and do it easier.  Later I will but together a sample BX24 project showing how I use these scripts and the folder structure I place them in.

Using an alternative editor for the BasicX IDE

by Mike Linnen 16. July 2006 16:13
Using an alternative editor for the BasicX IDE

Although the BasicX Integrated Development Environment works for writing, compiling and downloading source code for small quick projects once you start using it a lot for writing source code it tends to be lacking features.  However the folks at Netmedia were nice enough to allow for command line execution of their IDE to compile and download code.  This opens up the opportunity to use your favorite editor to write source code and launch the IDE via command line to compile the source.  I have been using these command line options since 2001 to make my development environment a little more to my liking.  In this blog post I will talk about how I manage the process and the tools I use.

First a couple notes about some things that might trip you up in using the command line options.  The BasicX IDE wants to know the base directory where your projects live.  This is ok if you want to manage this directory in the IDE every time you switch to another folder or if you only have one project.  However if you are like me you have many projects and you don't want to have to load up the IDE to change this base directory every time you work on one of them.  Next the chip setting for BX24 or BX01 is also set from the IDE and is needed for the command line compile.  I bounce back and fourth between projects that use one or the other chip so my IDE could be set for either one at any given time. 

Neither the base directory or the chip setting is offered as an option in the command line.  Although Netmedia does store these items in the Windows Registry so an external program can modify them before launching the command line compile.

So I created a vbscript that sets the IDE options and then calls the compiler.  The script accepts 3 parameters:
 1 (Required) - Project file
 2 (Optional) - /c
 3 (Optional) - /d

The script supports drag and drop capabilities so you can use it 1 of 2 ways. 
1 - Drag the project file onto the script
2 - Call the script from your editor or a batch file

I usually create a build.bat file that I just call from the text editor.  The build batch file is specific to the project that I am working on so I generally keep it in the main folder of my project.

I have included the script files along with a sample BX24 project so you can look at what I did and maybe make use of it for your own BasicX projects.

I also use a shareware text editor called TextPad.  This editor supports syntax highlighting and multiple documents.  The nice thing about it is that I can pass TextPad the project file and it can load up all the source modules that are associated with the project.  I often use a batch file to launch the textpad editor and open all the source code for the project.  I have also included this batch file in the bx24.zip so you can see how it is done.

Tags:

Robotics

Scrum process for a team of 1

by Mike Linnen 12. July 2006 01:41
Scrum process for a team of 1
del.icio.us Tags: ,

On my flight from Charlotte to Phoenix this week I listened to a number of podcasts.  One of my favorites is Hanselminutes.  Scott Hanselman talks about a lot of thins I am interested in.

In the Line of Scrumage podcast Scott talks about applying the Scrum agile process in his work place.  Most of what he talked about are things that we have been using at JDA Software Group Inc.  However Scott brings up an interesting point about applying Scrum processes to a 1 person team.  I have often thought about this for some of my own personal projects.  I often do small projects for myself and I end up playing the roles of product owner, business analyst, developer, and tester.  So could I effectively use Scrum as a way to manage these projects?  Well I have sort of attempted this on a couple projects and here is what I found out.

The part about building a backlog of stories that are features to get into a product and giving them a priority is something that has worked for me vary well.  I find it easier to express the features that I wish to get into my projects as a story.  The story format lets me capture the user, action and benefit in a quick step.  If I had to spend a lot of time working out the functional documentation of a given feature I am afraid I would not end up completing the feature in a timely fashion.  Even prioritizing the features helps me focus on what needs to be developed next. 

However the process of story pointing features and planning them out over multiple sprints just does not seem to give me any real benefit.  The main reason for this is that since these projects are personal projects they do not get a consistent amount of time dedicated to them.  I might have 3 hours 1 week and 0 hours the next to dedicate to the project.  So planning for sprints and trying to determine my velocity is somewhat difficult.  This aspect of Scrum ends up not being part of my personal projects.  This is ok for me though because I feel more organized by maintaining a backlog with priorities.

Web page updates

by Mike Linnen 6. July 2006 22:44
Web page updates

Added the ability for the blogger to receive emails when a new comment is posted to a blog entry.

Added the ability to contact me by email via a contact form.

Day 2 of USFA Nationals

by Mike Linnen 4. July 2006 14:01
Day 2 of USFA Nationals

Day 2 of Shawn's participation in the USFA Summer Nationals was on Monday 7/30/2006.  Check out Day 1 at USFA Nationals for some previous results.  Also check out the pictures that I posted that were taken during our trip. 

Wake up call at 5:30 am was surprisingly on time.  We headed to breakfast at 6:25am and then we hurried to the lobby to request out car.  How many valets does it take to find your keys you ask?  Well more than two.  After a 12 minute wait I headed in the room to assist in the search.  I searched high and low and finally found them laying on the floor.  Meanwhile Denise stood anxiously starring at her watch as the time we were supposed to check into the fencing tournament arrived.  We hurried on to the World Congress Center and fortunately when we arrived at 7:15am there was no line.  So Shawn checked in for his much anticipated saber event, hurried to base camp to wait to be summoned to the "Piste" (fencing strip).

Shawn's saber event had 97 other fencers.  The initial seading based on previous tournament results placed Shawn in 58.  This meant he fell pretty close to the middle of the other fencers.  After the pools are completed the seeding would be re-evaluated and Shawn would be matched up with his first Direct Elimination opponent. 

The pools started at 8:50am and completed at 9:40am.  Shawn fenced 6 bouts during the pool.  Shawn won 1 and lost 5 bouts.  Most of the bouts were very close and Shawn made them very exciting.  His last bout was where he earned his win.  Shawn used a fencing technique called the line to lure his opponent into a failed attack and then he scored by striking on the opponet's right side.  This worked for 3 of the five points during this bout.  The final score of this bout was 5 to 1 with Shawn as the victor.  Shawn moved up one spot in the seeding after the pools were completed.

After the pools the Direct Elimination (DE) tournament began on strip 44 of the venue.  Shawn's opponent was a little shorter than he was which was an advantage by reach for Shawn.  The DE is a best 2 out of 3 bouts that are 5 points each.  Shawn started off with the first bout on a win that was 5 to 3.  Very impressive start!!  The second bout went to Shawn's opponent in a 2 to 5 loss.  It was going to have to go to the 3rd and final bout to determine who was going to advance to the next round.  This sure makes a parent nervous watching your child get so close to winning his first National DE.  But Shawn ended up coming a little short on the points and he lost the bout 5 to 3. 

Well we once again are very proud of Shawn at how well he did in the USFA Summer Nationals of 2006!  He showed so much determination at doing his best and being a real winner even if he did not advance into the finals of the tournament.  Shawn had a lot of fun doing this tournament and we can all expect to see him at the next Summer Nations that will take place in Miami, Florida next year around the fourth of July. 

Tags:

Family

Pictures of the USFA Summer Nationals posted

by Mike Linnen 4. July 2006 13:26
Pictures of the USFA Summer Nationals posted

I uploaded some pictures of the Fencing tournament for anyone that is interested.  For right now I don't have a good way to allow for comments to be left on individual pictures.  So leave any comments about the pictures on this blog entry.

Day 1 of USFA Nationals

by Mike Linnen 2. July 2006 00:28
Day 1 of USFA Nationals

Well day 1 has come and gone.  We started the day out arriving at the Georgia World Congress center in Atlanta at 8am.  We immediately made our way to the armory to check Shawn's fencing equipment.  First off Shawn's borrowed Epee fencing mask failed inspection.  So off to the vendors in search of a new mask.  Fortunately at these events the vendors have some good prices that make buying equipment a little more enticing.  So we went ahead and purchased a couple more body cords, a lame, cuff, and an epee mask.  Ouch!! there goes 200 bucks.  Oh well it would of been 250 if we done it mail order. 

Next we inspected the freshly purchased equipment and had no issues in the armory.  Everything we needed to complete for the event was done now so all we had to do was wait for the pools to start. 

Fencing time came around real quick.  Shawn went into his first event a bit on the nervous side.  That was understandable because the last time he competed in an epee event was last year at the Atlanta regional's.  We had a number of problems with his epee weapons.  A fencer is supposed to have two weapons.  Right before each bout the weapon is inspected for the proper tip spacing, and compression rating as well as electrical connections.  If any of these fails the fencer gets a yellow card.  If a fencer gets more than one yellow card he could have points taken away from him.  So the fencer needs to fall back on his second weapon.  Shawn ended up with 3 failed weapons across 7 bouts.  We need to work on getting him to inspect his own weapon before entering the fencing area.  Needless to say he ended up with one red card which ended up with a point against Shawn. 

Shawn fenced 6 bouts in the pool for epee.  He lost the first 5 bouts which discouraged him in a lot of ways.  Then he had a little longer wait before his 6th bout so he had some time to think about his mistakes.  Shawn's opponent in this last bout was about a foot and a half taller than him.  This kid had some serious reach over Shawn.  This was not going to be an easy bout for Shawn at all.  But this did not discourage him he ended up with a 5 to 4 win and we were all very excited.  Even Shawn's coach was a little surprised that he was able to pull off such a good win. 

Well the pools ended and now it was time for the direct elimination tournament to begin.  Shawn's first opponent was another kid that seriously looked like a 17 year old rather than a 12 year old.  This kid was almost 2 feet bigger than Shawn.  In the direct elimination tournament the fencers do 3, 5 point bouts.  The first fencer that wins 2 of the 5 point bouts advances to the next round.  The first bout went to Shawn's opponent in a 5 to 2 loss.  But this did not discourage Shawn, he went on to beat his opponent in a 5 to 3 win.  So now it was getting exciting, both fencers won one bout each and they were going to have to fence a 3rd bout to determine who should advance to the next round.  Shawn fought hard in this last bout but he ended up a little short and lost 5 to 2.

Well we were very proud of Shawn for doing so well.  He showed some great courage in doing his best.  And above all he had a lot of fun.

Check out Day 2 of the USFA Summer Nationals for more information on Shawn's progress in the event.

Tags:

Family

About the author

Mike Linnen

Software Engineer specializing in Microsoft Technologies

Month List