Woodturning for January

Jan27

Slimline pen "Cigar" profileWell after my scare in December, I got back in the shop in January for some new woodturning projects.  It started with a custom made detail gouge that I created as part of a turn and learn session at the January Buckeye Woodworker and Wood Turners meeting.  As usual, it was another great meeting.  I had a chance to meet and talk with Dave Hout who started the club back in '92 and currently has a woodturning show on the DIY Network.  I actually got back into woodturning after seeing several of Dave's shows, so it was kinda neat to get a chance to talk with him for a few minutes and get a few pointers.  In fact the design for the detail gouge is Dave's creation.

I must say that after several months of attending the BWWT and the North Coast Wood Turners clubs, that I am finally getting more confident in my turning skills.  I still have a lot to learn but I am getting better with every project.

Detail Gouge

Before Christmas I had started work on a set of pens to give as presents.  Unfortunately, I ran out of time to get them done for Christmas.  After running into some difficulties with a pepper grinder on my ShopSmith, I was lucky enough to get a brand new Nova 1624 lathe for my birthday.  In return I agreed to make some pen and pencil sets for my in-laws.  Well, now that I had a new lathe, I decided to finish up the pen set I had started in December.

Slimline pen setI think the pens turned out great.  I can definitely see some differences, both in my attention to detail when sanding and in the quality of my finishes.

I have some great projects in the work for February.  Hopefully I'll find a few more hours to get in the shop.  With everything going on with DotNetNuke lately, finding spare time is getting a bit difficult.  BWWT and NCWT are having an art showing this summer and I hope to get my skills to the point where I can get a piece or two in the show.  So the month of February will be spent perfecting some ideas I have before I start on the actual show pieces.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Woodturning: A blessing and a curse

Jan02

Christmas Burl Bowl frontAs those who have followed my blogs for the past couple of years know, besides computers, I love working with wood.  I have had my own wood shop in the basement for the past 6 years and when I have some free time I love to go down and put my more creative side to work.  I have often heard developers debating about whether programming is an art or a science or a bit of both.  I have personally spoken to many different programmers throughout the years and have found that many people in our field have a strong passion for creative endeavors, whether it is painting, music or even woodworking.  I think it is a natural extension of the creativity a developer uses when programming.  It is much more than a mere technical exercise of taking a set of specs and turning them into a completed application.

One of my joys for the past several years has been creating Christmas gifts for family and friends.  For the past two years, this has primarily been woodturning projects.  I love woodturning because I can go from a concept to a completed project in less than a weekend.  As my skills have improved, I am getting to the point where I can turn a complete project in a single day.

This year for Christmas, I decided to make my wife a set of matching salt and pepper grinders.  Unfortunately, this project turned out to be a little more complicated and required more precision that I was able to squeeze out of my meager woodturning equipment and skills.  So I fell back to a project I knew I had the skill and equipment to complete.

I had purchased a piece of Amboyna Burl about a year and a half ago.  I had been saving this piece of wood until my skills had improved, since turning burl is a little more challenging.  The swirling wood grain, bark inclusions and embedded dirt can be hard on the tools and can make getting a decent cut difficult.  Also, since Amboyna burl is very expensive (this small 6 x 6 x 3 inch block was over $80), I didn't want to turn it unless I thought my skills were up to the task.  It is a beautiful wood, but too expensive for practicing my woodturning.

My skills had been steadily improving this past year so I decided to go for it.  Once I got going, I was able to rapidly (ok - rapid is a relative term since I am sure I was quite slow compared to many other turners in my local woodturning clubs) define the shape and get my bowl to its finished shape.  Just a little bit of sanding and a few coats of lacquer and in less than 6 hours I had gone from a hunk of wood to a beautiful bowl that my wife would be delighted to place on the mantel above the fireplace.

Christmas Burl Bowl back

I think the bowl turned out great.  I need to do a little buffing yet to really get the finish completed, but overall, the wife was extremely delighted.

All did not go without a hitch though.  It turns out that I am allergic to either the wood or something that was in the wood.  When turning, wood chips are flying everywhere.  The get in your shirt, in your face and hair and even like to nestle in the little crevice behind the ear.  While I was turning, I noticed that I was getting a little itch behind my right ear.  I didn't think anything of it.  I brushed away the  wood chips and dust and continued turning.  As the afternoon wore on, the itch turned into a mild burning.  My ear was definitely getting a little sensitive, but I persevered.

Well, after the better part of an afternoon I finished my task and had a bowl worthy of a Christmas gift to my wife.  When I went upstairs to shower up, I noticed that I had a rash and hives all over my face and a little bit on my hands.  It didn't appear too bad so I didn't think too much of it.  By the next morning, my hands and face were on fire.  I had developed large blisters behind both ears and I was in pretty bad shape.  For the next week I struggled to heal from what appeared to be a bad bout of poison ivy.  My hands had gotten so bad that I could barely type.  Fortunately, after about 6 days, most of the blisters and hives had disappeared, leaving a few itchy patches, a little swelling and some nasty looking red blotches on my hands.

Bad allergic reaction

This episode has taught me that I need to pay better attention to what is going on when I am turning.  I love working with exotic woods, but since I know I have a wide range of plant allergies, it would probably be prudent to take more safety precautions and wear more protective gear when working with new woods.  Thank goodness that it wasn't any more serious.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


SubSonic and PowerShell

Jan01

I have been a fan of Rob Connery's work on SubSonic for a while now.  As readers of my blog know, I have also been exploring PowerShell quite a bit lately as well.  Recently, I had a need to update a DotNetNuke module to PowerShell 2.0.3.  Unfortunately, some of the APIs had changed between SubSonic 1.x and 2.x.  Because of the desire to keep the module Medium Trust compatible I don't use the build-provider and instead pre-generate my DAL.

In the past I had used the sample web app to generate the classes for just those tables needed for my module.  In this iteration, I decided to go the SubCommander route and generate the needed classes from the command-line.  The SubSonic web-site has a batch file to handle this task, but I decided to use a command line that didn't date back to my college days.  While the batch file is a workable solution, it really is showing its age, especially when compared with PowerShell.

SubCommander is an extremely powerful tool and has dozens of options and command-line parameters.  Using it can be a daunting task.  Fortunately,  using a command-line script can significantly simplify the API, and when combined with the tab expansion features in PowerShell Plus makes it trivial to use.

So I fired up PowerShell Plus and created the New-DAL function.

function global:get-sqluser($username="", $password="", [switch]$forcesecure) {
    # We are creating an object to which we'll add custom properties
    $user = New-Object object | select-object UserName, Password
    
    if ($username.length -eq 0) {
        # No username was specified, so we should use Get-Credential to prompt for a user
        # We also define a default username in order to suppress console output
        # The results are added as synthetic properties to the PSObject we created above
        $cred = Get-Credential "SqlUser"
        $user.UserName = $cred.GetNetworkCredential().Username
        if ($forcesecure) 
        {
            $user.Password = $Cred.Password
        }
        else
        {
            $user.Password = $cred.GetNetworkCredential().Password
        }
    } else {
        $newpassword = $password
        
        # If we are using secure passwords, then we need to convert our string to a securestring
        if ($forcesecure) 
        {
            $newpassword = New-Object System.Security.SecureString
            [char[]]$password | for-each {$newpassword.AppendChar($_)}
        }
        
        # In this case we can just create synthetic properties using the values passed to the function
        $user.UserName = $username
        $user.Password = $newpassword
    }
 
    # Return our synthetic object
    $user
}
 
# This function uses SubSonic to generate the Data Access Layer.
function global:New-Dal(
    $server = "localhost",
    $db,
    $username = "",
    $password = "",
    $namespace = "Test" ,
    $lang = "vb",
    $BuildPath = "D:\Batch\DAL",
    $SonicPath = "D:\Program Files\SubSonic\SubSonic 2.0.3\SubCommander\",
    $configfile = "",
    [switch]$excludetables,
    [switch]$excludeods,
    [switch]$excludeviews) { 
 
    $sonic = "sonic.exe"
    
    if ($configfile.length -gt 0)
    {
        if (Test-Path $configfile)
        {
            $generateconfig = "generate /config '$configfile'"
 
            # Due to some difficulties with Invoke-Expression we'll change directories
            # to excecute the command and then reset the directory when we are through.
            $savepath = $pwd
            Set-Location $SonicPath
 
            if ($excludetables -eq $FALSE) {Invoke-Expression(".\$sonic $generateconfig")}
 
            Set-Location $savepath
        }
        else 
        {
            "Please provide a valid configuration file name when using the configfile parameter."
            exit
        }
    }
    else
    {
        # Use a database helper function that allows us to get a password in a secure manner.
        # If the username is not an empty string then the function just returns the original username/password
        $cred = get-sqluser $username $password
    
        # Create some standard argument strings for SubCommander
        $generatetables= "generatetables /override /out '$BuildPath' /lang $Lang"
        $generateods= "generateODS /override /out '$BuildPath' /lang $Lang"
        $generateviews = "generateviews /override /out '$BuildPath' /lang $Lang /viewStartsWith View"
    
        
        "Removing and recreating the target directory: $BuildPath ..."
        del $BuildPath -recurse -force
new-item $BuildPath -itemtype Directory -force | Out-Null 
    
        $username = $cred.username
        $password = $cred.password 
    
        # Building our provider string.  Everything is parameterized.
        $Provider = "/server $server /db $db /userid $userName /password $password /generatedNamespace $namespace"
    
    
        "Generate using connection string: "
        "`tserver             = $server"
        "`tdb                 = $db"
        "`tuserid             = $userName"
        "`tpassword           = $password"
        "`tgeneratedNamespace = $namespace"
        "`n"
        
        # Due to some difficulties with Invoke-Expression we'll change directories
        # to excecute the command and then reset the directory when we are through.
        $savepath = $pwd
        Set-Location $SonicPath
    
        if ($excludetables -eq $FALSE) {Invoke-Expression(".\$sonic $generatetables $provider")}
        if ($excludeods -eq $FALSE) {Invoke-Expression( ".\$sonic $generateods $provider" )}
        if ($excludeviews -eq $FALSE) {Invoke-Expression( ".\$sonic $generateviews $provider" )}
        
        Set-Location $savepath
    }
}
 

I have created a whole library of database related functions like Get-SqlUser, which I was able to re-use in the New-Dal function.  To really see why PowerShell is such a powerful solution, lets look at a quick video where we see the new function in action.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5



"The Accidental Geek"

Joe Brinkman

Joe Brinkman

I am a long-time geek who is lucky enough to work on DotNetNuke full-time. You will also see the occassional post on my other passion - woodworking.



Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in  anyway.

© Copyright 2008

Calendar

<<  August 2008  >>
MoTuWeThFrSaSu
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

View posts in large calendar